java提問
⑴ java面試提問:什麼是OOP
OOP是面向對象編程的英文全稱(Object Oriented Programming)的英文的首字母,它表示的是一種計算機編程架構。關於面試中OOP的提問可以從其核心思想封裝,繼承,多態三方面展開,具體如下:
1.OOP之封裝,封裝主要是保證組件不會以不可預期的方式改變其他組件的內部狀態,而只有在那些提供了內部狀態改變方法的組件中得情況下,才可以訪問其內部狀態。
2.抽象完一個事物後,可能在特定的條件下,其本身的狀態需要改變,但是這個改變並允許其他的事物來進行,這樣的改變只允許這個事物認同的操作域來進行,可以是該事物本身,也可以是它信任的其他事物。這樣我們就能對我們抽象完的每個事物進行自身數據的保護。
3.OOP之繼承,繼承指的是從已有類得到繼承信息創建新類的過程。讓抽象出來的事物具有本應該具有的聯系。允許在現存的組件基礎上創建子類組件,這統一和增強了另外兩個特性——多態性和封裝性。
4.一般來說就是用類來對組件進行分組,並且還可以定義新類為現存的類的擴展,這樣則可將類組織成樹形或網狀結構,這體現了動作的通用性。
5.OOP之多態,從定義上來說,多態指的是組件的引用和類集會涉及到其它許多不同類型的組件,而且引用組件所產生的結果得依據實際調用的類型。
6.在實際應用體現為用一種解決方案來解決對一類問題,對於不同的事物解決途徑和結果不同。在C++中實現多態性有三種方法,分別是:虛函數,函數重載和運算符重載。
(1)java提問擴展閱讀:
OOP相對於面向過程編程的優點:
(1)OOP關注對象和角色,也就是事物的本質。
(2)OOP把客觀世界中的對象抽象成對應的類; 2)通過類構造實例; 3)通過依賴、繼承、實現等形式建立對象間的通信關系。
(3)OOP易於擴展,增加或改變業務的功能,無需大幅改動改變源代碼。
(4)OOP易於建模,OOP就是軟體架構師在計算機高級語言中對客觀世界的抽象和再現,人們可以很好地理解和建立起計算機中的抽象模型。
參考資料來源:網路-OOP
⑵ 如果你是一個 Java 面試官,你會問哪些問題
1、談談你對 Java 平台的理解?「Java 是解釋執行」,這句話正確嗎?
考點分析:對於這類籠統的問題,你需要盡量表現出自己的思維深入並系統化,Java 知識理解得也比較全面,一定要避免讓面試官覺得你是個「知其然不知其所以然」的人。畢竟明白基本組成和機制,是日常工作中進行問題診斷或者性能調優等很多事情的基礎,相信沒有招聘方會不喜歡「熱愛學習和思考」的面試者。
回歸正題,對於 Java 平台的理解,可以從很多方面簡明扼要地談一下,例如:Java 語言特性,包括泛型、Lambda 等語言特性;基礎類庫,包括集合、IO/NIO、網路、並發、安全等基礎類庫。對於我們日常工作應用較多的類庫,面試前可以系統化總結一下,有助於臨場發揮。
2、對比Hashtable、HashMap、TreeMap有什麼不同?
考點分析:上面的回答,只是對一些基本特徵的簡單總結,針對Map相關可以擴展的問題很多,從各種數據結構、典型應用場景,到程序設計實現的技術考量,尤其是在Java 8里,HashMap本身發生了非常大的變化,這些都是經常考察的方面。
很多朋友向我反饋,面試官似乎鍾愛考察HashMap的設計和實現細節,所以今天我會增加相應的源碼解讀,主要專注於下面幾個方面:
理解Map相關類似整體結構,尤其是有序數據結構的一些要點。
從源碼去分析HashMap的設計和實現要點,理解容量、負載因子等,為什麼需要這些參數,如何影響Map的性能,實踐中如何取捨等。
理解樹化改造的相關原理和改進原因。
除了典型的代碼分析,還有一些有意思的並發相關問題也經常會被提到,如HashMap在並發環境可能出現無限循環佔用CPU、size不準確等詭異的問題。
我認為這是一種典型的使用錯誤,因為HashMap明確聲明不是線程安全的數據結構,如果忽略這一點,簡單用在多線程場景里,難免會出現問題。
理解導致這種錯誤的原因,也是深入理解並發程序運行的好辦法。對於具體發生了什麼,你可以參考這篇很久以前的分析,裡面甚至提供了示意圖,我就不再重復別人寫好的內容了。
3、Java 提供了哪些 IO 方式? NIO 如何實現多路復用?
考點分析:在實際面試中,從傳統 IO 到 NIO、NIO 2,其中有很多地方可以擴展開來,考察點涉及方方面面,比如:
基礎 API 功能與設計, InputStream/