范文资料网>人事资料>招聘与面试>《多线程编程面试题

多线程编程面试题

时间:2022-04-16 00:36:26 招聘与面试 我要投稿
  • 相关推荐

多线程编程面试题

在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分。如果你想获得任何股票投资银行的前台资讯职位,那么你应该准备很多关于多线程的问题。在投资银行业务中多线程和并发是一个非常受欢迎的话题,特别是电子交易发展方面相关的。他们会问面试者很多令人混淆的Java线程问题。面试官只是想确信面试者有足够的Java线程与并发方面的知识,因为候选人中有很多只浮于表面。用于直接面向市场交易的高容量和低延时的电子交易系统在本质上是并发的。下面这些是我在不同时间不同地点喜欢问的Java线程问题。我没有提供答案,但只要可能我会给你线索,有些时候这些线索足够回答问题。现在引用Java5并发包关于并发工具和并发集合的问题正在增多。那些问题中ThreadLocal、Blocking Queue、Counting Semaphore和ConcurrentHashMap比较流行。

多线程编程面试题

15个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中怎么解决生产者——消费者问题,当然有很多解决方法,我已经分享了一种用阻塞队列实现的方法。有些时候他们甚至会问怎么实现哲学家进餐问题。

参见:http://www.oh100.com

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

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

死锁示例:

import java.lang.Class;import http://www.oh100.comnstructor;import http://www.oh100.comncurrent.ArrayBlockingQueue;import http://www.oh100.comncurrent.BlockingQueue;import http://www.oh100.comncurrent.Callable;import http://www.oh100.comncurrent.FutureTask;class A {public synchronized void first(B b){System.out.println("当前线程名:" + Thread.currentThread().getName() + " 进入了A方法");try{Thread.sleep(1000);}catch(Exception e1){e1.printStackTrace();}System.out.println("当前线程名: " + Thread.currentThread().getName()+ " 企图调用B实例的last方法");b.last();}public synchronized void last(){System.out.println("当前线程名:" + Thread.currentThread().getName() + "进入了A的last方法");}}class B{public synchronized void first(A a){System.out.println("当前线程名:" + Thread.currentThread().getName() + "进入了B方法");try{Thread.sleep(1000);}catch(Exception e1){e1.printStackTrace();}System.out.println("当前线程名: " + Thread.currentThread().getName()+ " 企图调用A类的last方法");a.last();}public synchronized void last(){System.out.println("当前线程名:" + Thread.currentThread().getName() + "进入了B的last方法");}}public class Offer implements Runnable {A a = new A();B b = new B();public void init(){Thread.currentThread().setName("主线程");a.first(b);}public void run(){try{Thread.currentThread().setName("副线程");b.first(a);}catch(Exception e){e.printStackTrace();}}public static void main(String[] args) {Offer offer = new Offer();(new Thread(offer)).start();offer.init();}

【多线程编程面试题】相关文章:

外企面试题05-01

面试题目精选05-01

招聘翻译的面试题06-09

高职面试题目03-03

面试题回答的技巧05-18

应急面试题目及答案06-06

情景面试题题目及答案03-15

招聘基建主管面试题06-15

营销招聘面试题及答案06-01

医学检验面试题目03-26