大家好,我是Y哥。秋招基本结束了,整个秋招对我帮助最大的就是前段时间在百度的实习,自己打算总结一下,希望可以对找工作的同学有帮助。
找实习的准备
- leetcode高频最少200道,我自己是刷的codetop,我的建议是先按照专题刷点题找找感觉和套路(按照专题刷的话推荐一个公众号,代码随想录),后面接近面试了就可以刷codetop高频题,实习的时候我基本就是刷前100,并且是反复刷。如果不着急找实习的可以学习一下Acwing上的算法基础课。
- 竞赛/项目,总结+包装。把自己之前做过的所有项目或者竞赛都好好总结,梳理一下项目的背景,项目的基本问题、难点有哪些,数据大概什么样子。自己针对这些问题的解决方案是什么,效果怎么样,为什么会这样,最后如果还有时间自己会怎么继续提高。(我在找实习的时候把每个项目都重新用文档梳理了一遍,每次面试前都看一遍)。说到项目或者竞赛,其实还有一点,就是如何包装的问题。建议多看看竞赛的top方案总结,他们其实就是很好的模板(尽可能找和自己做的比赛相关的竞赛的方案)。
- 面经整理。面试之前针对自己的岗位整理一点面经,主要是针对面经的问题整理自己能理解的答案,提前整理面经不仅可以用于找实习,在后面秋招的时候也可以直接拿来背。整理面经之前建议先把西瓜书+南瓜书或者统计学习方法先过一遍。
- 部门内推。找实习的时候最好找到认识的人直推到部门,因为实习不仅要考虑面试的难度,还需要考虑实习的具体内容,转正率之类的,如果能找到熟人内推,可以提前去了解这些事情,比直接在官网投要靠谱一点。
没有竞赛或者项目可以找实习么?
可以大胆的去找实习,实习的门槛相对秋招简单多了,不要因为自己没有什么竞赛/项目就一直拖着不找实习,而应该大胆的去找。对于没有项目或者竞赛的同学,可以去阿里天池或者其他的平台做一些教程比较完善的入门赛,然后好好包装一下(参考开源的top方案)写到简历里面。此外简历如果仍然比较空,可以写一些与岗位匹配的一些技能也写上去。最后对于写上去的东西自己一定要非常的熟悉才行。
实习offer选择
当自己有多个offer的时候就需要进行选择,我觉得对于快参加秋招的同学,实习offer的选择更要慎重,需要考虑转正率(并不是说你不想待在那边就不考虑转正了,我觉得更重要的是让其他公司知道你有能力转正),实习具体做的事情大概是什么。如果能够提前认识mentor可以更进一步了解具体的情况。我自己就是提前认识的mentor(一面面试官),下面是今年听说的一些坑
- 阿里、腾讯的实习生普遍转正率低,主要实习生太多了,实习生不仅自己要跟自己卷还得跟同组的其他实习生一起卷
- 实习内容纯打杂。听说某厂的算法实习生就是纯sql boy,如果纯打杂的话,后面秋招帮助其实不是很大,当然如果遇到这种情况也可以先争取转正用来保底。在自己选择比较多的时候就需要避坑了
实习总结
首先作为实习生,我觉得不管咱们能力怎么样,首先就是要勤奋,毕竟实习的时间并不长,得好好珍惜实习的时间多学点东西。所以我大部分时间都是组里去的比较早走的比较晚的。
下面是实习期间的一些总结,其中很多习惯其实是可以在学校慢慢养成的,希望可以对刚去实习或者准备去实习的同学有点帮助。
工作习惯
- 严谨、细心。在写代码或者考虑问题的时候尽可能考虑严谨、全面一点,可能花的时间稍微多一点,但是不容易出错
- 多沟通。做事情有问题一定要及时反馈,提升开发效率
- 做对事。做事情前,一定要提前对好要做的事情,以免理解错了需求,花了时间做了错事
- 定期检查邮件。每天早中晚检查一遍自己的邮件,防止忽略重要的邮件,以及检查一下报警,看是否是哪里出问题了,需不需要及时进行解决。
- 尽可能保证充足的睡眠,不然很容易导致即使做的事情没有前一天多还会一天比一天累,还可以每天早上花一点时间锻炼身体。稍微活动一下一天都会比较精神,中午一定要留一点时间午休,为了下午以及晚上高质量的工作
- 工作中经常会遇到很多问题,有些时候可能是一个问题花了很长的时间还没有解决,导致事情无法按照自己的预期完成, 这种情况在工作中应该会经常遇到,首先需要调整自己的心态,在花了一定的时间还无法解决的事情,可以先找同事看看,看是否之前遇到过相同的事情。如果最后仍然没有办法解决,自己还是需要沉下心来,一点点的排查问题,做好排查记录。
任务安排
- 定好事情优先级。每天的任务数量可能会有多个,但是一定要明确好优先级,尽可能不要将任务并行,而是挨个任务去完成(当然对于一些明显的可以并行的事情也可以一起搞)
- 设定一个预期完成时间。每个任务自己一定要提前想好完成任务的预期时间,如果在预期时间无法完成也需要及时进行反馈
- 提前做好计划。每天上班之前提前规划好当天需要做的事情
工程习惯
- 本地例行的代码和开发或调试的代码分开,保证线上的代码是最新的并且不能轻易被改动的。线上代码只有git pull操作,千万不要操作线上代码
- 调试代码时,写的测试数据一定要考虑的全面一点,尽可能将所有情况都考虑进去。
- 代码的异常的监控环节一个都不能漏掉,因为很有可能会为后续埋雷
- git分支开发。尽可能使用分支开发,不容易出错,多个分支开发如果当前分支开发到一半使用git stash进行缓存,先去解决其他紧急的任务
- 借鉴别人代码的时候,一定要敢于提出质疑。因为被人的代码也不是百分之百是没问题的,如果完全相信别人的代码没有问题,其实是在给自己挖坑,当自己遇到问题了可能只会在自己的代码上找问题
- 代码问题:
- 内存消耗。在写代码的时候一定要注意自己现有的资源,在写代码的时候,尽可能能不浪费内存就不浪费。
- 代码可读性、易维护性。有时候代码写起来可能会非常简洁,但是一眼看去不是很清晰明了,还不如换一种看起来更加清晰的方式写,便于自己维护,也便于其他同学理解
- 任何跟数据处理相关的代码,首先需要确认自己输入的数据格式,具体内容,以及处理之后的输出格式及内容。对于需要给下游任务使用的数据,还需要考虑使用的数据是否会存在延迟落盘的情况,因为很有可能这里会导致后期的bug,有必要需要将数据可能存在的问题记录在工作目录中
- 在写代码的时候为了不为自己后续挖坑,一定要考虑代码的通用性,可读性,以及多写一点注释。关键地方一定要多次检查,甚至可以在纸上模拟出具体的执行逻辑来确定某个逻辑是没有问题的
- 遇到bug的时候,首先应该从问题出发,分析出问题来自哪里,最后就是挨个检查
- 代码上线之前一定要检查各个环节是否可能存在问题,对于每一步的输入输出做校验,上线实验的前两天一定要时刻的注意一下上线的代码是否有问题,发现问题及时的解决。
业务理解
- 多听分享,多看wiki,学习策略,数据,业务,核心指标等重要的内容
- 了解物料从入库,到送审,再到择优等一系列流程大致的逻辑
- 没事多问问同事或者mentor,业务相关的内容,让自己可以更加的熟悉自己是在做什么,核心目标是什么
- 多学习大家是怎么发现、定位问题,怎么分析解决问题的思路
- 数据分析。如果还没有去实习的话,可以提前了解一点数据分析的思维,可以看一些数据分析思维的书
- 数据处理。涉及到需要使用到例行的数据的时候,一定要考虑到数据落盘的延时时间,看数据落盘的时间是否稳定,不稳定的话是否在自己预期的时间范围内,如果不在是否有替代的方案
- 多个实验做对照实验的时候,一定要注意两个实验的数据是否对齐,离线评估的时候与线上是否相符合,即使不能做到绝对的相符合,但是也需要尽可能的模拟线上的环境。
总结
因为自己的mentor能力非常强,并且对我非常好,所以我虽然实习时间比较短但是也是有一点产出的,后面转正也非常顺利,最后实习项目也很好包装。实习的时候一个好的mentor真的非常重要。最后祝愿大家都能找到合适的工作。