被igt血虐,這些東西我真不知道答案,求知道的告訴告訴我:
今天去面試,進去了先做筆試題,題目不難,一些基本的,tcpudp協議區別,分層模型,strcpy實現,特大資料群組,取第十大的
筆試完了進去面試,英文自我介紹,說一個最熟悉的項目。
之後,悲劇開始了:
1:問題,你寫的strcpy有什麼問題?寫一個測試案例,怎麼設計測試案例?
我寫的strcpy:
char * strcpy(char* des,const char* src){if(des==null||src=null) throw "invalid argument";char* strdes = des;while((des++=src++)!='\0');return strcpy;
測試案例,輸入,簡單些一下,兩個字串分別是:
a:null b:null
a:null b:'abc'
a 'ab' b 'abc'
a'abc' b'ab'
總之就是這幾類的,面試官說,不行,有問題,再想
後來提示說參數萬一特別大怎麼辦?為什麼要返回char*?
我不知道什麼叫參數特別大,,,特別大複製啊會溢出嘛?
2:怎麼確定某程式讀寫,瓶頸在硬碟上還是cpu或者記憶體上。
控制變數我想的是,讓他們除了這個一樣。這個上過學的都知道。。。具體的沒做過所以不太會
提示,通過作業系統的過程去想,問作業系統怎麼和硬體接觸?
答:通過系統調用以及驅動程式的介面
問:對,再想.
答:不知道
答案,有一個system counter 之類的東西一直在記錄這個。
這個真的不知道。。。
3:一個特大的數組,找出其中第十大的數
答:裝入記憶體,不能裝入那就分區,之後建堆,扔掉前9個堆頂。
問:如何扔掉?
答:可以把隊頂隨便找一個分葉節點賦值之後調整堆。
問:如何分區?
答:按記憶體能的量
問:怎麼知道第十大的在哪一個片裡?
答:肯定不能直接判斷出來,分區之後分別建堆,之後因為堆頂是該片最大,可以先取兩層,片間比較,可以一定程度上減少次數。
問:堆是什麼資料結構本質上?
答:(我懵了,堆本質不就是二叉樹,父節點大於子節點的)說了之後它不滿意
問:堆是排序二叉樹
我囧。。。。
之後反正這個答案不滿意。。。
4:簡單的,兩數相加,考慮所有情況,寫測試案例
答,首先是重載不同方法,因為確定了是數字,所以無非幾種類型,檢測非法輸入,數字太大什麼的
問:(很明顯這時候他不滿意)
如何重載?數字太大了怎麼辦?
我:重載long double int 之類的,太大了截取,非法輸入報錯返回
問:(他的意思不讓我返回錯誤,一定要加出來個東西,之後說如果比double還大怎麼辦,我也不知道,因為他要返回而不是輸出,其實沒有變數可以承接我覺得,又不能返回兩個值,輸出的話我想用字串去分段加)
它說我沒考慮到的有,在32位64位機器上的問題,這個之前的strcpy也有。(我不知道c語言怎麼判斷機器,只知道彙編的有這麼個東西,具體忘記了)
後來他說輸入兩個字串加怎麼加,我說檢測非法字元先,進位轉換等等,字串拆分之後加,拆成int 大小的,高位想加再加進位。
它不滿意。。。笑著說你回去實現下試試吧。。。
然後我知道掛了。。。也沒啥別的問題,說了一堆廢話就走了。。。真心不懂啊。。。學的太爛了。。。
太晚了,明天再寫,,,