後端架構師的知識體系之一基礎組件

2021-01-08 新霸哥

作為一個程式設計師,長期的從事基礎性的代碼開發也是不現實的一件事,如果不能有所提高,長期做最基礎的開發,對於個人的職業技能發展也是不好的。我們都知道程式設計師 的發展有兩個主要方向一個是管理方向,另外一個就是技術方向。技術方向就要考慮往架構這塊發展了,要想成為一個合格的後端架構師,就要掌握後端架構師的知識體系,為了讓更多的朋友了解後端架構師的知識體系,新霸哥從後端架構中總結了一些經驗供大家參考學習,下面從基礎組件開始介紹。後期會持續更新。

多線程

多線程:指的是這個程序(一個進程)運行時產生了不止一個線程。

並行與並發:

並行:多個CPU實例或者多臺機器同時執行一段處理邏輯,是真正的同時。

並發:通過CPU調度算法,讓用戶看上去同時執行,實際上從CPU操作層面不是真正的同時。並發往往在場景中有公用的資源,那麼針對這個公用的資源往往產生瓶頸,我們會用TPS或者QPS來反應這個系統的處理能力。

同步:Java中的同步指的是通過人為的控制和調度,保證共享資源的多線程訪問成為線程安全,來保證結果的準確。如代碼簡單加入@synchronized關鍵字。在保證結果準確的同時,提高性能,才是優秀的程序。線程安全的優先級高於性能。

線程安全:經常用來描繪一段代碼。指在並發的情況之下,該代碼經過多線程使用,線程的調度順序不影響任何結果。這個時候使用多線程,我們只需要關注系統的內存,CPU是不是夠用即可。反過來,線程不安全就意味著線程的調度順序會影響最終結果。

在java中要想實現多線程,有兩種手段,一種是繼續Thread類,另外一種是實現Runable接口。在java中,每次程序運行至少啟動2個線程。一個是main線程,一個是垃圾收集線程。因為每當使用java命令執行一個類的時候,實際上都會啟動一個JVM,每一個jVM在作業系統中啟動了一個進程。

多線程編程,模型複雜,容易發生衝突,必須用鎖加以隔離,同時,又要小心死鎖的發生。

加密

用戶登入、交易、信息通訊、oauth 等等,不同的應用場景也會需要使用到不同的籤名加密算法,或者需要搭配不一樣的 籤名加密算法 來達到業務目標。

反射

反射的核心是 JVM 在運行時才動態加載類或調用方法/訪問屬性,它不需要事先(寫代碼的時候或編譯期)知道運行對象是誰。通過反射,我們可以在運行時獲得程序或程序集中每一個類型的成員和成員的信息。程序中一般的對象的類型都是在編譯期就確定下來的,而 Java 反射機制可以動態地創建對象並調用其屬性,這樣的對象的類型在編譯期是未知的。所以我們可以通過反射機制直接創建對象,即使這個對象的類型在編譯期是未知的。

反射最重要的用途就是開發各種通用框架。很多框架(比如 Spring)都是配置化的(比如通過 XML 文件配置 Bean),為了保證框架的通用性,它們可能需要根據配置文件加載不同的對象或類,調用不同的方法,這個時候就必須用到反射,運行時動態加載需要加載的對象。

調度

分配工作所需資源的方法。進行調度工作的程序叫做調度器。調度器通常的實現使得所有計算資源都處於忙碌狀態(在負載均衡中),允許多位用戶有效地同時共享系統資源,或達到指定的服務質量。調度是計算自身的基礎,同時也是程式語言計算模型固有的部分。調度器使得在單處理器上通過多任務處理,從而讓執行多個進程成為可能。

隊列

先進先出(FIFO, First-In-First-Out)的線性表。在具體應用中通常用鍊表或者數組來實現。隊列只允許在後端(稱為rear)進行插入操作,在前端(稱為front)進行刪除操作。

隊列的操作方式和堆棧類似,唯一的區別在於隊列只允許新數據在後端進行添加。

高性能網絡層

對網絡、作業系統協議棧、進程與線程、常見的網絡組件等知識點,需要有豐富的項目開發經驗,能夠權衡伺服器運行效率與項目開發效率。

插件

透過和應用程式(例如網頁瀏覽器,郵箱客戶端)的互動,用來替應用程式增加一些所需要的特定的功能。最常見的有遊戲、網頁瀏覽器的插件和媒體播放器的插件。

壓縮

通過特定的算法來減小計算機文件大小的機制。為了減少數據大小以節省保存空間和傳輸的時間。為了數據的傳輸,壓縮能夠作用於單獨的數據內容或者所有的傳輸單元(包括數據頭),這取決於一些特定的因素。

擴展方法

擴展方法使你能夠向現有類型「添加」方法,而無需創建新的派生類型、重新編譯或以其他方式修改原始類型。 擴展方法是一種特殊的靜態方法,但可以像擴展類型上的實例方法一樣進行調用。 對於用 C#、F# 和 Visual Basic 編寫的客戶端代碼,調用擴展方法與調用在類型中實際定義的方法沒有明顯區別。

表達式樹

表達式樹是將我們原來可以直接由代碼編寫的邏輯以表達式的方式存儲在樹狀的結構裡,從而可以在運行時去解析這個樹,然後執行,實現動態的編輯和執行代碼。

今天就先簡單的介紹到這裡,下一次介紹基礎監控,業務監控,軟體系統監控,硬體監控,用戶的行為等等。更多信息關注新霸哥。

相關焦點

  • 為什麼80%的碼農都做不了架構師?
    ④工作好幾年了,想跳槽換個高薪工作,結果面試官都問了一些什麼數據結構,什麼垃圾回收,什麼並發架構、協程編程之類的東西,雖然看過,但是平時用不著,看了也忘記了,回答不上來,結果面試官說我基礎太差…… 如果有以上問題,那麼你絕對進入學習誤區走了彎路;如果我們要成為架構師,我們自己要面臨的三大問題: 找準定位:我是誰、我在哪裡?
  • 如何搭建完備實用的基礎架構與中間件體系?
    基礎架構,是項目基礎庫/基礎軟體/基礎平臺的架構與實現。它不直接從事任何對外業務,而是為後端工程師提供「服務」,如 RPC、負載均衡、消息隊列、存儲中間件等等。
  • 架構師or普通的程式設計師,架構師優秀在哪幾方面?
    企業架構師的職責是確定整個公司的技術路線和技術發展方向。蓋茨給自己的頭銜是首席軟體架構師。網易丁磊也喜歡這樣稱呼自己。基礎架構架構師的工作是提煉和優化技術方面積累和沉澱形成的基礎性的、公共的、可復用的框架和組件,這些的框架和組件是基於技術的公司最有價值的資產之一。
  • JAVA後時代, 微服務的興起, 架構師不得不了解的模塊化體系
    是的,模塊化與組件化開發將會是未來開發的主要潮流,無論是作為開發人員還是架構師都必須掌握的一種開發方式。spring cloud微服務正是在這種條件下誕生的,簡單的說微服務不是一種編碼技術或者是設計模式,它是一種系統架構上的設計風格。它存在的主要意義就是將一個獨立的系統拆分成多個小型服務,這些服務運行在自己獨立的進程中,互補幹擾。
  • 架構師成長計劃」牽手百度,聚焦未來數據中心基礎架構
    為此對於擔綱重要任務的架構師更是需要緊跟技術與市場趨勢,follow技術「網紅」,努力成為技術潮人。為此,Science與英特爾首度聯袂推出「架構師成長計劃」在線系列課程,共同為架構師修築成就優秀之路,助力架構師構建未來,讓智者更強。
  • 阿里十年架構師:以宏觀的角度給大家整理出13條後端需要的知識
    站在運籌帷幄的角度來看,一名厲害的 Java 後端程式設計師都需要懂得哪些知識呢?我想,這也是很多讀者迫切想知道的一個問題,因為如果不站在一個宏觀的角度的話,所有學過的知識點都是零散的,就感覺像一隻迷路的小鹿,跌跌撞撞的,總感覺欠點火候,對吧?怎麼把知識點串聯起來,形成知識圖譜或者知識體系,就顯得非常重要了。
  • 如何成為前端架構師?
    前端架構師,聽起來像是個很高大上的名詞,在大多數程式設計師眼中,架構師一般都來自於後端開發, Java或 C++,這些人往往有十八般武藝,能夠解決企業中出現的各種問題。前端架構師的概念已經漸漸進入了前端工程師的視野,無論何時,只要前端工程師還在工作,面試官就會問到,你的未來計劃是什麼?
  • 阿里技術大牛:一份架構師成神路線圖!
    架構師職責架構師不是一個人,他需要建立高效卓越的體系,帶領團隊去攻城略地,在規定的時間內完成項目。架構師需要能夠識別定義並確認需求,能夠進行系統分解形成整體架構,能夠正確地技術選型,能夠制定技術規格說明並有效推動實施落地。
  • 阿里P8耗時一年最終總結出系統架構設計程式設計師向架構師轉型之路
    軟體行業技術開發從業人員眾多,但具備若干年開發經驗的普通開發人員往往面臨個人發展的瓶頸,即如何從普通開發人員轉型成高層次的系統架構師和技術管理人員。想成為一名架構師,應當具備全面的知識體系,需要進行系統的學習和實踐。很多開發人員有往架構師轉型的強烈意願,但苦於找不到好的方法和路徑。
  • 從初學者到程式設計師,再到架構師,阿里大牛構建成Java知識體系
    前言怎樣的經歷,才能讓一名Java初學者成為開發程式設計師,再到高級架構師呢?所以我整理一份Java知識體系,下面一起來看看。一、編程基礎不管是C還是C++,不管是Java還是PHP,想成為一名合格的程式設計師,基本的數據結構和算法基礎還是要有的。
  • Android程式設計師現狀:沒有架構師的命,卻得了架構師的病
    剛踏進大學入門Android開發的時候,對架構師這個詞並沒有太多的概念,就覺得肯定很牛13,我以後工作了也肯定是個架構師。後來開始寫代碼,從Java學起,然後四大組件,寫Activity,然後學UI,學布局等等等。
  • 大數據架構基礎知識
    ; Photo by Jared Murray on Unsplash介紹在使用數據獲取業務價值的公司中,儘管您可能不會一直以數據科學技能為榮,但始終可以很好地管理數據基礎架構。在這些低調但穩定的需求的支持下,數據架構師的薪水與數據科學家的薪資同樣高,甚至更高。 實際上,根據PayScale進行的薪酬研究(https://www.payscale.com/research/US/Country=United_States/Salary),美國數據架構師的平均工資為121,816美元,而數據科學家的平均工資為96,089美元 。
  • 程式設計師如何向架構師發展?
    苦李,今天和我們公司前端大佬閒聊,說到從更高層次看待項目,例如,封裝前端組件庫,維護組件相關文檔等,他說到,重要的不是怎麼實現業務代碼,而是個人能為團隊帶來什麼。我想問下,後端代碼如果要優化,如何從更高的角度來進行,或是平時編寫代碼如何建立一種高層次架構思維,有哪些具體方面可以讓自己為團隊帶來價值。
  • 「企業架構」企業架構師vs解決方案架構師vs領域架構師
    企業架構被認為是通過信息技術獲取競爭優勢的關鍵途徑之一。降低成本、增加靈活性和規範技術環境的需求越來越大。企業架構在概念上可以劃分為不同的架構層,包括業務架構和IT架構(數據、應用程式和技術架構)。然後,解決方案體系結構接受一個問題,並提出構建塊來解決它。它經常重用企業架構提供的其他元素(企業構建塊、企業功能、架構標準和指導方針)因此,企業架構師在企業架構團隊和組織的其他地方有許多不同的角色和職責。
  • 想做架構師都要學什麼?這些知識你一定要知道(中篇)
    今天作為架構師學什麼的中篇,繼續分享4個架構師需要了解的技術點。相比上篇的分享,本篇著重於微服務這個主題。涉及的概念和框架就會更多,想要消化理解通常需要按月計算的時間。早期一般採用 apache commons httpclient ,後來跟隨安卓潮流,後端也有大量基於OkHttp的使用量。當然,在引入springcloud後,習慣基於feign實現http調用,但我們要知道,feign的基礎實現仍然是 OkHttp或者common httpclient。 對於非http的場景,我們一般使用rpc框架來實現。
  • 網際網路分層架構,為啥要前後端分離?
    團隊正在推進前後端分離,我覺得架構變得複雜了,項目研發周期變長了,但組長說,網際網路公司都在搞前後端分離,所以我們也要搞。我還是不理解,為什麼要進行前後端分離呀?很多產品追求酷炫的前端效果,並且對前端兼容性要求很高,前端產品改版頻率很高,那麼前後端分離是有必要的。否則,前後端分離只會帶來更多系統架構的複雜性。 第三點,公司發展階段考慮。
  • 前端架構模式:支持前端的後端
    後端到後端的體系結構模式描述了一個世界,其中每個客戶端應用程式都有自己的伺服器端組件-特定前端的後端。如果您有多個具有完全不同需求且都消耗相同基礎資源的客戶端接口,則此模式非常適用。 現實世界中最常見的示例是同時具有Web和移動客戶端的應用程式。要了解為什麼"後端對前端"有用,讓我們逐步了解一下網絡體系結構的一些發展。
  • Github 優質庫分享 -02 後端架構師技術圖譜
    Github 優質庫分享 -02 後端架構師技術圖譜《後端架構師技術圖譜》 涵蓋大量知識點,迷茫不知道該怎麼學,看這個就夠了,加油努力學習。文檔管理中間件 Web Server Nginx OpenResty Tengine Apache Httpd Tomcat 架構原理
  • 如何成為一個合格的數據架構師?
    最早,數據架構師在IOE上工作;2009年,阿里雲最早提出「去IOE」的口號,初代數據架構師革了自己的命;2015年,這一年產生的數據量是人類過去歷史上所產生數據量的總和,從此進入了指數級增長階段。數據架構師也演化出了2個大方向(平臺型數據架構師、數倉型數據架構師)。本文以作者親歷視角,主要分享數倉型數據架構師的「修煉大法」。
  • 如何成為一個合格的數據架構師?
    最早,數據架構師在IOE上工作;2009年,阿里雲最早提出「去IOE」的口號,初代數據架構師革了自己的命;2015年,這一年產生的數據量是人類過去歷史上所產生數據量的總和,從此進入了指數級增長階段。數據架構師也演化出了2個大方向(平臺型數據架構師、數倉型數據架構師)。