??作為一個(gè)程序員,長(zhǎng)期的從事基礎(chǔ)性的代碼開(kāi)發(fā)也是不現(xiàn)實(shí)的一件事,如果不能有所提高,長(zhǎng)期做最基礎(chǔ)的開(kāi)發(fā),對(duì)于個(gè)人的職業(yè)技能發(fā)展也是不好的。我們都知道程序員 的發(fā)展有兩個(gè)主要方向一個(gè)是管理方向,另外一個(gè)就是技術(shù)方向。技術(shù)方向就要考慮往架構(gòu)這塊發(fā)展了,要想成為一個(gè)合格的后端架構(gòu)師,就要掌握后端架構(gòu)師的知識(shí)體系,為了讓更多的朋友了解后端架構(gòu)師的知識(shí)體系,新霸哥從后端架構(gòu)中總結(jié)了一些經(jīng)驗(yàn)供大家參考學(xué)習(xí),下面從基礎(chǔ)組件開(kāi)始介紹。后期會(huì)持續(xù)更新。
多線程
多線程:指的是這個(gè)程序(一個(gè)進(jìn)程)運(yùn)行時(shí)產(chǎn)生了不止一個(gè)線程。
并行與并發(fā):
并行:多個(gè)CPU實(shí)例或者多臺(tái)機(jī)器同時(shí)執(zhí)行一段處理邏輯,是真正的同時(shí)。
并發(fā):通過(guò)CPU調(diào)度算法,讓用戶看上去同時(shí)執(zhí)行,實(shí)際上從CPU操作層面不是真正的同時(shí)。并發(fā)往往在場(chǎng)景中有公用的資源,那么針對(duì)這個(gè)公用的資源往往產(chǎn)生瓶頸,我們會(huì)用TPS或者QPS來(lái)反應(yīng)這個(gè)系統(tǒng)的處理能力。
同步:Java中的同步指的是通過(guò)人為的控制和調(diào)度,保證共享資源的多線程訪問(wèn)成為線程安全,來(lái)保證結(jié)果的準(zhǔn)確。如代碼簡(jiǎn)單加入@synchronized關(guān)鍵字。在保證結(jié)果準(zhǔn)確的同時(shí),提高性能,才是優(yōu)秀的程序。線程安全的優(yōu)先級(jí)高于性能。
線程安全:經(jīng)常用來(lái)描繪一段代碼。指在并發(fā)的情況之下,該代碼經(jīng)過(guò)多線程使用,線程的調(diào)度順序不影響任何結(jié)果。這個(gè)時(shí)候使用多線程,我們只需要關(guān)注系統(tǒng)的內(nèi)存,CPU是不是夠用即可。反過(guò)來(lái),線程不安全就意味著線程的調(diào)度順序會(huì)影響最終結(jié)果。
在java中要想實(shí)現(xiàn)多線程,有兩種手段,一種是繼續(xù)Thread類(lèi),另外一種是實(shí)現(xiàn)Runable接口。在java中,每次程序運(yùn)行至少啟動(dòng)2個(gè)線程。一個(gè)是main線程,一個(gè)是垃圾收集線程。因?yàn)槊慨?dāng)使用java命令執(zhí)行一個(gè)類(lèi)的時(shí)候,實(shí)際上都會(huì)啟動(dòng)一個(gè)JVM,每一個(gè)jVM在操作系統(tǒng)中啟動(dòng)了一個(gè)進(jìn)程。
多線程編程,模型復(fù)雜,容易發(fā)生沖突,必須用鎖加以隔離,同時(shí),又要小心死鎖的發(fā)生。
加密
用戶登入、交易、信息通訊、oauth 等等,不同的應(yīng)用場(chǎng)景也會(huì)需要使用到不同的簽名加密算法,或者需要搭配不一樣的 簽名加密算法 來(lái)達(dá)到業(yè)務(wù)目標(biāo)。
反射
反射的核心是 JVM 在運(yùn)行時(shí)才動(dòng)態(tài)加載類(lèi)或調(diào)用方法/訪問(wèn)屬性,它不需要事先(寫(xiě)代碼的時(shí)候或編譯期)知道運(yùn)行對(duì)象是誰(shuí)。通過(guò)反射,我們可以在運(yùn)行時(shí)獲得程序或程序集中每一個(gè)類(lèi)型的成員和成員的信息。程序中一般的對(duì)象的類(lèi)型都是在編譯期就確定下來(lái)的,而 Java 反射機(jī)制可以動(dòng)態(tài)地創(chuàng)建對(duì)象并調(diào)用其屬性,這樣的對(duì)象的類(lèi)型在編譯期是未知的。所以我們可以通過(guò)反射機(jī)制直接創(chuàng)建對(duì)象,即使這個(gè)對(duì)象的類(lèi)型在編譯期是未知的。
反射最重要的用途就是開(kāi)發(fā)各種通用框架。很多框架(比如 Spring)都是配置化的(比如通過(guò) XML 文件配置 Bean),為了保證框架的通用性,它們可能需要根據(jù)配置文件加載不同的對(duì)象或類(lèi),調(diào)用不同的方法,這個(gè)時(shí)候就必須用到反射,運(yùn)行時(shí)動(dòng)態(tài)加載需要加載的對(duì)象。
調(diào)度
分配工作所需資源的方法。進(jìn)行調(diào)度工作的程序叫做調(diào)度器。調(diào)度器通常的實(shí)現(xiàn)使得所有計(jì)算資源都處于忙碌狀態(tài)(在負(fù)載均衡中),允許多位用戶有效地同時(shí)共享系統(tǒng)資源,或達(dá)到指定的服務(wù)質(zhì)量。調(diào)度是計(jì)算自身的基礎(chǔ),同時(shí)也是編程語(yǔ)言計(jì)算模型固有的部分。調(diào)度器使得在單處理器上通過(guò)多任務(wù)處理,從而讓執(zhí)行多個(gè)進(jìn)程成為可能。
隊(duì)列
先進(jìn)先出(FIFO, First-In-First-Out)的線性表。在具體應(yīng)用中通常用鏈表或者數(shù)組來(lái)實(shí)現(xiàn)。隊(duì)列只允許在后端(稱(chēng)為rear)進(jìn)行插入操作,在前端(稱(chēng)為front)進(jìn)行刪除操作。
隊(duì)列的操作方式和堆棧類(lèi)似,唯一的區(qū)別在于隊(duì)列只允許新數(shù)據(jù)在后端進(jìn)行添加。
高性能網(wǎng)絡(luò)層
對(duì)網(wǎng)絡(luò)、操作系統(tǒng)協(xié)議棧、進(jìn)程與線程、常見(jiàn)的網(wǎng)絡(luò)組件等知識(shí)點(diǎn),需要有豐富的項(xiàng)目開(kāi)發(fā)經(jīng)驗(yàn),能夠權(quán)衡服務(wù)器運(yùn)行效率與項(xiàng)目開(kāi)發(fā)效率。
插件
透過(guò)和應(yīng)用程序(例如網(wǎng)頁(yè)瀏覽器,郵箱客戶端)的互動(dòng),用來(lái)替應(yīng)用程序增加一些所需要的特定的功能。最常見(jiàn)的有游戲、網(wǎng)頁(yè)瀏覽器的插件和媒體播放器的插件。
壓縮
通過(guò)特定的算法來(lái)減小計(jì)算機(jī)文件大小的機(jī)制。為了減少數(shù)據(jù)大小以節(jié)省保存空間和傳輸?shù)臅r(shí)間。為了數(shù)據(jù)的傳輸,壓縮能夠作用于單獨(dú)的數(shù)據(jù)內(nèi)容或者所有的傳輸單元(包括數(shù)據(jù)頭),這取決于一些特定的因素。
擴(kuò)展方法
擴(kuò)展方法使你能夠向現(xiàn)有類(lèi)型“添加”方法,而無(wú)需創(chuàng)建新的派生類(lèi)型、重新編譯或以其他方式修改原始類(lèi)型。 擴(kuò)展方法是一種特殊的靜態(tài)方法,但可以像擴(kuò)展類(lèi)型上的實(shí)例方法一樣進(jìn)行調(diào)用。 對(duì)于用 C#、F# 和 Visual Basic 編寫(xiě)的客戶端代碼,調(diào)用擴(kuò)展方法與調(diào)用在類(lèi)型中實(shí)際定義的方法沒(méi)有明顯區(qū)別。
表達(dá)式樹(shù)
表達(dá)式樹(shù)是將我們?cè)瓉?lái)可以直接由代碼編寫(xiě)的邏輯以表達(dá)式的方式存儲(chǔ)在樹(shù)狀的結(jié)構(gòu)里,從而可以在運(yùn)行時(shí)去解析這個(gè)樹(shù),然后執(zhí)行,實(shí)現(xiàn)動(dòng)態(tài)的編輯和執(zhí)行代碼。
今天就先簡(jiǎn)單的介紹到這里,下一次介紹基礎(chǔ)監(jiān)控,業(yè)務(wù)監(jiān)控,軟件系統(tǒng)監(jiān)控,硬件監(jiān)控,用戶的行為等等,更多信息關(guān)注新霸哥。