对于初级程序员来说,我一般会偏向考察她的一些基本功,比如:数据结构啦,算法啦;但是对于高级程序员来说,我一般会偏向于考察她的一些项目经验啦,处理问题的一个思路啦,还有她的一些管理经验这种东西。
应聘的人,首先要做好足够的准备,如果在面试的时候,能够说出一些面试公司的近况、对项目的情况有的了解和认识,对所要从事的工作很有热情,那么对公司来说,这个人就会有很多的优点。另外,如果能够准备一些比较好的提问来问面试官,也是很好的。可以展示一个人的水平和以后的发展规划。
应聘者在面试的过程中,首先,需要放松,不要过于紧张,这有助于后面解决问题的时候开阔思路。其次,不要急于编写代码,应该先了解清楚所要解决的问题。这时候,最好多和面试官多做沟通,然后,开始做一些整体的设计和规划,这有助于编写高质量和高可读性的代码。写完代码之后,不要马上提交,最好自己检查并借助一些测试用例来测试几遍代码,找出可能出现的错误。
其实,最重要的,'神马都是浮云',应聘技术岗位就是要踏实的写程序。
远程面试的时候。
面试的时候,最好身在一个比较安静的地方,可以帮助我们有清醒的思路来思考面试官提出来的问题。如果面试官提出的问题没有听清,或者没有理解好意思,那么一定要让面试官复数一下,千万不能不懂装懂,或者答非所问,这是面试时候的大忌。要向面试官多提问,知道弄清面试官的意图为止。
一半,我们会比较认可这几种编程习惯:
- 思考清楚再开始编码。比如写算法的时候,就要先搞清楚空间复杂度和时间复杂度的要求,有哪些情况需要特殊处理等。然后再手动编写代码。
- 良好的代码命名和缩进对齐习惯。
- 能够进行单元测试。如果在写完一个算法的时候,想清楚如何使用自己的这个方法,并给出在不同的条件下面这个方法会有哪些输出,这样的话,我们可以证明我们是有非常专业的软件知识功底的。因为在开发中,这种测试在前,开发在后的程序员,实在是太稀缺了。
- 如果在面试过程中,写出来的程序有一些问题,那么这时候,我们就需要有一些调试功底了,如果应聘者能够熟练的设置断点,单步跟踪,查看内存,分析调用栈,就很快的能够发现程序的问题出在哪里,面试官也会觉得应聘者的功底是很扎实的。在共享桌面的面试过程中,面试者的编程习惯和调试代码的能力是很重要的。
现场面试的时候
- 在现场面试的时候,需要提前规划好行程时间,首先应该准时,不能迟到。否则,印象分会大打折扣。
- 准备好得体的衣服,it部门一半不需要多好的衣服,干净整洁即可
- 注意面试邀请的流程。有些公司面试时间较长,长时间精神集中,高压力环境下,容易精疲力竭,因此,应聘者可以带一些提神的饮料或者食品。
- 准备几个问题。
面试的三个环节
行为面试环节。
面试开始的5-10分钟,通常是行为面试环节,在行为面试环节,面试官会注意应聘者的一些行为特征,深入的了解简历中列举的项目经历。由于这一环节一般不会问技术难题,因此也是一个暖场的过程,应聘者可以利用好这几分钟,调整自己的情绪,进入面试的状态。
面试官首先会让面试者简单介绍一下自己,我们只需要利用30-1分钟左右的时间,将自己的学习经历和工作经历简单的做一个介绍就可以了。这个时间,面试官会查看面试者的简历。
应聘者的项目经验
可以使用STAR模型描述自己的每一个项目
-
Situation
简短的项目背景。比如:项目的规模,开发软件的功能,目标用户等。 -
Task
自己完成的任务。这个要写详细,让面试官对自己的工作经历一目了然。在用词上要注意区分”参与“和”负责“:如果加入了某个开发团队写了几行代码,就用”负责“,就很危险。面试官看到简历上应聘者”负责“了某个项目,就会问项目的整体框架设计、核心算法、团队合作等问题。这些对于简单”参与“的人来说,是很难回答的,会让面试官认为你不诚实,印象分会失去很多。 -
Action
为完成任务,自己做了哪些工作,是怎么做的。这里可以详细介绍,如果是做系统设计的,可以介绍系统架构的特点;做软件开发的,可以写基于什么工具,在哪个平台下应用了哪些技术;做软件测试的,可以写是手工测试还是自动化测试、是白盒测试还是黑盒测试等。 -
Result
自己的贡献。这方面的信息可以写具体一些,最好可以有一些数字可以概括说明。如果是参与功能开发,则可以说按时完成了多少功能;如果是做优化,则可以说性能提高的百分比是多少;如果是维护,则可以说改了多少个bug。
常温的几个问题:
- 你在该项目中碰到的最大的问题是什么,你是怎么解决的?
- 从这个项目中你学到了什么?
- 什么时候会和其他团队成员(包括开发人员、测试人员、设计人员、项目经理等)有什么样的冲突,你们是怎么解决冲突的?
应聘者掌握的技能
除了对项目经历感兴趣之外,面试官对应聘者掌握的技能也很感兴趣,他可能针对简历上提到的技能提出问题,和描述项目时要注意”参与“和”负责“一样,描述技能掌握程度时也要注意”了解“,”熟悉“,”精通“的区别。
- “了解”是指对某项技术只是上过课或者看过书,但没有做过实际的项目。通常不建议在简历中列出只是肤浅地了解一点的技能,除非这项技术应聘的职位的确需要。
- “熟悉”是指对某一项技术已经有较长时间时间的使用了,通过查阅文档,已经可以解决大部分问题,那么我们就熟悉他了。
- “精通”是指我们对某一项技术已经得心应手,在项目开发的过程中,当同学或者同事向我们请教这个领域的问题的时候,我们都有信心也有能力解决,这个时候,我们可以说是精通了这个技术。
回答为什么跳槽
这个问题比较开放,所以面试官并没有期待一个准确的回答,但是通过这个回答,我们可以看出来一个人的性格。在回答这个问题的时候,不要流露出负面的情绪出来,因为一个人的负面情绪是可以传染的,当应聘者总是在抱怨的时候,面试官就会担心如果把他招进来,那么他将成为团队负面情绪的传染源,从而影响整个团队的士气。
另外,应避免下面四个原因:
- 老板太苛刻
- 同事太难相处
- 加班太频繁
- 工资太低
可以的原因:
- 现在的工作做了一段时间,已经没有太多的激情了,因此希望寻找一份更有挑战的工作。然后具体论述为什么有些厌倦自己现在的职位,以及面试的职位我为什么会有兴趣。
技术面试环节。
该环节大概会持续大约40-60分钟左右的时间。在这个环节,面试官会关注这几个点:
扎实的基础知识
基础知识扎实全面,包括编程语言,数据结构,算法等。面试的时候,如果遇到一些简单的问题,则应聘者应该要注重细节,写出完整,鲁棒的代码。如果遇到复杂的问题,则应聘者可以通过画图,局具体例子来分析和解析复杂问题等方法先理清思路再动手写程序。除此之外,面试者还应该不断优化时间效率和空间效率,力求找到最优的解法。在面试的过程中,应聘者还应该主动提问,以弄清楚题目的要求,表现自己的沟通能力。当面试官前后问的问题有相关性的时候,尽量把解决前面问题的思路迁移到后面的问题中去,展示自己良好的学习能力。