- 人力资源行业常见面试题汇总,助你提前了解面试要点(8-23)
- 人力资源行业常见面试题汇总 这里有一些人力资源领域常见的面试问题,是小编特意收集并编排的,准备从
该链接出自Javin Paul,由赵峰进行翻译
Java 线程面试问题
面试Java时多线程和并发是核心内容。应聘证券投资银行前台岗位,需掌握大量多线程知识。投资银行业务中,多线程和并发是重点关注领域,尤其与电子交易相关。面试官常提出复杂Java线程题目。面试官主要核实应聘者对Java线程和并发技术的掌握程度,原因是许多候选人对此了解仅停留在浅层。高容量、低延迟的电子交易系统本质上需要并发处理。以下是我经常在不同场合向应聘者提出的Java线程相关考题。我没有附上答案,但会尽可能提供提示,有时提示本身就能帮助解答问题。当前关于Java5并发包中并发类和并发容器的问题数量正在上升,ThreadLocal、阻塞队列、计数信号量和并发哈希表是这些问题中比较常见的对象。
15个Java多线程面试题及回答
现有三个线程T1、T2和T3,如何确保T2在T1运行结束后才启动,同时T3在T2运行结束后才开始执行
这类并发编程的题目常在初次或语音交流环节提出,意图在于考察对”join”函数的掌握程度。此类线程题目相对容易,能够借助join函数完成解答。
Java中Lock接口相较于synchronized块有何好处?要构建一个高效的缓存,这个缓存需要让多个用户能够读取,但只准许一个用户进行写入,以此确保数据的完整性,你会采用什么方法来实现它?
锁机制在并发处理和多线程应用中的核心长处在于,它对读取和写入操作实行了分离控制,可以协助构建类似ConcurrentHashMap的高效能数据集合,同时支持条件化的等待与唤醒。当前Java开发者面试环节,提问方式正逐步转向依据应聘者的应答内容进行动态调整。我极力主张你参加多线程面试前仔细研读锁机制,由于它们在电子交易终端的客户端缓存和交易连接空间构建中广泛运用。
3)在java中wait和sleep方法的不同?
电话面试里常会问到有关Java线程的几个问题。主要区别在于,当使用wait时,线程会释放所占用的锁,而sleep状态下锁仍然被保留。Wait这个方法多用于实现线程之间的协作,sleep则主要用于让线程暂时停止活动。
4)用Java实现阻塞队列。
这是一个比较复杂的多线程考核题目,作用相当广泛。首先,它能够考察应聘者运用Java语言编写线程程序的实际能力;其次,可以评估应聘者对并发环境的认识程度,并且围绕这个题目可以引申出许多其他问题。比如,如果应聘者通过wait和notify方法完成了阻塞队列的设计,可以让他使用Java 5提供的最新并发工具类重新实现一遍。
5)用Java写代码来解决生产者——消费者问题。
与此前的议题颇为相似,不过这个议题更为典型,时常在面试中出现。在Java环境下,如何应对生产者——消费者议题,其实存在多种途径,此前我已介绍过一种借助阻塞队列完成的方式。偶尔他们还会探讨如何构建哲学家进餐的模型。
6)用Java编程一个会导致死锁的程序,你将怎么解决?
这个Java线程面试题是我特别看重的,由于死锁现象在开发多线程程序时相当常见,可许多应聘者无法编写出无死锁的代码,他们感到十分吃力。只需告知他们,存在N种资源以及N个线程,并且要完成某个任务就必须获取所有资源。此处n值可简化为2,数据规模越大,情形就越错综复杂。研究Java死锁现象,旨在规避其发生,从而深化对死锁的认识。
7)?什么是原子操作,Java中的原子操作是什么?
关于基础的java线程知识,有一个核心考点需要掌握,那就是如何实现一个不可分割的同步动作,下面将探讨这个要点
Java中的volatile关键字有什么功能?如何应用它?在Java中,它与synchronized方法有什么区别?
Java 5发布以及内存模型更新之后,利用volatile关键字处理线程问题的关注度显著提升。需要掌握volatile变量如何保障并发场景下的数据可见性,并准备好应对相关提问。
9)?什么是竞争条件?你怎样发现和解决竞争?
这是一道常见于多线程面试的难题,难度较高。许多面试官会询问最近碰到的竞态条件,以及如何处理这类问题。有时他们会给出简短代码,要求找出其中的竞态条件。可参考我先前撰写的关于Java竞态条件的文章。在我看来这是极为出色的java线程面试题目,它能够精准评估应聘者处理竞争状态的实践能力,或者编写无数据竞争或其他竞争情形的代码水平。在处理并发问题的优秀著作里,《Concurrency practices in Java》是首选之选。
你怎样运用线程转储文件?你怎样剖析线程转储文件?
UNIX系统下可执行kill -3命令,随后线程堆栈信息会记录到日志文件中,Windows系统则需按下CTRL+Break组合键。这是一个既基础又专业的关于线程的面试题,然而若被问及如何解读这些信息,很多人会感到无从下手。
启动函数被调用时,运行函数会自动开始运作,运行函数不能单独被启动,必须借助启动函数来执行
这是另一个广为人知的Java并发面试题。这同样是我初次编写线程代码时的疑虑。如今这类问题多在电话面试或初级Java面试的初始阶段被提出。回答要点在于,当调用start()方法时,会生成一个新线程,随后执行run()方法中的指令。然而,若你直接使用run函数,它既不会另行开启线程,也不会运行调用线程中的代码。想要了解更多,可以查阅我先前撰写的《start与run函数的差异》一文。
12)?Java中你怎样唤醒一个阻塞的线程?
这是一个涉及线程和阻塞的复杂议题,存在多种应对策略。当线程遭遇IO操作卡顿时,似乎没有手段能够强行终止它。倘若线程是因为执行wait()、sleep()或join()函数而陷入停滞状态,则可以采用中断机制,同时抛出InterruptedException以使其恢复执行。我早先撰写的《怎样应对java中的线程阻塞》包含了大量关于处理线程阻塞的内容。
在Java语言里,CyclicBarrier和CountDownLatch的功能不同,前者用于多线程同步等待,后者用于线程计数器倒数。CyclicBarrier线程会等待所有参与方到达某个点后再继续执行,而CountDownLatch线程会等待计数器归零后继续执行。CyclicBarrier可以重用,CountDownLatch只能使用一次。CyclicBarrier支持所有线程同时被唤醒,CountDownLatch是逐个线程唤醒。CyclicBarrier适用于需要协作的线程场景,CountDownLatch适用于需要倒数完成的场景。
这个线程题目主要考察你是否掌握JDK5中的并发工具包。二者不同之处在于,前者能够重复利用已经通过的关卡,后者则不具备这个功能。
14)?什么是不可变对象,它对写并发应用有什么帮助?
有一个广为人知的面试题,虽然不直接考察线程知识,却对许多人很有帮助。这个关于Java的题目有时会变得异常复杂,比如要求设计一个固定不变的类,或者询问为何字符串类型具有不可变特性。
在并发场景下碰到的主要困难有哪些?如何处理这些问题?
多线程和并发程序里经常会出现内存接口、竞争状况、死锁、活锁以及饥饿等问题。这类问题层出不穷,一旦出错,查找和修复都非常困难。这些多线程问题多数源于面试题,而非实际应用场景。
补充的其它几个问题:
1)?在java中绿色线程和本地线程区别?
2)?线程与进程的区别?
3)?什么是多线程中的上下文切换?
4)死锁与活锁的区别,死锁与饥饿的区别?
5)?Java中用到的线程调度算法是什么?
6)?在Java中什么是线程调度?
7)?在线程中你怎么处理不可捕捉异常?
8)?什么是线程组,为什么在Java中不推荐使用?
采用Executor框架来处理线程,要比直接让应用程序去创建和维护线程更为优越,因为它能更高效地分配资源,并且可以更好地控制线程的生命周期,同时减少了线程创建和销毁的开销,另外还能提供更好的并发性能,最终使得系统运行更加稳定。
Java里Executor和Executors有什么不同?
怎样在Windows系统里找到占用CPU时间最久的线程?首先查看任务管理器,其次使用命令行工具。在Linux系统中,可以通过top命令或ps命令来查询。这些方法能够帮助识别哪个线程消耗了最多的处理器资源。
温馨提示:本内容地址http://m.ysjob.cc/article/articledetail-387713.html转载请注明,以上Java线程面试问题:多线程与并发在投资银行面试中的重要性?资讯信息来自颍上人才网(颍上地区最大的颍上人才网,颍上人才网)