(文中部分链接需要翻墙才能打开)
今年是 2015 年,在过去几年中,电面(电话面试)是筛选程序员职位候选人的最流行的方式。它让
雇佣双方很容易互相了解对方,候选人不需要去未来雇主的所在地,面试官也不用做额外的安排。这
是我介绍程序员面试问题的文章的第二部分。我得到反馈说第一部分过于偏重编码的题了,许多程序
员希望我针对电面问题列一个类似的列表。为了顺利通过电面进入下一轮,你必须足够好地回答与你
工作要求相关的全部问题。在大多针对 Java 和 C++开发者的电面中,你不仅会遇到相应程序语言的
问题,还会遇到其他技术的问题,比如 SQL、XML、UNIX、泛型编程、面向对象编程、数据结构与
算法、网络、编码以及工作的其他方面。由于程序员求职电面的多变性,你需要有特殊的技巧,以面
试官期待的方式展示自己。
要记住一件重要的事,在回答电面问题的时候,尽早提出关键点,总是给出关键性回答。由于面试官
的问题往往会覆盖很大范围的主题,他们更喜欢关键性回答,而不是“OK,我知道”之类的空话。在
面对面的面试中,你会有机会更深入地解释问题的。顺便说一下,这并不是固定的规则,根据面试官
对你的回答的反应,你可以了解到他期望得到什么样的回答。如果他进行追问,期望你多说一些,那
么你就应该多说。但如果他立刻跳到下一个问题,那么你就应该回答得清晰简洁。在这篇文章中,我
要和你分享一些常见的有趣编程问题,它们是针对电面改编过的。其中大部分都来自科技公司的电面
环节,包括 Barclays、Citi、Nomura 之类的银行,和 Infosys、TCS、CTS、Tech Mahindra 和 HCL 之
类的提供服务的公司。像我之前提过的,面试题是随机选的,但大部分是基于基础知识,因为那是面
试官在电面时想考察的。尽管这些问题大多数是针对初级开发者(2 至 5 年经验),高级和资深程序
员仍然可以把它们用作自己面试的题目。如果你是一名面试官,你可以用这些问题快速筛选开发职位
的候选人。我在此提供简短答案,并给出详细答案的链接。
编程岗位电话面试问答 Top 50
下面是几乎 50 道程序员电面题目的列表。这些问题可以用来考察任何程序员、开发者、软件工程师、
测试和运营工程师,因为它们是基于程序设计的基础知识的。但它们最适合程序员和开发者。顺便说
一下,如果你是 Java 开发者,并且在寻找 Java 电面题目,去看看那个列表。本列表更加普遍,适用
于所有的程序员,包括 Python、Ruby、Perl 和 C#开发者。
1. 从哈希表,二叉树和链表中取元素需要多少时间?如果你有数百万记录呢?
哈希表需要 O(1)时间,二叉树需要 O(logN) (N 是树中节点数),链表需要 O(N) (N 是链表中节点数)。
如果数据结构工作正常(比如哈希表没有或只有相对少量冲突,二叉树是平衡的),数百万记录并不
影响效率。如果工作不正常,那么效率会随着记录数上升而下降。
2. 覆盖(Overriding)和重载(Overloading)的区别是什么? (detailed answer)
覆盖在运行时决定,重载是在编译时决定。并且覆盖和重载的机制不同,例如在 Java 中,重载方法
的签名必须不同于原先方法的,但对于覆盖签名必须相同。
3. fork 一个进程和生成一个线程有什么区别?
当你 fork 一个进程时,新的进程将执行和父进程相同的代码,只是在不同的内存空间中。但当你在已
有进程中生成一个线程时,它会生成一个新的代码执行路线,但共享同一个内存空间。