# 别再做一个“不会说话”的程序员! 脸书Tech Lead总结4大软件工程师面试技巧, 你都具备吗？

##### LaiOffer

Apr 22, 2021

不少人都会对软件工程师有不擅交流的刻板印象，认为他们大部分工作内容都是面对电脑，不需要考虑怎么提升交流能力。

其实对于软件工程师来说， **交流沟通能力是和硬实力同样重要的核心技能**。同时，面试官也格外青睐有优秀交流能力的求职者，不少公司都将 **“communication skill”** 列在了软件工程师岗位的必备能力中：

那么如何才能在面试中展示自己优秀的交流能力呢？来自 **Facebook的技术主管Sean Viswanathan** 就总结出以下几条程序员面试中的沟通技巧，让我们一起来看看吧。

_（以下内容节选自Sean的文章"How To Improve Communication During A Coding Interview"）_

## 1\. 让面试官知道你在干什么，"Think Out Loud"

不与面试官同步自己的想法和思路是很多面试者都会犯的一个错误。面试官不是监考官，他们不仅需要确认你有能力解出算法题，而且需要了解你做题的思路和逻辑。

想要确保面试官和自己思路同步，面试者可以使用亚里士多德的交流三步法：

- Tell them what you’re going to tell them（告诉面试官你即将用什么算法解决问题）
- Then tell them（详细解释你的算法）
- And then tell them what you told them（解释为何你的算法能够解决这个问题）

同时，面试者也可以通过时常询问 “请问我刚才解释清楚我的思路了吗？” 、“请问到目前为止有什么问题吗？” 来确保面试官和自己思路同步。

这样做也可以让面试官及时发现纠正你的错误，并且在你遇到困难时知道该如何给予帮助。

## 2\. 有逻辑地回答问题，避免思维过分跳跃

很多人在面试时都会犯一个常见错误，那就是思维“过分跳跃”。下面我们就用一个面试真题来举例，来看看面试者应该如何在面试中保持逻辑性。

> 面试问题：How to check if a tree is balanced？

要有逻辑的解决这个问题，面试者需要做到以下几点：

- Working through some examples（尝试举例分析）
- Discussing step-by-step process（一步步解释如何分析树）
- Avoid recursive case without explaining（避免在未解释的情况下跳到某个递归的情况）

如果你在思考时担心自己的思路还不够缜密有逻辑，你可以在白板（whiteboard）或文档（doc）中做笔记，并告知面试官自己需要几分钟的时间整理思绪。

有时候适当的停顿和思考可以帮助你理清自己的解题逻辑。

## 3\. 利用白板辅助回答，解题思路"可视化"

白板（Whiteboard）是在回答问题过程中清晰表达逻辑的利器。在线上面试中，我们虽然无法使用传统白板去展示自己的想法，但仍然可以借助一些线上的文档编辑器或画图工具，来将自己的思路“可视化”。

通过白板来展示思路，面试者就能写出更有逻辑、更清晰简洁的代码。同时，在编写代码的过程中，面试者还需要考虑到以下这些面试官会关注的要点：

- 你是否将一个冗长复杂的函数分解成了小的辅助函数？
- 你是否能通过连接每个小部分来解决一个大问题，还是会因为一些不重要的小部分而分心？
- 你是否花费太多的精力在无关紧要的信息上？
- 这段代码可以重复使用吗？它是一个通用算法吗？
- 你是否考虑清楚了用例和代码的环境？

## 4\. 谨慎衡量各种解题思路，权衡法与替代法

很多面试者在拿到编程算法题后，一有思路就开始埋头苦写，反而没有全面地去思考为什么选择这种解题方法，这种解法又最终会对结果造成怎样的影响。

在面试中，我们可以使用权衡法和替代法来从众多解题方法中做出选择。与其使用脑海中蹦出来的第一种解题思路，面试者需要先仔细思考一下是否有其他思路也可以解答这道算法题。

在想到两种或以上的解题思路后，再考虑这些思路的利弊，并根据实际的应用情景作出最佳的判断。

看完以上这些与面试官的交流技巧，你是否觉得自己的面试能力还有待提升呢？
