程序员面试攻略 —— 简历
一、前言 Overview
在我的职业生涯中,至今为止应聘过3家公司。其中对于我来说,最难的不是现在的Offer,而是本科毕业出来时候,第一次找到的工作。
在那时候,我经常吐槽学校的培养计划,在大学四年中,仅存的软技能课只有职业生涯规划,而里面的知识又和实际职场严重脱轨。这么重要的知识,却没法在大学时期能够很好的重视和培养,最后在毕业季进行磕磕碰碰地就业,也浪费了自己应届生的优势。
在我进入工作之后,渐渐明白:
程序员,永远不只是代码。这个岗位,他首先是一个职业,包含了应聘,沟通,领导等能力;接着是一名IT技术员工,拥有擅长领域的IT技术;其次是一名工程师,赋予工程学技能框架。最终才实现技能变现。
我非常感谢陈皓哥给予的宝贵经验,让自己能够跟随着他的脚步,在毕业前能提交出一份堪堪及格的答卷。也在之后的职业道路上,一直能有一盏明灯引领着自己,去进步,去发展。
二、简历的基本要素 Basic
简历,基本上来说,应该简要明了,筛选能有利于自己应聘岗位的信息,不能单纯罗列,要突出自己的技能和长处,给予招聘方想要的信息。
通常来说简历,包括以下几个部分:
2.1 个人信息
- 自我介绍
这个自我简介是用最简单的话来说明自己的情况,不超过 200 字,自述不超过5分钟。
比如:10+ 年的软件开发经验(说明你的主业),4+ 年的团队 leader 经验(说明你的领导力),擅长高可用高性能的分布式架构(说明你的专业和专攻),多年互联网和金融行业背景(说明你的行业背景),任职于 XXX 公司的 XX 职位(说明你的职业),负责 XXX 平台或系统(说明你的业务场景)···
- 基本信息
包括姓名,年龄,性别,联系方式(电话 + 邮箱), 个人证件照
其中姓名在面对国际公司(主要指大厂)可以带上英文名;联系电话可以加上国区号(如+86);邮箱建议选择更具职场性质的邮箱(如Gmail,hotmail),少用QQ邮箱,国企类型的可以选择网易邮箱等;个人证件照意义不大,可以不加,毕竟不看脸;
- 个人网站
主要指个人主页、博客、GitHub 或是 Stack Overflow等平台,是很好的作品展示方式
如果有自己的独立域名,很建议附在你的简历,这就是你动手能力的加分项。同时对于前端领域,自己设计的博客,就是一个很好的招牌和审美品味的展示。但应注意自己博客中的内容,反应自己的思考深度,对技术原理性的刨根问底,对技术的偏执和看法。
- 个人技能
罗列几条个人技能,快速阐明已掌握的技术和领域。不应太多,点睛即可。
如果是从招聘简章上面试的,上面的要求,就是你该选择突出什么技能的纲要。
– 技术领域 —— 前端,算法,AI,分布式,系统底层,DBA等
– 业务领域 —— 行业领域(金融,通信,电商,政务等)& 业务领域(支付,CRM,物流等)
– 技术领域 —— 表明自己专精的编程语言,编程框架,常用软件/工具,设计或架构
– 经验和软技能 —— 主要指领导力,执行力,项目管理能力,设计能力。
- 工作经历和教育经历
工作经历和教育经历都应服务于证实和描述个人技能的高度
根据项目的含金量和同竞聘岗位的关联性,从大到小列出自己的工作经历和项目,应突出项目的含金量(难度,规模,挑战,自己的职责和输出,以及他人的认可), 个人建议参照STAR法则,梳理自己的项目。
三、简历模板 Template
简历,应突出简介明了。几点琐碎要求:
简历的内容应简短精确,控制在两页内;
简历格式在提交时,应为PDF格式,保证格式不会混乱;
面对国际企业或有英文工作环境的企业,应附带英文版简历,处理好里面的描述和基本语法(这将体现你的英语功底);
简历的模板,可以参照Office上关于简历的模板,主要以简约风格为佳;
简历中的罗列多点的地方应控制2-3个,不应过多;
自我评价模块,内容虚浮,个人并不建议添加。对于大部分公司,并不在意你的自我评价,他们更相信自己看到的和考验出来的;
四、知识储备 Knowledge
以上提到的内容,应严格按照自己的情况如实填写。
有人提过面试会问什么内容?其实简历就是面试官问你的一亩三分地。你写什么,面试官就会问你什么。对于大厂和行业前端的公司,就不要打肿脸充胖子,是什么就是什么。面试官在面试时会不断试探我们知识领域的广度和深度。
你写上了 Java,那么 Java 的基本语法都要了解,并发编程、NIO、JVM 等,你多少要有点儿了解,Spring、Netty 这些框架也要了解。
你写上了 Go,那么至少得把官网上的 Effective Go 给看了。
你写上了 Redis,那么除了 Redis 的数据结构,Redis 的性能优化、高可用配置、分布式锁什么的,你多少也要把官网上的那几篇文章读一读。
你写上了面向对象,那么怎么着也得把《设计模式》中的 23 个模式了解一下。
你写上了分布式架构,那么 CAP 理论、微服务架构、弹力设计、Spring Cloud、Cloud Native 这些架构就要做到心里有数。
你写上网络编程,那么 TCP/IP 的三次握手,四次挥手,两端的状态变化你得知道吧,Socket 编程的那几个系统调用,还有 select、poll、epoll 这些异步 IO 多路复用的东西,你得知道。
对于关键技术,你至少要有八成功力,以及一定的深度原理学习。
对于算法知识,刷题就完事,👉点我👈
对于系统设计,一般只有在社招面试才会提到,可以参考我《简单系统设计》
五、经典问题 (拓展) Question
面试中总有几个经典问题,往往需要提前准备:
说一个你做过的最自豪的项目,或是最近做过的一个项目。
了解候选者的兴趣点,和高质量项目。
说一个你解决过的最难的技术问题,或是最有技术含量的问题。以及如何解决的
了解候选者对难题的处理能力。
说一个你最痛苦的项目,或最艰难的项目。
了解候选者的抗压能力。
说一个犯过的最大的技术错误,或是引发的技术故障。
了解候选者对错误的态度,以及是否能够自我改正或优化。
这些问题都会伴随着对各种细节的不停追问,因为这样的问题太容易造假了。所以,面试官会不停地追问细节,就像审问一样。因为一个谎言需要用更多的谎言来掩盖,如果没有经过高强度和专业的训练的话,最好不要撒谎。
对此,如果你想有一个比较好的面试回答效果,这不是你能临时准备出来的,工夫都是花在平时的。笔者的方式就是在工作中写文档 ,在工作之余写博客。能讲得清,讲得好,就能在面试中有较好的语言组织能力和工作总结能力。
六、小结 Summerize
简历总的来说,就是突出面试官想要的,简历内容有限,不应长篇大论。