乙個古老的面試題給我們的思考

2021-04-13 01:27:44 字數 1194 閱讀 5827

寫出程式的輸出結果:

public class a 

public void fun2(a a)   }

public class b : a 

public static void main()   }

結果是2,5,1,6。

這是乙個很古老的面試題,我當時在一家公司面試時也遇到了這個問題,當時我的結果是1,5,2,5。也就是最後乙個錯了,就這個問題

引起了我的思考,我覺得我在寫程式時忽視了乙個很重要的問題。那就是單步除錯的作用。

其實我們應該在寫程式時經常用一下單步除錯

,這樣能讓我們能更好地理解程式的執行過程,這樣就不會像很多網友說的做這個題做的頭疼。那麼現在來分析一下這個題目吧,

程式首先從main()執行;——>b b = new b();如果b中有建構函式就再去執行它。——>a a = new a();如果a

中有建構函式就再去執行它。——>a.fun2(b);到這時a中的public void fun2(a a)把b傳進去就得到b.fun1(1);fun1(5);程式就再跳到

b中public override void fun1(int i)得第乙個結果2,再執行fun1(5);跳到a中public virtual void fun1(int i)得第二個結果5

那麼a.fun2(b);就執行完了。再執行b.fun2(a);程式又會在基類中找到public void fun2(a a),得到a.fun1(1);fun1(5);

就會執行a.fun1(1)得到結果1,最後一點要注意,我先也錯過,這裡main()中是b.fun2(a);所以會跳到b中執行public override void fun1(int i)

得到結果6。所以結果是:2,5,1,6

所以我們在寫程式時不要想當然認為程式會怎麼執行,我們分析程式結果時一定要了解程式的執行過程,這樣就灰覺得很簡單

那麼我們不妨在寫完每乙個程式後都看看它的執行過程。這樣我們能更清楚地了解程式。

留個問題給大家吧:

public abstract class a 

public virtual void fun()  }

public class b: a 

public new void fun() 

public static void main()  }

看看程式時怎麼執行的,是先呼叫a的建構函式還是b的呢?

乙個面試題

題目是 假設乙個 搜尋引擎收錄了2 24首歌曲,並記錄了可收聽這些歌曲的2 30條url,但每首歌的url不超過2 10個。系統會定期檢查這些url,如果乙個url不可用則不出現在搜尋結果中。現在歌曲名和url分別通過整型的song id和url id唯一確定。對該系統有如下需求 1 通過song ...

乙個面試題

在不超過最右邊的數量的情況下任意組合,要求加起來不超過20280這個數字,但達成最接近的情況,現有一種方法為 1290 4 2990 5,差170,有沒有更接近20280的答案 資料如下 4900 13790 22990 5 意思是不能超過5次,但可以使用1次,2次,3次,4次,5次。2390 31...

乙個面試題

res fromkeys name password age print res print res print id res name id res password res name 666 print res 輸出 57496360 57496360 fromkeys 建立字典時,字典中所有的...