Java面试合集

个人觉得笔记的知识点记得太多不是太好,首先自己并不会认真的去看,其次就是自己的表达能力并不一定到位,有可能会过段时间之后就记不住了。反而只将知识点记录下来,会勾起脑细胞去回忆知识点并尝试将其串起来。

集合

基础知识

  1. 请用Iterable实现一个随机序列产生器
  2. Collection和Set的区别
  3. Map是不是Collection?
  4. TreeMap和HashMap的区别?
  5. HashMap vs HashTable
  6. 实现Key-Value的LRU缓存
  7. Map的本质
  8. HashMap是什么
  9. TreeSet是什么

数据结构

  1. 链表的表示
  2. 增删改查?相关复杂度
  3. 合并两个链表的操作
  4. 反转链表
  5. 用链表实现队列、栈
  6. 判断链表中是否有环
  7. 和CAS Loop结合
  8. 栈和队列的基本概念:什么是栈什么是队列
  9. 栈和队列的实现和基本操作接口
  10. 栈实现队列?队列实现栈
  11. 括号匹配问题
  12. 表达式解析问题
  13. 树的表示?
  14. 反转二叉树
  15. 计算树的深度?
  16. 广度优先算法和深度优先算法
  17. 树遍历的序?如何判断二叉树是不是二叉搜索树?
  18. 关于对平衡二叉树的认知
  19. HashTable的原理
  20. 说一个hash函数
  21. Java的HashMap是如何实现的?
  22. 除了哈希表还有哪些适合存key value的数据结构
  23. ConcurrentHashMap是怎么回事?什么时候用(有版本区别)
  24. Java的Object的hashcode是如何计算的

源码分析

源码分析

  1. 什么是反射
  2. 写一个关于XXX反射的程序
  3. 解释下为什么要面向切面编程
  4. 为什么Proxy.newProxyInstance要传入ClassLoader
  5. 手写一个AOP

并发

线程

  1. 进程和线程的区别
  2. 为什么要有线程
  3. 为什么要减少线程切换
  4. 进程开销为什么比线程大
  5. Java线程有什么状态?如何转换
  6. Java线程是内核级还是用户级

cas

同步器

  1. 什么是同步
  2. 简述下java有哪些同步器
  3. synchronized是如何实现的
  4. ReentrantLock和synchronized的区别
  5. 为什么需要AbstractQueuedSynchronizer
  6. 偏向锁、轻量级锁、重量级锁是什么回事
  7. AbstractQueuedSynchronizer可以用来做什么
  8. 简述AbstractQueuedSynchronizer如何工作的
  9. 手写程序:如何用AbstractQueuedSynchronizer实现Mutex
  10. AQS如何保持公平性
  11. CAS在AQS中的作用是什么
  12. AQS内部的CLH算法工作原理是什么
  13. synchronized和ReentrantLock的区别
  14. 什么场景下需要锁可重入
  15. 什么场景下用CountDownLatch
  16. 什么场景下用Semaphore
  17. Phaser是怎么实现的
  18. 什么场景下用Exchanger
  19. ArrayBlockingQueue和LinkedBlockingQueue的区别
  20. add/offer/put区别?remove/poll/take的区别?
  21. DelayQueu的应用场景
  22. SynchronousQueue的应用场景?
  23. LinkedTransferQueue和SynchronousQueue有什么异同
  24. LinkedBlockingDeque和SynchronousQueue工作原理一样吗
  25. 说说ArrayBlockingQueue和LinkedTransferQueue的最大区别?以及使用场景
  26. 什么是有界队列?什么是无界队列

函数式编程Monad

  1. 讲讲JVM的内存布局
  2. JVM中的对象都有哪些数据
  3. JVM运行时数据区有哪些

  1. 讲讲JVM的内存布局
  2. JVM中的对象都有哪些数据
  3. JVM运行时数据区有哪些

GC

  1. 为什么要GC
  2. STW(Stop the world)是什么?
  3. 图和提高Throughput(吞吐量)
  4. 引用计数有什么问题?
  5. java中有哪几种引用
  6. 为什么需要三色标记而不是双色?
  7. 三色标记算法如何处理mutation(变动)?
  8. java堆分成哪些部分?
  9. 新生代、老年代、存货代、永久代是什么?如何工作的?
  10. 什么时候发生复制整理

垃圾收集器

  1. 都有哪些那几收集器?
  2. G1、CMS、Serial、ParNew、Z、Parallel
  3. Minor GC、Major GC、Full GC
  4. GC Rooting的根节点有哪些?

Java对象头

  1. 说一下Object在内存中的格式
  2. 说一下初始化一个类的过程
  3. 空的Object多大
  4. Class Header里都有什么
  5. Object有哪些方法

JVM调试工具

  1. JMeter 压力测试
  2. jps java应用程序查看
  3. jstat JVM统计监控工具
  4. jmap
  5. jinfo 查看修改虚拟机配置
  6. jhat Java堆分析工具
  7. jstack 打印Java的Stack
  8. jconsole

java版本新特性

java8

  1. Lambda、Function Interface
  2. 方法引用操作符::
  3. Stream(Monad函数式编程)
  4. Optional
  5. 接口的方法(static、default、private)
  6. Java8 Nashorn JavaScript
  7. 本地化日期处理升级
  8. 内置Base64工具

java9

  1. 模块系统
  2. 交互式编程环境(JShell)
  3. HTTP2.0 Clinet
  4. 改进Javadoc
  5. 支持multirelease jar 包
  6. 集合的工厂方法
  7. Stream新增API(takeWhile、dropWhile、itreate、ofNullAble)
  8. 钻石操作符语法优化<>
  9. try-with-resource改进

java10

  1. 局部变量类型推断
  2. JDK代码仓库整理