9 14 前幾天複習總結

2021-09-27 03:05:18 字數 3501 閱讀 1589

boolean賦值問題下面的程式段是正確的,程式的執行流程是將 flag 賦值為 true 再去看 if 後的括號中的結果是true 還是 false, 在經過賦值之後括號中就是 true 了,所以the flag is true會被列印出來。

public static void main(string args)

}math. ceil 和 math.floor 方法在官方文件中,math.ceil()方法返回的是大於等於當前數字的最小整數,例項如下

double i = -0.5;

system.out.println(math.ceil( i ));

//輸出的是0,因為大於等於 -0.5 的最小整數是 0

i = -1;

system.out.println(math.ceil(i));

//輸出的是 -1 ,因為 -1 滿足了 大於等於 -1 的最小整數。

b)  floor方法和ceil 相反,返回的是小於或者等於當前數字的最大整數

3、cow(copy-on-write)寫時複製,是指在併發下,執行緒對容器的對該不應該直接修改容器本身,而是應該賦值乙份副本,在修改後將副本重寫回容器。,下邊這個例子就是沒有使用寫時賦值帶來了併發問題,問題的關鍵在於,當訪問最後乙個容器執行到 int lastindex = list.size() – 1,然後就進入阻塞佇列,然後刪除最後乙個元素的執行緒在這個時候把最後乙個執行緒刪除,那麼等到獲取最後乙個元素的執行緒重新獲得cpu ,它就按剛剛計算得到的 list.size() – 1 得到的值去訪問元素,這樣的話就會報異常了,因為這個時候後乙個元素已經被刪除掉了。

}4、string.hashcode()方法的原理是,s 陣列就是儲存這string 的值的陣列,那麼就會出現兩個不同的string 的hashcode 一樣的情況(成為雜湊碰撞)

s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]     ( i * 31 = i * 21 – i;)

下邊是示例兩個不同的string 的hashcode 相同造成 equals 方法返回 true

string str1 = "通話";

string str2 = new string("重地") ;

system.out.println(string.format("str1:%d | str2:%d", str1.hashcode(),str2.hashcode()));

system.out.println(str1.equals(str2));

5、integer 分配記憶體的問題,

a、問題的根源在於integer.valueof(int i); 這個方法會先去看乙個叫做 integercache的東西,這裡存放這例項化integer 的時候如果值在 [-128, 127] 的話,就把他們存進去,以後例項化integer 物件的時候,就先去看 integercache 中是否有這個數,有的話直接返回乙個引用,沒有的話再去new 乙個 integer物件

public static integer valueof(int i)

b、但是 integer a = 1000; integer b = 1000; a == b 返回值就是 false 了,因為 1000 已經無法放在緩衝區裡了,在這樣會造成在堆中開闢兩份記憶體存放這兩個 1000 ,所以返回的就是 false 了

public static void main(string args)

6、thread.join() 方法,這個方法的作用是等待當前執行緒執行完畢後再往下執行。

a、thread.join()方法說到底就是下邊這幾行**,有三個重點

while (isalive())

join方法會先去判斷執行緒是否是或者的,所以使用join的時候一定要先用start啟動執行緒

join方法會釋放鎖,因為wait方法會釋放鎖。

join方法的本質是等待0秒鐘,就是說他會釋放鎖之後馬上又獲得cpu,又拿到鎖。

7、array.remove方法,檢視原始碼可以看到這個方法是有過載的,分別是

public e remove(int index)

和public boolean remove(object o)

} else

}return false;

}也就是說,當入參是int 型別的時候,是根據下標去刪除元素的,所以在下邊這個題目中第一次會把元素 1 (是元素為 1, 不是下標為 1)給刪除,然後當遍歷到元素 4 的時候,就會因為下標越界的問題而報錯了。

public static void main(string args)

}system.out.println(numberlist);

}8、math.round方法,這是四捨五入方法。本質是 floor( x + 0.5)  floor 就是返回小於等於這個數的最大整數(也就是向下取整)

9、當類有string型別的成員變數的時候,例項化物件的時候和就會為這個string 賦值,這個賦值和普通的 string a = 「abc」; 是一模一樣的,同樣回去判斷常量池中是否存在值為「abc」的string 物件,如果有的話就取得它的乙個引用,沒有的話就例項化乙個。下邊的這個例項中,test和testb 在例項化的時候都會為name 賦值,在testb 例項化的時候發現常量池已經有了「abc」這個string 物件了,所以就只是簡單返回了乙個引用而已,所以test.name == testb.name 得到的是 true

public static void main(string args)

10、super() 和 this(),沒有引數也沒有點什麼什麼的,super()表示的是父類的無參構造方法,也可以是指向父類物件的乙個引用,因為super().*** 可以訪問具備足夠許可權的成員變數和方法, this()表示當前類的無參構造器,也可以引用當前的這個物件

a、在子類的構造方法中,缺省會在構造方法的第一行呼叫父類的無參構造器(意思就是說如果在子類如果沒有呼叫父類的無參構造器的話,那麼父類的無參構造器是要存在的,不然子類就呼叫不到了)

b、在子類的有參構造器中,如果寫this()的話,就是呼叫了當前類的無參構造器了,注意,這個時候有參構造器是沒有直接呼叫父類的無參構造器的,這個是在子類的無參構造器中呼叫的。

c、super()和this()使用的時候都需要放在方法的第一行,否則會報錯,這樣一來的話這兩個就不可以放在同乙個方法中了。

d、在靜態方法和靜態**塊中不能使用this() 和 super()

e、在子類的構造方法中可以不用在第一行顯式呼叫super()

11、當父類的成員變數生命為private 的時候,子類是可以繼承到這個成員變數的,但是在使用的時候會受到private 的約束而不可使用,下邊這個例子中,可以通過反射得知子類test是有name 這個成員變數的,但是name的作用域僅僅在testfather中,所以在子類中是無法訪問到了

對前幾天學習進行總結

系統優化 首先要看裝置是做什麼服務 web 伺服器 主要看如下幾個方面 根據乙個http請求,首先是 dns的優化。這個可以做dns,預熱,這種一般做cdn都會做 拿到乙個ip 位址以後,封裝包 發起http請求,三次建聯 這種情況 就是對 三次建聯的優化,最大優勢的最快速度的,建立連線 如果是儲存...

五一前幾天

整理一下心情,迎接 五一 國際勞動節 1 這幾天頻繁去和客戶接觸,所談內容均是專案進展及客戶意見,感覺真是 漢顏 掙錢不是容易的,要想從懂開發的客戶手裡掙錢更是難上加難,他們總會覺得自己的要求並不過分,而且沒有超出合同範圍之內,一旦發生修改總覺得是應該的和必然的,或許出於我們公司特殊的身份吧,在他們...

黑馬程式設計師 前幾天的總結

windows phones 7手機開發 net培訓 期待與您交流!通過這段時間的學習,進行如下總結 console.writeline 輸出函式 console.readkey 獲取使用者按下的下乙個字元或功能鍵 int 整數型別 double 雙精度浮點型 char 字元型 string 字串型...