① java面試時問在項目開發時遇到最難的是什麼問題,怎麼解決
面試時,回答在項目開發中遇到最難的問題以及如何解決,可以從以下幾個關鍵點展開:
難點1:測試、部署和管理流程不熟悉。
你可以在項目中展示你的參與和成長。例如:我們項目使用了Maven進行項目管理、Jenkins進行部署,Git進行代碼管理。除了編碼,我還負責了單元測試和聯調。我們最終將Java代碼打包為jar包,並部署到了Linux伺服器。這個過程展示你的項目測試、部署和管理的綜合能力。
難點2:資料庫性能調優經驗。
你可以描述監控過程,如使用CAT、New Relic或Zabbix監控資料庫。遇到性能問題時,通過查看執行計劃和業務日誌分析問題,例如,發現沒有為特定欄位建立索引或緩存,導致性能瓶頸。解決方法包括建立索引、使用復合索引或引入緩存。
難點3:JVM內存管理。
分享監控內存使用情況、處理內存泄露的經驗,如通過JVM內存監控工具發現內存使用異常,並分析原因和採取的措施。例如,發現內存泄露是因為沒有關閉文件對象或緩存設置不當,採取了關閉對象和優化緩存策略。
難點4:Linux操作系統技能。
分享在Linux環境下處理問題的經驗,如在Linux伺服器上查看日誌文件,定位業務問題。描述遇到的錯誤,如伺服器錯誤500,並說明如何通過日誌文件定位問題原因,並採取相應措施。
亮點5:理解底層源碼。
分享通過閱讀和理解底層源碼解決實際問題的經驗,例如在庫存管理中遇到快速失效問題,通過閱讀相關源碼理解並解決。展示對數據結構和演算法的理解能力。
在准備面試時,確保每個亮點都能結合具體項目經驗進行闡述,並准備相關技能的細節,如資料庫調優中的Redis和索引知識、JVM內存管理的JVM結構、演算法與數據結構等,同時也要准備如何回答面試官可能提出的細節問題。面試過程中,通過引導面試官關注關鍵技能和經驗,以展示你的項目經驗和能力。
② Java常見的面試問題(帶答案),自己答出來多少
1、在java中如果聲明一個類為final,表示什麼意思?
答:final是最終的意思,final可用於定義變數、方法和類但含義不同,聲明為final的類不能被繼承。
父類的構造方法是否可以被子類覆蓋(重寫)?
答:父類的構造方法不可以被子類覆蓋,因為父類和子類的類名是不可能一樣的。
2、請講述String 和StringBuffer的區別。
答:String 類所定義的對象是用於存放」長度固定」的字元串。
StringBuffer類所定義的對象是用於存放」長度可變動」的字元串。
3、如果有兩個類A、B(注意不是介面),你想同時使用這兩個類的功能,那麼你會如何編寫這個C類呢?
答:因為類A、B不是介面,所以是不可以直接繼承的,但可以將A、B類定義成父子類,那麼C類就能實現A、B類的功能了。假如A為B的父類,B為C的父類,此時C就能實現A、B的功能。
4、談談你對抽象類和介面的理解。
答:定義抽象類的目的是提供可由其子類共享的一般形式、子類可以根據自身需要擴展抽象類、抽象類不能實例化、抽象方法沒有函數體、抽象方法必須在子類中給出具體實現。他使用extends來繼承。
介面:一個介面允許一個類從幾個介面繼承而來,Java 程序一次只能繼承一個類但可以實現幾個介面,介面不能有任何具體的方法,介面也可用來定義可由類使用的一組常量。其實現方式是interface來實現。
5、Java中什麼是競態條件?
答:競態條件會導致程序在並發情況下出現一些bugs。多線程對一些資源的競爭的時候就會產生競態條件,如果首先要執行的程序競爭失敗排到後面執行了,那麼整個程序就會出現一些不確定的bugs。這種bugs很難發現而且會重復出現,因為線程間的隨機競爭。
6、Java中如何停止一個線程?
答:Java提供了很豐富的API但沒有為停止線程提供API。JDK 1.0本來有一些像stop(), suspend() 和 resume()的控制方法但是由於潛在的死鎖威脅因此在後續的JDK版本中他們被棄用了,之後Java API的設計者就沒有提供一個兼容且線程安全的方法來停止一個線程。當run() 或者 call() 方法執行完的時候線程會自動結束,如果要手動結束一個線程,你可以用volatile 布爾變數來退出run()方法的循環或者是取消任務來中斷線程。點擊這里查看示例代碼。
7、 一個線程運行時發生異常會怎樣?
答: 簡單的說,如果異常沒有被捕獲該線程將會停止執行。Thread.UncaughtExceptionHandler是用於處理未捕獲異常造成線程突然中斷情況的一個內嵌介面。當一個未捕獲異常將造成線程中斷的時候JVM會使用Thread.getUncaughtExceptionHandler()來查詢線程的UncaughtExceptionHandler並將線程和異常作為參數傳遞給handler的uncaughtException()方法進行處理。