基础
由于基本部分知识点过多,主要分两部走:
第一步:收集面试题:包含但不仅限于:脑中未解决的问题、作为面试官问的问题、网上找的面经。
第二步:收集重点题目并列出问题清单深入研究
知识点清单
在针对知识点学习时,我使用了日清法,每天完成一个知识点。
知识点清单:
- 线程和进程
- 用户态和核心态
- C指针
- fork
- DDD
- mysql-幻读 *
- mysql-死锁
- 秒杀系统(kafaka-分区机制)
- lru
- 零拷贝
- 分页
- map-reduce 架构
- flink once
- 系统的描述
- redis-zset源码
- HashMap
- Spring源码
- dubbo源码
- netty源码
- ES
- G1
- redis源码
- kafka学习
GitHub - MisterBooo/LeetCodeAnimation
费曼学习法
进行知识点总结时,注意带着问题查找,要杜绝一知半解,如果不能用自已的话很通俗的讲出来,说明掌握的不彻底。为了检测理解程度,我使用了费曼学习法:
费曼学习法
1.找一个问题
2.试图了解它,并能讲给别人
3.有问题接着了解
一定要带着问题去阅读,我这举个例子,如果下面三个问题不能很清楚的回答,说明了解的不彻底。
双亲委派 - 简书:为何使用双亲委派,为何又打破?
ThreadLocal - 简书:为何使用弱引用,不用又如何?
Spring bean实例化 - 简书:为何用三层缓存解决循环依赖,而不是二层?
[[快照读/当前读/幻读/mvcc]] mysql-幻读解决了吗?
算法
算法部分主要是刷题,题目来源主要有两部分,一是参考其它面经里的常考题,保证这些题目在被问到时能够胸有成竹;二是刷leeCodem,保证自已在写代码时有一个好的手感,我实际在以前从没刷过算法题,leetCode也是今年才开始刷题,总共刷了30+。
常考题
- 排序(快排) *
- 单链表翻转(递归或者循环) *
- 单链表倒数第K个节点
- 二分查找(以及变形) *
- 多个栈实现一个队列、两个队列实现一个栈 *
- 实现一个O(1)查找最大值的栈 *
- 头尾连接的链表实现队列
- 如何判断一个单链表是否有环 *
- LRU (双向链表实现)*
- 二叉树,求每层最大节点数
- 给一个单链表,去除奇数位置的节点。
- 倒置算法 输入abc_123_456 输出cba_321_654 *
- 子串包含问题(KMP 算法)写代码实现
- 动态规划(零钱兑换、爬楼梯以及变形问题、斐波那契数列)
leetcode
刷题leecode时只刷了常考题,这位网友整理的很有参考意义
GitHub - yuanguangxin/LeetCode: LeetCode刷题记录
https://github.com/labuladong/fucking-algorithm
引用
https://github.com/yuanguangxin/LeetCode/blob/master/Rocket.md
GitHub - yuanguangxin/LeetCode: LeetCode刷题记录
网友评论