筆試錯題記錄2
阿新 • • 發佈:2018-12-11
####選擇題
1.在Java中哪個修飾詞可以體現變數的原子性volatile
- static 修飾符表示變數被所有例項共享,變數屬於類
- final 修飾符表示變數的值是不能改變的
- transient 修飾的變數在類例項的序列化處理過程中會被忽略。這個變數是短暫的變數,不能貫穿物件的序列化和反序列化。如果類中有Logger例項,那麼Logger例項也是不能被序列化的。
- volatile 具有兩層含義。但是volatile是無法保證原子性的。
- 保證不同執行緒對這個變數操作時的可見性,即一個執行緒修改了某個變數的值,這個值對其他執行緒來說是立即可見的。
- 禁止進行指令的重排序。
原子性。 原子性的意思是一個操作要麼執行,要麼不執行,在執行的過程中不會被打斷。Java中原子性適用於除了long和double的原始資料型別的"簡單操作"。從記憶體中讀寫除了long和double的原始資料型別都是原子操作。但是變數之間的相互賦值不是原子操作。
int a = 1; //是原子操作
int b = 1; //原子操作
int c = a; //這一步中需要從記憶體中取出a的值再賦值給c。這是兩步操作。
可見性 可見性是指當多個執行緒訪問同一個變數的時候,一個執行緒修改了一個變數的值,那麼其他執行緒立即可以看到變數值的變化。
有序性 即程式執行的順序按照程式碼先後順序執行。
int a =1; //語句1
Int b =2; //語句2
雖然語句1看上去在語句2的前面,但是在執行的時候不一定是語句1先執行。因為可能會發生指令重排序。指令重排序是指處理器為了提高程式執行效率,可能會對輸入程式碼進行優化,它不保證程式中各個語句的執行先後順序
2.Java中的垃圾處理機制 垃圾的定義:如果物件實體沒有引用指向,那麼儲存該實體的記憶體就是垃圾。
3.多執行緒之間有兩種關係:同步和互斥
4.大端模式是指資料的高位元組儲存在記憶體的低地址中。這種模式有點類似於把資料當字串處理,地址由小向大增加,資料從高位往低位放。 小端模式是指資料的高位元組儲存在記憶體的高地址中。這種儲存模式把地址位高低和資料位權有效地結合起來,高地址部分權值高,低地址部分權值低。
5.動態連結:動態就是不對那些組成程式的目標檔案進行連結,等到程式執行時才進行連結。把連結的過程推遲到了執行時再進行。 靜態連結的缺點
- 同一個模組被多個模組連結時,那麼這個模組在磁碟和記憶體中都有多個副本,導致很大一部分空間被浪費。
- 當程式的任意一個模組發生變化時,整個程式都要更新連結、釋出給使用者。
連結檔案:
- 在Linux中,ELF的動態連結檔案被稱為動態共享物件(Dynamic shared object,DSO),是以**.so**為副檔名結尾的檔案。
- 在Windows中,EP的動態連結檔案被稱為動態連結庫(Dynamic linked library,DLL),以**.dll**為副檔名的檔案。