這是一道關于符號調試器實現原理的討論題。目的不是考察調試經驗或者調試器設計,而是想借助這個話題來考察候選人的計算機基礎知識和工作性格。一般這樣開頭:
有用過調試器吧?都用過那些功能?接下來和候選人探討調試器背后的實現原理,比如如何實現查看變量,查看內存,查看調用棧,如何實現斷點等。
選擇這個話題的原因之一是有話可說,幾乎所有程序員都有使用調試器的經歷;其二是絕大多數人都沒有親自設計調試器的機會,反饋出來的信息能反映候選人的真實水平。
好處之一,識別沒有鉆研精神的候選人
我理解很多工程師在生產活動中并不使用調試器,但是調試器基本上是初學編程階段的必備工具。在初學者眼中,調試器就像一個上帝般的存在,他和我們自己編寫的程序有很大的不同–他能窺探和操縱別的程序。很難想象一個對計算機軟件真正感興趣的程序員從來沒有考慮過這家伙背后的原理。
如果一個工程師從來不思考調試器的原理,那么他及有可能也不會去思考數據庫的原理,不會去思考操作系統的原理,甚至也不會去思考經常使用的某個第三方庫的原理。這些沒有思考過的地方都是他的知識盲區,導致他永遠無法有把握的編程。而且這種候選人有個對工程師來說的致命傷–缺乏主動探索的好奇心。通常進來有什么技能,出去還是那些技能。
好處之二,識別基礎知識有瑕疵的候選人
當我們討論如何獲取調用棧,如何查看變量時,真實的意圖是考察候選人對程序運行時刻環境的理解;當我們討論斷點的設計時,其實也是在考察類似于中斷/信號這種體系結構/操作系統方面的基礎知識。
這些知識是編寫靠譜軟件最最基本的知識,比數據結構還要基礎。搞不清楚調用棧布局的工程師無法理解局部變量寫越界后程序為什么飛到一個莫名其妙的地方,因此他很難真正理解安全編程規范;而理解了對象運行時形態的工程師不會無意識寫出故意和垃圾回收做對的代碼;有些工程師在軟件不能正常工作時只能通過不斷回退版本分析代碼文本來定位,沒辦法拿著core dump直接了當的分析問題,原因就是他腦袋里只有源代碼,沒有程序的運行時模型。換句話說他其實就是一個邏輯編程者,沒錯,這就是有人認為數學過關就能編好程序的原因。
實戰中的反饋
以下是面試過程中收到的一些反饋:
如果是嵌入式工程師,他們會講到JTAG的原理
如果是c/c++程序員,他們會聊到編譯原理,操作系統,處理器
如果是java或者python程序員,他們會聊到虛擬機,聊到運行時對象模型
下次招人的時候,我推薦你不妨也試試這把錘子。它未必能幫你發現優秀的程序員,但是能幫你識別不靠譜的程序員。
-
程序員
+關注
關注
4文章
956瀏覽量
30940
發布評論請先 登錄
解碼助聽器 B 端合作的 “靠譜密碼”
程序員最常見謊言
3秒響應、實時告警!智能井蓋如何成為城市安全的“第一道防線”?
不間斷電源(UPS):電力保障的“最后一道防線”
【精選直播】openDACS 2025 開源EDA與芯片大賽 賽題二 賽題四 直播宣講會
奔赴熱AI,碼力全開!Talkweb House@1024程序員日系列活動圓滿收官
開鴻智谷“以賽促學、以賽選才”|1024程序員節暨開源鴻蒙構建大會圓滿落幕!
SMA壓接接頭:壓接力度怎么拿捏?——小力氣,大學問,穩了才靠譜!
頂堅國產防爆手持終端如何成為石化企業安全生產的第一道防線
程序設計與數據結構
CY7C68013A無PID和VID,如何制作PDF?
零基礎入門:如何在樹莓派上編寫和運行Python程序?
怎樣用一道題識別那些不靠譜的程序員
評論