主要分為以下幾部分:
(1)java面試題
(2)Android面試題
(3)高級(jí)開(kāi)發(fā)技術(shù)面試題
(4)跨平臺(tái)Hybrid 開(kāi)發(fā)
java面試題
1.java內(nèi)存區(qū)域講解
2.java垃圾回收機(jī)制
3.分代垃圾回收
4.HashMap的實(shí)現(xiàn)原理
(1)實(shí)現(xiàn)原理
(2)時(shí)間復(fù)雜度
(3)hash函數(shù)設(shè)計(jì)
對(duì)素?cái)?shù)取模,加法hash,位運(yùn)算hash,乘法hash,除法hash,查表hash,混合hash,數(shù)據(jù)hash
java中String的hash使用的是乘法hash,也可以理解為轉(zhuǎn)換為31進(jìn)制。HashMap的key的hash使用的是位運(yùn)算hash。
(4)位置索引
HashMap的默認(rèn)容量1 << 4 = 2^4 = 16,最大容量是MAXIMUM_CAPACITY = 1 << 30。
注:左移相當(dāng)于2^n次方。
索引位置方式:取模,對(duì)2^n-1進(jìn)行“&”運(yùn)算相當(dāng)于取模,即
(2^n-1) & hash = hash %(2^n-1)
java中實(shí)際上使用的是位運(yùn)算“&”,因?yàn)槲贿\(yùn)算比取模性能好。
(5)擴(kuò)容機(jī)制
2倍擴(kuò)容,擴(kuò)容因子默認(rèn)是0.75。新建數(shù)組,然后將舊的數(shù)據(jù)復(fù)制到新的數(shù)組中。
(6)hash沖突處理方式:鏈地址方法
5.volatile詳解
6.Java四種引用
7.單例模式-雙重檢查鎖
Android基礎(chǔ)
Activity生命周期
- 正常情況
- 異常情況
Activity之間的通信
1. Intent/Bundle
2. 類靜態(tài)變量
3. 全局變量
4. 數(shù)據(jù)庫(kù)和sharepreference,當(dāng)傳遞的數(shù)據(jù)量過(guò)大時(shí)使用
Activity和Fragment之間的通信
四大啟動(dòng)模式
Canvas的save和restore
1.LayoutInflater.inflate(XmlPullParser parser, ViewGroup root, boolean attachToRoot)的實(shí)現(xiàn)原理
attachToRoot = true 會(huì)給加載的布局文件指定一個(gè)父布局,即root;
attachToRoot = false 則會(huì)將布局文件最外層所有l(wèi)ayout屬性進(jìn)行設(shè)置,當(dāng)該view被添加到父view中時(shí),這些屬性自動(dòng)生效。
public View inflate(XmlPullParser parser, @Nullable ViewGroup root, boolean attachToRoot) {
synchronized (mConstructorArgs) {
...
try {
...
if (TAG_MERGE.equals(name)) {
...
} else {
// Temp is the root view that was found in the xml
final View temp = createViewFromTag(root, name, inflaterContext, attrs);
ViewGroup.LayoutParams params = null;
if (root != null) {
params = root.generateLayoutParams(attrs);
// 關(guān)鍵代碼attachToRoot = false的時(shí)候,會(huì)設(shè)置setLayoutParams
if (!attachToRoot) {
temp.setLayoutParams(params);
}
}
...
//關(guān)鍵代碼root不為空attachToRoot為true時(shí),會(huì)將view添加到root中。
if (root != null && attachToRoot) {
root.addView(temp, params);
}
if (root == null || !attachToRoot) {
result = temp;
}
}
} catch (XmlPullParserException e) {
...
} catch (Exception e) {
...
} finally {
...
}
return result;
}
}
2.為什么布局嵌套多性能慢?
(1)布局文件是一個(gè)xml文件,inflate布局文件其實(shí)就是解析xml,根據(jù)標(biāo)簽信息創(chuàng)建相應(yīng)的布局對(duì)象并做關(guān)聯(lián)。xml中的標(biāo)簽和屬性設(shè)置的越多,節(jié)點(diǎn)樹(shù)的深度越深,在解析時(shí)要執(zhí)行的判斷邏輯、函數(shù)的嵌套和遞歸就越多,所以時(shí)間消耗越多。
(2)一個(gè)界面要顯示出來(lái),在requestlayout后還要執(zhí)行一系列的measure、layout、draw的操作,每一步的執(zhí)行時(shí)間都會(huì)受到布局本身的影響。
Android原理
1.binder機(jī)制原理
2.Handler原理
3.AsyncTask原理
4.RecyclerView緩存原理
開(kāi)源庫(kù)實(shí)現(xiàn)原理
1.AndroidVideoCache原理: