Q:談?wù)凪VC、MVP和MVVM婚瓜,好在哪里宝鼓,不好在哪里?
http://www.reibang.com/writer#/notebooks/6230737/notes/51671900
Q:如何理解生產(chǎn)者消費者模型巴刻?
https://blog.csdn.net/wsq119/article/details/82526449
http://www.reibang.com/p/678be034abe2
技術(shù)點:生產(chǎn)者消費者模型
參考回答:生產(chǎn)者消費者模型通過一個緩存隊列愚铡,既解決了生產(chǎn)者和消費者之間強耦合的問題,又平衡了生產(chǎn)者和消費者的處理能力胡陪。
具體規(guī)則:生產(chǎn)者只在緩存區(qū)未滿時進行生產(chǎn)沥寥,緩存區(qū)滿時生產(chǎn)者進程被阻塞;消費者只在緩存區(qū)非空時進行消費柠座,緩存區(qū)為空時消費者進程被阻塞邑雅;當(dāng)消費者發(fā)現(xiàn)緩存區(qū)為空時會通知生產(chǎn)者生產(chǎn);當(dāng)生產(chǎn)者發(fā)現(xiàn)緩存區(qū)滿時會通知消費者消費妈经。
實現(xiàn)關(guān)鍵:synchronized保證對象只能被一個線程占用淮野;wait()讓當(dāng)前線程進入等待狀態(tài)捧书,并釋放它所持有的鎖;notify()¬ifyAll()喚醒一個(所有)正處于等待狀態(tài)的線程
Q:是否能從Android中舉幾個例子說說用到了什么設(shè)計模式骤星?
View事件分發(fā):責(zé)任鏈模式
BitmapFactory加載圖片:工廠模式
Adapter:適配器模式
Builder:建造者模式
Adapter.notifyDataSetChanged():觀察者模式
Binder機制:代理模式
Q:裝飾模式和代理模式有哪些區(qū)別经瓷?
https://www.cnblogs.com/yanggb/p/10952843.html
https://www.cnblogs.com/doucheyard/p/5737366.html
使用目的不同:代理模式是給目標(biāo)對象提供一個代理對象,并由代理對象控制對目標(biāo)對象的引用洞难;裝飾模式是在不必改變原類文件和使用繼承的情況下舆吮,動態(tài)地擴展一個對象的功能
構(gòu)造不同:代理模式內(nèi)部保持對目標(biāo)對象的引用;裝飾模式是通過構(gòu)造函數(shù)傳參的方式得到目標(biāo)對象
Q:實現(xiàn)單例模式有幾種方法廊营?懶漢式中雙層鎖的目的是什么歪泳?兩次判空的目的又是什么?
實現(xiàn)單例模式常見的兩種方式:
(1)懶漢式:延遲加載露筒,同時也要保證多線程環(huán)境下會產(chǎn)生多個single對象(DCL)
public class Singleton {
private Singleton() {}
private volatile static Singleton instance;//第一層鎖:保證變量可見性
public static Singleton getInstance() {
if (single == null) {//第一次判空:無需每次都加鎖,提高性能
synchronized (Singleton.class) {//第二層鎖:保證線程同步
if (single == null) {//第二次判空:避免多線程同時執(zhí)行g(shù)etInstance()產(chǎn)生多個single對象
single = new Singleton();
}
}
}
return single;
}
}
餓漢式:在類加載初始化時就創(chuàng)建好一個靜態(tài)的對象供外部使用
public class Singleton {
private Singleton() {}
private static Singleton single = new Singleton();
public static Singleton getInstance() {
return single;
}
}
Q:談?wù)劻私獾脑O(shè)計模式原則敌卓?
https://www.cnblogs.com/xiaobaizhang/p/7778494.html
單一職責(zé)原則:一個類只負責(zé)一個功能領(lǐng)域中的相應(yīng)職責(zé)
開放封閉原則:對擴展開放慎式,對修改關(guān)閉
依賴倒置原則:抽象不應(yīng)該依賴于細節(jié),細節(jié)應(yīng)當(dāng)依賴于抽象趟径。換言之瘪吏,要針對接口編程,而不是針對實現(xiàn)編程
迪米特法則:應(yīng)該盡量減少對象之間的交互蜗巧,如果兩個對象之間不必彼此直接通信掌眠,那么這兩個對象就不應(yīng)當(dāng)發(fā)生任何直接的相互作用,如果其中的一個對象需要調(diào)用另一個對象的某一個方法的話幕屹,可以通過第三者轉(zhuǎn)發(fā)這個調(diào)用
合成/聚合復(fù)用原則:要盡量使用合成/聚合蓝丙,盡量不要使用繼承