学习路线
C++语言基础
- [ ] 包括基本关键字含义,语言底层实现机制(虚函数、引用等),面向对象还有模板泛型编程
- [ ] 编译链接机制、内存布局、对象模型
- [ ] 智能指针 RAII ,手写简单版智能指针
- [ ] C++11 部分新特性 右值引用、完美转发等
- [ ] 部分设计模式,比如安全实现单例、观察者模式这些
- [ ] STL源码
这部分有时间的可以找到C++ primer、effective系列、 STL源码剖析相关章节读一读。
比较重要的是深度探索C++对象模型这本书,这本书前面一部分是将对象模型的比较适合了解C++底层一些机制,建议有空必读
算法
刷题,系统的分类学习,提升很快
-
[ ] 链表,以及各种题型,去leetcode按标签刷
-
[ ] 二叉树、平衡二叉树
-
[ ] 二分查找以及几种变体,比如lower_bound upper_bound
-
[ ] 几大排序算法,稳定性,极端情况,做到手写快排、堆排bug free,了解下快排优化思路
-
[ ] hash
-
[ ] 贪心、回溯、dfs、bfs,动态规划
-
[ ] Tire树
-
[ ] 手写LRU, 双向链表+hash
-
[ ] 海量数据处理思路
-
[ ] 可以了解一下KMP这类字符串匹配算法
-
[ ] 多线程
-
[ ] - 基本的POSIX线程api
- 互斥锁和条件变量我觉得必须掌握的
-
其它的就看你又没有时间了
-
[ ] 项目
-
[ ] - 理想的项目应该是出于自己的兴趣做的各种轮子,比如http ftp服务器,实现加密算法,文件压缩,p2p聊天,网络库,甚至mini os,k-v数据库。但是短期内这些可能都不是很好准备,所以大家按照自己已有的完善下吧。做到有测试、有性能改进方面的思考。
-
我的经验是七八场下来项目提问时间没超过10分钟,而且提问的主要点是如何测试、如何改进的,以及效果
-
[ ] 开源组件
-
[ ] - redis
-
nginx
这些都是最好了解下原理,就算没用过,也去搜几篇博客看看。千万别一点都说不出来
Linux
-
[ ] 进程线程,一并学习fork vfork clone这些系统调用
-
[ ] Linux内存管理, 包括物理内存、虚拟内存、分页和分段机制、slab分配器这些东西,面试官问到malloc这些都能扩展讲一讲,一并需要了解brk malloc这些函数内部实现
-
[ ] 了解文件系统,特别是VPS,看完这部分,对于软硬连接和Linux读文件是怎样一个过程这类问题就很简单
-
[ ] 死锁相关、还有信号量同步原语怎么实现消费者生产者、读者写者、哲学家就餐这些
-
[ ] Linux 进程调度可以了解下,比如CFS
-
[ ] 还有就是Linux下进程的布局,这其实问到C++内存布局就可以往这个方向聊
-
[ ] Linux下程序是如何被编译链接的,静态链接、动态链接,如何被加载执行的,这部分推荐csapp第七章,或者程序员自我修养
-
[ ] 常见命令,比如性能监控top ps , IO监控 iostat多熟悉下,比如查看网络连接状态netstat,lsof这些
-
[ ] 进程间通信机制,最好能够说一点内核实现,比如管道内核是如何实现的(匿名Inode)
计算机网络
- [ ] TCP是重中之重,比如拥塞控制、流量控制、快速重传这些,nagle算法,列一些典型问题吧:
既有和网络编程结合的问题,也有问TCP原理本身的
- [ ] - UDP 如何实现可靠数据传输?
- TCP如何拆包、解决粘包
-
TIME_WAIT过多怎么造成的,如何解决
-
[ ] 套接字编程基本的要会,socket bind listen connect close accept这些函数也要清楚
-
[ ] 进一步就是Linux五大IO模型,三种IO复用方式,select poll,epoll
-
[ ] ARP、DHCP协议怎么工作的
-
[ ] DNS协议
-
[ ] HTTP、HTTPS协议
数据库
尽量做到能写中等难度的连表查询sql,会分组、一些函数count sum这些,还有最重要的就是数据库原理
- [ ] 索引,有哪些分类,B+树,哈希索引,对于B+树相关的问题也要熟悉
- [ ] 事务,特点(ACID), mysql存储引擎默认支持的事务级别之类。我反正被问了两次
- [ ] 锁,封锁方式,如何避免死锁
- [ ] 数据库设计关系范式也可以了解下
Reference
https://mp.weixin.qq.com/s?__biz=Mzg4NjUxMzg5MA==&mid=2247490699&idx=1&sn=f3657ea66d71ced955d9274c1f2d75ec&chksm=cf99d506f8ee5c10996f781878901b4f521ee0adcc5a513bd52ac62bc8a961affbd34ece46d7&mpshare=1&scene=23&srcid=0502iJQetTeof8m6aJZU3SWF&sharer_sharetime=1619950301492&sharer_shareid=1d893292329c3888b44c4b5327ab9d06#rd