線程:html
線程運行步驟:就緒、等待、運行前端
多線程併發問題程序員
加鎖、死鎖問題,按照資源順序申請鎖web
TCP/IPredis
不可靠通道進行可靠性傳輸算法
TCP的三次握手和四次揮手sql
滑動窗口協議數據庫
CPU編程
CPU比內存快100倍,比硬盤快百萬倍。後端
寄存器、程序計算器
局部性原理
進程
批處理系統
進程記錄了寄存器的志、指令值、和消耗時間等
地址重定向
硬盤
磁道、扇區
文件、文件系統
I/O設備
總線和端口
輪詢、中斷
數據庫
查詢
併發訪問
原子性問題
安全問題
socket
對TCP鏈接的封裝
翻譯器
機器語言、彙編語言、高級語言
翻譯流程:源程序->詞法分析->語法分析->語義分析->中間代碼生成->代碼優化->代碼生成->目標程序
編程世界的鎖
共享變量、鎖爭搶、自旋鎖、鎖的原子性、不可重入。
信號量:隊列會對wait、signal、full、enpty封裝
遞歸
函數棧幀
尾遞歸、複用棧幀
web起源
超文本標記語言
超文本傳輸協議
通訊
共享內存通訊
socket通訊:須要IP和端口,可是不安全
web通訊:HTTP(80)、HTTPS(443)
HTTP報文段打包在TCP報文段中,放到IP層數據報中,造成鏈路層的幀,經過網關發出。
HTTPS
對稱加密
RSA非對稱加密
非對稱加密+對稱加密
中間人劫持非對稱加密的公鑰
數字證書
CAS
共享session和共享cookie是比較侷限的作法
認證中心:創建session、建立Ticket、重定向
2次重定向,一次驗證Ticket
Token和受權
返回受權碼
根據受權碼獲取Token
數據庫
結構化查詢語句:SQL
數據庫連接通道:須要緩衝區
Redis
支持:key-value、List、Set、Sorted Set、Hash
餘數算法:根據key的hash取餘,對增長節點很是不友好
一致性Hash算法:增刪服務器只會影響相鄰節點的緩存數據
Hash槽(slot):CRC16算法,對槽值取餘,增長節點能夠作數據遷移,訪問重定向。
Redis Cluster:故障轉移、數據備份
高可用Nginx
多臺服務器使用Keepalived造成master-slave結構
對外只提供一個IP
高可用Tomcat
Tomcat集羣
負載均衡
失效轉移:服務器集羣的請求轉移,狀態信息須要保留,可經過redis。
高可用Mysql
數據庫讀寫分離
須要在一個分佈式環境中,保持數據的強一致性。
一master,多個slave結構。
函數
本地過程調用:全部調用都發生在本機內的一個進程中。
遠程過程調用(RPC):客戶代理(Stub)接收參數,而後經過socket交給服務端代理(Skeleton)處理,把複雜的網絡細節隱藏了起來。
框架
框架就是把功能單元抽取出來,造成可複用的東西。
最佳實踐:系統架構設計、緩存、性能、高可用性、分佈式、安全、備份。
HTTP Server1.0
接收HTTP Request,處理完.html後,把文件經過文本方式發送回去HTTP Response。
須要創建HTTP層下面的TCP通道,這個連接通道是經過Socket創建的。好比:socket、bind、listen、accept。默認爲80通道,通常也不會被防火牆攔截。
此爲單進程,容易阻塞。
HTTP Server2.0
多進程併發
進程切換消耗大量資源
HTTP Server3.0
select模型:
一個socket連接是一個文件描述符fd,是一個整數,fd背後是一個簡單的數據結構。
HTTP Sever和操做系統之間傳遞的是一個fd_set的數據結構
操做系統檢測是否有數據,而後標記有數據的socket,最後喚醒HTTP Server執行。
HTTP Server4.0 epoll模型
和select模型相似,都是操做系統檢測是否有讀寫數據socket,而後通知HTTP Sever遍歷1024個連接執行。
不一樣的地方是操做系統只會告訴HTTP Server能夠讀寫的socket,不用HTTP Sever遍歷全部socket連接。
人肉版本管理
鎖定文件:避免互相覆蓋
容許衝突:退一步海闊天空
分支:多版本並行
分佈式管理
Javascript
瀏覽器端運行驗證而出世
XMLHttpRequest進行局部刷新
JSON字符串
前端三劍客:HTML、CSS、Ajax和JSON
Node.js服務其語言
Java和C的區別
Java有虛擬機,抽象層屏蔽底層平臺的API
C語言一旦編輯就能夠獨立執行,擁有獨立的進程和獨立的地址空間
Java編譯以後是.class,C語言預處理、編譯、彙編以後是目標文件。
C語言是編譯時的靜態連接,Java時運行時的動態連接。
編程語言
C語言是貼近硬件的系統級編程
VB桌面應用開發
Java適合後端編程,後端編程:負載均衡、災難恢復、緩存、消息、分佈式、數據備份、搜索等
命令式編程和聲明式編程
命令式編程就是對硬件操做的抽象
程序員就是把複雜、容易產生歧義的人類天然語言編譯成精確的計算機語言指令。
聲明式編程:表明是SQL
凡事必先騎上虎背
世上沒有等徹底準備好後纔開始的事情,等你以爲徹底準備好後,黃花菜都涼了。
對於性格內向的程序員,不少時候你認爲基本準備好了其實就夠了。
碼農須要知道的「潛規則「
上帝的規矩,局部性原理:時間局部性、空間局部性
坐飛機的怎麼和坐驢車的打交道
拋棄細節:抽象
我只想和鄰居打交道:分層,應用層、傳輸層、網絡層、鏈路層、物理層。
我怕等不及:異步調用
大事化小,小事化了:分而治之
一名架構師的總結
好奇心
養成計算機的思惟方式
紮實基礎,融會貫通
要透徹的理解一門技術的本質
能寫漂亮的代碼
抽象的能力
技術領導力
對本身狠一點,開始寫做吧
」碼農「是一個貶義詞,這個詞對於不少軟件工程師來講是一個準確描述。技術更新換代頻繁、社會發展迅速,使得軟件這個行業的工做者,不少時候都疲於奔命,沉寂在不斷更換技術的怪圈。而《碼農翻身》一書能幫助更多的」碼農「從技術本質上打破這個限制。
在《碼農翻身》一書中不只能學到了進程、線程、CPU、硬盤、I/O設備等計算機基礎知識,也學到了TCP/IP、socket、HTTP等通訊協議方面的知識。同時在應用編程方面和工做規劃上也有必定的參考價值,是一本很值得看的書籍。
從不一樣角度來看《碼農翻身》它描述了一個軟件工程師的職業生涯歷程,不論是對初學者,仍是有必定經驗的積累者,都能提供指路的明燈。