值此中秋佳节来临之际,为各位奋战在一线的校招学弟学妹,社招同僚们,送上一份薄利!!!
本系列文章是一套 Java 开发工程师常用的知识点总结,既可用于学习,亦或用于准备面试和面试他人。
是校招和社招小伙伴的必备佳品,成为offer收割机的最佳拍档。
试题一共包含 10 个部分,几乎涵盖了日常 Java 开发基础知识的方方面面,但是不包含领域特定的知识。
1. Java 基础
2. JVM 知识
3. 开源框架知识
4. 操作系统
5. 多线程
6. TCP 与 HTTP
7. 架构设计与分布式
8. 数据库知识
9. 消息队列
10. 缓存
1. JAVA 中的⼏种基本数据类型是什么,各自占用多少字节
2. String 类能被继承吗,为什么
3. String, Stringbuffer, StringBuilder 的区别
4. ArrayList 和 LinkedList 有什么区别
5. 讲讲类的实例化顺序,⽐如⽗类静态数据,构造函数,字段,子类静态数据,构造函数,字段,当 new 的时候,他们的执行顺序
6. ⽤过哪些 Map 类,都有什么区别, HashMap 是线程安全的吗,并发下使用的 Map 是什么,他们内部原理理分别是什么,比如存储⽅方式, hashcode,扩容,默认容量
7. JAVA8 的 ConcurrentHashMap 为什么放弃了了分段锁,有什么问题吗,如果你来设计,你如何设计
8. 有没有顺序的 Map 实现类,如果有,他们是怎么保证有序的
9. 抽象类和接⼝的区别,类可以继承多个类么,接口可以继承多个接口么,类可以实现多个接口么
10. 继承和聚合的区别在哪
11. IO 模型有哪些,讲讲你理理解的 nio ,他和 bio, aio 的区别是啥,谈谈 reactor 模型
12. Java nio 3 个重要组件是哪⼏几个? buffer 怎么从写模式切换到读模式?两种模式下的position, limit, capacity 有区别吗
13. 反射的原理,反射创建类实例例的三种⽅式是什么
14. 反射中, Class.forName 和 ClassLoader 区别
15. 描述动态代理理的⼏种实现⽅方式,分别说出相应的优缺点
16. 动态代理理与 cglib 实现的区别
17. 为什么 CGlib ⽅式可以对接口实现代理
18. final 的⽤用途
19. 写出三种单例模式实现
20. 如何在父类中为子类⾃动完成所有的 hashcode 和 equals 实现?这么做有何优劣
21. 请结合 OO 设计理理念,谈谈访问修饰符 public、 private、 protected、 default 在应用设计中的作用
22. 深拷贝和浅拷⻉区别
23. 数组和链表数据结构描述,各自的时间复杂度
24. error 和 exception 的区别, CheckedException, RuntimeException 的区别
25. 请列出 5 个运行时异常
27. 说一说你对 java.lang.Object 对象中 hashCode 和 equals ⽅法的理理解。在什么场景下需要重新实现这两个方法
28. 在 jdk1.5 中,引⼊了泛型,泛型的存在是用来解决什么问题
29. 什么是泛型擦除?擦除是不是意味着运行期就无法获得泛型信息了
30. 这样的 a.hashcode() 有什么用,与 a.equals(b)有什么关系
31. 有没有可能 2 个不相等的对象有相同的 hashcode
32. Java 中的 HashSet 内部是如何⼯工作的
33. 什么是序列化,怎么序列列化,为什么序列化,反序列化会遇到什么问题,如何解决
34. java8 的新特性
35. 枚举类可以继承其他类吗?为什么
36. 为什么枚举类可以用来实现单例模式?通过序列化反序列化可以破坏枚举的单例例模式吗?怎么可以破坏
37. 了解强引用,软引用,虚引用和幽灵引用吗?谈谈它们的⼀个使⽤场景
1. Jvm 包括那⼏大部分
2. 什么情况下会发生栈内存溢出
3. JVM 的内存结构, Eden 和 Survivor ⽐例
4. JVM 内存为什么要分成新生代,⽼年代,持久代。新⽣代中为什么要分为 Eden 和Survivor
5. JVM 中一次完整的 GC 流程是怎样的,对象如何晋升到⽼年代
6. Jvm 什么情况下会回收⽅法区
7. 你知道哪几种垃圾收集器,各⾃的优缺点,包括原理,流程,优缺点
8. 详细介绍下 CMS 垃圾回收器
9. 垃圾回收算法的实现原理
10. 分析问题时,⽤用过哪些 jdk 自带的命令行
11. 简单介绍下 class ⽂件的结构
12. 有通过 Java 字节码分析问题吗?怎么通过 jdk ⾃带命令查看字节码?说几个常⻅的指令?
13. 当出现了内存溢出,你怎么排错
14. JVM 内存模型的相关知识了解多少,⽐如重排序,内存屏障, happen-before,主内存,工作内存等
15. 简单说说你了解的类加载器,可以打破双亲委派么,怎么打破
16. 线程有哪些实现方式? Java 的线程是怎么实现的
17. 线程有哪些调度方式? Java 是怎么调度的?设置优先级靠谱吗
18. 类加载包括哪些流程,每个流程都主要进行哪些工作?
19. 运行时栈帧结构时怎么样的?
20. 虚拟机⽅法调用的是在什么阶段确定调用⽅法的版本的? 重载(overload)和重写(override)分别是在什么阶段实现的?
21. Java 是基于栈还是基于寄存器的?两者有什么区别?
22. 你们线上应用的 JVM 参数有哪些
23. g1 和 cms 区别,吞吐量优先和响应优先的垃圾收集器器选择
24. 怎么打出线程栈信息
25. 请解释如下 jvm 参数的含义:
26. -server -Xms512m -Xmx512m -Xss1024K
27. -XX:PermSize=256m -XX:MaxPermSize=512m
28. XX:MaxTenuringThreshold=20 XX:CMSInitiatingOccupancyFraction=80
29. XX:+UseCMSInitiatingOccupancyOnly。
30. 当 new ⼀一个对象时,会发生哪些操作?
31. 同时起两个线程,⼀个线程 OOM 挂了,另一个线程会受到影响吗?
1. 讲讲 Spring 加载流程
2. Spring AOP 的实现原理理?解释⼏个 AOP 相关的专业名词?
3. 讲讲 Spring 事务的传播属性。
4. Spring 如何管理理事务的。
5. Spring 怎么配置事务(具体说出一些关键的 xml 元素)
7. Spring 为什么把 bean 设计成默认单例例的?这样设计有什么好处和坏处
8. 什么是 mybatis? 它有什么优缺点?
9. #{} 和 ${} 区别
10. 实体类和表中的属性名字不一致时,怎么处理理? like 查询怎么处理?
11. Mybatis 中,怎么定位具体的 sql 的? Mapper 接⼝里面的方法,能重载吗?
12. Mybatis 怎么做分⻚页
13. Mybatis 除了增删改查的标签,还⽤过哪些标签?
1. Linux 下 IO 模型有⼏几种,各自的含义是什么。
2. epoll 和 poll 有什么区别
3. 平时⽤到哪些 Linux 命令
4. ⽤一行命令查看文件的最后五行
5. ⽤一行命令输出正在运行的 java 进程。
6. 介绍下你理理解的操作系统中线程切换过程。
7. 进程和线程的区别
8. top 命令之后有哪些内容,有什么作用
9. 线上 CPU 爆高,请问你如何找到问题所在
1. 多线程的⼏种实现⽅方式,什么是线程安全
2. volatile 的原理,作用,能代替锁么
3. 画一个线程的⽣生命周期状态图
4. sleep 和 wait 的区别
5. sleep 和 sleep(0)的区别
6. Lock 与 Synchronized 的区别
7. synchronized 的原理是什么,一般用在什么地方(⽐如加在静态方法和非静态方法的区别,静态⽅法和非静态方法同时执行的时候会有影响吗
8. 解释以下名词:重排序,⾃旋锁,偏向锁,轻量级锁,可重入锁,公平锁,非公平锁,乐观锁,悲观锁
9. 用过哪些原子类,他们的原理是什么
10. JUC 下研究过哪些并发工具,讲讲原理
11. ⽤过线程池吗,如果用过,请说明原理,并说说 newCache 和 newFixed 有什么区别,构造函数的各个参数的含义是什么,⽐如 coreSize, maxsize 等
12. 线程池的关闭⽅式有几种,各自的区别是什么。
13. 假如有一个第三方接口,有很多个线程去调用获取数据,现在规定每秒钟最多有 10 个线程同时调用它,如何做到
15. ⽤三个线程按顺序循环打印 abc 三个字母,比如 abcabcabc
16. ThreadLocal 用过么,⽤途是什么,原理是什么,⽤的时候要注意什么
17. ThreadLocalMap 怎么计算 hash 的
18. 如果让你实现一个并发安全的链表,你会怎么做
19. 有哪些无锁数据结构,他们实现的原理是什么
20. 讲讲 java 同步机制的 wait 和 notify
21. CAS 机制是什么,如何解决 ABA 问题
22. 多线程如果线程挂住了怎么办
23. countdowlatch 和 cyclicbarrier 的内部原理和用法,以及相互之间的差别(比如countdownlatch 的 await 方法是怎么实现的)
24. 对 AbstractQueuedSynchronizer 了解多少,讲讲加锁和解锁的流程,独占锁和公平所加锁有什么不同
25. 使⽤ synchronized 修饰静态方法和非静态⽅法有什么区别
26. 简述 ConcurrentLinkedQueue 和 LinkedBlockingQueue 的⽤处和不同之处
27. 导致线程死锁的原因?怎么解除线程死锁
28. ⾮常多个线程(可能是不同机器器),相互之间需要等待协调,才能完成某种工作,问怎么设计这种协调⽅方案
29. ⽤过读写锁吗,原理是什么,⼀般在什么场景下⽤
30. 开启多个线程,如果保证顺序执行,有哪几种实现方式,或者如何保证多个线程都执行完再拿到结果。
31. 延迟队列的实现⽅方式, delayQueue 和时间轮算法的异同
32. PriorityQueue 是怎么做到每次 poll()数值都是当前最小值
1. http1.0 和 http1.1 有什么区别
2. TCP 三次握手和四次挥手的流程,为什什么断开连接要 4 次
3. TIME_WAIT 和 CLOSE_WAIT 的区别
4. 说说你知道的几种 HTTP 响应码,比如 200, 302, 404
5. 当你用浏览器打开一个链接(如: javastack.cn)的时候,计算机做了哪些工作步骤
6. TCP/IP 如何保证可靠性,说说 TCP 头的结构
7. 如何避免浏览器缓存
8. 如何理解 HTTP 协议的无状态性。
9. 简述 Http 请求 get 和 post 的区别
10. HTTP 有哪些 method
11. 简述 HTTP 请求的报⽂格式
12. HTTP 的⻓连接是什么意思
13. HTTPS 的加密方式是什么,讲讲整个加密解密流程
14. Http 和 https 的三次握手有什么区别。
15. 什么是分块传送
16. Session 和 cookie 的区别,还有其他更好的方式吗?
1. ⽤ java ⾃己实现一个 LRU
2. 分布式集群下如何做到唯一序列号
3. 设计一个秒杀系统, 30 分钟没付款就⾃动关闭交易
4. 如何使用 redis 和 zookeeper 实现分布式锁?有什么区别优缺点,会有什么问题,分别适⽤什么场景。(延伸:如果知道 redlock,讲讲他的算法实现,争议在哪里)
5. 如果有人恶意创建⾮法连接,怎么解决
6. 分布式事务的原理,优缺点,如何使用分布式事务, 2pc 3pc 的区别,解决了哪些问题,还有哪些问题没解决,如何解决,你⾃己项⽬里涉及到分布式事务是怎么处理的
7. 什么是一致性 hash
8. 什么是 restful,讲讲你理理解的 restful
9. REST 和 RPC 异同?
10. 如何设计一个良好的 API。
12. 解释什么是 MESI 协议(缓存一致性)
13. 说说你知道的几种 HASH 算法,简单的也可以
14. 什么是 paxos 算法, 什么是 zab 协议
15. 一个在线⽂文档系统,文档可以被编辑,如何防止多人同时对同一份⽂档进行编辑更新
16. 线上系统突然变得异常缓慢,你如何查找问题
17. 说说你平时用到的设计模式
19. 一次 RPC 请求的流程是什么
20. ⾃己实现过 rpc 么,原理可以简单讲讲。 Rpc 要解决什么问题
21. Rpc 通过哪些措施来做到更加⾼效的
22. 异步模式的用途和意义
23. 编程中⾃己都怎么考虑一些设计原则的,⽐如开闭原则,以及在⼯作中的应⽤
25. MVC 模式指什么
27. 应⽤服务器器怎么监控性能,各种方式的区别
29. 如何实现负载均衡,有哪些算法可以实现
30. Zookeeper 的用途,选举的原理是什么
31. Zk 内部通信使用的协议是http 吗
32. Zookeeper watch 机制原理
33. 介绍几个 zk 的典型应⽤场景,分布式锁,负载均衡,发布订阅等等
34. Zk 怎么保证多客户端同时创建节点,只有一个创建成功
35. ZK 为什么建议集群的机器个数为奇数
36. Zk 服务器有哪些⻆色,它们各自的职责是什么
37. Zk 内存结构是什么样的?有采取什么持久化措施吗? 集群机器启动时,怎么初始化数据?
38. 简单介绍下 Zk 客户端创建会话的过程?
39. 简单介绍下 zk 服务器器的启动过程?
40. Zk 会话有哪些状态?怎么⽣存 sessionId 的?怎么高效的管理会话的?
41. 请思考一个⽅方案,实现分布式环境下的 countDownLatch
42. 后台系统怎么防止请求重复提交
1. 简单介绍下 Mysql 的架构
2. Mysql MyIsam 和 InnoDB 引擎索引结构有什么区别
3. 数据库隔离级别有哪些,各⾃的含义是什什么, MYSQL 默认的隔离级别是是什么
4. 什么是幻读
5. MYSQL 有哪些存储引擎,各自优缺点
6. ⾼并发下,如何做到安全的修改同一行数据
7. 乐观锁和悲观锁是什什么, INNODB 的标准行级锁有哪 2 种,解释其含义
8. SQL 优化的⼀一般步骤是什什么,怎么看执行计划,如何理解其中各个字段的含义
9. 数据库会死锁吗,举一个死锁的例例⼦子, mysql 怎么解决死锁
10. Mysql 的索引原理理,索引的类型有哪些,如何创建合理理的索引,索引如何优化
11. 有哪些常用的 sql 优化⽅方式
12. 聚集索引和非聚集索引的区别。
13. select for update 是什么含义, 会锁表还是锁行或是其他
14. 为什么要⽤用 Btree 实现,它是怎么分裂的,什么时候分裂,为什么是平衡的
15. 数据库的 ACID 是什么
16. 某个表有近千万数据, CRUD 比较慢,如何优化
17. Mysql 怎么优化 table scan 的
18. 如何写 sql 能够有效的使用到复合索引
19. mysql 中 in 和 exists 区别
20. 数据库⾃自增主键可能的问题
21. MVCC 的含义,如何实现的
22. 你做过的项⽬里遇到分库分表了吗,怎么做的,有用到中间件么,⽐如 sharding jdbc 等,他们的原理知道么
23. MYSQL 的主从延迟怎么解决
24. 谈谈 explain 结果中⽐较关键的指标,以及指标的含义
25. 了解 mysql 的 redo 和 undo 日志吗
26. 数据库从单机扩展到分布式会遇到什么问题,怎么解决
1. 消息队列的使用场景
2. 消息的重发,补充策略
3. 如何保证消息的有序性
4. ⽤过哪些 MQ,和其他 mq 比较有什什么优缺点, MQ 的连接是线程安全的吗,你们公司的MQ 服务架构怎样的
5. MQ 系统的数据如何保证不不丢失
6. rabbitmq 如何实现集群高可用
7. kafka 吞吐量高的原因。
8. kafka 和其他消息队列的区别, kafka 主从同步怎么实现
9. 利用 mq 怎么实现最终一致性
10. 使⽤ kafka 有没有遇到什么问题,怎么解决的
11. MQ 有可能发生重复消费,如何避免,如何做到幂等
12. MQ 的消息延迟了怎么处理,消息可以设置过期时间么,过期了你们⼀般怎么处理
1. 常见的缓存策略有哪些,如何做到缓存(⽐如 redis)与 DB 里的数据一致性,你们项目中用到了什么缓存系统,如何设计的
2. 如何防止缓存击穿和雪崩
3. 缓存数据过期后的更新如何设计
4. redis 的 list 结构相关的操作。
5. Redis 的数据结构都有哪些,各⾃都适合什么样的场景
6. Redis 的使⽤要注意什么,内存设置, 淘汰策略等
7. redis2 和 redis3 的区别, redis3 内部通讯机制
8. 当前 redis 集群有哪些玩法,各自优缺点,场景
9. Memcache 的原理,哪些数据适合放在缓存中
10. redis 和 memcached 的内存管理的区别
11. Redis 的并发竞争问题如何解决,了解 Redis 事务的 CAS 操作吗
12. Redis 的选举算法和流程是怎样的
13. redis 的持久化的机制, rdb 和 aof 的区别
14. redis 的集群怎么同步的数据的
15. 知道哪些 redis 的优化操作
16. Reids 的主从复制机制原理
17. Redis 的线程模型是什么
18. 请思考一个⽅方案,设计一个可以控制缓存总体⼤小的自动适应的本地缓存
19. 如何看待缓存的使用(本地缓存,集中式缓存),简述本地缓存和集中式缓存和优缺点
20. 本地缓存在并发使用时的注意事项