java基礎
- 數據類型:8種基本的數據類型,所佔的字節數以及長度,對應的封裝類型。
- collection:3種接口以及實現類(list、map、set)
- 面向對象的三大特徵:
- 重寫和重載的區別:
- String、StringBuilder、StringBuffer的區別
- 單例模式:
- JDK、JRE、JVM三者的區別和聯繫:
- JVM:工作原理、引用類型、類加載、回收機制
- 接口和抽象類的區別、用法
- Throw throws的區別:
- 線程相關
二、java web開發框架
- SSH
- Jfinal
三、mysql數據庫操作
四、計算機網絡:
- 基礎的名詞、域名、IP:
- HTTP、TCP
- Get、Post的區別
五:算法:
- 排序算法;插入排序、選擇排序、冒泡排序 o(N2)
- 堆排序:
數據結構全書瀏覽。
8種基本的數據類型:https://www.runoob.com/java/java-basic-datatypes.html
1字節=8位=1byte 位:2進制中的一個位置
4個整型、2個浮點、一個布爾、一個字符型
|
Object類 |
|||||||
|
Number類 |
Object類 |
||||||
|
byte |
short |
int |
long |
Float |
double |
boolean |
char |
位數 |
8 |
16 |
32 |
64 |
32 |
64 |
1 |
16 |
符號位 |
1 |
1 |
1 |
1 |
1 |
1 |
|
|
範圍 |
2^7 |
2^15 |
2^31 |
2^63 |
7 |
15 |
|
+2^15 |
正比負少1,0 |
-128 +127 |
-32768 32767 |
|
|
整24 浮7 |
整48 浮15 |
True 1 和 false 0 |
0-65,535 沒有負 |
java.lang |
Byte |
Short |
Integer |
Long |
Float |
Double |
|
Character |
包裝類: https://www.runoob.com/java/java-number.html
封裝基本類型位對象,提供多種方法調用。
裝箱:基本數據類型轉對象
拆箱:對象轉基本數據類型
這種由編譯器特別支持的包裝稱爲裝箱,所以當內置數據類型被當作對象使用的時候,編譯器會把內置類型裝箱爲包裝類。相似的,編譯器也可以把一個對象拆箱爲內置類型。Number 類屬於 java.lang 包。(.valueOf()返回內置數據類型, toString())以字符串形式返回值
補充:
首先,我們看一下雙等號“ == ”和equals()方法的不同之處。
雙等號“ == ”,對於基本數據類型,比較的是它們的值。
對於非基本類型,比較的是它們在內存中的存放地址,或者說是比較兩個引用是否引用內存中的同一個對象。
equals()是在Object基類中定義的方法。
這個方法的初始行爲是比較對象的內存地址,但在一些類庫中,這個方法被覆蓋掉了,如String,Integer,Date等。在這些類當中equals有其自身的實現(一般是比較值),而不再是比較類在堆內存中的存放地址了。
對於複合數據類型之間進行equals比較,在沒有覆寫equals方法的情況下,它們之間的比較還是基於他們在內存中的存放位置的地址值的,因爲Object的equals方法也是用雙等號“ == ”進行比較的,所以比較後的結果跟雙等號“ == ”的結果相同。
Collection 接口:都在java.util 包中,屬於JDK。
包含集合框架、遺留的 collection 類、事件模型、日期和時間設施、國際化和各種實用工具類(字符串標記生成器、隨機數生成器和位數組、日期Date類、堆棧Stack類、向量Vector類等)。集合類、時間處理模式、日期時間工具等各類常用工具包。
複雜(全):
簡單(簡潔):
https://blog.csdn.net/Dreamhai/article/details/80570544
下面都有三種接口,List、set接口繼承Collection接口。Map是util下一個獨立的接口
儘管Map接口和它的實現也是集合框架的一部分,但Map不是集合,集合也不是Map。因此,Map繼承Collection毫無意義,反之亦然。
Collection接口是集合類的根接口,Java中沒有提供這個接口的直接的實現類。但是卻讓其被繼承產生了兩個接口,就是Set和List。Set中不能包含重複的元素。List是一個有序的集合,可以包含重複的元素,提供了按索引訪問的方式。
Map是Java.util包中的另一個接口,它和Collection接口沒有關係,是相互獨立的,但是都屬於集合類的一部分。Map包含了key-value對。Map不能包含重複的key,但是可以包含相同的value。
Iterator,所有的集合類,都實現了Iterator接口,這是一個用於遍歷集合中元素的接口,主要包含以下三種方法:
1.hasNext()是否還有下一個元素。
2.next()返 回下一個元素。
3.remove()刪除當前元素。
實現collection的接口的兩個子接口:List Set
List: 是一個有序的集合,提供下標、索引使用戶可以操作集合內部元素(類似於數組,只不過存放的是對象),與Set不同,它允許元素重複。實現List接口的類有LinkedList,ArrayList,Vector和Stack。
Set是一種不包含重複元素的集合。通過LinkedHashSet(有序)通過鏈表的形式保證有序。
Map(鍵值對:key-value)請注意,Map沒有繼承Collection接口,Map提供key到value的映射。一個Map中不能包含相同的key,每個key只能映射一個value。Map接口提供3種集合的視圖,Map的內容可以被當作一組key集合,一組value集合,或者一組key-value映射。
ArrayList內部是由數組是實現的,而LinkList內部是由循環雙向鏈表實現的。兩個都繼承了AbstractList。AbstractList 是一個抽象類,實現了List 接口。兩者都是線程不安全的,想要實現線程安全,則需要加上
Hash 尋址衝突的解決辦法; https://www.cnblogs.com/gongcheng-/p/10894205.html
Hashmap的實現:https://blog.csdn.net/Jae_Peng/article/details/79562432
HashMap在Map.Entry靜態內部類實現中存儲key-value對。HashMap使用哈希算法,在put和get方法中,它使用hashCode()和equals()方法,對象的hashCode和equals()方法。當我們通過傳遞key-value對調用put方法的時候,HashMap使用Key hashCode()和哈希算法來找出存儲key-value對的索引。Entry存儲在LinkedList中,所以如果存在entry,它使用equals()方法來檢查傳遞的key是否已經存在,如果存在,它會覆蓋value,如果不存在,它會創建一個新的entry然後保存。當我們通過傳遞key調用get方法時,它再次使用hashCode()來找到數組中的索引,然後使用equals()方法找出正確的Entry,然後返回它的值。屬於解決hash衝突中的鏈地址法。
HashCode 和equils: https://www.cnblogs.com/zcjyzh/p/9329346.html
要求:1. equils值相等的兩個對象,hashcode值也相等
2. hashcode值相等的兩個對象,equils值不要求相等
如果重寫了equils,不重寫hashcode會違反第一條規定。
即重寫了鍵對象的equils,如果不重寫HashCODE,會導致自定義的相等對象滅有相同的hachcod映射值,
線程安全的是指加上了同步(操作的時候上了鎖synchronize,讀音:心兒闊奈子)
總結;
如果涉及到堆棧,隊列等操作,應該考慮用List,對於需要快速插入,刪除元素,應該使用LinkedList,如果需要快速隨機訪問元素,應該使用ArrayList。
如果程序在單線程環境中,或者訪問僅僅在一個線程中進行,考慮非同步的類,其效率較高,如果多個線程可能同時操作一個類,應該使用同步的類。
要特別注意對哈希表的操作,作爲key的對象要正確複寫equals和hashCode方法。
儘量返回接口而非實際的類型,如返回List而非ArrayList,這樣如果以後需要將ArrayList換成LinkedList時,客戶端代碼不用改變。這就是針對抽象編程。
當對字符串進行修改的時候,需要使用 StringBuffer 和 StringBuilder 類。
和 String 類不同的是,StringBuffer 和 StringBuilder 類的對象能夠被多次的修改,並且不產生新的未使用對象。
StringBuilder 類在 Java 5 中被提出,它和 StringBuffer 之間的最大不同在於 StringBuilder 的方法不是線程安全的(不能同步訪問)。
由於 StringBuilder 相較於 StringBuffer 有速度優勢,所以多數情況下建議使用 StringBuilder 類。然而在應用程序要求線程安全的情況下,則必須使用 StringBuffer 類。
重寫和重載:Java 重寫(Override)與重載(Overload) https://www.runoob.com/java/java-override-overload.html
重寫是子類對父類的允許訪問的方法的實現過程進行重新編寫, 返回值和形參都不能改變。即外殼不變,核心重寫! (子類繼承父類)
重載(overloading) 是在一個類裏面,方法名字相同,而參數不同。返回類型可以相同也可以不同。(常用的是構造函數)
面向對象的三大特徵:抽象、繼承、多態
繼承是java面向對象編程技術的一塊基石,因爲它允許創建分等級層次的類。
https://www.runoob.com/java/java-inheritance.html
繼承就是子類繼承父類的特徵和行爲,使得子類對象(實例)具有父類的實例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行爲。
支持多次繼承,不支持多繼承。
多態; 繼承-重寫-父類引用指向子類對象 https://www.runoob.com/java/java-polymorphism.html
抽象:https://www.runoob.com/java/java-abstraction.html
接口和抽象類的區別:
1:類描述對象的屬性和方法。接口則包含類要實現的方法
1. 抽象類中的方法可以有方法體,就是能實現方法的具體功能,但是接口中的方法不行。
2. 抽象類中的成員變量可以是各種類型的,而接口中的成員變量只能是 public static final 類型的。
3. 接口中不能含有靜態代碼塊以及靜態方法(用 static 修飾的方法),而抽象類是可以有靜態代碼塊和靜態方法。
4. 一個類只能繼承一個抽象類,而一個類卻可以實現多個接口。
注:JDK 1.8 以後,接口裏可以有靜態方法和方法體了。
接口:https://www.runoob.com/java/java-interfaces.html
關鍵字爲 interface
實現接口用implemts
public interface Hockey extends Sports, Event 多繼承
包; 爲了更好地組織類,Java 提供了包機制,用於區別類名的命名空間。把功能相似或相關的類或接口組織在同一個包中,方便類的查找和使用。
Java 8新特性; https://www.runoob.com/java/java8-new-features.html
https://www.cnblogs.com/bingyimeiling/p/10266949.html
- JDK 用於開發,JRE 用於運行java程序 ;如果只是運行Java程序,可以只安裝JRE,無序安裝JDK。
- JDk包含JRE,JDK 和 JRE 中都包含 JVM。
- JVM 是 java 編程語言的核心並且具有平臺獨立性
開發過程;
使用JDK(調用Java API)編寫Java源代碼,存儲於.java文件中。
JDK中的編譯器javac.exe將Java源代碼編譯成爲字節碼,存儲在.class文件中。
JRE加載、驗證、執行Java字節碼。
JVM將字節碼解釋爲機器碼並映射到CPU指令集或OS(操作系統)的系統調用。