就业:实习经验≈在校项目≈一门语言、算法能力和数据库操作四大基础课程奖项英语和数学
我个人背景:本科软件工程,JavaEE出身,做了一年半(从大一下开始到大三上结束,其中每个礼拜周末去参加HCIE-R&S培训和Cloud方向(自学),因没钱且因为Cloud方向课程开设地点在其他城市,最终没有考试),而后觉得JavaEE开发没意思又迷恋云计算平台的搭建和大数据开发,就狠下心转向大数据开发。到大三下学期开始考研,最终因为数学只考了34分,总分差10分,先是在春招中找工作,有拿到的offer,也有大批看不上我的公司,最后还是决定二战走起。毕竟本科生和研究生的工资待遇差的不是一点半点。我面试的大数据开发岗位,基本只有少数人是本科生,大多是研究生。
先说考研:计算机考研,已经是啥人都要考CS,18年统计的10大火爆考研专业,计算机科学技术(第3)、计算机技术(第5)、软件工程(第8)纷纷排进去了。然后,好学校要么小幅度缩招,要么推免占的越来越大,要么增加非全的人数,但是大家还是挤破头为了进去。在考研中数学对于大部分人,绝对是能否考上的关键,其次是专业课(通常是计算机四门基础课程其中的1门、2门或4门),毕竟数学+专业课总分300了,这两个是无比的重要。初试能稳过,那么在复试中比较重要的就是C语言和编程能力了,因为大部分好学校有上机,没上机的考C语言笔试,或者其他专业课(例如面向对象、软件工程)。再就是能够打动导师的高级奖项和项目。
再说就业:这个只能谈谈我的岗位,我主要学的Java,并且大数据开发(只是开发岗位)岗,目前校招企业的考试题主要语言有两种,c和Java,Java占大多数。校招通常的流程为:
1.在线笔试或者宣讲会现场笔试,考试内容以编程语言基础知识为主,以四大基础课程知识为辅,每个校招企业最后三道题均为编程题(无论是现场面试还是在线笔试),编程题占的分数很大。当然也有很多一线互联网企业的校招题只有三道编程题,而且难度通常是一道简单,两道比较难。
这里特别提一下,Java相关岗位的算法题。我参加几十家公司的笔试,算法题中出现了用Java实现B+树,Java实现链表和栈,Java实现霍夫曼,因为Java使用集合将大多数数据结构都进行了封装,所以我们很多人都忽视了Java集合的底层实现,通常知道的也只是HashMap这些考的烂大街的集合。
因此算法能力是非常重要!非常重要!非常重要!但事实上70%的人算法都不过关,跟那些没参加过校招说这些,人还一脸不在乎,还反问一句,本科生要这么好的code能力吗?
2.笔试通过就等着面试,面试因为各大公司不一样,所以只说一下相同的部分。通常面试为2-3面,也有比较恐怖的4-5面(一般是华为、阿里这样的公司)。
有实习经验者优先,这是每个公司招聘都会有的一句话,因此,这个条件的重要性不言而喻。这个条件对于那些大三秋招实习然后到大四春招找工作的学生来说非常有利。
第一面通常比较简单,问的都是基础型题(你会的编程语言基础、数据结构),但这个也要看面试官。如果面试官仅仅只是想问一些概念基础题,那么就比较简单了;如果是那种,举个例子,然后在例子中问出一些基础题,这种就比较棘手了,因为面试官会将这个问题稍微深挖。另外,你会发现你在网上找的那些什么什么面试宝典上面的题,大多都没问,但又不能不看,我们没法预见面试官想要问啥,只能都记下来。关于基础刷题,我建议牛客网去刷,除了刷选择题,我个人觉得网站上面的简答题是非常重要的,只是,大多数简答题至今还没有答案,可以自己搜,总结。此外,就是算法能力的锻炼,只推荐LeetCode,以前我还推荐别的网站,现在只推荐这一个。练习算法是痛苦的,因此,建议在LeetCode上按照标签刷题,题目难度由简到难,刚开始写题,肯定不会,那么就抄,然后提交,提交完毕后,会有一个结果分析,你会发现有很多这个题优秀的解题代码,选择其中最优解,然后把它理解,吸收,总结方法。然后自己做第二个题,通常一个标签且同等难度的题,解法是相似的,如果第二个题还不会,你就重复第一个步骤,慢慢进行。有时候,同样的语言写出来(只说Java),你会发现自己写了很多行,别人只用了一行就写完了。然后只能一句“卧槽”,但是能增长自己的解题能力,这种代码通常都用了很多你不会用的类方法,这正是你要学习的地方。
第二面或第三面主要是围绕你的项目、数据库和深挖你的技术能力(并发、线程),通常会把你问到难住。如果你项目不怎么出色,那通常就挖你的框架学习。例如,Java后端开发的那些框架原理和底层实现,大数据开发的那些框架原理及实现,以及会对你最近看的技术书进行提问。2、3面通常是一个问题一直挖,挖到你不会为止。
最后就是HR面或者群面了,有的有,有的没。群面一般是那种证券类公司和银行有,就是即兴演讲,无小组讨论(内容一般是社会问题)。还有的是结对编程,这种很少,我只遇到过一次。
另外,义正言辞的反对那些提出学习编程语言没什么用,编程思想才是最重要。为什么这么说呢?实践是检验真理的唯一标准,主次要搞清楚,一个思想不是凭空来的,是对经验的抽象得来的,将什么编程思想,将什么框架模型的原理灌输到脑子里,根本没实践过,能学好吗?还有那些说学好思想,什么语言都能掌握,真是笑话了,且不说每个语言的都有差异性,而且动动脑子想想,主流的这几大语言,在各自的领域内深耕了几十年,你能什么都掌握了?只能是,你的公司用什么,你又符合什么,你想作什么,才去学什么,你又要为此放弃什么。
还有个主次颠倒的事,但是这点要怪当前大学的教育。计算机专业,刚开始课程,通常是计算机导论和直接就上c语言,然而大家(老师和学生)都没重视起计算机导论这门课程,而且,c语言本身就很接近底层,但它依然在底层之上。学校里是大一先学c,然后在大三学习计算机组成,这有些本末倒置。对于c中难以理解的指针,其实先学习计算机组成,对于大部分人来说,指针根本就不是个难理解的东西,老师也就不会教的那么费力。

