一、Java:
- java语法基础:不用特别记,如果有问到不会的,再去查查。基础弱的可以看这个
- java容器(非常重要):HashMap、ArrayList、ConcurrentHashMap实现原理,HashMap的扩容操作。看这个注意HashMap的扩容操作,在1.7下先判断是否需要扩容再插入,而1.8是先插入,再判断是否需要扩容。
- java虚拟机:
- 运行时数据区域:堆、栈……
- 垃圾收集:重点是垃圾收集算法,垃圾收集器有时间再看,没时间就不看。
- 内存分配与回收策略
- jvm调优:这个我不擅长,但有时候会问到
- gc日志排查:结合项目讲如何排查gc时间太长,关键是gc日志里的real_time实际gc时间
二、Java多线程 & 并发:看这里面的:一、线程,四、互斥同步,七、J.U.C,九~十三
- 线程
- 线程池ThreadPoolExecutor所有参数的含义(非常重要)
- 互斥同步
- Java自带保证线程安全的方法,以及对其优化后的锁
- synchronized和Lock的区别
- 结合自己的项目,讲如何处理高并发,如高并发的三板斧:缓存、限流、降级。以及容灾\熔断\限流\缓存设计\单点故障如何解决:https://pdai.tech/md/arch/arch-y-ratelimit.html#%E9%87%87%E7%94%A8atomicinteger
- 缓存:关键词:本地缓存和分布式缓存2种方案
- 限流
- 降级
- 负载均衡:常见的负载均衡策略,如何用代码实现负载均衡
- 轮询/随机/IP地址 hash/加权轮询/加权随机/当前处理请求数最小的机器
三、MySql:
- MySql索引的数据结构(B+树)
- mysql的原理:搜一下《丁奇mysql45讲》的pdf,一定要看里面的前3章:
链接: https://pan.baidu.com/s/1EC7xdw58N-_jJHh4XtjGcw?pwd=hku9 提取码: hku9
一定要看《丁奇mysql45讲》里的前3章:基础架构、日志、事务隔离! - mysql性能调优(也可以理解为索引):套到自己的项目里讲案例https://www.cnblogs.com/zhangyinhua/p/7620964.html
- mysql索引失效的场景
- mysql聚簇索引和非聚簇索引
- mysql索引设计(非常重要):面试官会给一个场景,让你设计mysql表、索引
1.银行转账场景:写建表语句、根据查询场景建索引。注意要考虑A给B转账的同时,B给A转账造成的死锁,以及如何解决。 - 编写sql语句:常规的关联查询;分组然后每组取1个;部分字段重复的去重。
四、半吊子Redis知识清单:(我用的少,这个我不是很擅长)
五、半吊子大数据知识清单(之前没做过大数据的小伙伴,就不用看这个了)
-
spark运行原理:
- 参考:https://tech.meituan.com/2016/04/29/spark-tuning-basic.html的最后一节
- 重点关注:
- driver、executors、Cluster Manager
- job、stage、task的关系
- 常见面试问题:为什么 spark shuffle 是很耗费的
-
性能优化:
- 结合到项目里讲
- 参考https://tech.meituan.com/2016/04/29/spark-tuning-basic.html
- 对多次使用的RDD持久化(cache、persist)
- 大变量先广播(任务数据、规则)
- 尽量避免使用shuffle类算子
- 解决数据倾斜
- 删除掉无用数据
- ……
-
问题排查和性能调优:结合之前的排查经历讲:
-
离线任务运维:
-
Clickhouse(如果简历里要写的话):
- 为什么Clickhouse比mysql在某些场景下更快