立即下單

碼農翻身 用故事給技術加點料+ 趣話計算機底層技術(共2本)
NT$ 1555  

碼農翻身 用故事給技術加點料+ 趣話計算機底層技術(共2本)

免郵費 貨到付款 七天鑒賞期

編輯推薦

√ 書中把計算機元素和行為用擬人手法編成一個個精彩紛呈的故事,繪聲繪色且深入淺出地演繹晦澀枯燥的編程知識。


√ 編程初學者可以津津有味地學習,老手也能饒有興致地查漏補缺。


√ 學習YX的架構師是如何思考、如何抽象、如何成長的,從操作系統、Java語言到Web技術,每個主題都深入淺出。


內容介紹

《碼農翻身》用故事的方式講解了軟件編程的若干重要領域,側重於基礎性、原理性的知識。


《碼農翻身》分為6章。


第1章講述計算機的基礎知識;


第2章側重講解Java的基礎知識;


第3章偏重Web後端編程;


第4章講解代碼管理的本質;


第5章講述了JavaScript的歷史、Node.js的原理、程序的鏈接、命令式和聲明式編程的區別


以及作者十多年來使用各種編程語言的感受;


第6章是作者的經驗總結和心得體會,包括職場發展的注意事項、作為架構師的感想、寫作的好處等。


《碼農翻身》不是一本編程的入門書,對編程一竅不通的“純小白”可能看不明白,可能會失望。但稍有編程基礎的讀者讀起來會非常暢快

讀後會有一種“原來如此”的感覺。


作者介紹

劉欣(@碼農翻身):

15年的軟件行業從業經驗,前IBM系統架構師,擅長企業應用架構和設計,領導過多個企業級應用架構設計和開發工作


目錄

第1章 計算機的SJ你不懂 1


1.1 我是一個線程 1


初生牛犢 1


漸入佳境 4


虎口脫險 5


江湖再見 8


1.2 TCP/IP之大明內閣 9


1.3 TCP/IP之大明郵差 12


1.4 CPU阿甘 17


啟動 17


運行 18


新裝備:緩存 19


自我提升:流水線 20


1.5 我是一個進程 21


批處理系統 22


多道程序 22


地址重定位 24


分時系統 26


分塊裝入內存 27


虛擬內存:分頁 28


分段 分頁 30


程序的裝載 31


線程 35


1.6 我是一塊硬盤 36


內部結構 37


文件 38


文件的存放 39


管理空閒塊 44


文件系統 45


1.7 我是一個鍵盤 46


二等公民 46


總線和端口 47


輪詢(程序式I/O) 48


中斷 49


DMA 50


1.8 數據庫的奇妙之旅 51


無紙化辦公 51


數據的冗餘和不一致 52


李氏查詢 52


並發訪問 54


原子性問題 56


AQ 58


1.9 搞清楚Socket 59


1.10 從1加到100:一道簡單的數學題挑戰一下你的大腦 64


CPU和內存 64


從1加到100 65


熱身 65


正式出發 65


1.11 一個翻譯家族的發家史 68


機器語言 68


彙編語言 69


高級語言 70


1.12 編程SJ的那把鎖 74


共享變量惹的禍 74


爭搶吧,線程 75


改進 76


信號量 77


1.13 繞不開的加法器 81


1.14 遞歸那點事兒 85


第2章 Java帝國 91


2.1 Java:一個帝國的誕生 91


C語言帝國的統治 91


反抗 92


一鳴驚人 93


開拓疆土 93


帝國的誕生 94


2.2 我是一個Java Class 96


陌生警察 96


刺探信息 97


初識虛擬機 98


快樂假期 102


真相大白 103


2.3 持久化:Java帝國反擊戰 104


斷電的威脅 104


數據庫聯合酋長國 105


表面風光的EJB 106


輕量級O/R Mapping框架 106


帝國的反擊 107


2.4 JDBC的誕生 108


談判 108


統一接口 110


面向接口編程 111


簡單工廠 112


數據驅動 114


工廠方法 115


2.5 Java帝國之宮廷內鬥 119


JDBC大臣 119


密謀 120


兩階段提交 121


JTA 123


塞翁失馬,焉知非福 124


基本可用 125


走漏風聲 127


宮廷激辯 128


2.6 JSP:一個裝配工的沒落 131


黑暗歲月 131


服務器端動態頁面 132


標籤庫 134


模板引擎 134


草根攪局 135


2.7 Java 帝國之消息隊列 137


張家村的歷史 137


拆分 138


新問題 139


消息隊列 139


互不兼容的MQ 140


消息隊列接口設計 141


配置和代碼的分離 143


再次抽象 144


2.8 Java帝國之動態代理 147


深夜奏對 147


明察暗訪 149


Java 動態代理 150


2.9 Java註解是怎麼成功上位的 153


XML大臣 153


安翰林獻計 154


早朝爭鬥 157


2.10 Java帝國之泛型 159


新王登基 159


C 使者 159


泛型實現 162


泛型方法 163


泛型和繼承 164


2.11 一個ZM的日誌系統是怎麼設計出來的 166


前言 166


張家村 167


小張的設計 167


正交性 170


Log4j 171


尾聲 171


2.12 序列化:一個老傢伙的鹹魚翻身 172


寒冬的蟄伏 172


XML和JSON的挑戰 173


新協議的崛起 175


2.13 加鎖還是不加鎖,這是一個問題 176


互斥鎖 176


要不要加鎖 177


CAS的擴展 179


2.14 Spring 的本質 182


問題來源 183


設計模式:模板方法 184


設計模式:裝飾者 186


AOP 187


實現AOP 188


對象的創建 189


IoC與DI 191


第3章 浪潮之巔的Web 192


3.1 Web的起源 192


3.2 兩個程序的愛情故事 195


好感 195


分離 196


網絡 197


Web 198


3.3 一個故事講完HTTPS 199


總有一種被偷窺的感覺 199


RSA:非對稱加密 200


非對稱加密 對稱加密 202


中間人劫持 202


你到底是誰 203


HTTPS 206


3.4 機房夜話 207


DY夜 207


第二夜 209


第三夜 211


3.5 從密碼到token,一個有關授權的故事 215


我把密碼獻給你 215


token 216


授權碼 token 218


後記 220


3.6 後端風雲 220


數據庫老頭兒 220


危機 221


黨委擴大會議 221


分家 223


Redis 224


餘數算法 227


一致性Hash算法 229


Hash槽 (Hash Slot) 233


故障轉移 235


高可用的Nginx 237


高可用的Tomcat 238


數據庫的讀寫分離 240


3.7 我是一個函數 243


3.8 從SOA到微服務 246


3.9 什麼是框架 249


3.10 HTTP Server:一個差生的逆襲 252


HTTP Server 1.0 252


HTTP Server 2.0:多進程 253


HTTP Server 3.0:select模型 254


HTTP Server 4.0:epoll模型 255


第4章 代碼管理那些事兒 258


4.1 版本管理簡史 258


“人肉” 版本管理 258


鎖定文件:避免互相覆蓋 259


允許衝突:退一步海闊天空 260


分支:多版本並行 261


分佈式管理:給程序員放權 262


程序員也愛社交 264


4.2 Build的演進之路 265


手工Build的煩惱 265


自動化Build 267


Java 與 XML 268


消除重複 270


4.3 爛代碼傳奇 275


4.4 敏捷下的單元測試 277


敏捷運動 277


困惑 278


討論 279


一年以後 280


4.5 再見! Bug 281


第5章 我的編程語言簡史 284


5.1 JavaScript :一個草根的逆襲 284


出世 284


成長 286


DY桶金 288


發明JSON 289


人生DF 291


5.2 Node.js:我只需要一個店小二 292


5.3 C老頭兒和Java小子的硬盤夜話 295


5.4 編程語言的“愛恨情仇” 300


讓人懷疑的C 語言 300


被忘卻的 VB & Visual FoxPro 301


蹂躪我的C 302


賴以謀生的Java 303


優雅的Ruby 304


5.5 命令式編程 VS 聲明式編程 306


一則小故事 306


命令式編程 306


聲明式編程 307


第6章 老司機的精進 309


6.1 凡事B先騎上虎背,和性格內向的程序員聊幾句 309


6.2 碼農需要知道的“潛規則” 311


上帝的規矩:局部性原理 311


坐飛機的怎麼和坐驢車的打交道:緩存 311


拋棄細節:抽象 312


我只想和鄰居打交道:分層 312


我怕等不及:異步調用 313


大事化小,小事化了:分而治之 314


6.3 15年編程生涯,一名架構師的總結 314


好奇心 315


養成計算機的思維方式 315


紮實基礎,融會貫通 317


要透徹地理解一門技術的本質 317


能寫漂亮的代碼 318


抽象的能力 319


技術領導力 319


6.4 對自己狠一點,開始寫作吧 320


6.5 學習編程的四兄弟 322


搖擺不定的老大 322


“小倉鼠”老二 322


不看書的老三 323


半途而廢的老四 323


趣話計算機底層技術


作者:軒轅之風(@編程技術宇宙)


出版時間:2023年06月 


ISBN:9787121455292


出版社:電子工業出版社


開本:16開


頁碼:288頁


內容介紹

本書用一系列有趣的小故事講述計算機底層相關的技術知識。

 第1章:聚焦計算機中核心的CPU,從基礎的門電路開始,到基本的指令執行過程,後到CPU的一些高級技術。內容涵蓋緩存、原子作、指令流水線、分支預測、亂序執行、線程、SIMD、 內存管理、TLB等。

 第2章:主要講述計算機中的存儲設施,括CPU中的緩存,內存、機械硬盤三者數據存儲的原理,以及硬盤上的數據管理組織的軟件——文件系統基本模型。

 第3章:主要講述計算機中的I/O和數據傳輸。內容涵蓋總線系統、中斷機制、DMA技術、零拷貝技術。重點關注網卡相關的數據傳輸,括網卡的基本工作機制,網卡接收數據後的處理,後介紹一種時下流行的數據處理技術——DPDK。

 第4章:前面三章主要是在硬件層面,這一章開始介紹軟件。本章聚焦計算機中重要的軟件——作系統。本書默認以Linux為參考,內容涵蓋作系統的一些基礎知識,括進程、線程、系統調用、異常處理、信號、鎖、權限管理,後介紹一個時下流行的容器技術Docker的原理。

第5章:主要涉及系統編程中和作系統緊密相關的一些技術點。括進程的創建過程、線程棧、進程間通信、I/O多路復用、內存映射文件、協程,後簡單介紹調試器GDB和可執行文件ELF。

 第6章:本章的主題是。網絡涉及方方面面,本章挑選了和計算機系統底層相關的一些技術,通過故事去感受計算機攻擊的原理,含棧溢出攻擊、整數溢出攻擊、DDoS攻擊、TCP會話劫持、HTTPS原理,還有前幾年大火的CPU漏洞——熔斷與幽靈攻擊原理等。


目錄

第1章 計算機的大腦:中央處理器CPU

1.1 CPU的細胞:門電路

1.1.1 邏輯門

1.1.2 加法器

1.1.3 算術邏輯單元ALU

1.2 程序的本質:指令

1.2.1 指令集

1.2.2 寄存器

1.2.3 彙編語言

1.2.4 *級語言

1.2.5 指令執行過程

1.3 像流水線一樣執行指令

1.3.1 指令流水線

1.3.2 流水線的級數

1.3.3 流水線裡的冒險

1.4 CPU裡的存儲設施:緩存

1.4.1 緩存

1.4.2 緩存行

1.4.3 指令緩存與數據緩存

1.5 多核緩存不一致引發的問題

1.5.1 原子操作

1.5.2 緩存引發的問題

1.5.3 緩存一致性協議MESI

1.6 指令還能亂序執行

1.6.1 數據冒險與流水線停頓

1.6.2 亂序執行

1.7 跳還是不跳,這是一個問題

1.7.1 靜態預測

1.7.2 動態預測

1.8 一條指令同時處理多個數據

1.8.1 一個簡單的循環

1.8.2 並行計算

1.8.3 一條指令處理多個數據

1.9 一個核同時執行兩個線程

1.9.1 資源閒置

1.9.2 超線程技術

1.10 CPU是如何管理內存的

1.10.1 8086

1.10.2 32位時代

1.10.3 虛擬內存

1.10.4 分頁交換

1.11 CPU地址翻譯的備忘錄

1.11.1 虛擬地址翻譯

1.11.2 地址翻譯緩存

1.11.3 翻譯後備緩衝區

1.12 GPU和CPU有什麼區別

1.12.1 龐大的核心數量

1.12.2 GPU的SIMT與“超線程”

*2章 計算機中的存儲設施

2.1 緩存為什麼比內存還快

2.2 內存條是如何存儲數據的

2.2.1 數據存儲

2.2.2 內存編址

2.3 多個CPU如何共同訪問內存

2.3.1 NUMA架構

2.3.2 操作系統支持

2.3.3 內存分配問題

2.4 機械硬盤存儲數據的原理

2.5 硬盤那麼大,計算機如何管理

2.5.1 扇區和塊

2.5.2 塊位圖

2.5.3 inode

2.5.4 目錄

2.5.5 塊組、組描述符、超級塊

2.5.6 引導塊、分區DBR和MBR

第3章 數據的輸入與輸出

3.1 計算機中的高速公路

3.1.1 早期的總線系統

3.1.2 南橋與北橋

3.1.3 消失的北橋

3.2 其他設備如何與CPU通信

3.2.1 8259A可編程中斷控制器

3.2.2 APIC*級可編程中斷控制器

3.2.3 中斷親和性

3.3 計算機啟動的過程

3.3.1 開始執行

3.3.2 MBR

3.3.3 操作系統

3.4 CPU把數據搬運的工作“外包”出去

3.4.1 PIO模式

3.4.2 DMA技術

3.4.3 DMA全面開花

3.5 神奇的零拷貝技術

3.5.1 數據的四次拷貝

3.5.2 零拷貝技術

3.6 網卡是如何工作的

3.6.1 集線器時代

3.6.2 數據收發過程

3.6.3 交換機時代

3.7 網卡收到數據包後發生什麼

3.7.1 數據幀校驗

3.7.2 DMA數據傳輸

3.7.3 軟中斷

3.7.4 輪詢收包

3.7.5 協議棧

3.8 繞過操作系統,直接收發數據包

3.8.1 萬兆流量需求

3.8.2 中斷問題

3.8.3 超快的抓包技術:DPDK

3.8.4 空轉問題

第4章 計算機的大管家:操作系統

4.1 一個控製程序的進化

4.1.1 多道程序處理

4.1.2 時間分片

4.1.3 狀態

4.1.4 優先級

4.1.5 多核時代

4.2 程序運行的實體:進程

4.2.1 進程地址空間

4.2.2 進程調度

4.2.3 進程與線程

4.3 CPU的執行流:線程

4.4 內核地址空間歷險記:系統調用

4.4.1 神秘的長者

4.4.2 系統調用

4.4.3 內核堆棧

4.5 當除數為0時,CPU發生了什麼

4.5.1 中斷和異常

4.5.2 信號投遞

4.5.3 異常返回

4.6 發給進程的信號,到底去哪兒了

4.6.1 可靠信號與不可靠信號

4.6.2 信號的處理

4.6.3 多線程的信號處理

4.7 困住線程的鎖,到底是什麼

4.7.1 原子操作

4.7.2 自旋鎖

4.7.3 互斥鎖

4.7.4 條件變量

4.7.5 信號量

4.8 Linux的權限管理

4.8.1 打開文件的過程

4.8.2 權限檢查

4.8.3 UGO與ACL檢查

4.8.4 Cgroup與SELinux的檢查

4.9 計算機中“楚門的世界”

4.9.1 隱藏文件系統:chroot與pivot_root

4.9.2 進程的隔離:命名空間

4.9.3 行為的限制:Cgroup

第5章 系統編程那些事兒

5.1 進程是如何誕生的

5.1.1 奇怪的fork

5.1.2 寫時拷貝

5.1.3 消失的線程們

5.2 線程的棧裡都裝了什麼

5.2.1 自動增長

5.2.2 內核棧

5.2.3 棧溢出

5.3 進程間如何通信

5.3.1 信號

5.3.2 socket套接字

5.3.3 匿名管道

5.3.4 消息隊列

5.3.5 共享內存

5.4 高性能基礎:I/O多路復用

5.4.1 select模型

5.4.2 poll模型

5.4.3 epoll模型

5.5 像訪問內存一樣讀寫文件

5.5.1 傳統文件讀寫

5.5.2 內存映射文件

5.6 線程裡的多個執行流:協程

5.6.1 線程阻塞問題

5.6.2 多個執行流的“調度”

5.7 調試器是如何工作的

5.7.1 軟件斷點

5.7.2 單步調試

5.7.3 內存斷點

5.8 可執行文件ELF

5.8.1 格式識別

5.8.2 ELF文件格式

5.8.3 加載過程

第6章 計算機的攻擊與安全防護

6.1 TCP序列號的秘密

6.1.1 TCP初始化序列號是多少

6.1.2 Linux協議棧裡的計數器

6.2 “猜出”TCP的序列號

6.2.1 神秘的TCP計數器

6.2.2 奇怪的TCP連接

6.2.3 基於計數器的側信道攻擊

6.3 危險的TCP SYN Flood

6.3.1 SYN洪水攻擊

6.3.2 安全防護:SYN Cookie

6.4 從HTTP到HTTPS的進化

6.4.1 *一版:直接簡單加密

6.4.2 *二版:非對稱加密

6.4.3 第三版:非對稱與對稱加密結合

6.4.4 第四版:密鑰計算

6.4.5 第五版:數字證書

6.4.6 第六版:信任鏈

6.5 線程棧裡的秘密行動

6.5.1 棧溢出與Stack Canary

6.5.2 虛函數攻擊

6.6 CPU分支預測引發的危機

6.6.1 觸發分支預測

6.6.2 亂序執行與緩存引發的攻擊

6.6.3 KPTI內核頁表隔離

6.7 CPU中隱藏的秘密基地

6.7.1 神秘的SGX

6.7.2 CPU裡的禁區

6.7.3 內存加密

6.8 躲在暗處的挖礦病毒

6.9 服務器被挖礦,Redis@是內鬼

6.9.1 挖礦病毒的入侵

6.9.2 Redis持久化存儲“闖禍了”

6.10 整數+1引發的內核攻擊

6.10.1 IDT被誰篡改了?

6.10.2 有符號與無符號大有不同

6.10.3 整數+1的悲劇

6.11 從虛擬機中逃脫

6.11.1 虛擬化技術

6.11.2 虛擬機逃逸技術 

作者介紹

軒轅之風(@編程技術宇宙),前百度、360、奇安信*級安全研發工程師,專注網絡安全、流量分析、大數據處理領域的軟件研發。

媒體評論

一趟故事與技術的奇幻之旅。涵蓋CPU、存儲、IO、操作系統、編程、安全六個主題。本書由幾十個故事構成,故事之間既有關聯,讓你像“追劇”一樣學技術,也有一定獨立性,隨時翻開一篇都能看下去 

關聯推薦

一趟故事與技術的奇幻之旅。涵蓋CPU、存儲、IO、操作系統、編程、安全六個主題。本書由幾十個故事構成,故事之間既有關聯,讓你像“追劇”一樣學技術,也有一定獨立性,隨時翻開一篇都能看下去


碼農翻身 用故事給技術加點料+ 趣話計算機底層技術(共2本)
NT$1555
注: 我們會宅配送貨到您府上,請您注意查收。