Posted on 2008-03-20 21:17
Fox 閱讀(4119)
評論(52) 編輯 收藏 引用 所屬分類:
G游戲編程
Author: Fox
昨天越俎代庖面試了一個家伙。
看完了他的筆試題目,感覺后背有點涼,但這些東西看看也就過去了,說實話,那些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%以上的相似度就可以了。當然,這樣說有點賤了。
畢竟,做游戲程序員(其他也差不多吧)需要的是:
帶著激情去編碼,帶著虛心去學習,帶著挑戰去交流,帶著壓力去工作。
激情,能讓你的思維滿具創意,代碼極其飄逸;
虛心,能讓你的知識不斷積累,從而達到厚積薄發;
挑戰,能讓你的團隊充滿活力,交流活潑嚴謹;
壓力,能讓你的心態保持平衡,勝不妄喜,敗不惶餒。
因為自己這兩周心態受到非智力因素干擾,日子過得有點渾噩。寫下來,主要是為了放松一下,也提醒自己。
不怕無知,但怕無畏。
-----------------------------------------------------------------
PS:補記于2008/03/26
還是把上午寫的一個mymemcpy放上來吧。里面沒有對des < src + len的重疊情況進行討論,因為大致google了一下,似乎很少人這樣做(倒不是因為不能實現)。
void *mymemcpy( void *src, void *des, size_t len )
{
?char *tempsrc = (char *)src;
?char *tempdes = (char *)des;
?size_t offset = len / 4;
?for( size_t i=0; i<offset; ++i )
?{
??*(unsigned long *)tempdes = *(unsigned long *)tempsrc;
??tempdes += sizeof(unsigned long);
??tempsrc += sizeof(unsigned long);
?}
?
?offset = len - len % 4;
?for( size_t i=0; i<offset; ++i )
?{
??*tempdes++ = *tempsrc++;
?}
?return des;
}
剛才想求證一下memcpy在地址重疊的情況下,是否會考慮從后往前copy的情況。結果看到云風的blog上很早的一篇文章,也是講memcpy的,角度不同。
我想澄清一點,我寫這篇blog的初衷只是總結幾個技術問題,因此就沒有把面試的前因后果講一下,反倒讓很多朋友誤解,以為我怎么怎么樣了。
事實情況是,這幾個問題都是本來的筆試題目當中的,面試的TX從上午10:00前后做到11:30過,等我和另一個同事13點過去的時候,我一直沒怎么說話。只是在一邊看他的簡歷和題目,文中已經說了,是看到他的簡歷之后才提的問題。當時是有10道左右的C++題目,他做對的其實只有一道。
而且,我在提問題的時候也都將問題跟他一起分析了的(除了memcpy之外),自我感覺說話還是很得體的,寫文章的風格是另一碼事兒。
我沒有絲毫瞧不起這位TX的意思,也完全沒有顯擺的想法。
PS
:忽然想到自己最近為什么癖性十足,因為最近在關注一個家伙的
Blog
,如果不侵權,我想用用他的
Blog
的名字《
不許聯想
》,作者是帶三個表的王小峰(《三聯生活周刊》記者)。所以,如果有人想拍我,建議先看看他的東西,學習一下措辭
J
。一個同事,說天涯也行,我個人覺得天涯有點相互吹捧的味道。
惡心,但沒有惡意
J
。