面试官在通过简历及行为面试大致了解应聘者的背景之后,接下来就要开始技术面试了。一轮1小时的面试,通常技术面试会占据40~50分钟。这是面试的重头戏,对面试的结果起决定性作用。

    总体关注应聘者5种素质:

    扎实的基础知识、能写高质量的代码、分析问题时思路清晰、能优化时间效率和空间效率,以及学习沟通等各方面的能力

    image.png
    应聘者在面试之前需要做足准备,对编程语言、数据结构和算法等基础知识有全面的了解。
    面试的时候如果遇到简单的问题,应聘者一定要注重细节,写出完整、鲁棒的代码。如果遇到复杂的问题,应聘者可以通过画图、举具体例子分析和分解复杂问题等方法先理清思路再动手编程。

    • 扎实的基础知识

    扎实的基本功是成为优秀程序员的前提条件,因此面试官首要关注的应聘者素质就是是否具备扎实的基础知识。
    通常基本功在编程面试环节体现在3个方面:编程语言、数据结构和算法。
    熟练掌握链表、树、栈、队列和哈希表等数据结构,以及它们的操作。

    • 高质量代码

    只有注重质量的程序员,才能写出鲁棒稳定的大型软件。
    在面试过程中,面试官总会格外关注边界条件、特殊输入等看似细枝末节但实质至关重要的地方,以考查应聘者是否注重代码质量。
    在动手写代码之后想好测试用例。只有把各种可能的输入事先都想好了,才能在写代码的时候把各种情况都做相应的处理。写完代码之后,也不要立刻给面试官检查,而是先在心里默默地运行。当输入之前想好的所有测试用例都能得到合理的输出时,再把代码交给面试官。

    边界条件、特殊输入(比如 NULL 指针,空字符串等)及错误处理。

    • 清晰的思路

    有些时候面试官会有意出一些比较复杂的问题,以考查应聘者能否在短时间内形成清晰的思路并解决问题。
    面试官通常不喜欢应聘者在没有形成清晰思路之前就草率地开始写代码,这样写出来的代码容易逻辑混乱、错误百出。

    画图能使抽象问题形象化,举例使抽象问题具体化,分解使复杂问题简单化。

    • 优化效率的能力

    优秀的程序员对时间和内存的消耗锱铢必较,他们很有激情地不断优化自己的代码。
    当面试官提示还有更好的解法的时候,应聘者不能放弃思考,而应该努力寻找在时间消耗或者空间消耗上可以优化的地方。

    • 优秀的综合能力

    应聘者除了展示自己的编程能力和技术功底之外,还需要展示自己的软技能(Soft Skills),诸如自己的沟通能力和学习能力。
    面试官会观察应聘者在介绍项目经验或者算法思路时是否观点明确、逻辑清晰,并以此判断其沟通能力的强弱。
    面试官也会从应聘者说话的神态和语气来判断他是否有团队合作的意识。通常面试官不会喜欢高傲或者轻视合作者的人。

    通常面试官有两种办法考查应聘者的学习能力。面试官的第一种方法是询问应聘者最近在看什么书、从中学到了哪些新技术。面试官可以用这个问题了解应聘者的学习愿望和学习能力。面试官的第二种方法是抛出一个新概念,接下来他会观察应聘者能不能在较短时间内理解这个新概念并解决相关的问题。

    知识迁移能力是一种特殊的学习能力。如果我们能够把已经掌握的知识迁移到其他领域,那么学习新技术或者解决新问题就会变得容易。

    考查应聘者的抽象建模能力和发散思维能力。