工程師基本常識

工程師基本常識

 

 

異步IO (異步輸入輸出)

異步傳輸存在一個潛在的問題,即接收方並不知道數據會在何時到達。在它檢測到數據並作出響應以前,第一個比特已通過去了。這就像有人出乎意料地從後面走上來跟你說話,而你沒來得及反應過來,漏掉了最前面的幾個詞。所以,每次異步傳輸的信息都以一個起始位開頭,它通知接收方數據已經到達了,這就給了接收方響應、接收和緩存數據比特的時間;在傳輸結束時,一箇中止位表示該次傳輸信息的終止。按照慣例,空閒(沒有傳送數據)的線路實際攜帶着一個表明二進制1的信號,異步傳輸的開始位使信號變成0,其餘的比特位使信號隨傳輸的數據信息而變化。最後,中止位使信號從新變回1,該信號一直保持到下一個開始位到達。例如在鍵盤上數字「1」,按照8比特位的擴展ASCII編碼,將發送「00110001」,同時須要在8比特位的前面加一個起始位,後面一箇中止位。前端

TCP/UDP協議

  1. TCP提供IP環境下的數據可靠傳輸,它提供的服務包括數據流傳送、可靠性、有效流控、全雙工操做和多路複用。經過面向鏈接、端到端和可靠的數據包發送。通俗說,它是事先 爲所發送的數據開闢出鏈接好的通道,而後再進行數據發送;web

  2. TCP(Transmission Control Protocol,傳輸控制協議)是基於鏈接的協議,也就是說,在正式收發數據前,必須和對方創建可靠的鏈接。ajax

  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.一般塊模型數據是在多個線程間共享的,須要防止線程死鎖狀況的發生。
複製代碼

線程池

 

 

組成部分
一、線程池管理器(ThreadPoolManager):用於建立並管理線程池
二、工做線程(WorkThread): 線程池中線程
三、任務接口(Task):每一個任務必須實現的接口,以供工做線程調度任務的執行。
四、任務隊列:用於存放沒有處理的任務。提供一種緩衝機制。
複製代碼

多線程死鎖問題

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

發生死鎖的緣由通常是兩個對象的鎖相互等待形成的。

那麼爲何會產生死鎖呢?
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查詢工具,用戶能夠訪問指望數據,而沒必要理解數據庫的底層結構。

數據持久化

數據持久化就是將內存中的數據模型轉換爲存儲模型,以及將存儲模型轉換爲內存中的數據模型的統稱. 
數據持久化對象的基本操做有:保存、更新、刪除、查詢等。
使用數據持久化有如下好處:
一、程序代碼重用性強,即便更換數據庫,只須要更改配置文件,沒必要重寫程序代碼。
二、業務邏輯代碼可讀性強,在代碼中不會有大量的SQL語言,提升程序的可讀性。
三、持久化技術能夠自動優化,以減小對數據庫的訪問量,提升程序運行效率。
複製代碼

微服務

簡單來講, 微服務的目的是有效的拆分應用,實現敏捷開發和部署 。
微服務是一個新興的軟件架構,就是把一個大型的單個應用程序和服務拆分爲數十個的支持微服務。
一個微服務的策略可讓工做變得更爲簡便,它可擴展單個組件而不是整個的應用程序堆棧,從而知足服務等級協議。
複製代碼

SPA (單頁應用程序)

單頁Web應用(single page web application,SPA),就是隻有一張Web頁面的應用。單頁應用程序 (SPA) 是加載單個HTML 頁面並在用戶與應用程序交互時動態更新該頁面的Web應用程序。 瀏覽器一開始會加載必需的HTML、CSS和JavaScript,全部的操做都在這張頁面上完成,都由JavaScript來控制。所以,對單頁應用來講模塊化的開發和設計顯得至關重要。

速度:更好的用戶體驗,讓用戶在web app感覺native app的速度和流暢,
MVC:經典MVC開發模式,先後端各負其責。
ajax:重前端,業務邏輯所有在本地操做,數據都須要經過AJAX同步、提交。
相關文章
相關標籤/搜索