面试官谈面试

项目经验

对于初级程序员,我一般会偏向考查算法和数据结构,看应聘者的基本功;对于高级程序员,我会多关注专业技能和项目经验。

本科的时候面过几场,一部分面试官是根据简历上的项目进行面试,中间可能会穿插着面试算法题;
另外一部分是先不看简历,直接上几道算法题,然后在你想算法题的时候浏览你的简历。
目前只面了一个公司的面试,两面中都是关于简历上的项目,算法题倒是不多。
所以最稳妥的办法是两手抓:基本功和项目经验。

热情

应聘者要事先做好准备,对公司近况,项目情况有所了解,对所应聘的职位真的很有热情。另外,应聘者还要准备好合适的问题问面试官。

当然,要表现出对该职位的热情是必要的,但是在我面试的过程中发现,我缺乏表现不是发自内心的情绪的能力,即我通常是怎么想就怎么表现。
比如上一次面试中我表现出了无所谓的态度,对我来说都能明显感觉的到,更别说面试官了。
因为我是在找实习,并且也不是想去的公司,所以我没能够掩饰掉自己的内心状态,也许当面我想去的公司时就不会有这种情况发生。
对于不想去的公司,怎么表现都无所谓,只要能帮助我提高就行,这样也省去了面试公司的时间。
对于想去的公司,要努力加倍的表现出对这个职位的热情。

思维逻辑&Review

不要急于编写代码,应该先了解清楚所要解决的问题,最好先和面试官多做沟通,然后开始做一些整体的设计和规划,写完不要马上提交,最好自己review找出可能出现的错误。

在面试的过程中,面试官不是真的要你写出代码,而是看你的思维是否清晰,交流的能力。

Review是一项能力,是自然而然的行为,是必须要做的事情。

面试的三种形式

1.电话面试

  • 对语言表达能力有极大的挑战, 尽可能用形象的语言吧细节说清楚。

2.共享桌面面试

调试能力

俗话说,没有调试解决不了的Bug,如果有就上个洗手间,回来后重新调试。调试真的太重要了,调试也很容易。不管是大项目还是小程序,一般能够快速的定位到Bug。哈哈哈,俗话说是我说的。
面试中的程序一般十几行或几十行就可以搞定,基本上就是一二三个函数,所以程序的正常运行最重要的是保证每个函数的前置条件和后置条件都成立。

思考清楚再开始编写代码

在解题的时候,要有思路,而不是乱撞,这一点非常重要。同时也要有良好的命名、缩进等编程习惯

能够进行单元测试

这一点还没有体会到。

3.现场面试

面试官通过应聘者的语言和行为,考察其沟通能力、学习能力、编程能力等综合实力。

面试的三个环节

  • 首先是行为面试,面试官参照简历了解应聘者的过往经验。
  • 然后是技术面试,可能会要求应聘者现场写代码。
  • 最后是应聘者提问。

1.行为面试环节

面试官会注意应聘者的性格特点、深入的了解简历中列举的项目经历。

做一个简短的自我介绍

介绍自己的主要学习、工作经历就行。(写一个稿子吧。。。现在回来,已经写好了)

项目经验

在自我介绍之后,面试官接着会对照面试者的简历去详细了解他感兴趣的项目。可根据STAR模型描述自己经历过的每一个项目。

  1. Situation:简短的项目背景,项目的规模、开发的软件的功能、目标用户等。
  2. Task:自己完成的任务,详细说明项目的总体框架设计、核心算法、团队合作等问题。
  3. Action:为了完成任务做了哪些工作、怎么做的、遇到了哪些难点。详细介绍系统的架构、应用了哪些技术、怎么克服困难的、有哪些创新。
  4. Result:自己的贡献,具体说明开发了哪些功能。

面试官会问的问题:

  • 你在该项目中碰到的最大问题是什么?你是怎么解决的?
  • 从这个项目中你学到了什么?
  • 你们是怎么合作的?
面试者应掌握的技能

了解、熟悉、精通

2.技术面试环节

在了解了面试者的背景之后,接下来就开始技术面试了。

面试官关注的面试者的素质

1.基础知识扎实全面:编程语言、数据结构和算法

2.能写高质量的代码:正确、完整地写出鲁棒的高质量代码

写代码时,要注意边界条件、特殊输入、错误处理等。在动手写代码之前要想好对特殊用例的处理。

3.能优化时间效率和空间效率:从这两方面优化算法

优秀的程序员对时间和内存锱铢必较,很有激情地不断优化代码。

要想优化代码必须:

  • 知道如何分析效率。要能够分析出算法及其代码实现的效率。
  • 熟知各种数据结构的优缺点,并能选择合适的数据结构解决问题。
  • 熟练掌握常用的算法,

4.分析问题时思路清晰:思路清晰地分析、解决复杂问题

在短时间内形成清晰的思路并解决问题。对于复杂的问题,面试官更看重面试者是否有清晰的思路。
面试官不喜欢面试者在没有形成清晰思路之前就草率地开始写代,这样极容易逻辑混乱、错误百出。

帮助自己形成清晰的思路的办法:

  • 首先,举例使抽象问题具体化。举几个简单具体的例子让自己理解问题,并试图通过例子模拟程序的过程来找出规律。
  • 然后,画图使抽象问题形象化。可以试着用图形表示抽象的数据结构,画出要用到的结构来简化题目。
  • 最后,分解使复杂问题简单化。可以试着把复杂的问题分解成若干个简单的子问题,再一一解决,例如分治法和动态规划等。

5.学习和沟通的能力:具备优秀的沟通能力、学习能力、发散思维能力、抽象建模能力等

  • 沟通能力:面试过程中,面试官会观察面试者在介绍项目经验或者算法思路时是否观点明确、逻辑清晰,并以此判断其沟通能力的强弱。
  • 学习能力:比如最近在看什么书、学习什么技术、从中学习到了哪些新技术,据此来考察面试者的学习愿望和学习能力。或者抛出一个新概念,通过接下来的沟通、交流来考察面试者的能力。
  • 发散思维能力:比如,在简单问题的启示下找到解决复杂问题的方法,从而解决复杂问题。

3.面试者提问环节

参考最后一问

面试者问出问题的水平,显示了他在这个行业钻营的程度。

如何能够和面试官聊的嗨,并且让面试官愿意和你聊面试之外的类似于见识之类的。比如说,在面试的最后,当面试官问你有什么要问的,如何能够和面试官聊很多?
面试前准备:

  • 对于要面试的公司,搜索公司内相关职位人员与业内同行的交流,比如研讨会上流露出的信息等。
  • 国内外相同类型公司的发展和事件等。
  • 对业内该职位的先进技术和趋势有所了解。

面试中临场发挥:

  • 当和面试官谈到某个事情时,可以插入一两句自己设定好的相关情景。
  • 试着学会去引导面试官。