《碼農翻身》讀後感
1.計算機的世界
-
執行緒:
-
執行緒執行步驟:就緒、等待、執行
-
多執行緒併發問題
-
加鎖、死鎖問題,按照資源順序申請鎖
-
-
TCP/IP
-
不可靠通道進行可靠性傳輸
-
TCP的三次握手和四次揮手
-
滑動視窗協議
-
-
CPU
-
CPU比記憶體快100倍,比硬碟快百萬倍。
-
暫存器、程式計算器
-
區域性性原理
-
-
程序
-
批處理系統
-
程序記錄了暫存器的志、指令值、和消耗時間等
-
地址重定向
-
-
硬碟
-
磁軌、扇區
-
檔案、檔案系統
-
-
I/O裝置
-
匯流排和埠
-
輪詢、中斷
-
-
資料庫
-
查詢
-
併發訪問
-
原子性問題
-
安全問題
-
-
socket
-
對TCP連線的封裝
-
-
翻譯器
-
機器語言、組合語言、高階語言
-
翻譯流程:源程式->詞法分析->語法分析->語義分析->中間程式碼生成->程式碼優化->程式碼生成->目標程式
-
-
程式設計世界的鎖
-
共享變數、鎖爭搶、自旋鎖、鎖的原子性、不可重入。
-
訊號量:佇列會對wait、signal、full、enpty封裝
-
-
遞迴
-
函式棧幀
-
尾遞迴、複用棧幀
-
2.Java帝國
3.浪潮之巔的Web
-
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連結。
-
4.程式碼管理的那些事
-
人肉版本管理
-
鎖定檔案:避免互相覆蓋
-
允許衝突:退一步海闊天空
-
分支:多版本並行
-
分散式管理
5.我的程式語言簡史
-
Javascript
-
瀏覽器端執行驗證而出世
-
XMLHttpRequest進行區域性重新整理
-
JSON字串
-
前端三劍客:HTML、CSS、Ajax和JSON
-
Node.js服務其語言
-
-
Java和C的區別
-
Java有虛擬機器,抽象層遮蔽底層平臺的API
-
C語言一旦編輯就可以獨立執行,擁有獨立的程序和獨立的地址空間
-
Java編譯之後是.class,C語言預處理、編譯、彙編之後是目標檔案。
-
C語言是編譯時的靜態連結,Java時執行時的動態連結。
-
-
程式語言
-
C語言是貼近硬體的系統級程式設計
-
VB桌面應用開發
-
Java適合後端程式設計,後端程式設計:負載均衡、災難恢復、快取、訊息、分散式、資料備份、搜尋等
-
-
指令式程式設計和宣告式程式設計
-
指令式程式設計就是對硬體操作的抽象
-
程式設計師就是把複雜、容易產生歧義的人類自然語言編譯成精確的計算機語言指令。
-
宣告式程式設計:代表是SQL
-
6.老司機的精進
-
凡事必先騎上虎背
-
世上沒有等完全準備好後才開始的事情,等你覺得完全準備好後,黃花菜都涼了。
-
對於性格內向的程式設計師,很多時候你認為基本準備好了其實就夠了。
-
-
碼農需要知道的“潛規則“
-
上帝的規矩,區域性性原理:時間區域性性、空間區域性性
-
坐飛機的怎麼和坐驢車的打交道
-
拋棄細節:抽象
-
我只想和鄰居打交道:分層,應用層、傳輸層、網路層、鏈路層、物理層。
-
我怕等不及:非同步呼叫
-
大事化小,小事化了:分而治之
-
-
一名架構師的總結
-
好奇心
-
養成計算機的思維方式
-
紮實基礎,融會貫通
-
要透徹的理解一門技術的本質
-
能寫漂亮的程式碼
-
抽象的能力
-
技術領導力
-
對自己狠一點,開始寫作吧
-
7.《碼農翻身》讀後感
”碼農“是一個貶義詞,這個詞對於很多軟體工程師來說是一個準確描述。技術更新換代頻繁、社會發展迅速,使得軟體這個行業的工作者,很多時候都疲於奔命,沉寂在不斷更換技術的怪圈。而《碼農翻身》一書能幫助更多的”碼農“從技術本質上打破這個限制。
在《碼農翻身》一書中不僅能學到了程序、執行緒、CPU、硬碟、I/O裝置等計算機基礎知識,也學到了TCP/IP、socket、HTTP等通訊協議方面的知識。同時在應用程式設計方面和工作規劃上也有一定的參考價值,是一本很值得看的書籍。
從不同角度來看《碼農翻身》它描述了一個軟體工程師的職業生涯歷程,不管是對初學者,還是有一定經驗的積累者,都能提供指路的明燈。
&n