失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 【校招总结】接受社会的毒打 收获腾讯天美 字节跳动 网易互娱 华为等offer(开发岗)

【校招总结】接受社会的毒打 收获腾讯天美 字节跳动 网易互娱 华为等offer(开发岗)

时间:2022-11-25 21:42:51

相关推荐

【校招总结】接受社会的毒打 收获腾讯天美 字节跳动 网易互娱 华为等offer(开发岗)

文章目录

0.背景介绍1.时间节点2.关于暑期实习3.关于刷题及看书学习4.关于测评5.关于笔试6.关于面试7.关于岗位选择

0.背景介绍

回忆起下决心转行,已经快一年的时间了,当然,如果只是想法的话,很多年前就开始了。

简单介绍一些我的情况,我本硕都是某985高校的,非科班,研究生期间接触一些编程相关的项目,除此之外,很多经历可能都和程序员扯不上关系。

今年校招,我收获了一些不错的offer,都是一些软件开发岗

想总结一下自己的经历,希望能帮助那些今后参与开发岗校招的同学。

1.时间节点

我其实开始准备的时间也不早,大概在今年的1月左右有想法,真正实施也是在开学之后的2、3月份。

早一些准备早好。

·

······3 - 5月······

3月开始陆陆续续有很多大厂开始放出暑期实习的信息,这时候可以准备投递,建议这时候开始收集一些公司的招聘公众号和信息网站。之后各种笔试面试,被毒打之后记得查漏补缺。

·

······6 - 7月······

有实习的话,就好好去实习,没实习的话,就好好刷题看书准备秋招。

·

······8 - 9月······

很多互联网公司提前批很早,如果你还在实习就会发现比较被动,不实习的同学就应该看情况投递了,有内推当然好,没有的话就像我一样,全部硬刚笔试。初期可以多投一些公司,笔试做多了,面得多了,手感和节奏就出来了。

·

······10月······

基本上到10月该有的offer都有了,很多开始签三方了。如果这时候还没有offer的话,可以考虑一些比较晚的企业了,比如银行国企和传统行业。

2.关于暑期实习

我说一下我对暑期实习的看法。

暑期实习的优点:可以争取留用机会,并且秋招的时候简历能更出彩一些,面试的时候也多一些谈资。

暑期实习的缺点:如果无法留用的话,秋招实际的作用可能不会很大,而且由于实习时间的问题,很可能会缩短你秋招复习准备的时间,让秋招初期很被动。而且有些公司暑期实习很坑,这个可以自行了解。

·

暑期实习不是必须的,很多同学可能有各种原因没办法参加暑期实习,其实不去也影响不大。

但是,暑期实习的面试我是强烈建议参加的,因为暑期实习的面试可以作为秋招面试的试水,他们的流程其实差不多的。而且你参加几次被毒打之后,就会明白校招的一些主要考查内容,就会发现自己的很多薄弱方面,然后有针对性地学习。

·

PS:1、你一开始如果真的很菜或者只是想试水,别投太多以后你秋招想去的公司。我当时投暑期实习就是一开始很菜,去投了阿里,面了两回直接被回绝了,不知道是不是因为太菜的缘故有可能进了黑名单,然后我秋招投了之后就没有一点消息了。

2、如果真不打算去某些公司实习,一定要及时拒绝offer。我当时就是得了海康的实习,但是后来没去,估计很可能进了黑名单,秋招再投之后也没了消息。

3、如果你实习完了,千万不要相信任何领导的口头offer,即使他把你吹上天了,没有书面的offer都不稳,还是要认真准备秋招,这个在牛客网上不知道看到多少同学血的教训了。

3.关于刷题及看书学习

刷题我主要是两个渠道,一个是LeetCode,一个是牛客网,这两个渠道的题目我总结有以下特点:

(1)LeetCode:简单题目更偏向于基础,可以用来熟悉数据结构和操作;中等和困难的题目很多都有技巧,要多看评论区大佬的方法,可以拓宽思维。LeetCode的题目,其实大多数比较适合面试的时候问,刷这个主要还是为了应付面试,如果是为了应付笔试,还是建议刷牛客网。

(2)牛客网:牛客网上面有很多往年的各个厂的真题,其实刷这些题目才会比较适合应付笔试。笔试的题目和LeetCode上的题目很大的区别就是很多是实际的应用题目,有些涉及业务技巧,所以还是刷真题比较有帮助。

·

看书的话,需要从几个方面来考虑:

(1)初期学习。大多数人早期都是从编程语言开始学习的,像我一开始学习c++,会去网上看那些视频课程,B站很多,推荐上面的《清华大学C++课程》(一定要找完整版),然后就是《C++ Primer Plus》那本书我看了很多遍。

其实第一遍学习语言,不管是第一遍看书还是第一遍看视频课程,很多东西都感觉一知半解,在学习和使用一段时间之后,一定要回过头来再看一遍,会发现很多问题迎刃而解。

感觉本科时候上的课程其实根本就只学了皮毛,面向对象都没搞清楚,c++的什么继承和多态,完全是后面才明白,所以不要光看那些教材。还有就是c++学好了,其他语言上手很快的,python简单就不说了,特别是java,你会发现和c++就是同一个语系的。

(2)巩固基础。先不说科班那些上过课的人,对于非科班的,真的非常需要找些时间把计算机的本科课本拿来看一遍,比如数据结构,操作系统,计算机网络,软件工程和数据库。这几个不要求你全记得,但是过一遍有个印象,熟悉里面一些常用的知识点,对于你后面面试的时候复习和看面经很有帮助。其实非科班和科班很大部分的区别就在于此,编程可能你我都会,但是一问基础就会发现你没上过课的人很吃亏,所以这部分需要花很大的时间来学习。

(3)面试准备。我面试前买了很多面试宝典,里面其实总结得很多错。有些甚至封面的广告语“本书覆盖了近3年程序员面试笔试中超过98%的高频知识点,当你细细品读完本书后,各类企业offer将任由你挑选”。吹得很牛逼,但是实际上真的有那么牛逼吗?然后这本书我反复看了很多遍,基本上每次重要面试前我都会翻一翻。说实话,里面的知识点总结得很全面,涵盖了编程语言基础,操作系统,数据结构,数据库等等等等,但是,所有的知识点其实都说得很浅,只是提到一些基本概念而已。即使熟读之后,你最多也只是能通过一些小厂的面试,大厂面试基本上一往深了问你就跪。

但是这些书还有必要买吗?有必要。

其实早期复习真的需要买几本这种面试宝典看看,他可以作为一个复习大纲,让你大概知道整个知识体系有一些什么东西,然后剩下的就是你自己不断深挖补充。我的方法就是,上网看很多人的面经,看看他们面试的时候都问了一些什么问题,然后去网上搜这些知识点,然后不断补充。

最后,有一本叫《剑指offer》的,基本上很多人都会推荐,说实话现在上面的题目都问烂了,很多已经开始不问了,但是看过一遍之后真的对你的解题思维和学习有很大的帮助。

4.关于测评

刚开始投简历那一阵,各家公司都要求做一个测评,而且我发现大多数都是用的同一个系统,里面的题型基本上就4种:

(1)阅读理解:基本上都是给一段文字,让你分析总结里面说了啥,或者哪些观点符不符合之类的,难度不大,问题就是每一题时间有限,像我这种阅读速度慢的人就比较吃亏。

(2)图表分析:因为每一题时间很短,这种题第一眼不要去看图表,先去看问题问什么,然后再去图表里面找答案,大多数是口算就能算出来的,还有一些可以一眼晃过去估算一下结果。

(3)图形规律:这类题其实是我感觉比较好的,很多也有套路,让你通过几个图形的规律,找出空缺的图形应该是什么,很多都是数量的递增关系,颜色的黑白关系,还有旋转的关系,应该还比较好认出来。

(4)空间想象:这类题有些公司的测评里面没有,然后这个题型对于我真的比较简单,就是一些三视图啊,空间转换,立体图像表面展开之类的。本身机械出生的,三维建模做了很多,个人的空间想象力很强,所以基本上都没什么大问题。

·

另外就是性格测试,大多数题量都比较大,而且很多做到后面会重复前面的题目,尽量两次选择差别不要太大了,基本上别选得很偏激我觉得问题都不大。但是听说像华为那种的性格测试要注意一下,听说会挂人,虽然我当时是直接通过了,但是以防万一,做之前最好去做点功课,网上有很多华为性格测试注意事项的。

5.关于笔试

选择题:

选择题真的什么类型的都有,主要就看你基础知识掌握得如何了,这部分要看的东西其实很多。另外就是有一些数学题和智力题,这类题记住一定要把握好时间,别耗太久,注意留足够的时间给后面的编程大题。

·

编程题:

基本上国内互联网企业校招用的都是牛客网赛码网的oj系统,这个事先可以先去熟悉一下,不过好在大多数都是允许本地IDE调试后再上传的,问题也不大。还有一些,比如中兴和银联等,就用一些其他的系统,不过实际体验影响也不大。

编程题真的很看手感和状态的,就像打游戏一样,每一场的发挥都很难说。记得当时腾讯笔试的时候,我那套卷子是5个编程题,那天状态特别好,5题A了4.8题左右,其中4题100%全通过。但有时候可能因为哪些地方的小错误和想法上缺漏,半天A不过,反复调试的过程比编写的过程耗时更多,最后也没做出几题。

一开始做编程题可能不太熟悉,速度提不上来,但是做多了之后就会掌握套路,熟悉节奏。

·

校招笔试的编程题和leetcode上面不太一样,需要写出完整的程序,包括输入输出,这一块事先要熟悉一下。题目的话,一般都是假设一个场景和需求,让你实现对应的输入输出。

我总结了其中几种常见的题型

(1)操作题:这类题大多数是给你一个规则,让你操作一些字符串或者数字。字符串操作基本上都相对比较简单,不需要太多的想法。数字的话很多也类似字符串的操作,还有就是一些进制的操作和位运算之类的。

(2)动态规划题:这类题只要你发现了规律,基本上就可以很容易推出来。主要就是假设各个阶段的状态,然后不断推出下个阶段的状态。常见的例如背包问题,最长子串之类的……总之就是可以用前面的结果推出后面的结果的大多数都可以考虑动规方法。

(3)广搜和深搜题:基本上看到有类似棋盘和地图的题目,基本上都是广搜和深搜,套路都一样,只是题目可能设置很多条件,比如有些位置不能走啊,必须从高位到低位呀,但是套路都一样的,一波搜索之后基本上就可以得到结果了。

(4)树图操作题:一般笔试题很少像leetcode上面的链表操作的,大多数都是树和图的操作,这个事先要熟悉一下,感觉很多也是广搜,主要就是要熟悉各种树的遍历操作。

·

还有一些我常用的技巧

(1)其实这些编程题我都比较建议用C++来做,貌似开销小一些有时候会比较好通过。因为OJ系统会限制内存和时间的开销,虽然其他语言会多给一些时间和内存,但是貌似还是C++比较有优势。记得当时做B站的题目的时候,题目很简单,2个小时的题目我1小时做完了,最难的第3题就是一个背包问题,然后去牛客网上看到有人说第三题限制只用C++,他们看了之后直接退出考试,我就笑笑不说话。虽然当时笔试做得很好,可是后来B站也没给我面试啊,难道不招人了?(:з」∠)

(2)编程题可以先扫一遍题目,建议先从比较擅长和简单的题做起。一开始写完A不过很正常,稍微检查调试一下,检查边界,单步测试,设置断点,监控局部变量……如果一顿操作之后还是有问题,别耗太久,先做其他题目,因为通常调试比编写代码的耗时长很多。

(3)有些题目,比如结果需要你输出A或B,true或false这种两个答案的,在你时间快不够的情况下,可以取巧直接全部输出一个答案,然后选得分最高的那个,多数情况还能得半数以上的分。但是我记得有些公司出题会实现让你输入一个t,就是一组一组的样例,里面有不同的两种答案,这种取巧的方法就没法用了。

(4)有些题目你一开始就输出一些临界条件的结果,在时间不足的情况下分数能拿一点算一点,运气好的话说不定还能拿不少。但这终归是笔试取巧的方法,想要得到好成绩就别这样浪费时间,但如果只是想混过笔试的可以考虑。

(5)很多题目一开始都是想着暴力的方法解决,但是多数情况时间和内存都会爆。如果非要去想最优解的话,很多时候时间不够。很多次我发现,只要在暴力解法的基础上,稍微加一些优化,就可以通过,这其中的优化方法例如:采用一些二分的方式,在一些循环的地方加上一些判断让它提前结束等等。

(6)有些题目的结果其实是有规律的,你不必按着规则去求解,可以先试着拿一些输入来找输出的规律。记得之前碰到过一个兔子生兔子的问题,我试着写了一下,发现其实输出就是一个斐波那契数列,然后直接一个递推搞定。还记得之前有一个正方体按边的整数切最多方块的问题,我记得也是写下几种情况之后就会发现规律,直接一个循环就搞定结果。

(7)对于我经常会犯的错误有几个,漏边界条件,漏筛选条件,循环结束的最后一次结果没有加入到输出中,“= =”写成“=”(这个问题建议把右值写左边,变量写在右边,例如:0==x,‘A’==ch)……总之还是要细心。

·

PS:(1)9月份秋招笔试很集中,经常会有时间冲突的情况,能调整的就调整,不能调整的就果断放弃一些,千万别骚操作。记得有一次米哈游和网易的笔试冲突了,但是米哈游比网易早1个小时,我当时就想骚操作用1个小时时间尽量写米哈游2个小时的题目,实在不行就从网易那匀点时间过去,结果后来骚操作翻车,没通过还不说,耽误了网易笔试的时间,还好后来网易的过了。

(2)早期我选择投递了很多公司,笔试一开始也很菜,后来慢慢试水之后就熟悉了,手感就起来了。如果中途你得到了比较好的offer,可能很多后面的公司你都会选择放弃,但只要后面还有笔试面试打算的话,我建议面试可以不去,耽误彼此的时间,但是笔试有空可以写写的,可以保持手感。

6.关于面试

面试一开始我也比较菜,特别是暑期实习面试那阵,突然一个电话面试过来问得我一塌糊涂。但是真的面了很多次之后,你就开始明白自己应该复习哪些内容,然后一次一次地毒打之后,你就会掌握套路和节奏,过不过就看你当时的状态和发挥了。

一般来说技术岗的面试都是单面的,只有当时面银联的时候,居然有神奇的群面。面试官有可能只有1位,也可能有多位,只要不慌就行。通常来说电话面试也有,视频面试也有,现场面试也有,时间基本上都在半个小时到一个小时。如果时间很短,估计多半凉了;如果时间很长,那可能你比较吊。我是比较喜欢现场面的,更有感觉,电话面和视频面有时候效果不是很好,一定要找个信号好的地方。

面试的内容其实完全取决于面试官,虽然内容很杂,面很广,但是我发现还是有一定规律可循的。

面试官问的内容,基本上以下几个方面:

这里我只举一些简单和典型的例子,实际面试会拓展很多,内容太多,可以参考网上各类面经

(0)项目经历:这里毕竟是校招,你有很出彩的项目经历固然是好事,没有的话也不要紧,不过尽量多多少少也准备一些。对于非科班转行的,很多可能担心没有项目经历怎么办?从我面了那么多场面试来看,项目经历从来都只是面试官用来热场的,除非很出色,其余大多数对你之后的面试帮助不会太大,你只要基础知识掌握得好,编程能力强,后面都是有机会的。

(1)编程语言:首先肯定与你的岗位有关,比如C++的话就喜欢问继承多态、静态类和成员及方法、虚函数、STL和智能指针等,java就喜欢问继承接口、synchronize、容器、JVM和各种框架等等……这一部分的问题一般在一面里问得多,而且通常占用了大部分的面试时间。具体的内容要多看网上的面经和总结,或者好好把语言书看一遍(注意不是那种速成的书),像C++这种你要了解深一些,去看STL源码之类的。可能平时项目和编程中不怎么用到的方法,都有可能考,所以不是说自己编程经验丰富就没问题的。

(2)数据结构:最基本的数组和链表,喜欢问你各种操作,然后再往后栈堆、队列、哈希表、各种树,二叉树、红黑树、B树、B+树……各种数据结构的使用场景和理由,例如为什么treemap用红黑树而不用AVL,为什么文件管理用B树而数据库用B+树……还有一些神奇的操作,比如基础的有链表反转、栈模拟队列、哈希表的冲突解决和扩容、二叉树非递归遍历等等……

(3)操作系统:最经典就是先问你进程和线程的区别,然后线程同步、线程安全、进程通信、CPU调度……之后不断展开,再结合你的编程语言问你具体的操作。另外还会问你一些内存管理问题,C++和java里面堆栈和内存空间的分配、内存泄漏、虚拟内存等等。

(4)计算机网络:最经典就是TCP三次握手四次挥手,TCP和UDP的区别,这些你光答出来没用,大家都会,之后还能拓展很多,比如序列号、拥塞丢包、为什么等待2msl等等。后面还有TCP/IP结构,问你很多传输层和应用层的东西,socket、HTTP、HTTPS,对称加密,然后输入一个HTTP会产生哪些过程等等……还有一些面试官喜欢问你具体的操作,比如java或者c++中具体怎么实现的。

(5)数据库:数据库其实是我掌握最差的,就只懂一些事务、SQL操作、内连接外连接这些最基础的,基本上再问我就是跪,只能说技术栈不契合吧[滑稽]。

(6)设计模式:设计模式有很多,20几种,不用全记住,首先常用的单例模式、几个工厂模式这种,然后什么适配器模式、观察者模式……都了解了解,主要是要知道这个设计模式是什么原理,有什么用,应用场合是什么,要能举例。

(7)基础算法:这个最基本的就是问你查找算法和排序算法,什么二分查找、冒泡、插入、快排、堆排……这些最基本的都要知道怎么个原理,时间复杂度和空间复杂度,有哪些应用场合。最好是都能熟练手写出来,特别是快排,让你手写的概率很高。

(9)手撕代码:这个是最麻烦的,简单的可能让你写前面提到的基础算法,或者一些数据结构的操作,难的话真不知道会怎么出,而且有些实际上是业务题。面试中的编程题很多是《剑指offer》和leetcode上的,之前刷题就派上用场了。不过有些情况还是会碰到自己没有遇到过的题目,或者做过也忘了的,就看当时的状态和手感了。如果只是电话面试,一般来说编程题只是让你说思路就可以了,但如果是视频面试和现场面试,多半是需要你现场写出来的,有些人习惯写伪代码,可以事先问一下面试官,这样可以提高效率。

·

PS:(1)很多次面试完,可能由于表现太差了,怀疑人生,也可能莫名其妙被挂了,也开始怀疑人生,然后就会郁闷很久。但是我想说,其实面试最后通过与否,有很多因素的,有时候是玄学,看点运气。面完之后一定要心态端正,好好准备下一场,像我就做得不好,经常面完之后晚上睡不着,后悔哪里哪里当时又没表现好,有些事过去就过去了,没必要纠结。

(2)虽然大多数的公司都免不了上面提到的常规问题,但其实很多公司不同岗位面试风格差别挺大的。记得我当时面字节,我发现那边更喜欢问一些比较偏的知识点,然后喜欢考查你的编程能力。还有当时面腾讯天美的时候,可能由于做游戏的原因,问了很多实际应用的编程题,比如判断麻将胡牌啊,红白牌排列组合等,同样地,网易互娱的二面也是,估计做游戏的都喜欢考查这类编程题。

(3)很多时候,不要觉得看完原理,懂了就会写。记得我秋招的第一场面试是远景智能,当时面试官让我写一个堆排,原理是懂,但是写起来就发现各种问题,最后一塌糊涂面试官都看不下去了,“小伙子啊,感觉你没怎么看书呀,回去等消息吧”。。。。

(4)平时可以多锻炼一下自己在嘈杂环境中手撕代码的能力,比如室友在打游戏很猛的时候,去练练手写代码。记得很多场面试都是在一个大厅里面进行的,里面有很多面试官和同学在面试,你手撕代码的时候,周围环境很嘈杂,很容易分神,有几次我就明显被旁边的同学干扰了,所以要事先练习一下。

(5)项目经历一定要自己搞清楚,很多面试官喜欢花大把的时间问你项目中的各个要点,即使他不懂,也会各种问,一定要事先搞清楚自己做的是什么,写在简历上的各种细节都要扣清楚。

(6)面安卓这种比较偏应用的岗位,可能就会对一些实际操作问得很具体。记得当时面阅文的安卓岗的时候,面试官就问了我很多安卓的控件,我其实就只记得一些比较常规的,好多都没怎么听过,直接跪了。所以最好还是选择自己比较擅长的领域,不然面试很吃亏。

(7)现场手撕代码的时候,很多时候你会被面试官要求更优的解法,时间复杂度和空间复杂度上进行优化,这时候让你leetcode看看别人的最优解的优势就出来了,只不过很多时候可能你现场很难马上想到。记得当时面百度一面的时候,面试官出了一题让我从输入亿级的数据中找出99分位的数据,当时我写了一个维护小堆排的方法,时间复杂度O(klogn)。面试官看了之后觉得这方法也行,但让我想想有没有更优的方法,我说用快排的方式分片也能缩小到99分位,他觉得这些时间复杂度还是太高,而且事先要知道n的大小。最后没想出来,临走的时候他和我说让我去了解一下计数排序,估计是想输入的时候就分好吧。。。不懂,反正最后挂了。

(8)其实面试过程中答不出来很正常,如果长时间没有思路,不要紧张,可以在稿纸上写一写,会让自己更加冷静,比坐在那空想要好。有时候会遇到比较好的面试官,会主动打破尴尬,给你一些提示,通常是非常有用的。你也可以在有一些思路的时候,主动和面试官说一下自己在哪个部分遇到了苦难,有些比较好的面试官也会给你一些提示的。

(9)其实面试的时候最忌讳的就是不懂装懂。。。有时候真的遇到不懂或者不清楚的,直接说不清楚就行了,不然接着答下去很可能自己变得语无伦次,场面也会一度尴尬。。。而且直接说不清楚的话,还能让面试官多问一些其他问题,指不定就遇到自己比较有把握的呢,这样短暂的面试就可以有更多的表现机会了。

·

校招和社招其实是有很大区别的,校招都是应届生,主要还是考查你基础知识的掌握程度,还有编程能力。不像社招,会问你很多具体的项目经历以及考查岗位的契合程度。

·

整个秋招下来,最直观的感受就是互联网企业面试较难,问题的深度广度都是。然后国企或者传统企业的的面试相对简单很多,当然多数情况薪资也少[doge]。

7.关于岗位选择

我本人比较擅长C++,也熟悉一些java和Android,所以基本上工作都是C++开发和安卓移动端开发相关的。但是我这样其实算两路双开,很多时候安卓和C++交错着面会很难受。所以你认准了java后端就java后端,认准了web开发就web开发,主攻一个方向,别患得患失全都想要。。。

因为我也做过一些深度学习相关的东西,懂一些python,但是我发现面了那么多开发岗,python其实是最没用的。。。对于大多数开发岗位,我觉得还是java的需求量最大,老老实实学java混口饭吃没问题。如果因为在学校python用得多非要python的话,那估计你就要选择困难模式的算法岗了。

关于开发和算法,记得很多面试官问我,你不是做视觉项目的吗,怎么不考虑那边的CV算法岗?…还好我最后选择主攻软开,算法今年真的爆炸,狼多肉少,除了运气好的,进去的都是真·大佬。

其实我也劝大多数非科班转行的,如果不是所在的课题组很牛,做的项目也很牛,不要以为用了点深度学习,发了点小文章就可以去面大厂算法岗了,那边是真的残酷。所以对于大多数人,我还是建议脚踏实地做开发。

而且如果确实你决心做算法的,我其实也建议基础和编程不要舍弃,这方面同样也要考查的。

·

我最后收获的offer有:

网易互娱:游戏研发工程师,上海新研发基地。

中兴:软件开发类,具体岗位和薪资没谈,直接拒了。

华为:消费者BG终端,软件开发工程师,上海研究所。

字节跳动:国际化业务,客户端开发,上海。

腾讯:天美工作室,游戏客户端开发,上海。

…有很多原因,最终我签了华为。

·

---------------------------------------------------------------------------------------------------------------------

很多事情,经历过的人才最清楚,以上内容全部手敲,真实经历, 如有错误,欢迎指正!

---------------------------------------------------------------------------------------------------------------------

最后,

致敬每一位在校招中努力追梦的少年!

如果觉得《【校招总结】接受社会的毒打 收获腾讯天美 字节跳动 网易互娱 华为等offer(开发岗)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。