這是一道關(guān)于符號(hào)調(diào)試器實(shí)現(xiàn)原理的討論題。目的不是考察調(diào)試經(jīng)驗(yàn)或者調(diào)試器設(shè)計(jì),而是想借助這個(gè)話題來(lái)考察候選人的計(jì)算機(jī)基礎(chǔ)知識(shí)和工作性格。一般這樣開(kāi)頭:
有用過(guò)調(diào)試器吧?都用過(guò)那些功能?接下來(lái)和候選人探討調(diào)試器背后的實(shí)現(xiàn)原理,比如如何實(shí)現(xiàn)查看變量,查看內(nèi)存,查看調(diào)用棧,如何實(shí)現(xiàn)斷點(diǎn)等。
選擇這個(gè)話題的原因之一是有話可說(shuō),幾乎所有程序員都有使用調(diào)試器的經(jīng)歷;其二是絕大多數(shù)人都沒(méi)有親自設(shè)計(jì)調(diào)試器的機(jī)會(huì),反饋出來(lái)的信息能反映候選人的真實(shí)水平。
好處之一,識(shí)別沒(méi)有鉆研精神的候選人
我理解很多工程師在生產(chǎn)活動(dòng)中并不使用調(diào)試器,但是調(diào)試器基本上是初學(xué)編程階段的必備工具。在初學(xué)者眼中,調(diào)試器就像一個(gè)上帝般的存在,他和我們自己編寫的程序有很大的不同–他能窺探和操縱別的程序。很難想象一個(gè)對(duì)計(jì)算機(jī)軟件真正感興趣的程序員從來(lái)沒(méi)有考慮過(guò)這家伙背后的原理。
如果一個(gè)工程師從來(lái)不思考調(diào)試器的原理,那么他及有可能也不會(huì)去思考數(shù)據(jù)庫(kù)的原理,不會(huì)去思考操作系統(tǒng)的原理,甚至也不會(huì)去思考經(jīng)常使用的某個(gè)第三方庫(kù)的原理。這些沒(méi)有思考過(guò)的地方都是他的知識(shí)盲區(qū),導(dǎo)致他永遠(yuǎn)無(wú)法有把握的編程。而且這種候選人有個(gè)對(duì)工程師來(lái)說(shuō)的致命傷–缺乏主動(dòng)探索的好奇心。通常進(jìn)來(lái)有什么技能,出去還是那些技能。
好處之二,識(shí)別基礎(chǔ)知識(shí)有瑕疵的候選人
當(dāng)我們討論如何獲取調(diào)用棧,如何查看變量時(shí),真實(shí)的意圖是考察候選人對(duì)程序運(yùn)行時(shí)刻環(huán)境的理解;當(dāng)我們討論斷點(diǎn)的設(shè)計(jì)時(shí),其實(shí)也是在考察類似于中斷/信號(hào)這種體系結(jié)構(gòu)/操作系統(tǒng)方面的基礎(chǔ)知識(shí)。
這些知識(shí)是編寫靠譜軟件最最基本的知識(shí),比數(shù)據(jù)結(jié)構(gòu)還要基礎(chǔ)。搞不清楚調(diào)用棧布局的工程師無(wú)法理解局部變量寫越界后程序?yàn)槭裁达w到一個(gè)莫名其妙的地方,因此他很難真正理解安全編程規(guī)范;而理解了對(duì)象運(yùn)行時(shí)形態(tài)的工程師不會(huì)無(wú)意識(shí)寫出故意和垃圾回收做對(duì)的代碼;有些工程師在軟件不能正常工作時(shí)只能通過(guò)不斷回退版本分析代碼文本來(lái)定位,沒(méi)辦法拿著core dump直接了當(dāng)?shù)姆治鰡?wèn)題,原因就是他腦袋里只有源代碼,沒(méi)有程序的運(yùn)行時(shí)模型。換句話說(shuō)他其實(shí)就是一個(gè)邏輯編程者,沒(méi)錯(cuò),這就是有人認(rèn)為數(shù)學(xué)過(guò)關(guān)就能編好程序的原因。
實(shí)戰(zhàn)中的反饋
以下是面試過(guò)程中收到的一些反饋:
如果是嵌入式工程師,他們會(huì)講到JTAG的原理
如果是c/c++程序員,他們會(huì)聊到編譯原理,操作系統(tǒng),處理器
如果是java或者python程序員,他們會(huì)聊到虛擬機(jī),聊到運(yùn)行時(shí)對(duì)象模型
下次招人的時(shí)候,我推薦你不妨也試試這把錘子。它未必能幫你發(fā)現(xiàn)優(yōu)秀的程序員,但是能幫你識(shí)別不靠譜的程序員。
-
程序員
+關(guān)注
關(guān)注
4文章
954瀏覽量
30415
發(fā)布評(píng)論請(qǐng)先 登錄
CY7C68013A無(wú)PID和VID,如何制作PDF?
人臉識(shí)別身份核驗(yàn)終端,要看這個(gè)部分靠不靠譜

使用ADS1281的SPI采集數(shù)據(jù),各個(gè)引腳應(yīng)該怎么連接?
阿里云升級(jí)通義靈碼AI程序員,全面上線
TMS320C55x DSP CPU程序員參考補(bǔ)充

UCD3138A64/UCD3138128程序員手冊(cè)

機(jī)械革命發(fā)布CODE AI程序員本
Linux驅(qū)動(dòng)程序程序員指南

評(píng)論