根據 JVM 規範,JVM 內存共分爲虛擬機棧、堆、方法區、程序計數器、本地方法棧五個部分。前端
1. Java虛擬機棧:線程私有;每一個方法在執行的時候會建立一個棧幀,存儲了局部變量表,操做數棧,動態鏈接,方法返回地址等;每一個方法從調用到執行完畢,對應一個棧幀在虛擬機棧中的入棧和出棧。面試
2. 堆:線程共享;被全部線程共享的一塊內存區域,在虛擬機啓動時建立,用於存放對象實例。正則表達式
3. 方法區:線程共享;被全部線程共享的一塊內存區域;用於存儲已被虛擬機加載的類信息,常量,靜態變量等。spring
4. 程序計數器:線程私有;是當前線程所執行的字節碼的行號指示器,每條線程都要有一個獨立的程序計數器,這類內存也稱爲「線程私有」的內存。設計模式
5. 本地方法棧:線程私有;主要爲虛擬機使用到的Native方法服務。安全
那先要明白什麼是線程池session
線程池是指在初始化一個多線程應用程序過程當中建立一個線程集合,而後在須要執行新的任務時重用這些線程而不是新建一個線程。數據結構
使用線程池的好處多線程
對查詢進行優化,應儘可能避免全表掃描,首先應考慮在 where 及 order by 涉及的列上創建索引。併發
應儘可能避免在 where 子句中使用!=或<>操做符,不然引擎將放棄使用索引而進行全表掃描。
儘可能使用數字型字段,若只含數值信息的字段儘可能不要設計爲字符型,這會下降查詢和鏈接的性能,並會增長存儲開銷。這是由於引擎在處理查詢和鏈接時會逐個比較字符串中每個字符,而對於數字型而言只須要比較一次就夠了。
任何地方都不要使用 select * from t ,用具體的字段列表代替「*」,不要返回用不到的任何字段。
避免頻繁建立和刪除臨時表,以減小系統表資源的消耗。諸如此類,等等等等......
死鎖的介紹:
線程死鎖是指因爲兩個或者多個線程互相持有對方所須要的資源,致使這些線程處於等待狀態,沒法前往執行。當線程進入對象的synchronized代碼塊時,便佔有了資源,直到它退出該代碼塊或者調用wait方法,才釋放資源,在此期間,其餘線程將不能進入該代碼塊。當線程互相持有對方所須要的資源時,會互相等待對方釋放資源,若是線程都不主動釋放所佔有的資源,將產生死鎖。
死鎖的產生的一些特定條件:
如何避免:
1. 加鎖順序:當多個線程須要相同的一些鎖,可是按照不一樣的順序加鎖,死鎖就很容易發生。若是能確保全部的線程都是按照相同的順序得到鎖,那麼死鎖就不會發生。固然這種方式須要你事先知道全部可能會用到的鎖,然而總有些時候是沒法預知的。
2. 加鎖時限:加上一個超時時間,若一個線程沒有在給定的時限內成功得到全部須要的鎖,則會進行回退並釋放全部已經得到的鎖,而後等待一段隨機的時間再重試。可是若是有很是多的線程同一時間去競爭同一批資源,就算有超時和回退機制,仍是可能會致使這些線程重複地嘗試但卻始終得不到鎖。
3. 死鎖檢測:死鎖檢測即每當一個線程得到了鎖,會在線程和鎖相關的數據結構中(map、graph等等)將其記下。除此以外,每當有線程請求鎖,也須要記錄在這個數據結構中。死鎖檢測是一個更好的死鎖預防機制,它主要是針對那些不可能實現按序加鎖而且鎖超時也不可行的場景。
1. singleton:Spring IoC容器中只會存在一個共享的Bean實例,不管有多少個Bean引用它,始終指向同一對象。Singleton做用域是Spring中的缺省做用域。
2. prototype:每次經過Spring容器獲取prototype定義的bean時,容器都將建立一個新的Bean實例,每一個Bean實例都有本身的屬性和狀態,而singleton全局只有一個對象。
3. request:在一次Http請求中,容器會返回該Bean的同一實例。而對不一樣的Http請求則會產生新的Bean,並且該bean僅在當前Http Request內有效。
4. session:在一次Http Session中,容器會返回該Bean的同一實例。而對不一樣的Session請求則會建立新的實例,該bean實例僅在當前Session內有效。
5. global Session:在一個全局的Http Session中,容器會返回該Bean的同一個實例,僅在使用portlet context時有效。
1. 代理模式:在AOP和remoting中被用的比較多。
2. 單例模式:在spring配置文件中定義的bean默認爲單例模式。
3. 模板方法模式:用來解決代碼重複的問題。
4. 前端控制器模式:Spring提供了DispatcherServlet來對請求進行分發。
5. 依賴注入模式:貫穿於BeanFactory / ApplicationContext接口的核心理念。
6. 工廠模式:BeanFactory用來建立對象的實例。
核心:控制反轉和麪向切面
請求處理流程:
控制反轉如何實現:
因爲篇幅有限,部分答案就不作所有展現了,這些面試題的答案我已經整理成PDF文檔了,同時也整理了一些問題詳解;雖說花了一點時間,可是我也願意把它免費分享出來,但願可以幫助到有須要的Java工程師朋友,也省的你們再去網上花時間找資料。
領取方式,公衆號後臺回覆【面試】,便可免費領取