熱門博客
Android知識(shí)體系匯總
Gityuan
數(shù)據(jù)結(jié)構(gòu)與算法
互聯(lián)網(wǎng)公司Android面試題匯總
隔壁老李頭
23種設(shè)計(jì)模式
Android設(shè)計(jì)模式
Java設(shè)計(jì)模式
創(chuàng)建型模式:
工廠模式(Factory Pattern)
抽象工廠模式(Abstract Factory Pattern)
單例模式(Singleton Pattern)
建造者模式(Builder Pattern)
原型模式(Prototype Pattern)結(jié)構(gòu)型模式:
適配器模式(Adapter Pattern)
橋接模式(Bridge Pattern)
過濾器模式(Filter梅忌、Criteria Pattern)
組合模式(Composite Pattern)
裝飾器模式(Decorator Pattern)
外觀模式(Facade Pattern)
享元模式(Flyweight Pattern)
代理模式(Proxy Pattern)行為型模式:
責(zé)任鏈模式(Chain of Responsibility Pattern)
命令模式(Command Pattern)
解釋器模式(Interpreter Pattern)
迭代器模式(Iterator Pattern)
中介者模式(Mediator Pattern)
備忘錄模式(Memento Pattern)
觀察者模式(Observer Pattern)
狀態(tài)模式(State Pattern)
空對(duì)象模式(Null Object Pattern)
策略模式(Strategy Pattern)
模板模式(Template Pattern)
訪問者模式(Visitor Pattern)
插件化
插件化學(xué)習(xí)之路
MultiDex工作原理分析和優(yōu)化方案
Android關(guān)于Dex拆分(MultiDex)技術(shù)詳解
MultiDex中出現(xiàn)的main dex capacity exceeded解決之道
Too many classes in --main-dex-list
cocos2d-x
Cocos官網(wǎng)
cocos2d-x 減少編譯時(shí)間/免除重復(fù)編譯
Cocos2dx.3x入門三部曲
第三方動(dòng)畫框架
YY-SVGA動(dòng)畫框架
Lottie- 讓Android動(dòng)畫實(shí)現(xiàn)更簡(jiǎn)單
控件位置
Flutter
想入門 Google 的 Flutter催首?我整理了一些資料看你需要嗎肆汹?
Flutter教程
熱修復(fù)
組件化
主要是解決個(gè)組件之間的通信問題
ARouter 源碼淺析
業(yè)界首個(gè)支持漸進(jìn)式組件化改造的Android組件化開源框架
APT
元注解簡(jiǎn)介
編寫最基本的APT Demo
一起玩轉(zhuǎn)Android項(xiàng)目中的字節(jié)碼
Gradle 插件
Android app 啟動(dòng)流程
Android 應(yīng)用進(jìn)程啟動(dòng)流程解析
Activity啟動(dòng)流程
Bundle 機(jī)制
紅茶一杯話Binder
Android Binder之應(yīng)用層總結(jié)與分析
理解Android Binder機(jī)制(1/3):驅(qū)動(dòng)篇
Java集合類工作原理及實(shí)現(xiàn)
Java集合類工作原理及實(shí)現(xiàn)
圖解HashMap(一)
HashMap是什么
結(jié)論:HashMap是由數(shù)組和鏈表組合構(gòu)成的數(shù)據(jù)結(jié)構(gòu)紊浩,Java8中鏈表長(zhǎng)度超過8時(shí)會(huì)把長(zhǎng)度超過8的鏈表轉(zhuǎn)化成紅黑樹司训;存取時(shí)都會(huì)根據(jù)鍵值計(jì)算出”類別”(hashCode)扼仲,再根據(jù)”類別”定位到數(shù)組中的位置并執(zhí)行操作灼擂。
HashCode是什么
結(jié)論:hashCode是一個(gè)對(duì)象的標(biāo)識(shí)硫痰,Java中對(duì)象的hashCode是一個(gè)int類型值。通過hashCode來指定數(shù)組的索引可以快速定位到要找的對(duì)象在數(shù)組中的位置祖屏,之后再遍歷鏈表找到對(duì)應(yīng)值助赞,理想情況下時(shí)間復(fù)雜度為O(1),并且不同對(duì)象可以擁有相同的hashCode袁勺。
HashMap的時(shí)間復(fù)雜度
結(jié)論:HashMap的時(shí)間復(fù)雜度取決于hash算法雹食,優(yōu)秀的hash算法可以讓時(shí)間復(fù)雜度趨于常數(shù)O(1),糟糕的hash算法可以讓時(shí)間復(fù)雜度趨于O(N)期丰。
負(fù)載因子是什么
結(jié)論:我們知道HashMap中默認(rèn)的數(shù)組長(zhǎng)度是16群叶,默認(rèn)負(fù)載因子為0.75吃挑。在數(shù)組大小不變的情況下,存放鍵值對(duì)越多街立,查找的時(shí)間效率會(huì)降低舶衬,擴(kuò)容可以解決該問題,而負(fù)載因子決定了什么時(shí)候擴(kuò)容赎离,負(fù)載因子是已存鍵值對(duì)的數(shù)量和總的數(shù)組長(zhǎng)度的比值逛犹。默認(rèn)情況下負(fù)載因子為0.75,我們可在初始化HashMap的時(shí)候自己修改梁剔。
數(shù)據(jù)結(jié)構(gòu)與算法
線程安全List
private static List<String> TEST_LIST = Collections.synchronizedList(new ArrayList<String>());
Collections.synchronizedList進(jìn)行包裝
圖片加載原理
多線程斷點(diǎn)續(xù)傳
RandomAcessFile類實(shí)現(xiàn)文件的分割和合并
http1.1 頭文件中傳入
Content-Range: bytes 20000-40000/47000
線程
線程創(chuàng)建的三種方式
1.新建類繼承 Thread 類實(shí)現(xiàn)線程
2.通過實(shí)現(xiàn)接口 Runnable 實(shí)現(xiàn)創(chuàng)建線程
3.使用 ExecutionException、Callable憾朴、ExecutorService狸捕、Future 等類,Executors 框架實(shí)現(xiàn)線程众雷,此方法:相對(duì)前兩種可拋異常灸拍,且有返回值。
run和start的區(qū)別
run 只是普通的方法調(diào)用砾省,start會(huì)創(chuàng)建新線程
start()實(shí)際上是通過本地方法start0()啟動(dòng)線程的鸡岗。而start0()會(huì)新運(yùn)行一個(gè)線程,新線程會(huì)調(diào)用run()方法编兄,start0是native方法轩性。創(chuàng)建線程會(huì)消耗系統(tǒng)資源。
JVM
JVM內(nèi)存結(jié)構(gòu)
《深入理解java虛擬機(jī)》學(xué)習(xí)筆記
泛型
Java 泛型解惑之<? extends T>和<? super T>
類的生命周期
Java虛擬機(jī)類生命周期
加載 驗(yàn)證 準(zhǔn)備 解析 初始化 使用 卸載
RxJava
Rxjava 創(chuàng)建和線程切換
關(guān)于 RxJava 背壓
EventBus實(shí)現(xiàn)原理
大文件加密
Android使用Socket對(duì)大文件進(jìn)行加密傳輸
文件批量上傳和下載
OkGo狠鸳,一個(gè)專注于讓網(wǎng)絡(luò)請(qǐng)求更簡(jiǎn)單的框架揣苏,與RxJava完美結(jié)合,比Retrofit更簡(jiǎn)單易用
App 啟動(dòng)時(shí)間統(tǒng)計(jì)
Android 開發(fā)之 App 啟動(dòng)時(shí)間統(tǒng)計(jì)
Android 軟件穩(wěn)定性解決方案
ThreadLocal原理
ThreadLocal原理及其實(shí)際應(yīng)用
Classloader
代碼優(yōu)化
SharedPreferences
對(duì) SharedPreferences 再多一點(diǎn)了解
通過 ContentProvider 多進(jìn)程共享 SharedPreferences 數(shù)據(jù)
SharedPreferences不是線程同步的件舵,如果要進(jìn)行跨進(jìn)程調(diào)用請(qǐng)用ContentProvider代替
SurfView
SurfaceView繼承了View卸察,但是我們并不需要去實(shí)現(xiàn)它的draw方法來繪制自己,為什么呢铅祸?因?yàn)樗蚔iew有一個(gè)很大的區(qū)別坑质,View在UI線程去更新自己;而SurfaceView則在一個(gè)子線程中去更新自己临梗;這也顯示出了它的優(yōu)勢(shì)涡扼,當(dāng)制作游戲等需要不斷刷新View時(shí),因?yàn)槭窃谧泳€程盟庞,避免了對(duì)UI線程的阻塞吃沪。
Android視圖SurfaceView的實(shí)現(xiàn)原理分析
BroadcastReceiver,LocalBroadcastReceiver 區(qū)別
應(yīng)用場(chǎng)景
1.BroadcastReceiver用于應(yīng)用之間的傳遞消息什猖;
2.而LocalBroadcastManager用于應(yīng)用內(nèi)部傳遞消息巷波,比broadcastReceiver更加高效萎津。
安全
1.BroadcastReceiver使用的Content API,所以本質(zhì)上它是跨應(yīng)用的抹镊,所以在使用它時(shí)必須要考慮到不要被別的應(yīng)用濫用;
2.LocalBroadcastManager不需要考慮安全問題荤傲,因?yàn)樗辉趹?yīng)用內(nèi)部有效垮耳。
Handler 機(jī)制
Android 事件傳遞機(jī)制
GC機(jī)制
Https 優(yōu)化
DNS,攜帶數(shù)據(jù)遂黍,直接訪問IP
深入理解https通信加密過程
TCP/UDP的區(qū)別
TCP:面向連接终佛、傳輸可靠(保證數(shù)據(jù)正確性,保證數(shù)據(jù)順序)、用于傳輸大量數(shù)據(jù)(流模式)雾家、速度慢铃彰,建立連接需要開銷較多(時(shí)間,系統(tǒng)資源)芯咧。
UDP:面向非連接牙捉、傳輸不可靠、用于傳輸少量數(shù)據(jù)(數(shù)據(jù)包模式)敬飒、速度快
http協(xié)議
Http建立與斷開
四種常見的 POST 提交數(shù)據(jù)方式
Socket
Java并發(fā)編程
Java線程池
線程的狀態(tài)
新建狀態(tài):新建線程對(duì)象邪铲,并沒有調(diào)用start()方法之前
就緒狀態(tài):調(diào)用start()方法之后線程就進(jìn)入就緒狀態(tài),但是并不是說只要調(diào)用start()方法線程就馬上變?yōu)楫?dāng)前線程无拗,在變?yōu)楫?dāng)前線程之前都是為就緒狀態(tài)带到。值得一提的是,線程在睡眠和掛起中恢復(fù)的時(shí)候也會(huì)進(jìn)入就緒狀態(tài)哦英染。
運(yùn)行狀態(tài):線程被設(shè)置為當(dāng)前線程揽惹,開始執(zhí)行run()方法。就是線程進(jìn)入運(yùn)行狀態(tài)
阻塞狀態(tài):線程被暫停四康,比如說調(diào)用sleep()方法后線程就進(jìn)入阻塞狀態(tài)
死亡狀態(tài):線程執(zhí)行結(jié)束
App如何沙箱化
單元測(cè)試
快速打包
下一代Android打包工具搪搏,100個(gè)渠道包只需要10秒鐘
GIT操作
修改最后一次提交 : git commit --amend
取消已經(jīng)暫存的文件 : git reset HEAD <file>...
取消對(duì)文件的修改: git checkout -- <file>...
代碼合并:Merge、Rebase 的選擇
異同:
如果你想要一個(gè)干凈的箭养、線性的提交歷史慕嚷,沒有不必要的合并提交毕泌,你應(yīng)該使用 git rebase 而不是 git merge 來并入其他分支上的更改喝检。
另一方面,如果你想要保存項(xiàng)目完整的歷史撼泛,并且避免重寫公共分支上的 commit挠说, 你可以使用 git merge。兩種選項(xiàng)都很好用愿题,但至少你現(xiàn)在多了 git rebase 這個(gè)選擇