首页 > 编程知识 正文

java 多线程面试总结,java并发面试题

时间:2023-05-05 19:26:57 阅读:33618 作者:2874

在Java面试中多线程和并发问题是必不可少的。 如果你想获得股票投资银行的前台信息职位,你需要准备很多关于多线程的问题。 多线程和并发是投资银行业务中非常受欢迎的话题,特别是关于电子商务的发展,他们会向面试者询问很多容易混淆的Java线程问题。 面试官只是想确保面试者有足够的Java线程和并发知识。 之所以这么说,是因为在候选人中,表面上浮动的面向直接市场交易的大容量和低延迟的电子商务系统本质上是同时性的。 这些是我更改时间和地点喜欢的Java线程的问题。 我没有提供答案,但如果可能的话,我会给你线索。 在某些情况下,这些线索足以回答问题。 现在,越来越多的人引用Java5并提出有关并发工具和并发集合的问题。 在这些问题中流行ThreadLocal、BlockingQueue、CountingSemaphore和ConcurrentHashMap。

15个Java多线程问题和答案

1 )目前有三个线程: T1、T2和T3。 如何确保T1运行后运行T2,T2运行后运行T3?

此线程的问题通常在第一次或电话面试阶段被询问。 它旨在检测你是否熟悉“join”方法。 这个多线程问题比较简单,可以用join法实现。

2 )在Java上,锁定接口比同步块有什么好处? 需要实现高效的缓存。 可以由多个用户阅读,但只允许一个用户写,以保持完整性。 你怎么实现那个?

lock接口在多线程和并发编程中的最大优点是它提供了单独的读和写锁定,并能满足高性能的数据结构和条件阻塞,如ConcurrentHashMap。 Java线程面试问题现在根据面试者的回答进行提问。 强烈建议您在接受多线程面试之前仔细阅读Locks。 因为它目前经常被用于建立电子商务的最终客户端缓存和交易连接空间。

3 ) java中等待和睡眠的方法有什么不同?

通常在电话面试中经常被问到的Java线程面试问题。 最大的区别是等待时wait解除锁定,sleep保持锁定。 wit通常用于线程之间的交互,sleep通常用于暂停执行。

4 )通过Java实现阻塞队列。

这是一个比较困难的多线程面试问题,可以达到很多目的。 首先,可以检测候选人实际上是否能够用Java线程写程序; 第二,可以检测候选人对同时场景的理解,并据此可以提出很多问题。 如果他使用wait (和notify )方法实现了阻塞队列,则可以要求他使用最新的Java5并发类再写一次。

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

和上面的问题很相似,但是这个问题更经典,面试的时候也会问下面的问题。 用Java如何解决生产者——消费者问题,当然有很多解决方法,但我分享了用分块队列实现的方法。 有时我会问哲学家如何实现饮食。

6 )用Java编程导致死锁的程序后,如何解决?

这是我最喜欢的Java线程的面试问题。 这是因为,即使死锁问题在编写多线程并发程序时非常普遍,许多候选人也无法编写无死锁代码。 他们现在在挣扎。 请告诉他们,他们有n个资源和n个线程,并且需要所有资源来完成一个操作。 为了简单地将这里的n替换为2,数据越大问题看起来越复杂。 有关死锁的详细信息可以通过避免Java死锁来获得。

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

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

8 ) Java的volatile的关键是什么? 怎么用? Java与同步方法有什么不同?

随着Java5和Java内存模型的变化,基于volatile关键字的线程问题越来越普遍。 必须准备回答volatile变量在并发环境中如何确保可见性、顺序性和一致性。

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

这是多线程面试高级阶段出现的问题。 大多数面试官都会问你最近遇到的竞争条件,以及你是怎么解决的。 他们也有时间写简单的代码,让他们检测代码的竞争条件。 请参考以前发表的关于Java竞争条件的文章。 我认为这是最好的java线程面试问题之一。 可以准确检测候选人解决竞争条件的经验、orwritingcodewhichisfreeofdataraceoranyotherracecondition。 关于这方面最好的书是《ConcurrencypracticesinJava》。

10 )如何使用threaddump? 你怎么分析Threaddump?

在UNIX上可以使用kill-3。 然后threaddump打印日志,在windows上可以使用“CTRL Break”。 非常简单专业的线程面试问题,但是如果他问你怎么分析那个的话,那就麻烦了。

11 )调用start ) )方法时为什么要执行run ) )方法? run ) )为什么不能直接调用方法?

这是另一个非常经典的java多线程面试问题。 这也是我刚开始写线程程序时的困惑。 现在,这个问题通常在电话面试或初中级Java面试的第一轮被问到

到。这个问题的回答应该是这样的,眼睛大的月饼调用start()方法时你将创建新的线程,并且执行在run()方法里的代码。但是如果你直接调用run()方法,它不会创建新的线程也不会执行调用线程的代码。阅读我之前写的《start与run方法的区别》这篇文章来获得更多信息。

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

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

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

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

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

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

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

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。