程序员面试的注意事项(一)
【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
本博客的内容来自于程序员的注意事项(一)
学习、合作与交流联系q384660495;
本博客的内容仅供学习与参考,并非营利;
本文的内容主要总结了《剑指offer》,并非原创。
一、面试的流程
提示:以下部分主要介绍了面试的考察点、面试的形式和面试的环节
1、面试的考察点
- 初级程序员主要考察算法、数据结构和编程能力
- 高级程序员主要考察专业技能和项目经验
- 编写高质量和高可读性的代码
- 准备好合适的问题问面试官
2、面试的三种形式
提示:大部分公司的面试都是从电话面试开始的。通过电话面试后,有些公司会安排一俩轮的远程面试。最后应聘者会收到现场面试。
2.1、电话面试
面试官以电话的形式考察应聘者,可能提前预约时间,也可能突然袭击。所以电话面试要提前做好准备,要注意回答问题的逻辑,尽可能的用形象的语言把细节说清楚。听不清楚的时候大胆问清面试官的问题,了解面试官的意图。
2.2、共享桌面远程面试
共享桌面远程面试是指利用一些共享桌面的软件,应聘者把自己电脑的桌面共享给远程的面试官。这种形式的面试,面试官更关心应聘者的编程习惯和调试能力。
Q1:编程习惯:
- 思考清楚再开始编码(考虑好解决问题的思路,如算法复杂度、空间复杂度、特殊情况需要处理等等,再开始动手)
- 良好的代码命名和缩进对齐习惯(变量名一目了解)
- 能够进行单元测试
Q2:调试能力(考验开发经验和基本功):
- 断点、单步跟踪调试
- 查看内存、分析调用栈等
2.3、现场面试
现场面试主要考察沟通能力、学习能力、编程能力等综合能力。
准备:
- 规划好路线和时间安排
- 准备好得体的衣服
- 注意面试邀请函里的面试流程
- 准备好几个问题(问面试官)
3、面试的三个环节
提示:面试官通常把每一轮的面试分为3个环节:首先是行为面试,面试官按照简历了解应聘者的过往经验;其次是技术面试,这一环节很可能会要求应聘者现场写代码;最后一个环节是应聘者问几个自己最感兴趣的问题。
3.1、行为面试环节
面试开始的5-10分钟为行为面试时间。在行为面试这个环节,面试官会注意应聘者的性格特点,深入了解简历中列举的项目经历。应聘者不必详细描述项目的背景,而要突出介绍自己完成的工作及取得的成绩。
Q1:应聘者的项目经验
(建议用STAR模型描述自己参与过的项目)
- Situation:简短的项目背景。比如项目的规模,开发软件的功能,目标用户等
- Task:自己完成的工作。要让面试官对自己的工作一目了然,用词上要区分“参与”和“负责”。简历上应聘者写“负责”了某个项目,会问项目的总体框架设计、核心算法、团队合作等问题。
- Action:为完成任务自己做了哪些工作,是怎么做的。这里可以详细介绍,做软件开发的,可以写基于什么工具在哪个平台下应用了哪些技术;做系统设计的,可以介绍系统架构的特点。
- Result:自己的贡献。这方面的信息要具体些,结合数字加以说明。比如参与软件开发的,则可以说按时完成了多少功能;如果做优化,则可以说性能提高的百分比是多少;如果是维护,则可以说修改了多少个Bug。
这是《剑指offer》中的一段案例引用:
Winforms是微软.NET中的一个成熟的UI平台(Situation)。本人的工作是在添加少量新功能之外主要负责维护已有的功能(Task)。新的功能主要是让Winforms的控件风格和Windows7的风格保持一致。在维护方面,对于较难的问题,我用WinDbg等工具进行调试(Action)。在过去俩年中,我共修改了超过200个Bug(Result)。
面试官针对项目经验最常问的问题有如下几个类型:
- 你在该项目中碰到的最大问题是什么,你是如何解决的?
- 从这个项目中你学到了什么?
- 什么时候会和其他团队成员有什么样的冲突,你们是怎么解决冲突的?
Q2:应聘者掌握的技能
和描述项目时要注意“参与”和“负责”一样,描述技能掌握程度时要注意“了解”、“熟悉”和“精通”的区别。
- “了解”:指对某项技术只是上过课或者看过书,但没有做过实际的项目。通常不建议在简历中列出只是肤浅地了解一点的技能,除非这项技术应聘的职位确实需要。
- “熟悉”:我们描述技能的掌握程度大部分应该是“熟悉”。如果我们在实际项目中使用某种技术已经有较长的时间,通过查阅文档可以独立解决大部分问题,那么我们就熟悉它了。对于毕业生,毕业设计所用到的技能可以用“熟悉”;对于已工作的,项目开发中所用到的技能也可以用“熟悉”。
- “精通”:在项目开发过程中,当同学、同事向我们请教这个领域的问题时,我们都有信心也有能力解决,这个时候就可以说自己精通了这项技术。切勿试图在简历中把自己修饰成“高人”而轻易使用“精通”
Q3:回答“为什么跳槽”
应聘者可以大胆地根据自己的真实想法来回答这个问题。
尽量避免以下4个原因:
- 老板太苛刻
- 同事太难相处
- 加班太频繁
- 工资太低
这是《剑指offer》给出的一个回答:
现在的工作做了一段时间,已经没有太多的激情了,因此希望寻找一份更有挑战性的工作。然后具体说说为什么有些厌倦现在的工作,以及面试的职位我为什么有兴趣。
3.2、技术面试环节
通常技术面试会占据40~50分钟,这是面试的重头戏,对面试的结果起决定性的作用。总的来说关注应聘者的5种素质:扎实的基础知识、能写高质量的代码、分析问题时思路清晰、能优化时间效率和空间效率、以及学习沟通等各方面的能力。
应聘者需要具备的素质
- 基础知识扎实全面,包括编程语言、数据结构、算法等(编程语言至少掌握一俩种,数据结构熟练掌握链表、树、栈、队列和哈希表等数据结构,算法重点掌握二分查找、归并查找和快速排序等)
- 能写出正确的、完整的、鲁棒的高质量代码(简单问题注重细节,关注边界条件,特殊输入处理等)
- 能思路清晰地分析、解决复杂问题(复杂问题通过画图、举具体例子分析和分解复杂问题等方法理清思路再动手编程。画图能使抽象问题形象化,举例能使抽象问题具体化,分解能使复杂问题简单化)
- 能从时间、空间复杂度俩方面优化算法效率(常见算法的时间空间复杂度)
- 具备优秀的沟通能力、学习能力、发散思维能力等(前后问题有相关性时候,尽量把解决前面问题的思路迁移到后面的问题中去;从神情语态考察团队意识;询问应聘者最近在看什么书,了解应聘者的学习愿望和学习能力;抛出一个新概念,考察应聘者能否快速理解这个新概念并解决相关问题;先问一个简单问题,再问一个复杂但和前面问题相关的问题,考察知识迁移能力;从日常生活中提炼出问题考察抽象建模能力和发散思维能力)
3.3、应聘者提问环节
在结束面试前的5~10分钟,面试官会给应聘者机会问几个问题,应聘者问题的质量对面试的结果也有一定的影响。不妨为每一轮面试准备2-3个问题。
准备:
- 规划好路线和时间安排
- 准备好得体的衣服
- 注意面试邀请函里的面试流程
- 准备好几个问题,推荐问的问题与应聘的职位或者项目相关的问题(问面试官)
到这里为止面试的主要流程已经介绍完毕了,希望每一位准备的面试的人都可以斩获自己心仪的offer。
参考资料《剑指offer》