1. 程式人生 > >java面試題——java高級(二)

java面試題——java高級(二)

總公司 set 大小 現在 什麽 gmv lin 了解 rev

四、Java高級部分

1.紅黑樹的實現原理和應用場景;

1.(1)每個節點或者是黑色,或者是紅色。
(2)根節點是黑色。
(3)每個葉子節點(NIL)是黑色。 [註意:這裏葉子節點,是指為空(NIL或NULL)的葉子節點!]
(4)如果一個節點是紅色的,則它的子節點必須是黑色的。
(5)從一個節點到該節點的子孫節點的所有路徑上包含相同數目的黑節點。

註意:
(01) 特性(3)中的葉子節點,是只為空(NIL或null)的節點。
(02) 特性(5),確保沒有一條路徑會比其他路徑長出倆倍。因而,紅黑樹是相對是接近平衡的二叉樹。
2.紅黑樹的應用比較廣泛,主要是用它來存儲有序的數據,它的時間復雜度是O(lgn),效率非常之高。
例如,Java集合中的TreeSet和TreeMap,C
++ STL中的set、map,以及Linux虛擬內存的管理,都是通過紅黑樹去實現的。
參考鏈接:https://www.cnblogs.com/skywang12345/p/3245399.html
https://www.cs.usfca.edu/~galles/visualization/RedBlack.html

2.NIO是什麽?適用於何種場景?

1.NIO是為了彌補IO操作的不足而誕生的網絡通信模型,NIO的一些新特性有:非阻塞I/O,選擇器,緩沖以及管道。管道(Channel),緩沖(Buffer) ,選擇器( Selector)是其主要特征。
2.服務器需要支持超大量的長時間連接。比如10000個連接以上,並且每個客戶端並不會頻繁地發送太多數據。例如總公司的一個中心服務器需要收集全國便利店各個收銀機的交易信息,只需要少量線程按需處理維護的大量長期連接。
Jetty、Mina、Netty、ZooKeeper等都是基於NIO方式實現。

參考鏈接:https:
//www.jianshu.com/p/59f610d8f97d

3.Java9比Java8改進了什麽;

1. Java 平臺級模塊系統。模塊化的 JAR 文件都包含一個額外的模塊描述器。在這個模塊描述器中, 對其它模塊的依賴是通過 “requires” 來表示的。另外, “exports” 語句控制著哪些包是可以被其它模塊訪問到的。所有不被導出的包默認都封裝在模塊的裏面。
2.Linking, jlink 工具實現創建針對應用程序進行優化的最小運行時映像而不需要使用完全加載 JDK 安裝版本。
3.Javadoc 現在支持在 API 文檔中的進行搜索。另外,Javadoc 的輸出現在符合兼容 HTML5 標準。
4.集合工廠方法添加了Set<Integer> ints = Set.of(1, 2, 3); List<String> strings = List.of("first", "second");些方法也可以避免您選擇特定的集合實現 5.從控制臺啟動 jshell ,並直接啟動輸入和執行 Java 代碼。 jshell 的即時反饋使它成為探索 API 和嘗試語言特性的好工具。 6.Stream 接口中添加了 4 個新的方法:dropWhile, takeWhile, ofNullable。還有個 iterate 方法的新重載方法,可以讓你提供一個 Predicate (判斷條件)來指定什麽時候結束叠代: 7.接口的默認方法 8.新的方式來處理 HTTP 調用。這個遲到的特性用於代替老舊的 `HttpURLConnection` API,並提供對 WebSocket 和 HTTP/2 的支持。 9.多版本兼容 JAR 功能能讓你創建僅在特定版本的 Java 環境中運行庫程序時選擇使用的 class 版本
參考鏈接:http://www.importnew.com/24528.html

4.HashMap內部的數據結構是什麽?底層是怎麽實現的?(還可能會延伸考察ConcurrentHashMap與HashMap、HashTable等,考察對技術細節的深入了解程度);

HashMap的底層實現都是數組+鏈表結構實現,添加、刪除、獲取元素時都是先計算hash,根據hash和table.length計算index也就是table數組的下標,然後進行相應操作.
參考鏈接:https://blog.csdn.net/u011202334/article/details/51496381

5.說說反射的用途及實現,反射是不是很慢,我們在項目中是否要避免使用反射;

反射機制是Java語言中一個非常重要的特性,它允許程序在運行時進行自我檢查,同時也允許對其內部成員進行操作。反射機制提供的功能主要有:得到一個對象所屬的類;獲取一個類的所有成員變量和方法;在運行時創建對象;在運行時調用對象的方法,很多框架(比如 Spring)都是配置化的(比如通過 XML文件配置JavaBean,Action之類的),為了保證框架的通用性,他們可能根據配置文件加載不同的對象或類,調用不同的方法,這個時候就必須用到反射——運行時動態加載需要加載的對象。

參考鏈接:https://blog.csdn.net/SongYuxinIT/article/details/81872066

6.說說自定義註解的場景及實現;

使用場景:①類屬性自動賦值。②驗證對象屬性完整性。③代替配置文件功能,像spring基於註解的配置。④可以生成文檔,像java代碼註釋中的@see,@param等

參考鏈接:https://blog.csdn.net/bluuusea/article/details/79996572

7.List 和 Map 區別,Arraylist 與 LinkedList 區別,ArrayList 與 Vector 區別;

1.List是有順序的 可重復的,Map是通過鍵值對進行取值的    key和value是一一對應的
2.①ArrayList是實現了基於動態數組的數據結構,LinkedList基於鏈表的數據結構。 (LinkedList是雙向鏈表,有next也有previous)
  ②對於隨機訪問get和set,ArrayList覺得優於LinkedList,因為LinkedList要移動指針。 
  ③對於新增和刪除操作add和remove,LinedList比較占優勢,因為ArrayList要移動數據。 
3.①Vector的方法都是同步的(Synchronized),是線程安全的(thread-safe),而ArrayList的方法不是,由於線程的同步必然要影響性能,因此,ArrayList的性能比Vector好。 
 ②當Vector或ArrayList中的元素超過它的初始大小時,Vector會將它的容量翻倍,而ArrayList只增加50%的大小,這樣,ArrayList就有利於節約內存空間。

五、Spring相關

8.Spring AOP的實現原理和場景?

Spring bean的作用域和生命周期;

Spring Boot比Spring做了哪些改進? Spring 5比Spring4做了哪些改進;

如何自定義一個Spring Boot Starter?

Spring IOC是什麽?優點是什麽?

SpringMVC、動態代理、反射、AOP原理、事務隔離級別;

java面試題——java高級(二)