好的,这是一份精选的Java常见面试题(约160道),涵盖了Java基础、面向对象、集合、多线程、JVM、数据库、框架等多个方面,希望能帮助您准备面试:


一、 Java基础

  1. Java的特点是什么?(跨平台、面向对象等)
  2. 解释JDK、JRE、JVM的区别。
  3. 什么是字节码?为什么Java被称为“编译与解释并存”的语言?
  4. 基本数据类型有哪些?它们的大小和默认值是什么?
  5. String, StringBuffer, StringBuilder的区别?
  6. ==equals() 的区别?
  7. 重写(Override)和重载(Overload)的区别?
  8. final, finally, finalize的区别?
  9. 什么是自动装箱(Autoboxing)和拆箱(Unboxing)?
  10. Java中的访问权限修饰符有哪些?作用范围?
  11. static 关键字的作用?
  12. thissuper 关键字的作用?
  13. 什么是内部类?有哪些类型(成员内部类、静态内部类、局部内部类、匿名内部类)?
  14. 抽象类(abstract class)和接口(interface)的区别?Java 8后接口的变化?
  15. 什么是枚举(enum)?有什么好处?
  16. 异常体系结构?ErrorException的区别?检查型异常(Checked)和非检查型异常(Unchecked/Runtime)的区别?
  17. try-catch-finally块的作用?finally块一定会执行吗?
  18. 什么是反射(Reflection)?主要API有哪些?
  19. 什么是注解(Annotation)?元注解有哪些?
  20. Java 8新特性有哪些?(Lambda表达式、Stream API、Optional、新日期时间API等)

二、 面向对象

  1. 面向对象的三大特征(封装、继承、多态)?
  2. 什么是封装?如何实现?
  3. 什么是继承?extends关键字?Java支持多重继承吗?
  4. 什么是多态?如何实现(方法重写、接口、抽象类)?
  5. 向上转型(Upcasting)和向下转型(Downcasting)?
  6. 构造器(构造函数)的特点?能否被重写?
  7. 什么是对象创建的过程?(类加载、内存分配、初始化等)
  8. 什么是深拷贝和浅拷贝?
  9. 设计原则(SOLID)了解吗?(单一职责、开闭原则等)
  10. 常用设计模式?(单例模式、工厂模式、观察者模式等,至少掌握几种)

三、 集合框架

  1. 集合框架的主要接口和类?(Collection, Map, List, Set, Queue等)
  2. ArrayListLinkedList的区别?
  3. VectorArrayList的区别?
  4. HashMap的工作原理?(数组+链表/红黑树)
  5. HashMapHashtable的区别?
  6. ConcurrentHashMap如何保证线程安全?(JDK 1.7和1.8的区别)
  7. HashSet是如何保证元素唯一的?
  8. LinkedHashMap的特点?(有序)
  9. TreeMap的特点?(有序,基于红黑树)
  10. ComparableComparator接口的区别?
  11. IteratorListIterator的区别?
  12. fail-fastfail-safe机制?
  13. PriorityQueue的特点?

四、 多线程

  1. 进程和线程的区别?
  2. 创建线程的几种方式?(继承Thread类、实现Runnable接口、实现Callable接口、线程池)
  3. run()start()方法的区别?
  4. 线程的生命周期/状态?
  5. 什么是上下文切换?
  6. 线程同步的方式?(synchronized关键字、Lock接口)
  7. synchronized的用法?(修饰方法、代码块)
  8. volatile关键字的作用?(保证可见性、禁止指令重排)
  9. ReentrantLocksynchronized的区别?
  10. 什么是死锁?如何避免死锁?
  11. wait(), notify(), notifyAll()方法的作用?必须在同步块中使用吗?
  12. 什么是线程池?为什么使用线程池?
  13. ThreadPoolExecutor的核心参数?(核心线程数、最大线程数、队列等)
  14. Java提供了哪些线程池?(FixedThreadPool, CachedThreadPool, SingleThreadExecutor, ScheduledThreadPool
  15. FutureFutureTask的作用?
  16. CountDownLatch, CyclicBarrier, Semaphore的作用?
  17. 原子类(AtomicInteger等)如何实现原子操作?(CAS)

五、 JVM

  1. JVM的内存区域划分?(程序计数器、虚拟机栈、本地方法栈、堆、方法区/元空间)
  2. 堆内存如何划分?(新生代、老年代、永久代/元空间)
  3. 对象创建的过程?
  4. 对象的内存布局?(对象头、实例数据、对齐填充)
  5. 垃圾回收(GC)的必要性?哪些区域需要GC?
  6. 如何判断对象是否可回收?(引用计数法、可达性分析算法)
  7. 垃圾回收算法?(标记-清除、标记-整理、复制算法)
  8. 常见的垃圾收集器?(Serial, ParNew, Parallel Scavenge, CMS, G1, ZGC, Shenandoah)
  9. Minor GC / Young GC 和 Full GC / Major GC 的区别?
  10. 什么是STW(Stop The World)?
  11. 类加载过程?(加载、验证、准备、解析、初始化)
  12. 类加载器有哪些?(启动类加载器、扩展类加载器、应用类加载器、自定义类加载器)
  13. 什么是双亲委派模型?如何打破?
  14. 什么是内存溢出(OOM)?常见的OOM异常?(OutOfMemoryError
  15. 什么是内存泄漏?如何排查?
  16. JVM调优常用参数?(-Xms, -Xmx, -Xmn, -XX:SurvivorRatio等)
  17. 常用JVM性能监控与故障处理工具?(jps, jstat, jmap, jstack, jconsole, VisualVM

六、 数据库 & JDBC

  1. SELECT语句的基本语法?
  2. 什么是事务(Transaction)?ACID特性?
  3. 数据库隔离级别?(读未提交、读已提交、可重复读、串行化)
  4. 什么是脏读、不可重复读、幻读?
  5. 什么是索引?索引的优缺点?索引类型(B+树、Hash等)?
  6. 什么是最左前缀原则?
  7. 什么是聚集索引和非聚集索引?
  8. 如何优化SQL查询?
  9. 什么是连接(JOIN)?内连接、左连接、右连接、全连接的区别?
  10. 数据库三范式?
  11. charvarchar的区别?
  12. count(*), count(1), count(列名)的区别?
  13. JDBC连接数据库的基本步骤?
  14. StatementPreparedStatement的区别?
  15. 什么是数据库连接池?为什么使用?常见的连接池?(DBCP, C3P0, Druid, HikariCP)

七、 Web基础 & Servlet

  1. HTTP协议的特点?(无状态、基于请求/响应)
  2. HTTP请求方法?(GET, POST, PUT, DELETE等)
  3. HTTP状态码?(200, 301, 302, 404, 500等)
  4. 什么是Servlet?生命周期?
  5. doGet()doPost()方法的区别?
  6. 什么是Servlet上下文(ServletContext)和会话(HttpSession)?
  7. 什么是Cookie和Session?区别?
  8. 转发(RequestDispatcher.forward())和重定向(response.sendRedirect())的区别?
  9. JSP的九大内置对象?
  10. JSP和Servlet的区别?
  11. 什么是过滤器(Filter)?生命周期?
  12. 什么是监听器(Listener)?常见监听器?
  13. MVC模式是什么?各部分的作用?

八、 框架

Spring
  1. 什么是Spring框架?核心思想?(IoC, AOP)
  2. 什么是控制反转(IoC)?什么是依赖注入(DI)?实现方式?(构造器注入、Setter注入、注解注入)
  3. 什么是面向切面编程(AOP)?核心概念?(切面、连接点、通知、切点)
  4. Spring AOP的实现原理?(动态代理:JDK动态代理、CGLIB)
  5. @Autowired@Resource注解的区别?
  6. Spring Bean的作用域?(singleton, prototype, request, session, global-session
  7. Spring Bean的生命周期?
  8. Spring支持的事务管理?事务传播行为?事务隔离级别?
  9. Spring MVC的工作原理?(DispatcherServlet、处理器映射器、处理器适配器、视图解析器等)
  10. @Controller@RestController的区别?
  11. Spring Boot的核心特性?(自动配置、起步依赖、Actuator)
  12. Spring Boot的启动过程?
MyBatis
  1. 什么是ORM?MyBatis和Hibernate的区别?
  2. #{}${}的区别?
  3. MyBatis的一级缓存和二级缓存?
  4. MyBatis的动态SQL标签?(if, choose, where, set, foreach等)
  5. MyBatis如何执行批量操作?
  6. resultMapresultType的区别?
其他
  1. 什么是RESTful API?设计原则?
  2. 什么是微服务?优缺点?
  3. 服务注册与发现?(Eureka, Nacos, Consul)
  4. 服务调用?(Ribbon, Feign/OpenFeign)
  5. 服务熔断与降级?(Hystrix, Sentinel)
  6. 配置中心?(Spring Cloud Config, Nacos)
  7. 网关?(Zuul, Spring Cloud Gateway)
  8. 消息队列的作用?(解耦、异步、削峰)常见MQ?(RabbitMQ, Kafka, RocketMQ)
  9. 分布式事务解决方案?(2PC, 3PC, TCC, Seata)

九、 数据结构与算法

  1. 常见数据结构?(数组、链表、栈、队列、树、图、哈希表)
  2. 数组和链表的区别?
  3. 如何实现栈和队列?
  4. 二叉树遍历方式?(前序、中序、后序、层序)
  5. 二叉搜索树(BST)的特点?
  6. 平衡二叉树(AVL树)?
  7. 红黑树的特点?
  8. B树和B+树的区别?
  9. 哈希冲突的解决方法?(开放地址法、链地址法)
  10. 常见排序算法?(冒泡、选择、插入、希尔、归并、快速、堆排序)时间复杂度?
  11. 如何实现快速排序?
  12. 如何实现二分查找?
  13. 什么是动态规划?
  14. 什么是贪心算法?

十、 网络编程

  1. TCP和UDP的区别?
  2. TCP的三次握手和四次挥手?
  3. 什么是Socket编程?
  4. 什么是HTTP和HTTPS?区别?
  5. 什么是WebSocket?

十一、 其他

  1. 什么是序列化和反序列化?如何实现?
  2. 什么是泛型?擦除机制?
  3. 什么是注解处理器(APT)?
  4. Java 9模块化(JPMS)?
  5. Java 11新特性?
  6. Java 17新特性?(密封类、模式匹配等)
  7. 如何排查线上问题?(日志、监控、堆栈分析)
  8. 如何保证接口的幂等性?
  9. 如何设计一个高并发、高可用的系统?

这份清单涵盖了Java面试中的高频问题。建议在准备时:

  1. 理解原理:不要死记硬背,理解背后的机制和思想。
  2. 动手实践:对于代码题、算法题,务必动手写代码验证。
  3. 结合实际:思考问题在实际项目中的应用场景。
  4. 关注源码:对于集合、并发、框架等,了解核心类的源码实现大有裨益。

祝您面试顺利!

更多推荐