程序员如何面试?
一,代码的完整性和鲁棒性
基本功能
边界值
无效的输入
时间效率
空间效率
二,事前准备
对公司近况,项目情况有所了解,同时还要准备好合适的问题问面试官
三,解题之前
不要过于紧张,不要急于写代码,应该先了解清楚所要解决的问题,这个时候最好先和面试官多做沟通,有疑惑的地方问清楚,以避免理解错题,然后开始做一些整体的设计和规划,即解题思路
如果是线上题目,写完之后,不要立即提交,自己检查并借助一些测试用例测试几遍代码
四,面试的三种形式
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++十年工作经验现在精心整理了一套从小白到项目实践开发各种学习资料如果你想学想加入我们请关注我在私信回复“编程”就可以领取学习资料!!!加群775356268