首页 存档 技术 查看内容

程序员面试中的沟通技巧分享!

2018-3-30 13:00 |来自: 互联网 341 0

摘要: 你再优秀,也需要一个适合自己的舞台展示!程序员成为技术大牛前,是需要在实践中磨练的,所以面试就是你不得不过的一个坎儿。下面是一些面试技巧,一起看看吧! 1、闲聊 在深入代码之前,大多数面试官喜欢聊聊你的 ...

你再优秀,也需要一个适合自己的舞台展示!程序员成为技术大牛前,是需要在实践中磨练的,所以面试就是你不得不过的一个坎儿。下面是一些面试技巧,一起看看吧!


1、闲聊

在深入代码之前,大多数面试官喜欢聊聊你的背景。他们想知道:

你对编码认知。你是否知道如何编写好代码?

个人能力/领导力。你是否经历过整个工作流程?你是否修复过并不怎么正确的东西,即使你并不需要这么去做?

沟通。和你交流技术问题是有用的还是痛苦的?

你应该至少说明以下中的一个:

你曾解决的一个有趣的技术问题

你曾克服的一个人际冲突

显示领导力或个人能力的例子

你曾在以往项目中做出的贡献

最喜欢的语言的一些琐事,对这种语言你做了什么,以及你不喜欢它哪里

有关公司产品/业务的问题

关于该公司的工程策略


2、沟通

涉及到编码问题的时候,沟通是关键。一个在工作时需要帮助却能和人正确沟通的求职者比那些能轻松解决问题的求职者甚至更好。

了解这是哪种问题。有两种类型的问题:

1、编码。面试官希望你能针对问题写出简洁高效的代码。

2、 闲聊。面试官希望能和你聊一聊。话题通常是

(1)高水平的系统设计

(2)琐事

有时候这些琐事中也会引入“实际”问题,例如,“如何迅速排序整数列?好的,如果不是整数,是其他类型的呢…… ”。

如果你开始编写代码,并且面试官并不想多说废话,只想尽快过渡到“实际”问题,那么如果你罗哩叭嗦太多的话,她可能会觉得厌烦。不妨直接问,“是不是为这个问题写代码?”

让人感觉你有团队精神。面试官想知道和你一起工作是什么感觉,会有什么问题,所以要让他们看到你的团队合作性。使用“我们”来代替“我”。

把自己的想法大声说出来。不 是开玩笑,比如说:“我不知道这样做是否有效但请让我试一试。”如果你不知道怎么办,不知道这个问题该如何解决,那么就说一说你现在的想法。说一说你认为怎么做可能会有效。


3、目标

相信和不少朋友一样,有了几年工作经验成为Senior后就开始了面试别人的经历。我在最初这个阶段只是按照自己的想象把”找到基础好的程序员“,”找到算法能力优秀的程序员“,”找到有Android开发经验的程序员“等作为面试的目标。但是,实际的经历告诉我,尤其是按“基础好”,“算法好”这些目标招到的人最终效果并不好。比如,有的面试者基础知识和算法掌握情况不错,进程、线程、内存等概念清晰,基本的Hash,二叉树,快速排序等数据结构和算法也比较熟悉,但是进公司后在实际工作中表现得很糟糕。后来,我才发现原来是我的面试目标出了问题,我原先的面试方法更像是大学的算法或操作系统期末考试,按照这种方法让许多并不合适的人通过了面试,同时也可能错过了许多合适的人。

后来,我的反思是,从公司的角度讲,面试的根本目的是找到“能够干好工作”的人,而“高学历”,“算法好”,“基础好”,“有经验”这些都是表象而不是根本,它们并不能直接和“工作好”划等号。

4、算法

算法是Google和MS等大公司面试所重点考察的内容。我个人很喜欢算法,曾经参加ACM/ICPC拿过北京赛区的13名。但是,就个人经验来看,我所接触过的绝大多数开发职位而言,算法都不适合作为考察面试者优劣的主要因素。对于普通的非算法性开发职位,考察面试者的算法就相当于考察他打乒乓球好不好一样,与目标“工作好”的相关性太低。就我个人的经验来看,差不多P(工作好|算法好)=50%,也就是算法面试没有太大的区分性。

甚至,还有一种很不好的情况特别多地出现在算法好的面试者身上,我称之为“只磨刀,不砍柴”。什么意思呢?有类人只对什么A*算法,异步编程,JVM类加载机制这种纯技术问题感兴趣,对实现用户需求毫无兴趣。这类人看起来有一定的技术能力,但是对公司来讲贡献十分有限,甚至不如技术一般但认真负责的人。所以,一旦遇到面试者算法好,我就特别留意考察会不会是这种“只磨刀,不砍柴”的人。

另外,虽然我个人不了解Google和MS,但我对于其特别重视考察算法能力的面试策略是持怀疑态度的。即使在这样的世界级大公司,算法虽然重要,但可以想象在项目实施过程所遇到的各种各样问题中,算法问题绝大多数时候不会是主要瓶颈,没有到那种需要每个人都是算法高手的情况。

实际上,绝大多数项目真正难点并不是一两个算法瓶颈,甚至也不是单点的技术瓶颈,而是系统性的组织、协调、设计、开发问题,有大量的看起来不是那么有技术含量的脏活累活,也有许多问题是由于信息不足,并不是技术能力强就能克服这些困难。一个团队最好优势互补,有人算法强,有人业务分析能力强,有人擅长后端服务,有人擅长前端界面,有人聪明,有人踏实,这是最好的。如果按照“算法好”的单一标准选材,必定会把许多优秀的人才拒之门外。

补充:在更多地了解了Google和Facebook等一流公司的面试细节之后,我对这个问题的认识有了一定的改变,实际上这些公司在面试过程中并不完全强调技巧性很强的算法,而是更加注重编码(Coding)能力,只是在进行编码测试的过程中往往是通过一些简单算法题来进行的。我对于这种面试方法越来越欣赏,并且也作为了我们公司面试过程中的重点环节,因为编码能力的测试是十分必要的,它有着知识性问题无法取代的作用,如果一个面试者连“判断一个字符串是否是另一个字符串的子串”这样的题目都无法正确并快速地实现,那么基本上可以直接排除了。我这里所强调的是不必考察高难度的算法问题,并非不重视编码能力测试,请读者不要误解。

5、技术深度

作为软件工程师,毕竟还是一个技术性岗位。不管你有多聪明,如果你的个性和主观意愿上决定了,你并没有在技术上钻研到一定深度的意愿或能力,那么公司派你冲锋陷阵的时候就要考虑一下了。毕竟就算对你来说是新领域,从互联网公司的需求来说,公司通常要你在最短的时间帮助他们提高产品技术水平,以便有机会能在残酷的市场上取得有利的竞争地位。并非公司没有耐心等你慢慢成长,而是外部环境、那些虎视眈眈的竞争者不允许。如果你个人没有追求卓越的习惯,不能在有限时间将你学习和掌握的技术钻研到足够的深度,那么公司将无法在残酷的市场竞争中生存,公司雇佣你、留住你的意义又何在?所以,我觉得公司需要的人才是这样的,他们有追求卓越的意愿,有独立探索、不断学习和自我进步的能力,他们哪怕从事的是全新的领域,只要给他一点合理的适应和探索的时间,他都可以做的比很多人、比其他公司更好。

6、代码

归根到底,程序员特别是基层是用代码说话的职业。我很难想象一个事业上成功的优秀的程序员,居然不能再面试中写出清晰、严谨、高效的代码。

我个人是建议算法题和代码题分开,最好混在一起。我的代码题一般重点考察两点:候选人的代码风格如何,包括函数和变量的命名,包括程序逻辑是否存在大量的冗余,包括一些个人的编程习惯如何;此外,还会考察候选人的程序逻辑上是否严密,对输入有无断言或正确性验证,对各种逻辑上的边界条件能否正确处理,特别是写好程序后有没有自我测试的过程,通过合适的测试用例验证程序的正确性。

即便对于那些面向基层管理职位和架构师职位的人我也是一视同仁的,在我看来没能力用代码说话的技术人员,是很难做好基层的项目管理、研发管理等职位的,除个别妖孽外我也很难想象一个没能力写好代码的人能做好架构层面的设计。归根到底,这一切都是相通的,是程序员的基本功,说的或许不贴切,但至少我没见过初等数学一团糟但微积分非常出色的人。

7、关于面试心态

这个嘛,小编以前在公司也面试过几个人,一半以上的面试者回答问题的时候都属于那种双腿发抖、声音颤抖的类型。在小编看来大可不必紧张,并且这绝对是扣分项!回答问题的时候最最基本的两个要求:

1、不紧不慢,平心静气

2、条理清晰

表达能力绝对是面试的时候重要的考察项目。咱们做的是程序员这一行,讲究的是团队协作,不是写作、画画,一支笔、一个人就行了,一个表达能力不行的程序员,要来又有什么用呢?

除此之外,就是保持良好的心态。古语说得好,只要功夫深,铁杵磨成针,面试的成功与否,在于平时的积累,临时抱抱佛脚,看两道面试题是没有用的,只要平时足够努力,成功是水到渠成的事情,平时不怎么研究技术的,那也就是个听天由命的事情,只要充分地展示平时自己的所学就可以了。


推荐阅读:

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除


路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部