知识体系和面试常见问题解析
技术专家全面讲解知识体系,面试常见问题经验总结,并提供辅导和咨询。
![](http://techsharespace.com/wp-content/uploads/2021/02/小悠老师-150x150.png)
Java 面试题
对于服务端开发、Android 开发、大数据开发等岗位,Java 是需求量最高的软件开发技能之一。
常见问题
- 介绍一下 JDK 和 JRE,两者有区别吗?
- Java 程序是怎么执行的?
- 谈谈值传递和引用传递。
- 讲一下 int、char、long 各占多少字节。
- 讲一下 int 和 Integer 的区别。
- 列举几个 Object 类的方法。
- String 是基础数据类型吗?
- 请列举 String 类的常用方法。
- 讲讲 String s = new String(“abc”)创建对象的情况。
- String s = “i” 与 String s = new String(“i”)有区别吗?
- String 为什么设计成不可变的?
- 讲讲 Java 中 String.length() 的实现原理。
- String 转换成 Integer 的方式有哪些?介绍一下原理。
- Java 中操作字符串都有哪些类?它们之间有什么区别?
- 说一下 String、StringBuffer 和 StringBuilder 的区别。
- 讲一下常见的编码方式。
- 说一下 utf-8 编码的中文占几个字节,int 占几个字节?
- Math.round(-6.5) 等于多少?
- 请列举 Files 的常用方法。
- Java 中 IO 流分为哪几种?
- Java 中 IO 流分为几种?有什么区别?
- 谈谈对 Java 注解的理解。
- BIO、NIO、AIO 有什么区别?
- 讲一下几种单例模式实现,其他常见的设计模式,以及项目中的使用。
- 谈谈对依赖注入的理解。
- 谈谈 Kotlin。
面向对象
- 讲一下创建一个类的几种方法。
- 说一下 Java 成员变量、局部变量和静态变量的创建和回收时机。
- 讲讲类的实例化顺序。
- 讲讲类成员的权限。
- 讲一下 final 的作用。
- 谈谈 Java 中实现多态的机制。
- 谈谈对多态的理解。
- 接口和抽象类有什么区别?
- 分别说一下抽象类和接口的使用场景。
- 普通类和抽象类有哪些区别?
- 抽象类必须要有抽象方法吗?
- 抽象类可以没有方法和属性吗?
- 抽象类能使用 final 修饰吗?
- 静态属性和静态方法是否可以被继承?是否可以被重写?原因是什么?
- 父类的静态方法能否被子类重写?
- 谈谈对成员内部类、静态内部类、局部内部类和匿名内部类的理解。
- 谈谈静态内部类的设计目的。
- 讲一下闭包和局部内部类的区别。
- 谈谈对解析与分派的理解。
- == 和 equals 有什么区别?
- 讲讲 “equals”、“==” 与 “hashCode” 的区别和使用场景。
- 讲一下 hashCode 和 equals 方法的关系。
- 两个值相等的 Integer 对象用 == 做比较,是否相等?
- 两个对象的 hashCode() 相同,则 equals() 也一定为 true,对吗?
- 如何重写 equals() 方法?为什么还要重写 hashCode()?
- 修改一个对象的 equals 方法的签名,用 HashMap 存放该对象实例的时候,会调用哪个 equals 方法?
- 讲一下 final、static 和 synchronized 分别能修饰什么,以及修饰后的作用。
- 介绍 final、finally、finalize 的区别。
- 克隆的作用是什么?
- 如何实现对象的克隆?
- Java 中深拷贝与浅拷贝的区别是什么?
- 实现深拷贝的方式有哪些?
- 什么是 Java 序列化?什么情况下需要序列化?
- 讲一下对象序列化与反序列化。
- 介绍一下序列化的方式。
- 如何把 Java 对象序列化到文件?
异常处理
- 介绍一下 Java 的异常处理机制。
- 讲一下常见的异常类有哪些?
- 讲讲 Error 和 Exception 的区别。
- 讲一下 throw 和 throws 的区别。
- 讲讲 final、finally、finalize 的区别。
- 在 try-catch-finally 中,如果在 catch 中 return,finally 还会执行吗?
- 说一下 try-catch-finally 哪个部分可以省略?
反射
- 谈谈什么是反射?
- 讲一下 Class.forName 和 ClassLoader 的区别。
- 请介绍一下动态代理和实际应用场景。
- 谈谈 Java 的反射机制,以及应用场景。
- 讲讲静态代理和动态代理的区别,以及使用场景。
- 讲一下动态代理的原理。
泛型
- 什么是泛型?
- 讲一下泛型原理。
- 为什么要使用泛型?
- 谈谈 Java 泛型中的类型擦除,以及有哪些局限性?
- 说一下泛型中 extends 和 super 的区别。
集合类
- 请列举你知道的 Java 集合类。
- ArrayList 的扩容机制。
- ArrayList 与 LinkedList 的区别。
- Array 和 ArrayList 的区别是什么?
- ArrayList 和 LinkedList 的区别是什么?
- ArrayList 和 Vector 的区别是什么?
- 如何实现数组和 List 之间的转换?
- Queue 的 poll()方法和 remove()方法的区别是什么?
- 讲讲 HashMap 的实现原理,以及 Hash 冲突。
- 讲讲 HashTable 的实现原理。
- 讲讲 HashSet 的实现原理。
- 讲讲 HashSet 和 TreeSet 的区别。
- 谈谈 ArrayList 和 HashMap 的底层实现原理和使用场景。
- HashMap 与 HashTable 的区别。
- HashMap 与 HashSet 的区别。
- HashMap 与 HashSet 分别是如何判断集合元素重复的?
- HashMap 与 ArrayMap 的区别。
- LinkedHashMap 的实现原理和使用场景。
- 如何决定使用 HashMap 还是 TreeMap?
- 讲一下 TreeMap 的具体实现。
- 讲讲 HashMap 是如何 put 数据的?
- 谈谈 HashMap 并发操作时的安全性。
- HashMap 在扩容时,对读写操作有什么特殊处理?
- Java 中 HashMap 的存储、冲突、扩容、并发访问分别是怎么解决的?
- 讲一下集合框架底层 JDK 实现(HashMap 和 Hashtable 的区别、Set、List等)。
- 讲讲 HashMap 版本变化和原理。
- 讲一下 Java 8 中 HashMap 的优化。
- 手写实现 HashMap。
- 讲讲 List、Set 以及 Map 的区别。
- 集合 Set 实现 Hash,如何防止碰撞?
- Collection 和 Collections 的区别是?
- Iterator 有什么特点?
- 请简单介绍迭代器 Iterator。
- Iterator 和 ListIterator 的区别是什么?
- 谈谈 Map 遍历的 keySet() 和 entrySet()性能差异的原因。
- 怎么确保一个集合不能被修改?
- 有哪些方法可以解决哈希冲突?
- 拉链法中链表过长时变形为红黑树有什么优缺点?
- 谈谈 Fail-Fast 机制。
多线程
- 并行和并发有什么区别?
- 线程有哪些状态?
- 讲讲 Java 线程的状态及相互转换。
- 谈谈线程的几种状态。
- 谈谈线程 sleep() 和 wait() 方法的区别。
- 讲一下开启线程的几种方式。
- 多线程有几种实现方式?请列举。
- Java 中使用多线程的方式有哪些?
- 讲讲 Thread 中 run() 与 start() 方法的区别。
- 谈谈多线程实现的几种方式(Thread、Runnable、Callable、线程池)及各自的特点。
- 介绍一下用 Callable 和 Future 创建线程。
- Runnable 和 Callable 有什么区别?
- Java 线程中 notify 和 notifyAll 方法有什么区别?
- 线程通信的方法 wait()、notify()和 notifyAll()被定义在 Object 类里,原因是什么?
- 什么是线程安全?
- 如何保证线程安全?
- 在 Java 程序中怎么保证多线程的运行安全?
- 如何控制某个方法允许并发访问线程的个数?
- 如何保证多线程读写文件的安全?
- 谈谈线程同步的几种方式和线程间通信。
- 如何关闭线程?
- 讲讲 interrupted 和 isInterrupted 方法的区别。
- 谈谈 ThreadLocal 用法和原理。
- 谈谈线程池。
- 如何创建线程池?
- 线程池都有哪些状态?
- 创建线程池有几种方式?
- 谈谈对线程池的理解,以及创建线程池的几个关键参数。
- Java 初始化一个线程池有哪些参数可以配置,分别是什么作用?
- 为什么要使用线程池?
- 线程池中 submit() 和 execute() 方法有什么区别?
- 线程阻塞的原因有哪些?
- 谈谈线程死锁,如何有效避免线程死锁?
- 谈谈死锁的几个必要条件。
- 介绍一下 CAS。
- 谈谈 Java 中 CAS 是怎么实现的?
- CAS 实现原子操作会出现什么问题?
- 说一下 atomic 的原理。
- 谈谈 AtomicInteger 的底层实现原理。
- 谈谈 Java 的 Atomic 类,以及实现原理和缺点。
- 介绍一下 volatile。
- 讲讲 volatile 的用法。
- 讲讲 volatile 的原理。
- 谈谈 volatile 和重排序。
- volatile int a++,会被马上看到吗?
- 如果一个 int 变量用 volatile 修饰,多线程做 i++ 操作,是否线程安全?如何保证 i++ 线程安全?
- volatile 作用于 boolean、Boolean,是否有区别?
- Java 有哪些锁机制,分别有什么特点?
- 讲讲 Lock 的原理。
- 讲讲公平锁和非公平锁的区别。
- 讲讲对象锁和静态锁之间的区别。
- 对象锁和类锁会互相影响吗?
- 谈谈悲观锁和乐观锁。
- 谈谈 Java 中的几种常见锁,以及使用场景。
- 讲讲 ReentrantLock 的内部实现。
- synchronized 和 Lock 的区别是什么?
- synchronized 和 ReentrantLock 区别是什么?
- 说明一下 static synchronized 方法的多线程访问和作用。
- 介绍一下 synchronized 底层实现原理?
- 多线程中 synchronized 锁升级的原理是什么?
- 讲讲 synchronized 修饰 static 方法、普通方法、类、方法块的区别。
- 谈谈 synchronized 和 volatile 关键字的区别。
- 讲讲 ReentrantLock、synchronized 和 volatile 的区别。
- 讲讲 happens-before 原则。
- 讲讲懒汉式单例的同步问题。
- 谈谈守护线程,如何实现守护线程?
- 谈谈 BlockingQueue?以及实现原理和使用场景?
- 谈谈 Java 线程安全的集合,以及特点。
- 请列举线程安全的集合类。
- ConcurrentHashMap 的实现原理。
- 介绍一下 ConcurrentHashMap 的原理,以及效率高的原因。
- J.U.C 包的源码分析(CAS、AQS、ConcurrentHashMap、ThreadLocal、CyclicBarrier、CountDownLatch、Atom、阻塞队列等)。
虚拟机
- 介绍一下 JVM 的主要组成部分和作用。
- JVM 内存布局是怎样的?
- 讲讲JVM 内存分配策略。
- 介绍一下 finalize 的原理。
- 介绍一下 JVM 运行时数据区。
- .class 文件是什么类型的文件?
- Java 虚拟机是如何判定热点代码的?
- 说一下堆和栈的区别。
- 讲讲队列和栈,有什么区别?
- 介绍一下编译过程的各个阶段。
- 谈谈即时编译器的优化方法。
- 谈谈 Java 的内存回收机制。
- 谈谈 GC 的工作机制。
- 谈谈引用计数和可达性分析。
- JVM 有哪些垃圾回收算法?
- JVM 有哪些垃圾回收器?
- 讲讲对象被垃圾回收机制处理的条件。
- 如何判断对象是否可以 GC?
- 讲一下触发 full GC 的时机。
- 可以作为 GC root 的对象有哪些?
- 讲一下新生代垃圾回收器和老年代垃圾回收器都有哪些?有什么区别?
- 谈谈分代垃圾回收器的工作原理。
- 讲讲新生代转移到老年代的触发条件。
- 介绍一下 Java 中的引用类型。
- 谈谈 Java 的四种引用,区别和使用场景。
- 什么是强、软、弱、虚引用?它们的区别?
- Java 类什么时候会做初始化?
- 讲讲 JVM 中类的加载机制与加载过程。
- 讲讲 Java 类的加载机制。
- 讲一下类加载的完整执行过程。
- 谈谈类加载机制,双亲委派机制。
- 什么是双亲委派模型?
- 为什么使用双亲委托模型?
- 介绍一下双亲委派模型中有哪些方法。
- 如何自定义类加载器?
- 怎么打破双亲委派机制?
- 谈谈 Java 软件系统运行速度慢的解决方法。
- 内存溢出是什么?什么原因?谈谈解决方法。
- 讲一下常用的 JVM 调优的参数。
- Java 应用调优过哪些 JVM 参数,为什么这么做?
- 谈谈 JVM 调优工具。
Web 开发
- JSP 和 servlet 有什么区别?
- 介绍一下 JSP 的 4 种作用域?
- 讲一下 JSP 有哪些内置对象?作用分别是什么?
- 讲讲 session 和 cookie 有什么区别?
- 如果客户端禁止 cookie,还能实现 session 吗?
- 说一下 session 的工作原理。
- 讲讲 spring mvc 和 struts 的区别。
- 谈谈如何避免 SQL 注入?
- 什么是 CSRF 攻击,如何避免?
- 介绍一下 XSS 攻击,如何避免?