> For the complete documentation index, see [llms.txt](https://tonyyipx.gitbook.io/interview/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://tonyyipx.gitbook.io/interview/bian-ma-mian-shi-zhun-bei/xuan-ze-bian-cheng-yu-yan.md).

# 选择编程语言

编程面试时应该使用哪种编程语言

你在编程面试中使用的编程语言重要吗？答案是肯定的。

大多数公司都允许你使用任何你想要的语言来编写代码 - 我知道的唯一例外是谷歌，他们只允许应聘者在算法编码面试中选择 Java、C++、JavaScript 或 Python。

然而，你所做的选择对你的表现的影响可能比你想象的要大得多——这就是为什么在编码面试准备的早期选择合适的编程语言并在实践中经常使用如此重要。

在决定使用哪种编程语言时，有 3 个考虑因素：

1. 是否适合接受采访
2. 你对该语言的熟悉程度
3. 例外

### ★是否适合接受采访

有些语言更适合面试——像 Python 或 Java 这样的高级语言提供了标准库函数和数据结构，让您可以更轻松地将解决方案转换为代码。

根据我作为面试官的经验，大多数候选人会选择 Python 或 Java。其他常见的语言包括 JavaScript、Ruby 和 C++。我绝对会避免使用 C 或 Go 等低级语言，因为它们缺乏许多标准库函数和数据结构，有些可能需要手动内存管理。

就我个人而言，Python 是我进行算法编码面试的实际选择，因为它简洁，并且拥有庞大的函数库和数据结构。Python 还使用一致的 API 来操作不同的数据结构，例如`len()`，`for ... in ...`以及序列（字符串/列表/元组）上的切片符号。获取序列中的最后一个元素是`arr[-1]`，反转它很简单`arr[::-1]`。您可以使用 Python 中的最少语法实现很多功能。

Java 也是一个不错的选择，但必须在代码中不断声明类型意味着需要额外的按键，这会导致更多的输入，而这不会带来任何好处（在面试环境中）。当你必须在现场面试期间在白板上书写时，这个问题会更加明显。选择/不选择 C++ 的原因与 Java 类似。最终，Python、Java 和 C++ 都是不错的语言选择。

* 推荐：Python、C++、Java、JavaScript
* 可以接受（但如果你熟悉的话，建议使用）：Go、Ruby、PHP、C#、Swift、Kotlin
* 避免：Haskell，Erlang，Perl，C，Matlab
* 你肯定疯了：Brainfuck、Assembly

### ★你对该语言的熟悉程度

大多数时候，建议您使用非常熟悉的语言，而不是仅仅为了在面试中使用而学习一门新语言。

如果你时间有限，那么仅仅为了面试而学习一门新语言绝对不是一个好主意。掌握一门语言需要时间，如果你已经把大部分时间和精力花在修改/掌握算法上，那么几乎没有多余的精力去掌握一门新语言。如果你熟悉使用一种主流语言，那么就没有必要仅仅为了面试而学习一门新语言。

如果你已经在工作中使用 Java 一段时间了，而且没有时间去熟悉另一种语言，我建议你坚持使用 Java，而不是为了面试而从头开始学习 Python。这样做，你可以避免在工作和面试期间在语言之间切换。**大多数时候，瓶颈在于思考，而不是写作**。在熟练掌握一门语言并能够轻松运用它之前，需要一些时间来适应。

学习一门新语言的正当理由：

* 面试需要使用该语言（特定领域的角色，如移动/前端/数据科学）
* 你不必急着开始面试

学习一门新语言的糟糕理由：

* 你面试的公司大量使用这种语言，而你想给面试官留下深刻印象/表明你适合
* 你想表明自己很时尚

### ★例外

允许你“选择任何你想要的编程语言”这一惯例的一个例外是，当你面试一个特定领域的职位时，例如前端/iOS/Android 工程师角色，你需要熟悉 JavaScript、Objective-C/Swift 和 Java 中的编码。如果你需要使用该语言不支持的数据结构，例如 JavaScript 中的队列或堆，也许可以试着问面试官你是否可以假设你有一个数据结构来实现具有指定时间复杂度的某些方法。如果该数据结构的实现对于解决问题并不重要，面试官通常会允许这样做。实际上，了解现有的数据结构并选择合适的数据结构来解决手头的问题比了解复杂的实现细节更重要。
