剛看到一個暴強的面試,轉一下。
A:請寫一個檔案拷貝函數。
Q:你說的“拷貝”是什麼意思?A:嗯。。。。就是把一個檔案的內容拷貝到新的檔案Q:考不考慮日期/時間?A:不用,那些不用被拷貝。Q:目標檔案可以和源檔案同名嗎?A:嗯。。。不行Q:那我不用擔心假名攻擊(name spoofing)?比如說土耳其語的I。(注意哈,土耳其語的I有四種寫法,和英語的I相似而不同)。A:不用擔心。Q:檔案屬性呢?A:新檔案和老檔案的屬性一樣Q:那我應該修改老檔案的屬性嗎?如果這個拷貝操作時備份或者存檔操作的一部分,那可能不應該保留’Archive’這個屬性。A:不用,保持原樣就行了。Q:那萬一源檔案的’Archive’屬性被關掉了呢?如果新檔案的這個屬性也被我關掉,可能會搞壞使用者的備份軟體。A:就讓它們一樣。我不在乎使用者的備份軟體。Q:這樣為
使用者設計軟體好像不好吧?A:。。。Q:檔案壓縮怎麼辦?這是個檔案屬性,但拷貝目的地不一定支援壓縮。A:不用管檔案壓縮。Q:哪怕源檔案被壓縮了,而拷貝目的地不支援壓縮?A:對頭!Q:那加密呢?如果源檔案被加了密,而拷貝目的地不支援加密?A:如果目的地不支援加密就不要加密。Q:哎呀不好意思,我不是想岔開話題。不過。。。這樣不是很大的安全隱患嗎?特別當這個檔案拷貝函數支援任意多個參數的時候(直接或者間接)。A:靠!他媽的把檔案拷貝過去就行了!Q:建立檔案的使用者呢?A:不用管。Q:那檔案的所有人呢?A:不用管。Q:那檔案許可權呢?有沒有啥麼方法來處理繼承的許可權和賦予的許可權?A:不要管許可權了。Q:那這個函數會在什麼系統上運行?A:Windows XPQ:Home, Pro, Media Center,或者多於一個版本?A:ProQ:哪一個Service Pack?A:SP2Q:也就是說我們不用支援其它的Service Pack?A:對阿Q:咋個提供源檔案名稱?A:用參數傳進去。Q:那則個參數十一個以null結尾的字串,一個計數的字串(學Pascal的都知道哈),還是一個對象?A:以Null計數的字串。Q:Null指標可能被傳進去嗎?A:不可能。Q:那檔案名稱的編碼呢?A:Unicode。Q:不好意思,這個這個。。。Unicode不能算編碼。如果我們用Unicode資料,我們必須知道具體的編碼,比如UTF-8, UCS-2, UTF-16,等等。A:你夠狠!UTF-8。Q:好嘛。我只是想說把UTF-8轉換成UTF-16,好讓Windows API調用工作,還是有點痛苦的。A:射!UTF-8!Q:Big-endian還是small-endian?A:啊―――隨便你丫的!Q:那我們接受相對路徑還是絕對路徑?A:就絕對路徑。Q:那些路徑有沒有什麼需要過濾的特徵?A:沒有。使用者自己搞定。Q:怎麼產生目標檔案名?或者使用者提供?A:。。。Q:要不要(或者允不允許)我提供非同步拷貝操作?A:不。Q:我該怎麼報錯?Exception?Error code?A:隨便。Q:我是該在被調用的函數內部處理錯誤呢,還是把錯誤傳給調用者?A:嗯。。。傳出去。Q:如果目標檔案已經存在怎麼辦?A:不會的。Q:也就是調用人確保這點?A:對。Q:也就是說如果目標檔案的確存在,我可以立刻終結程式運行?但這個明顯違背了前置條件,而且鬼才知道會出什麼問題。A:射。隨你丫的。Q:那輪換資料流呢?A:隨便你!!Q:老大,我真地不好意思,如果你覺得被我挑釁了。不要生氣哈。我只是想在動手前得到一個清晰完整的規格。很明顯如果我要寫一個檔案拷貝函數,而不是用各種庫裡現成的檔案函數,這個新的函數需要滿足某套特殊需求,所以我需要知道那些問題的確切答案。如果你無所謂,我可以在一分鐘內整出一個函數來,但肯定有很多問題都沒有解決。A:啊!!!!!!!!!!!!!!!!!!!!!!!!