視頻:https://www.bilibili.com/video/av21006208/
日常中經(jīng)常聽到技術(shù)的師兄們說一些奇怪的“技術(shù)黑話”,什么“對象”什么“進程”之類,引得PM們都不解起來伞辛,交流中充滿了不解的氣息卷拘。
1.對象氢橙,類
所以今天咱們就梳理一下他們常用的“黑話” 類叫搁、對象甩鳄、抽象和實例在技術(shù)的世界里逞度,有一類編程語言叫面向?qū)ο缶幊蹋绲湫偷拿嫦驅(qū)ο笳Z言Java娩贷。說到面向?qū)ο蟮谖坏貌惶岬膸讉€概念是類、對象彬祖、抽象和實例茁瘦。
首先介紹第一個概念“抽象”。我們說某一個概念聽起來非常抽象的意思是不具體的事物储笑,對應的反義詞是具象甜熔。抽象在技術(shù)術(shù)語里的意思是提煉出一個通用模板,然后基于模板做具象化的實現(xiàn)突倍。例如腔稀,在現(xiàn)實世界中關(guān)于人的分類盆昙,會有男人、女人焊虏、老人和小孩淡喜,如果將這個具體的分類抽象出一個類別,得到的抽象結(jié)果就是人诵闭。
所以炼团,人就是一個抽象出來的分類,也就是技術(shù)術(shù)語里面的“類”疏尿。在編程語言的世界中瘟芝,通過程序語言描述現(xiàn)實世界中的事物時,使用的就是抽象的方法褥琐,將一類事物抽象成一個類锌俱,就得出了程序世界中的一個基本模型。
有了基本模型后敌呈,可以基于抽象出來的模型(類)產(chǎn)生很多具體的實例贸宏,也就是基于類實例化的具體對象。例如驱富,將“人”這個類實例化為兩個對象锚赤,分別是男人和女人,也可以實例化為其他對象褐鸥,例如小孩和老人,甚至可以實例化為具體的人赐稽,例如Maggie和Ryan叫榕。這一系列的過程如圖所示。
從上述流程中可以看出姊舵,程序猿做的工作就是根據(jù)產(chǎn)品需求將現(xiàn)實世界中的事物抽象成程序世界中的一個個類晰绎,然后根據(jù)需要實例化很多對象,不同對象間通過相互協(xié)作完成一個具體的產(chǎn)品功能括丁。
2.“寫死”是什么
例如淘寶收貨地址荞下,兩種方案,設(shè)計一個下拉選擇框用來切換不同的城市史飞,這個產(chǎn)品需求在技術(shù)層面有兩種實現(xiàn)方案尖昏,第一種是將城市數(shù)據(jù)放在服務器端,客戶端通過請求數(shù)據(jù)接口將城市數(shù)據(jù)獲取回來再顯示在下拉列表中构资。
第二種是將城市列表數(shù)據(jù)存放在客戶端抽诉,客戶端從本地讀取城市列表并展示在下拉列表中。簡單的官網(wǎng)例子第一種方式是一種相對靈活的方案吐绵,當城市數(shù)據(jù)有變化時迹淌,只需要調(diào)整服務端的數(shù)據(jù)內(nèi)容即可河绽,客戶端不用做任何修改,但需要開發(fā)一個專門的數(shù)據(jù)接口獲取這部分數(shù)據(jù)唉窃。第二種方式就是工程師所說的“寫死”耙饰,將數(shù)據(jù)集寫死在本地,這樣可以省去數(shù)據(jù)接口的開發(fā)纹份,也能快速實現(xiàn)想要的效果榔幸。
這兩種不同的實現(xiàn)方式在很多產(chǎn)品設(shè)計環(huán)節(jié)中都會體現(xiàn),例如一些客戶端的文案或者圖片會經(jīng)常變化矮嫉,這時就不太適合將需要變化的數(shù)據(jù)“寫死”在本地削咆,合理的方案是將變化的數(shù)據(jù)存儲在服務端,客戶端通過數(shù)據(jù)接口靈活地獲取這部分數(shù)據(jù)蠢笋。
當然拨齐,也不是所有的數(shù)據(jù)都不適合“寫死”在本地,例如性別數(shù)據(jù)昨寞,無非就是男和女瞻惋,不必專門為了它開發(fā)一個數(shù)據(jù)接口,我們得根據(jù)具體需求和使用場景判斷哪些數(shù)據(jù)應該寫死援岩。
3 進程與線程
當我們點擊手機屏幕上的一個App按鈕(啟動一個產(chǎn)品)時歼狼,系統(tǒng)會為這個產(chǎn)品的運行分配系統(tǒng)資源(例如CPU和存儲空間),分配好資源后享怀,產(chǎn)品會在這個資源區(qū)域運行應用程序羽峰。這里所說的運行應用程序就是進程,也可以理解為每一個正在運行的App都是一個進程添瓷。
線程是什么梅屉?要理解這個概念,須要先了解一下操作系統(tǒng)的一些相關(guān)概念鳞贷。大部分操作系統(tǒng)(如Windows坯汤、Linux)的任務調(diào)度是采用時間片輪轉(zhuǎn)的搶占式調(diào)度方式,也就是說一個任務執(zhí)行一小段時間后強制暫停去執(zhí)行下一個任務搀愧,每個任務輪流執(zhí)行惰聂。任務執(zhí)行的一小段時間叫做時間片,任務正在執(zhí)行時的狀態(tài)叫運行狀態(tài)咱筛,任務執(zhí)行一段時間后強制暫停去執(zhí)行下一個任務搓幌,被暫停的任務就處于就緒狀態(tài)等待下一個屬于它的時間片的到來。這樣每個任務都能得到執(zhí)行眷蚓,由于CPU的執(zhí)行效率非常高鼻种,時間片非常短,在各個任務之間快速地切換沙热,給人的感覺就是多個任務在“同時進行”叉钥,這也就是我們所說的并發(fā)(別覺得并發(fā)有多高深罢缸,它的實現(xiàn)很復雜,但它的概念很簡單投队,就是一句話:多個任務同時執(zhí)行)枫疆。
4.腳本
當需要對數(shù)據(jù)庫進行批量處理時,程序猿會說“跑一個腳本統(tǒng)一處理一下”當需要查詢某一數(shù)據(jù)報表時敷鸦,工程師會說“用一個腳本批量查詢”息楔。腳本也是一種被計算機執(zhí)行的程序,為什么叫腳本呢扒披?可以把腳本理解成拍戲用的劇本值依,劇本里會按照角色及對白把要拍的戲清晰地列出來,導演和演員會嚴格按照劇本表演碟案。腳本就是一種面向計算機的劇本愿险,是一個可被計算機執(zhí)行的文件,文件里是一系列計算機指令价说,這些指令會按照順序被計算機解析并執(zhí)行辆亏。
5.同步處理與異步處理
同步:發(fā)送一個請求,等待返回,然后再發(fā)送下一個請求?
異步:發(fā)送一個請求,不等待返回,隨時可以再發(fā)送下一個請求?
同步可以避免出現(xiàn)死鎖,讀臟數(shù)據(jù)的發(fā)生鳖目,一般共享某一資源的時候用扮叨,如果每個人都有修改權(quán)限,同時修改一個文件领迈,有可能使一個人讀取另一個人已經(jīng)刪除的內(nèi)容彻磁,就會出錯,同步就會按順序來修改惦费。
異步則是可以提高效率了兵迅,現(xiàn)在cpu都是雙核,四核薪贫,異步處理的話可以同時做多項工作,當然必須保證是可以并發(fā)處理的刻恭。這些都是對的瞧省。同步和異步最大的區(qū)別就在于。一個需要等待鳍贾,一個不需要等待鞍匾。
比如廣播,就是一個異步例子骑科。發(fā)起者不關(guān)心接收者的狀態(tài)橡淑。不需要等待接收者的返回信息
電話,就是一個同步例子咆爽。發(fā)起者需要等待接收者梁棠,接通電話后置森,通信才開始。需要等待接收者的返回信息
以上存在不足的地方符糊,專業(yè)技術(shù)人員輕噴~