《碼農翻身》讀後感

1.計算機的世界

  • 線程:html

    • 線程運行步驟:就緒、等待、運行前端

    • 多線程併發問題程序員

    • 加鎖、死鎖問題,按照資源順序申請鎖web

  • TCP/IPredis

    • 不可靠通道進行可靠性傳輸算法

    • TCP的三次握手和四次揮手sql

    • 滑動窗口協議數據庫

  • 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等通訊協議方面的知識。同時在應用編程方面和工做規劃上也有必定的參考價值,是一本很值得看的書籍。

從不一樣角度來看《碼農翻身》它描述了一個軟件工程師的職業生涯歷程,不論是對初學者,仍是有必定經驗的積累者,都能提供指路的明燈。

相關文章
相關標籤/搜索