棧區:前端
堆區:java
方法區:android
程序計數器:ios
類的加載指的是將類的.class文件中的二進制數據讀入到內存中,將其放在運行時數據區的方法區內,而後在堆區建立一個java.lang.Class對象,用來封裝類在方法區內的數據結構。類的加載的最終產品是位於堆區中的Class對象,Class對象封裝了類在方法區內的數據結構,而且向Java程序員提供了訪問方法區內的數據結構的接口。程序員
類的生命週期包括這幾個部分,加載、鏈接、初始化、使用和卸載面試
判斷對象是否存活通常有兩種方式:算法
GC最基礎的算法有三種:標記 -清除算法、複製算法、標記-壓縮算法,咱們經常使用的垃圾回收器通常都採用分代收集算法。spring
Sun JDK監控和故障處理命令有jps jstat jmap jhat jstack jinfosql
管理方式數據庫
空間大小
碎片相關
分配方式
效率
類加載器負責讀取 Java 字節代碼,並轉換成java.lang.Class類的一個實例;有如下幾張類加載去:
自定義類加載器須要繼承抽象類ClassLoader,實現findClass方法,該方法會在loadClass調用的時候被調用,findClass默認會拋出異常。
使用雙親委託機制的好處是:
類從被加載到虛擬機內存中開始,到卸載出內存爲止,它的整個生命週期包括:加載(Loading)、驗證(Verification)、準備(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸載(Unloading)7個階段。其中準備、驗證、解析3個部分統稱爲鏈接(Linking)
加載、驗證、準備、初始化和卸載這5個階段的順序是肯定的,類的加載過程必須按照這種順序循序漸進地開始,而解析階段則不必定:它在某些狀況下能夠在初始化階段以後再開始,這是爲了支持Java語言的運行時綁定(也稱爲動態綁定或晚期綁定)。如下陳述的內容都已HotSpot爲基準。
Direct exchange(直連交換機):直連型交換機(direct exchange)是根據消息攜帶的路由鍵(routing key)將消息投遞給對應隊列的,步驟以下:
Topic exchange(主題交換機):主題交換機(topic exchanges)中,隊列經過路由鍵綁定到交換機上,而後,交換機根據消息裏的路由值,將消息路由給一個或多個綁定隊列。
Headers exchange(頭交換機):相似主題交換機,可是頭交換機使用多個消息屬性來代替路由鍵創建路由規則。經過判斷消息頭的值可否與指定的綁定相匹配來確立路由規則。 此交換機有個重要參數:」x-match」。
RabbitMQ
kafka
SQL標準中的事務四種隔離級別
InnoDB是一個事務型的存儲引擎,支持回滾,設計目標是處理大數量數據時提供高性能的服務,它在運行時會在內存中創建緩衝池,用於緩衝數據和索引。
優勢:
缺點:
MyISAM 是 MySQL 5.5.5 以前的默認引擎,它的設計目標是快速讀取。
優勢:
缺點:
適用場景:
MyISAM適合:
InnoDB適合:
Memcache
Redis
SET key value [EX seconds] [PX milliseconds] [NX|XX]
使用List做爲隊列,RPUSH生產消息,LPOP消費消息
缺點:沒有等待隊列裏面有值就直接消費
解決方案:
Spring Cloud是一個全家桶式的技術棧,包含了不少組件,其中比較核心的有Eureka、Ribbon、Feign、Hystrix、Zuul這幾個組件。
Eureka是微服務架構中的註冊中心,專門負責服務的註冊與發現。每一個服務中都有一個Eureka Client組件,這個組件專門負責將這個服務的信息註冊到Eureka Server中。說白了,就是告訴Eureka Server,本身在哪臺機器上,監聽着哪一個端口。而Eureka Server是一個註冊中心,裏面有一個註冊表,保存了各服務所在的機器和端口號。服務調用者調用對應服務時,它的Eureka Client組件會找Eureka Server查找對應的服務信息進行調用,而後就能夠把這些相關信息從Eureka Server的註冊表中拉取到本身本地緩存起來,方便下次調用。
Feign基於動態代理機制,根據註解和選擇的機器,拼接請求URL地址,發起請求。Feign的一個關鍵機制就是使用了動態代理。
Ribbon的做用是負載均衡,會幫你在每次請求時選擇一臺機器,均勻的把請求分發到各個機器上。Ribbon的負載均衡默認使用的最經典的Round Robin輪詢算法。並且,Ribbon是和Feign以及Eureka緊密協做,完成工做的。
基於XA協議的兩階段提交方案
TCC方案
事務開始時,業務應用會向事務協調器註冊啓動事務。以後業務應用會調用全部服務的try接口,完成一階段準備。以後事務協調器會根據try接口返回狀況,決定調用confirm接口或者cancel接口。若是接口調用失敗,會進行重試。
基於可靠消息的最終一致性方案
GTS
當所攔截的方法有指定異常拋出,事務纔會自動進行回滾。默認狀況下是捕獲到方法的RuntimeException異常,也就是說拋出只要屬於運行時的異常(即RuntimeException及其子類)都能回滾;但當拋出一個不屬於運行時異常時,事務是不會回滾的。若是是其餘異常想要實現回滾,能夠進行配置。
事務的傳播性通常在事務嵌套時候使用,好比在事務A裏面調用了另一個使用事務的方法,那麼這倆個事務是各自做爲獨立的事務執行提交,仍是內層的事務合併到外層的事務一塊提交那,這就是事務傳播性要肯定的問題。spring支持7種事務傳播行爲:
備註:經常使用的兩個事務傳播屬性是1和4,即PROPAGATION_REQUIRED,PROPAGATION_REQUIRES_NEW
事務的隔離性是指多個事務併發執行的時候相互之間不受到彼此的干擾。
事務的隔離級別也分爲四種,由低到高依次分別爲:read uncommited(讀未提交)、read commited(讀提交)、read repeatable(讀重複)、serializable(序列化),這四個級別能夠逐個解決髒讀、不可重複讀、幻讀這幾類問題。
事務特性分爲四個:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持續性(Durability)簡稱ACID。
SpringIOC負責建立對象,管理對象(經過依賴注入(DI),裝配對象,配置對象,而且管理這些對象的整個生命週期。
依賴注入,是IOC的一個方面。這概念是說你不用建立對象,而只須要描述它如何被建立。你不在代碼裏直接組裝你的組件和服務,可是要在配置文件裏描述哪些組件須要哪些服務,以後一個容器(IOC容器)負責把他們組裝起來。
調用SpringApplication.run()方法
咱們這裏描述的是應用Spring上下文Bean的生命週期,若是應用Spring的工廠也就是BeanFactory的話去掉第5步就Ok了。
本次面試題分享到此爲止,限於篇幅,無法在這裏給你們分享更多的面試題; 以前不少粉絲一直私信我讓我整理一些面試題,近些天終於整理好了,筆者整理了一份包含Kafka、Mysql、Tomcat、Docker、Spring、MyBatis、Nginx、Netty、Dubbo、Redis、Netty、Spring cloud、分佈式、高併發、性能調優、微服務等架構技術的面試題和部分視頻學習資料;
須要的朋友點擊下方傳送門, 便可免費領取面試資料和視頻學習資料
如下是部分面試題截圖