Java 面试八股

共 195 节 · 按顺序读,也可以直接点标题跳转

195 节10 个专题免费阅读持续更新

JVM6 题

Java 并发10 题

Java 集合4 题

Java 语言特性5 题

JVM5 题

Spring8 题

网络与 HTTP2 题

MySQL 与缓存6 题

工程实践与排查4 题

Java 并发2 题

Java 基础21 题

Java 集合14 题

Java 并发31 题

88线程、进程、协程有什么区别?开始阅读 ›89并发和并行的区别是什么?开始阅读 ›90创建线程有几种方式?各有什么利弊?开始阅读 ›91线程有几种状态?状态之间是如何流转的?开始阅读 ›92什么是守护线程?和普通线程有什么区别?开始阅读 ›93多线程上下文切换是什么意思?代价有多大?开始阅读 ›94Java 中常见的锁有哪些?如何分类?开始阅读 ›95公平锁和非公平锁有什么区别?开始阅读 ›96什么是可重入锁?如何自己实现一个可重入锁?开始阅读 ›97悲观锁和乐观锁有什么区别?分别适用什么场景?开始阅读 ›98volatile 能保证原子性吗?为什么?开始阅读 ›99什么是 happens-before 原则?它约束了什么?开始阅读 ›100什么是线程死锁?如何排查与解决?开始阅读 ›101线程之间有哪些通信方式?wait/notify 为什么要配合锁?开始阅读 ›102ThreadLocal 是如何实现的?为什么用 ThreadLocalMap?开始阅读 ›103ThreadLocalMap 和 HashMap 有什么区别?开始阅读 ›104父子线程之间如何共享、传递数据?开始阅读 ›105线程池有几种创建方式?各自适合什么场景?开始阅读 ›106常见的阻塞队列有哪几种?怎么选?开始阅读 ›107线程数设置多少合适?公式为什么不靠谱?开始阅读 ›108任务特别多、队列满了又不能拒绝,怎么办?开始阅读 ›109动态线程池的实现原理是什么?开始阅读 ›110线程池的 submit 与 execute 有什么区别?异常去哪了?开始阅读 ›111LongAdder 和 AtomicLong 有什么区别?怎么选?开始阅读 ›112ForkJoinPool 的工作窃取是怎么回事?开始阅读 ›113如何正确中断一个线程?interrupt、isInterrupted 与 stop 的区别?开始阅读 ›114什么是伪共享?如何避免?开始阅读 ›115CompletableFuture 怎么做异步编排?有哪些坑?开始阅读 ›116CopyOnWriteArrayList 为什么适合读多写少?读写锁怎么选?开始阅读 ›117线程池如何优雅关闭?shutdown 与 shutdownNow 有什么区别?开始阅读 ›118双重检查锁单例为什么必须加 volatile?开始阅读 ›

JVM26 题

119有哪些常用的 JVM 启动参数?开始阅读 ›120Java 是编译型还是解释型语言?开始阅读 ›121Java 类加载的过程是怎样的?开始阅读 ›122JVM 如何判断对象是否存活的?开始阅读 ›123JVM 垃圾回收算法有哪些?开始阅读 ›124内存泄漏和内存溢出的区别是什么?开始阅读 ›125新生代和老年代的 GC 算法有哪些?开始阅读 ›126什么是强引用、软引用、弱引用和虚引用?开始阅读 ›127什么是双亲委派?怎么破坏?开始阅读 ›128项目中是如何选择垃圾回收器的?为啥选择这个?开始阅读 ›129FullGC 多久一次正常?开始阅读 ›130JVM 中一次完整的 GC 流程是怎样的?开始阅读 ›131YoungGC 和 FullGC 的触发条件是什么?开始阅读 ›132什么情况会导致 JVM 退出?开始阅读 ›133什么是 Class 常量池,和运行时常量池区别是什么?开始阅读 ›134什么是 AOT 编译?和 JIT 有什么区别?开始阅读 ›135JVM 运行时内存区域如何划分的?开始阅读 ›136OOM 引起原因以及如何排查?开始阅读 ›137CMS 和 G1 垃圾回收器的区别是什么?开始阅读 ›138CMS 的底层原理是什么?优势在哪?开始阅读 ›139满足什么条件时,一个 Java 类会被卸载?开始阅读 ›140JVM 对 Synchronized 关键字的实现是怎样的?开始阅读 ›141Spring 第一次启动执行慢,从 JVM 角度讲讲?开始阅读 ›142线上 Full GC 频繁,如何排查解决?开始阅读 ›143运行时常量池和字符串常量池的关系是什么?开始阅读 ›144JVM 类加载器如何保证核心类库不被覆盖?开始阅读 ›

Spring22 题

Spring Cloud / MyBatis / Tomcat29 题

167MyBatis 和 Hibernate 有什么区别?开始阅读 ›168#{} 和 ${} 的区别?开始阅读 ›169说说 Mybatis 的缓存机制?开始阅读 ›170Mybatis 是怎么实现字段映射的?开始阅读 ›171说说 Mybatis 插件的运行原理?开始阅读 ›172MyBatis 支持动态 SQL 吗?开始阅读 ›173谈谈 Mybatis 的工作原理?开始阅读 ›174Mybatis 是否支持延迟加载?实现原理是什么?开始阅读 ›175MyBatis 如何执行批量操作?开始阅读 ›176MyBatis 是如何进行分页的?分页插件的原理是什么?开始阅读 ›177为什么 Mapper 接口不需要写实现类?开始阅读 ›178Mybatis 都有哪些 Executor 执行器?开始阅读 ›179说说 JDBC 的执行步骤?开始阅读 ›180什么是微服务?它带来哪些挑战?开始阅读 ›181什么是 Spring Cloud,它有哪些组件?开始阅读 ›182为什么需要 Gateway 网关,它有什么作用?开始阅读 ›183Zuul、Gateway 和 Nginx 有什么区别?开始阅读 ›184Dubbo 和 Feign 有什么区别?开始阅读 ›185说说 HTTP 和 RPC 的区别?开始阅读 ›186LoadBalancer 和 Ribbon 的区别是什么?为什么用它替代 Ribbon?开始阅读 ›187Feign 第一次调用为什么会很慢?怎么解决?开始阅读 ›188Nacos 与 Eureka、ZooKeeper 的区别?开始阅读 ›189Nacos 如何实现服务注册与发现的?开始阅读 ›190Hystrix 和 Sentinel 的区别?开始阅读 ›191过滤器和拦截器的区别是什么?开始阅读 ›192介绍一下 Tomcat 的 IO 模型?开始阅读 ›193Tomcat 的类加载机制是怎样的?开始阅读 ›194Tomcat 中有哪些类加载器?开始阅读 ›195为什么 Tomcat 默认最大线程数是 200,而不是 N+1?开始阅读 ›