程序员如何面试?
一,代码的完整性和鲁棒性
基本功能
边界值
无效的输入
时间效率
空间效率
二,事前准备
对公司近况,项目情况有所了解,同时还要准备好合适的问题问面试官
三,解题之前
不要过于紧张,不要急于写代码,应该先了解清楚所要解决的问题,这个时候最好先和面试官多做沟通,有疑惑的地方问清楚,以避免理解错题,然后开始做一些整体的设计和规划,即解题思路
如果是线上题目,写完之后,不要立即提交,自己检查并借助一些测试用例测试几遍代码
四,面试的三种形式
1.电话面试
有些面试官会打电话过来预约电话面试的时间,也有些面试官喜欢突然袭击,一个电话过来就开始面试。
自己在投完简历之后,需要注意下最近一段时间保持通信通畅。这一阶段大多是基础问题,做好准备即可,同时保证通话质量,听不清楚就尴尬了。
2.远程面试
远程面试即在线编程或者共享桌面。
在线编程,则考察基本功了,同时注意基本功能,边界值,无效输入,时间效率,空间效率。
共享桌面,则面试官可以实时观察到你的桌面。那么面试官重点关注的就是你的编程习惯以及调试能力。
思考清楚再写代码
不要一开始就写代码,在没有形成清晰思路之前写的代码通常会漏洞百出,这个时候修改代码也会改的越来越乱,最终导致面试的结果不理想。
良好的代码命名以及缩进对齐习惯
单元测试 保证代码的完整性和鲁棒性
当遇到bug时候,能熟练的看日志,设置断点,单步跟踪,查看内存,分析调用栈等很快的发现问题的根源并解决
3.现场面试
规划好路线并估算出行时间,不要迟到。
衣着合适,同时注意看面试邀请函里的内容,比如面试地点,流程等。同时预先了解下公司,准备好要问面试官的问题。
五,现场面试的三个环节
1.行为面试环节
面试开始的5~10分钟是行为面试的时间,这个环节里,面试官会注意应聘者的性格特点,深入的了解简历中列举的项目经历。
一般开始会给一个自我介绍,用0.5到1分钟的时间介绍自己的主要学习、工作经历即可。如果面试官对某一段经历或者参与的某一个项目很感兴趣,那么他会有针对性的提几个问题详细了解
应聘者自我介绍之后,面试官接着会对照应聘者的简历去详细了解他感兴趣的项目。
重中之重:如何准备简历
使用STAR模型描述自己经历的每一个项目
situation: 简短的项目背景
比如项目的规模,开发的软件功能,目标用户等
Task: 自己完成的任务
这个要写详细,要让面试官对自己的工作一目了然。用词上要注意区分**“参与”和“负责”**,如果只是加入某个团队,写了几行代码就用“负责”很危险,面试官可能会问项目的总体框架设计,核心算法,团队合作等问题,这些对于只是简单参与的人来说,是很难回答的。会让面试官觉得你不诚实。
Action:为完成任务自己做了哪些工作,是怎么做的。这样可以详细介绍,做系统设计的,可以介绍系统架构的特点,做软件开发的,可以写基于什么工具在哪个平台下应用了哪些技术等等。
Result:自己的贡献。这方面的信息可以写的具体些,最好能用数字加以说明,如果是参与功能开发,则可以说按时完成了多少功能,如果做优化,则可以说性能提高的百分比是多少。
如果项目中上诉四类信息不够清晰,面试官很可能会追问相关问题。
除此之外,面试官针对项目经验最常问的问题包括如下几个:
你在该项目中碰到的最大问题是什么,你是怎么解决的?
从这个项目你学到了什么?
什么时候会和其他团队成员有什么样的冲突,你们是怎么解决冲突的。
因此,在准备简历的时候,针对每一个项目经历都提前做好相应的准备!!
简历上的技能
要注意区分:了解,熟悉,精通
了解:指某项技术只是在上过课或者看过书,但是没有做过实际的项目。通常不建议在简历上列出只是肤浅的了解一点的技能,除非应聘的岗位确实需要。
熟悉:简历中我们描述技能的掌握程度大部分应该是“熟悉”。如果我们在实际项目中使用某项技术已经有较长时间,通过查阅相关的文档可以独立解决大部分问题。
精通:如果我们对一项技术使用得得心应手,当别人向我们请求这个领域的问题时候,我们都有能力去解决,这个时候我们就可以说精通了这项技术。不要轻易用精通这个词,除非自己能有把握轻松回答这个领域里的绝大多数问题,否则会适得其反。
2.技术面试环节
面试官通过简历以及行为面试大致了解面试者的背景之后,接下来就是技术面试了。一轮一小时的面试,通常技术面会占据40~50分钟,这是面试的重头戏,对面试的结果起决定性的作用。
面试官会关注的面试者的5种素质:
1.扎实的基础知识
包括编程语言、数据结构、算法等
2.能写高质量的代码
能写出正确的 完整的 鲁棒的高质量代码
3.分析问题时思路清晰
能思路清晰的分析,解决复杂问题
4.能优化时间效率和空间效率
能从时间,空间复杂度两方面优化算法效率
5.学习沟通能力
具备优秀的沟通能力,学习能力,发散思维能力等
因此,面试者应当做足准备,对编程语言,数据结构和算法等基础知识有全面的了解。面试的时候如果遇到简单的问题,则应聘者一定要注重细节,写出完整,鲁棒的代码,如果遇到复杂的问题,则应聘者可以通过画图,举例子分析和分解复杂问题等方法先理清思路再动手编程。除此之外,还应该不断优化时间效率和空间效率,力求找到最优的解法。在面试的过程中,应聘者还应该主动提问,以弄清楚题目的要求,表现自己的沟通的能力。
扎实的基础知识
基本功在编程环节体现在三个方面:
编程语言,数据结构和算法
需要对编程语言很熟练,常用的概念,工具包,特性等等。比如java的面向对象,集合类,多线程,jvm等等。
数据结构,需要熟练掌握链表,树,栈,队列和哈希表等数据结构。如果我们留意各大公司的面试题,就会发现与链表和二叉树相关的问题是很多面试官喜欢问的问题。这方面的问题看着简单,但是真正掌握也不容易,特别适合在面试时间内检验面试者的基本功。如果面试者对链表的插入和删除节点了如指掌,对二叉树各种遍历循环和递归写法烂熟于胸,那就游刃有余了。
最后,大部分公司都会注重考察查找,排序等算法。需要重点掌握二分查找,归并排序和快速排序,因为很多面试题都只是这项算法的变体而已。
其次,大厂对算法要更高,面试者需要熟练掌握动态规划和贪婪算法等。
高质量的代码
只有注重质量的程序员,才能写出稳定,鲁棒的大型软件。面试官会格外关注边界条件,特殊输入等看似细枝末节但是至关重要的点。
需要考虑边界条件,特殊输入比如null,空字符串等以及错误处理
其实做为一个开发者,有一个学习的氛围跟一个交流圈子特别重要这里我要推荐c++交流群:“648778840”,不管你是小白还是大牛欢迎入住,大家一起交流成长。小编会在群中不定期分享干货源码,包括我精心整理的一份c++零基础教程。欢迎各位感兴趣的的小伙伴。
学习思路:
学习资料:
网友评论