以下主要列出一些面试常见的Java问题,答案会在后续过程逐渐补充。
一.hashmap
1.hash碰撞冲突解决方案
2.红黑树优化方案(链表转红黑树,红黑树转链表)
3.扩容
4.缩容
5.Hashtable、Hashset、LinkedHashmap
6.Hashmap线程不安全原因分析(死锁)
7.Treemap
二.ConcurrentHashmap
1.如何实现线程安全
2.性能
3.jdk1.7与jdk1.8
三.hashcode和equals
1.equals与==
2.为什么重写equals必须重写hashcode
四.java基本类型及长度
五.String、StringBuilder、StringBuffer
六.反射
1.实现方式
2.性能
七.泛型
1.泛型擦除
2.<? extends T> <? super T>
八. .length与.length()
九.深拷贝与浅拷贝
十.ArrayList、LinkedList、Vector
十一.面向对象
1.封装(private,default,protected,public)
2.继承(抽象类和接口)
3.多态(重载和重写)
十二.线程池
1.线程池作用
2.newSingleThreadExecutor、newFixedThreadPool、newCachedThreadPool、newScheduledThreadPool
3.execute()与submit()
4.线程池参数
5.IO密集型和CPU密集型
6.线程池工作顺序
7.拒绝策略
十三.动态代理
十四.四种引用(强软弱虚)
十五.动态分配与静态分配
1.静态分配(重载)、动态分配(重写)
2.jvm实现动态分配
十六.Java传值还是传引用
十七.异常
1.exception、error
2.try、catch、finally
3.finally与return的顺序
十八.Object类方法
十九.IO相关
1.BIO、AIO、NIO
2.select、poll、epoll
3.阻塞IO、非阻塞IO、IO多路复用、异步IO
二十.jvm
1.jvm内存模型/运行时数据区
2.GC回收算法
(1)如何判断对象是否存活
(2)垃圾回收算法
3.Minor GC 和 Full GC
4.划分成年轻代和老年代
5.为什么要有Survivor,为什么要有两个survivor
6.类加载机制
(1)过程
(2)类的实例化顺序
(3)双亲委派模型(概念、意义)
(4)类加载器
7.垃圾回收器
8.OOM(堆内存溢出,栈内存溢出,永久代溢出)
二十一.多线程
1.volatile
2.线程状态与转换
3.乐观锁(Compare And Swap),悲观锁(synchronized/lock)
4.JUC并发包(Atomic,Lock/ReentrantLock)
5.锁(自旋锁(CAS),公平锁与非公平锁,可重入锁与非重入锁,独享锁和共享锁)
6.synchronized(手写双重校验锁单例)
7.并发和并行
8.ThreadLocal(ThreadLocalMap)
二十二.jdk8新特性(lambda表达式,Date TimeAPI,接口默认方法,Stream,Optional 类处理空指针异常)