高级Java多线程面试题及回答

这篇具有很好参考价值的文章主要介绍了高级Java多线程面试题及回答。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

高级Java多线程面试题及回答

 

  高级Java多线程面试题及回答

  1)现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行?

  这个线程问题通常会在第一轮或电话面试阶段被问到,目的是检测你对”join”方法是否熟悉。这个多线程问题比较简单,可以用join方法实现。

  2)在Java中Lock接口比synchronized块的优势是什么?你需要实现一个高效的缓存,它允许多个用户读,但只允许一个用户写,以此来保持它的完整性,你会怎样去实现它?

  lock接口在多线程和并发编程中最大的优势是它们为读和写分别提供了锁,它能满足你写像ConcurrentHashMap这样的高性能数据结构和有条件的阻塞。Java线程面试的问题越来越会根据面试者的回答来提问。我强烈建议在你去参加多线程的面试之前认真读一下Locks,因为当前其大量用于构建电子交易终统的客户端缓存和交易连接空间。

  3)在java中wait和sleep方法的不同?

  通常会在电话面试中经常被问到的Java线程面试问题。最大的不同是在等待时wait会释放锁,而sleep一直持有锁。Wait通常被用于线程间交互,sleep通常被用于暂停执行。

  4)用Java实现阻塞队列。

  这是一个相对艰难的多线程面试问题,它能达到很多的目的。第一,它可以检测侯选者是否能实际的用Java线程写程序;第二,可以检测侯选者对并发场景的理解,并且你可以根据这个问很多问题。如果他用wait()和notify()方法来实现阻塞队列,你可以要求他用最新的Java 5中的并发类来再写一次。

  5)用Java写代码来解决生产者——消费者问题。

  与上面的问题很类似,但这个问题更经典,有些时候面试都会问下面的问题。在Java中怎么解决生产者——消费者问题,当然有很多解决方法,我已经分享了一种用阻塞队列实现的方法。有些时候他们甚至会问怎么实现哲学家进餐问题。

  6)用Java编程一个会导致死锁的程序,你将怎么解决?

  这是我最喜欢的Java线程面试问题,因为即使死锁问题在写多线程并发程序时非常普遍,但是很多侯选者并不能写deadlock free code(无死锁代码?),他们很挣扎。只要告诉他们,你有N个资源和N个线程,并且你需要所有的资源来完成一个操作。为了简单这里的n可以替换为2,越大的数据会使问题看起来更复杂。通过避免Java中的死锁来得到关于死锁的更多信息。

  7) 什么是原子操作,Java中的原子操作是什么?

  非常简单的java线程面试问题,接下来的问题是你需要同步一个原子操作。

  8) Java中的volatile关键是什么作用?怎样使用它?在Java中它跟synchronized方法有什么不同?

  自从Java 5和Java内存模型改变以后,基于volatile关键字的线程问题越来越流行。应该准备好回答关于volatile变量怎样在并发环境中确保可见性、顺序性和一致性。

  9) 什么是竞争条件?你怎样发现和解决竞争?

  这是一道出现在多线程面试的高级阶段的问题。大多数的面试官会问最近你遇到的竞争条件,以及你是怎么解决的。有些时间他们会写简单的代码,然后让你检测出代码的竞争条件。可以参考我之前发布的关于Java竞争条件的文章。在我看来这是最好的java线程面试问题之一,它可以确切的检测候选者解决竞争条件的经验,or writing code which is free of data race or any other race condition(这句which is free of data race不会翻译)。关于这方面最好的书是《Concurrency practices in Java》。

  10) 你将如何使用thread dump?你将如何分析Thread dump?

  在UNIX中你可以使用kill -3,然后thread dump将会打印日志,在windows中你可以使用”CTRL+Break”。非常简单和专业的线程面试问题,但是如果他问你怎样分析它,就会很棘手。

  11) 为什么我们调用start()方法时会执行run()方法,为什么我们不能直接调用run()方法?

  这是另一个非常经典的java多线程面试问题。这也是我刚开始写线程程序时候的困惑。现在这个问题通常在电话面试或者是在初中级Java面试的第一轮被问到。这个问题的回答应该是这样的,当你调用start()方法时你将创建新的线程,并且执行在run()方法里的代码。但是如果你直接调用run()方法,它不会创建新的线程也不会执行调用线程的代码。阅读我之前写的《start与run方法的区别》这篇文章来获得更多信息。

  12) Java中你怎样唤醒一个阻塞的线程?

  这是个关于线程和阻塞的棘手的问题,它有很多解决方法。如果线程遇到了IO阻塞,我并且不认为有一种方法可以中止线程。如果线程因为调用wait()、sleep()、或者join()方法而导致的阻塞,你可以中断线程,并且通过抛出InterruptedException来唤醒它。我之前写的《How to deal with blocking methods in java》有很多关于处理线程阻塞的信息。

  13)在Java中CycliBarriar和CountdownLatch有什么区别?

  这个线程问题主要用来检测你是否熟悉JDK5中的并发包。这两个的区别是CyclicBarrier可以重复使用已经通过的障碍,而CountdownLatch不能重复使用。

  14) 什么是不可变对象,它对写并发应用有什么帮助?

  另一个多线程经典面试问题,并不直接跟线程有关,但间接帮助很多。这个java面试问题可以变的非常棘手,如果他要求你写一个不可变对象,或者问你为什么String是不可变的。

  15) 你在多线程环境中遇到的共同的问题是什么?你是怎么解决它的?

  多线程和并发程序中常遇到的有Memory-interface、竞争条件、死锁、活锁和饥饿。问题是没有止境的,如果你弄错了,将很难发现和调试。这是大多数基于面试的,而不是基于实际应用的Java线程问题。

  补充的其它几个问题:

  1) 在java中绿色线程和本地线程区别?

  2) 线程与进程的区别?

  3) 什么是多线程中的上下文切换?

  4)死锁与活锁的区别,死锁与馅饼的区别?

  5) Java中用到的线程调度算法是什么?

  6) 在Java中什么是线程调度?

  7) 在线程中你怎么处理不可捕捉异常?

  8) 什么是线程组,为什么在Java中不推荐使用?

  9) 为什么使用Executor框架比使用应用创建和管理线程好?

  10) 在Java中Executor和Executors的区别?

  11) 如何在Windows和Linux上查找哪个线程使用的CPU时间最长?

  java编程语言扩展阅读

  Java编程语言

  我对进程、线程的了解,主要是学生时代看过的`一本大概叫做“C++面象对象多线程编程”的书,是美国人写的。后来学Java编程语言,一直是马马虎虎,以完成任务为目标,没有像学C++那样打实基础(C++的基础也忘差不多了,汗)。这不做东西时又碰到麻烦,经过排查解决,有几个简单知识点做一下笔记。

  第一个是run()与start()。

  翻翻以前自己写的代码,是用start()启动线程的,这次居然犯糊涂用run()来跑,不出错才怪呢。相信有不少Java编程语言程序员像我一样,在不懂的时候,就按个点,查看方法列表,跟据方法名想当然地理解。这种方法可以快速入手做东西,但像多线程这类的东西,还是需要打牢基础,不然麻烦多多。

  run()只是一个普通方法,是Runnable接口定义的,用来执行线程最终要做的事情的方法,它本身没有特别之处,就像main方法一样,启动一个线程后,run()方法会被调用。所以,run()方法没有创建多线程,run()方法里的东西还在调用者线程里跑。

  start()方法是Thread类定义的,它是真正负责启动一个线程的。调用此方法后,将会从线程创建一个新的线程出来(强调从当前线程创建新线程是因为一些属性比如daemon会被继承),然后在新线程执行run()方法。

  第二个就是InterruptedException。

  典型地,我们在run()方法中常用while循环,并且每次循环通常有Thread.sleep(long)调用,这个sleep(long)方法会抛出InterruptedException。之前对这个异常的理解有误,以为这是个“错误”,其实这只是表示一个状态。看官方文档有点拗口,简单地说,这个异常被抛出表示线程收到中断请求(你也可以理解为线程正在被终止,通常是这样,但不绝对。

  为了线程安全、保证数据的一致性,Java编程语言提倡用温和手断中止线程,温和的意思就是run()方法里的代码有机会决定什么时候退出),比如外部调用interrupt()来中断此线程。sleep()收到中断异常意味着sleep时外部发来了中断请求信号,这时如果没有需要善后的操作,就可以退出while循环,结束线程了。

  我以前的代码是catch掉打一句日志,虽然正常工作了,但是却是错误的。

  第三个是Thread.interrupted()和thread.isInterrupted()的区别(后者thread代表Thread的一个实例)。

  两者都返回线程的当前状态,区别在于前者返回当前状态后,会复会这个状态。比如Thread.interrupted()得了true,但此后线程状态被立即置为了false。如果不想改变这一状态,可以用isInterrupted(),比如Thread.currentThread.isInterrupted()。

  还有就是中断状态是会被一些操作改变的,所以不能只用此状态来断段线程是否要退出。线程应该另外设置一个退出标记(如果需要控制线程的运行与否的话)。

  Java高级开发工程师岗位的工作职责说明

  职责:

  1.负责公司产品研发,代码编写及评审。

  2.负责系统框架的搭建及系统调优。

  3.负责需求调研、可行性分析和需求分析,撰写相关的技术文档。

  4.产品上线后,配合运维团队保障平台的稳定,解决相关技术问题。

  5.协助并完成其他各类技术开发任务。

  6.带领团队解决问题,并对初中级开发进行指导。

  任职要求:

  1.本科及以上学历,计算机相关专业,5年以上相关工作经验。

  2.熟悉主流的Java开发框架如Spring, SpringMVC, Mybatis,SpringBoot,SpringCloud等。

  3.了解 Kafka Redis等。

  4.掌握数据库相关知识,熟悉Oracle数据库,能熟练运用SQL语言,具备一定的SQL调优经验。

  5.熟悉Linux系统,熟悉SVN、GIT等代码版本管理工具,熟悉Maven等项目工具。

  6.熟练使用redis 缓存,熟悉搜索引擎Solr或elasticsearch。

  7.具有技术文档编写的能力。

  8.熟悉Linux、Tomcat,Apache,Nginx等开源的服务器和Web服务中间件。

  9.基本功扎实,逻辑思维严谨,善于独立思考,乐于分享,良好的协作意识及团队精神。

经典Java基础面试题回答

  经典Java基础面试题回答

  1、GregorianCalendar类是什么东西?

  GregorianCalendar提供了西方传统日历的支持。

  2、ResourceBundle类是什么?

  ResourceBundle用来存储指定语言环境的资源,应用程序可以根据运行时的语言环境来加载这些资源,从而提供不同语言的展示。

  3、为什么Java里没有全局变量?

  全局变量是全局可见的,Java不支持全局可见的.变量,因为:全局变量破坏了引用透明性原则。全局变量导致了命名空间的冲突。

  4、如何将String类型转化成Number类型?

  Integer类的valueOf方法可以将String转成Number。

  5、SimpleTimeZone类是什么?

  SimpleTimeZone提供公历日期支持。

  6、while循环和do循环有什么不同?

  while结构在循环的开始判断下一个迭代是否应该继续。do/while结构在循环的结尾来判断是否将继续下一轮迭代。do结构至少会执行一次循环体。

  7、Locale类是什么?

  Locale类用来根据语言环境来动态调整程序的输出。

  8、面向对象编程的原则是什么?

  主要有三点,多态,继承和封装。

  9、介绍下继承的原则

  继承使得一个对象可以获取另一个对象的属性。使用继承可以让已经测试完备的功能得以复用,并且可以一次修改,所有继承的地方都同时生效。

  10、什么是隐式的类型转化?

  隐式的类型转化就是简单的一个类型赋值给另一个类型,没有显式的告诉编译器发生了转化。并不是所有的类型都支持隐式的类型转化。

  面试自我介绍范文

  各位考官好,今天能够站在这里参加面试,有机会向各位考官请教和学习,我感到非常的荣幸。希望通过这次面试能够把自己展示给大家,希望大家记住我。我叫---,今年--岁。汉族,法学本科。我平时喜欢看书和上网浏览信息。我的性格比较开朗,随和。能关系周围的任何事,和亲人朋友能够和睦相处,并且对生活充满了信心。我以前在检察院实习过,所以有一定的实践经验。在外地求学的四年中,我养成了坚强的性格,这种性格使我克服了学习和生活中的一些困难,积极进去。成为一名法律工作者是我多年以来的强烈愿望。

  如果我有机会被录用的话,我想,我一定能够在工作中得到锻炼并实现自身的价值。同时,我也认识到,人和工作的关系是建立在自我认知的基础上的,我认为我有能力也有信心做好这份工作。

  公务员是一个神圣而高尚的职业,它追求的是公共利益的最大化,它存在的根本目的是为人民服务,为国家服务。雷锋说过:人的生命是有限的,而为人民服务是无限的,我要把有限的生命投入到无限的为人民服务当中去。这也是我对公务员认知的最好诠释。所以,这份工作能够实现我的社会理想和人生价值,希望大家能够认可我,给我这个机会!

  面试前的准备

  首先,你得对自己做出一个正确的定位。选择一个适合自己的行业,而不是适合自己专业的行业。多和他人交流,听取他们的.意见,最后结合自己的性格特征,兴趣取向等方面,搞清楚自己能做什么?要做什么?想清楚了就去准备,去做。永远不要忘记“机会总是留给那些准备好的人的”。

  其次,通过各种渠道查找有关用人单位的信息,包括公司的主要产品、经营项目、管理方式,以及他们期望职工在这个特定的岗位上应该具有的素质。这对你在面试时应对面试官的提问会很有帮助的。必要时还可以提前去一次面试地点,以熟悉环境,你甚至要搞清楚厕所的方位。

  第三,设计良好的个人形象。我给的建议是着装最好与用人单位尽量保持一致或相似,以给对方一种亲切感,让面试官觉得你是他们的一份子,你想成为他们的一份子。如果这方面有困难的话,也可以按以下建议着装,最终目的都是要展示自己的精神面貌,给用人单位留下一个良好的印象。

  一)男士可以穿西装,以毛料的深蓝色西装为宜,全身颜色最好不要超过三种,可以配一双黑色皮鞋、一双深色袜子和一条领带。西装要平整、清洁、有裤线;西装口袋不放任何东西;必需拆除西装商标。面试前应理发、修指甲、刮胡子、去鼻毛,务必处理好这些细节。另外面试当天记得洗两次脸,稍稍用些护发、护肤品,以淡雅的香气为佳;西装上也可以适当喷些香水,最好是前一天晚上就喷好,保证不要太刺鼻,否则会让面试官感到不舒服。无论是护发、护肤品,还是香水务必保持气味一致。

  二)女士可以穿正规套装、套裙,也应遵守三色原则。套裙最好不要高过膝盖三厘米,穿丝袜,配一双系带皮鞋,不宜穿高跟鞋。可以配一个小巧耳环或胸针,切忌有太多的饰物。做到大方、得体。发型文雅、庄重、梳理整齐、长发最好用发夹夹好,不能染鲜艳的颜色。化淡装,不留长指甲,最好涂自然色的指甲油。

  文章来源地址https://www.toymoban.com/news/detail-462270.html

到了这里,关于高级Java多线程面试题及回答的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 2023最全Java面试题及答案汇总

    面试前还是很有必要针对性的刷一些题,很多朋友的实战能力很强,但是理论比较薄弱,面试前不做准备是很吃亏的。这里整理了很多面试常考的一些面试题,希望能帮助到你面试前的复习并且找到一个好的工作,也节省你在网上搜索资料的时间来学习。 面试官:为什么不建

    2024年02月08日
    浏览(32)
  • 2023 年Java面试题及答案大全(持续更新)

    本文分为十九个模块,分别是:「Java 基础、容器、多线程、反射、对象拷贝、Java Web 、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、MyBatis、RabbitMQ、Kafka、Zookeeper、MySQL、Redis、JVM」 Java 基础 1. JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,Jav

    2024年02月08日
    浏览(39)
  • 大厂最全1100道Java面试题及答案整理(2023最新版)

    春招,秋招,社招,我们 Java 程序员的面试之路,是挺难的,过了 HR,还得被技术面,小刀在去各个厂面试的时候,经常是通宵睡不着觉,头发都脱了一大把,还好最终侥幸能够入职一个独角兽公司,安稳从事喜欢的工作至今... 近期也算是抽取出大部分休息的时间,为大家准

    2024年02月09日
    浏览(28)
  • 2023 年最新版Java面试题及答案整理(完整版,超详细)

    程序员一步入中年,不知不觉便会被铺天盖地的“危机感”上身,曾经的那个少年已经不在,时间就是这样公平。就算你能发明Java语言,随着时间的推移,你注定还是要成为慢慢变蔫的茄子,缓缓变黑的葡萄。 看着金九银十就要来临的消息,吓得我周末赶紧拿出了面试资料

    2024年02月14日
    浏览(35)
  • 【Java】常见面试题:多线程

    努力经营当下 直至未来明朗 答:① 进程包含线程; ② 线程比进程更轻量,创建更快、销毁也更快; ③ 同一个进程的多个线程之间共用一份内存和文件资源,而进程和进程之间则是独立的文件和内存资源;线程共用资源就省去了线程分配资源的过程 ④ 进程是资源分配的基

    2024年03月21日
    浏览(29)
  • Java面试被问了几个简单的问题,却回答的不是很好

    作者: 逍遥Sean 简介:一个主修Java的Web网站游戏服务器后端开发者 主页:https://blog.csdn.net/Ureliable 觉得博主文章不错的话,可以三连支持一下~ 如有需要我的支持,请私信或评论留言! 前言 前几天参加了一个做web开发的面试,被问了几个问题,虽然有些题目比较偏,但是确

    2024年02月08日
    浏览(54)
  • Java线程池常见面试题详解

    池化技术 池化技术是一种常见的编程技巧, 把一些能够复用的东西(比如说数据库连接、线程)放到池中,避免重复创建、销毁的开销,在需要时可以重复使用这些预先准备的资源,从而极大提高性能。(提前保存大量资源, 以备不时之需) 线程池、数据库连接池、Http 连接池等

    2023年04月26日
    浏览(68)
  • SpringSecurity常见面试题汇总(超详细回答)

    Spring Security是一个基于Spring框架的安全框架,提供了完整的安全解决方案,包括认证、授权、攻击防护等功能。 其核心功能包括: 认证:提供了多种认证方式,如表单认证、HTTP Basic认证、OAuth2认证等,可以与多种身份验证机制集成。 授权:提供了多种授权方式,如角色授权

    2024年04月16日
    浏览(20)
  • Spring常见面试题汇总(超详细回答)

    Spring框架是一个开源的Java应用程序开发框架,它提供了很多工具和功能,可以帮助开发者更快地构建企业级应用程序。通过使用Spring框架,开发者可以更加轻松地开发Java应用程序,并且可以更加灵活地组织和管理应用程序中的对象和组件。 Spring框架的核心思想是依赖注入(

    2024年02月15日
    浏览(24)
  • SpringBoot常见面试题汇总(超详细回答)

    Spring Boot 是一个基于 Spring 框架的开源框架,用于快速创建独立的、生产级别的、可运行的 Spring 应用程序。它采用了约定优于配置的理念,使开发者可以不需要手动配置大量的 Spring 配置文件,而快速搭建出符合生产要求的、可运行的应用程序。 Spring Boot 通过自动配置,可以

    2024年01月18日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包