Skip to content

学习路线

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