Re: [闲聊] interview 心得

楼主: yzugsr (miaout17)   2014-08-02 19:18:24
背景介绍:我是后端工程师,不特别专精数据库。
目前离职休息三个月,最近比较少碰程式。
未婚妻不是资工人,但她的兴趣是逛论坛拿各种题目考我 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)
就面试官或公司的角度而言,有时候期望的不只是找到单纯能接工作的人
而是潜力十足、有机会青出于蓝的人
作者: kkdlin (kkdlin)   2014-08-02 19:26:00
作者: LetDogDay (推动世界让狗日~~)   2014-08-02 20:58:00
作者: stonehomelaa (清新、健康、专业)   2014-08-02 22:23:00
小错字 不需要presistance => persistence
作者: lovdkkkk (dk)   2014-08-02 22:35:00
例子的部份我觉得比较像 #1Jt8xivt 的考法OO 问题 -> 可以用 XX, YY + ABC..., 问题 -> 解法这样不过擅常这种的, 不见得擅常 "XX 跟 YY 的差别" 这种问题(甚至可能反而更不擅常...)"广、多、实测、活用" 与 "熟记、深入细节"有一定程度上的冲突
作者: chrisyanglom (澎澎)   2014-08-02 22:44:00
推这篇 很多人觉得工作用不到的,或许是真的不需要但也有可能你从来没有仔细想过是不是可以用到这些东西去改善自己的程式 其他很多领域也是一样当一个人心存反正用到再去查的时候其实也有可能代表真正要用到的情况他却没有想到可以这样用真正看重的不是一个员工会不会implement某个资料结构而是他是不是能在适当的时机想到要用哪个结构但如果还需要google才知道这些结构是什么我觉得应该很难自己判断何时需要用
作者: lovdkkkk (dk)   2014-08-02 22:51:00
我觉得前面讲估狗的指的是很细节的部份就是例如排序, 知道有 quick 跟 merge 比较快但是两者差别不是很清楚这种至少我是这个意思, 之所以提到没学过去估狗也很快是强调对没学过的人来说都不难, 学过只是忘记的人回熟更没问题
作者: chrisyanglom (澎澎)   2014-08-02 23:01:00
所以说有实力的面试官应该要能分辨得出是不是死背的另外如果真的理解的人,面试前花点时间准备一下也不会太麻烦吧,就像我们也要整理履历自传一样如果只知道quick、merge比较快,再问下去却都不知道反而容易让人怀疑是用背的,不是吗?
作者: lovdkkkk (dk)   2014-08-02 23:05:00
嗯嗯, 对, 知道方向的话有复习应该就 ok 才对疴, 不过那是我都没复习下最记得的事耶 XDD
作者: chrisyanglom (澎澎)   2014-08-02 23:07:00
哈哈,我好像也是,面试突然被问到如果又有点紧张我也不确定是不是能马上想起来可是话说回来,我认为比我厉害的那些高手我觉得有可能不需要准备也能从容回答,因为他们已经可以运用自如了,就像公共汽车搭久了就不用特别查时刻表所以关键还是能不能判断出是死背还是真的懂XD
作者: pest (这些分钟妳有没有想过我?)   2014-08-02 23:14:00
作者: greatroy (没有暱称)   2014-08-02 23:24:00
每每看到这类讨论,总觉得台湾的软件业其实是很有希望的但不知为何,我们遇到的国内软件厂商却完全不是这么一回事...一家号称国内前几大的软件公司,却连支转档程式写了半年到现在都快8个月了,还不时出现问题...希望各位有志之士,有机会的话可以留个名合作,省的老是遇到这种XXX的厂商.
作者: chrisyanglom (澎澎)   2014-08-03 05:24:00
因为大学时认识资工领域最强的几个朋友几乎都出国了
作者: michaelz   2014-08-03 19:20:00
这更新得要O(n)吧 constant time应该不行
作者: stonehomelaa (清新、健康、专业)   2014-08-03 22:34:00
资工的强者大多不是出国就是去ic design
作者: bleed1979 (十三)   2014-08-04 03:42:00
map查询插入时间复杂度。。。 这个map实作是用那种DS?
作者: lovdkkkk (dk)   2014-08-04 08:13:00
这分数怎么算啊, 看起来规则好像变了 @@变成越接近最后一瞬间杀人的排名越高
作者: FukadaKyoko (小毛哥)   2014-08-04 14:33:00
推 没用到不代表用不到 只是问题深浅的差异
作者: kimmyariel (Davy)   2014-08-04 23:35:00
推...

Links booklink

Contact Us: admin [ a t ] ucptt.com