知识体系和面试常见问题解析

技术专家全面讲解知识体系,面试常见问题经验总结,并提供辅导和咨询。

助理老师QQ

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 攻击,如何避免?