工程師基本常識

光、夜雨微涼發表於2019-05-02

工程師基本常識

非同步IO (非同步輸入輸出)

非同步傳輸存在一個潛在的問題,即接收方並不知道資料會在什麼時候到達。在它檢測到資料並做出響應之前,第一個位元已經過去了。這就像有人出乎意料地從後面走上來跟你說話,而你沒來得及反應過來,漏掉了最前面的幾個詞。因此,每次非同步傳輸的資訊都以一個起始位開頭,它通知接收方資料已經到達了,這就給了接收方響應、接收和快取資料位元的時間;在傳輸結束時,一個停止位表示該次傳輸資訊的終止。按照慣例,空閒(沒有傳送資料)的線路實際攜帶著一個代表二進位制1的訊號,非同步傳輸的開始位使訊號變成0,其他的位元位使訊號隨傳輸的資料資訊而變化。最後,停止位使訊號重新變回1,該訊號一直保持到下一個開始位到達。例如在鍵盤上數字“1”,按照8位元位的擴充套件ASCII編碼,將傳送“00110001”,同時需要在8位元位的前面加一個起始位,後面一個停止位。

TCP/UDP協議

  1. TCP提供IP環境下的資料可靠傳輸,它提供的服務包括資料流傳送、可靠性、有效流控、全雙工操作和多路複用。通過面向連線、端到端和可靠的資料包傳送。通俗說,它是事先 為所傳送的資料開闢出連線好的通道,然後再進行資料傳送;

  2. TCP(Transmission Control Protocol,傳輸控制協議)是基於連線的協議,也就是說,在正式收發資料前,必須和對方建立可靠的連線。

  3. TCP協議能為應用程式提供可靠的通訊連線,使一臺計算機發出的位元組流無差錯地發往網路上的其他計算機,對可靠性要求高的資料通訊系統往往使用TCP協議傳輸資料。

  4. TCP支援的應用協議主要有:Telnet、FTP、SMTP等;

  5. UDP則不為IP提供可靠性、流控或差錯恢復功能。一般來說,TCP對應的是可靠性要求高的應用,而UDP對應的則是可靠性要求低、傳輸經濟的應用。

  6. UDP支援的應用層協議主要有:NFS(網路檔案系統)、SNMP(簡單網路管理協議)、DNS(主域名稱系統)、TFTP(通用檔案傳輸協議)等。

  7. UDP(User Data Protocol,使用者資料包協議)是與TCP相對應的協議。它是面向非連線的協議,它不與對方建立連線,而是直接就把資料包傳送過去!

  8. UDP適用於一次只傳送少量資料、對可靠性要求不高的應用環境。

WebSocket

WebSocket protocol 是HTML5一種新的協議。它實現了瀏覽器與伺服器全雙工通訊(full-duplex)。一開始的握手需要藉助HTTP請求完成。

優點:伺服器可以主動傳送資料給客戶端
功能: 實現了瀏覽器與伺服器全雙工通訊

在 WebSocket API,瀏覽器和伺服器只需要做一個握手的動作,然後,瀏覽器和伺服器之間就形成了一條快速通道。兩者之間就直接可以資料互相傳送。
在此WebSocket 協議中,為我們實現即時服務帶來了兩大好處:

1. Header
   互相溝通的Header是很小的-大概只有 2 Bytes
2. Server Push
    伺服器的推送,伺服器不再被動的接收到瀏覽器的request之後才返回資料,而是在有新資料時就主動推送給瀏覽器。
複製程式碼

工程師基本常識

訊息佇列

“訊息佇列”是在訊息的傳輸過程中儲存訊息的容器。

  1. “訊息”是在兩臺計算機間傳送的資料單位。訊息可以非常簡單,例如只包含文字字串;也可以更復雜,可能包含嵌入物件。
  2. 訊息被髮送到佇列中。“訊息佇列”是在訊息的傳輸過程中儲存訊息的容器。訊息佇列管理器在將訊息從它的源 中繼到它的目標時充當中間人。佇列的主要目的是提供路由並保證訊息的傳遞;如果傳送訊息時接收者不可用,訊息佇列會保留訊息,直到可以成功地傳遞它。

共享記憶體

共享記憶體指 (shared memory)在多處理器的計算機系統中,可以被不同中央處理器(CPU)訪問的大容量記憶體。由於多個CPU需要快速訪問儲存器,這樣就要對儲存器進行快取(Cache)。任何一個快取的資料被更新後,由於其他處理器也可能要存取,共享記憶體就需要立即更新,否則不同的處理器可能用到不同的資料。共享記憶體是 Unix下的多程式之間的通訊方法 ,這種方法通常用於一個程式的多程式間通訊,實際上多個程式間也可以通過共享記憶體來傳遞資訊。

多執行緒

優點
1.使用執行緒可以把佔據時間長的程式中的任務放到後臺去處理
2.使用者介面可以更加吸引人,這樣比如使用者點選了一個按鈕去觸發某些事件的處理,可以彈出一個進度條來顯示處理的進度
3.程式的執行速度可能加快
4.在一些等待的任務實現上如使用者輸入、檔案讀寫和網路收發資料等,執行緒就比較有用了。在這種情況下可以釋放一5.些珍貴的資源如記憶體佔用等等。
6.多執行緒技術在IOS軟體開發中也有舉足輕重的位置。

缺點
1.如果有大量的執行緒,會影響效能,因為作業系統需要在它們之間切換。
2.更多的執行緒需要更多的記憶體空間。
3.執行緒可能會給程式帶來更多“bug”,因此要小心使用。
4.執行緒的中止需要考慮其對程式執行的影響。
5.通常塊模型資料是在多個執行緒間共享的,需要防止執行緒死鎖情況的發生。
複製程式碼

執行緒池

工程師基本常識

組成部分
1、執行緒池管理器(ThreadPoolManager):用於建立並管理執行緒池
2、工作執行緒(WorkThread): 執行緒池中執行緒
3、任務介面(Task):每個任務必須實現的介面,以供工作執行緒排程任務的執行。
4、任務佇列:用於存放沒有處理的任務。提供一種緩衝機制。
複製程式碼

多執行緒死鎖問題

所謂死鎖: 是指兩個或兩個以上的程式在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。

發生死鎖的原因一般是兩個物件的鎖相互等待造成的。

那麼為什麼會產生死鎖呢?
1.因為系統資源不足。
2.程式執行推進的順序不合適。     
3.資源分配不當。

產生死鎖的條件有四個:
1.互斥條件:所謂互斥就是程式在某一時間內獨佔資源。
2.請求與保持條件:一個程式因請求資源而阻塞時,對已獲得的資源保持不放。
3.不剝奪條件:程式已獲得資源,在末使用完之前,不能強行剝奪。
4.迴圈等待條件:若干程式之間形成一種頭尾相接的迴圈等待資源關係。
複製程式碼

死鎖是因為多執行緒訪問共享資源,由於訪問的順序不當所造成的,通常是一個執行緒鎖定了一個資源A,而又想去鎖定資源B;在另一個執行緒中,鎖定了資源B,而又想去鎖定資源A以完成自身的操作,兩個執行緒都想得到對方的資源,而不願釋放自己的資源,造成兩個執行緒都在等待,而無法執行的情況。

ORM

物件關係對映(英語:Object Relation Mapping,簡稱ORM,或O/RM,或O/R mapping),是一種程式技術,用於實現物件導向程式語言裡不同型別系統的資料之間的轉換。從效果上說,它其實是建立了一個可在程式語言裡使用的“虛擬物件資料庫”。 ORM有時也稱為基於事實的建模,因為它把相關資料描述為基本事實。這些事實如果分割為再小的事實就會丟失資訊。 ORM提供的不只是描述不同物件間關係的一個簡單而直接的方式。ORM還提供了靈活性。使用ORM建立的模型比使用其它方法建立的模型更有能力適應系統的變化。 ORM模型的簡單性簡化了資料庫查詢過程。使用ORM查詢工具,使用者可以訪問期望資料,而不必理解資料庫的底層結構。

資料持久化

資料持久化就是將記憶體中的資料模型轉換為儲存模型,以及將儲存模型轉換為記憶體中的資料模型的統稱. 
資料持久化物件的基本操作有:儲存、更新、刪除、查詢等。
使用資料持久化有以下好處:
1、程式程式碼重用性強,即使更換資料庫,只需要更改配置檔案,不必重寫程式程式碼。
2、業務邏輯程式碼可讀性強,在程式碼中不會有大量的SQL語言,提高程式的可讀性。
3、持久化技術可以自動優化,以減少對資料庫的訪問量,提高程式執行效率。
複製程式碼

微服務

簡單來說, 微服務的目的是有效的拆分應用,實現敏捷開發和部署 。
微服務是一個新興的軟體架構,就是把一個大型的單個應用程式和服務拆分為數十個的支援微服務。
一個微服務的策略可以讓工作變得更為簡便,它可擴充套件單個元件而不是整個的應用程式堆疊,從而滿足服務等級協議。
複製程式碼

SPA (單頁應用程式)

單頁Web應用(single page web application,SPA),就是隻有一張Web頁面的應用。單頁應用程式 (SPA) 是載入單個HTML 頁面並在使用者與應用程式互動時動態更新該頁面的Web應用程式。 瀏覽器一開始會載入必需的HTML、CSS和JavaScript,所有的操作都在這張頁面上完成,都由JavaScript來控制。因此,對單頁應用來說模組化的開發和設計顯得相當重要。

速度:更好的使用者體驗,讓使用者在web app感受native app的速度和流暢,
MVC:經典MVC開發模式,前後端各負其責。
ajax:重前端,業務邏輯全部在本地操作,資料都需要通過AJAX同步、提交。複製程式碼

相關文章