如果能多了解一些面试的基本知识,可以帮助你在面试中对自身有更准确的定位,并且能提升你的面试技巧。

作者 | edA‑qa mort‑ora‑y

译者 | 苏本如,责编 | 郭芮

出品 | CSDN(ID:CSDNnews)

以下为译文:

由于不知道面试官对面试者的衡量标准,许多我曾面试过的候选人在面试中表现得差强人意。虽然不同的面试官有自己不同的衡量标准,但这些标准间也存在一些共通之处。如果能多了解一些面试的基本知识,可以帮助你在面试中对自身有更准确的定位,并且能提升你的面试技巧。

我在interviewing.io(译者注:美国一个在线技术面试平台)上会根据三个方面来评价面试候选人的表现。我认为这三方面基本代表了各家公司对你的评价的依据。即便这三方面的能力没有在面试中直接被考察,它们也会影响面试官对你的总体评估。

  • 问题解决能力

  • 技术能力

  • 沟通能力

虽然我需要对以上每一种能力分别评分,但这三个方面的能力其实是紧密地联系在一起的。如果一个候选人缺乏其中的一项能力,他往往也会欠缺另外两方面的能力。让我们一起看看每种能力都有什么独有的特征。

问题解决能力

问题解决能力是从代码编写中体现出的一种抽象的能力。我想了解你编写代码的整个过程,而非仅仅是一个结果。这就要求你知道问题是什么,以及对何种有效的解决方案会被我认可有着清晰的认识。解决问题的关键很大部分在于定义约束条件,找到模糊或不确定的地方,并加以解决。

不同问题设置的挑战也不尽相同。例如我的纸牌游戏问题2要求你编写一个小型的仿真游戏。我想看到的是你如何解决问题,我还想看到的是你会提出问题。例如“纸牌”到底是什么,你又会用什么代表它?“发牌”又具体是什么意思?

解决问题的关键在于接收到高层次的需求并将其转化为具体的步骤。如果你正在做一个项目,那么问题解决的阶段就是你编写用户故事和用户旅程的阶段。你不一定要在面试中很刻意地体现这个阶段,但我想知道你是否对要求有所了解。你得告诉我你的想法并写下其中的重点。

你需要展示出解决问题的时候你的输入和输出内容分别是什么。你需要说明你是在转换数据还是实施一个流程。你还需要描述你是如何将大问题分解为较小的问题的。就一个算法问题来说,你需要指出所应用的相关算法,并告诉我如何让它们适用这种新情况。

你要明确你识别出了哪些部分,以及它们与你之前所做的有何相似之处。如果有一块白板,请你在上面勾画出流程、数据集和你想到的任何其他内容。尤其当你遇到难题的时候,我想知道你是如何解决这一难题的,永远不要只是沉默而茫然地盯着我。我在这里是为了向你提供帮助,但是如果我无法理解你的思考过程,那么我将无法帮助你。

另外,绝对不要将解决问题视为一个阶段。我并不指望你在面试开始时就能提出完美的解决方案。但我想看到的是,你产生了一个想法并将其付诸实践,这其中可能会产生问题,需要纠正。我甚至会更改对你的提出的需求,或者批评你的方法,但我希望你能接受这些改变并适应它们。

技术能力

我对应聘者的技术能力主要考量两个方面。第一是你在编码习惯用法和知识方面的经验,你是否知道什么是可能实现的,以及如何对其进行编码?第二是具体的语言能力,当你明白了你想做的事情后,你能用你使用的编程语言把它实现得多好。

第一方面是关于你的一般编码知识。你是否了解数据结构,程序流程以及编程语言能够执行的所有操作?这些知识就像是你的工具箱,会影响你解决问题的能力,而你的编程设计是否有效,则取决于这些工具是否可用。

我在这里会根据应聘者的犹豫程度或是否快速回应来评估他们。但我并不是在评价速度本身,而是会将速度作为候选人对自己工具的熟练程度的指标。我同样会听你的表达方式,看看你的声音是信心十足,还是带着疑问需要向我寻求肯定。

第二方面是考察你对具体编程语言的语法和语义的了解,这与第一方面联系极为紧密。因为我是主要通过观察你是如何在代码中表达自身想法,从而了解你对一般编码知识的掌握。如果你需要费尽心机才能编写出一个循环,那么我需要确认这是因为你不懂编程语言,还是你不确定循环应当如何应用于这个问题。

我会考量你是否有能力将你的想法顺畅地转化成代码。以我的纸牌游戏问题为例,有一个阶段是处理发牌,在这一阶段中你必须将纸牌分成两叠,每个玩家一叠。无论你是选择使用循环,还是高级拆分功能,你都应该能够顺畅地编写出这段代码。如果你编写了错误的代码、忘记了循环的工作原理,或是使用了错误的拆分语法,都会导致面试官对你产生负面的评价。

我不会因为一个人犯错而惩罚一个应聘者,因为错误总是会发生。但是,若是出现相似的错误,或重复出现同样的错误,会让我认为你缺乏相应的知识。如果我发现了一个错误,我可能会忽略它,也可能会就这一代码错误向你提问。如果你能够认出自己的错误,会让面试官对你的能力做出正面评价。

编程语言有很多特性,而我会考量你是否能够恰当的使用它们。例如你是否在使用枚举和常量?你是否能够创建一个结构来封装值?你是否通过值或引用正确地传递了变量?你是否使用了标准错误机制?

我不期望应聘者能够了解所有与编程相关的知识,但我希望他们可以了解所有的基本知识。对于自称对使用某编程语言有经验的应聘者,我会考察他们一些常用的习惯用法。例如,在Python语言中,我会考察他们对列表解析(list comprehension)和字典的使用。在C ++语言中,我会考察他们对智能指针和(可能)lambda函数的了解。如果一位应聘者的代码中没有任何常用的编程语言习惯用法,那么他很可能并没有使用该编程语言的经验。

沟通能力

正确地把你的想法表达出来能确保我对你做出准确的评价。有的应聘者做不到这一点,他的表现就会劣于其他候选人。表达流畅能提升我对你的沟通能力的评价,同时也确保面试进行得更加顺利,并有助于你准时写完代码。

如果你在面试中写的代码中有些错误,良好的沟通也能为这种错误起到缓冲作用。如果你仅仅写完代码,那我就只能通过代码来衡量你的能力。如果你与我沟通自己是如何写这段代码的,即便这段代码写错了,我也能理解你的思路。

但你的沟通方式如果是仅仅把所写的代码念给我听,那将毫无裨益。我自己也能看代码。你应该把沟通的重点放在代码中无法体现出来的,编程者在代码背后的思考。有许多应聘者知道在面试时应该多沟通交流,但我觉得他们不知道应该说些什么。因此他们最终选择直接再念一遍自己所写的代码。你要学会和他人分享你写代码时的思路,但这需要多加练习。

注意使用编程术语。你应该知道如何使用行业术语来谈论软件。你的编程术语会透露出你的经验是否充足,也会表现出你对细节的关注程度。我想要听到具体的东西,比如实例变量、常量值和使用参数调用函数。我想听到你说“从堆栈中取出数据和枚举一个Map中的所有元素”,而不是听到“用这个东西做这个”之类的话。

我也不想听到你在面试中使用时髦术语。也不要使用一些你不懂的专业术语,或对一些专业术语不懂装懂。不诚实是面试中的一大危险信号,不要以为你能侥幸逃脱不被面试官看出来。我和那些在人力资源部门工作的大多数人以及做过大量招聘工作的许多程序员一样,都很擅长发现胡话连篇的人。

你不需要担心自己有很多不懂的东西。我会根据你的经验和水平来调整对你的预期。初级程序员没有接触过很多概念是很正常的。你需要保持开放的心态,做个诚实的人,并保有好奇之心。然而,我对一个有十年以上工作经验的面试者的心理预期会更高。

面试是一个互动过程,良好的沟通可以让我们处在同一频道上。不良的沟通往往会导致我对你解决问题的能力和编程能力产生误解。我越了解你的想法,就越能帮助你解决问题。

结束语

一般来说,缺乏沟通技巧或解决问题的能力会导致应聘者的面试失败。我想不到有什么公司会想要雇佣一个缺乏这两种能力的人。当然在某些特定情形中,也许会聘用一些缺乏这两种能力但具备某些冷门技术的人。但即便如此,你也需要和其他候选人竞争。

还有一些人虽然可以编写基础代码,但是无法把已掌握的知识融会贯通地应用到新情况中。他们看上去掌握了一种新的方法,但其实并不理解这种方法背后的逻辑。我不能保证我在面试中根据观察到的情况从而对应聘者产生的印象都是正确的,所以应聘者在面试中充分地展示他们的能力是非常重要的。

你可能想知道如何在面试中展示自己的这些能力。显然,要提高其中任何一种能力都需要不断的练习和学习。但是要在面试中全部展示出来则需要平衡好。不要让你的脑子陷在代码中,要表达出你的想法,这是展示你的知识储备和问题解决能力的关键方法。不要担心会暴露你的知识的局限性,相反,要开诚布公,展示你是如何解决问题的。多和面试官交流。也可以利用白板来进行图示。

你要清醒地意识到自己被评估,从三个主要方面:解决问题能力、技术能力和沟通能力。

原文:https://dev.to/mortoray/how-i-evaluate-you-in-a-code-interview-42hh

本文为 CSDN 翻译,转载请注明来源出处。

@程序员,如何在编程面试中脱颖而出?相关推荐

  1. 在这个天上掉块馅饼都能砸死10个程序员的年代,程序员该如何在面试中脱颖而出...

    本文为原创资源,欢迎分享,转载. JAVA开发大本营 前言:在这个遍地培训班,程序员已经过剩的年代,又恰好遇到互联网寒冬,天上掉个馅饼,都能砸死10个程序员.大量的公司进行裁员,但是也有一部分公司在进 ...

  2. mopso算法代码程序_JAVA程序员的必杀技,面试中常考的8个经典算法题,过程精妙,代码精炼...

    总有一些题,超越了岁月,即便是经过了新框架的层层迭代,它依然散发着令人回味无穷的味道.下面的几个笔试题目,是JAVA面试中经常遇见的,大家一定要牢记于心,可别复习到了到时候又说不出来.我就吃过这种亏, ...

  3. 程序员的数学课22 面试中那些坑了无数人的算法题

    前面的课时,我们学习了"代数与统计""算法与数据结构",至今这门课程的主体知识已告一段落,下面我们进入彩蛋环节,我会向你介绍两个应用到数学的场景,第一个是求职面 ...

  4. 编程面试中的十个常见错误

    身为程序员,你肯定知道和其他技术工作面试比起来,编程工作的面试流程略有不同. 这篇文章会就你在编程面试中应当避免的10个问题展开讨论. 1.从未在纸上或白板上写过代码 这是求职者最容易犯的大错之一.绝 ...

  5. Java程序员跳槽涨薪面试心得

    面试候选人的时候,有个比较常见的问题:对于一份工作,你最关注哪些因素?回答往往是薪资待遇,公司氛围,公司发展前景,工作强度等.个人比较欣赏的答案是:个人能力的成长.想收获一个薪资好,公司发展前景好的工 ...

  6. 只有程序员看的懂面试圣经

    技术圈 只有程序员看的懂面试圣经|如何拿下编程面试 http://www.epubit.com.cn/article/197 当我最初开始参加编程面试的时候,我所有最心仪的公司都忽视了我.现在回头看那 ...

  7. 程序员糗事--爆笑中====

    程序员糗事--爆笑中==== 似乎任何职业都会给从业人员带来这样那样的习惯.国外某网站上有位朋友(应该也是程序员)想了解其他程序员在投身堆码事业后有什么样的坏习惯.结果一呼百应,很多程序员纷纷自爆自己 ...

  8. 静态方法与非静态方法的区别_程序员必看之ThinkPHP5中model与Db的区别

    在ThinkPHP5的使用过程中,很多使用者刚接触到数据库操作时,不能很好调用相关的方法进行数据库的交互.下面就分享一下ThinkPHP5中Db与模型的区别 关于db与model的选择 使用DB方式是 ...

  9. 程序员如何面对 HR 面试的 40 个问题

    转载自 程序员如何面对 HR 面试的 40 个问题! 讲一个身边朋友亲身经历的故事吧. 一个技术非常牛的朋友去阿里面试,成功通过了几轮技术车轮战,最后躺在了 HR 面上...所以,尽管你技术再牛逼,你 ...

最新文章

  1. 【青少年编程】【二级】货运飞船
  2. MyBatis总结与复习
  3. sql语句技巧,不敢独享,特此呈上
  4. 何时将空间编码为加号(+)或%20?
  5. 服务器系统都是64位的吗,云服务器32位跟64位的区别吗
  6. 对于ACCESS跨库的一些研究
  7. vue防重复点击(指令实现)
  8. mysql enum_MySQL数据库中关于ENUM类型的详细解释
  9. 利用微服务构建现代应用(一)
  10. 虚拟DOM - React的骨干
  11. ZedGraph属性(转)
  12. ZUST-CCCC选拔赛(L1,L2部分题解)
  13. 【渝粤教育】电大中专跨境电子商务理论与实务 (30)作业 题库
  14. 对于制造企业来说,APS的价值在哪里?
  15. java求解一给定数字的二进制表达中的1的个数
  16. 力扣 1818. 绝对差值和(中等)
  17. excel查找出某一列的重复数据
  18. 实时竞价RTB广告平台_传漾科技_中国领先的智能数字营销引擎
  19. 张德芬 如何自我成长
  20. 可编程中控 c 语言,可编程中控是什么?如何应用?

热门文章

  1. 《C++沉思录 第2版》
  2. 基于visual Studio2013解决C语言竞赛题之0204实数求值
  3. SQLite字符串拼接
  4. [Python] Numpy Learning
  5. Numpy np.where()的简单用法
  6. leetcode python3 简单题119. Pascal's Triangle II
  7. SQL实战之查找所有员工入职时候的薪水情况
  8. JMeter性能测试-安装与入门
  9. linux那个系统支持开发,求问如何确定centos支持哪个版本的gcc
  10. 用计算机来控制飞船在太空中运行,神舟飞船在太空中靠什么动力运行