一、个人基本情况
学历:硕士研究生 本硕985
专业:生科院某专业(本硕)
求职方向:后台开发和客户端开发都有
实习经历:无
校招offer:字节跳动、美团、华为、虎牙、bigo、贝壳、远景、小米、高通、ihandy等,其中大部分为SP offer,岗位主要是后台开发。
二、个人经历
在上大学之前,基本上对编程一无所知,但是却有一种说不清楚的对计算机的热爱。不过那时对于计算机的理解仅限于【装系统】,【装软件】和【拆洗主机风扇】。这一切的开始源于一场面试。
所在的大学是一所以工科著称的高校,其中创业气氛十分浓厚。学校因此有许多小有名气的科创团队,基本上是由老师主导,各专业学生组成的小团体。可不要小看这些小团队,世界级程序设计大赛的奖牌获得者经常就出于此类团队。刚上大学的我们单纯稚嫩,自然会被被这些团队的大幅宣传报和满目的奖牌称号所吸引膜拜。我也不例外。
当时我便怀着澎湃的心情申请了一家曾多次在微软创新杯夺得金奖的团队。一个从乡下来的小伙,第一次参加面试,第一次单独和码农小姐姐夜晚座谈,第一次参加所谓的通宵测试。也就是在那一个晚上,开启了我新世界的大门。
那天晚上给我一群编程小白的任务,是模仿百度首页,实现整个网页的设计、布局和基本链接。提前给出的提示是w3c的教程网址。从来没有接触过编程的我在此之前,连编程的流程都不清楚,更不必说编译环境、编译语言甚至是源代码阅读(当然这个任务也涉及不到这些)。
但是也就是那一个晚上,让我真正意义上的接触了敲代码这个事儿。没错,我的编程起点是HTML。可惜的是,我并没有通过那个团队最终的面试。不过从那以后,我就开始了网站开发的自学之路。个人自学的坚持很大程度上基于兴趣,源于在室友面前一顿装逼后的成就感。但这就是一个生科院的学生在课后的最大乐趣所在。
在接触到网站开发之后,从最初的HTML+CSS到后来的HTML5+CSS3+JS+ASP,从静态页面的布局到***页的请求。虽然感觉技术的成长也就是从博客的复制粘贴走向了文档的复制粘贴。但是终于迎来了小试牛刀的机会。学校某大型学校组织需要做一个展示网站,朋友拉上了我和几个人承担了这个事情。这算是第一次真正意义上的项目开发,不过整个网站的功能不多,主要还是展示为主,后台也直接通过学校网络平台整合就行了。所以整体下来做的事情并不多。
一直以来,都是自己通过博客自学,东拼西凑的建立起知识架构。但是其实技术基础十分不牢固,不懂计算机基础、计算机网络,更别说编译原理、操作系统等基本的知识。因此在很长一段时间内,觉得好像也没有会什么,一直对自己的能力保持怀疑。在这段时间内,有过跑去搞嵌入式,硬件开发,甚至是界面设计,视频制作。但都不一而终。果然应了开学老师说的那句话,【咱们的学生学的都太杂,但又杂而不精。】
一段迷茫,一段颓废。一不小心就成为校园里的学长,于是开始紧紧茫茫的寻找实验室。好在我们专业与生科院其它专业相比,还是带有工科气质的。因此怀着对编程的兴趣,加入了一个专门做医学影像的实验室。进入实验室,不再是之前的漫无目的,随处拾荒,但却也并不会接触到前沿新兴的技术。毕竟在实验室里,工程技术更多的只是工具。不过值得一提的是,在实验室里,我接触到了算法思想。医学图像本来就是图像处理领域的一大分支,因此图像处理算法的了解同样也是至关重要。
从这个时候开始,我已经不再搞网站开发那一套东西,专心使用C++写我的算法。那时候深度学习还没那么热门,大多数的图像处理方式还是基于传统的算法进行。虽然算法能力薄弱,但是倒也是我所求。同时,为了获得数据,还接触到Linux系统以及一些脚本,在做【研究】的过程中也大大增加自己的技术面。
与此同时,为了巩固自己的一些技术基础,也为了督促自己的学习,我报考了计算机等级考试和国家软考。可能对于计算机专业的学生来说,没有什么含金量,轻而易举。但是对于一个非科班的学生而言,这样的考试可以很大程度上帮助自己去重新组织零碎的知识。毕竟不是所有人都有足够的精力去跟着计算机系的人上课。
读研or工作?这一直都是众多大学生在四年之际最煎熬的问题。但是于我而言,清晰而明了的选择就是读研。本科阶段的经历让我知道自己与科班的差距,虽然接触了许多东西,但是也都不够精,甚至没有底气去独立承担一个小的开发任务。选择读研是希望让自己的技术都够在某一个点上精进,能够独立的做出点东西来。当然最终的结果可能并不是自己当初所想,但是说到底还是得感谢在研究生期间所做出的努力。
三、校招经历
从个人经历来说,我没有很出彩的地方,没有算法和软件比赛的奖项,也没有大本大本的啃科班的教材,甚至连个像样的项目和实习经历都没有。很多东西真的都是基于兴趣,看得多了,自然就有了感觉。最后通过几次系统的学习,把之前所有零碎掌握的知识点串联起来,就成为了我的技术基础。
研究生期间虽然敲的代码多了,但是说实话并没有很深入。没有深入的去了解技术原理,也没有很深入的去研究技术的使用场景和选择性。更多的还是为了达成目的而用。所以在秋招开始前,也开始慌了。
现在回想起来,意识真的很重要。看到现在的小学弟大一大二就去大厂实习,大三大四便获得大厂转正资格。这里可能资质很重要,但是相对而已,我更相信是意识主导造成的偏差。
讲回我的秋招经历。真正开始校招准备的时候已经是七月初了,之前基本没有任何相关的复习和准备。由于实验室原因,因此也没有出去实习。刚开始复习的时候也是一团乱麻,不清楚自己的求职方向,也不清楚复习的轻重点。
但是好在现在互联网的资源多了,无论是牛客网,各大博客网站,以及微信公众号等平台上的信息资源,足够让一个外行人找到入门的捷径。以至于我在复习了一个多月后,在八月底拿到了第一个ihandy的口头offer。之后就一发不可收拾,越面试状态越好。基本面完自我感觉就是稳了。
在复习开始时,我主要也是通过牛客网上搜索自己所需的信息。在确定好自己的求职方向后,就可以先进行基础知识的复习。在复习的同时,一定要坚持投简历。我当时是一边复习,一边投提前批简历。复习复不下去的时候,就去找些公司投递下简历。放松的同时,也是给自己动力。
生物相关专业的学生,在投递简历的时候才能发现自己的无助。我在简历投递初期,基本没有任何反馈。提前批阶段,许多公司都会去争夺更优秀的简历候选者,对于生物专业的学生真的没有什么优势。不得不说,非科班的简历至关重要,我在面试期间的简历就改了不下十版。从第一次投递简历到第一次收到笔面试通知都过了一个月,而就在这几天之后,我就拿到了第一个offer。可见简历的重要性。(想看看我简历的同学,可看文末获取方式)
就算一直被拒或者石沉大海,但是没有关系,既然选择了这条路,那么就要坚持下去。投一家无人应答,那么就投十家,投五十家。我在整个秋招阶段,总共投递过近一百家公司。许多在提前批没有给予反馈的公司,后期大部分都有电话联系重新开启面试流程。所以,就算认为自己的简历再不够出色,也要相信总会有瞎了眼的HR,不过也要多吸取教训,不断更新你的简历。
在获得面试机会后,之后的面试过程,跟投递简历一样,一定要多面多总结。如果你的表达能力不好,没有别的好的办法,只能多练。自己在面试前问自己问题,然后用自己的话陈述出来。甚至是录音自己听,感觉一下面试官听到你的回答是做何感想。
心态要好。面试官也是人,不可能所有人都能够绝对公平的跟你面试,所以遇到人品不好的面试官,做好自己就行了。
要善于总结。每一次的面试都可以做好记录,录音或者笔记都可以。面试完之后需要多回顾,发现自己的错误,感受面试官对你的引导,然后下次面试注意。我一般喜欢用印象笔记记录东西,每一次的面试记录我都记录在印象笔记上。电脑手机都可以看,即使是出门现场面试也不怕。
最后就是一定要坚持下去。金九银十,金三银四。把握好机会,要善于规划自己的成功。
四、准备经历
我在复习的阶段主要准备以下的技术基础。分为语言基础、数据结构和算法、计算机网络、操作系统、数据库以及算法刷题。基础的准备其实我是不打算多说的,因为牛客上的资源太多了。运营小姐姐们也把很多的硬核资源分好了类,我就简单谈谈我的复习感受。以下都是开发岗的基础,对于不同的岗位还需要做其它方面的复习,比如后台还需要有对分布式、框架等的了解、客户端开发还需要有对不同平台的机制有所了解、测试开发还需要有对软件测试知识的了解。
语言基础:
以C++为主。我不喜欢看又厚又重的语言书,因此复习全程是以博客、开发文档和实践相结合的方式进行技术点复习。C++的技术点相对于其它语言来说,不算多,也不算难。技术重点的筛选可以从面经中提取而来。当然每一届都差不多,所以找找别人总结好的资料看就行。(想要我复习资料的,可关注公众号后台领取)
数据结构和算法:
这应该是编程的基础,重要需要了解的数据结构不出10种。花点时间弄清楚它们的原理、结构和使用方法,常用的操作也需要掌握。最难不过红黑树。
这里的算法指的是常用的算法,比如排序、遍历,与数据结构相结合的数据操作方式。需要保证手写才行。
计算机网络:
网络部分的内容其实可以算是最重要的,无论是前端后端都需要掌握网络通信过程中的操作和机制。技术点可参考网络服务器的请求和响应过程。将其中所有涉及到的协议、机制了解清楚,就可以掌握大部分了。
操作系统:
如果有Linux使用经历和脚本编程基础在面试中会很加分。对于操作系统的理解建议按照Linux和windos系统的区分进行。
数据库:
SQL基本操作必须要掌握,还包括一些关系型数据库的基本原理和机制,内容不多,多看看就可以掌握。Redis同样也是加分项,有能力的可去研究下源码。
算法刷题
这一部分不多说,普通人只能勤能补拙。无论是剑指offer66题还是leetcode都可以,剑指刷两遍,leetcode两百题,基本没有问题了。刷题时不要死刷,可以根据类型刷,比如链表操作、二叉树操作、动态规划等。相同类型重复做,能够更好的培养算法思想。
五、项目准备
没有实习经历的非科班,如何才能从简历上打动面试官,重中之重的必然是你的项目经历。对于非科班来说,最困难的时候莫过于在写简历的时候发现,没东西可写。在实验室做的东西与编程毫无关系;又或者做的东西太杂,技术层面没有挖到足够深;又或者对技术方向没有认知,项目无法体现你的技术水平。这些问题都会直接导致你的简历“无效”,即面试官无法发现技术亮点,也就无法对你的技术进行切身的考察。这样的结果可能可以暂时混过一关,也可能导致面试官抓不住你的优势,从而失利。
如果有这样的问题,就一定要学会重塑自己的项目经历。在对基础知识点复习的时候,会加深我们对技术点的理解和使用。那么如果你有与编程相关的项目,但是觉得技术太简单,没啥可写的时候,一定要对该项目重塑。非科班能有带点边的项目已经很不容易了,一定要能够利用起来。
比如最常见的,很多非科班的同学估计都会写一些小软件,就做一些很基本的处理之类的。这种项目一眼看上去就很简单,像是桌面客户端开发,技术点就Qt一些图形库之类的。这些项目不要放弃!可以从多线程优化、数据结构优化、设计模式优化、甚至基础的软件架构等等细节上去优化自己做过的小项目。虽然项目简单,但是往往可以体现最基本的编程思想和软件开发思路。这些都可以作为简历上的小亮点,同时也可以诱导面试官往更基础的方向上去考察你。
然后就是一定要准备自己求职方向相关的一个项目。这个项目如果以上有,那就把它重塑的漂亮点。如果没有,那就得做一个。这种项目不需要很强的创新性和技术突破,你用了,并且知道为什么这样用,这样用有什么好处就行了。比如后台开发的同学喜欢自己搞一个高并发的服务器之类的,哈哈所以我也搞了一个。这种项目其实到处都是,Github一抓一大片。花点时间,搞懂它,那就是你的。
六、感想体会
经过校招之后,发现很多事情没那么难。说要难就难在什么时候开始,怎么开始,开始之后要怎样。我本身不算是技术大神,单纯是靠着对计算机和编程的热爱才走到现在,中间不像科班学生那么一如既往。中间有很多次的困惑迷茫,但是还好最终的结果还算是不错。
现在回想起自己的不足,最重要的就是意识的不足。然后是毅力不够。
意识主要是指在面对职业选择的时候没有提前去规划自己的学习生活,每一次都需要现实推着往前走,从而显得很被动。看到很多学生早早对自己的未来有了打算,并且积极去找实习,去准备算法,去补充自己的项目。这些人的提前意识往往就是他们胜出的原因。
毅力不够就是很人性的一个原因了。人都是有惰性的,在未来未来之前,很多人都会选择逃避。很多准备都需要提前做好长期的打算,而无法一蹴而就。所以有些时候就算有了意识,也没有足够的毅力让自己坚持下去。最后导致也无法享受到耕耘后的收获。
不过未来,且行且珍惜吧。
七、一些鸡汤
1 做好足够的准备,要相信无论什么事终究会有结果的。找工作这种事从来都不是只有一条路。看了那么多经验分享,其实都是大同小异,关键还是要有自己的想法,学会规划自己的学习和面试。
2 在做选择的时候,意识总是比硬实力更有用。如果你看到了这里,想必意识也不会很差。剩下的就是努力和培养下一次选择前的意识。
3 软实力很多时候比硬实力更容易获得肯定。很多人在校招后发现某些人技术不强,但是却能拿到好offer。现在这个社会,能力是很重要的,但是能力却不等同于技术。技术强不等同于综合能力强,并且无论应聘什么公司,面试你的都是人,这就意味着不会有绝对的公平和绝对的技术至上。面试也不过是跟人打交道而已。
4 谦虚一点,谨慎一点。少学牛客上一些人喜欢阴阳怪气,也少被别人的意见影响。无论是什么方向,算法也好,开发也好,测试也好,没有孰高孰低,自己喜欢,有清晰的职业规划,选择就不会很差。不要人云亦云,同阶级的人建立起来的鄙视链没有价值。
5 选择了就要坚持下去。成年人没有容易二字。
6 加油。
7 更多一手经验分享可添加微信公众号【业余码农】。