背景介绍:我是后端工程师,不特别专精数据库。
目前离职休息三个月,最近比较少碰程式。
未婚妻不是资工人,但她的兴趣是逛论坛拿各种题目考我 XD
一早没睡醒就被她挖起来回答问题
除了1NF一时忘掉精确定义,只能说明正规化的概念
其他应该都自信有答对。
因此,我想以资工系背景来说,如果当初是选择花些工夫在基本功上,
尽管离开学校几年后,理论上都还能回答出来,算是很合理跟用心的面试题。
不过,晚上回来看到板上众多回应,也想分享几点看法
* 关于很多人觉得像联考
一言以敝之:我觉得联考般的笔试与面试有关键的差异。
考题是死的,考官是活的。
优秀的考官能从谈话中了解对方是死背还是活记。
对方答得极流畅时,有经验的考官总是能看出对方是死背还是真理解,
或者换个角度问个相关的应用问题,看看对方能不能正确的运用自己知道的概念。
即便对方答不太出来时,考官也可以选择从旁引导,
看看对方是不是知道概念但一时忘了定义。
以normalization及join为例,
大学时认真修过数据库(或认真自学)的话都会有个印象。
如果对方第一时间答不出来,但经过引导后可以讲出概念,也可能会算是不错的表现。
反倒是如果面试者的心态停留在面试题只有对与否,只有说对才过关,
这样才是真正停留在非黑即白的联考心态。
* 关于很多人觉得台湾业界用不到
DK大的例子大多是DB及资料结构的基础知识。
如果“台湾业界用不到”指的是:用不到这些底层、基础、细节的知识与概念。
甚至就连应征相关工作的人也不需要对其有更扎实地了解,
我觉得这是很堪虑的一件事。
这代表台湾的业界大多数在做一些表浅的软件工作。
做专案容易流于把现成技术兜一兜
而不去理解底层实作,运用算法及资料结构上等底层技术改善问题的解法。
别误会,我不是说表浅的软件工作不好。
市场上是的确需要这样的工作,也需要有人具备技术及管理的经验。
但整个业界都在做表浅工作的话,那就代表我们的业界很缺乏多元性,容易抑制不同方向
的创造能量。
而一个健康的产业是需要有各式各样的人做各式各样的工作
但人要正面思考,
所以我想不是台湾业界都不用到啦,至少DK大的公司就有用啊。
* 记起来或查出来?这是一个程度问题
所有工程师都必须承认,我们就是没办法记起所有领域内的知识。
但这不代表熟悉并内化领域知识不重要,
尽管还是会忘,真正了解的人其回复速度还是要快得多。
事实上,当你脑海里这些真正了解的东西越多,
通常就越容易找到贴近本质问题的解法。
写出来的程式架构也越简单,需要的程式码量也越少,
不容出易错。
(这边原本想举个例子来说明,但怕文章太长,我把例子放到下面,
如果有兴趣的再看,我想说的结论差不多也如上述了)
==例子分隔线例子分隔线例子分隔线例子分隔线例子分隔线例子分隔线==
在以下的例子中,我默认所谓的记起来,都是真的有一定程度的理解,
不是当成单纯背英文单字。
毕竟验证面试者究竟死背还是活记当然是面试官的责任。
你在线上游戏“鬼岛online中”实作一个“鬼岛无双”的游戏活动。
在15分钟活动内,维持每分钟都有杀人且越久不死的积分排名越高。
超过一分钟没杀人或被杀时移出排行榜并积分归零。
每个玩家随时可以看到自己前后五名的玩家积分。
(MMORPG通常是分布式系统,但假设“鬼岛无双”由一台server控管
其他server会把击杀event送到这台server处理)
(这当然不是一个精确的spec,只是粗略的例子)
把每次击杀记录放进用数据库吗?
但短短15分钟的活动不需要persistence,用数据库只是白白增加复杂度。
如果自己写code处理呢?
回忆自己知道的资料结构
或许可以找出更新排行榜O(N)或O(logN) time complexity的解法
仔细想想或许会灵光一现,LRU Cache和这个问题好像有点像
LRU Cache常用一个linked list+一个hash map实作
鬼岛无双也可以用一个linked list最后一次杀人时间的顺序。
再用一个hash map记住玩家ID与资料的对映(含linked list node pointer)。
与LRU Cache不同的是,再多用一个linked list记住排行榜顺序。
在这个资料结构下,所有排行榜的更新都可以在constant time完成。
(包含计算排名变动时,有哪些前后五名的玩家需要被通知)
好啦,这个例子可能有bug或不清楚的地方,请不要跟小弟计较 XD
但相信大家应该可以理解我想说什么。
把一个应用问题(鬼岛无双)化为正规的抽象问题。
思考各种可以应用的资料结构特性、时间空间复杂度是否适合解决这个问题。
试着在记忆中寻找表面毫不相关但本质相似类似的问题(LRU cache)取得灵感。
改变现有的方法以解决自己的应用问题,甚至从头构思方法。
这些能力都需要充足的基本功,在脑海中搜寻可用的知识。
而不是要用的时候再一一去查。
(至少google“鬼岛”“杀人”应该找不到LRU cache啦 XD)
就面试官或公司的角度而言,有时候期望的不只是找到单纯能接工作的人
而是潜力十足、有机会青出于蓝的人