牛客網刷題(純java題型 241~270題)

QisMe發表於2018-07-15

牛客網刷題(純java題型 241~270題)

牛客網刷題(純java題型 241~270題)
子類從父類繼承所有的成員(欄位,方法,巢狀類),構造方法不屬於成員,所有子類不能繼承,但是子類可以呼叫父類的構造方法
對於private方法和屬性,子類一定是繼承了的,但是沒有訪問許可權

子類物件確實擁有父類物件中所有的屬性和方法,但是父類物件中的私有屬性和方法,子類是無法訪問到的,只是擁有,但不能使用。就像有些東西你可能擁有,但是你並不能使用。

牛客網刷題(純java題型 241~270題)
例項方法和類方法的比較:
例項方法,需要由類的例項來呼叫,不同例項之間相互不影響
類方法,類的所有例項共享這一個方法

牛客網刷題(純java題型 241~270題)
類的例項,可以想呼叫非靜態方法和屬性一樣,呼叫靜態方法和靜態屬性
牛客網刷題(純java題型 241~270題)

牛客網刷題(純java題型 241~270題)

牛客網刷題(純java題型 241~270題)

牛客網刷題(純java題型 241~270題)

牛客網刷題(純java題型 241~270題)
雖然是先呼叫Servlet的建構函式,然後再呼叫構造出來的serlvet例項的init()方法,但是Servlet的生命週期是從init()方法開始的
Servlet在多執行緒下,不是執行緒安全的

牛客網刷題(純java題型 241~270題)
++x, 先讀取x的值,然後自增1,然後賦值給x
x=y, 先讀取y的值,然後賦值給x x++ 先讀取x的值,然後自增1,然後賦值給x
都不是原子操作,都需要先讀取一個變數的值,然後再進行操作
x = 1操作是原子操作,所以不需要同步

牛客網刷題(純java題型 241~270題)
識別符號開頭,必須為字母或者下劃線或者$開頭,而且整個識別符號中不能有+-*,可以包含數字,但是不能以數字開頭

牛客網刷題(純java題型 241~270題)
本題涉及到編譯器優化,和語法糖
對於String a = "tao" + "bao"; 編譯器會進行優化,變為String a = "taobao";
而對於
String b = "tao";
String c ="bao";
String a = b+c;
則會使用StringBuilder來進行拼接(語法糖),StringBuilder最後會呼叫toString方法返回一個new的String,也就是新建立了一個String物件,雖然內容相同,但是物件的地址不同,上一個String式儲存在常量池中,而這個則儲存在堆中

牛客網刷題(純java題型 241~270題)
copyOnWriteArrayList,在寫入資料的時候,會將已有的所有資料重新複製一份,適用於讀取多,寫入少, 比如快取
readwriteLock,讀寫鎖,讀取與讀取之間互斥,讀取與寫之間互斥,寫與寫之間互斥,適用於讀取多,寫入少
concurrentHashMap,提供了與HashMap同樣的功能,但是是執行緒安全的. ConcurrentHashMap的讀取不需要加鎖,並且ConcurrentHashMap內部的結構,使得在寫入的時候,鎖的粒度儘可能的小,比如HashTable,是對整個Map進行了加鎖,有些浪費,而ConcurrentHashMap只是對一部分Map進行了加鎖,提高了效率
ConcurrentHashMap採用了分片鎖,粒度較小,不需要對整個程式碼塊進行加鎖,而HashTable是對整個程式碼塊進行加鎖
ConcurrentHashMap 與 HashTable的區別:
HashMap是採用陣列+連結串列的方式,執行緒不安全,而hashTable在HashMap的基礎上,對整個雜湊表進行加鎖,以保證執行緒安全,而執行緒訪問陣列中的資料,可能只涉及到陣列中的一部分資料,對整個陣列進行加鎖會導致執行緒併發程度的降低.ConcurrentHashMap使用了Segment分片鎖,這樣一個執行緒只會鎖住陣列的一片,其他執行緒仍然可以訪問陣列的其他片進行操作,具有這樣的分片鎖機制的就是Concurrenthashmap

volatile只能保證可見性,不一定能保證同步性,適用於以下兩種情況:
1,運算結果不依賴變數的當前值(比如i++,就需要依賴當前值:獲取當前的i值,i值自增1,將i值進行賦值),或者能夠確保只有單一的執行緒修改變數的值
2,變數不需要與其他的狀態變數共同參與不變約束
volatile能夠禁止指令重排序優化
所以使用 volatile來修飾i,進行i++是不能保證執行緒安全的

牛客網刷題(純java題型 241~270題)
每個執行緒都有工作記憶體,這是為了提高讀取資料的效率,執行緒讀取資料直接從工作記憶體中讀取,但是工作記憶體中的資料和主記憶體中的資料可能是不同步的,而使用volatile,能夠保證只從主記憶體中讀取資料,這樣就保證了volatile修飾的變數在多執行緒中的可見性,一個執行緒對變數進行了修改,其他執行緒立馬就能看見修改,但是多執行緒同步需要保證操作的原子性,而volatile不能保證原子性,只能保證可見性,所以,使用volatile不能保證執行緒安全
比如
volatile int i;
i++;
其中i++;是由多個非原子操作共同完成的,是執行緒不同步的
volatile能夠禁止指令重排序

牛客網刷題(純java題型 241~270題)
JVM中沒有程式的概念,但是JVM中的執行緒和作業系統中的程式是1:1的對映關係
程式之間的非同步執行,使用的是監視器(也就是鎖,synchronized)來實現的
非同步呼叫的概念:無需等待被呼叫函式的返回值就能讓操作繼續進行的方法

牛客網刷題(純java題型 241~270題)
java中,下劃線是可以作為識別符號首字母的
first不是識別符號

牛客網刷題(純java題型 241~270題)
override需要遵循的規則:
方法名相同,引數列表相同
子類方法的返回值需要小於等於基類方法
子類方法的訪問修飾符大於等於基類方法 (而不是隻是大於)
子類方法的丟擲異常的型別需要比基類更加具體

牛客網刷題(純java題型 241~270題)
forward(轉發)是伺服器將另一個URL的資源的響應內容讀取過來,然後將這些內容發給瀏覽器,瀏覽器不知道資料是從別處來的,瀏覽器上顯示的地址還是原來的地址
redirect(重定向)是告訴瀏覽器去請求一個URL地址,瀏覽器顯示的是新地址

共享資料方面:
forward,轉發的頁面和轉發到的頁面可以共享request資料,而redirect不能共享資料

運用的地方:
forward,一般用於使用者登入後根據許可權轉發到相應的模組
redirect,使用者登出的時候返回到主頁面或者跳轉到其他頁面

從效率上來說
forward高,redirect低

redirect,伺服器向瀏覽器傳送302,SC_MOVED_TEMPORARILY請求,是temporarily,而不是301(SC_MOVED_PERMANENTLY)

牛客網刷題(純java題型 241~270題)

牛客網刷題(純java題型 241~270題)
long 和 double都可以使用二進位制

牛客網刷題(純java題型 241~270題)

相關文章