Advertisement

ACMer渣铜的秋招总结与经验分享

阅读量:

背景

2019年11月8日,在寄出三方后收到鹅厂的应届毕业生录用函之后,我的秋招尘埃终于落下帷幕.


我是中国矿业大学(北京)计算机科学与技术专业的一名本科生,在校期间主修C/C++相关课程并积累了一定的实践经验。我的招聘方向主要是C/C++后端开发工程师岗位。自7月19日至10月12日期间内, 我共参与了5次笔试以及37轮面试过程, 成功对接了8家公司的offer申请, 其中大部分来自SSP项目申请

复制代码
    字节跳动(offer) 腾讯(offer) 猿辅导(offer) 百度(offer) 
    盛趣游戏(offer) 作业帮(offer) 阿里巴巴(hr面挂) 网易雷火(hr面挂)

选择入坑

自幼以来,在影视作品的影响下一直坚信IT工程师是极具魅力的职业,并以此标志性的长发为象征展现了科技的力量与魅力。然而在误打误撞之下我竟然意外选修了计算机专业这一看似与兴趣相差甚远的专业。在经历了诸多努力后才恍然认识到:所谓的帅气外表或许只是表象而真正吸引人的却是无休止的工作与熬夜在所难免。如今回想起来虽然职业选择并非高深莫测的算法研究但我依然觉得编写代码的过程令我感到非常兴奋并且能够通过自己的努力服务全球数十亿人甚至更多人也让我倍感自豪


学习历程

直到去年才毕业时我才意识到自己即将面临即将工作的现实


大二时光一直平淡无奇,在这段岁月里唯一的收获便是参与了ACM区域赛并获得了铜奖,并且认真地学习了C++语言的同时也深入研读了《算法导论》这本书(阅读起来确实让人感到吃力)

大二期间一直过得很平淡,在这段时光里唯一的收获就是参加了ACM区域赛并获得了铜奖,并且潜心钻研了C++语言的同时也认真阅读了《算法导论》这本书(阅读起来确实让人感到吃力)

大二那一年基本上是平淡无奇的一年,在这段时间里唯一的收获就是参加了ACM区域赛并获得了铜奖,并且认真地学习了C++语言的同时也深入阅读了《算法导论》这本书(阅读起来确实让人感到吃力)

在大二这一年基本上是平淡无奇的一年,在这段时间里唯一的收获就是参加了ACM区域赛并获得了铜奖,并且潜心钻研了C++语言的同时也深入研读了《算法导论》这本书(阅读起来确实让人感到吃力)


大三上的主要精力还是ACM,无奈水平太菜加之无前辈提携,铜牌+2。搞完大创的玩具,学了下操作系统内核。
大三上很快结束,考研的热情逐渐退去,当时想找一个实习体验体验。本着自己几乎没有开发经验的事实,以及自认为很扎实的算法功底,投递了N家公司的算法工程师岗位,结果除了京东全挂。京东offer下来,岗位怎么是软件开发工程师?,怒拒。天真如我,拼命学了三个月的吴恩达,希望春招找一个算法的实习。
接下来就该春招,我才知道了牛客网这个网站,才知道了算法工程师的要求,才知道了还有后台开发这个岗位,没有办法硬着头皮投呗。四月份开始在一家创业公司实习,mentor很好,做了三个月cv的demo,方了解到自己的知识储备完全不恩感胜任算法工程师的岗位。


从7月份开始回到学校后,试着继续参加托福考试,后来意识到自己更适合投身于就业领域,于是开始积极备战秋招.秋招 prep was relatively straightforward, largely due to my prior exposure to source code analysis. I dedicated a month to reconstructing an older version of Unix system and spent a week completing 200 LeetCode problems before interviews began in earnest.


感想

在牛客网的分享中提到,在拿ssp成功需要具备以下三点条件:大厂实习、顶会论文发表以及比赛中的Top名次。这些条件缺一不可。


算法基础/ACM经历

就大企业而言,在校招与社招之间存在显著差异性:社招主要侧重于考察应聘者的项目经历积累情况;而校招中大多数部门尚缺乏完整的项目实践经验,在这种背景下如何评估这类候选人呢?通常情况下,校招注重挖掘应聘者的潜在能力,而衡量一个人潜在能力的关键要素在于其聪明才智与勤奋程度之和:聪明者善于分析问题,勤奋者则能持续学习并提升技能水平;因此,在判断一个人是否具备聪明才智方面,关键在于考察其解题能力

就当前的整体面试流程而言,算法与数据结构方面的专业知识在外资企业的校园招聘面试中至少占据80%的比例,在国内企业这一比重也超过50%:为了降低招聘成本,许多企业会通过简历筛选初步筛选出一部分候选人,然后通过笔试进行进一步筛选;其中笔试环节的主要内容均为算法类试题;通过笔试进入面试环节后,主要考核包括现场手撕代码、专业知识问答、项目经验分享以及额外附加问题等;其中最为关键的能力便是手撕代码的能力:只要应聘者能够熟练解答所有算法类试题,即便对其专业知识掌握不够扎实,仍然有可能顺利通过面试环节;但如果无法解答大部分甚至全部算法类试题,则很难获得最终面试机会

对于尚未具备ACM基础的学习者来说,建议系统性地进行算法训练:具体而言,可以通过完成LeetCode前200道题目以及阅读《剑指offer》一书来实现举一反三的学习效果;这些题目通常需要一周时间集中练习完毕;其实即使从零开始学习也需要大约一个月时间才能熟练掌握相关知识储备;但经过系统学习后,在求职过程中将会发现这类题目都能迎刃而解

大学期间我始终对学习的方向感到迷茫,在高等数学和线性代数课程后又深入学习了离散数学与操作系统课程。最初我对这些知识的实际应用感到疑惑:编程实践是否需要如此深奥的理论支撑呢?于是我将大量时间投入到ACM竞赛中。最初参加ACM竞赛时,并未察觉其与其它编程竞赛有何异同之处,在我校看来获得世界总决赛奖杯并不比北京市电子设计竞赛更具优势(此处应为:获奖价值)。许多参与者的建议让我误入歧途:'升官发财并非此路所长'、'贪生怕死切勿涉足'——这种以偏概全的观点让我误以为参加竞赛仅能获取微利回报(此处应为:非商业用途)。正是凭借这次性价比有限的比赛经历,在秋招过程中经历了大约三十轮面试(此处应为:约),其中大部分算法题我都给出了较为满意的解答(此处应为:做出了正确解答)。回顾当初的选择令人欣慰——虽然这条路走下来并非事倍功半(此处应为:性价比并不高),但最终却收获了一份理想的工作offer(此处应为:满意的结果)。

花费了大约三个月的时间看完《算法导论》;个人认为这本书讲解得非常出色;提供了实用且系统的算法知识与数据结构理论;全面系统地学习后至少带来每年10万人民币以上的收入提升;如果有机会的话,强烈推荐一读。


基础知识

针对一般项目的应试者而言,在面试中除了考察算法能力之外的基础知识同样重要不可忽视。基础学科主要包括以下内容:编程语言;操作系统的相关知识;网络技术基础;数据库系统的核心内容。这些学科之间有着密切联系;深入理解并灵活运用这些知识点才能在实际开发中发挥其应有的作用;而各个知识点之间也在相互影响着彼此的发展方向和应用领域


语言

不同的人有不同的选择倾向。
对于开发岗位而言,在国内校招中常见于C++或Java岗位。
无论是掌握C++.还是Java编程语言都是有益的。
然而,C++.通常被大型企业采用,
因此,在进入大型企业时选择学习C++.相比之下,
JAVA 适用于大小型企业,
但相对来说,学习JAVA进入大型企业较为困难,
然而,JAVA 的就业方向更加广泛.
掌握PYTHON 或者GO等技能同样能成为求职中的加分项

我属于C++技术领域的学习者。 在学习C++.的过程中有哪些优秀的书籍值得推荐? 《C++.primer》 是一本核心教材. 《Effective.C++.primer》 是一本关于高级技巧的书籍. 《深入剖析STL》 是一本实用工具类书籍.


数据库

后台开发岗对数据库的要求不深入,通过打下扎实的课堂基础,并熟练掌握并灵活运用MySQL就足够了。《高性能MySQL》一书内容较为深入,适合作为进一步学习和深入研究的参考资料。


计算机网络

每个 entering programmer 必须掌握 network programming skills, making it an indispensable topic in job interviews. 学习 essential knowledge in computer networks 或者深入研究 tcp/ip architecture 是获得专业资格的必经之路. 在实践方面,掌握 practical skills in network programming 包括熟悉 linux 系列网络接口,建议自行搭建小型服务器以加深理解. 关于深入学习,可参考 classic textbooks like "unix networking explained" for comprehensive insights.


操作系统

操作系统的领域不容忽视,《深入解析计算机体系结构》坚决不推荐清华出版社的紫皮教材。接下来几本书不容错过:
《深入理解计算机系统》已经是重量级著作,《现代操作系统》则是不可错过的佳作;
《深入理解计算机系统》侧重于系统底层原理,《现代操作系统》则深入阐述了操作系统的核心概念与实现机制;
而《鸟哥的Linux私房菜》,作为高级学习Linux的最佳选择,则为掌握Linux操作提供了丰富的实践素材;
掌握Linux操作是提升系统管理能力的关键技能。


个人认为,在学习计算机知识方面就像庖丁解牛一般,在深入理解每个组成部分的同时也需要掌握其中的关键原理。


项目经验

在通常的校招过程中, 项目经验的重要性其实并没有那么突出. 许多人在工作中存在着"本末倒置"的现象, 尤其是许多人存在"大学期间没有充分重视专业知识学习, 反而一直停留在开发实践层面"的情况. 在与许多面试官交流的过程中, 我们发现大厂面试官普遍认为我们参与的项目多属于表面化的应用开发. 很多人仅凭个人摸索完成了为期三个月的演示文稿项目, 而他们通过团队协作可以在半个月内完成同样的功能模块, 反而项目的质量能够得到明显提升. 大学时光相对宽松自由, 就应该专注于设计和实现非CRUD(增删查改)技术相关的工作以提升个人简历竞争力.

复制代码
    仿nginx服务器
    跟着虎书实现一个编译器
    仿unix操作系统
    做个小分布式系统
    ……

以上列举的都是优秀的选择

附个人的简历内容

复制代码
*-2019.* 类 UNIX 操作系统 xv6 独立开发
    
    通过阅读 UNIX 系统源码,了解操作系统工作流程。借鉴 JOS 等 Unix 系统的部分文 件,基于 x86 多核处理器硬件,实现 多任务操作系统 xv6。 
    主要内容: 1)开机引导(内核加载) 2)内存管理(二级页表,链式页面管理,虚拟内存) 3)进程管理(上下 文切换,时间片轮转调度) 4)陷入,中断,系统调用 5)锁(自旋锁,条件变量) 6)文件系统(IDE 驱动, buffer 缓冲,恢复日志,无名文件,目录层,层次文件名,文件描述符抽象) 7) Shell,fork,exec,pipe 等。

后记

秋招是一段漫长的经历,在这段时间内不仅需要积极准备面试环节和应对长时间的职业等待。参加秋招时,请先适应意向较低公司以积累基本面试经验和职业素养;同时建议尝试更多公司以获取更多的offer机会。

望大佬们提前做好准备

下个月参加最后一场ACM,希望有一个满意的结果,渣铜太惨了。

Ps:明日我矿110周年校庆,祝我矿辉煌。

全部评论 (0)

还没有任何评论哟~