文章目錄
見面試官前,掏出來看看系列
本系列旨在爲面試者見到面試官之前打發無聊時間之用# JavaSE
緩解面試者見到面試官之前,因爲緊張而頭腦一片空白又想看點知識點來提高安全感之用
輸入輸出流(Java IO)
輸入輸出都稱爲抽象的流,流可以看作一組有序的字節集合
採用Decorator(裝飾者)模型設計
使用這種設計模型的好處:運行時動態的給對象添加一些額外的職責
NIO採用了非阻塞的的方式,在處理大量併發請求時,比Socket效率高
字節流
- 單位:字節(8bit)
- InputStream(輸入流)
- ByteArrayInputStream
- StringBufferInputStream
- FileInputStream
- PipedInputStream
- FilterInputStream(一個封裝類的基類)
- DataInputStream
- BufferedInputStream
- LineNumInputStream
- PushbackInputStream
- OutputStream(輸出流)
- 處理輸入輸出是不用緩存
字符流
- 單位:字符(16bit)
- Reader(輸入流)
- Writer(輸出流)
- 處理輸入輸出用到緩存
File 類
管理文件和文件夾
- File(String 路徑)
- 作用:根據指定路徑創建一個File對象
- creatNewFile()
- 作用:若目錄或文件存在,則返回false,否則創建文件或者文件夾
- delete()
- 作用:刪除文件或文件夾
- isFile()
- 作用:判斷這個對象表示的是否是文件
- isDirectory()
- 作用:判斷這個對象表示的是否是文件夾
- listFiles()
- 作用:若對象代表目錄,則返回目錄中所有文件的File對象
- mkdir()
- 作用:根據當前對象指定的路徑創建對象
- exists()
- 作用:判斷對象對應的文件是否存在
Socket(套字節)
網絡上的兩個程序通過一個雙向的通訊連接實現數據的交換。
任何一個Socket都是由IP地址和端口號唯一確定的。
- 面向連接的Socket通信協議
- TCP(傳輸控制協議)
- 面向無連接的Socket通信協議
- UDP(用戶數據報協議)
- Socket的聲明週期
- 打開Socket
- 使用Socket收發數據
- 關閉Socket
NIO(非阻塞 IO)
採用Rector(反應器)設計模式,可以處理多個事件源
在處理大量併發請求時,使用NIO要比使用Socket效率高出很多
NIO採用了非阻塞的的方式,在處理大量併發請求時,比Socket效率高
-
Selector
- 對所有註冊的Channel進行輪詢訪問,一旦輪詢到一個Channel有註冊的事件發生,進行讀寫操作
-
Channel
-
雙向的非阻塞通道
採用“複用和解複用”的方式使得一個線程可以管理多個線程
-
-
Buffer
- 用來保存從Channel讀取/發送的數據
容器
Map
Map是用來存儲鍵值對的數據結構
- HashMap
- HashTable
- TreeMap
- WeakHashMap
面向對象技術
重載和覆蓋的區別
- 重載(overload)
- 定義 :一個類中,多態的表現,一個類中定義了多個同名方法,它們或有不同的參數個數、有不同的參數類型或不同的參數順序
- 不能通過方法的訪問權限、返回值類型和拋出的異常類型來進行重載
- 如果基類的訪問權限是private,那就不能在派生類對其重載;如果派生類也定義了一個同名方法,不會達到重載的效果,算一個新的方法
- 覆蓋(override)
- 定義 : 派生類函數覆蓋基類函數,覆蓋一個方法並對其重寫,以達到不同的作用
- 派生類中的覆蓋方法必須要和基類中覆蓋的方法有相同的函數名和參數
- 派生類中的覆蓋方法的返回值必須和基類中被覆蓋的方法的返回值相同
- 派生類中的覆蓋方法所拋出的異常必須和基類(或是其子類)中的方法所拋出的異常一致
- 基類被覆蓋的方法不能爲private,否則其子類只是定義了一個
- 區別
- 覆蓋是子類和父類之間的關係;重寫是同一個類中方法之間的關係
- 覆蓋只能有一個方法或一對方法產生關係;重載是多個方法之間的關係
- 覆蓋要求參數列表相同;重寫要求參數列表不同
- 覆蓋關係中:調用方法體是根據對象的類型來決定 重載關係中:根據調用時的實參表與形參表來選擇方法體
面向對象的特徵
- 抽象
- 忽略一個主題中與當前目標無關的那些方面(過程抽象、數據抽象)
- 繼承
- 子類繼承父類的方法、實例變量,並且子類可以修改或新增方法
- 封裝
- 將客觀事物抽象成類,每個類有自身的數據和方法(讓可信的類或對象進行操作,對不可信的進行隱藏)
- 多態
- 允許不同類的對象對同一消息做出響應
字符串和數組
字符串創建與存儲的機制
- String s1 = new String(“abc”) 語句 與 String s2 = new String(“abc”) 語句
- 因爲使用new,就會調用String類的構造方法,即s1和s2指向不同的內存地址
- 若字符串中不存在“abc”,則會創建一個字符串常量“abc”,並添加到字符串池中,反之不創建。然後“new String()”會在堆中創建一個新的對象。
- String s3 = “abc” 語句 與 String s4 = “abc” 語句
- 因爲s3和s4賦值都是“abc“所以它們引用的是同一個JVM常量池中的對象
- 首先在常量池中查找是否存在相同的字符串被定義(依據String類的equals(Object obj)方法)若定義過,直接引用;若沒定義過,先創建對象,然後加入常量池中,再將引用返回
- String s = null
- s是一個字符串的引用,不指向任何一個字符串
- String s = null
- s是一個字符串的引用,指向另外一個 ” “(空字符串) 字符串
- String是不可變類,一旦被創建就不能被修改,因此Sring對象可以被共享而且不會導致程序混亂
”==“、equals()和hashCode有什麼區別
- ”==“
- 用來比較變量的 值 是否相等
- 比較 基本類型的數據 、 兩個引用變量 是否相等
- 比較兩個對象是不是指向同一塊存儲空間
- String s1 = new String(“abc”) 語句 與 String s2 = new String(“abc”) 語句
- s1和s2是不同的對象,首地址不同,所以存儲的數值也不同 s1 == s2 返回 false
- equals()
- Object類提供的,沒有被覆蓋的equals()方法和”==“運算符是一樣的,比較的是引用
- String類的equals()方法是用於比較兩個獨立對象的內容是否相同(堆中的內容是不是相同)
- String s1 = new String(“abc”) 語句 與 String s2 = new String(“abc”) 語句
- 雖然s1和s2首地址不同,但是兩個對象中的內容是相同的,所以 s1.equals(s2) 返回 true
- hashCode
String、StringBuffer、StringBuilder和StringTokenizer的區別
在java中的數組
- 有 屬性(length屬性)
- 有 方法(clone方法)
- 所以數組在java中是對象
length屬性、length()方法和size()方法
- length屬性
- 獲取數組的長度
- length()方法
- 計算字符串的長度
- size()方法
- 查看泛型有多少個元素
數組的初始化方式有哪幾種
由於JavaSE知識內容繁雜,此文章將持續更新……覺得看後有幫助的小夥伴可以關注小名,或者收藏此文。由於本人時間,精力有限,文章中出現的錯誤也請大家幫忙指正~謝謝大家的閱讀😁本文碼字不易,還請大家多多支持小名吖!