前言
完整的c++研发工程师成长路线
一、概括
C++的学习大致可以分为五部分,可以参照秋招c++学习路线,c++ 学习经验分享
- C++语言基础
- 数据结构与算法
- 计算机网络和操作系统
- 设计模式与数据库
- linux编程
二、基础知识准备阶段-C++语言基础
(要求高强度的看完,不要一天看几页,有个大概印象就可)
- (1)C++ primer
这本书将的比较全面,并且比较基础,是看其他书籍的基础。
学习建议:看书的过程中要动手,把课后习题过一遍,不动手的话,是根本没有办法掌握的。
- (2)Effective C++
正如这本书的封面所写的:改善程序与设计的55个具体做法。这本书绝对经典
- (3)深入探索C++对象模型
C++的底层实现
- (4)STL源码剖析
STL的底层实现,建议学完数据结构和算法之后再看
面试过程中,如果要问C++基础的话,常常会问C++的底层实现和C++编程当中的注意事项,这才是C++基础中的重点。因此,Effective C++、深入探索C++对象模型、STL源码剖析绝对值得一看(可以有重点地看),但是看看这些书的基础是C++ primer,基础必须打扎实。
三、数据结构和算法
- (1)浙大的网易公开课:
http://www.icourse163.org/learn/ZJU-93001?tid=1002019005#/learn/announce
个人认为要要比大话数据结构强很多,入门强推。并且在看视频学习的同时,建议把课件上的代码敲一遍,还有习题也是要做的。
- (2)算法导论
难度比较大,个人建议还是有一定数据结构和算法基础之后再看,并且可以选一部分看。我建议可以看一下贪心算法、动态规划和红黑树,特别是红黑树。
- (3)剑指offer
强强强推,编程能力的提高就靠它了,面试过程中的手写代码好多都是这本书的内容,建议大家,早刷,有时间的话,多刷几遍。
剑指Offer系列刷题笔记汇总
剑指Offer系列源代码汇总
- (4)Leetcode
经验:
各种排序(快排是重点,递归非递归)和查找算法,每种都想想时空复杂度,可不可以优化。而且要手写出来算法。
刷算法题一定要在纸上手写出来。
各种关于字符串的算法。
二叉树的递归非递归的遍历算法要会,动态规划和贪心能看懂就看
数据结构一定要知道链表,数组的原理,区别;要懂BST, AVL, B tree, B+ tree是什么
四、计算机网络与操作系统
参考资料与书籍
- TCP/IP协议详解、计算机网络,图解HTTP
- 清华大学-操作系统(B站视频)
- linux操作系统与shell相关知识
- cs-note基础知识
- 实验楼 tcp/ip 面试相关
学习思路:
- 入门第一本书 建议看谢希仁的《计算机网络基础》
- 进阶然后第二本要看 《TCP/IP详解1:协议》这个阶段需要多思考和动手网络在LINUX系统上发挥的最淋漓尽致,所以在学习的时候最好学习LINUX配合使用学习LINUX,推荐《鸟哥的LINUX私房菜:基础篇》学习网络过程中,要不断抓包分析等,自己能写些简单的应用来发包更是完美抓包工具推荐:LINUX环境下用TCPDUMP,windows环境下用 wireshark这个阶段写习完后,已经是个小高手了。。主要技能应该是:对TCP,IP,DNS,icmp等协议应该都蛮熟了得了,dhcp/tftp/ftp等协议也应该都懂些,重点是要学会如何分析一个协议 LINUX系统的基本操作也差不多了
- 高手阶段这个阶段需要有一点的编程能力,指C/C++编程主要学习的方向是协议的实现和协议的架构原理协议的实现方面, 主要学习底层协议(指传输层及以下)的实现, 这些协议都是在操作系统层面实现的,最好的教材是《TCP/IP详解:实现》至于网络架构这块,可以学习《计算机网络》这本书
五、数据库
参考书籍
- MySQL 必知必会(看完书去牛客网刷数据库的题)
六、linux编程
- Linux操作系统掌握shell编程脚本
- 编译/调试工具Linux平台上的gcc以及makefile学习
- Linux系统编程
- 多线程编程网络编程(unix环境高级编程) (Linux)
六、C++项目准备
结合服务器,linux,操作系统搞两个项目。
- 找项目网址-hello github
- 实验楼
- c++网络编程项目:flamingo 一款高性能轻量级开源即时通讯软件
- 值得推荐的C/C++框架和库
- Sinetlib是一个仿照Muduo实现的基于Reactor模式的多线程网络库
- Tinyhttpd 超轻量型 Http Server有很多资料(谷歌搜索)
- Achieve a tiny STL in C++11实现小型stl模板库