前言
對於大廠面試,我想要強調的一點就是心態真的很重要,是決定你在面試過程當中發揮的關鍵,若不能正常發揮,極可能就由於一個小失誤與offer失之交臂,因此必定要重視起來。另外提醒一點,充分複習,是消除你緊張的心理狀態的關鍵,但你複習充分了,天然面試過程當中就要有底氣得多。java
JVM面試題
java中會存在內存泄漏嗎,請簡單描述。
會。本身實現堆載的數據結構時有可能會出現內存泄露,可參看effective java.面試
64 位 JVM 中,int 的長度是多數?
Java 中,int 類型變量的長度是一個固定值,與平臺無關,都是 32 位。意思就是說,在 32 位 和 64 位 的 Java 虛擬機中,int 類型的長度是
相同的。
緩存
Serial 與 Parallel GC 之間的不一樣之處?
Serial 與 Parallel 在 GC 執行的時候都會引發 stop-the-world。它們之間主要不一樣 serial 收集器是默認的複製收集器,執行 GC 的時候只有一個線程,而parallel 收集器使用多個 GC 線程來執行。安全
32 位和 64 位的 JVM,int 類型變量的長度是多數?
32 位和 64 位的 JVM 中,int 類型變量的長度是相同的,都是 32 位或者 4個字節。服務器
Java 中 WeakReference 與 SoftReference 的區別?
雖然 WeakReference 與 SoftReference 都有利於提升 GC 和 內存的效率,可是 WeakReference ,一旦失去最後一個強引用,就會被 GC回收,而軟引用雖然不能阻止被回收,可是能夠延遲到 JVM 內存不足的時候。網絡
JVM 選項 -XX:+UseCompressedOops 有什麼做用?爲何要使用
當你將你的應用從 32 位的 JVM 遷移到 64 位的 JVM 時,因爲對象的指針從32 位增長到了 64 位,所以堆內存會忽然增長,差很少要翻倍。這也會對 CPU緩存(容量比內存小不少)的數據產生不利的影響。由於,遷移到 64 位的 JVM主要動機在於能夠指定最大堆大小,經過壓縮OOP 能夠節省必定的內存。經過-XX:+UseCompressedOops 選項,JVM 會使用 32 位的 OOP,而不是 64 位的 OOP。數據結構
怎樣經過 Java 程序來判斷 JVM 是 32 位 仍是 64位?
你能夠檢查某些系統屬性如 sun.arch.data.model 或 os.arch 來獲取該信息。架構
32 位 JVM 和 64 位 JVM 的最大堆內存分別是多數?
理論上說上 32 位的 JVM 堆內存能夠到達 2^32,即 4GB,但實際上會比這個小不少。不一樣操做系統之間不一樣,如 Windows 系統大約 1.5
GB,Solaris 大約3GB。64 位 JVM 容許指定最大的堆內存,理論上能夠達到 2^64,這是一個很是大的數字,實際上你能夠指定堆內存大小
到 100GB。甚至有的 JVM,如 Azul,堆內存到 1000G 都是可能的。
框架
JRE、JDK、JVM 及 JIT 之間有什麼不一樣?
JRE 表明 Java 運行時(Java run-time),是運行 Java 引用所必須的。JDK 表明 Java 開發工具(Java development kit),是 Java 程序的開
發工具,如 Java編譯器,它也包含 JRE。JVM 表明 Java 虛擬機(Java virtual machine),它的責任是運行 Java 應用。JIT 表明即時編譯
(Just In Time compilation),當代碼執行的次數超過必定的閾值時,會將 Java 字節碼轉換爲本地代碼,如,主要的熱點代碼會被準換爲
本地代碼,這樣有利大幅度提升 Java 應用的性能。
分佈式
解釋 Java 堆空間及 GC?
當經過 Java 命令啓動 Java 進程的時候,會爲它分配內存。內存的一部分用於建立堆空間,當程序中建立對象的時候,就從對空間中分配內存。GC 是 JVM 內部的一個進程,回收無效對象的內存用於未來的分配。
JVM 內存區域
JVM 內存區域主要分爲線程私有區域【程序計數器、虛擬機棧、本地方法區】、線程共享區域【JAVA 堆、方法區】、直接內存。
線程私有數據區域生命週期與線程相同, 依賴用戶線程的啓動/結束 而 建立/銷燬(在 Hotspot VM 內, 每一個線程都與操做系統的本地線程直接映射, 所以這部份內存區域的存/否跟隨本地線程的生/死對應)。
線程共享區域隨虛擬機的啓動/關閉而建立/銷燬。
直接內存並非 JVM 運行時數據區的一部分, 但也會被頻繁的使用: 在 JDK 1.4 引入的 NIO 提供了基於 Channel 與 Buffer 的 IO 方式, 它可使用 Native 函數庫直接分配堆外內存, 而後使用DirectByteBuffer 對象做爲這塊內存的引用進行操做(詳見: Java I/O 擴展), 這樣就避免了在 Java堆和 Native 堆中來回複製數據, 所以在一些場景中能夠顯著提升性能。
程序計數器(線程私有)
一塊較小的內存空間, 是當前線程所執行的字節碼的行號指示器,每條線程都要有一個獨立的程序計數器,這類內存也稱爲「線程私有」 的內存。
正在執行 java 方法的話,計數器記錄的是虛擬機字節碼指令的地址(當前指令的地址) 。若是仍是 Native 方法,則爲空。這個內存區域是惟一一個在虛擬機中沒有規定任何 OutOfMemoryError 狀況的區域。
Spring Cloud面試題
什麼是 Spring Cloud?
Spring cloud 流應用程序啓動器是基於 Spring Boot 的 Spring 集成應用程序,提供與外部系統的集成。Spring cloud Task,一個生命週期短暫的微服務框架,用於快速構建執行有限數據處理的應用程序。
使用 Spring Cloud 有什麼優點?
使用 Spring Boot 開發分佈式微服務時,咱們面臨如下問題
一、與分佈式系統相關的複雜性-這種開銷包括網絡問題,延遲開銷,帶寬問題,安全問題。
二、服務發現-服務發現工具管理羣集中的流程和服務如何查找和互相交談。它涉及一個服務目錄,在該目錄中註冊服務,而後可以查找並鏈接到該目錄中的服務。
三、冗餘-分佈式系統中的冗餘問題。
四、負載平衡 --負載平衡改善跨多個計算資源的工做負荷,諸如計算機,計算機集羣,網絡鏈路,中央處理單元,或磁盤驅動器的分佈。
五、性能-問題 因爲各類運營開銷致使的性能問題。
六、部署複雜性-Devops 技能的要求。
服務註冊和發現是什麼意思?Spring Cloud 如何實現?
當咱們開始一個項目時,咱們一般在屬性文件中進行全部的配置。隨着愈來愈多的服務開發和部署,添加和修改這些屬性變得更加複雜。有些服務可能會降低,而某些位置可能會發生變化。手動更改屬性可能會產生問題。 Eureka 服務註冊和發現能夠在這種狀況下提供幫助。因爲全部服務都在 Eureka 服務器上註冊並經過調用 Eureka 服務器完成查找,所以無需處理服務地點的任何更改和處理。
負載平衡的意義什麼?
在計算中,負載平衡能夠改善跨計算機,計算機集羣,網絡連接,中央處理單元或磁盤驅動器等多種計算源的工做負載分佈。負載平衡旨在優化資源使用,最大化吞吐量,最小化響應時間並避免任何單一資源的過載。使用多個組件進行負載平而不是單個組件可能會經過冗餘來提升可靠性和可用性。負載平衡一般涉及專用軟件或硬件,例如多層交換機或域名系統服務器進程。
什麼是 Hystrix?它如何實現容錯?
Hystrix 是一個延遲和容錯庫,旨在隔離遠程系統,服務和第三方庫的訪問點,當出現故障是不可避免的故障時,中止級聯故障並在複雜的分佈式系統中實現彈性。一般對於使用微服務架構開發的系統,涉及到許多微服務。這些微服務彼此協做。思考如下微服務
假設若是上圖中的微服務 9 失敗了,那麼使用傳統方法咱們將傳播一個異常。但這仍然會致使整個系統崩潰。 隨着微服務數量的增長,這個問題變得更加複雜。微服務的數量能夠高達 1000.這是 hystrix 出現的地方 咱們將使用 Hystrix 在這種狀況下的 Fallback 方法功能。咱們有兩個服務 employee-consumer 使用由 employee-consumer 公開的服務。簡化圖以下所示
如今假設因爲某種緣由,employee-producer 公開的服務會拋出異常。咱們在這種狀況下使用 Hystrix 定義了一個回退方法。這種後備方法應該具備與公開服務相同的返回類型。若是暴露服務中出現異常,則回退方法將返回一些值。
什麼是 Hystrix 斷路器?咱們須要它嗎?
因爲某些緣由,employee-consumer 公開服務會引起異常。在這種狀況下使用Hystrix 咱們定義了一個回退方法。若是在公開服務中發生異常,則回退方法返回一些默認值。
若是 firstPage method() 中的異常繼續發生,則 Hystrix 電路將中斷,而且員工使用者將一塊兒跳過 firtsPage 方法,並直接調用回退方法。斷路器的目的是給第一頁方法或第一頁方法可能調用的其餘方法留出時間,並致使異常恢復。可能發生的狀況是,在負載較小的狀況下,致使異常的問題有更好的恢復機會 。
什麼是服務熔斷?什麼是服務降級
熔斷機制是應對雪崩效應的一種微服務鏈路保護機制。當某個微服務不可用或者響應時間太長時,會進行服務降級,進而熔斷該節點微服務的調用,快速返回「錯誤」的響應信息。當檢測到該節點微服務調用響應正常後恢復調用鏈路。在SpringCloud框架裏熔斷機制經過Hystrix實現,Hystrix會監控微服務間調用的情況,當失敗的調用到必定閾值,缺省是5秒內調用20次,若是失敗,就會啓動熔斷機制。
服務降級,通常是從總體負荷考慮。就是當某個服務熔斷以後,服務器將再也不被調用,此時客戶端能夠本身準備一個本地的fallback回調,返回一個缺省值。這樣作,雖然水平降低,但好歹可用,比直接掛掉強。
SpringBoot和SpringCloud的區別?
SpringBoot專一於快速方便的開發單個個體微服務。
SpringCloud是關注全局的微服務協調整理治理框架,它將SpringBoot開發的一個個單體微服務整合並
管理起來,爲各個微服務之間提供,配置管理、服務發現、斷路器、路由、微代理、事件總線、全局鎖、決策競選、分佈式會話等等集成服務SpringBoot能夠離開SpringCloud獨立使用開發項目, 可是SpringCloud離不開SpringBoot ,屬於依賴的關係.
SpringBoot專一於快速、方便的開發單個微服務個體,SpringCloud關注全局的服務治理框架
說說 RPC 的實現原理
首先須要有處理網絡鏈接通信的模塊,負責鏈接創建、管理和消息的傳輸。其次須要有編解碼的模塊,由於網絡通信都是傳輸的字節碼,需
要將咱們使用的對象序列化和反序列化。剩下的就是客戶端和服務器端的部分,服務器端暴露要開放的服務接口,客戶調用服務接口的一個代理實現,這個代理實現負責收集數據、編碼並傳輸給服務器而後等待結果返回。
微服務 面試題
微服務,又稱微服務 架構,是一種架構風格,它將應用程序構建爲以業務領域爲模型的小型自治服務集合 。
通俗地說,你必須看到蜜蜂如何經過對齊六角形蠟細胞來構建它們的蜂窩狀物。他們最初從使用各類材料的小部分開始,並繼續從中構建一個大型蜂箱。這些細胞造成圖案,產生堅固的結構,將蜂窩的特定部分固定在一塊兒。這裏,每一個細胞獨立於另外一個細胞,但它也與其餘細胞相關。這意味着對一個細胞的損害不會損害其餘細胞,所以,蜜蜂能夠在不影響完整蜂箱的狀況下重建這些細胞。
微服務架構有哪些優點?
- 獨立開發 – 全部微服務均可以根據各自的功能輕鬆開發
- 獨立部署 – 基於其服務,能夠在任何應用程序中單獨部署它們
- 故障隔離 – 即便應用程序的一項服務不起做用,系統仍可繼續運行
- 混合技術堆棧 – 可使用不一樣的語言和技術來構建同一應用程序的不一樣服務
- 粒度縮放 – 單個組件可根據須要進行縮放,無需將全部組件縮放在一塊兒
微服務有哪些特色?
- 解耦 – 系統內的服務很大程度上是分離的。所以,整個應用程序能夠輕鬆構建,更改和擴展
- 組件化 – 微服務被視爲能夠輕鬆更換和升級的獨立組件
- 業務能力 – 微服務很是簡單,專一於單一功能
- 自治 – 開發人員和團隊能夠彼此獨立工做,從而提升速度
- 持續交付 – 經過軟件建立,測試和批准的系統自動化,容許頻繁發佈軟件
- 責任 – 微服務不關注應用程序做爲項目。相反,他們將應用程序視爲他們負責的產品
- 分散治理 – 重點是使用正確的工具來作正確的工做。這意味着沒有標準化模式或任何技術模式。開發人員能夠自由選擇最有用的工具來解決他們的問題
- 敏捷 – 微服務支持敏捷開發。任何新功能均可以快速開發並再次丟棄
設計微服務的最佳實踐是什麼?
微服務架構如何運做?
微服務架構具備如下組件:
- 敏捷 – 微服務支持敏捷開發。任何新功能均可以快速開發並再次丟棄
- 客戶端 – 來自不一樣設備的不一樣用戶發送請求。
- 身份提供商 – 驗證用戶或客戶身份並頒發安全令牌。
- API 網關 – 處理客戶端請求。
- 靜態內容 – 容納系統的全部內容。
- 管理 – 在節點上平衡服務並識別故障。
- 服務發現 – 查找微服務之間通訊路徑的指南。
- 內容交付網絡 – 代理服務器及其數據中心的分佈式網絡。
- 遠程服務 – 啓用駐留在 IT 設備網絡上的遠程訪問信息。
微服務架構的優缺點是什麼?
單片,SOA 和微服務架構有什麼區別?
- 單片架構相似於大容器,其中應用程序的全部軟件組件組裝在一塊兒並緊密封裝。
- 一個面向服務的架構是一種相互通訊服務的集合。通訊能夠涉及簡單的數據傳遞,也能夠涉及兩個或多個協調某些活動的服務。
- 微服務架構是一種架構風格,它將應用程序構建爲以業務域爲模型的小型自治服務集合。
在使用微服務架構時,您面臨哪些挑戰?
- 自動化組件:難以自動化,由於有許多較小的組件。所以,對於每一個組件,咱們必須遵循 Build,Deploy 和 Monitor 的各個階段。
- 易感性:將大量組件維護在一塊兒變得難以部署,維護,監控和識別問題。它須要在全部組件周圍具備很好的感知能力。
- 配置管理:有時在各類環境中維護組件的配置變得困難。
- 調試:很難找到錯誤的每一項服務。維護集中式日誌記錄和儀表板以調試問題相當重要。
SOA 和微服務架構之間的主要區別是什麼?
SOA 和微服務之間的主要區別以下:
微服務有什麼特色?
什麼是領域驅動設計?
什麼是 REST / RESTful 以及它的用途是什麼?
Representational State Transfer(REST)/ RESTful Web 服務是一種幫助計算機系統經過 Internet 進行通訊的架構風格。這使得微服務更容易理解和實現。微服務可使用或不使用 RESTful API 實現,但使用 RESTful API 構建鬆散耦合的微服務老是更容易。
小結
因爲篇幅緣由,只能展現其中一部分,更多面試題都整理成了PDF文檔,具體內容以下!但願能幫助到你面試前的複習且找到一個好的工做,也節省你在網上搜索資料的時間來學習!
歡迎關注個人公衆號:前程有光,點擊領取資料領取這份整理好的Java面試題資料!