一份用心整理的Android面試總結

閱讀全文請點擊

如夢朦朧

九月份的時候有了換工作的躁動,然後投了某度的Android崗位,本以爲像我這種非211、985沒工作經驗的渣渣只能被直接pass,結果卻意外的收到了電話,真是受寵若驚.經過電面,技術三面,然後就是等通知到最後拿到了OFFER,如夢一般,真是挺激動的.

面試的準備

當收到HR的面試的通知還是很懵逼的,因爲感覺自己突然啥都不會了,迅速鎮定下來,去網上找了一下某度的面試題,但是發現都只有提問了什麼並沒有對所提問題的解答,那隻能自力更生,像做試卷一樣,一遍總結一遍溫顧.其實大多都是平時開發中用到的,只是我們沒有總結過,被問起來的時候回答的難免會有點捉襟見肘,不能回答的很全面.下面爲我個人總(bai)結(du)的,希望對你能有所幫助,但畢竟能力有限,有寫的不對的地方,還望輕噴.雖然噴我我也不會改的.
因爲本文篇幅較長建議收藏,在用到時候找出來看一眼.有一些知識點可能沒涉及到,以後會加以補足.因爲面試無非是考察你對技術的理解和總結,所以本篇的每個點總結的比較精簡,只是讓你大概的說出來,有的部分是需要能夠畫出原理圖並進行解釋說明,這個要在工作中多積累.

JAVA

一. 類的加載過程,Person person = new Person();爲例進行說明。

1).因爲new用到了Person.class,所以會先找到Person.class文件,並加載到內存中;
2).執行該類中的static代碼塊,如果有的話,給Person.class類進行初始化;
3).在堆內存中開闢空間分配內存地址;
4).在堆內存中建立對象的特有屬性,並進行默認初始化;
5).對屬性進行顯示初始化;
6).對對象進行構造代碼塊初始化;
7).對對象進行與之對應的構造函數進行初始化;
8).將內存地址付給棧內存中的p變量

二. JVM相關知識,GC機制。

JVM基本構成

b1a09b50429c28c3cc324c5e13b65c538bb7f569

從上圖可知,JVM主要包括四個部分:

1.類加載器(ClassLoader):在JVM啓動時或者在類運行時將需要的class加載到JVM中。(下圖表示了從java源文件到JVM的整個過程,可配合理解。

200f68d7167cceb0e08d7ebb6d8db4013b7c683a

2.執行引擎:負責執行class文件中包含的字節碼指令;

3.內存區(也叫運行時數據區):是在JVM運行的時候操作所分配的內存區。運行時內存區主要可以劃分爲5個區域,如圖:

6734faa36245e1e0f945aa894872366c933723a5

  • 方法區(Method Area):用於存儲類結構信息的地方,包括常量池、靜態變量、構造函數等。雖然JVM規範把方法區描述爲堆的一個邏輯部分, 但它卻有個別名non-heap(非堆),所以大家不要搞混淆了。方法區還包含一個運行時常量池。

  • java堆(Heap):存儲java實例或者對象的地方。這塊是GC的主要區域。從存儲的內容我們可以很容易知道,方法區和堆是被所有java線程共享的。

  • java棧(Stack):java棧總是和線程關聯在一起,每當創建一個線程時,JVM就會爲這個線程創建一個對應的java棧。在這個java棧中又會包含多個棧幀,每運行一個方法就創建一個棧幀,用於存儲局部變量表、操作棧、方法返回值等。每一個方法從調用直至執行完成的過程,就對應一個棧幀在java棧中入棧到出棧的過程。所以java棧是現成私有的。

  • 程序計數器(PC Register):用於保存當前線程執行的內存地址。由於JVM程序是多線程執行的(線程輪流切換),所以爲了保證線程切換回來後,還能恢復到原先狀態,就需要一個獨立的計數器,記錄之前中斷的地方,可見程序計數器也是線程私有的。

  • 本地方法棧(Native Method Stack):和java棧的作用差不多,只不過是爲JVM使用到的native方法服務的。

    4.本地方法接口:主要是調用C或C++實現的本地方法及返回結果。

閱讀全文請點擊

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章