筆試錯題記錄2

####選擇題

1.在Java中哪個修飾詞可以體現變量的原子性volatile

  1. static 修飾符表示變量被所有實例共享,變量屬於類
  2. final 修飾符表示變量的值是不能改變的
  3. transient 修飾的變量在類實例的序列化處理過程中會被忽略。這個變量是短暫的變量,不能貫穿對象的序列化和反序列化。如果類中有Logger實例,那麼Logger實例也是不能被序列化的。
  4. 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.動態鏈接:動態就是不對那些組成程序的目標文件進行鏈接,等到程序運行時才進行鏈接。把鏈接的過程推遲到了運行時再進行。
靜態鏈接的缺點

  1. 同一個模塊被多個模塊鏈接時,那麼這個模塊在磁盤和內存中都有多個副本,導致很大一部分空間被浪費。
  2. 當程序的任意一個模塊發生變化時,整個程序都要更新鏈接、發佈給用戶。

鏈接文件

  1. 在Linux中,ELF的動態鏈接文件被稱爲動態共享對象(Dynamic shared object,DSO),是以**.so**爲擴展名結尾的文件。
  2. 在Windows中,EP的動態鏈接文件被稱爲動態鏈接庫(Dynamic linked library,DLL),以**.dll**爲擴展名的文件。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章