Java工程师知识点梳理(面试宝典)

值此中秋佳节来临之际,为各位奋战在一线的校招学弟学妹,社招同僚们,送上一份薄利!!!

本系列文章是一套 Java 开发工程师常用的知识点总结,既可用于学习,亦或用于准备面试和面试他人。

是校招和社招小伙伴的必备佳品,成为offer收割机的最佳拍档。

试题一共包含 10 个部分,几乎涵盖了日常 Java 开发基础知识的方方面面,但是不包含领域特定的知识。

这部分是纯试题部分,答案部分关注如下公众号,最新的文章即是

                                                                Java工程师知识点梳理(面试宝典)_第1张图片

1. Java 基础

2. JVM 知识

3. 开源框架知识

4. 操作系统

5. 多线程

6. TCP 与 HTTP

7. 架构设计与分布式

8. 数据库知识

9. 消息队列

10. 缓存

 

一:Java基础

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. 了解强引用,软引用,虚引用和幽灵引用吗?谈谈它们的⼀个使⽤场景

 

二:JVM知识

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()数值都是当前最小值

 

六:TCP 与 HTTP

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. 本地缓存在并发使用时的注意事项

你可能感兴趣的:(java基础)