java面试题4(基础)
1. BIO、NIO、AIO 有什么區別?
同步阻塞IO(BIO)
??????? 我們熟知的Socket編程就是BIO,一個socket連接一個處理線程(這個線程負責這個Socket連接的一系列數據傳輸操作)。阻塞的原因在于:操作系統允許的線程數量是有限的,多個socket申請與服務端建立連接時,服務端不能提供相應數量的處理線程,沒有分配到處理線程的連接就會阻塞等待或被拒絕。
同步非阻塞IO(NIO)
???????? New IO是對BIO的改進,基于Reactor模型。我們知道,一個socket連接只有在特點時候才會發生數據傳輸IO操作,大部分時間這個“數據通道”是空閑的,但還是占用著線程。NIO作出的改進就是“一個請求一個線程”,在連接到服務端的眾多socket中,只有需要進行IO操作的才能獲取服務端的處理線程進行IO。這樣就不會因為線程不夠用而限制了socket的接入。客戶端的socket連接到服務端時,就會在事件分離器注冊一個 IO請求事件 和 IO 事件處理器。在該連接發生IO請求時,IO事件處理器就會啟動一個線程來處理這個IO請求,不斷嘗試獲取系統的IO的使用權限,一旦成功(即:可以進行IO),則通知這個socket進行IO數據傳輸。
異步阻塞IO(AIO)
AIO是發出IO請求后,由操作系統自己去獲取IO權限并進行IO操作;NIO則是發出IO請求后,由線程不斷嘗試獲取IO權限,獲取到后通知應用程序自己進行IO操作。
?
2. Files的常用方法都有哪些?
File():構造函數,一般是依據文件所在的指定位置來創建文件對象。??
CanWrite():返回文件是否可寫。??
CanRead():返回文件是否可讀。?
CompareTo(File pathname):檢查指定文件路徑間的順序。?
Delet():從文件系統內刪除該文件。?
DeleteOnExit():程序順利結束時從系統中刪除文件。?
Equals(Object obj):檢查特定對象的路徑名是否相等。?
Exists():判斷文件夾是否存在。?
GetAbsoluteFile():返回文件的完整路徑。?
GetAbsolutePath():返回文件的完整路徑。?
GetName():返回文件名稱。?
GetParent():返回文件父目錄路徑。?
GetPath():返回文件的潛在相對路徑。?
GetParentFile():返回文件所在文件夾的路徑。?
HashCode():返回文件哈希碼。?
IsDirectory():判斷該路徑指示的是否是文件。?
IsFile():判斷該路徑指示的是否是文件。?
LastModified() :返回文件的最后修改時間標志。?
Length():返回文件長度。?
List():返回文件和目錄清單。?
Mkdir():生成指定的目錄。?
RenameTo(File dest):更名文件。?
SetReadOnly():將文件設置為可讀。?
ToString():返回文件狀態的字符串。?
ToURL():將文件的路徑字符串轉換成URL?
3. java 容器都有哪些?
?
1、分類
Collection接口
- List,按照插入順序保存元素
- Set,插入元素不能重復且無序
- Queue,先進先出
Map接口
鍵值對的一組映射。
2、實現類
2.1 List
ArrayList
- 基于數組實現
- 優點在于隨機訪問列表中的元素速度快
- 缺點在于插入刪除效率低
LinkedList
- 獲取列表第一個元素
- 列表為空時,element()拋出NoSuchElementException異常,peek()返回null
- 刪除列表第一個元素
- 列表為空時remove()拋出異常,poll()返回null
2.2 Set
Set的最重要的應用就是判斷一個元素是否在一個Set中,* contains()/containsAll() ,因此查找就成了Set中最重要的操作,通常會選擇一個 HashSet *來實現快速查找。
HashSet
采用散列函數,查找速度較快,順序與添加的順序可能不同
TreeSet
元素存儲在紅-黑樹中,對元素進行排序
LinkedHashSet
既保存了查找的速度,也保存了插入的順序
?
4. Collection 和 Collections 有什么區別?
1、java.util.Collection 是一個集合接口。它提供了對集合對象進行基本操作的通用接口方法。Collection接口在Java 類庫中有很多具體的實現。Collection接口的意義是為各種具體的集合提供了最大化的統一操作方式。
2.java.util.Collections 是一個包裝類。它包含有各種有關集合操作的靜態多態方法。此類不能實例化,就像一個工具類,服務于Java的Collection框架。
5. List、Set、Map 之間的區別是什么?
?
1.??三者之間的區別如下:
1) 元素重復性:
① List允許有重復的元素。任何數量的重復元素都可以在不影響現有重復元素的值及其索引的情況下插入到List集合中;
② Set集合不允許元素重復。Set以及所有實現了Set接口的類都不允許重復值的插入,若多次插入同一個元素時,在該集合中只顯示一個;
③ Map以鍵值對的形式對元素進行存儲。Map不允許有重復鍵,但允許有不同鍵對應的重復的值;
2) 元素的有序性:
① List及其所有實現類保持了每個元素的插入順序;
② Set中的元素都是無序的;但是某些Set的實現類以某種殊形式對其中的元素進行排序,如:LinkedHashSet按照元素的插入順序進行排序;
③ Map跟Set一樣對元素進行無序存儲,但其某些實現類對元素進行了排序。如:TreeMap根據鍵對其中的元素進行升序排序;
3) 元素是否為空值:
① List允許任意數量的空值;
② Set最多允許一個空值的出現;[ 當向Set集合中添加多個null值時,在該Set集合中只會顯示一個null元素]
③??Map只允許出現一個空鍵,但允許出現任意數量的空值;
?
總結: List中的元素,有序、可重復、可為空;
? ? Set中的元素,無序、不重復、只有一個空元素;
? ? Map中的元素,無序、鍵不重,值可重、可一個空鍵、多可空值;
總結
以上是生活随笔為你收集整理的java面试题4(基础)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java面试题3(java基础)
- 下一篇: 2019 ACM-icpc西安邀请赛总结