潍坊市论坛

注册

 

发新话题 回复该主题

一个ldquo普通人rdquo的 [复制链接]

1#
白癜风用什么药物 http://disease.39.net/yldt/bjzkbdfyy/6160465.html

大家好,今天分析一位朋友的秋招历程。

一直想写点东西总结一下自己的秋招历程,觉得在一定程度上应该能代表很多"「普通人」"的秋招经历。但是由于各种原因(主要是自己懒),从去年11月秋招大致结束,一直拖到现在都没有写。最近在好友的鼓励下,终于下定决心,克服懒散,提笔记录下这段艰难但也颇有意义的经历,希望能给师弟师妹们一些信心,同时少走一些弯路。另外题目中写"普通人"是因为自觉在各方面都不出彩,加引号是为了免去一些闲话,如果你看完全文还是觉得我有冒犯,那我在这里先道个歉。

先介绍下自己的背景:西北某本硕,方向为计算机视觉(CV),没有论文,没有实习,做过几个实验室和学校的项目,一个天池比赛前20。「最终拿到四个offer,美团、字节、小米、旷视,均为SP」。我相信一定有很多像我这样普普通通的人,感觉自己各方面都比较一般,没有比较好的论文、项目,比赛名次也不是特别高,编程也没那么牛,一边看着网上的各种算法岗劝退言论,一边心慌慌地纠结要不要继续找算法岗。我写这篇帖子的目的就是希望能给大家一些信心,如果你觉得自己做过一些相关的项目、比赛,有一定的基础,肯花时间好好准备找工作的相关事宜,那我建议你可以下决心了。

本篇心得分为三个部分,第一个部分是「秋招总结」,主要从心态、刷题、基础知识、论文/项目/比赛、简历等五个方面进行总结,并给出自己的一些建议;第二个部分是自己的「面经」,由于面经在一定程度上具有很大的偶然性,并不能完全代表一个人或一个厂的真实情况,只能作为参考,因此建议大家最好是多看一些;第三部分附上了自己在秋招过程中整理的「知识笔记」,以及一些小的建议。

秋招总结心态

秋招对大部分人来说都是一段非常难熬的经历,本身自己就已经是顶着很大的压力在求职,还要面对很多外界因素带来的影响,时常会给自己的心态带来非常大的波动。本来我在这一部分写了很大一段回忆自己遇到的一些搞心态的事情,但仔细想了想还是删了,以后有机会单独写一帖吐槽求职路上的奇葩经历,这里就写一些可能会影响到自己心态的方方面面,大家可以注意一下。

「面试被拒」:这应该是最常见的压力来源了,而且随着被拒的次数越来越多,压力也会成倍增加,对个人心态考验非常大。对我们这样的普通人来说,前期面试被拒再正常不过了,这时候一方面是要总结好失败的经验,另一方面也要寻找合理的宣泄途径,跟好朋友吐槽、打两把游戏等都是很有效的方法。

「周边环境」:我们一般都是和同届同学一起找工作,有些同学比较优秀,很快就拿到offer,这时候也有可能会对我们的心态有些影响。不过这是没有必要的,你直接去跟他取经就好了,能拿到offer大概率是有可取之处的,我当时就跟一个同学学到了很多东西。当然也不排除有些人拿到offer后在朋友圈装逼、散布焦虑情绪,这种我建议屏蔽或拉黑,同时也希望大家拿到offer后能低调一些,以己度人。

「网络言论」:每年在网上都会出现一个词来形容每年的算法岗状态,19年是"诸神*昏",20年是"灰飞烟灭",不知道今年会是什么。但无论怎么说,都改变不了大部分人最终拿到offer的事实。这种问题其实挺唬人的,四月起这么个问题,大家都刚开始找工作没啥经验,碰壁了就去吐槽,造成一种算法岗无望的景象。但如果你十一月问这么个问题,很多回答应该就成了如何通过不断投简历、面试最终上岸某家公司,其实我身边的同学、朋友大部分也都是9月之后拿到了"定稿"的offer,10月、11月的也多的是,所以大家一定要稳住,尽量不要受到这种言论的影响。

其实在秋招中感受到痛苦是一件再正常不过的事情,但我也不敢跟你说:"心态要好,不要在乎那些事情",虽然这是对的,但经历过那种压力和痛苦就会知道完全做到这样几乎是不可能的,就跟世界上没有圣人一样。我给大家的建议就是「首先要做好承受这一切的准备,秋招几乎不可能是一帆风顺的」;另外「当压力到来的时候,一方面要先做好总结,另一方面也要找到合理的宣泄方式」,不要让一次的失利影响你太久。恐惧、失落、时常进行的自我怀疑,这都是秋招中的常态。一边痛苦,一边反思,在秋招中这是提高自己最快的方法。

刷题

这是一个老生常谈的话题了,在互联网只要是技术岗,笔试面试都要撕题。我本人是从年2月中旬开始准备的,期间一共「刷了道题」,总体感觉下来能应对几乎所有的笔试、面试场景了,印象里面试过程中碰到的题目全都撕出来了,笔试大概能通过80%的样子。接下来会说一些自己的小心得。

首先声明,我没有参加过编程比赛,本科学过C,学过基础的数据结构和算法知识,读研之后大部分时间使用python,整个刷题和笔、面试也都是使用python完成,可以说在刷题方面也是一个非常普通的人。

如果你像我上面说的一样,对刷题需要的算法(排序、链表、二叉树、图、动态规划等)没有过一个系统的学习,那我强烈推荐你去看「左程云(左神)的算法课」,个人感觉左神的课在深度和广度上都能覆盖整个秋招的范围。首先,如果你没有很好的算法基础,左神的课能让你对算法建立一个系统的认识,对基础的算法有很好的理解;另外,左神也会做很多扩展性的算法介绍,这些你可能没听过,但是不要紧,至少之后你在LeetCode评论区看到的时候不会一脸懵逼,知道这是个什么东西,大概解决了什么问题,然后再慢慢研究。总之,左神的课非常长也非常良心,希望大家能坚持看完(基础班我记得接近30小时),你一定会大有收获。再次对左神表示respect!

有了基础之后,接下来就是刷题。我建议大家「先按照类别刷」,比如链表相关的做个十几道,有个比较深入的理解,然后再去做二叉树、排序等,这样按照大类做下来之后,你就不会对题目感到陌生和惶恐了,看到题之后知道这大概是个什么事。然后我「建议把《剑指offer》刷两遍」,剑指非常经典,LeetCode也有剑指专题,很方便。之后就比较随意了,可以先「把热题TOP刷一遍」,如果有时间也可以按照顺序再刷个两百道,感兴趣的话去参加周赛也挺好的(我没有参加过)。另外,牛客上也有大佬整理了每个公司出过的题目汇总,这也是不错的选择。对于出现频率非常高的题目,一定要多刷几遍,确保碰到就能秒了。

总之,在刷题这一块我一直有两个看法,一是如果你现在对秋招很迷茫很惶恐,不知道该准备些什么,那你就刷题去吧,至少这肯定是不会错的,另外就是在你有时间的基础上,刷的题目越多越好。根据我对周边同学的了解,最好是能刷到道以上的题目,这样在面试中底气也会更足。

基础知识

基础知识是考验基本功的,包括机器学习和深度学习里面的一些基础的问题。这部分可能会问的比较广,需要系统地学习和整理。

这里推荐两本书:「李航老师的《统计学习方法》和周志华老师的《机器学习》(西瓜书)」。建议大家可以先深入地读一下《统计学习方法》,李航老师写的非常精炼,也比较"好懂",碰到不懂的可以去看看西瓜书,两本配合食用效果更佳。知乎、博客上也有很多大佬们更通俗的解释,可以加深理解。《深度学习》(花书)也是非常好的一本书,但是太厚了,很难读完。建议当成工具书,碰到问题可以去专门的章节翻阅,可能会有意想不到的收获。在这个过程中最好准备一个笔记本,将公式的推导以及一些算法的流程和重点记录下来,能巩固记忆,查阅起来很方便,面试前也可以拿出来翻一翻。推荐大家用活页本,内容增添起来很方便。

「除了看书以外,总结和整理也是至关重要的」。有的问题你可能理解了,但是表达出来没那么专业,不够味。因此这部分我建议大家先去网上搜集一下面经,「把里面提到过的问题都整理出来,然后自己总结出一个合理的答案,形成文档」,以后碰到就这么回答就行了,这也就是网上有些人说的"八股文"。如果面试碰到了没有见过的问题,就把它加入到你的文档中去,确保以后碰到能够对答如流。我在后边也会把我整个秋招过程中碰到的比较常见的问题列出来,供大家参考。

总结一下,基础知识部分主要是学习+整理,当你的面试数量达到一定程度之后,这部分就几乎不是问题了。记住,一定要整理成文档,一定要整理成文档,一定要整理成文档!

论文/项目/比赛

这部分主要是个人的一些经历,是体现"个人价值"最重要的部分,也是简历上面试官着重会进行提问的。这部分因人而异差别很大,因此我只说一些小建议。

「论文」:首先强调一点,「没有论文也是可以上岸的,没有论文也是可以上岸的,没有论文也是可以上岸的」!我身边的同学,以及秋招中认识的朋友,很多也是没有论文的,但最后都能拿到比较满意的offer。不少人在论坛上说"没论文简历都过不了",这绝对是缺乏数据支撑的。简历没过很大程度上是因为简历写的不好,或者部门不匹配。前者需要好好地琢磨一下简历的逻辑、布局,后者的话就找准方向多投就行了,肯定会人有捞你的。如果有论文的话要想办法把自己论文的贡献点讲清楚,这部分我没有实践过,就不班门弄斧了。

「项目」:这一部分很多人有这样一种疑问:"我项目做的很弱,就做了这点东西都不好意思讲出来"。其实这是很正常的,永远记住,大部分人都是普通人,岗位很多,不可能只招天才。你做的再一般,那也是完成了一个项目,也有「项目背景、创新点、应用场景,也是能在某个场景下解决了某个问题」,这其实就够了。只要你真的对项目投入了精力,对其有比较好的理解,一定是有可取之处的,证明你解决问题的能力是很不错的。接下来你需要做的就是「如何把项目给面试官讲好」,这里我还是建议大家像写演讲稿一样把你要讲的东西整理成文档,不要只在大脑里凭空想,一定要写在文档里,先去找同学讲一遍,然后面试的时候发现某个地方讲的不够好,回来再继续改进,慢慢地就能将项目讲好了。记住,一定要自信!

比赛:这部分和项目比较类似,面试官比较感兴趣的是「你解决问题的思路、采用的方法以及相比其他参赛者的方法的优势」。和上述一样,最好是整理成文档,把比赛题目、算法设计思路、具体采用的方法以及最后和其他方法的对比和反思都写一下,面试的时候按照写好的逻辑来讲。比赛这里,优胜参赛者的解决方法也是比较重要的一点,面试中经常会问到,一定要去论坛把前几名的方法都大致看一遍,大致了解一下。

简历

简历是给面试官的第一印象,写一份好简历是求职过程中非常重要的开端。在这里也给大家几个小建议,大家写的时候可以注意一下。

「模板」:简历模板尽量简约一些,不要花里胡哨的那种。

「照片」:建议大家去比较专业的照相馆拍一组证件照,西服领带搞起来,这样看起来正式一些。

「项目介绍」:这部分是简历最重要的地方,一定要仔细琢磨,每句话的存在都要有意义,都要体现项目中最"精彩"的部分,切忌废话连篇。另外,每个点的介绍都要胸有成竹,确保面试官问起来的时候能够对答如流,配合第四条中整理的文档食用效果更佳。

「篇幅」:如果你的项目不是特别特别多,那么简历尽量不要超过一页。

面试经历

我大概是从五月底开始投简历的,从所记录的面经中挑了些比较有意义的供大家参考。同时我也给出了我对自己面试过程的总结,但不能代表所有人,大家尽量多看一看面经类分享,这个差异还是很大的。

美团

「一面」

自我介绍;项目介绍,上线、落地情况;介绍下LR,思想,LR里的最大似然是怎么回事;代码题:给出一个函数rand1,随机生成0和1,写一个函数randN,均匀生成0-N-1;代码题,计算根号N,精确到小数点后m位,二分法,梯度下降法。

「二面」

自我介绍计算机网络、操作系统学过没;多进程、多线程讲一下,内存占用方式,为什么线程是共享内存的;讲下项目,传统方法是怎么做的,有啥优点,是怎么部署的,几个人完成的,数据是怎么采集的,规模有多大;讲下比赛,几个人完成的,怎么分工的;有没有碰到过拟合,过拟合的标志是什么,怎么解决;L1正则化为什么能缓解过拟合;有没有发论文;包含百万、上亿特征的数据在深度学习中怎么处理;降维方法有哪些,PCA是怎么做的,还知道其他的吗;LR和神经网络有什么区别;代码题:字符串中长度为len的连续字串中,出现次数最多的字串;数学题:四个人过河,每次最多两人,有多少种过河方法。四人过河时间分别为1,2,5,10(分钟),问最快需要多久。AB,A回,CD,B回,AB,共17分钟。

「三面」

自我介绍比赛介绍,比赛的任务,前几名的团队都是怎么做的,你们的亮点在哪里;挑一个项目介绍;目前的offer;职业规划里最看重什么;反问。

「HR面」:(通过)

本科和研究生期间比较骄傲的一件事情,比较遗憾的事情;为什么没有选择深造;最近最有挫败感的事情;对美团的了解;职业规划,工作城市的选择;对自己不满意的地方;反问。

「总结」:美团的面试流程很紧凑,面试体验也非常好,点赞。

字节

「提前批一面」

自我介绍;问项目,检测里改进了哪些点,GAN是用来干什么的,怎么用的;方向相关的一些知识;其他相关论文里用到的一些方法;撕题:手写NMS。

「提前批二面」

自我介绍;介绍项目,面试官好像是做检测的,主要问了问检测的项目;检测任务有什么衡量指标(mAp),实现原理是什么;分类里用到的交叉熵公式是什么;讲了讲比赛里用到的一些点;pytorch里function和module有什么区别;pytorch里dataset、dataloader、sampler有什么区别;python里的生成器是什么;撕题:LeetCode4:两个有序数组的中位数;

(三面挂了,没有记录。之后又到了三面,又挂了,提前批结束,共六面。)

「正式批一面」:(挂)

自我介绍项目相关;生成对抗网络是怎么用的;CRNN的思想,CTC的思想,CTC中有没有训练参数;姿态估计相关项目;TCP/UDP的区别,计算机网络,分布式,数据库,多进程和多线程;概率题:在一个圆里随机取n个点,它们在同一个半圆的概率是多少?

「正式批一面」:(被捞)

自我介绍;先写个题,LeetCode33:搜索旋转排序数组;项目介绍;进程和线程的区别;逻辑回归的损失函数是什么,怎么得到的,为什么不能用MSE,sigmoid求导是什么;ResNet的设计理念,InceptionNet的设计理念;如何防止过拟合;BN层的作用,Dropout的作用。

「正式批二面」

L1和L2哪个能使参数分布趋于稀疏,为什么;特征选择的方式;连续特征离散化的好处;偏差和方差的理解;过拟合和欠拟合;BN和LN的区别;PCA的处理过程;栈空间和堆空间的区别;BP的过程,CNN中前向传播和后向传播的过程;代码题:LeetCode:复制带随机指针的链表代码题:LeetCode:二叉树的直径

「正式批三面」:(通过)

自我介绍;random7生成random10,调用次数的期望是多少,怎么算的;代码题:LeetCode.LRU缓存机制,并发式怎么处理,数据量特别大,需要进行分布式存储怎么处理;反问。

「总结」:在字节前前后后加起来面了四个部门,共十面,还是挺夸张的。前两次都是到了三面被刷,还是很受伤的,不过确实增加了很多面试经历,权当学习了,之后都还好。字节的话大家可以尽量面,如果能到二面、三面而且面评不是很差的话,会一直被捞的。

小米

「一面」

自我介绍;生成对抗网络在哪里用到的,起什么作用;损失函数是什么;知识蒸馏是怎么做的;FocalLoss的计算式;代码题:排序数组中某个值出现的次数。

「二面」:(通过)

自我介绍;讲一下项目中的难点以及是如何解决的;代码题:面试题01.07.旋转矩阵;对工作地点有什么想法;为什么没出去实习;反问。

「总结」:碰到的两个面试官都很好,沟通薪资的HR也很好,等了我好久,在这里表示感谢。

旷视

「一面」

自我介绍天池比赛项目;focalloss的设计,落地情况;相关方向算法介绍;crnn相关,gan相关;bn层的原理,要解决什么问题,还有什么norm方法;dropout原理,bn和dropout能不能一起用;代码:给定一个序列,求其连续子序列和大于某个值的最小长度。

「二面」

自我介绍;项目介绍;熟悉哪些检测网络,介绍一下思想;CTCLoss的动态规划求解过程;Softmax公式,溢出怎么处理;N个城市之间建一个仓库,使得距离所有城市的距离和最小;K个仓库呢;一个车辆围着圆圈跑,有一分钟每圈和两分钟每圈两种状态,在P点有30%的概率进行状态切换,问无数圈之后在P点等到车的时间的期望;

「三面」(线下面的,当时忘了记录,只能记住一点点了):

相关方向的学习历程;降低网络复杂度但不影响精度的方法;反问;

「HR面」(同上):

意向城市;意向部门;

「总结」:方向很相关,面试体验挺好的。

腾讯

「一面」:(挂)

自我介绍项目的应用范围BN的原理,要解决的问题,公式,训练测试中的区别卷积层和BN的融合知道吗?如果让模型速度提高一倍,有什么解决方案?代码:数组中第K大的数。Partation的时间复杂度

「总结」:一面就挂了,没啥好总结的。

大华

「一面」

部门介绍YOLOV3和YOLOV2的主要区别,loss上哪里不同,smoothL1loss的好处,Yolo里是向上取整还是向下取整meanpooling和maxpooling反向传播的不同LSTM的反向传播,公式Pytorch中bn层在训练和测试中有什么不同,怎么实现的可分离卷积的思想,参数量计算Pix2pix和cycleGan的区别

「二面」

浮点数的二进制存储方式;如何将浮点数的每一位二进制打印出来;方差和协方差的理解;伯努利分布和二项分布的区别;FFT和DFT的区别;数字图像处理中,卷积(convolution)和互相关(cross-correlation)的关系;Python中类方法和静态方法的区别;Linux下查看内存占用(top),buffers和cache的区别;

「总结」:一面面试官问的非常非常细节,有些没能回答上来。二面问的大部分都和方向不太相关,也没有特别准备,挂了也是情理之中。

商汤

「一面」

自我介绍;项目介绍,蒸馏方法是怎么用的;对我们的开源项目提意见;FocalLoss解释;凸函数的性质;如何评价两个分布的相似度,KL散度怎么计算;Auto-Encoder是什么,都用在什么任务上;Distribute用过没,优点是啥。

「二面」

自我介绍;介绍下项目中检测相关的部分;检测里为什么选择refineDet;Conv和BN融合后点数掉的太多怎么办;Anchor-free的优势在哪里;Focalloss在什么情况下有用,什么情况下不起作用;实现sigmoid函数,怎么防止溢出,误差分析。

「总结」:二面问的非常细节非常专业,没顶住。

海康

「一面」

自我介绍;项目介绍,数据集是怎么选择的,图像大小大是多少;比赛介绍;快排思想,最差时间复杂度;反问。

「二面」

自我介绍;代码题:IOU计算;代码题:LeetCode.买卖股票的最佳时机III项目介绍;FasterRCNN和SSD的区别;FocalLoss的使用场景;反问。

「总结」:一面电话面,项目很相关,聊挺多的,面试官人也很好。二面是视频面,两道代码题都是在纸上写的(真手撕)。可能HR面的时候薪资要太高了,就没后续了。不过当时已经有几个offer了,就没太在意。

知识总结基础知识整理

想了一下还是决定不贴"答案",一方面所谓"答案"都是通过个人理解整理而得,只有一些小tips,并不适合所有人,更有可能引起歧义;另一方面大家自己整理一遍也能对问题有更好的理解。

如何解决过拟合;L1和L2的区别;梯度消失和梯度爆炸的原因;什么是Dropout,训练和测试的区别;Batchnorm层的作用及公式;为什么LR要用Sigmoid函数;relu6函数的好处;smoothL1损失函数的好处;Yolo2和3的区别;Pytorch中bn层在训练和测试中有什么不同,怎么实现的;双线性差值的操作过程;bn和dropout同时使用产生的问题;BN+CONV融合公式及作用;BN的反向传播;深度学习中的几种归一化方法及不同(BN、LN、IN、GN)LSTM公式及反向传播过程;感受野的定义;分布式学习;SVM的介绍和推导;衡量分布之间差异的指标;ROC曲线和AUC。数学题整理扔硬币,扔到正反都出现过停止,次数的期望;扑克牌放回取牌,A-K加大小王全部都拿到后停,次数的期望;每个人给A投票的概率是0.51,给B投的概率是0.49,问一亿人投票时A获选的概率;斗地主有人拿到2张王的概率在;k个满足独立同分布的均匀随机变量的最小值的期望;一个骰子平均扔多少回才能把六个数字都扔出来至少一次;用一个骰子生成1到7的随机数。其他一些小tips内推一定要找「靠谱的人」,不要随便找一个内推码就填上了;投递的时候要先了解下「部门的HC」,HC的数量在很大程度上决定了你的求职难度,可以多考虑下扩招的部门;综合考量多方面的信息来源,不要根据某一篇文章中的信息做决定,包括本文;「简历一定要多投」;进入八、九月份你会非常非常忙碌,最好通过日历记录下每天的笔、面试日程,windows自带的日历就很好用;多加些群,可以得到很多信息,但要注意甄别;自我介绍也写成文档,反问环节也可以提前准备;多在牛客网这类平台上刷面经;拿到一个offer之后一定不能停止秋招,「一个offer的风险非常大」。写在最后

算法岗的秋招并不是洪水猛兽,也不是只有少数人才能得到的岗位,只要你有「一定的项目基础,有坚定的信心和踏实的努力,并且能坚持到秋招的最后时刻,一定可以拿到满意的offer」。道路是曲折的,前途是光明的,师弟师妹们冲鸭!

预览时标签不可点收录于话题#个上一篇下一篇
分享 转发
TOP
发新话题 回复该主题