Coding interviews 应该用哪种编程语言
选择 coding interview 编程语言时需要考虑的因素
Coding interview 用哪种编程语言重要吗?答案是:重要。
大多数公司允许你用任何语言——我知道的例外只有 Google,他们只允许 Java、C++、JavaScript 或 Python 做 algorithmic coding interview。
不过,语言选择对你的表现影响远比你想象的大。所以在准备初期就选定合适语言,并在练习中持续使用,很关键。
选择语言主要有 3 个考虑点:
- 面试适配性
- 你对语言的熟悉度
- 例外情况
1. 面试适配性
有些语言天生更适合面试——比如 Python 或 Java 这类高层语言,标准库函数和数据结构丰富,更容易把思路翻译成 code。
以我面试官的经验,大多数候选人会选 Python 或 Java。常见的还有 JavaScript、Ruby、C++。我会强烈避免 C 或 Go 这类偏底层的语言,因为缺少很多标准库和数据结构,有些甚至需要手动内存管理。
我个人算法面试的默认选择是 Python,因为它简洁且库非常强大。Python 还提供一致的 API,用于不同的数据结构,比如 len()、for ... in ...、以及对序列(strings/lists/tuples)的 slicing。取最后一个元素是 arr[-1],反转是 arr[::-1]。用很少的语法能做很多事。
Java 也是不错的选择,但频繁声明类型会增加很多输入成本,却没有面试上的收益(尤其是 onsite 要白板写的时候更明显)。C++ 的优缺点和 Java 类似。总体来看,Python、Java、C++ 都是不错的选择。
- 推荐:Python、C++、Java、JavaScript
- 可接受(如果你熟悉可用,但优先推荐项):Go、Ruby、PHP、C#、Swift、Kotlin
- 避免:Haskell、Erlang、Perl、C、Matlab
- 你可能疯了:Brainfuck、Assembly
2. 你对语言的熟悉度
多数情况下,建议用你最熟悉的语言,而不是为了面试临时学新语言。
如果你时间紧张,为面试学新语言基本不是好主意。语言需要时间才能熟练,而你主要时间已经在刷算法,几乎没有额外精力去掌握新语言。如果你已经熟悉主流语言,没有强理由为了面试再学一门。
比如你工作里一直用 Java,又没有时间熟悉其他语言,那就直接用 Java,而不要为了面试临时学 Python。这样你也避免在工作和面试之间频繁切换。多数时候瓶颈在思考而不是书写。语言熟练度需要时间积累,才能在面试里流畅使用。
学习新语言的合理理由:
- 面试要求使用该语言(domain-specific 角色,如 mobile/front end/data science)
- 你不着急面试,有时间慢慢学
不太好的理由:
- 你面试的公司大量使用该语言,想给面试官留下好印象
- 你只是想显得很“潮”
3. 例外情况
一个常见例外是:如果你面的是 domain-specific 角色,比如 Front End/iOS/Android,你必须熟悉对应语言(JavaScript、Objective-C/Swift、Java)。
如果语言本身不支持你需要的数据结构(比如 JavaScript 的 Queue 或 Heap),可以问面试官是否可以假设存在某个具备指定时间复杂度的数据结构。如果该数据结构的实现细节不是解题关键,面试官通常会允许。现实中,懂得现有数据结构并选择合适的解决问题,比记住复杂实现细节更重要。