軟件已經成為人們日常生活與工作中常見的輔助工具,但是對于軟件的工作原理,很多人卻不是非常了解。
本書對軟件的工作原理進行了解析,讓讀者對常用軟件的工作原理有一個大致的了解。內容涉及數據如何加密、密碼如何使用和保護、如何創建計算機圖像、如何壓縮和存儲視頻、如何搜索數據、程序如何解決同樣的問題而不會引發沖突以及如何找出zui佳路徑等方面。
本書適合從事軟件開發工作的專業技術人員,以及對軟件工作原理感興趣的讀者。
軟件驅動著現代世界,但對許多人來說其內部的工作原理仍然是個謎。雖然軟件在背后支撐著CGI圖形、安全網絡購物以及高速的Google搜索,并且我們每天都在使用軟件,但并不是每個人都確切了解其工作原理。
如果你想知道在計算機屏幕后面究竟發生了什么的話,本書將會帶你領略身邊那些軟件的神奇世界。例如,你將學到計算機生成的動畫是如何與現實世界中的鏡頭組合起來并創造出逼真特效的;視頻游戲是如何實時渲染圖形的;哈希函數是如何混淆密碼以使其免受攻擊的;以及Google是如何對搜索結果進行排序的。
本書通俗易懂,具有詳細的解釋和任何人都能理解的直觀圖表。本書不含任何代碼,故閱讀本無需技術背景。
如果想要了解計算機是如何在每天執行我們習以為常卻又很神奇的那些任務,你不必非得成為計算機科學家,通過閱讀本書,你就可以領略軟件背后的奧秘。
通過閱讀本書,你還將了解:
? 加密的工作原理以及不同加密標準的安全程度;
? 如何壓縮視頻以滿足在線流式播放;
? 數據是如何在龐大的數據庫中被搜索出來(查找到)的;
? 應用程序是如何在沒有沖突的情況下協同工作的;
? 軟件是如何理解地圖信息并為你導航的。
V. Anton Spraul已經為來自世界各地的學生講授了15年以上的入門編程和計算機科學。同時他也是《Think Like a Programmer》(《像程序員一樣思考》)和《Computer Science Made Simple》這兩本書的作者。
目 錄
第1章 加密1
1.1 加密目標2
1.2 換位法:相同的數據,不同的
順序2
1.2.1 密鑰4
1.2.2 對加密的攻擊5
1.3 替換法:替換數據6
1.3.1 變化替換模式6
1.3.2 密鑰擴展9
1.4 高級加密標準9
1.4.1 二進制基礎10
1.4.2 AES加密:概述12
1.4.3 AES中的密鑰擴展13
1.4.4 AES加密處理流程14
1.4.5 數據塊鏈接15
1.4.6 AES為什么是安全的16
1.4.7 AES可能遭受的攻擊17
1.5 私鑰加密的限制18
第2章 密碼19
2.1 將密碼轉成數字19
2.2 MD5散列函數21
2.2.1 密碼編碼21
2.2.2 按位運算22
2.2.3 MD5散列流程23
2.2.4 達到好的散列函數的
標準24
2.3 數字簽名25
2.3.1 身份問題25
2.3.2 碰撞攻擊25
2.4 身份認證系統中的密碼26
2.4.1 危險的密碼表26
2.4.2 對密碼進行散列27
2.4.3 字典式攻擊27
2.4.4 散列表28
2.4.5 散列鏈29
2.4.6 迭代式散列32
2.4.7 為密碼加鹽33
2.4.8 密碼表安全嗎34
2.5 密碼存儲服務34
2.6 小結35
第3章 網絡安全37
3.1 公鑰加密是如何解決密鑰共享
問題的37
3.2 公鑰加密所需的數學運算38
3.2.1 可逆函數(Invertible
Functions)38
3.2.2 單向函數(One-Way
Functions)39
3.2.3 暗門函數(Trapdoor
Functions)40
3.3 RSA加密法42
3.3.1 創建密鑰42
3.3.2 使用RSA加密數據44
3.3.3 RSA的效率45
3.3.4 在真實世界中使用RSA46
3.3.5 身份認證中的RSA49
3.4 網絡安全:HTTPS51
3.4.1 握手51
3.4.2 在HTTPS下傳輸數據53
3.5 共享密鑰的問題解決了嗎54
第4章 電影CGI57
4.1 傳統動畫軟件59
4.1.1 數字圖像是如何工作的59
4.1.2 顏色是如何定義的61
4.1.3 軟件是如何制作cel
動畫的61
4.1.4 從cel動畫軟件到
渲染式的2D圖形69
4.2 3D CGI軟件69
4.2.1 如何描述3D場景70
4.2.2 虛擬攝像機71
4.2.3 直接光照72
4.2.4 全局光照76
4.2.5 如何進行光線追蹤76
4.2.6 全屏抗鋸齒80
4.3 真實與模擬相結合81
4.4 理想化的電影級品質渲染82
第5章 游戲圖形83
5.1 實時圖形的硬件84
5.2 為什么游戲不使用射線追蹤85
5.3 只有直線,沒有曲線85
5.4 不使用射線追蹤來進行投影86
5.5 渲染三角形87
5.5.1 畫家算法88
5.5.2 深度緩沖89
5.6 實時光照90
5.7 陰影92
5.8 環境光照和環境遮擋94
5.9 紋理映射95
5.9.1 最鄰近采樣97
5.9.2 雙線性過濾99
5.9.3 Mipmaps100
5.9.4 三線性過濾101
5.10 反射102
5.11 偽造曲線104
5.11.1 遠距頂替物104
5.11.2 凹凸映射104
5.11.3 曲面細分105
5.12 實時抗鋸齒107
5.12.1 超級采樣107
5.12.2 多重采樣109
5.12.3 后期處理抗鋸齒109
5.13 渲染預算111
5.14 游戲圖形展望112
第6章 數據壓縮113
6.1 游程編碼114
6.2 字典壓縮116
6.2.1 基本方式116
6.2.2 哈夫曼編碼118
6.3 重組數據以獲得更好的壓縮119
6.3.1 預測編碼119
6.3.2 量化120
6.4 JPEG圖像120
6.4.1 顏色的另一種存儲方式121
6.4.2 離散余弦變換122
6.4.3 二維DCT125
6.4.4 對DCT處理結果進行
壓縮128
6.4.5 JPEG圖像質量131
6.5 壓縮高清視頻134
6.5.1 時間壓縮134
6.5.2 MPEG-2視頻壓縮135
6.5.3 視頻質量與時間壓縮138
6.6 視頻壓縮的現在和未來139
第7章 搜索141
7.1 定義搜索問題141
7.2 將數據按序存放142
7.2.1 選擇排序142
7.2.2 快速排序143
7.3 二分搜索146
7.4 索引148
7.5 散列150
7.6 網絡搜索153
7.6.1 為抓取到的網頁結果進行
排名153
7.6.2 高效地使用索引155
7.7 網絡搜索的前景156
第8章 并發157
8.1 為何需要并發157
8.1.1 性能158
8.1.2 多用戶環境158
8.1.3 多任務處理158
8.2 并發是如何出錯的159
8.3 使并發安全162
8.3.1 只讀數據162
8.3.2 基于事務的處理過程162
8.3.3 信號量163
8.4 無限等待的問題165
8.4.1 有序隊列166
8.4.2 循環等待造成的饑餓166
8.5 信號量的性能問題168
8.6 并發的未來169
第9章 地圖路徑171
9.1 軟件中對地圖的定義171
9.1.1 最佳優先搜索174
9.1.2 重用之前的搜索結果177
9.2 一次找出所有最佳路徑179
9.2.1 弗洛伊德算法179
9.2.2 存儲路徑方向182
9.3 路徑查找的未來185