One minute
来自王争的Java面试题
知乎上看到一篇关于Java的面试题,Java面试时,你被深挖过什么问题? - 知乎 (zhihu.com), 感觉质量不错,借鉴一下。
1. Java基础
- 程序本质:代码是如何被执行的?CPU、操作系统、虚拟机各司其职
- 基础语法:从CPU角度看变量、数组、类型、运算、跳转、函数等语法
- 引用类型:同样是存储地址,为何Java引用比C/C++指针更安全?
- 基本类型:既然Java一切皆对象,那又为何保留int等基本类型?
- 位运算:»> 和 » 有何区别?(原码,反码,补码,算术位移,逻辑位移)
- 浮点数:计算机如何用二进制表示浮点数?为何0.1+0.1不等于0.2
- 字符:为何C/C++中char占1个字节,而Java中char占用2个字节
- 字符串:解释String类用到的三大技术:压缩、常量池、不可变
- 对象:请描述一下Java对象的内存结构,以及如何统计对象大小?
- 关键字:静态内部类实现的单例如何做到线程安全且可延迟加载?
- 容器:为什么不推荐在项目中使用Vector, Stack, Hashtable?
- 容器工具类:TimSort 和 DualPivotQuickSort的实现原理和区别
- HashMap: 为何HashMap中数组的大小必须是2的幂次方
- HashMap:为何链表树化的阈值为8,默认装载因子是0.75?
- LinkedHashMap: 如何使用LinkedHashMap实现LRU缓存?
- 迭代器:为什么使用迭代器遍历容器时同时修改容器会出错?
- 异常:在项目开发中如何正确的定义、处理、打印异常?
- 异常:高并发下异常太多导致程序变慢的核心原因是什么?
- io类库:java.io类库如此庞大,怎么才能全面系统的掌握它?
- nio类库:BIO,NIO, AIO 三种 Java IO模型的实现原理和区别
- 高速IO:普通的io读写流程都存在哪些性能问题?
- 高速IO:mmap和零拷贝是如何提高IO读写速度的
- 泛型:为什么C++泛型支持int等基本类型而Java泛型不支持呢?
- 反射:为什么通过反射创建对象要比使用new创建对象慢?
- 注解:注解的配置方式相对于XML配置文件有什么优缺点?
- 动态代理:为什么基于JDK实现的动态代理要求原始类有接口?
- 函数式编程:函数接口、Lambda表达式、方法引用、Stream流
2. 多线程
- 线程概述:有了进程为什么还要有线程?线程越多执行就越快吗?
- 线程模型:线程模型有哪几种?Java线程是基于哪种模型实现的?
- JMM上:CPU缓存和指令重排给多线程编程带来哪些问题?
- JMM中:如何解决多线程中的可见性、原子性、有序性问题?
- JMM下:既然CPU支持缓存一致性协议,为何还有可见性问题?
- 线程安全、临界区、竟态:如恶化分析一段代码是否线程安全?
- synchronized上:线程释放锁之后,如何通知其他线程获取锁?
- synchronized下:Java对synchronized进行了哪些性能优化?
- Lock上:相比Java synchronized,JUC Lock有什么优势?
- Lock中:如何使用AQS(抽象队列同步器)实现JUC Lock?
- Lock下:ReadWriteLock的锁升级与锁降级及其底层实现原理
- 死锁、活锁、饥饿:如何实现Java多线程死锁检测和撤销?
- CAS:如何不使用锁实现AQS中的线程安全的等待队列?
- 原子类:CAS的ABA问题是如何产生的以及如何解决?
- 累加器:如何用数据分片、哈希优化、去伪共享等提高累加性能?
- ThreadLocal: ThreadLocal相对于局部变量有何特殊应用场景?
- 条件变量:为什么使用条件变量需要先加锁
- 信号量:如何使用信号量来限制并发执行某个接口的线程数?/
- 锁存器和栅栏:如何编程测试接口在不同并发下的性能?
- 并发容器:如何实现线程安全的数组、链表、哈希表等常用数据结构?
- 写时复制:为什么JUC只支持数组类型的写时复制并发容器?
- 阻塞等待:如何实现支持阻塞读写的线程安全队列(阻塞并发队列)
- 分段加锁:HashMap线程不安全原因及ConcurrentHashMap实现原理
- 线程状态:为何synchronized和Lock这两种锁对应的线程状态不同
- 线程中断:如何安全地提前终止正在执行业务逻辑的线程?
- 线程池:线程池开多大最合适?为什么Redis单线程执行命令?
- 线程执行框架:如何获取一个线程所执行的代码的运行结果?
3. JVM
- 编译执行:Java代码的执行效率真的比C++等编译型语言低吗?
- JIT编译:请解释下方法内联、逃逸分析等动态编译优化策略
- 类加载:双亲委派加载机制存在的意义是什么?
- 内存分区:JVM内存模型中有几个分区?都是做什么用的?
- 可达性分析:虚拟机是如何判断一个对象是否可以被回收的?
- 垃圾回收算法:同为垃圾回收,为何FullGC比YongGC慢很多?
- 垃圾回收器上:如何在项目中选择合适的垃圾回收器?
- 垃圾回收器下:CMS和G1的并发垃圾回收是如何实现的?
- JVM性能优化:多久一次、一次多久FullGC和YongGC才算正常?
- JVM问题排查:使用jstat , jmap等工具排查OOM等JVM问题
Read other posts