我一直想若是我是面試官,我會問什麼問題來考察應聘者的計算機基本功。寫這篇文章主要是作個記錄。git
在CSAPP(Computer Systems: A programmer's perspective,中文叫:深刻理解計算機系統)中,有對彙編的棧工做原理的詳細描述,這個底層的實現原理對程序員來講很是重要,算是一個基本功。程序員
好比swap爲何是不能直接交換兩個變量的,就能依靠這個基本功輕鬆解釋。在高級語言中的形參和實參,在彙編中到底是如何實現的。在這裏統統是有答案的。github
過程調用面試
void swap(int a, int b){ int temp = a; a = b; b = temp; }
經過%ebp+8
和%ebp+12
拿到swap的兩個實參(只有實參是實實在在存在內存中的,形參只不過是寄存器中實參的一個拷貝),在三個寄存器裏進行交換,卻並不寫回到實參。因此這個swap是無效的。ide
值、引用、值傳遞、引用傳遞、淺拷貝、深拷貝函數
這些都是指針方面的知識,能夠看看我寫的這部分:設計
Override是咱們常說的面向對象的重載,是真正的重載,子類重載父類的函數。這三個名詞中,實際上只存在兩種技術一個是多態,一個是函數簽名。code