作者:origin
链接:http://www.zhihu.com/question/26421707/answer/53879709
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
学习过程
比较仔细的学习了《c++primer》,并对每个习题都自己写代码实现了一遍,包括稍微复杂一点的例子。
认真读完了《effective c++》,《effective stl》。
比较仔细的学完了《数据结构与算法分析》,并把其中的每种数据结构和算法都用c++实现了一遍。包括各种线性表,树(二叉树、AVL树、RB树的各种操作),图(BFS、DFS、prim、kruskal、djkstra、floyd、拓扑排序、关键路径等)查找算法,排序算法。
2-3个月认真学完《csapp》并做完书上的课后习题(由于时间的关系,没有在做家庭作业),顺带学习了一些gcc的嵌入汇编的用法。
读完了《深度探索C++对象模型》,对象C++底层实现机制有了一定的了解。
读完了《TCP IP详解卷一》
读了《APUE》的大部分内容以及《UNP卷一》有关TCP/UDP的部分,略过了SCTP的部分。
研究学习 @陈硕的muduo网络库源码,受益良多,在期间发现过其中的一两个小问题,提了几个pull request,研究完了muduo源码后又看了其相关的书《Linux多线程服务端编程 (豆瓣)》
学习了云风的skynet网络库的小部分源码,主要为了了解actor模式和reactor的异同。
学习了google test框架的部分源码,弄懂了内部的的运行原理。
刷《剑指offer》的所有习题。
刷leetcode,代码在liyuan989/leetcode · GitHub,由于时间的关系大约刷了130道就开始找工作了。
关于练手项目,写了简易STL,C++协程库,以及一些http server,rpc之类的。
关于找工作
由于基本都是同学朋友内推,不存在简历被HR筛掉了。
其实自己都惊讶在找工作的时候有些异常顺利,因为面试官问的问题很少有答不上来的。绝大多数问题个人感觉不难,大多都是问的一些比较基础、底层的东西,比如互斥锁底层是怎么实现的?如何用C语言实现C++的异常,说说基本思路这样的问题。然后就是根据简历上写的东西来问。
另外一个要说的就是纸上手写算法题了,手写代码和机器上写代码的感觉不一样,我个人是没事自己在纸上写写一些基本的算法来熟悉,比如快排、堆排序之类的。
然后面试要问的算法题一般都不难,多数都是翻转链表,判断链表是否有环,回文数,找出链表倒数第k个数这样的题目。
很少遇到问二叉树的问题,没有遇到过问图的相关问题。唯一碰到一个动态规划的问题,就是最典型的最长公共子序列问题,难点的就是百度第一面最后问了一个leetcode上hard难度的原题,总的来说刷一些题还是很有必要的。
最后,我很喜欢@刘未鹏先生说过的一句话的:
兴趣遍地都是,专注和持之以恒才是真正稀缺的
程序设计语言
c
c++
数据结构与算法
数据结构
算法
stl
计算机通识
计算机组成原理
操作系统
网络工程
数据库原理
软件工程
软件设计体系
软件测试
软件开发
android软件开发
游戏开发
3D数学游戏开发基础
图形学
Direct3D
unity3D