
JD Java 工程师面试题
一,Java 基础
ü Static 方法是否能被覆盖?
ü 集合不用泛型会造成什么问题?比如 List list = new ArrayList();
ü Java 泛型中 extends 和 super 的用法?
ü IO 字节流和字符流区别?
ü 系列化
u Serializable 和 Externalizable 区别?
u serialVersionUID 不定义有什么问题?
ü NIO?
ü sleep()和 wait()方法区别?
ü 为什么等待和通知是 Object 类而不是 Thread 中声明的?
ü 为什么 Java 中 wait 方法需要在 synchronized 的方法中调用?(wait 和 notify 方法之间的任何潜在竞
争条件)
ü 为什么 Java 中不支持多重继承?(钻石问题)
ü 为什么 Java 不支持运算符重载?(清晰、避免混乱、JVM 复杂性)
ü 为什么 String 在 Java 中是不可变的?(对象池、Map 键、安全性)
ü 为什么 char 数组比 Java 中的 String 更适合存储密码?(String 不变)
ü 如何使用双重检查锁定在 Java 中创建线程安全的单例?
ü synchronized 和 volatile?
ü 同步方法和同步代码块区别?
ü Lock 和 synchronzied 区别?
ü Java 中偏向锁,自旋锁,轻量级锁,和重量级锁?
ü 无锁化编程的途径有哪些?
ü Java 线程池 corePoolSize, maximuPoolSize, workQueue 的含义?
ü 如何结合业务场景和机器设置合适的线程池大小?
ü 同步器:Semaphore,CyclicBarrier,CountDownLatch,Exchanger?
ü Java 显示锁和隐式锁区别?
ü 什么是线程上下文切换?(存储和恢复 CPU 状态的过程,它使得线程执行能够从中断点恢复执行)
ü 多线程最佳实践?
l 给线程取有意义的名字
l 避免锁定和缩小同步范围
l 多用同步类少用 wait 和 notify
l 多用并发集合少用同步集合
ü 强引用,软 引用,弱引用?
l 强引用:主动放,才回收
l 软引用:内存缺,可回收,Get 可能为 null