百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

程序员面试技巧:一起去面试,公司用他而不用你,注意这三个点

haoteby 2025-03-01 14:00 24 浏览

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

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

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

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

技术能力

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

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

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

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

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

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

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

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

沟通能力

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

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

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

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

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

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

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

问题解决能力

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

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

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

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

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

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

结束语

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

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

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

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

想要在程序员生涯内有更高的成就的话,C/C++就是一个既可以强化思维能力,又可以打好编程基础的编程语言,将来想要做软件开发,有一份好的前景的话,学习C/C++的话笔者有一个C/C++的编程俩千人羣(Q艘索:C/C++编程学习13)群,你如果感觉自学C/C++语言有困难的话,有兴趣学习或者了解一下C/C++编程的小伙伴就可以进来交流。


相关推荐

强烈推荐APP破解常用工具集合_强烈推荐app破解常用工具集合

抓包...

介绍一些网络安全工作中常用的三层发现工具

这里主要分享介绍一些网络安全中的三层发现工具,第三层网络扫描基于TCP/IP、ICMP协议,这类工具有这样两个优点:可路由速度比较快但是也存在比较明显的缺点:...

IPsec 中的IKE(互联网密钥交换协议)工作流程详解

IKE是IPsec的核心组成部分,如果说IPsec是负责给网络数据“上锁”(加密)和“验身”(认证),IKE则用于“商量怎么锁”,“怎么交换钥匙”的。它是IPsec的助手,负责密钥和安全规则的交换...

新浪微博、搜狗输入法曝漏洞:数据明文传输

IT之家(www.ithome.com):新浪微博、搜狗输入法曝漏洞:数据明文传输IT之家讯1月19日消息,近日安全软件McAfee在其官方博客撰文称新浪微博、搜狗输入法等存在安全漏洞,数据直接使用...

一张图理解网络的几个专有名词:数据、段、包、帧、比特

今天工作的时候刚好有客户对我说:“包”和“帧”有啥区别,你咋一会说“包”,一会说“帧”呢?太不讲究了!这说的让我有点脸红,工作中我们通常会把“包”和“帧“混着说,两者在大部分场景中都代表着相同的意...

作为程序猿,你有必要了解这些黑客工具

我们曾对黑客的世界充满着无限的幻想和畏惧,但随着技术的崛起和安全领域的进步,黑客技术已经变得越来越普遍。事实上,很多黑客工具被用于网络安全的工具可以用来进行渗透测试和安全测试,所以作为程序猿,很有必要...

安全课堂:工欲善其事必先利其器之kali工具使用篇

本课程主要讲解Kali里面的基本工具,包括NETCAT、WIRESHARK、TCPDUMP。作为安全从业者是必不可少的帮手,这些工具非常的强大,而且对日后的工作非常重要。1.NETCATNETCAT...

弱电入门工具集 | Wireshark 常用命令

Wireshark是一款网络协议分析工具,可以实时捕获和交互式浏览网络上的数据包。Wireshark特别强大,门槛也比较高,以下是Wireshark中的一些常用操作和功能,如果有兴趣,可以给我留言,...

嵌入式软件开发常用工具列举_嵌入式软件开发的主流技术

今天给小伙伴们介绍一下嵌入式软件开发中常用的一些软件和功用,希望对想要入门的小伙伴们有些帮助,正所谓,工欲善其事必先利其器,下面就为大家一一介绍。一、音频分析工具1.AdobeAudition是一...

测试工程师得力助手:Fiddler和Wireshark进行抓包对比(实战)

了解过网络安全技术的人都知道一个名词"抓包"。那对于局外人,一定会问什么是抓包?考虑到,大家的技术水平不一,我尽可能用非专业的口吻简单的说一下。抓包就是将网络传输发送与接收的数据包进行...

用Wireshark抓包看懂DHCP全过程,新手也能秒懂!

一、DHCP概述DHCP(动态主机配置协议)是一种网络协议,用于自动为网络中的主机分配IP地址、子网掩码等网络配置信息。它极大地减轻了网络管理员的工作量,是现代网络环境中不可或缺的重要协议。DHCP的...

记一次黑客攻击安全分析事件_黑客攻击案例

昨天某时,正吃完午饭的我,揉着眼睛打开态势感知平台准备日常划水,突然一个告警引起了我的注意,于是我“啪”的一下,很快啊,赶紧把相关告警进行溯源排查,一个小时后就生成了一份像模像样的安全分析告警溯源报...

使用windows自带的网络工具抓包_windows抓包wifi

1使用windows自带的网络工具抓包1.1windows下抓包过程1.2抓包文件分析在音视频领域,涉及到对接码流传输的各种问题,很多是通过抓包来定位,常用的抓包工具,windows下使用wir...

抓包神器 Wireshark,帮你快速定位线上网络故障(3)

回顾:TCP三次握手&四次挥手...

这年头, 普通人也该认识这些黑客工具吧?

(图片源于网络,侵删)PS:这些工具都可以去尝试一下,大家加油!随着安全领域的不断发展,黑客技术已变得越来越普遍。所以作为一名网民,真的很有必要了解甚至尝试一下这些开源的黑客工具,但是请不要将它们用在...