Java 面试八股
共 195 节 · 按顺序读,也可以直接点标题跳转
195 节10 个专题免费阅读持续更新
JVM6 题
Java 并发10 题
07★ JMM 是什么?volatile 如何保证可见性与有序性?开始阅读 ›08★ synchronized 底层原理是什么?锁升级过程是怎样的?开始阅读 ›09CAS 的原理是什么?如何解决 ABA 问题?开始阅读 ›10AQS 是什么?state 与同步队列如何协作?开始阅读 ›11ReentrantLock 与 synchronized 有何区别?如何选择?开始阅读 ›12CountDownLatch、CyclicBarrier、Semaphore 有何区别?开始阅读 ›13ThreadLocal 的原理是什么?为什么会产生内存泄漏?开始阅读 ›14★ 线程池的核心参数与执行流程是怎样的?开始阅读 ›15线程池的四种拒绝策略各适用什么场景?开始阅读 ›16为什么禁止使用 Executors 默认工厂创建线程池?开始阅读 ›
Java 集合4 题
Java 语言特性5 题
JVM5 题
Spring8 题
31★ Spring IoC 是什么?Bean 的生命周期经历了哪些阶段?开始阅读 ›32★ Spring AOP 的原理是什么?JDK 动态代理与 CGLIB 怎么选?开始阅读 ›33Bean 的作用域有哪些?Spring 是如何解决循环依赖的?开始阅读 ›34Spring 事务的传播行为有哪几种?分别是什么含义?开始阅读 ›35事务隔离级别有哪几种?脏读、不可重复读、幻读分别是什么?开始阅读 ›36★ @Transactional 在哪些场景下会失效?如何避免?开始阅读 ›37MyBatis 中 #{} 与 ${} 有什么区别?会引发 SQL 注入吗?开始阅读 ›38MyBatis 一级缓存和二级缓存分别是什么?使用中有哪些坑?开始阅读 ›
网络与 HTTP2 题
MySQL 与缓存6 题
工程实践与排查4 题
Java 并发2 题
Java 基础21 题
53String、StringBuilder 和 StringBuffer 的区别?开始阅读 ›54String str = new String("abc") 创建了几个对象?开始阅读 ›55字符串拼接 + 与 intern 在底层做了什么?开始阅读 ›56为什么不能用浮点数表示金额?开始阅读 ›57BigDecimal 和 Long 哪个表示金额更合适,怎么选择?开始阅读 ›58为什么不能用 BigDecimal 的 equals 方法做等值比较?开始阅读 ›59为什么重写 equals 时一定要重写 hashCode?开始阅读 ›60深拷贝和浅拷贝的区别?开始阅读 ›61final、finally、finalize 的区别?开始阅读 ›62finally 中代码一定会被执行吗?开始阅读 ›63接口和抽象类的区别是什么?怎么选择?开始阅读 ›64为什么 Java 不支持多继承?开始阅读 ›65如何理解 Java 中的多态?开始阅读 ›66什么是泛型?为什么要使用它?开始阅读 ›67Java 是值传递还是引用传递?开始阅读 ›68自动装箱与拆箱有哪些坑?Integer 缓存是怎么回事?开始阅读 ›69while(true) 和 for(;;) 哪个性能更好?开始阅读 ›70AIO、BIO 和 NIO 的区别?开始阅读 ›71NIO 的三大组件与零拷贝是怎么回事?开始阅读 ›72什么是 SPI,和 API 有啥区别?开始阅读 ›73什么是 UUID,能保证唯一性吗?开始阅读 ›
Java 集合14 题
74ArrayList、LinkedList 与 Vector 的区别?开始阅读 ›75HashMap、Hashtable 和 ConcurrentHashMap 的区别?开始阅读 ›76Java 中的集合类有哪些?如何分类的?开始阅读 ›77说说 HashMap 的扩容机制?如何扩容的?开始阅读 ›78为什么 HashMap 的默认负载因子要设置成 0.75?开始阅读 ›79为什么在 Jdk 8 中 HashMap 要转成红黑树?开始阅读 ›80HashMap 用在并发场景中会出现什么问题?开始阅读 ›81HashMap 的 remove 方法是如何实现的?开始阅读 ›82HashMap 在 get 和 put 时,底层流程是怎样的?开始阅读 ›83HashMap 的 hash 方法是如何实现的?开始阅读 ›84Set 如何保证元素不重复的?开始阅读 ›85什么是 fail-fast?什么是 fail-safe?开始阅读 ›86ConcurrentHashMap 是如何保证线程安全的?开始阅读 ›87ConcurrentHashMap 为什么在 JDK 1.8 中废弃分段锁?开始阅读 ›
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 题
145SpringBoot 和 Spring 的区别是什么?开始阅读 ›146Spring 中创建 Bean 有几种方式?开始阅读 ›147Spring 中的 Bean 是线程安全的吗?开始阅读 ›148Spring 中 Bean 的作用域有哪些?开始阅读 ›149@Autowired 和 @Resource 注解的区别?开始阅读 ›150Spring Bean 的生命周期是怎么样的?开始阅读 ›151谈谈 Spring 的 AOP?开始阅读 ›152谈谈 Spring 的 IOC?开始阅读 ›153Spring 的 AOP 在什么场景下会失效?开始阅读 ›154Spring 中用到了哪些设计模式?开始阅读 ›155BeanFactory 和 FactoryBean 的关系?开始阅读 ›156什么是 Spring 的三级缓存?开始阅读 ›157什么是 Spring 的循环依赖问题?开始阅读 ›158Spring 的事务传播机制有哪些?开始阅读 ›159Spring 事务失效可能是哪些原因?开始阅读 ›160如何在 Spring 启动过程中做缓存预热?开始阅读 ›161什么是 Spring MVC 三层架构?开始阅读 ›162SpringBoot 的启动流程是怎样的?开始阅读 ›163SpringBoot 如何实现 main 方法启动 Web 容器的?开始阅读 ›164SpringBoot 自动配置是如何实现的?开始阅读 ›165SpringMVC 处理请求的流程是怎样的?开始阅读 ›166Spring Boot Controller 层怎么实现并发安全的?开始阅读 ›
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?开始阅读 ›