Java中高階面試題(附答案)
1、redis如何跟本機資料同步?
程式實作mysql更新、新增、刪除就會同步操作redis
程式查詢redis,不存在就查詢mysql,自動儲存redis
2、redis幾種資料結構?
set、list、hash、string、zset
3、java記憶體溢位是如何造成的?
OutOfMemoryError:
(1)PerGern Space 程式中使用了大量的jar或class,使虛擬機器裝載類別空間不夠。
解決方案:調參XX:PermSize 和XX:MaxPermSize、減少jar包減少類別的重複載入
(2)Java Heap
Space Java虛擬機建立太多對象。解決方法:調參Xms(初始化堆大小)Xmx(最大堆大小)、檢查死循環或不必要建立的重複物件。
(3)unable to create new native Thread
JVM佔用了太多記憶體空間,而在JVM中建立執行緒還要再作業系統中建立執行緒。解決方案:調整JVM中執行緒大小。
4、String s = “123”,這個語句有多少物件產生?
若字串池中沒有“123”,則產生一個,並且放入常數池中,若有“123”,則產生0個
5 、JDK8的新特性,舉例描述
(1)lambda表達式:函數式編程,方法的引用
(2)Stream API
#(3 )介面的預設方法
(4)日期時間API的改進,新增DateTimeFormatter方法
6、解決高並發與高負載
## (1)盡可能html靜態化,採用資訊輸入發布系統CMS實現資訊輸入自動產生靜態頁面,在前端快取不常改變的動態資料。 (2)CDN加速,把CSS/JS等資源分散在不同的伺服器上(3)快取不常改變的資料(Redis、memcache)。 (4)圖片伺服器與應用程式伺服器分離。 (5)群集7、生產者與消費者模式得瑟作用是什麼?
(1)透過平衡生產能力和消費者的消費能力來提升整個系統的運作效率(2)解耦8、Mybatis一級、二層級快取
(1)一級快取:基於PerpetualCache的HashMap本機緩存,其儲存作用域Session,當Sessionflush或close之後,該Session中的所有Cache就將清空。 (2)二級快取與一級快取機制相同,預設也是採用PerpetualCache,HashMap存儲,不同在儲存作用域Mapper,並且可自訂儲存來源,如需開啟二級快取。在sql映射檔案中添加9、描述一個服務從發佈到被消費的詳細過程
首先獲取zk的配置信息,然後獲取需要暴露的url,然後呼叫registry,register方法將url註冊到zookeeper上去10、如何實現負載平衡,有哪些演算法可以實現?
隨機(random)、輪訓(round-robin)、一致雜湊(consistent-hash)和主備(master-slave)11、如果要你實現Spring AOP,怎麼實現?
實作aop技術,主要分為兩大類:一採用動態代理技術,利用截取訊息的方式,對該訊息進行裝飾,以取代原有物件行為的執行二是採用靜態織入的方式,引入特定語法創建“方面”,從而使得編譯器間織入有關“方面”的代碼12、如何防止頁面重複提交?
叢集環境:採用token加redis(redis是單執行緒的,處理需要排隊)處理流程:1、資料提交前要向服務申請token,token放到redis內存,token有效時間2、提交後後台校驗token,同時刪除token,生成新的token返回13、什麼是微服務?
將工程依照不同的業務規則分割成微服務,部署在不同的機器上。服務間進行相互呼叫14、什麼是web服務?
(1)web service就是一個應用程序,它向外界暴露出一個能夠透過web進行呼叫的API(2)基於HTTP協定傳輸數據,這使得運行在不同機上的不同應用程序,無需借助附加的、專門的第三方軟體和硬件,就可以相互交換數據或集成15、談一下你的項目選擇Struts2的理由?
①Action是POJO類,沒有依賴Servlet API,具有良好的可測試性;②強大的攔截器,簡化了開發的複雜度;③支援多種表現層技術:JSP、Freemarker等;④靈活的驗證方式; ⑤國際化(I18N)支援⑥聲明式異常管理;⑦透過JSON插件簡化Ajax; ⑧透過Spring插件跟Spring整合;16、談一下攔截器和過濾器的差別?
攔截器和過濾器都可以用來實現橫切關注功能,其區別主要在於:①攔截器是基於JAVA反射機制的,而過濾器是基於函數回調的
②過濾器依賴Servlet容器,而攔截器不依賴Servlet容器
③攔截器只能對Action請求起作用(Action中的方法),而過濾器可以對幾乎所有的請求起作用(CSS JSP JS)
17、Spring支援的事務管理類型?
編程式事務管理:程式設計的方式管理事物,極大的彈性,難以維護
聲明式交易管理:可以將業務程式碼和事物管理分開、只需要用註解和XML設定來管理事物
php中文網,大量的免費Java入門教學,歡迎線上學習!
以上是Java中高階面試題(附答案)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undress AI Tool
免費脫衣圖片

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

寫好PHP註釋的關鍵在於明確目的與規範,註釋應解釋“為什麼”而非“做了什麼”,避免冗餘或過於簡單。 1.使用統一格式,如docblock(/*/)用於類、方法說明,提升可讀性與工具兼容性;2.強調邏輯背後的原因,如說明為何需手動輸出JS跳轉;3.在復雜代碼前添加總覽性說明,分步驟描述流程,幫助理解整體思路;4.合理使用TODO和FIXME標記待辦事項與問題,便於後續追踪與協作。好的註釋能降低溝通成本,提升代碼維護效率。

寫好註釋的關鍵在於說明“為什麼”而非僅“做了什麼”,提升代碼可讀性。 1.註釋應解釋邏輯原因,例如值選擇或處理方式背後的考量;2.對複雜邏輯使用段落式註釋,概括函數或算法的整體思路;3.定期維護註釋確保與代碼一致,避免誤導,必要時刪除過時內容;4.在審查代碼時同步檢查註釋,並通過文檔記錄公共邏輯以減少代碼註釋負擔。

註釋不能馬虎是因為它要解釋代碼存在的原因而非功能,例如兼容老接口或第三方限制,否則看代碼的人只能靠猜。必須加註釋的地方包括複雜的條件判斷、特殊的錯誤處理邏輯、臨時繞過的限制。寫註釋更實用的方法是根據場景選擇單行註釋或塊註釋,函數、類、文件開頭用文檔塊註釋說明參數與返回值,並保持註釋更新,對複雜邏輯可在前面加一行概括整體意圖,同時不要用註釋封存代碼而應使用版本控制工具。

第一步選擇集成環境包XAMPP或MAMP搭建本地服務器;第二步根據項目需求選擇合適的PHP版本並配置多版本切換;第三步選用VSCode或PhpStorm作為編輯器並搭配Xdebug進行調試;此外還需安裝Composer、PHP_CodeSniffer、PHPUnit等工具輔助開發。

PHP註釋有三種常用方式:單行註釋適合簡要說明代碼邏輯,如//或#用於當前行解釋;多行註釋/*...*/適合詳細描述函數或類的作用;文檔註釋DocBlock以/**開頭,為IDE提供提示信息。使用時應避免廢話、保持同步更新,並勿長期用註釋屏蔽代碼。

PHP比較運算符需注意類型轉換問題。 1.使用==僅比較值,會進行類型轉換,如1=="1"為true;2.使用===需值與類型均相同,如1==="1"為false;3.大小比較可作用於數值和字符串,如"apple"

寫好PHP註釋的關鍵在於清晰、有用且簡潔。 1.註釋應說明代碼背後的意圖而非僅描述代碼本身,如解釋複雜條件判斷的邏輯目的;2.在魔術值、舊代碼兼容、API接口等關鍵場景添加註釋以提升可讀性;3.避免重複代碼內容,保持簡潔具體,並使用標準格式如PHPDoc;4.註釋需與代碼同步更新,確保准確性。好的註釋應站在他人角度思考,降低理解成本,成為代碼的理解導航儀。

寫好PHP註釋的關鍵在於解釋“為什麼”而非“做什麼”,統一團隊註釋風格,避免重複代碼式註釋,合理使用TODO和FIXME標記。 1.註釋應重點說明代碼背後的邏輯原因,如性能優化、算法選擇等;2.團隊需統一註釋規範,如單行註釋用//,函數類用docblock格式,並包含@author、@since等標籤;3.避免僅複述代碼內容的無意義註釋,應補充業務含義;4.使用TODO和FIXME標記待辦事項,並可配合工具追踪,確保註釋與代碼同步更新,提升項目可維護性。
