专业技能的书写
- 熟练 C++,(列举 C++的若干知识点),了解 Java,python,go (适当补充对这些语言的理解)
- 熟悉 linux 操作系统 vim 开发环境,(列举网络编程相关知识,例如 epoll,socket 等等)
- 熟悉网络,(列举网络协议相关考点,tcp/ip,http, https, 三次,四次握手,流量控制等等)
- 以上为公共写法,下面可以在补充自己的其他领域的内容
针对以上这个模板, 再来补充相关内容: (可以缩小面试官提问范围,把问题具体一点,你也可以有针对性的准备)
- 熟悉 C/C++,熟练使用 C 的指针应用及内存管理,C++的封装继承多态,STL 常用容器,C++11 常用特性(智能指针等) ,了解 Python,Go 等。
- 熟悉 Linux 下 vim 开发环境,了解网络编程,IO 多路复用,epoll 等等。
- 熟悉计算机网络,熟悉 TCP 三次握手,四次挥手,流量控制,拥塞控制等手段。
但需要注意的是,这里写的点,自己一定要熟练掌握,因为简历上写的,面试官一定会问。
这样有一个好处,就是 缩小面试官的问题范围, 只要简历上写的,你都准备好了,那么简历上的知识点面试官一定会问,这样你就掌握了主动权。
项目经历的书写
建议【项目经验】分 「项目描述」「个人工作」「个人收获/项目难点」这三块来写,不要堆在一起。例如这样:
在【项目经验】中「技术栈」可写可不写。
如果写的话,最好是自己可以 hold 的技术。主要是列出一大堆技术,怕面试官详选一个细问起来,自己可能招架不住。
不写 「技术栈」的话,就在 「个人收获」 写一写自己使用某一技术的心得,这样把面试问题缩小到自己可以把控的点上。
面试官的对于项目经历的提问
其实面试官问的问题,基本集中在 「项目难点」 和 「个人收获」上。
也就是你的 「项目难点」「个人收获」写了啥,面试官大概率就会问啥,所以建议大家吃透项目中的一两个技术点就够了,然后在「项目难点」 和 「个人收获」上重点写自己吃透的技术点。
这样就把面试官引导自己熟悉的领域, 要比把所以技术点都列出来 等着面试官随意发挥来问你问题要强得多。
程序员的简历
简历篇幅
首先程序员的简历力求简洁明了,不用设计上要过于复杂。
对于校招生,一页简历就够了,社招的话两页简历便可。
有的校招生说自己的经历太多了,简历要写出两三页,实际上基本是无关内容太多或者描述太啰唆,例如多过的校园活动,学生会经历等等。
既然是面试技术岗位,其他的方面一笔带过就好。
谨慎使用“精通”两字
应届生或者刚毕业的程序员在写简历的时候 切记不要写精通某某语言,如果真的学的很好,推荐写“熟悉”或者“掌握”。
但是有的同学可能仅仅使用一些语言例如 go 或者 python 写了一些小东西,或者了解一些语言的语法,就直接写上熟悉 C++、JAVA、GO、PYTHON ,这也是大忌,如果 C++更了解的话,建议写熟悉 C++,了解 JAVA、GO、PYTHON。
词语的强烈程度:精通 > 熟悉(推荐使用)> 掌握(推荐使用)> 了解(推荐使用)
还有做好心理准备,一旦我们写了熟悉某某语言,这门语言就一定是面试中重点考察的一个点。
例如写了熟悉 C++, 那么继承、多态、封装、虚函数、C++11 的一些特性、STL 就一定会被问道。
所以简历上写着熟悉哪一门语言,在准备面试的时候重点准备,其他语言几乎可以不用看了,面试官在面试中通常只会考察一门编程语言。
拿不准的绝对不要写在简历上
不要为了简历上看上去很丰富,就写很多内容上去,内容越多,面试中考点就越多。
简历中突出自己技能的几个点,而不是面面俱到。
想想看,面试官一定是拿着你的简历开始问问题的,如果因为仅仅想展示自己多会一点点的东西就都写在简历上,等于给自己挖了一个“大坑”。
例如仅仅部署过 nginx 服务器,就在简历上写熟悉 nginx,那面试官可能上来就围绕着 nginx 问很多问题,同学们如果招架不住,然后说:“我仅仅部署过,底层实现我都不了解。这样就是让面试官有些失望”。
同时尽量不要写代码行数 10 万+ 在简历上,这就相当于提高了面试官的期望。
首先就是代码行数 10W+ 无从考证,而且这无疑大大提高的面试官的期望和面试官问问题的范围,这相当于告诉面试官“我写代码没问题,你就尽管问吧”。
如果简历上再没有侧重点的话,面试官就开始铺天盖地问起来,恐怕大家回答的效果也不会太好。
项目经验应该如何写
项目经验中要突出自己的贡献,不要描述一遍项目就完事,要突出自己的贡献,是添加了哪些功能,还是优化了那些性能指数,最后再说说受益怎么样。
例如这个功能被多少人使用,例如性能提升了多少倍。
其实很多同学的一个通病就是在面试中说不出自己项目的难点,项目经历写了一大堆,各种框架数据库的使用都写上了,却答不出自己项目中的难点。
有的同学可能心里会想:“自己的项目没有什么难点,就是按照功能来做,遇到不会配置的不会调节的,就百度一下”。
其实大多数人做项目的时候都是这样的,不是每个项目都有什么难点,可是为什么一样的项目经验,别人就可以在难点上说出一二三来呢?
这里还是有一些技巧的,首先是做项目的时候时刻保持着对难点的敏感程度,很多我们费尽周折解决了一个问题,然后自己也不做记录,就忘掉了,此时如果及时将自己的思考过程记录下来,就是面试中的重要素材,养成这样的习惯非常重要。
很多同学埋怨自己的项目没难点,其实不然,找到项目中的一点,深挖下去就会遇到难点,解决它,这种经历就可以拿来在面试中来说了。
例如使用 java 完成的项目,在深挖一下 Java 内存管理,看看是不是可以减少一些虚拟机上内存的压力。
所以很多时候 不是自己的项目没有难点,而是自己准备的不充分。
项目经验是面试官一定会问的,那么不是每一个面试都是主动问项目中有哪些亮点或者难点,这时候就需要我们自己主动去说自己项目中的难点。
变被动为主动
再说一个面试中如何变被动为主动的技巧,例如自己的项目是一套分布式系统,我们在介绍项目的时候主动说:“项目中的难点就是分布式数据一致性的问题。”。
此时就应该知道面试官定会问:“你是如何解决数据一致性的?”。
如果你对数据一致性协议的使用和原理足够的了解的话,就可以和面试官侃侃而谈了。
我们在简历中突出项目的难点在于数据一致性,并且我们之前就精心准备一致性协议,数据一致性相关的知识,就等着面试官来问,这样准备面试更有效率,这些写出来的简历也才是好的简历,而不是简历上泛泛而谈什么都说一些,最后都不太了解。
面试一共就三十分钟或者一个小时,说两个两个项目中的难点,既凸显出自己技术上的深度,同时项目中的难点是最好被我们自己掌控的,因为这块是面试官必问的,就是我们可以变被动为主动的关键。
真正好的简历是 当同学们把自己的简历递给面试官的时候,基本都知道面试官看着简历都会问什么问题,然后将面试官的引导到自己最熟悉的领域,这样大家才会占有主动权。
博客的重要性
简历上可以放上自己的博客地址、Github 地址甚至微博(如果发了很多关于技术的内容),通过博客和 github 面试官就可以快速判断同学们对技术的热情,以及学习的态度,可以让面试官快速的了解同学们的技术水平。
如果有很多高质量博客和漂亮的 github 的话,即使面试现场发挥的不好,面试官通过博客也会知道这位同学基础还是很扎实,只是发挥的不好而已。
可以看出记录和总结的重要性。
写博客,不一定非要是技术大牛才写博客,大家都可以写博客来记录自己的收获,每一个知识点大家都可以写一篇技术博客,这方面要切忌懒惰!
大厂面试流程与注意事项
大型互联网企业一般通过几轮技术面试来考察大家的各项能力,一般流程如下:
- 一面机试:一般会考选择题和编程题
- 二面基础算法面:就是基础的算法都是该专栏要讲的
- 三面综合技术面:会考察编程语言,计算机基础知识 ,以及了解项目经历等等
- 四面技术 boss 面:会问一些比较范范的内容,考察大家解决问题和快速学习的能力
- 最后 hr 面:主要了解面试者与企业文化相不相符,面试者的职业发展,offer 的选择以及介绍一下企业提供的薪资待遇等等
并不是说一定是这五轮面试,不同的公司情况都不一样,甚至同一个公司不同事业群面试的流程都是不一样的
可能 一面和二面放到一起,可能三面和四面放到一起,这里尽量将各个维度拆开,让同学们了解 技术面试需要做哪方面的准备。
我们来逐一展开分析各个面试环节面试官是从哪些维度来考察大家的
一面 机试
一面的话通常是 选择题 + 编程题,还有些公司机试都是编程题。
- 选择题:计算机基础知识涉及计算机网络,操作系统,数据库,编程语言等等
- 编程题:一般是代码量比较大的题目
一面机试,通常校招生的话,BAT(百度,阿里,腾讯)的级别的企业 都会提前发笔试题,发到邮箱里然后指定时间内做完,一定要慎重对待,机试没有过,后面就没有面试机会了
机试通常是 选择题 + 编程题,还有些公司机试都是编程题
选择题则是计算机基础知识涉及计算机网络,操作系统,数据库,编程语言等等,这里如果有些同学对计算机基础心里没有底的话,可以去牛客网上找一找 历年各大公司的机试题目找找感觉。
编程题则一般是代码量比较大的题目,图、复杂数据结构或者一些模拟类的题目,编程题目都是我们这门课程会讲述的重点
leetcode 是专门针对算法练习的题库,leetcode 现在也推出了中文网站,所以更方面中国的算法爱好者在上面刷题。 这门课程也是主要在 leetcode 上选择经典题目。
牛客网上涉及到程序员面试的各个环节,有很多国内互联网公司历年面试的题目还是很不错的。
建议学习计算机基础知识可以在牛客网上,刷算法题可以选择 leetcode。
二面 基础算法面
更注意考察的是思维方式
这一块和机试对算法的考察又不一样,机试仅仅就是要一个结果,对了就是对了不对就是不对,
而二面的算法面试面试官更想看到同学们的思考过程,而不仅仅是一个答案。
通常一面机试的题目是代码量比较大的题目,而二面而是一些基础算法
面试官会让面试者在白纸上写代码或者给面试者一台电脑来写代码,
一般面试官倾向于使用白纸,这样更好看到同学们的思考方式
三面 综合技术面
编程语言:如果是 C++的话, 会问 STL,继承,多态,指针等等 这里还可以问很多问题。
计算机基础知识:八股文,针对不同岗位不太一样
项目经验:
项目经验主要从这三方面进行考察 技术原理、 技术深度、应变能力
考察技术原理, 做了一个项目,是不是仅仅调一调接口就完事,之后接口背后做了些什么? 这些还是要了解的
考察技术深度,如果是后台开发的话,可以从系统的扩容、缓存、数据存储等多方面进行考察
考察应变能力,如果面试官针对项目问同学们一个场景,最为忌讳的回答是什么?“我没考虑过这种情况”。 这会让面试官对同学们的印象大打折扣。
这个时候,面试官最欣赏的候选人,就是尽管没考虑过,但也会思考出一个方案,然后跟面试官进行讨论。
最终讨论出一个可行的方案,这个会让面试官对同学们的好感倍增。
通常应届生没有什么项目经验,特备是本科生,其实可以自己做一些的小项目。
例如做一个 可以联机的五子棋游戏,这里就涉及到了网络知识,可以结合着自己网络知识来介绍自己的项目。
已经工作的人,就要找出自己工作项目的亮点,其实一个项目不是每一个人都有机会参与核心的开发。
也不是每个人都有解决难题的机会,这也是我们在工作中 遇到难点,要勇往直前的动力,因为这个就是自己项目经验最值钱的一部分。
四面 boss 面
技术 leader 面试主要考察面试者两个能力, 解决问题的能力和快速学习的能力
解决问题的能力:
面试官最喜欢问的相关问题:
- 在项目中遇到的最大的技术挑战是什么,而你是如果解决的
- 给出一个项目问题来让面试者分析
如果你是学生,就会问在你学习中遇到哪些挑战, 这些都是面试官经常问的问题。
面试官可能还会给出一个具体的项目场景,问同学们如何去解决。
例如微信朋友圈的后台设计,如果是你应该怎么设计,这种问题大家也不必惊慌
因为面试官也知道你没有设计过,所以大家只要大胆说出自己的设计方案就好
面试官会在进一步指引你的方案可能那里有问题,最终讨论出一个看似合理的结果。
这里面试官考察的主要是针对项目问题,同学们是如何思考的,如何解决的。
快速学习的能力:
面试官最喜欢问的相关问题:
- 快速学习的能力 如果快速学习一门新的技术或者语言?
- 读研之后发现自己和本科毕业有什么差别?
在具体一点 面试官会问,如果有个项目这两天就要启动,而这个项目使用了你没有用过的语言或者技术,你将怎么完成这个项目?
换句话说,面试官会问:你如果快速学习一门新的编程语言或技术,这里同学们就要好好总结一下自己学习的技巧
如果你是研究生,面试官还喜欢问: 读研之后发现自己和本科毕业有什么差别?
这里要体现出自己思维方式和学习方法上的进步,而不是用了两三年的时间有多学了那些技术,因为互联网是不断变化的。
面试官更喜欢考察是同学们的快速学习的能力。
五面 hr 面
为什么选择我们公司?
这个大家一定要有所准备,不能被问到了之后一脸茫然,然后说 就是想找个工作,那基本就没戏了
要从技术氛围,职业发展,公司潜力等等方面来说自己为什么选择这家公司
有没有职业规划?
其实如果刚刚毕业并没有明确的职业规划,这里建议大家不要说 自己想工作几年想做项目经理,工作几年想做产品经理的
这样会被 HR 认为 职业规划不清晰,尽量从技术的角度规划自己。
是否接受加班是否接受加班?
虽然大家都不喜欢加班,但是这个问题 我还是建议如果手头没有 offer 的话,大家尽量选择接受了
除非是超级大牛手头 N 多高新 offer,可以直接说不接受,然后起身潇洒离去
坚持最长的一件事情是什么?
这里大家最好之前就想好,有一些同学可能印象里自己没有坚持很长的事情,也没有好好想过这个问题,在 HR 面的时候被问到的时候,一脸茫然
憋了半天说出一个不痛不痒的事情。这就是一个减分项了
如果校招,直接会问:期望薪资 XXX 是否接受?
这里大家如果感觉自己表现的很好 给面试官留下的很好的印象,可以在这里争取 special offer,或者 ssp offer
这都是可以的,但是要真的对自己信心十足。
如果社招,则会了解前一家目前公司薪水多少 ?
这里大家切记不要虚报工资,因为入职前是要查流水的,这个是比较严肃的问题。
其实 HR 也不会只聊很严肃的话题, 也会聊一聊家常之类的,问一问 家在哪里?在介绍一下公司薪酬福利待遇,这些就比较放松了