面渣逆袭-19道Java并发编程面试题

1.并行跟并发有什么区别?说说进程和线程的区别?如何理解协程?启动一个 Java 程序,你能说说里面有哪些线程吗?如何理解协程?守护线程了解吗? 守护线程和用户线程有什么区别呢?

2.你是如何理解线程安全的?怎么保证线程安全?(补充)有个int的变量为0,十个线程轮流对其进行++操作(循环10000次),结果大于10 万还是小于等于10万,为什么?
场景:有一个 key 对应的 value 是一个json 结构,json 当中有好几个子任务,这些子任务如果对 key 进行修改的话,会不会存在线程安全的问题?
说一个线程安全的使用场景?

3.线程间是如何进行通信的?线程间有哪些通信方式?简单说说 volatile 和 synchronized 的使用方式?Exchanger 的使用方式了解吗?CompletableFuture 的使用方式了解吗?

4.说说线程有几种创建方式?调用 start 方法时会执行 run 方法,那怎么不直接调用 run方法?

一个 8G 内存的系统最多能创建多少个线程?

5.什么是线程上下文切换?线程可以被多核调度吗?线程有哪些常用的调度方法?

说说wait方法和notify方法?wait() 和 notify() 方法的使用方式了解吗?
说说 sleep 方法?请说说 sleep 和 wait 的区别?(补充)说说yield方法?说说interrupt方法?

说说 stop 方法?线程有几种状态?如何强制终止线程?

6.ThreadLocal 是什么?ThreadLocal 有哪些优点?你在工作中用到过 ThreadLocal 吗?ThreadLocal 怎么实现的呢?什么是弱引用,什么是强引用?ThreadLocal 内存泄露是怎么回事?那为什么 key 要设计成弱引用?ThreadLocalMap 的源码看过吗?ThreadLocalMap 怎么解决 Hash 冲突的?为什么要用线性探测法而不是HashMap 的拉链法来解决哈希冲突?开放地址法了解吗?ThreadLocalMap 扩容机制了解吗?父线程能用 ThreadLocal 给子线程传值吗?InheritableThreadLocal的原理了解吗?

7.说一下你对 Java 内存模型的理解?为什么线程要用自己的内存?i++是原子操作吗?说说你对原子性、可见性、有序性的理解?说说什么是指令重排?happens-before 了解吗?你知道哪些 Happens-Before 规则?as-if-serial 了解吗?volatile 了解吗?volatile 怎么保证有序性的?volatile 和 synchronized 的区别?volatile 加在基本类型和对象上的区别?

8.synchronized 用过吗?synchronized 上锁的对象是什么?synchronized 的实现原理了解吗?你对 Monitor 了解多少?会不会牵扯到 os 层面呢?synchronized 怎么保证可见性?synchronized 怎么保证有序性?synchronized 怎么实现可重入的呢?synchronized 锁升级了解吗?了解 synchronized 四种锁状态吗?请详细说说锁升级的过程?synchronized 做了哪些优化?synchronized 和 ReentrantLock 的区别了解吗?并发量大的情况下,使用 synchronized 还是 ReentrantLock?

9.Lock 了解吗?ReentrantLock 的 lock() 方法实现逻辑了解吗?AQS 了解多少?AQS 的源码阅读过吗?说说 ReentrantLock 的实现原理?ReentrantLock 怎么创建公平锁?怎么创建一个非公平锁呢?非公平锁和公平锁有什么不同?公平锁的实现逻辑了解吗?

10.CAS 了解多少?怎么保证 CAS 的原子性?CAS 有什么问题?什么是 ABA 问题?自旋开销大怎么解决?涉及到多个变量同时更新怎么办?

11.Java 有哪些保证原子性的方法?原子操作类了解多少?AtomicInteger 的源码读过吗?

12.线程死锁了解吗?死锁发生的四个条件了解吗?该如何避免死锁呢?死锁问题怎么排查呢?

13.聊聊线程同步和互斥?(补充)如何实现同步和互斥?锁要解决哪些问题?说说自旋锁?

互斥和同步在时间上有要求吗?

14.聊聊悲观锁和乐观锁?(补充)乐观锁发现有线程过来修改数据,怎么办?

15.CountDownLatch 了解吗?场景题:假如要查10万多条数据,用线程池分成20个线程去执行,怎么做到等所有的线程都查找完之后,即最后一条结果查找结束了,才输出结果?

CyclicBarrier 了解吗?CyclicBarrier 和 CountDownLatch 有什么区别?Semaphore 了解吗?Exchanger 了解吗?

16.能说一下 ConcurrentHashMap 的实现吗?(补充)说一下 JDK 7 中 ConcurrentHashMap 的实现原理?说一下 JDK 7 中 ConcurrentHashMap 的 put 流程?说一下 JDK 7 中 ConcurrentHashMap 的 get 流程?

说一下 JDK 8 中 ConcurrentHashMap 的实现原理?说一下 JDK 8 中 ConcurrentHashMap 的 put 流程?说一下 JDK 8 中 ConcurrentHashMap 的 get 流程?
说一下 HashMap 和 ConcurrentHashMap 的区别?
你项目中怎么使用 ConcurrentHashMap 的?说一下 ConcurrentHashMap 对 HashMap 的改进?为什么 ConcurrentHashMap 在 JDK 1.7 中要用 ReentrantLock,而在 JDK 1.8 要用 synchronized

ConcurrentHashMap 怎么保证可见性?(补充)

为什么 ConcurrentHashMap 比 Hashtable 效率高(补充)

17.能说一下 CopyOnWriteArrayList 的实现原理吗?(补充) 能说一下 BlockingQueue 吗?(补充)

18.什么是线程池?你在项目中有用到线程池吗?说一下线程池的工作流程?能用一个生活中的例子说明下吗?线程池的主要参数有哪些?能简单说一下参数之间的关系吗?核心线程数不够会怎么进行处理?举个例子说一下这些参数的变化?线程池的拒绝策略有哪些?线程池有哪几种阻塞队列?线程池提交 execute 和 submit 有什么区别?线程池怎么关闭知道吗?线程池的线程数应该怎么配置?如何知道你设置的线程数多了还是少了?有哪几种常见的线程池?能说一下四种常见线程池的原理吗?说说固定大小线程池的原理?说说缓存线程池的原理?说说单线程线程池的原理?说说定时任务线程池的原理?使用无界队列的线程池会出现什么问题?线程池异常怎么处理知道吗?能说一下线程池有几种状态吗?线程池如何实现参数的动态修改?线程池在使用的时候需要注意什么?(补充)线程池执行中断电了应该怎么处理?

19.Fork/Join 框架了解吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值