校招杂谈
秋招结束后就一直想写一篇总结,但个人比较懒躺平了好久:D。最近老师给我布置了个任务写一下秋招这段时间的面试经验总结, 就不继续鸽了吧😄 继回顾完大学生涯后再来看看近段时间的校招悲剧吧 :(
如果不读研,校招可以说每个人一生只有一次,当你毕业了也就失去应届生这个身份了也就不能参与校招了。因此校招这个机会是十分重要且难得的,一定要尽早准备参加,重视重视再重视!!!⚠️
切记 春招找实习,秋招拿offer
虽然应届生身份法规上是两年内,但又有几个公司这么看尼~
重要的东西写在前头
首先说一个思想上的几个误区:
- 许多人认为没毕业就不能去应聘
- 我才大三,校招离我还远
- 学校大四还有课,找到了也去不了不如不去面试
- 我是前端,后端的那些就不复习了
据我观察我们学校很多人都有这个误区,但其实并非这样。校招可以说当你踏入大三,就要开始准备了!另外对于面试官来说,应届生只有CS专业与非CS专业的两种情况,你前端还是后端只是决定了考察的重点或者问题方向罢了。下面就来详细的展开说说校招的这些事吧~
开始之前先介绍一下个人情况吧,看官还请结合自身实际参考阅读:
Python
、JavaScript
、golang
这三门语言为我的主技术栈, 当然别的语言也会点。- 框架方面:
Flask
、APIflask
、gin
、Vue
等常见的web开发框架我都能熟练的使用 - 裸考软考网络工程师
- 有一颗热爱计算机、热爱折腾的心
在编程方面,你应该有以下的基本素养:
- 会写注释、会写文档
- 变量名清晰明了
- 函数功能划分清楚、职责单一(❌冗长的函数)
- 习惯看官方文档,拒绝看垃圾博客(如csdn)
- 接口协议设计合理、规范清晰
- 添加功能的时候多一点思考(如扩展性)
- 习惯写测试用例、单元测试(正所谓一行代码千行测试)
- 代码问题输出使用规范化的log记录
- 提交代码要规范
一个比较常规的应届生校招流程
上图可以说是大学生应该知道的招聘流程,我以一个刚步入大三的学生身份来remake整个流程。是的,大三开学就需要开始准备校招事宜了!
大三开学首先要做这几件事:
- 制作简历
- 浏览意向的岗位资讯
- 开始复习八股文
- 开始刷题、刷算法
在学期末的时候开始投递简历,应聘大厂的实习岗位。实习可以说是我们三本学生进入大厂为数不多的机会了,切记要把握好!
大三第二个学期
常言道:春招找实习、秋招拿offer。这个学期开学一般都是3月份了,这时候你应该已经在寒假就完成简历的投递了。这个学期的主要任务就是:
- 找到实习
- 继续八股文、算法的复习
- 了解提前批动态
每年的提前批时间都不一样,需要自行上牛客网浏览相关资讯。关注大厂提前批的动态。
大三与大四中间的暑假
这个暑假一般而言是在秋招应聘的实习公司与面试中度过的,争取拿到正式offer是这个时间段唯一目标!有实习经历与没有实习经历是有很大差距的!具体原因下文会讲到。
大四
大四开学就是9月了,也是正式的校招与秋招的开始。是厮杀的最火热的时间段。
在这个时间段往往会遇到卡简历、卡学历等等的不公平待遇,这也是为什么说提前批争取上岸的原因。
这个时间段的笔试,除非你能答到基本满分,否则你可能连面试官都见不到。
至于笔试题的难度,按ACM标准来看就好了。至于秋招结束还没上岸或者拿不到保底,那只能希望来年的春招了。
个人简历
简历是十分重要的,最重要的是一个“真”字。内容一定要真实会就会,不会就不会。其次是“精”,切忌杂七杂八的东西往上丢,比如项目部分写学校的课程实训就很掉分。
最后需要注意里面的内容需要突出重点而不是一股脑的全丢上面。尽可能控制在一页内,主要包含你会的技术栈、能拿得出手的项目、经历与技能证书、自我评价这几个部分,下面详细展开来说。
技术栈
在技术栈上,经可能的突出与求职岗位所匹配的技术。另外需要注意描述技能掌握程度时的词语了解,熟悉和精通的区别。
“了解”指对某项技术只是全面学习过或看过书,但并没有做过实际的项目。一般不建议在简历中写只是肤浅地了解一点的技能,如:只是在我校Java课程中学过java,那就只能算了解。
在简历描述中的掌握程度大部分应该是“熟悉”,一般毕业生是使用不到“精通”的。“熟悉”意味着你对这门技术有着深入的使用且已经有较长的时间,通过查阅相关文档可以独立解决大部分问题,那么我们就能熟悉它了。
⚠️需要注意,学习的课程实训并不能算数!举几个例子,熟悉 MySQL 你应该能清楚的知道事务隔离级别、sql调优、处理过数据库事物并发带来的相关问题等许多细节;熟悉 Python 你应该知道GIL(全局解释锁s)、元编程、魔法方法(magic function)、迭代器生成器装饰器(iterator, generator, decorator)等等(如果你刚好也是Python技术栈,那我推荐你看一下《流畅的Python》这本书);最后再以人数最多Java来举例子,Java你应该知道JVM内存区域布局、基本的垃圾回收机制和原理、各种集合类的底层原理、各种InputStream/OutputStream
的区别,特别是HashMap中的桶结构的进化与退化以及接口,抽象类区别,应用场景。
还有一些计算机通用的底层原理(八股文)就不过多赘述了。
项目与经历部分
项目与经历最好就是写你实习负责的项目与实习经历⚠️切忌将学校课程实训的项目也往上写⚠️因为这类项目根本无法吸引面试官眼球!甚至让面试官感觉你技术就那样儿~ 因此宁可只有一个也不写多,宁愿刚八股文也不要让面试官对你没兴趣!
项目这部分是简历中最重要的,因为它直接关系到面试官与你谈的内容。以我这几次面试来看面试官对你的项目问的越多,了解的越深入越感兴趣你就越有戏,我有几次甚至因为和面试官聊项目聊到timeout了😂面试官也对这个项目给出了好多有用有意思的建议!如果项目面试官不感兴趣的话,那就只能问你八股文了,这样除了要有扎实的基本功外还要看你能否答到面试官想听的点了,这难度就可想而知了~ 总的来说你的项目就是要让面试官感兴趣,因此项目部分提炼出来的要点如下:
- 最好是实习的项目
- 项目比较有趣、新颖、吸引眼球
- 切忌把烂大街的项目放到简历上
技能证书与自我评价
自我评价想不到说啥,就来说说技能证书吧~ 技能证书其实也是按照精而不多原则来填写(这不是废话),当然真实的情况往往是没有几个能拿得出手的证书😄 这时候就有要按公司、按职位来写了。
以英语证书为例,如果你投的岗位与公司对英语水平没有太大要求而你又只有四级证书,那最好还是不要填写四级证书为好。因为在整个应届生群体中雅思托福的不在少数,你的简历上的四级反而是一个掉分项!
面试八股文
- 数据结构与算法
- 操作系统原理
- 计算机网络
- 数据库
在复习上面的内容时,切记不要按学校教的来复习! 因为学校教的不够深入,前三部分建议参考考研408的真题。按考研的难度来复习就对了。八股文与考研这些东西,网上资料十分详细(特别是GitHub上面)这里就不展开细说了,列几个我认为秋招一定要会的基本功吧:(后面想起来会动态补充)
数据结构与算法
这部分按考研标准来就好了,几种常见排序、数据结构是一定要会的~ 这里推荐《小灰算法》这本书,里面所讲的都是面试的基础。
计算机网络
- OSI 七层模型分别是?各自的功能是什么?
- 一次完整的http请求过程包括那些内容
- http本质上是什么? get和post的区别有哪些?从底层原理上回答
- http与https的区别?https如何保证数据传输安全
- 什么是SSL/TLS?
- 一个tcp链接可以对应几个http request?
- 浏览器对同一个Host建立tcp链接的数量有没有限制?
- DNS是什么?两种查询方法了解过吗?工作原理是什么?
- http长链接与短链接的区别
- get方法的长度限制是怎么回事?
- Cookie与Session的区别?session的工作原理是什么?不同框架对session的实现有什么不同?
- SQL注入了解吗? 简单的注入会不会?
- CSRF攻击、CSS攻击是什么?
- TCP包头结构,各字段的功能与作用
- TCP的粘包/拆包问题,发生的原因?
- 常见的tcp攻击了解吗?会复现吗?
- tcp的三次握手四次挥手
- tcp四大拥塞控制算法,tcp的滑动窗口
- 流量控制原理会吗?tcp如何保证可靠性传输?
- udp是什么?tcp与udp的区别
- 服务器出现大量close_wait的原因是什么?怎么解决?
数据库
这一part本人不熟,以 MySQL 与 Redis 为主:
- 事务是什么?
- MySQL事务隔离级别
- 并发问题?脏读、幻读与不可重复读?
- MySQL对repeat table read做了什么?
- 索引原理
- B+树是什么?并且对比红黑树与其他数据结构
- 死锁怎么造成的?怎么处理?
- 什么是MVCC?
- MyISAM与Innodb
- 表结构优化、sql调优
- 跳表(SkipList)
- Redis的两种存储是什么?
- 服务器宕机后数据怎么恢复
操作系统
- 进程、线程与协程的区别
- 线程进程到底是什么?
- 一个进程可以创建几个线程?
- 进程线程模型
- Linux下进程间通信方式
- Linux下同步机制
- 内存交换与覆盖的区别
- 虚拟技术了解吗?容器技术了解吗?
- 进程状态的切换知道多少?
- 一个程序从开始到结束整个生命周期的过程
- 进程同步的四种方法?
- 两个经典问题:哲学家与消费者
- 说说几种典型的锁?
- 死锁相关
- malloc申请内存时候,操作系统做了什么?
- 说说new、malloc、del与free
- 说说守护进程与僵尸进程和孤儿进程
- 服务器高并发的解决方案有哪几个?