这是结合自己过往真实面试以及工作经历,思考总结出来的知识内容点。以后也会基于这些知识点进行知识体系的梳理。
对于项目:
了解系统主要做什么,解决什么问题,有哪些模块,分别的作用是什么,核心业务处理的流程以及核心业务对应的技术方案分别是什么,为什么采用这个方案,有没有其他方案,优缺点是什么;
面向的用户是谁,如何给用户提供价值,是不是只有这一种方式,与其他方式对比的优缺点是什么?
自己负责的模块和主要工作内容在整个项目中的价值是什么,如何体现,如何做到超越本职工作的期望。
对于技术:
工作中遇到的问题记录。包括生产环境的技术问题,开发过程的管理问题,与其他部门沟通协调的协作问题。
工作中需要梳理系统整体的架构搭建,核心模块核心流程核心节点的技术源码实现,业务架构,业务流程的了解。这些都最好通过画图,抽象,然后针对具体某个节点进行具体深入。
工作中需要注意系统的用户量,QPS,订单量,日活量,日订单金额...等等,就是一些能衡量系统规模和特点的核心指标。
算法。常见排序算法的实现。基础算法题的解题思路。
设计模式。Java 中,各种框架中,各种中间件中使用的设计模式有哪些?思路怎样的?解决什么场景下的问题?如何实现与使用?实际项目中如何使用?理解的比较好的设计模式有哪些?如何实现一个工厂模式?
Java 基础。HashMap 的数据结构,工作原理,扩容过程与重哈希过程。集合有哪些常用的数据结构?HashSet 与 HashMap 的区别与使用场景?HashMap 是线程安全的吗,为什么?线程安全的集合有哪些,如何做到线程安全?ArrayList 与 LinkedList 的区别,它们插入元素的时间复杂度?ArrayList 的扩容发生在什么时候?扩容流程是怎样的?Map 有什么特点?有哪些保证有序的 Map,LinkedHashMap?
IO流的了解,常见的 IO 类。阻塞 io 与非阻塞 io 的区别?Object 类的方法有哪些?equals 与 hashcode 的区别与作用?创建对象的方式,除了 new 还有哪些方式,哪种创建效率高?工作中什么时候会用到反射机制,Java 动态代理的理解,与 Cglib 动态代理的区别?
JVM。引用类型有哪些?有哪些方面的了解?实际中遇到的问题,优化的过程?了解 JVM 一些命令的作用?GC 算法有哪些,什么场景下使用,为什么?类加载过程,机制,双亲委派模型的理解?
线程池。默认有几种线程池;核心参数,执行流程,线程如何超时回收?允许设置的最大线程数是多少?无边界队列,最终线程能开启多少个?阻塞队列有哪几种,各自有什么特点,有界队列与无界队列有哪些?LinkedBlockingList 是有界的。线程池在初始化完的时候有没有线程,没有的?核心线程会被回收吗?如果想回收核心线程,怎么实现?如何停止一个正在运行中的线程?
并发编程。项目中的多线程的使用场景?创建线程的方式,Callable 与 Runnable 区别?如何保证多线程安全?线程如何停止?死锁是什么,发生条件是什么,如何发现?如何避免?乐观锁与悲观锁的区别?可重入锁的了解与实现原理?有哪些锁?AQS的了解,实现了哪些锁?公平锁与非公平锁如何实现?锁升级过程?volatile 的理解,可以保证原子性吗,为什么?final 修饰的变量的对象是多线程安全的吗?为什么呢?常量可以被修改吗?synchronized 是可重入的锁吗?锁升级的过程?
Spring,SpringMVC,SpringBoot 的区别。循环依赖问题,什么时候会出现这个问题,什么时候不会出现?Spring 如何解决这个问题?Spring Bean 的加载过程,生命周期?Spring MVC 的加载过程与工作原理?InitializingBean 与 init-method 方法的有什么区别?spring 为什么加一个 @Transaction 注解就能创建事务和回滚?嵌套事务如何在数据库事务实现?SpringBoot 的常用注解?SpringBootApplication 注解实现的三个注解?SpringBoot 的加载 Bean 的流程?怎么理解 SpringBoot 的 starters?SpringBoot 如何想在启动的时候运行一些特定的东西,比如替换默认的容器 tomcat?
Hibernate 与 Mybatis 的区别与工作原理。底层的运行原理,比如 DAO 文件与对应 XML 文件的映射怎么做到的,四种 Handler。$ 与 # 的区别?既然 $ 有 SQL 注入的问题,为什么还要保留它?
关系型数据库。Mysql,Oracle。关系型数据库与非关系型数据库的区别?innodb 存储引擎的了解?与 Myisam 的区别?b+ 树与 b 树的区别?平时如何优化 MySQL?explain 主要关注哪些指标?索引覆盖是什么?回表查询的了解?什么是聚簇索引,什么是唯一索引?聚簇索引与非聚簇索引的区别?索引失效的条件有哪些?模糊查询应该注意什么?说下覆盖索引?联合索引需要注意的?最左匹配原则是什么?索引下推的了解?如何判断一条 sql 语句有没有用到索引?联合索引 abc,用 or 连接有影响吗?select a from table where b,c 有用到索引吗?Mysql 的分库分表有做吗?
非关系型数据库。Hbase,Mongodb。
大数据。Hadoop,MapReduce的了解与使用。开源ky,流式的构建与查询,查询存储引擎的优化与构建。
redis 的数据结构有哪些?用的比较多有哪些?在哪些场景下使用?如何使用,比如对象如何使用 hash 数据结构保存,用 string 数据结构保存哪些数据?为什么不把对象转为 json 字符串,然后用 string 保存呢?同样的数据,string 和 hash 保存哪个耗时长一点?
redis 常见的问题,比如数据在 redis 与 mysql 数据不一致的情况,缓存雪崩,缓存击穿,缓存穿透的问题,出现这些问题后如何处理?生产环境批量删除大量的 key 可以吗,del 操作会有影响?
redis 为什么这么快?线程模型?
redis 的持久化机制?
redis 的过期策略与淘汰策略是什么?如何选用?什么时候删除缓存?
redis 如何进行集群配置?主从部署做缓存会有什么问题?主节点挂掉还可以用吗?如何做到?如何缓存数据超过物理内存,会进行哪些操作?就是有哪些内存淘汰策略和过期策略?
消息中间件。RabbitMQ,RocketMQ,Kafka... 等等,之间的区别是什么?它们的实现原理,使用方式?如何保证消息不丢?
SpringCloud 了解,原理,适合哪些场景?
Eureka 为什么说它是 AP 模型,如何保证它的高可用,为什么要这样实现?
Config 为什么不用 Apollo,还了解哪些配置中心,区别是什么?
Gateway 为什么不用 Zuul,区别是什么?主要做什么功能,鉴权的权限管理,路由?
Feigin 它的原理是什么,如何与 Hystrix 配合,与 Ribbon 配合使用?配置 Feigin 的时候需要注意哪些点?如何配置对应超时时间?
Ribbon 它的原理是什么,如何做到负载均衡的作用,有哪些负载均衡策略,默认是什么,如何实现?如何自定义负载均衡算法?
Hystrix 为什么要做熔断?如何做到熔断的作用?如何使用?什么时候触发熔断,什么时候又打开?
SpringCloud 如何做到容错的?
Dubbo 与 SpringCloud 的区别是什么?Dubbo 的了解?
如何限流?令牌桶限流的原理,使用?
分布式事务与分布式锁。
系统监控如何做的?系统的链路跟踪如何做的?
系统的设计流程,思考。
Maven 的设计思路与实现。
异步与同步编程的优缺点。
思考方式:
技术点,功能是什么,适用于什么场景使用,实现原理是什么,如何使用?
多深入源码。