# interview **Repository Path**: tzj2015/interview ## Basic Information - **Project Name**: interview - **Description**: 面试 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2021-07-03 - **Last Updated**: 2021-07-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ##### Spring - IoC 的原理,为什么要用 IoC?这是一种什么设计思想? - AOP 的原理以及在项目中的实战应用。 - Spring Bean 生命周期,每一个接口以及其重写方法(比如 BeanNameAware#setBeanName )的作用。 - Spring 中有哪些设计模式? - Cglib 和 JDK proxy 的区别。 - Spring 是如何解决循环依赖的? - Spring 事件的作用以及写法。 - Spring 事务的传播级别,REQUIRED_NEW 和 NESTED 的区别。 - 说说你知道的几个 Spring 顶层接口以及其作用。 - 以一个客户端 HTTP 请求访问控制层方法为例,讲讲 Spring MVC 的接收请求、处理请求、解析视图的全过程,说得越详细越好。 ##### Spring Boot - Spring Boot 和 Spring 的关系。 - Spring Boot 是如何实现自动装配的?如何实现开箱即用? - Spring Boot starter 是如何实现的?有没有自己写过 starter? - 有没有自己对 Spring Boot 做过二次封装,比如将字符串系列化依赖 jackson 改为 fastjson? - 如何优雅地解决 try catch 过多的问题? - Spring Boot 如何在启动时执行 sql 语句完成 DDL 操作? - Spring Boot 是如何启动内嵌的 Tomcat 的? - 响应式编程 Webflux(需要了解 其底层 Reactor)。 ##### Spring Cloud - 微服务和 SOA 的概念,讲一下。 - Spring Cloud 和 dubbo 的区别,为什么你认为 Spring Cloud 更优? - 服务注册中心 Eureka 和 zookeeper 的区别,以及它们在 CAP 上的侧重性。 - Spring Cloud 各个组件都讲一遍。 - Spring Cloud 在生产环境中的利好和挑战? ##### ORM 框架 MyBatis / Hibernate - MyBatis 和 Hibernate 的区别,你的项目为什么选择 MyBatis / Hibernate? - MyBatis 有哪些功能模块? - MyBatis 如何解决模糊查询问题? - MyBatis 的一级缓存 / 二级缓存。 - MyBatis 如何实现批量插入或更新数据? - MyBatis 是如何防止 SQL 注入的? - MyBatis如何实现类似于switch-case的功能(choose when标签)? ##### Java 基础 - 集合相关知识,主要包括 list set map,了解各自的线程安全写法、扩容机制和排序方法。 - HashMap ConcurrentHashMap 底层原理,会问的非常深,要深入了解链表、数组、红黑树、Hash冲突的概念和彼此之间的关系,做到无论面试官问什么问题都能有的放矢。 - ConcurrentHashMap 比 Hashtable 做了哪些优化? - 为什么要同时重写 hashCode() 和 equals() 方法? - String,了解得越多越好,包括不可变类、常量池、拼接的底层优化等等。 - ThreadLocal的底层原理(除了get set 方法之外,要了解 Thread / ThreadLocal / ThreadLocalMap 之间的关系);ThreadLocal 在你的项目中哪个地方会用上?你如何避免 ThreadLocal 可能造成的 OOM 问题? ##### 单元测试 - 单元测试有什么作用?做单元测试对你们的项目有什么帮助? - 单元测试一般用到哪些框架? - 单元测试有什么重要指标?为了完成这一指标你需要做哪些工作? ##### JVM - Java 内存区域划分,每个区域的作用都详细说说。 - 你在线上常用的垃圾回收器有哪些?各自是基于什么垃圾回收算法的? - 你用过哪些故障处理工具?命令有哪些?可视化工具有哪些?主要是做什么故障排查?排查到故障后如何处理? - 讲一个你在生产环境中处理过的 JVM 故障(比如 OOM)或做过的 JVM 调优。 - OOM(Out Of Memory) 和 SOF(Stack Over Flow) 的区别。 - JVM 类加载过程(加载-校验-准备-解析-初始化-使用-卸载),每一步都要说得越详细越好。 - Java 内存模型,说得越详细越好(结合 8 大指令、线程和、volatile、原子性/可见性/有序性、Happens-Before 来展开叙述)。 - 强引用、软引用、弱引用的概念,JDK 源码中哪些地方会用到软引用或弱引用? - 有没有 JVM 调优经验?说说你自己在生产环境进行过的 JVM 调优过程,用到了哪些参数? ##### 线程 - 线程安全是如何定义的?Java 中有哪些类是线程安全的?你如何保证你的代码线程安全? - 线程和进程的关系,Java 线程和操作系统线程的关系。 - 线程的状态以及相互之间是如何转换的? - 线程池的作用、写法,各参数的作用、关系以及你是如何根据生产环境的并发量和服务器配置设置各个参数的。线程池的阻塞队列配置需要注意什么? ##### 锁 - 乐观锁 CAS、悲观锁(synchronized, reentrantlock),底层原理说得越详细越好。 - 如何实现分布式锁(DB、Redis、zookeeper)。 - 单例模式,双重检测锁的写法,要深入了解一下。 - 锁的优化:适应性自旋、锁消除、锁膨胀、轻量级锁、偏向锁,各自是如何在线程之间更高效地共享数据以及解决竞争问题的? ##### 设计模式 - 说说你熟悉的设计模式,说说每一种的具体实现。 - SOLID 五大面向对象设计原则,每一种都详细举例讲一讲。 - 你所熟悉的设计模式中哪些地方用到了 SOLID 设计原则? ##### 高并发 - 你们公司生产环境的 TPS / QPS 在峰值的时候一般是多少? - 请讲一下你解决过的一个生产环境的高并发问题。 - 有哪些方案可以解决高并发场景下的性能瓶颈或数据不一致的问题(包括乐观锁、缓存、读写分离、分库分表等等,知道得越多越好)。 ##### IO - 字节流、字符流的区别以及使用场景。 - NIO BIO AIO WebSocket Netty,都要了解。 - 平时工作中哪些地方用到过 IO ?用的是什么 IO 或框架? ##### 缓存 Redis - Redis 之前为什么被设计为单线程的?但在 Redis 6 中为什么被设计为多线程? - Redis 的基本数据类型有哪些? - Redis 的数据如何做持久化备份? - Redis 如何实现发布-订阅模式? - Redis 的多机功能有几种形式?(复制、哨兵、集群) - 缓存穿透、缓存击穿、缓存雪崩的概念以及各自的应对措施。 - Redis 的事务。 - 如何使用 Redis 做一个秒杀系统? - 如何使用 Redis 实现分布式锁? - 聊一聊 Redis 中布隆过滤器(Bloom Filter)的原理,以及如何使用? ##### 消息队列 RabbitMQ / Kafka / ActiveMQ / RocketMQ 任选一种,回答熟悉的即可 - 你为什么要在项目中使用 MQ,使用 MQ 后比原来做了哪些优化? - 讲一讲发布-订阅模式以及你会如何使用 Java 实现发布-订阅模式。 - RabbitMQ 如何保证消息不丢失。 - 技术选型:你为什么选择 RabbitMQ 作为消息队列?(同理,可回答你熟悉的其他 MQ) - RabbitMQ 的基础概念(vhost, connection, channel, queue, binding, routingkey, exchange 等等),说得越详细越好。 ##### 数据库 MySQL - MySQL 你会使用什么方式做慢查询分析?如何根据分析结果做改进?(Explain) - MySQL 的存储引擎(InnoDB)以及底层索引的数据结构(B+树),说得越详细越好。 - 为什么 B+ 树可以优化 MySQL 的查询效率?请从磁盘 IO 的角度来分析一下。 - B+ 树比 B 树做了哪些优化? - 公司如果有笔试题,一般会出一些 SQL 题目,所以要有一定的手写 SQL 的能力。 - MySQL 数据库表中你的数据量有多大?你是如何解决数据量过大或访问压力过大的问题的?(分库分表、读写分离,都要能详细说说) - 事务的四个特性(ACID,需要详细说明)。 - 数据库的隔离级别(MySQL 默认的是什么要说一下),每个隔离级别能解决什么问题(注意不可重复读和幻读的区别)。 ##### 网络 - HTTP 长连接和短连接的区别。 - TCP 三次握手过程,以及和 UDP 的区别。 - cookie,session 的作用,以及你用 cookie 来做过什么事情?(购物车功能,如果了解的话可以详细说说) - GET 和 POST 请求的区别。 ##### 安全框架 - 你如何实现系统间的单点登录? - 说说 Shiro 或 Spring Security 中的校验和鉴权是如何实现的?(可以结合自己写过的 Spring Boot + Shiro 项目,详细阐述一下) - JWT(Java Web Token) 的作用,你在项目中用 JWT 中做了什么事情? ##### Linux - 生产环境突然崩溃,在 Linux 中使用什么命令进行排查。 - CPU 占用情况、剩余内存、磁盘空间占用情况、查看端口被哪个进程占用、查看 Java 进程。