11.Java基礎(chǔ)
1. 集合
List,Set币喧,Queue和Map。
List杀餐,Set,Queue都是接口朱巨,他們都繼承至Collection接口。
Map是獨立接口冀续。
1.1 List
有序,可重復(fù)洪唐。(按照進入的先后順序)
ArrayList,底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組凭需,查詢快脉让,增刪慢溅潜。線程不安全,效率高薪伏。 Vector,底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組嫁怀,查詢快,增刪慢塘淑。線程安全,效率低 LinkedList存捺,底層數(shù)據(jù)結(jié)構(gòu)是鏈表槐沼,查詢慢,增刪快岗钩。線程不安全纽窟,效率高兼吓。
1.2 Set
無序,唯一视搏。
HashSet,底層數(shù)據(jù)結(jié)構(gòu)是哈希表浑娜。(無序,唯一)
通過兩個方法:hashCode()和equals()保證元素唯一性。LinkedHashSet棚愤,底層數(shù)據(jù)結(jié)構(gòu)是鏈表和哈希表。(FIFO插入有序,唯一)
由鏈表保證元素有序宛畦。由哈希表保證元素唯一瘸洛。TreeSet次和,底層數(shù)據(jù)結(jié)構(gòu)是紅黑樹。(有序踏施,唯一)
自然排序,比較器排序保證有序畅形。根據(jù)比較的返回值是否是0來決定唯一性。
1.3 Map
鍵值對集合日熬。鍵唯一棍厌,值可重復(fù)耘纱。
HashMap,無序的毕荐。不同步,線程不安全憎亚。 允許key/value為空弄慰。
TreeMap,有序的。紅黑樹對所有的鍵排序斋日。
HashTable牲览,無序的恶守。同步,線程安全兔港。
2. 面向?qū)ο蟮奶匦?/h3>
2.1 Java中抽象類和接口的特點
共同點:
- 抽象類和接口都不能生成具體的實例。
- 都是作為上層使用衫樊。
不同點:
- 抽象類可以有屬性和成員方法,接口不可以科侈。
- 一個類只能繼承一個類载佳,但是可以實現(xiàn)多個接口蔫慧。
- 抽象類中的變量是普通變量,接口中的變量是靜態(tài)變量权薯。
- 抽象類表達的是
is-a
的關(guān)系,接口表達的是like-a
的關(guān)系盟蚣。
2.2 面向?qū)ο蟮娜筇匦?/h4>
面向?qū)ο蟮娜筇匦裕豪^承、封裝和多態(tài)屎开。
封裝:封裝就是隱藏對象的屬性和實現(xiàn)細節(jié)橄仍,僅對外公開接口牍戚,控制在程序中屬性的讀和修改的訪問級別。
繼承:繼承就是子類繼承父類的特征和行為如孝,使得子類對象(實例)具有父類的實例域和方法,或子類從父類繼承方法第晰,使得子類具有父類相同的行為彬祖。
多態(tài):多態(tài)同一個行為具有多個不同表現(xiàn)形式或形態(tài)的能力。
多態(tài)存在的三個必要條件:
- 要有繼承品抽。
- 要有復(fù)寫。
- 父類引用指向子類對象圆恤。
Java中多態(tài)的實現(xiàn)方式:接口實現(xiàn),繼承父類進行方法重寫盆昙,同一個類中的方法重載。
重載:是指多個方法名一樣淡喜,參數(shù)類型和個數(shù)不一樣,返回值類型可以一樣炼团,也可以不一樣澎嚣。
重寫:是指在子類中繼承父類方法瘟芝,方法名和參數(shù)相同,對該方法進行重新定義模狭。
5. == 和 equals的區(qū)別
== 是運算符,當(dāng)比較對象為基本數(shù)據(jù)類型時嚼鹉,比較的是數(shù)據(jù)的大小锚赤;當(dāng)比較對象為引用類型時匹舞,比較的是引用類型中存放的地址线脚。
equals,是Objec類的方法浑侥,默認用于比較兩個對象是否相等,也就是地址值寓落。
案例:
A和B值相同,String A==String B相等嗎伶选? true史飞。
如果A和B是2個對象,雖然值相同构资,但是用==號比較返回false。如果用equals比較就是true吐绵。
6. equals和hashcode的關(guān)系
默認情況下,equals
相等拦赠,hashcode
必相等巍沙,hashcode
相等荷鼠,equals
不是必相等榔幸。hashcode基于內(nèi)存地址計算得出,可能會相等削咆,雖然幾率微乎其微牍疏。
7. String,StringBuffer和StringBuild的區(qū)別
String
:String
屬于不可變對象拨齐,每次修改都會生成新的對象。
StringBuilder
:可變對象瞻惋,非多線程安全。
-
StringBuffer
:可變對象歼狼,多線程安全。
大部分情況下羽峰,效率是:StringBuilder
>StringBuffer
>String
趟咆。
8. Http和Https
HTTPS = HTTP + SSL/TLS
HTTP作用于應(yīng)用層梅屉,使用80端口,起始地址是http://
坯汤,明文傳輸,消息容易被攔截玫霎,串改妈橄。
HTTPS作用域傳輸層,使用443端口翁脆,起始地址是https://
,需要下載CA證書反番,傳輸?shù)倪^程需要加密,安全性高罢缸。
9. final,finally枫疆,finalize
final關(guān)鍵字:
final修飾的類無法繼承
final修飾的方法無法重寫
final修飾的變量不可修改
finally關(guān)鍵字:
用于與try語句連用爵川,用于異常處理機制
finally中的語句時必須執(zhí)行的
finalize標識符:
是一個Object類中的方法名
這個方法是垃圾回收器gc負責(zé)調(diào)用的
一般用來記錄對象在JVM中被釋放時的時間寝贡,即記錄對象內(nèi)存被釋放的時間
12. 算法
1.排序算法
分為兩大類,比較類配和非比較類排值依。
1.1 比較類排
a. 交換排序
冒泡排序
- 比較相鄰的元素。如果第一個比第二個大愿险,就交換它們兩個;
- 對每一對相鄰元素作同樣的工作辆亏,從開始第一對到結(jié)尾的最后一對,這樣在最后的元素應(yīng)該會是最大的數(shù)褒链;
- 針對所有的元素重復(fù)以上的步驟唁情,除了最后一個甫匹;
- 重復(fù)步驟1~3,直到排序完成兵迅。
b. 插入排序
插入排序法
- 從第一個元素開始,該元素可以認為已經(jīng)被排序恍箭;
- 取出下一個元素,在已經(jīng)排序的元素序列中從后向前掃描;
- 如果該元素(已排序)大于新元素鳍贾,將該元素移到下一位置;
- 重復(fù)步驟3骑科,直到找到已排序的元素小于或者等于新元素的位置;
- 將新元素插入到該位置后咆爽;
- 重復(fù)步驟2~5梁棠。
c. 選擇排序
選擇排序法
首先在未排序序列中找到最卸饭 (大)元素,存放到排序序列的起始位置呛凶,然后,再從剩余未排序元素中繼續(xù)尋找最邪淹谩(大)元素瓮顽,然后放到已排序序列的末尾县好。以此類推暖混,直到所有元素均排序完畢。
d. 歸并排序
1.2非比較類排
a.計數(shù)排序
b.桶排序
c.基數(shù)排序
共同點:
- 抽象類和接口都不能生成具體的實例。
- 都是作為上層使用衫樊。
不同點:
- 抽象類可以有屬性和成員方法,接口不可以科侈。
- 一個類只能繼承一個類载佳,但是可以實現(xiàn)多個接口蔫慧。
- 抽象類中的變量是普通變量,接口中的變量是靜態(tài)變量权薯。
- 抽象類表達的是
is-a
的關(guān)系,接口表達的是like-a
的關(guān)系盟蚣。
面向?qū)ο蟮娜筇匦裕豪^承、封裝和多態(tài)屎开。
封裝:封裝就是隱藏對象的屬性和實現(xiàn)細節(jié)橄仍,僅對外公開接口牍戚,控制在程序中屬性的讀和修改的訪問級別。
繼承:繼承就是子類繼承父類的特征和行為如孝,使得子類對象(實例)具有父類的實例域和方法,或子類從父類繼承方法第晰,使得子類具有父類相同的行為彬祖。
多態(tài):多態(tài)同一個行為具有多個不同表現(xiàn)形式或形態(tài)的能力。
多態(tài)存在的三個必要條件:
- 要有繼承品抽。
- 要有復(fù)寫。
- 父類引用指向子類對象圆恤。
Java中多態(tài)的實現(xiàn)方式:接口實現(xiàn),繼承父類進行方法重寫盆昙,同一個類中的方法重載。
重載:是指多個方法名一樣淡喜,參數(shù)類型和個數(shù)不一樣,返回值類型可以一樣炼团,也可以不一樣澎嚣。
重寫:是指在子類中繼承父類方法瘟芝,方法名和參數(shù)相同,對該方法進行重新定義模狭。
5. == 和 equals的區(qū)別
== 是運算符,當(dāng)比較對象為基本數(shù)據(jù)類型時嚼鹉,比較的是數(shù)據(jù)的大小锚赤;當(dāng)比較對象為引用類型時匹舞,比較的是引用類型中存放的地址线脚。
equals,是Objec類的方法浑侥,默認用于比較兩個對象是否相等,也就是地址值寓落。
案例:
A和B值相同,String A==String B相等嗎伶选? true史飞。
如果A和B是2個對象,雖然值相同构资,但是用==號比較返回false。如果用equals比較就是true吐绵。
6. equals和hashcode的關(guān)系
默認情況下,
equals
相等拦赠,hashcode
必相等巍沙,hashcode
相等荷鼠,equals
不是必相等榔幸。hashcode基于內(nèi)存地址計算得出,可能會相等削咆,雖然幾率微乎其微牍疏。
7. String,StringBuffer和StringBuild的區(qū)別
String
:String
屬于不可變對象拨齐,每次修改都會生成新的對象。
StringBuilder
:可變對象瞻惋,非多線程安全。
StringBuffer
:可變對象歼狼,多線程安全。大部分情況下羽峰,效率是:
StringBuilder
>StringBuffer
>String
趟咆。
8. Http和Https
HTTPS = HTTP + SSL/TLS
HTTP作用于應(yīng)用層梅屉,使用80端口,起始地址是
http://
坯汤,明文傳輸,消息容易被攔截玫霎,串改妈橄。
HTTPS作用域傳輸層,使用443端口翁脆,起始地址是https://
,需要下載CA證書反番,傳輸?shù)倪^程需要加密,安全性高罢缸。
9. final,finally枫疆,finalize
final關(guān)鍵字:
final修飾的類無法繼承
final修飾的方法無法重寫
final修飾的變量不可修改finally關(guān)鍵字:
用于與try語句連用爵川,用于異常處理機制
finally中的語句時必須執(zhí)行的finalize標識符:
是一個Object類中的方法名
這個方法是垃圾回收器gc負責(zé)調(diào)用的
一般用來記錄對象在JVM中被釋放時的時間寝贡,即記錄對象內(nèi)存被釋放的時間
12. 算法
1.排序算法
分為兩大類,比較類配和非比較類排值依。
1.1 比較類排
a. 交換排序
冒泡排序
- 比較相鄰的元素。如果第一個比第二個大愿险,就交換它們兩個;
- 對每一對相鄰元素作同樣的工作辆亏,從開始第一對到結(jié)尾的最后一對,這樣在最后的元素應(yīng)該會是最大的數(shù)褒链;
- 針對所有的元素重復(fù)以上的步驟唁情,除了最后一個甫匹;
- 重復(fù)步驟1~3,直到排序完成兵迅。
b. 插入排序
插入排序法
- 從第一個元素開始,該元素可以認為已經(jīng)被排序恍箭;
- 取出下一個元素,在已經(jīng)排序的元素序列中從后向前掃描;
- 如果該元素(已排序)大于新元素鳍贾,將該元素移到下一位置;
- 重復(fù)步驟3骑科,直到找到已排序的元素小于或者等于新元素的位置;
- 將新元素插入到該位置后咆爽;
- 重復(fù)步驟2~5梁棠。
c. 選擇排序
選擇排序法
首先在未排序序列中找到最卸饭 (大)元素,存放到排序序列的起始位置呛凶,然后,再從剩余未排序元素中繼續(xù)尋找最邪淹谩(大)元素瓮顽,然后放到已排序序列的末尾县好。以此類推暖混,直到所有元素均排序完畢。