java 基礎內容
JavaSE
概念積累
正則表達式https://jquery.cuishifeng.cn/regexp.html
接口和抽象類區別
接口=規范(屬性:public static final;方法:抽象方法);抽象類=規范+實現
接口和抽象類均可多態(父類定義,子類實現),但抽象類只能單繼承,接口可以多個實現;抽象類可實例化對象,接口無構造函數,不能實例化;抽象類可以不包含抽象方法,但接口只能有抽象方法。
內部類
要想訪問內部類中的內容,必須通過外部類對象來實例化內部類。能夠訪問外部類所有的屬性和方法,原理就是在通過外部類對象實例化內部類對象時,外部類對象把自己的引用傳進了內部類,使內部類可以用通過Outer.this去調用外部類的屬性和方法,一般都是隱式調用了,但是當內部類中有屬性或者方法名和外部類中的屬性或方法名相同的時候,就需要通過顯式調用Outer.this了。
局部內部類是在一個方法內部聲明的一個類。局部內部類中可以訪問外部類的成員變量及方法。局部內部類中如果要訪問該內部類所在方法中的局部變量,那么這個局部變量就必須是final修飾的
異常
多個catch:先小后大,按順序匹配,當某一個catch匹配,跳過之后的catch,進入后續步驟。
反射,注解
- 反射:實例化對象,通過Class.forName()獲取對象
- 注解:@Target注解目標,@Retention注解生存周期,@Documented注解文檔
- 加密算法:AES(對稱加密),RES(非對稱加密,公鑰加密,私鑰解密)
String
public static void main(String[] args) {
String str1 = "Lance"; //常量池存儲
String str2 = new String("Lance"); //堆存處
String str3 = str2; //引用傳遞,str3直接指向st2的堆內存地址 1234
String str4 = "Lance"; /** * ==: * 基本數據類型:比較的是基本數據類型的值是否相同 * 引用數據類型:比較的是引用數據類型的地址值是否相同 * 所以在這里的話:String類對象==比較,比較的是地址,而不是內容 */ System.out.println(str1==str2);//false
System.out.println(str1==str3);//false
System.out.println(str3==str2);//true
System.out.println(str1==str4);//true, 常量池數據可復用
}
boolean hashCode(Object obj): 比較字符串內容所計算出的hash值
boolean equals(Object obj):比較字符串的內容是否相同
boolean equalsIgnoreCase(String str): 比較字符串的內容是否相同,忽略大小寫
boolean startsWith(String str): 判斷字符串對象是否以指定的str開頭
boolean endsWith(String str): 判斷字符串對象是否以指定的str結尾
IO 流
IO
- 阻塞IO(BIO):A拿著一支魚竿在河邊釣魚,并且一直在魚竿前等,在等的時候不做其他的事情,十分專心。只有魚上鉤的時,才結束掉等的動作,把魚釣上來。
- 非阻塞IO(NIO):B也在河邊釣魚,但是B不想將自己的所有時間都花費在釣魚上,在等魚上鉤這個時間段中,B也在做其他的事情(一會看看書,一會讀讀報紙,一會又去看其他人的釣魚等),但B在做這些事情的時候,每隔一個固定的時間檢查魚是否上鉤。一旦檢查到有魚上鉤,就停下手中的事情,把魚釣上來。 B在檢查魚竿是否有魚,是一個輪詢的過程。
- 異步IO(AIO):C也想釣魚,但C有事情,于是他雇來了D、E、F,讓他們幫他等待魚上鉤,一旦有魚上鉤,就把魚釣上來,然后打電話給C
- 多路復用IO:H同樣也在河邊釣魚,但是H生活水平比較好,H拿了很多的魚竿,一次性有很多魚竿在等,H不斷的查看每個魚竿是否有魚上鉤。增加了效率,減少了等待的時間。
- 信號驅動IO:G也在河邊釣魚,但與A、B、C不同的是,G比較聰明,他給魚竿上掛一個鈴鐺,當有魚上鉤的時候,這個鈴鐺就會被碰響,G就會將魚釣上來
Stream
- list過濾:List
boys = studentList.stream().filter(s->s.getGender() && s.getHeight() >= 1.8).collect(Collectors.toList()); - list升序排序:List
wodbList = map.get(str).stream().sorted(Comparator.comparing(ApsScheduleWODB::getISort)).collect(Collectors.toList()); 升序排序,降序Comparator.reverseOrder()
NIO
- Channel(通道)
- Buffer(緩沖區):緩沖通道往返數據
- Selector(選擇區):監聽通道
集合
- Collection對集合進行排序,查找,復制等功能。(二分查找,亂序)總繼承
- List 有序集合
- ArrayList:數組形式存儲,默認長度為0,添加數據默認長度為10,長度不足時可以擴容但有最大長度限制。
- LinkedList:雙向鏈表,含有長度,頭結點,尾節點三個屬性,在迭代中可以添加刪除數據
- Vector: 線程安全的ArrayList,即當線程A使用Synchronized標記方法時,其他線程阻塞。但一般不使用,原因1. 線程并不安全,產生fail-fase錯誤;2. 在業務中有加鎖需求,重復加鎖浪費資源。
- 在迭代中修改數據會產生fail-fast錯誤。但java.util.concurrent包下的相同情況會產生fail-safe錯誤,其原因是對數據修改時是對原數據的副本進行修改,不影響原數據;當修改完成后將原數據指向副本。
- Set 無序集合
- Map 鍵值對
- HashMap: 數組+(鏈表 or 紅黑樹)
- keySet():String:獲取map.key的set集合
- entrySet():Set
- HashMap: 數組+(鏈表 or 紅黑樹)
util
- StringUtil common.langhttps://www.jianshu.com/p/1886903ed14c
- BigDecimal 浮點數精確計算
- setScale(scale, BigDecimal.ROUND_HALF_UP):四舍五入,scale=小數后幾位?
- add/subtract 加減法
- mutiply() 乘法
- divide() 除法
JVM(堆,方法區,程序計數器,虛擬機棧,本地方法棧)
- 堆:對象,數組
- 方法區(永久代):類信息,常量,靜態變量
- 程序計數器:當前線程執行 的字節碼行號指示器
- 虛擬機棧:多個棧幀(局部變量表,操作數棧,動態鏈接表,方法出口):java方法的執行即為棧幀的入棧,出棧
- 本地方法棧:類似虛擬機棧,對native方法執行出入棧操作
垃圾回收
- 標記方法: 引用計數(引用次數為0節點回收),可達性分析(從根節點出發,未到達節點回收)
- 回收方法
- 標記清除:直接回收節點
- 復制:劃分等大區域,將可用節點復制到空白區域,清空當前區域
- 標記整理:將存活對象移向內存的一端。然后清除端邊界外的對象
- 分代
- 新生代
- serial:單線程復制(Client 默認)
- parNew:多線程復制(Server 默認) -XX:ParallelGCThreads
- paraller Scavenge:多線程復制,高效(關注程序吞吐量=運行代碼時間/(運行代碼時間+垃圾回收時間))
- G1
- 老年代
- CMS:多線程標記清除
- 初始標記:暫停所有,標記可達對象
- 并發標記,跟蹤Roots,
- 重新標記:暫停所有,標記修改部分(多線程)
- 并發清除:清楚不可達對象
- serial old:單線程標記整理
- paraller old:多線程標記整理,關注程序吞吐量
- G1:標記整理的CMS, G1 收集器避免全區域垃圾收集,它把堆內存劃分為大小固定的幾個獨立區域,并且跟蹤這些區域的垃圾收集進度,同時在后臺維護一個優先級列表,每次根據所允許的收集時間,優先回收垃圾最多的區域。區域劃分和優先級區域回收機制,確保 G1 收集器可以在有限時間獲得最高的垃圾收集效率。
- CMS:多線程標記清除
- 新生代
類加載(加載,鏈接【驗證,準備,解析】,初始化,使用,卸載)
- 類加載器:啟動類lib,擴展類jre/lib/ext,應用程序類classpath,自定義類
- 雙親委派:當一個類收到了類加載請求,他首先不會嘗試自己去加載這個類,而是把這個請求委派給父
類去完成。只有當父類加載器反饋自己無法完成這個請求的時候(在它的加載路徑下沒有找到所需加載的
Class),子類加載器才會嘗試自己去加載?!臼褂貌煌念惣虞d
器最終得到的都是同樣一個 Object 對象】
多線程
- 線程創建, 繼承Thread類,實現Runnable接口,實現Callable接口【有返回值時,通過Future.get()獲取】
- 線程共享:堆,方法區(元數據); 線程私有:程序計數器,虛擬機棧,本地方法棧
- 狀態: 新建(New)、就緒(Runnable)start()、運行(Running)run()、阻塞(Blocked)和死亡(Dead)
浙公網安備 33010602011771號