赞
踩
synchronized实现原理、CAS无锁化的原理、AQS是什么、Lock锁、ConcurrentHashMap的分段加锁的原理、线程池的原理、java内存模型、volatile说一下吗、对java并发包有什么了解?一连串的问题
写一些java web系统,运用一些框架和一些第三方技术,写一些类似于crud的业务逻辑,把各种技术整合一下,写一些crud而已,没什么技术含量。很多人可能写好几年的代码,都不会用到多少java并发包下面的东西
如果说你要面试一些稍微好一点的公司,技术稍微好一点,你只要去做一个技术含量稍微高一点的系统,并发包下面的东西还是很容易会用到的。尤其是BAT,中大厂,有一定规模的公司,做出来的系统还是有一定的技术含量的。Java 并发问题一直是各个大厂面试的重点之一,但很多人在面试时,常常表示对各种并发原理一脸懵逼,好像知道一些却又讲不清楚,最终导致面试失败。于是发奋学习,啃大部头书又发现理论太多,头疼,今天我就结合实际的面试题,重点聊一聊 Java 并发中的相关知识点,由于内容过多只展示了部分内容,完整的内容已经整理好啦
答:可以用Stop终止,但是不推荐!
答:ReadWriteLock 是一个读写锁接口,ReentrantReadWriteLock 是 ReadWriteLock 接口的一个具体实现,实现了读写的分离,读锁是共享的,写锁是独占的,读和读之间不会互斥,读和写、写和读、写和写之间才会互斥,提升了读写的性能。
答:阻塞式方法是指程序会一直等待该方法完成期间不做其他事情,ServerSocket 的accept()方法就是一直等待客户端连接。这里的阻塞是指调用结果返回之前,当前线程会被挂起,直到得到结果之后才会返回。此外,还有异步和非阻塞式方法在任务完成前就返回。
答:
答:
答:FutureTask 表示一个异步运算的任务。FutureTask 里面可以传入一个 Callable 的具体实现类,可以对这个异步运算的任务的结果进行等待获取、判断是否已经完成、取消任务等操作。当然,由于 FutureTask 也是Runnable 接口的实现类,所以 FutureTask 也可以放入线程池中。
答:Java通过Executors提供四种线程池,分别为:
答:可以提高 CPU 的利用率。在多线程程序中,一个线程必须等待的时候,CPU 可以运行其它的线程而不是等待,这样就大大提高了程序的效率。也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。
答:阻塞式方法是指程序会一直等待该方法完成期间不做其他事情,ServerSocket 的accept()方法就是一直等待客户端连接。这里的阻塞是指调用结果返回之前,当前线程会被挂起,直到得到结果之后才会返回。此外,还有异步和非阻塞式方法在任务完成前就返回。
答:当线程数小于最大线程池数 maximumPoolSize 时就会创建新线程来处理,而线程数大于等于最大线程池数 maximumPoolSize 时就会执行拒绝策略。
jstack
JVM释放没有被引用的内存空间的过程
15、如何避免线程死锁
16、四种构建线程池的区别及特点?
17、如果对象的引用被置为null,垃圾收集器是否会立即释放对象占用的内存?
18、原子类的常用类
19、Java中的同步集合与并发集合有什么区别?
20、多线程应用场景
21、线程之间如何通信及线程之间如何同步
22、并发编程有什么缺点
23、简述java类加载机制?
24、什么是守护线程?有什么用?
25、Lock接口和synchronized对比同步它有什么优势?
26、并发编程三个必要因素是什么?
27、一个线程运行时发生异常会怎样?
28、为什么要使用线程池?
29、线程同步需要注意什么?
30、什么叫线程安全?servlet是线程安全吗?
38、强引用、软引用、弱引用、虚引用的区别?
39、框架是干什么的?
40、Java中能创建volatile数组吗?
41、说说自己是怎么使用synchronized关键字,在项目中用到了吗
42、什么是原子类
43、新建T1、T2、T3三个线程,如何保证它们按顺序执行?
44、为什么你应该在循环中检查等待条件?
45、Java线程数过多会造成什么异常?
46、说一下Atomic的原理?
47、为什么wait/notify/notifyAll这些方法不在thread类里面?
48、重排序遵守的规则
49、java类加载过程?
50、简单说说你了解的类加载器,可以打破双亲委派么,怎么打破。
51、什么是自旋
52、线程的调度策略
53、你知道哪几种垃圾收集器,各自的优缺点,重点讲下cms和G1,包括原理,流程,优缺点。
54、JVM内存模型的相关知识了解多少,比如重排序,内存屏障,happen-before,主内存,工作内存。
55、什么是线程组,为什么在Java中不推荐使用?
56、什么是线程调度器(ThreadScheduler)和时间分片(TimeSlicing)?
57、JVM中一次完整的GC流程是怎样的,对象如何晋升到老年代
58、如果你提交任务时,线程池队列已满,这时会发生什么
59、多线程之间如何进行通信?
60、什么是FutureTask
61、保证"可见性"有哪几种方式?
62、中用到了什么线程调度算法?
63、单例模式了解吗?给我解释一下双重检验锁方式实现单例模式!”
64、中堆和栈有什么不同?
65、如何合理分配线程池大小?
66、as-if-serial规则和happens-before规则的区别
67、多线程上下文切换是什么意思?
68、java内存模型
69、常用的并发工具类有哪些?
70、什么是死锁?如何避免死锁?
71、用过ConcurrentHashMap,讲一下他和HashTable的不同之处?
72、线程B怎么知道线程A修改了变量
73、JVM内存为什么要分成新生代,老年代,持久代。新生代中为什么要分为Eden和Survivor。
74、线程怎样拿到返回结果?
75、CopyOnWriteArrayList的设计思想?
76、是什么?有什么应用场景?
77、如何创建线程安全的单例模式?
78、synchronized和ReentrantLock区别是什么?
79、Collections.synchronized*是什么?
80、volatile关键字的作用
81、线程池启动线程submit()和execute()方法有什么不同?
82、框架使用有哪些要注意的地方?
83、为什么HashTable是线程安全的?
84、和Thread用哪个好?
85、怎么控制同一时间只有3个线程运行?
86、常用的几种线程池并讲讲其中的工作原理。
87、怎么检测一个线程是否拥有锁?
88、什么是线程同步和线程互斥,有哪几种实现方式?
89、说一下synchronized底层实现原理?
90、内存模型是什么,哪些区域是线程共享的,哪些是不共享的?
91、什么是类加载器,类加载器有哪些?
92、synchronized、volatile、CAS比较
93、什么是ThreadPoolExecutor?
94、多线程的常用方法
95、为什么Thread类的sleep()和yield()方法是静态的?
96、什么是Executors?
97、线程和进程的区别是什么?
98、一个线程运行时发生异常会怎样?
99、你经常使用什么并发容器,为什么?
100、为什么我们调用start()方法时会执行run()方法,为什么我们不能直接调用run()方法?
101、类加载器双亲委派模型机制?
102、什么是自旋锁?
103、为什么wait和notify方法要在同步块中调用?
104、并行和并发有什么区别?
105、什么是重入锁?
106、同步方法和同步块,哪个是更好的选择?
107、为什么线程通信的方法wait(),notify()和notifyAll()被定义在Object类里?
108、启动线程方法start()和run()有什么区别?
109、什么是Vector
110、你是如何调用wait()方法的?使用if块还是循环?为什么?
111、什么是并发队列:
112、同步方法和同步块,哪种更好?
113、线程的run()和start()有什么区别?
114、线程池的执行原理?
115、和CountDownLatch的区别?
116、内存模型以及分区,需要详细到每个区放什么。
117、线程的状态
118、finalize()方法什么时候被调用?析构函数(finalization)的目的是什么?
119、synchronized可重入的原理
120、线程池作用?
121、在Java程序中怎么保证多线程的运行安全?
122、为什么wait(),notify()和notifyAll()必须在同步方法或者同步块中被调用?
123、线程类的构造方法、静态块是被哪个线程调用的
124、sleep(0)的作用是什么?
125、synchronized和Lock有什么区别?
126、什么是多线程
127、什么是上下文切换?
128、线程yield()方法有什么用?
129、一个线程的生命周期有哪几种状态?它们之间如何流转的?
130、在Java中Executor和Executors的区别?
131、SynchronizedMap和ConcurrentHashMap有什么区别?
132、你对线程优先级的理解是什么?
133、怎么打出线程栈信息。
134、多线程的劣势
135、创建线程的四种方式
136、Java中ConcurrentHashMap的并发度是什么?
137、Java内存模型
138、线程和进程区别
139、sleep()和wait()有什么区别?
140、的size()方法为什么要做同步?
141、Java实现线程有哪几种方式?
142、多线程同步有哪几种方法?
143、关键字的作用?
144、CAS的会产生什么问题?
145、什么是线程死锁
146、什么是重排序
147、什么是并发容器的实现?
148、如何在两个线程间共享数据?
149、volatile变量和atomic变量有什么不同?
150、说几个常用的Lock接口实现锁。
151、synchronized和volatile的区别是什么?
152、final不可变对象,它对写并发应用有什么帮助?
153、线程的sleep()方法和yield()方法有什么区别?
154、常用并发列队的介绍:
155、详解JVM内存模型
156、死锁与活锁的区别,死锁与饥饿的区别?
157、CopyOnWriteArrayList的使用场景?
158、怎么判断并发队列是阻塞队列还是非阻塞队列
159、在监视器(Monitor)内部,是如何做线程同步的?程序应该做哪种级别的同步?
160、中notify和notifyAll有什么区别?
161、CopyOnWriteArrayList的缺点?
162、Java如何实现多线程之间的通讯和协作?
163、Java中垃圾回收有什么目的?什么时候进行垃圾回收?
164、简述java内存分配与回收策率以及MinorGC和MajorGC
165、说说你知道的几种主要的JVM参数
166、为什么要使用并发编程
167、Java中interrupted和isInterrupted方法的区别?
168、notify()和notifyAll()有什么区别?
169、Java中怎么获取一份线程dump文件?你如何在Java中获取线程堆栈?
170、并发队列和并发集合的区别:
171、如何自定义线程线程池?
172、当一个线程进入一个对象的synchronized方法A之后,其它线程是否可进入此对象的synchronized方法B?
173、线程之间如何传递数据?
174、java中垃圾收集的方法有哪些?
175、多线程中synchronized锁升级的原理是什么?
176、ArrayList和Vector有什么不同之处?
177、什么是乐观锁和悲观锁?
178、什么是CAS
179、说说线程安全的和不安全的集合。
180、什么是活锁、饥饿、无锁、死锁?
181、线程中的wait()和sleep()方法有什么区别?
182、Java程序中怎么保证多线程的运行安全?
183、不可变对象对多线程有什么帮助?
184、什么是Callable和Future?
185、如何在Windows和Linux上查找哪个线程cpu利用率最高?
186、并发关键字synchronized?
187、怎么唤醒一个阻塞的线程?
188、有哪几种用法?
189、Java中用到的线程调度算法是什么?
190、形成死锁的四个必要条件是什么
191、堆里面的分区:Eden,survival(from+to),老年代,各自的特点。
192、阻塞队列和非阻塞队列区别
193、乐观锁和悲观锁的理解及如何实现,有哪些实现方式?
194、你如何在Java中获取线程堆栈?
195、什么是原子性、可见性、有序性?
196、CopyOnWriteArrayList是什么?
197、线程wait()方法使用有什么前提?
198、什么是线程池?
199、什么情况下会发生栈内存溢出。
200、请说出与线程同步以及线程调度相关的方法。
201、重排序实际执行的指令步骤
202、Java中你怎样唤醒一个阻塞的线程?
编发编程的面试总结到这里就结束了!每道并发编程的答案解析内容就不在这里一一展示了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。