大厂Java基础面经总结
集合
- Arraylist和Linkedlist的区别?
- HashMap原理?
- 红黑树红和黑代表什么?
- HashMap数组索引怎么确认?
- 常见的哈希算法了解哪些?解决哈希冲突的方法?
- Java有什么集合容器?
- Treemap怎么排序,有什么注意事项,可不可以自定义排序,排序的数据结构是什么
- CopyOnWriteArrayList怎么保证线程安全,优点是这个,那缺点呢?
- arraylist线程安全吗,想要使用线程安全的arraylist怎么办?
- 假设你要遍历一个 HashMap,同时删除一些 key,应该怎么编写代码?
- hashtable怎么保证线程安全的,concurrentHashmap呢,怎么去选择呢
- hashmap 为什么选择红黑树而不是AVL
代理
- JDK和Cglib动态代理什么区别?
字符串
- String s = new String("abc") 创建了几个对象,s是表示什么,创建的对象分别存放在哪里?
注解
- 四种标准原注解
- 注解它是做什么用的呢?
接口
- 接口和抽象类的区别,各自什么时候使用?
ThreadLocal
- 除了手动释放ThreadLocal中的值外,它里面还有其他设计来避免内存泄漏吗?
特性
- java的编译器跨平台性如何实现?
反射
- 对Java的反射如何理解的,原理是什么?
- 反射机制对于其他没有反射的语言有什么好处?
- Java中哪些效率高的功能是基于反射做的呢?
- byte怎么转字符串?
- 反射的应用场景
- 反射为什么性能开销高
volatile
- volatile 关键字作用
- 不加这个关键字对变量修改就不会加到主存吗?
- 加了这个关键字还需要加锁吗?这个关键字的一些应用场景都有哪些呢?
线程池
- 假设让你写一个线程池工具,你觉得应该怎么去设计呢?应该有什么变量?有什么接口?
- 比如核心线程数量是5,最大线程是10,现在来了11个任务,怎么调度?
- 线程池的执行流程?
- 线程池是否会出现并发安全问题?
- 动态线程池是怎么实现的?
- 动态调整机制是什么?我们应该设置多少核心线程数和最大线程数,以及通过哪里去设置?
- 动态线程池的“动态”体现在什么地方?
- 线程池过程和原理
- 你怎么实际计算需要的核心线程数目和阻塞队列大小?你怎么设定拒绝策略?高请求下有的用户的请求被拒绝了,你会怎么处理反映给用户?
String
- String,StringBuilder,StringBuffer的区别?
- String s=“a”+“b” 会创建几个对象?
锁
- synchronized和reentrantlock的区别?
- java乐观锁和悲观锁?
- Java 有哪些重要的锁?
- AQS实现
- 有了synchornized为什么还会出现lock
多线程
- 多进,多线,多协各自优势和劣势?
- Java有哪些线程状态?
- 如果一个进程创建了几万个线程会出现什么问题?
- .怎么让两个线程有序执行?
- 多线程如何做同步
- 线程的上下文切换需要切换什么东西
- completablefuture 和 futuretask
- 怎么进入阻塞状态
- 怎么进入runnable状态
- java线程上下文切换具体过程
杂
- 如果让你调研是否要从Java 8升级到更新的版本(如11或17),你会如何评估其必要性?
- BigDecimal怎么存储,怎么计算,有什么注意事项,为什么他能保证不丢失
- JDK Proxy 和 CGLib Proxy 的区别
- Java中你遇到过哪些异常?你分别怎么处理?
- 团队升级JDK版本的话你怎么调研?
- Java分配大对象怎么进行性能优化
- 泛型、反射和类型推断的关系