作者:Fox 来源:博客园 酷勤网收集 2008-03-22
昨天越俎代庖面试了一个家伙。
看完了他的笔试题目,感觉后背有点凉,但这些东西看看也就过去了,说实话,那些C++的题目多少有点BT。
但我一直觉得DS的东西,如果你当初学的时候是很认真学习过并思考过的,其实是不需要去记忆的,所以我就问了一个关于稳定排序和不稳定排序的问题。我想,只要你理解了各种排序算法的思想,很easy。
只是这哥们儿忘记了什么是稳定排序,我还以为他把快速排序、堆排序当作稳定排序只是没记住。看来,老师从小教育的"一道题目你即使不会也要尽量去答"这种思想遗毒颇深。如果抱着这种思想做程序员,公司多半要垮掉。
想一想稳定排序的概念吧:两个同值元素(不知为什么,我一直记得严老师书上用的是49,看来我还是在读死书、死读书,最后可能会读书死L)在排序前面相对位置保持不变,即本来在前面的还在前面(所谓"尘归尘,土归土",看来最近思想有点消极,难怪没有激情L)。在想想各种排序的思想,我们很容易得到这样的结论:最普通的O(n2)的算法,一个一个从前比到后,自然不会影响到同值元素的相对位置,而O(nlogn)的算法,由于多路比较,可能导致本来相对位于后面的元素先比较和移动,造成不稳定。这样一想,自然知道简单的插入、选择、归并排序都是稳定的,而改进的高效率的算法则不稳定。
后面另一个同事在询问他做的Demo的事情,因为是DX的东西,我不懂,没插嘴,就随便看他的简历。
看到其中一项,有提到他曾经给大一、大二的学生做过C++培训。我本没打算提他笔试中的C++部分的,但既然曾经为人师表(因为我曾经做过学生、也做过老师),C++基础掌握到这种程度就不对了。尤其对于一个空的C++类默认生成哪些成员函数居然写的一塌糊涂(友情提示:你也不用BS他,如果你没有看过Lippman的《Inside of the C++ Object Model》,建议你先不要发言J)。
我一般对语言特性不太敢发表观点(因为我的C++基础不扎实L),但我对简单的算法或思想小有兴趣(没有你想象中那么高)。可是,笔试中唯一的一个需要coding的题目他又没写。我只好说,C++的东西你掌握怎么样我也不可以不看,但这个memcpy的实现,你怎么也得有点想法吧?不然怎么去写代码呢?刚好在面他之前,还和同事讨论过memcpy的问题(如果你给出one byte by one byte的实现会遭BS的J,因为你居然没有考虑过计算机系统本身的数据处理)。
本来还想问他一个关于sizeof()的问题,后来觉得也没什么必要,关于union的对齐,要按照单位最长的成员对齐这一点自己都觉得有点BT就算了。
其实,我想说的是,很多东西,你不能认为你掌握的很好(除非你真的掌握的很好),所谓很好,拿C++来说,就是把你认为你好的地方,你可以不翻其他东西,把它写下来,基本跟ISO C++保持90%以上的相似度就可以了。当然,这样说有点贱了。
毕竟,做游戏程序员(其他也差不多吧)需要的是:
带着激情去编码,带着虚心去学习,带着挑战去交流,带着压力去工作。
激情,能让你的思维满具创意,代码极其飘逸;
虚心,能让你的知识不断积累,从而达到厚积薄发;
挑战,能让你的团队充满活力,交流活泼严谨;
压力,能让你的心态保持平衡,胜不妄喜,败不惶馁。
因为自己这两周心态受到非智力因素干扰,日子过得有点浑噩。写下来,主要是为了放松一下,也提醒自己。
不怕无知,但怕无畏。
来自:http://www.cppblog.com/Fox/archive/2008/03/20/unwisdom_or_impavidity.html

