并发java面试总结 带答案

好文记录
锁:https://mp.weixin.qq.com/s/HgXbSBbyruEQXz42R46MEg
美团cf实战:https://tech.meituan.com/2022/05/12/principles-and-practices-of-completablefuture.html
美团线程池实战:https://tech.meituan.com/2020/04/02/java-pooling-pratice-in-meituan.html
Java 并发(进阶)
1. 什么是线程和进程?线程与进程的关系,区别及优缺点?
2. 为什么要使⽤多线程呢?
- 因为更多利用计算机资源,减少上下文切换

3. 什么是上下⽂切换?
- 线程的运行条件和状态,程序计数器,栈
- 多线程减少线程重启,减少上下文切换
- 思考:IO密集型上下文切换高vs.cpu密集型线程切换高

4. 什么是线程死锁?如何避免死锁?
- 两个线程获得了对方的资源,获取1等待2,一个获取2等待1。
- 破环任意一个四大原则,少资源,非抢占,静态分配,层次分配
- 静态分配:执行前获得所有他要的资源
- 层次分配:所有资源分成多个曾,只有获得低层才能获得高层

5. 乐观锁和悲观锁了解么?如何实现乐观锁?
- 略

6. 说说 sleep() ⽅法和 wait() ⽅法区别和共同点?
- wait时monitor lock,sleep是操作系统
- Thread.sleep(): 不是改变monitor lock,而是通过操作系统暂停线程。可以理解为谁执行这个方法谁就sleep。
- 再t2中执行t1.sleep()最终也会转为Thread.sleep(),还是t2被sleep了。

7. 讲⼀下 JMM(Java 内存模型)。 
- 一个开发需要遵守的规范
- a. 类似于cpu缓存,java有主内存和本地内存
- b. 关于重排序的happens-before原则

8. Java 内存区域和 JMM 有何区别?
- 内存区是物理分区,jmm是对编程的规范
9. happens-before 原则
- 要求禁止重排序,但
全部评论

相关推荐

点赞 11 评论
分享
牛客网
牛客企业服务