※ 引述《DarkKiller (System hacked)》之铭言:
: * 请列出 RDBMS 里的 JOIN 有哪些。
对于有 SQL 经验的工程师,或是有 Oracle 证照的人,我预期能够列出几种
JOIN 方式。
新鲜人的部份,如果有带成绩单的话我会看一下有没有修过数据库的课程,有
些人有打工经验有写过这类 SQL query 的也通常答得出一些。
讲的出的人大多都会讲到 LEFT JOIN (left outer join) 或是 INNER JOIN。
: * 请说明数据库里 Transaction 是做什么的。
有修过数据库课程应该要讲的出东西来,就算只讲 atomic 特性也行。
非社会新鲜人,有讲出 BEGIN 与 COMMIT/ROLLBACK 也行,大多都是会说明
atomic 的特性。
讲例子也可以,大多数用例子的人都是讲出“银行转帐”的经典范例。
: * Primary Key、Unique Key、Index Key 的差异
我的预期是讲得出“一个表格里面最多有一个 Primary Key”。或是 Index
Key 通常是为了效能而设置。
我有遇过有人讲得出 Unique Key 与 PK 的其中一个差异:允许 NULL 得字段。
: * 数据库的“正规化”做了什么事情?解决了什么问题?
有讲到 data dedup 与 consistency 都算大概有抓到重点。
1NF 答的出来的人大多都是做过系统分析与系统设计的人,算是他们吃饭工具
的一环。(SA/SD)
: * Stack 与 Queue 的差异?
这是热身,大概是大一或大二教的东西,你在白板上画个三分钟总知道谁是先
进先出。
: * Priority Queue (Heap) 是什么?
这是白板上把 Stack 擦掉后,把 Queue 前面加上 Priority 这个字,然后补
充说明如果不知道 Priority Queue 的话可以拿 Heap 说明。
我发现很多人知道 Heap (但是忘记在做什么) 但不知道 Priority Queue,所
以后来问问题的时候都会拉出来讲。
也的确有人知道 Priority Queue 却不知道 Heap。
也有人如同推文讲的,点出 Heap 是实作 Priority Queue 的一种资料结构,
这位其他也答的很不错,已经每个礼拜吃下午茶一阵子了。
: * Tree、Binary Tree、Binary Search Tree、Balanaced B.S.T. 的差异?
问这个最主要要知道大一或大二学的 tree 还记得多少,实务上我们有一些程
式在追踪程式效能时也有用到。
我的预期是至少要知道 tree 与 binary tree 的差异。
: * QuickSort 与 MergeSort 的差异?
这题如果答得出东西来当然很好,但我另外一个很重要想要知道的目的是,如
果你不会还是一直掰,我会有负面分数。
另外这题也是在看面试者的临场反应,有些人的确只记得 QuickSort 与
MergeSort 的名字,但已经忘记所有东西了。
但这些人会说他记得 BubbleSort 与 SelectionSort,然后可以透过算法推
导出 O(n^2) 的时间复杂度。
: * 九九乘法表。
: * isPrime(n)。
: * GCD(n, m) 与 LCM(n, m) (最大公因子、最小公倍数)。
我的预期是前两题应该要写的出来,即使有 syntax error 也没关系,重点是
把问题在脑袋里想出算法,然后转成程式试着实作。