距离投递简历到找到现在开始总结实际上已经快三周了,从最开始的对自己不自信到后来慢慢找到面试的感觉,我感觉成长还是很大的。
实习投了五家公司(字节跳动、百度、猿辅导、搜狗、快手),除了百度是同学发的实习JD、字节跳动在官网直接投递,其余的都是在牛客实习广场上找到的(大赞牛客),除了猿辅导均接到面试邀请(一直怀疑猿辅导的日常实习是否存在),搜狗和字节跳动拿到offer、百度二面之后没消息(应该是凉了)、快手早上睡过了鸽了面试T.T。
本科非科班出身,虽然说拿到了保研名额并成功地保研到计算机方向,但是我对自己的未来还是很迷茫的,以前一直认为只要好好上课取得好成绩、听老师的话,以后可以不用为自己的未来操心。但是随着慢慢成长,发现这种想法简直幼稚可笑,每个人都是站在自己的利益出发点进行宣传。虽然在外人看来本科985,还是保研到一个不错的地方,但是其实自己内心是非常焦虑的。
2018/10月在导师的催促下到了实验室,对实验室的方向也有了初步认识,其实从这时开始直至寒假都只是在完成导师布置的任务,虽然说知识面、视野都有扩展,但是跟周围本科同学,以及师兄们交流,发现自己对科研、对实验室的研究方向也不是很感兴趣,实验室出去工作的薪资也达不到我的期望值,想转方向但是往哪边转是我当时存在的最大疑惑。
2019/2-3月从学校回来继续到实验室,我觉得这应该算是我的转折点。当时有毕业季的师兄师姐作求职分享报告,本来觉得找工作离我还很远,现在不用在意这件事(本质上有一种不想逃离象牙塔的感觉?),但是当时还是抱着试试看的心态听了两场。分别是开发和算法学习经历分享,从毕业后大家的薪酬、去向,以及各个方向的学习、复习路线都有所涉及,听完后大受鼓舞,慢慢地也开始在牛客和知乎上找相关的帖子,对自己的学习路线也有了规划(有时候人的转变最需要的是一个引子)
C/C++/计算机基础->Linux->网络编程
由于我本科非计算机专业,需要对基础知识的掌握和理解,同时实验室偏向硬件,C/C++以后也会用得着。之前看过一段时间的深度学习,觉得深度学习大多是在炼丹,学不到什么实质性的东西(当然最主要是我菜了),这时候对自己路线比较偏向C/C++开发
之后就是具体的学习了,第一阶段主要是掌握语言,从C++ Primer Plus啃到C++ Primer、STL源码剖析、深入探索C++对象模型,虽然啃书的过程很痛苦,啃完之后也有很多不记得,但是啃书的过程未必不是一种自我内心世界的修养过程呢hh
同时对于计算机的基础知识也开始准备了,首先是计算机网络和算法,计算机网络当时看的是B站上韩老师的视频学习,这个老师对网络理解的很深,基本上看完一遍对网络的整体印象就你把控了,然后算法是看的北大一个老师的视频,算法看视频我还是不是很建议,很多东西针对着练几遍理解的更加深刻,同时每天坚持在Leetcode上写一道题,刚开始是很痛苦的,一道题看答案都要理解一个小时,后来慢慢的开始找到感觉了,就算想不出来,看答案基本上也能很快理解的样子,所以说贵在坚持!!!
上面的都看完也差不多是7月份了,中间毕业季有一段时间是耽搁了的,同时还有老板布置的任务。之后在实验室开始啃鸟哥的Linux私房菜,同时还有TCP/IP卷II,说实话,私房菜这本书跟着书里面的内容练手是很容易的,但是很多东西看完之后也还是没有印象,对底层也不是很了解,比较适合Linux入门。TCP/IP卷II真的是啃的痛苦,我应该是到现在还没看完,实习面试的内容其实到计算机网络:自顶向下的方法掌握就可以了。
之后就到了九月份开学了,刚开始课还是比较多的,这时候我入手了深入理解计算机系统,用了差不多半个月看完。这本书真的非常安利,从底层硬件到网络应用,最后以一个web服务器的例子结尾,对整个计算机体系的建立非常有帮助!也就是看完这本书我才完全确立起我的后台开发的决心。之后深入了解网络编程的基础知识,继续看了Linux环境高级编程apue、两卷unp,这三本书真的是啃的我头皮发麻,说实话虽然说我看了大部分,书上的例子也很多都复现了,到最后还是感觉自己一知半解。当时看完这些书已经十一月了,本来计划着过完年再投实习,但是周围已经有同学在大厂找了实习,加上单纯的看书感觉对自己提升不大,因此抓紧时间看完了计算机网络-自顶向下的方法和后台开发核心实践这两本书,相当于对我之前学习的内容一个总结。
到了11月底,开始投递简历并准备面试环节,总共历时两周左右。
搜狗一面
c++掌握的怎么样?虚函数的实现方式?
一个派生类同时继承两个基类,有几个虚函数表?
链表反转
两个有序数组合并
将零移到数组最后
面试通过,介绍公司的业务让我选择,对数据库没有兴趣,后来面试官打电话给我两天时间考虑offer,当时已经面试头条未回,后无果。
百度一面
自我介绍
C++虚函数的问题,有一个动态编译还是静态编译的问题,记不太清了
static、static修饰函数的作用
epoll/select的区别
tcp三次握手四次握手
线程同步的方式
进程间通信
二叉树中序遍历 递归/非递归
给定一亿个每个几十k大小的字符串,找出重复次数最多的十个
百度二面
C++了解吗?C++11跟之前有哪些变化?
Linux了解吗?算法:给定包含…的路径,输出最终化简后的路径结果
epoll/select区别
进程间通信
给定二进制文件,输出特定位置的字符(主要考察grep以及awk),再用python怎么实现
github上有什么有意思的东西吗
还很多忘了。。百度二面给我的感觉很不好,很多都没答上来,当时就感觉凉凉,面试完让我等通知,结果就没了下文
头条一面
C++指针的运算, i n t a [ 5 ] , s i z e o f ( a + 3 ) int \ a[5], sizeof(a+3) int a[5],sizeof(a+3), i n t p , i n t ∗ p 1 , i n t ∗ ∗ p 2 int \ p, int*\ p1,int **\ p2 int p,int∗ p1,int∗∗ p2分别用malloc分配内存
给定二叉树,返回深度。递归、非递归用栈,如何实现栈(链表),具体实现
进程通信方式
tcp三次握手
系统调用、什么时候会阻塞,具体情况
问了一下实验室相关的,本科的一些工作
最后算法题反转链表
头条二面
很多问题记得不是很清楚了,也有很多重复的
Linux进程命令内存使用情况、进程情况
算法Z型层次输出树
两数之和
头条三面
现在上的课程、实验室方向、本科绩点排名
给定数的二进制形式,判断1的个数
5个人的帽子放进屋子,每个人摸到的都不是自己帽子的概率
英文句子将单词前后颠倒
其实三面第二个概率论题没答上来,面试的时间也很短,当时以为已经凉了,没想到面完之后半小时hr就通知最后的hr面,头条的效率还是很高的哈哈
回首过去的半年至一年的时间,还是给我很大的感触的,还是罗列一下吧:
1.有的时候定目标不是什么难事,困难的是如何按期完成。要保证每次都像前几天那样的热情肯定是不可能的,但是如何让自己的热情下降之后维持在一个恒定的值上下小幅波动,这才是考验人的地方。
2.中长期的任务要分开成阶段性的短期任务,甚至是每天的任务。每天的任务不一定非要写在纸上,但是自己内心必须很清楚,完不成目标任务也是很常见,但是一周内必须完成。
3.别人的经历、成就永远只能起到参考和警示作用,如果一定要按别人的轨迹来走,只会又累又痛苦。
4.还有另外一点,不论是做科研、学习还是工作,最重要的是能沉下心,现阶段最主要的目标一定不能忘记。
万里长征的第一步才刚开始,以后的路只会更长更艰难,留下经历为了以后能够参考,同时也希望能够帮助到与我一样迷茫无助的人