面試那些事兒

2021-09-01 04:47:20 字數 669 閱讀 8548

這是一道坑人的面試題,看**:

package com.sprone.classloader1;

public class classloader1 

}class singleton

public static singleton getinstance()

}

列印結果是什麼?把code1 的** 剪下到code2 結果是什麼?

答案:1,0  剪下後1,1

載入:查詢並載入類的二進位制資料

準備:為類的靜態變數分配記憶體,並將其初始化為預設值 比如private static int a = 3;在準備階段分配內

存設定為0(int的預設值) 

解析問題1:物件對應的class什麼時候產生的? 假設是執行時,可想而知,jvm效率如螞蟻,jvm團隊也不會再執行時的時候才去生成class物件,在我們編譯之後.class檔案裡面都編譯好了,每乙個物件對應都有乙個class物件,而這個class在位元組碼檔案解析,為我們提供了一些生成物件的介面,我們常用的反射**的生成都是在編譯的時候生成的。

靜態**塊順序執行 a沒有賦值,在準備階段給其預設值。執行完code1 的時候 a為1; 繼續下面的**塊,後面沒有賦值,a=1,而b有重新賦值為0;

剪下後,new在後面 最終的值是在構造方法,所以都是1

鏈結那些事兒

鏈結,就是將不同部分的 和資料收集和組合成為乙個單一檔案的過程,這個檔案可被載入到儲存器中執行。鏈結可以執行於編譯時 compile time 也就是源 被翻譯成機器 時 eg.普通的鏈結器鏈結,以及靜態鏈結庫,由靜態鏈結器鏈結 也可以執行於載入時 例如動態鏈結庫的載入時鏈結 也可以執行於執行時 r...

指標那些事兒

1.野指標 也叫懸擺指標,迷失指標 野指標是導致bug的罪魁禍首之一。對指標呼叫delete後 釋放掉了它指向的記憶體,野指標還是指向原來的位址 如果沒有重新賦值就使用它,將導致難以預料的後果。因為此時操作野指標,它指向的記憶體位址可能已經分配給其他變數在使用了。所以指標在delete之後,如果不再...

遞迴那些事兒

include include include include 求階乘 int fac int n if n 1 求累加 int add int n 求字串長度 int my strlen const char dest int main 遞迴注意事項 遞迴雖然經典,但是也有他的缺點 第一 遞迴是反...