160道Java面试题精华:从基础到框架全覆盖
·
好的,这是一份精选的Java常见面试题(约160道),涵盖了Java基础、面向对象、集合、多线程、JVM、数据库、框架等多个方面,希望能帮助您准备面试:
一、 Java基础
- Java的特点是什么?(跨平台、面向对象等)
- 解释JDK、JRE、JVM的区别。
- 什么是字节码?为什么Java被称为“编译与解释并存”的语言?
- 基本数据类型有哪些?它们的大小和默认值是什么?
String,StringBuffer,StringBuilder的区别?==和equals()的区别?- 重写(Override)和重载(Overload)的区别?
final,finally,finalize的区别?- 什么是自动装箱(Autoboxing)和拆箱(Unboxing)?
- Java中的访问权限修饰符有哪些?作用范围?
static关键字的作用?this和super关键字的作用?- 什么是内部类?有哪些类型(成员内部类、静态内部类、局部内部类、匿名内部类)?
- 抽象类(
abstract class)和接口(interface)的区别?Java 8后接口的变化? - 什么是枚举(
enum)?有什么好处? - 异常体系结构?
Error和Exception的区别?检查型异常(Checked)和非检查型异常(Unchecked/Runtime)的区别? try-catch-finally块的作用?finally块一定会执行吗?- 什么是反射(Reflection)?主要API有哪些?
- 什么是注解(Annotation)?元注解有哪些?
- Java 8新特性有哪些?(Lambda表达式、Stream API、Optional、新日期时间API等)
二、 面向对象
- 面向对象的三大特征(封装、继承、多态)?
- 什么是封装?如何实现?
- 什么是继承?
extends关键字?Java支持多重继承吗? - 什么是多态?如何实现(方法重写、接口、抽象类)?
- 向上转型(Upcasting)和向下转型(Downcasting)?
- 构造器(构造函数)的特点?能否被重写?
- 什么是对象创建的过程?(类加载、内存分配、初始化等)
- 什么是深拷贝和浅拷贝?
- 设计原则(SOLID)了解吗?(单一职责、开闭原则等)
- 常用设计模式?(单例模式、工厂模式、观察者模式等,至少掌握几种)
三、 集合框架
- 集合框架的主要接口和类?(
Collection,Map,List,Set,Queue等) ArrayList和LinkedList的区别?Vector和ArrayList的区别?HashMap的工作原理?(数组+链表/红黑树)HashMap和Hashtable的区别?ConcurrentHashMap如何保证线程安全?(JDK 1.7和1.8的区别)HashSet是如何保证元素唯一的?LinkedHashMap的特点?(有序)TreeMap的特点?(有序,基于红黑树)Comparable和Comparator接口的区别?Iterator和ListIterator的区别?fail-fast和fail-safe机制?PriorityQueue的特点?
四、 多线程
- 进程和线程的区别?
- 创建线程的几种方式?(继承
Thread类、实现Runnable接口、实现Callable接口、线程池) run()和start()方法的区别?- 线程的生命周期/状态?
- 什么是上下文切换?
- 线程同步的方式?(
synchronized关键字、Lock接口) synchronized的用法?(修饰方法、代码块)volatile关键字的作用?(保证可见性、禁止指令重排)ReentrantLock与synchronized的区别?- 什么是死锁?如何避免死锁?
wait(),notify(),notifyAll()方法的作用?必须在同步块中使用吗?- 什么是线程池?为什么使用线程池?
ThreadPoolExecutor的核心参数?(核心线程数、最大线程数、队列等)- Java提供了哪些线程池?(
FixedThreadPool,CachedThreadPool,SingleThreadExecutor,ScheduledThreadPool) Future和FutureTask的作用?CountDownLatch,CyclicBarrier,Semaphore的作用?- 原子类(
AtomicInteger等)如何实现原子操作?(CAS)
五、 JVM
- JVM的内存区域划分?(程序计数器、虚拟机栈、本地方法栈、堆、方法区/元空间)
- 堆内存如何划分?(新生代、老年代、永久代/元空间)
- 对象创建的过程?
- 对象的内存布局?(对象头、实例数据、对齐填充)
- 垃圾回收(GC)的必要性?哪些区域需要GC?
- 如何判断对象是否可回收?(引用计数法、可达性分析算法)
- 垃圾回收算法?(标记-清除、标记-整理、复制算法)
- 常见的垃圾收集器?(Serial, ParNew, Parallel Scavenge, CMS, G1, ZGC, Shenandoah)
- Minor GC / Young GC 和 Full GC / Major GC 的区别?
- 什么是STW(Stop The World)?
- 类加载过程?(加载、验证、准备、解析、初始化)
- 类加载器有哪些?(启动类加载器、扩展类加载器、应用类加载器、自定义类加载器)
- 什么是双亲委派模型?如何打破?
- 什么是内存溢出(OOM)?常见的OOM异常?(
OutOfMemoryError) - 什么是内存泄漏?如何排查?
- JVM调优常用参数?(
-Xms,-Xmx,-Xmn,-XX:SurvivorRatio等) - 常用JVM性能监控与故障处理工具?(
jps,jstat,jmap,jstack,jconsole,VisualVM)
六、 数据库 & JDBC
SELECT语句的基本语法?- 什么是事务(Transaction)?ACID特性?
- 数据库隔离级别?(读未提交、读已提交、可重复读、串行化)
- 什么是脏读、不可重复读、幻读?
- 什么是索引?索引的优缺点?索引类型(B+树、Hash等)?
- 什么是最左前缀原则?
- 什么是聚集索引和非聚集索引?
- 如何优化SQL查询?
- 什么是连接(JOIN)?内连接、左连接、右连接、全连接的区别?
- 数据库三范式?
char和varchar的区别?count(*),count(1),count(列名)的区别?- JDBC连接数据库的基本步骤?
Statement和PreparedStatement的区别?- 什么是数据库连接池?为什么使用?常见的连接池?(DBCP, C3P0, Druid, HikariCP)
七、 Web基础 & Servlet
- HTTP协议的特点?(无状态、基于请求/响应)
- HTTP请求方法?(GET, POST, PUT, DELETE等)
- HTTP状态码?(200, 301, 302, 404, 500等)
- 什么是Servlet?生命周期?
doGet()和doPost()方法的区别?- 什么是Servlet上下文(
ServletContext)和会话(HttpSession)? - 什么是Cookie和Session?区别?
- 转发(
RequestDispatcher.forward())和重定向(response.sendRedirect())的区别? - JSP的九大内置对象?
- JSP和Servlet的区别?
- 什么是过滤器(Filter)?生命周期?
- 什么是监听器(Listener)?常见监听器?
- MVC模式是什么?各部分的作用?
八、 框架
Spring
- 什么是Spring框架?核心思想?(IoC, AOP)
- 什么是控制反转(IoC)?什么是依赖注入(DI)?实现方式?(构造器注入、Setter注入、注解注入)
- 什么是面向切面编程(AOP)?核心概念?(切面、连接点、通知、切点)
- Spring AOP的实现原理?(动态代理:JDK动态代理、CGLIB)
@Autowired和@Resource注解的区别?- Spring Bean的作用域?(
singleton,prototype,request,session,global-session) - Spring Bean的生命周期?
- Spring支持的事务管理?事务传播行为?事务隔离级别?
- Spring MVC的工作原理?(DispatcherServlet、处理器映射器、处理器适配器、视图解析器等)
@Controller和@RestController的区别?- Spring Boot的核心特性?(自动配置、起步依赖、Actuator)
- Spring Boot的启动过程?
MyBatis
- 什么是ORM?MyBatis和Hibernate的区别?
#{}和${}的区别?- MyBatis的一级缓存和二级缓存?
- MyBatis的动态SQL标签?(
if,choose,where,set,foreach等) - MyBatis如何执行批量操作?
resultMap和resultType的区别?
其他
- 什么是RESTful API?设计原则?
- 什么是微服务?优缺点?
- 服务注册与发现?(Eureka, Nacos, Consul)
- 服务调用?(Ribbon, Feign/OpenFeign)
- 服务熔断与降级?(Hystrix, Sentinel)
- 配置中心?(Spring Cloud Config, Nacos)
- 网关?(Zuul, Spring Cloud Gateway)
- 消息队列的作用?(解耦、异步、削峰)常见MQ?(RabbitMQ, Kafka, RocketMQ)
- 分布式事务解决方案?(2PC, 3PC, TCC, Seata)
九、 数据结构与算法
- 常见数据结构?(数组、链表、栈、队列、树、图、哈希表)
- 数组和链表的区别?
- 如何实现栈和队列?
- 二叉树遍历方式?(前序、中序、后序、层序)
- 二叉搜索树(BST)的特点?
- 平衡二叉树(AVL树)?
- 红黑树的特点?
- B树和B+树的区别?
- 哈希冲突的解决方法?(开放地址法、链地址法)
- 常见排序算法?(冒泡、选择、插入、希尔、归并、快速、堆排序)时间复杂度?
- 如何实现快速排序?
- 如何实现二分查找?
- 什么是动态规划?
- 什么是贪心算法?
十、 网络编程
- TCP和UDP的区别?
- TCP的三次握手和四次挥手?
- 什么是Socket编程?
- 什么是HTTP和HTTPS?区别?
- 什么是WebSocket?
十一、 其他
- 什么是序列化和反序列化?如何实现?
- 什么是泛型?擦除机制?
- 什么是注解处理器(APT)?
- Java 9模块化(JPMS)?
- Java 11新特性?
- Java 17新特性?(密封类、模式匹配等)
- 如何排查线上问题?(日志、监控、堆栈分析)
- 如何保证接口的幂等性?
- 如何设计一个高并发、高可用的系统?
这份清单涵盖了Java面试中的高频问题。建议在准备时:
- 理解原理:不要死记硬背,理解背后的机制和思想。
- 动手实践:对于代码题、算法题,务必动手写代码验证。
- 结合实际:思考问题在实际项目中的应用场景。
- 关注源码:对于集合、并发、框架等,了解核心类的源码实现大有裨益。
祝您面试顺利!
更多推荐

所有评论(0)