赞
踩
地址坐标:成都
面试题是参加的大大小小的面试整理而来的,都是自己经历的,可能有一些是后期补充的,欢迎指正和讨论,一起进步。
主要考究的是java中的集合类型: List
、 Map
、 Set
分别的数据类型和底层结构是如何的:
Q1:volatile关键字有什么作用?
Q2:内存可见性和防止指令重排是如何实现的?
内存屏障 : …
Q3:有哪些内存屏障?
一共有四种内存屏障,
Q1:AQS加锁的过程请你谈一下?
Q1: Synchronized 关键字从JDK1.6后进行了锁升级,请问锁升级过程和对应条件?
**锁的升级过程:**JDK1.6之前一直是重量级锁,即要么无锁要么就是加了锁;JDK1.6之后引入了轻量级锁/偏向锁,
它的过程为: 无锁 ----> 轻量级锁 ----> 偏向锁 ----> 重量级锁
对应条件为:
Q2: synchronized 与 Lock 的区别
基础的问题肯定不是要问你的内容:但是也还是提一句
Thread
类Runnable
或者是 Callable
接口Q1: 线程池有哪些参数分别代表什么含义
使用线程池主要是使用:ThreadPoolExecutor
类进行线程池的相关创建;
public ThreadPoolExecutor(
int corePoolSize, // 线程池长期维持的线程数,即使线程处于Idle状态,也不会回收。
int maximumPoolSize, // 线程数的上限
long keepAliveTime, // 超过corePoolSize的线程的idle时长
TimeUnit unit, // 超过这个时间单位,多余的线程会被回收。
BlockingQueue<Runnable> workQueue, // 任务的排队队列
ThreadFactory threadFactory, // 新线程的产生方式
RejectedExecutionHandler handler) // 拒绝策略
Q2:线程池的执行过程是如何?
主要是询问线程池从创建线程到核心线程数,然后再到最大线程数,然后请求边上如何从最大线程数一步一步退回到核心线程数的一个过程,可以理解为请求慢慢增多,线程池是如何处理的,直到请求下降了,线程池如何回收;
详情后面补充:
Q3:线程池是如何回收线程的
第二个问题中的线程回收的一个细节问题,主要考究的是阻塞队列
Q4:项目中是如何设置线程池的个数,在cpu密集型 和 I/O密集型 两个类型中分别如何设置
这里主要考究的是: CPU密集型
和 IO密集型
分别应该如何考虑设置线程数量 。
主要考究的是多线程情况下集合如何从线程不安全转变成线程安全的,主要问的较多的是 hashmap的并发包的CurrentHashMap
,
还有就是list的并发包下的 CopyOnWriteList
的写时复制的list 等等。
Q1:CurrentHashMap的实现原理 是如何的
CurrentHashMap
,
还有就是list的并发包下的 CopyOnWriteList
的写时复制的list 等等。
Q1:CurrentHashMap的实现原理 是如何的
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。