Fork me on GitHub

并发编程面试题总结

  1. Java线程的状态有哪些?
  2. 状态迁移大概是怎样的?wait()、sleep()、LockSupport.lock、synchronized、lock.lock()执行之后对应的锁状态是哪些?
  3. 如何实现线程通讯?
  4. Callable和Runnable的区别?
  5. interrupt()方法怎么中断的线程?如何响应中断?
  6. CPU的三级缓存模型是怎么样的?
  7. 什么是JMM工作模型?为什么要这样去划分工作内存和共享内存?
  8. 并发的三个特性是什么?什么叫做可见性?什么叫做有序性?
  9. 指令重排是什么?
  10. 如何禁止指令重排?
  11. volatile的底层实现原理是什么?
  12. 什么是mesi缓存一致性协议?
  13. synchronized有哪些用法?static方法锁的是什么?
  14. synchronized在jdk高版本有什么优化?
  15. 什么叫轻量级锁?
  16. 什么叫偏向锁?偏向锁的过程?
  17. 什么叫自旋锁?
  18. 上边这几种锁的适用场景?
  19. synchronized的底层实现原理是什么?什么是Monitor对象?
  20. wait()方法和notify()方法为什么一定要在synchronized区域中调用。
  21. 锁竞争的过程,竞争失败会怎样,如何被唤醒?
  22. 什么是用户态和内核态?为什么线程上下文切换会是开销大的操作?
  23. 可重入锁ReentrantLock和synchronized的区别?
  24. 如果利用AQS实现的可重入锁?
  25. AQS内部原理?
  26. 怎么实现的公平锁?
  27. 怎么实现的锁超时等待?
  28. 怎么实现的加锁失败在队列中等待?
  29. Conditional怎么在AQS中实现?
  30. AQS还有哪些应用?
  31. JUC这个包常用什么?怎么看待JUC这个包的结构?能分几层?
  32. 有哪些阻塞队列?
  33. CAS是什么?
  34. 以AtomicInteger为例,怎么依赖CAS实现?UnSafe怎么在其中使用的?
  35. CAS的ABA问题是什么?如何解决?
  36. UnSafe还在哪用到了?
  37. 线程池的工作原理?
  38. 线程池核心参数?
  39. 为什么要自己实现线程池参数而不用Executors工具类?
  40. 怎么对线程池进行监控?
  41. submit和execute方法有什么区别,在异常处理方面有什么区别?
  42. FutureTask怎么实现的?如何实现get阻塞等待的?怎么实现cancel的?
  43. 线程池核心线程数量大小选择?
  44. 线程池如何实现线程退出的?
  45. 线程池的优点?
  46. 线程池如何优雅关闭?
  47. 线程死锁怎么排查的?
  48. 生产者消费者模型
  49. CountDownLatch、Semaphore、CyclicBarrier都什么作用?用在什么场景?
  50. CompletableFuture怎么使用?使用有什么注意点吗?
  51. Future和CompletableFuture区别,怎么实现非阻塞的获取结果异步回调的?
  52. ThreadLocal实现原理?
  53. ThreadLocal和Thread的关系?
  54. ThreadLocal使用场景有哪些?
  55. ThreadLocal会内存泄漏吗?
  56. ThreadLocalMap怎么解决hash碰撞的?
  57. ThreadLocalMap怎么删除无用元素的?
  58. ThreadLocalMap内部结构
  59. 为什么ThreadLocal的引用是WeakedHashMap?
  60. ThreadLocal怎么跨线程引用?
  61. 了解ThredLocal的扩展吗?比如Netty的FastThreadLocal?
  62. 什么是ForkJoin?什么是工作窃取算法?
  63. Stream的原理是什么?Stream并行流怎么实现的?
  64. HashMap put流程?
  65. 为什么HashMap负载因子是0.75?
  66. HashMap数据结构是什么样的?
  67. 为什么要采用红黑树?
  68. 描述一下红黑树的结构?
  69. 为什么长度是2的整数次幂?
  70. HashMap是线程安全的吗?HashTable呢?
  71. HashMap线程不安全的点在哪?
  72. 扩容的时候为什么会发生死循环?
  73. ConcurrentHashMap怎么实现的线程安全?
  74. ConcurrentHashMap1.7和1.8的区别?
  75. ConcurrentHashMap size()操作怎么计算的?一定会加锁吗?
  76. ArrayList扩容机制是什么?
  77. LinkedList和ArrayList适用于什么场景?
  78. LinkedList是双向链表吗?
  79. 线程安全的List或者Set有哪些?
  80. HashSet怎么实现的?
  81. CopyOnWrite机制适合于什么场景?
  82. LongAdder怎么实现更高的效率?
  83. 了解过无锁队列Disputor吗?原理是什么?
-------------本文结束感谢您的阅读-------------

本文标题:并发编程面试题总结

文章作者:夸克

发布时间:2021年09月22日 - 10:09

最后更新:2022年07月02日 - 04:07

原始链接:https://zhanglijun1217.github.io/2021/09/22/并发编程面试题总结/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。