java高級工程師面試題
① <java面試>常見的六個面試題
Java面試中常見的六個面試題及答案如下:
BigInteger的使用:
- 描述:BigInteger用於進行大整數運算,允許超出Integer范圍的數據進行計算。
- 構造方法:BigInteger,用於從字元串創建BigInteger實例。
- 成員方法:
- 加法:b1.add
- 減法:b1.subtract
- 乘法:b1.multiply
- 除法:b1.divide
靜態代碼塊、構造代碼塊和構造方法的執行順序:
- 順序:靜態代碼塊 > 構造代碼塊 > 構造方法。
- 特點:靜態代碼塊僅執行一次,當執行new子類對象時,先進行父類初始化,然後進行子類初始化。
==和equals的區別:
- ==:用於基本類型比較值是否相同,用於引用類型比較地址值是否相同。
- equals:Object類默認比較地址值,但String類重寫了equals方法,用於比較內容是否相等。
靜態變數和成員變數的區別:
- 所屬:靜態變數屬於類,成員變數屬於對象。
- 內存位置:靜態變數存儲在方法區的靜態區,成員變數存儲在堆內存。
- 生命周期:靜態變數隨著類載入和卸載,成員變數隨著對象創建和銷毀。
- 調用:靜態變數可以通過類名或對象名調用,成員變數只能通過對象名調用。
Override和Overload的區別,以及this和super的區別:
- Override和Overload:
- Override:發生在子類與父類中,方法名、參數列表相同,返回類型相同或協變,訪問修飾符不能更嚴格。
- Overload:在本類中,方法名相同,參數列表不同,與返回值無關。
- this和super:
- this:代表當前類對象,用於訪問當前類的成員變數和方法。
- super:代表父類,用於訪問父類的成員變數和方法,以及在子類的構造方法中調用父類的構造方法。
- Override和Overload:
繼承的好處與弊端:
- 好處:
- 提高代碼復用性:子類可以繼承父類的屬性和方法,避免重復代碼。
- 提高代碼維護性:通過繼承關系,可以更容易地理解和維護代碼。
- 類與類之間的關系為多態前提:繼承是實現多態的基礎。
- 弊端:
- 增強類耦合性:子類依賴於父類的實現,父類變化可能導致子類也需要變化。
- 打破封裝性:子類可以訪問父類的私有成員,破壞了封裝性。
- 影響代碼結構:過多的繼承可能導致類層次結構復雜,難以維護。
- 好處:
② Java經典面試題-面向對象三大特性
Java面向對象三大特性包括:封裝、繼承、多態。
1. 封裝 定義:封裝是將數據和基於數據的操作包裝在一起,形成一個不可分割的獨立實體。數據被隱藏在抽象數據類型內部,只通過對外提供的介面與外部發生聯系。用戶無需了解對象內部細節,僅通過介面來操作對象。 優點: 降低耦合度:封裝使得類的內部實現與外部使用分離,減少了類之間的依賴。 提高代碼的可讀性和可維護性:通過封裝,類的職責更加明確,代碼結構更加清晰。 隱藏實現細節,增強代碼安全性:封裝保護了類的內部數據不被外部直接訪問和修改,從而增強了代碼的安全性。
2. 繼承 定義:繼承實現「是是一種」關系,如貓繼承自動物。繼承應遵循里氏替換原則,子類可以替換父類使用。 優點: 代碼復用:通過繼承,子類可以復用父類的代碼,減少重復代碼。 層次結構清晰:繼承使得類的層次結構更加清晰,易於理解和維護。 易於維護:當父類代碼發生變化時,子類可以自動繼承這些變化,減少了維護成本。 特點: 子類在初始化前需先完成父類數據初始化,可通過super或this進行構造方法調用。 成員變數關系在子類中查找順序遵循先局部、後成員、再父類的規則。 類中成員變數初始化分為類初始化和子類初始化。成員方法的關系通過重寫實現,遵循方法重寫規則。
3. 多態 定義:多態是指在不同時間表現不同狀態,在Java中,多態分為編譯時多態和運行時多態。運行時多態要求子類可以替換父類,實現方法重寫。 優點: 提高代碼的可維護性:多態使得代碼更加靈活,易於維護和擴展。 提高代碼的擴展性:通過多態,可以在不修改現有代碼的情況下添加新的功能。 注意事項: 多態可能限制訪問子類特有的功能,需要通過強制類型轉換、方法重寫、使用泛型等方式來訪問子類特有的功能。 在多態使用中應注意避免隱藏關鍵實現,確保多態的正確性和靈活性。
③ 阿里P9整理Java 高頻面試題聊一聊 JUC 下的 LinkedBlockingQueue
LinkedBlockingQueue是Java並發包中的一個線程安全的雙端隊列,它繼承自AbstractQueue類並實現了BlockingQueue介面。其主要特性和實現方式如下:
線程安全:
- 允許線程安全地向隊列中添加或刪除元素。這意味著多個線程可以同時訪問隊列,而不會導致數據不一致或競爭條件。
存儲順序:
- 隊列中的元素按插入順序進行存儲。這保證了元素的先進先出順序。
容量設置:
- 隊列的容量可以設置。這允許開發者根據實際需求來限制隊列的大小,從而避免內存溢出等問題。
等待和通知操作:
- 支持元素的等待和通知操作。當隊列滿時,嘗試添加元素的線程會等待;當隊列空時,嘗試獲取元素的線程也會等待。一旦條件滿足,相應的線程會被喚醒並繼續執行。
常用方法:
- put方法:用於將元素添加到隊列中。如果隊列未滿,則直接添加;如果隊列已滿,則線程等待直到有空位。
- offer方法:類似於put方法,但不阻塞線程。如果隊列已滿,則返回false。
- take方法:用於從隊列中獲取元素。如果隊列為空,則線程等待直到有元素可用。
- poll、peek等方法:提供不同類型的獲取操作,如poll方法在隊列為空時返回null,而peek方法返回隊列頭部的元素但不移除它。
總結:LinkedBlockingQueue是一個功能強大的並發隊列,它提供了線程安全的元素添加和獲取操作,並支持多種等待和通知機制。通過理解其內部機制,開發者可以更有效地使用並發技術,提高程序的性能和穩定性。
④ 求java工程師面試題
1.介紹一下你自己吧 ——簡單說說你的大學、專業、特長、志向
2.你了解我們公司的工作嗎?有興趣嗎?——對你要做的工作給出理解同時用事實說明自己有興趣
3.你經常到java論壇嗎?最喜歡哪一個?——最好說CSDN和ITEYE,別人一聽就知道你很有研究。
4.你會考研嗎?你怎麼看待加班和跳槽?——看你是不是能在公司待下去,一定要說自己不考研,專心在公司好好乾,踏實干,如果你說「人總是往高處走的」別人就懷疑你干一年就跳槽!
5.剩下是我總結的經常出現的面試題,答案你可以在這里繼續提問。
1. 寫出你最常用的5個類和5個介面。
2. 寫出你所知道的排序演算法。並用Java實現一個快速排序。
3. 實現4個線程,其中2個每次加1,另外2個每次減1。
4. 寫出你最常遇到的5個異常,並簡單描述它們發生在什麼情況下。
5. 用單例模式實現一個線程池。
6. 如何存儲一個整數,這個整數的長度大於2的64次方。
7. 寫一段代碼,當用戶輸入a,在屏幕上顯示b,在D:\test.txt中寫入c。
8. Swing組件用的進程條是什麼類?
9. JSP裡面哪個內置對象可以提交客戶的請求?
10. 什麼是同步?實現線程同步的關鍵字是什麼?如果已經出現死鎖,你如何解決?
⑤ 面試java工程師,面試官一般問什麼問題
其實每家公司面試側重點是不一樣的,所以會出現不同的面試題,所以在平時的工作中就可以不斷總結積累,給你分享面試題基礎總結:
1、 JVM結構原理、GC工作機制詳解
答:具體參照:JVM結構、GC工作機制詳解,說到GC,記住兩點:1、GC是負責回收所有無任何引用對象的內存空間。 注意:垃圾回收回收的是無任何引用的對象占據的內存空間而不是對象本身,2、GC回收機制的兩種演算法,a、引用計數法 b、可達性分析演算法( 這里的可達性,大家可以看基礎2 Java對象的什麼周期),至於更詳細的GC演算法介紹,大家可以參考:Java GC機制演算法
2、Java對象的生命周期
答:創建階段 、 應用階段 、不可見階段 、不可達階段 、收集階段 、終結階段、 對象空間重新分配階段等等,具體參照:Java 對象的生命周期
3、Map或者HashMap的存儲原理
答:HashMap是由數組+鏈表的一個結構組成,具體參照:HashMap的實現原理
4、當數據表中A、B欄位做了組合索引,那麼單獨使用A或單獨使用B會有索引效果嗎?(使用like查詢如何有索引效果)
答:看A、B兩欄位做組合索引的時候,誰在前面,誰在後面,如果A在前,那麼單獨使用A會有索引效果,單獨使用B則沒有,反之亦然。同理,使用like模糊查詢時,如果只是使用前面%,那麼有索引效果,如果使用雙%號匹配,那麼則無索引效果
5、資料庫存儲日期格式時,如何考慮時區轉換問題?
6、JavaObject類中有哪些方法?
7、HTTP協議,GET和POST 的區別