互联网公司实习校招个人经验分享

1 前言

同学们大家好!我是22届的毕业生,写这篇文章主要是想总结一下自己实习和秋招的经历,将自己的经验分享给学弟学妹们,希望能帮助大家做好准备或者少走些弯路。

本人的方向是后端开发,主修语言是Java,实习和面试也大多都是Java后端开发,所以适用范围也仅限于后端,对于别的岗位则不太了解。

2 准备工具

工欲善其事,必先利其器。在开始之前呢,必须先准备好学习工具。

2.1 书籍

我非常推荐通过看书来学习,因为这样你学习的是第一手资料,而不是博客文章那些别人的理解和总结。

如果时间充裕的话,建议还是买一些经典的书籍一点一点学习,注意理解和标记重点,当面试遇到的时候如果想不起来就回过头来翻阅,加深印象和理解,直到完全消化记在脑子里。

推荐的书籍:

  • 《Java从入门到精通》:类似的书有很多,刚接触 java 的同学可以将它作为入门书籍,读的时候建议手敲代码,将每一个例程亲自敲一遍、跑一遍,这跟单纯看书的效果是完全不一样的。
  • 《深入理解Java虚拟机》:非常经典的书,面试中有大量的问题出自这本书,网上很多的文章和笔记也是对这本书的理解与总结。虽然看起来比较费劲,但如果能坚持看完的话收获是很大的。
  • 《大话数据结构》:这本书是基于 C 语言来讲解数据结构的,比较生动有趣。同样建议在阅读时手敲代码,将例程和算法敲一遍、跑一遍,这样会加深你的理解,而且会帮助你注意到一些细节。
  • 《MySQL必知必会》:这本书主要是介绍MySQL基本用法和SQL语句的,作为后端是必须会的。
  • 《高性能MySQL》:这本书则是讲解MySQL底层原理和性能优化的,这本书太厚,可能看不完,建议重点看索引和性能优化相关章节。
  • 《计算机网络》:这本书应该是很多学校的教材,计算机网络建议看它即可。传输层和应用层是重点。
  • 《计算机操作系统》:这本书应该也是很多学校的教材,操作系统建议看它即可。

以上仅是本人看过的一些书籍,除此以外也有很多优秀的书籍,同学们可自行选择。

2.2 学习网站

首先,LeetCode和牛客网是两个一定要知道的网站。

  • LeetCode是著名的刷题网站,算法题在面试中是很重要的一部分,一定要好好刷题!链接:*************************
  • 牛客网是一个互联网求职学习网站,里面有各种教程,当然更重要的是很多同学会在牛客上分享面经,这在准备面试时是非常重要的!另外很多公司也会在牛客上发内推信息,大家可以根据情况选择投递。链接:https://www.nowcoder.com/

其次,CS-Notes是我个人非常推荐的一个学习网站。

  • CS-Notes是一个互联网技术面试必备知识的整理笔记,它分类整理总结了互联网面试常见的知识点,其中有很多知识点正是从我上面推荐的书籍里总结出来的,简单易懂。对于没有太多时间慢慢看书的同学,我非常推荐通过这个网站来学习基础知识。CS-Notes开源在GitHub上,目前已经达到了145k Stars! 链接:http://www.cyc2018.xyz/

2.3 笔记

眼过千遍不如手过一遍。从准备 -> 面试 -> 实习 -> 秋招有半年多的时间,几个月以后我们很难保证还记得以前看过的知识点、刷过的题。由于互联网面试涉及的知识点太多太杂,每个人的准备程度也各不相同,在秋招复习的时候我们不能浪费时间去一个一个找那些零碎的知识点,所以对于书籍,在看的时候就要标记出重点,不能等到复习的时候重新看一遍;对于网络文章、博客、笔记,看完之后要把有用的链接记录下来。

我觉得网络上的很多文章太水,没有用处;一些文章废话太多,精华部分只有几段文字;少数文章非常优质,值得收藏。如果只是通过浏览器的标签管理器来记录的话太过凌乱,不利于建立自己的知识体系。所以我非常推荐大家记笔记!

纸质笔记虽然也可以,但是写字太慢了,我们没有太多的时间将大量知识点摘抄下来,而且纸质笔记也不易保存、携带不方便、难以多端查阅。所以我推荐大家使用在线笔记。目前市面上有很多在线笔记类产品,如OneNote、印象笔记、石墨文档、语雀、飞书等等,大家可以根据自己的喜好选择。

在学习的过程中,我们要建立自己的分类知识库,梳理学习过的知识点,将其记录到笔记中。对于精华部分可以标记成重点;对于不理解的部分可以打上疑问,留待以后再次学习;对于学习过程中自己的理解和感悟,也可以记录在相应的位置。这样一边学习,一边记笔记,等你学习完所有知识点以后,会发现自己已经建立了一个十分丰富的知识库。不仅便于面试复习,而且也是自己庞大知识体系的一部分。我自己在准备面试的过程中就记录了200多篇笔记~

3 简历

简历通常分为基本资料、教育背景、专业技能、实习项目经历、个人荣誉等部分。在写简历之前,建议大家找个好看的模板,简洁大方、条理清晰即可,不要找那种花里胡哨的,让人看不出重点。

在写专业技能的时候要认真,不要写“精通xxx”这种话语,这种很容易被面试官刁难。对于自己掌握很好的知识点就写“熟悉xxx”,对于自己会一些但不是很深入的知识点就写“了解xxx”。专业技能和面试岗位的匹配程度很重要,在写之前可以去看看各大公司目标岗位的职位要求,你就知道哪些是你应该“熟悉”的,哪些是你应该“了解”的。

实习项目经历这块,如果你在找第一份实习,那么可以写自己实验室的项目,或者是自己学习练手的开源项目;如果是秋招的话,就把实习经历放在第一个,尤其是大厂实习。

这一块是自由发挥程度很高的一个部分。对于实验室项目,一般情况下面试官根本不了解你的方向,所以你需要推敲自己的语言,要让一个同专业不同方向的人能够听懂你在说什么;对于开源项目,面试官很有可能已经见过同一个项目无数次了,比如烂大街的秒杀、商城项目等,既然是烂大街的项目,想要脱颖而出就必须深入学习、挖掘项目中的难点,说出自己的理解,让面试官发现你和其他人的不同;对于实习项目,一般来说两三个月的实习时间根本不够你去完整的了解自己所做的项目,所以在实习的时候就要有针对性的学习该项目的2~3个技术亮点,深入挖掘,不会就问mentor,坦白来说,这几行实习经历就是实习本身对你找工作最大的用处,一定要重视,不要等实习结束了才发现自己全程划水,啥也没学到。

实习项目经历是你可以自由发挥的部分,你可以在简历上引导面试官去提问你准备好的技术亮点,当然你自己也必须得真正掌握它们,而不是把内部文档上的东西粘上去,面试官一问你三不知。面试官会通过这里一点一点挖掘你对项目、技术的理解程度,这也是你能否拿到SP、SSP offer的一个关键。

其他部分根据自己的情况填写即可,知名编程竞赛的奖项应该会有加分,至于奖学金、论文之类的好像没太大用,不过有就写上,聊胜于无。

4 刷题

刷题是重中之重!

笔试和手撕代码是各大互联网公司招聘必备的环节,有的公司特别重视算法题,比如字节每一轮面试都有手撕代码,如果你算法题不会,那么即使其他方面表现很好也过不了面试,当然如果时间紧迫只写了核心代码也是可以的;有的公司相对没那么看重算法,但是基本的代码考察肯定也是有的。

刷题建议到 LeetCode 上刷,坚持打卡。刷题这东西太久不刷就会生疏,所以贵在坚持!

目前 LeetCode 题库里已经有2000多道题了,由于题目太多,刚开始刷题大家可能不知道应该如何上手。我推荐大家刷《剑指Offer》这本书,里面有60多道面试常考的算法题,刷完一遍应该就有感觉了。

刷题之前一定要学会数据结构,否则你可能连答案都看不懂~

刚开始刷题的时候可能会很痛苦,感觉自己像个傻子,不过不要灰心。看完题目不要直接去看答案,首先自己思考,尝试解题,如果实在没有思路再去看答案,当然也不要干想一个小时,白白浪费时间。看完答案自己手敲一遍,不要复制粘贴。手敲的过程中你会注意到算法的实现细节,以及培养自己的编程风格。对编程规范感兴趣的同学可以去看一看《阿里巴巴Java开发手册》。在一道一道克服算法题的过程中,你会感受到编程的魅力~

刷题也不能盲目的刷,刷完2000多道题是不现实的。当你刷到一定题量以后,应该会慢慢发现算法题的规律和套路,这个时候就可以开始分类总结了。比如按照数据结构分类、按照算法分类,将每一个类别的题目都刷到熟练为止。这时你会发现大量的题目都是相同的套路,而你只不过刷了两三百道而已,这对于面试来说已经足够了。

这里分享一下我自己的刷题过程:

我首先刷了三遍《剑指Offer》,第一遍基本看啥啥不会,思考半天也没有思路,只能看答案,看完答案再自己手敲一遍。一开始很慢,可能一个小时才做一道题,等刷完十几道题之后就慢慢有感觉了,即使没有思路,看完答案也能很快理解并敲出来。有的题目有多种解法,从易到难,复杂度从高到低,每一种解法我都会敲一遍,理解记忆。第一遍刷的很慢,一般一天只能刷几道题,但是磨刀不误砍柴工嘛。第二遍我就尽量不看答案,每一道题目都回忆它的所有解法,思考每一种解法的时间复杂度和空间复杂度,然后手敲最优解法,实在想不起来就看一下答案,只看一眼思路,不看具体代码。第三遍则是完全不看答案,并且讲究快速,10分钟以内想出所有解法并敲完最优解法。第二遍和第三遍我是交叉进行的,每天刷六七道第二遍的题+刷第三遍前一天的题,在上午的两三个小时里完成,总共十多天就刷完了第二遍和第三遍。

然后开始分类刷题,将每种数据结构、每种算法的经典题型都刷一遍。当然有些复杂的算法我没刷,比如字典树、并查集、KMP、Manacher 等,这些在面试中遇到的概率很小,如果真遇到了就当自己运气不好吧。

以上仅是我自己的一个刷题习惯,大家可以根据自己的习惯来刷题,但是一定要坚持和总结!

5 基础知识

基础知识也就是大家常说的八股文。虽然被称为八股文,但是该会的还是得会,而且很多东西在工作中也是确实会遇到的。

基础知识主要分为以下几部分:

  • 编程语言:编程语言只要熟悉一门即可,常见的比如 Java, C++, Go, Python等,大家可以选择自己最熟悉的语言来学习以及刷题。我主修的是 Java,Java应该是最卷的语言了,学习它的人最多,因为它很成熟,使用它的公司很多,资料也很多,常见的面试考察点也有很多人总结过,主要包括 Java 基础、集合框架、JVM、并发编程、Java I/O 等。除了 Java I/O 以外,其他4个部分都是面试考察重点,一定要非常熟悉,像常用的集合框架最好能阅读源码并理解。
  • 数据库:数据库大家一般都会学习MySQL,公司里一般也都会用到MySQL。除了掌握基本的SQL语句以外,还要对数据库系统原理和MySQL原理非常熟悉,像事务、隔离级别、MVCC、索引、性能优化、存储引擎等是面试中考察非常频繁的点,更进一步地如果掌握分库分表等知识点,那么很有可能会成为你在二面三面的加分项。
  • 计算机网络:计网的传输层和应用层是重点,传输层TCP、UDP几乎每次面试都会考,三次握手四次挥手、拥塞控制都是非常频繁的考点,更进一步地还有TCP粘包、UDP丢包、UDP广播等考点;应用层主要是HTTP协议、HTTP与HTTPS的区别、Cookie和Session的区别、GET和POST的区别、web页面的请求过程等。物理层、数据链路层、网络层简单复习一下即可,考察的不是很多。
  • 操作系统:操作系统主要考察基本的 linux 命令、进程与线程、进程调度算法、进程通信、虚拟内存、分段和分页、死锁等。
  • Redis:缓存问题、缓存淘汰算法、数据分布、一致性哈希、Redis支持的5种数据类型及应用场景、常用命令等。
  • 消息队列:消息队列的使用场景、具体某一种消息队列和架构和特性、优缺点、零拷贝等。
  • Spring:Java方向必会的框架,经常问的有AOP、IoC、Spring MVC的执行流程等。
  • 设计模式:经常问的是单例模式的双重校验锁,一定要知道原理并且能手写代码,其他的设计模式会几种就可以,他问你就只说你会的。
  • 分布式:CAP、分布式锁、分布式事务等。

以上各部分基本是按照重要程度从高到低的顺序来排的,提到的知识点都是面试中经常遇到的考点,但是不仅限于这些。大家可以多看面经,多积累知识,在面试过程中对不同知识点的分量做一个衡量。

6 面试

当准备好之后就可以开始投递简历了,建议大家单独创建一个求职邮箱,如163邮箱、QQ邮箱等,而不要直接用学校邮箱。一方面是因为容易将学校邮件和面试邮件混在一起,另一方面很多学校邮箱会把面试邮件扔进垃圾邮件,可能会耽误你面试。

投递时建议在各个公司官网投递,在各类招聘网站上投递可能处理不及时。日常实习倒是无所谓,不过暑期实习和秋招最好还是在官网投递。

投递时间最好早一些,因为公司招聘HC是有限的,如果前面的人把HC都占了,那么你即使再优秀也没办法,除非等补招。

刚开始面试大家都没啥经验,而且很容易紧张,往往会表现不好,所以我建议大家刚开始先不要投心仪的公司,先投一些小公司或者不想去的大公司,刷刷经验,等到准备充分之后再投心仪的公司。

有一点需要提醒大家,就是不要太过自信,只投自己想去的几家公司,而要多投多试。因为面试中的不确定因素太多了,即使你出类拔萃、名列前茅,也不一定就能拿到你心仪公司的offer。举几个例子:有可能别人的笔试场次题目简单,你的笔试场次题目非常难,你连笔试都没过;有可能这个岗位HC很少,而你投的比较晚,即使面试通过也没有HC了;有可能面试官问的恰好是你不会或者不擅长的;有可能开奖之后你发现是个烂白菜;有可能仔细了解之后你发现这个部门并不是你想象的那么好;有可能你遇到了万中无一的毁意向......总之,求职过程中的不确定因素太多,而我们学生又是弱势群体,千万不要只盯着几家公司,非xx不去,也不要拿了一个offer就躺平,万一最后开奖和你预期完全不符呢?现在很多公司都养鱼,我们也可以反向养鱼,手里offer多、质量高才有议价权。

下面说一下面试流程:大部分公司都有2面或者3面,一般来说一面考察基础知识,二面考察项目经历和技术理解,三面与二面类似,但会从更宏观的角度来考察你的知识广度和深度,HR面则是聊聊天,一般会考察你的性格、职业规划以及对公司的看法等,推测你来该公司的意向程度。面试过程一般都是自我介绍,然后考察相关知识点,最后做一道算法题,时间一小时左右。在自我介绍的过程中可以适当地多介绍自己熟悉的技术栈,引导面试官问你熟悉的领域。面试过程中如果遇到不会的知识点,可以大方的说不会,我下去会学习一下,而不要拐弯抹角、转移话题,这样反而会拉低面试官对你的评价。另外在面试过程中也要注意自己的语言表达能力和逻辑思维能力,尽量表达得条理清晰、简单易懂,这也是面试考察的一个重点。

最后就是面试态度尽量谦虚一些、讲礼貌,虽然大部分面试官人都很好,但是也难免会遇到态度不好的面试官,可能他就是刚和别人吵完架,把气撒在你头上,也可能他在处理线上bug,顾不上理你。总之我们只要做好自己该做的就好,就算因为这个挂了也不用太在意。

7 结语

我认为,高质量的offer = 熟练的算法题 + 牢固的基础知识 + 富有广度和深度的项目和技术理解

以上内容仅仅是我个人实习和秋招经历的一个总结和经验分享,有的内容可能并不全面 or 并不准确,需要大家根据其他人的分享以及自己的实际经历来辨别,适用范围也仅限于后端开发岗。总之希望能够帮助到学弟学妹们~

最后祝大家都能拿到心仪的offer!

作者:cx

2022年1月

全部评论
做项目不太会敲代码,该怎么弥补?
点赞 回复 分享
发布于 2023-04-05 22:04 河南
看书真的有用吗?
点赞 回复 分享
发布于 2023-04-03 09:03 四川
是不是需要好好记八股?
点赞 回复 分享
发布于 2023-04-02 22:57 辽宁

相关推荐

03-16 22:00
武汉大学 C++
幸福的小熊猫想要offer:我阿里投的 c++岗,面试官说自己是做 java 的,c++这辈子才有了
点赞 评论 收藏
分享
Eeeeevans:都是校友,还是同届,我就说直白点,不委婉了,我相信你应该也不是个玻璃心,首先你觉得一个双非的绩点写简历上有用吗?班长职务有用吗?ccf有用吗?企业会关心你高数满分与否吗?第二,第一个项目实在太烂,一眼就能看出是外卖,还是毫无包装的外卖,使用JWT来鉴权,把热点数据放进Redis这两个点居然还能写进简历里,说难听点这两个东西都是学个几十分钟,调用个API就能完成的事情,在双非一本的条件下,这种项目你觉得能拿出手吗,第二个项目你写的东西和你的求职方向有任何的匹配吗?第三,计设那一块毫无价值,如果想突出自己会前端,直接写入专业技能不行吗,最后,专业技能里像深入理解JVM底层原理这种你觉得这句话你自己真的能匹配吗?都是校友加上同届,我措辞直接,但希望能点出你的问题,想进大厂还得继续沉淀项目和学习
点赞 评论 收藏
分享
评论
7
39
分享

创作者周榜

更多
牛客网
牛客企业服务