名企面试官精讲典型编程题
应聘者简历中如何介绍自己的项目?
参与
与 负责
如何回答为什么跳槽?
绝对禁止抱怨,不要流露负面情绪
。绝对不能出现以下理由:
技术面试中应展现怎样的专业素质?
应聘者提问环节?
公司未来五年的发展战略是什么
关于编程语言
以 C++ 为例,通常语言面试有 3 中类型。第一种是面试官直接问对 C++ 概念的理解,通常喜欢直接对 keywords 的理解程度。第二类就是面试官拿出准备好的代码,让应聘者分析代码的运行结果。这种题型选择的代码通常包含比较微妙复杂的语言特性。这要求应聘者对 C++ 的考点有着透彻的理解。第三类题型就是要求应聘者写代码定义一个类型或者实现类型中的成员函数。重点考察构造函数,析构函数和运算符重载。
关于数据结构
Array
和String
是两种最基本的数据结构,它们用连续内存分别存储着数字和字符。List
和Tree
是面试中出现频率最高
的数据结构。由于操作 List 和 Tree 需要大量的指针,应聘者在解决相关问题的时候一定要留意代码的robust,否则容易出现程序崩溃的问题。Stack
是一个与recursion algo
紧密联系的数据结构,同样queue
也是与广度优先遍历算法紧密相关,深刻理解这两种数据结构有助于我们解决很多算法问题。
关于算法
有很多算法都可以用 recursion 和 loop 两种不同的方式实现,recursion 实现的代码比较简介,用 loop 的效率会比较高。在面试的时候,可以根据题目的特点,甚至和面试官讨论选择合适的方法编程。
通常 sorting 和 search 是面试时考察算法的重点。在准备面试的时候,应该重点掌握 binary search, merge sort 和 quick sort 。
如果面试题要求在二维数组上 search path,那么可以尝试用回溯法
。通常回溯法
很适合用递归的代码实现。只有当面试官限定不能用recursion 实现的时候,再考虑用 stack 来模拟 recursion 的过程。
如果面试题是求某个问题的最优解,并且该问题可以分为多个之问题。那么可以尝试使用动态规划(Dynamic Programming, DP)
。在用自上而下的recursion 思路去分析 DP 问题的时候,我们会发现之问题之间存在重叠的更小的子问题。To avoid unnecessary computation, 可以才用自上而下的 loop 来实现,在实现过程中把 子问题的最优解保存在数组中,然后再基于子问题的最优解计算大问题的解。如果面试官提醒说在分解子问题的时候是不是存在着某个特殊的选择,如果采用这个特殊的选择将一定得到最优解,那么通常面试官这样的提示往往意味着可能适用与greedy algo
。当然,面试官也会要求应聘者证明greedy algo
最终可以得到最优解。
最后,Bitwise operations
可以看作一类特殊的算法。直接对二进制的0
或1
进行操作,掌握起来也不难,因为一共就有&
,|
,~
,^
,<<
,>>
六种操作。