最好的推荐给最美的你
写在开始
我一路走来,不念过去,不畏将来。
感谢叶神创造了牛客网,受益匪浅,跟下面推荐的书籍、视频一起,表达谢意。
目前拿到的offer有,百度大搜(sp、上海)、美团酒旅(S级、北京上海可选,求职体验最好)、好未来学而思(SSP、北京)、招银网络(杭州)、携程机票(上海)。最后选择了百度。
既然写在开始,希望大家放平心态,不要装逼不止、不要妄自菲薄。有清北找工作成绩平平的,有一般学校找到很不错的工作的,人这一辈子,拼的是个时间,是份坚持,慢慢走,不要着急。
楼主本科东南,硕士北航,自动化专业,非科班出身,本没有想过会走上程序员这条路,也是机缘巧合吧,大四的时候,跟清华经管女友分手,重新思考人生,走着走着就习惯了。另外,也感谢东南的几个大哥,曾经的指导和帮助。
愿那个努力的你,终将收获所得。
心中无敌,无敌于天下(《毛骗》里的话,经典)。
资料推荐
为什么要写这样一个推荐?发现牛客太多的面经笔经质量参差不齐,但成体系的推荐资料不多,希望能来一波溯本清源的推荐。在这里不求最全,但求都是自己真正看完,最实用,最爽,最感动的。
那一堆面经笔经,列出一堆题目,想必你也不会一个一个看,看完你不去找答案也是浪费时间。最好的办法就是先自己系统的学,然后多面几家找找感觉,所以越早准备越好,晚了也别着急,我给你推的资料,怕是能起死回生[捂脸]。
想清楚自己找的岗位,到底是算法还是研发,面试区别不小。
另外,选研发岗的话,假如简历提到多种语言,面试官肯定会问你是要选C++,还是java面?说个小经验吧,我回答的是,本科时候接触过Java,不过后来用 C ++ 多些,熟一些,用 C ++ 来面吧。
注意:你针对的是找工作,不要看什么汇编了,自己有兴趣以后在研究,面试的时候真的不实用!!!
最核心的无非:
- 你选定的面试语言的语法基础。
- 数据结构与算法。
- 数据库,语句可牛客刷题,理论会问到 ACID、CAP、事务、数据库优化、四种连接。
- 设计模式,看不完所有,得会常用的几个,如:单例模式、工厂模式、观察者模式、享元模式。
- 计算机原理中的某几个点,如进程线程状态,参考下面推荐的书前两本,额外的自己再去拓展。
刷题
- 强推牛客,也用过别的几个平台,最爽的只有牛客,没有之一。
- 很全,建议除了刷《剑指offer》,还要刷一下《数据库SQL实战》,别的华为的题可以练习下输入输出流的处理。其他题目,当然刷的越多越好,但是,你要结合看书,以及别的知识点来。所以,我先只推了前面两个。
书籍
- 《王道程序员求职宝典》,强推,一定要看完。
- 《程序员面试宝典》,强推,虽有个别错误,但是看下来总体感觉良好。可以和上面王道一起看,查缺补漏。如:自己写String类的例子,就非常棒。
- 《redis设计与实现》,这个如果你用过非关系型数据库,但是不太清楚原理,可以看看。假如你简历提到,还是挺能吸引面试官的。
- 《C++ primer》第四版编排更合理,第五版加入了 C++11 新特性。这本书要看要尽早,如果来不及的话,拼全力看最前面两本。
- 《剑指offer》其实我觉得直接用牛客刷题即可,特别有兴趣的题目再来看这本书某一题。
- 《effective C++》有额外时间可以看,但是对于找工作来说,核心在前面几本。
- 什么《数学之美》《编程之美》等可以看,但是请把重心放在前面几本书,兄弟,你要找的是工作不是情怀。
- 其他还有很多不错的编程书籍,但是不推了,同志们,抓住主要茅盾,找工作,找工作,找工作。
视频
- 小甲鱼的视屏强推,喜欢看视频学习的一定要看。特别是《带你学C带你飞》、《数据结构与算法》、《C++》。前面基础如果都会了,可以挑几集查缺补漏,比如 IO缓冲区、进阶typedef 等。视频全免费,如果觉得好,记得支持作者,买个终身会员。
- 如果选面 Java 和 python 的同学,可以看牛客始祖叶神的 Java 和 python 项目,挺***的。
- 若是选PHP的同学,兄弟连的《linux》和兄弟连高洛峰的《PHP》课程还是非常棒的,以及高洛峰的书《细说PHP》最新版《跟兄弟连学PHP》。
我特别不同意那种只推荐看书,觉得看视频low的观点。如果是吹牛逼的讲座视频当然没啥意思,但是那种真正用心做的视频,一点不比书差,而且你也能跟着得到相应的思考。关键还是看自己的兴趣吧。用心去看。
博客
- 果冻想,里面的设计模式专栏,及其经典。
- 刘毅的博客,算法讲解很简洁明了,https://www.61mon.com/
- 如果想学机器学习的同学,最近发现一个特别不错的网站,http://www.apachecn.org/map/145.html
- Java党可以看看这个兄弟的博客,http://www.jianshu.com/u/668d0795a95b
写在最后
前人列过的面经题目题目太多了,说个别人可能遗漏的吧。
- 刷题的时候,都有写过二叉树的 递归/非递归 前/中/后 序遍历对吧,但是,想必你是在OJ平台里只写了遍历函数,没有自己从头到尾,从建树,到遍历完,并且按格式打印出来对吧?试试吧。我曾经刷题时就突发奇想想到这个问题,无聊了自己用C++写了一份,没想到,在线面试的时候竟然用到了,就是让从头到尾自己写,没有任何前置代码。网上查过,没有很好的完整代码。下面有我自己写的,供参考。
- 同理,自己建链表,并且反转,完整代码。
- 大数据的问题,核心思想是分治、hash、利用位数组、布隆过滤器就这四种了。网上搜一下准备一下即可。
- 还有一个,感觉挺爱问,这个可以提前准备一下。数据库里面索引(原理)用什么结构,有些面试官你回答到B树即可,有些会追问为什么用B+树,而不用B树。
- 红黑树,一般不会让你写,但是要知道应用场景,如:STL的map和set的内部实现就是红黑树。
- 开头多面几次,增加经验,失败了不要气馁,稳住,你能赢。把面试题目都做个记录,不会的该查了研究的,一定要去查,很有用。记得美团二面的时候,面试官直接说一面面试官问过你的某某问题,我再深入问问你。。。还好准备了。。。
还是贴出代码吧,给你省点时间多看点书[捂脸]
非递归后序遍历二叉树,含建立、打印
#include <vector> #include <stack> #include <iostream> using namespace std; struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; // 用前序遍历数组来创建这颗二叉树 TreeNode* buildTree(int *preOrder, int & index) { int value = preOrder[index++]; if(0 == value) return NULL; TreeNode* root = new TreeNode(value); root->left = buildTree(preOrder, index); root->right = buildTree(preOrder, index); return root; } /* 函数功能:实现二叉树的后序遍历 参数: root是传入的二叉树的根节点 res向量用来保存后序遍历的值 */ void aftOrder(TreeNode* root, vector &res) { if(root == NULL) return; stack stk1; stack stk2; stk1.push(root); TreeNode* cur = NULL; while(!stk1.empty()) { cur = stk1.top(); stk1.pop(); stk2.push(cur); if(cur->left) stk1.push(cur->left); if(cur->right) stk1.push(cur->right); } while(!stk2.empty()) { res.push_back(stk2.top()->val); stk2.pop(); } return; } int main() { const int N = 11; //cin >> N; // 输入节点个数,含NULL,0代表NULL int preOrder[N] = {1, 2, 0, 5, 0, 0, 3, 4, 0, 0, 0}; // 若是没有子节点了用0来结束 //for(int i = 0; i < N; i++) { // cin >> preOrder[i]; //} int index = 0; TreeNode* root = buildTree(preOrder, index); vector res; aftOrder(root, res); for(int i = 0; i < res.size(); i++) cout << res[i] << " "; return 0; }
- 若要求自建链表,同理,比上面简单点。