並發編程目錄
1. Java並發編程實戰的作品目錄
對本書的贊譽
譯者序
前言
第1章簡介
1.1並發簡史
1.2線程的優勢
1.2.1發揮多處理器的強大能力
1.2.2建模的簡單性
1.2.3非同步事件的簡化處理
1.2.4響應更靈敏的用戶界面
1.3線程帶來的風險
1.3.1安全性問題
1.3.2活躍性問題
1.3.3性能問題
1.4線程無處不在
第一部分基礎知識
第2章線程安全性
2.1什麼是線程安全性
2.2原子性
2.2.1競態條件
2.2.2示例:延遲初始化中的競態條件
2.2.3復合操作
2.3加鎖機制
2.3.1內置鎖
2.3.2重入
2.4用鎖來保護狀態
2.5活躍性與性能
第3章對象的共享
3.1可見性
3.1.1失效數據
3.1.2非原子的64位操作
3.1.3加鎖與可見性
3.1.4Volatile變數
3.2發布與逸出
3.3線程封閉
3.3.1Ad-hoc線程封閉
3.3.2棧封閉
3.3.3ThreadLocal類
3.4不變性
3.4.1Final域
3.4.2示例:使用Volatile類型來發布不可變對象
3.5安全發布
3.5.1不正確的發布:正確的對象被破壞
3.5.2 不可變對象與初始化安全性
3.5.3安全發布的常用模式
3.5.4事實不可變對象
3.5.5可變對象
3.5.6安全地共享對象
第4章對象的組合
4.1設計線程安全的類
4.1.1收集同步需求
4.1.2依賴狀態的操作
4.1.3狀態的所有權
4.2實例封閉
4.2.1Java監視器模式
4.2.2示例:車輛追蹤
4.3線程安全性的委託
4.3.1示例:基於委託的車輛追蹤器
4.3.2獨立的狀態變數
4.3.3當委託失效時
4.3.4發布底層的狀態變數
4.3.5示例:發布狀態的車輛追蹤器
4.4在現有的線程安全類中添加功能
4.4.1客戶端加鎖機制
4.4.2組合
4.5將同步策略文檔化
第5章基礎構建模塊
5.1同步容器類
5.1.1同步容器類的問題
5.1.2迭代器與Concurrent-ModificationException
5.1.3隱藏迭代器
5.2並發容器
5.2.1ConcurrentHashMap
5.2.2額外的原子Map操作
5.2.3CopyOnWriteArrayList
5.3阻塞隊列和生產者-消費者模式
5.3.1示例:桌面搜索
5.3.2串列線程封閉
5.3.3雙端隊列與工作密取
5.4阻塞方法與中斷方法
5.5同步工具類
5.5.1閉鎖
5.5.2FutureTask
5.5.3信號量
5.5.4柵欄
5.6構建高效且可伸縮的結果緩存
第二部分結構化並發應用程序
第6章任務執行
6.1在線程中執行任務
6.1.1串列地執行任務
6.1.2顯式地為任務創建線程
6.1.3無限制創建線程的不足
6.2Executor框架
6.2.1示例:基於Executor的Web伺服器
6.2.2執行策略
6.2.3線程池
6.2.4Executor的生命周期
6.2.5延遲任務與周期任務
6.3找出可利用的並行性
6.3.1示例:串列的頁面渲染器
6.3.2攜帶結果的任務Callable與Future
6.3.3示例:使用Future實現頁面渲染器
6.3.4在異構任務並行化中存在的局限
6.3.5CompletionService:Executor與BlockingQueue
6.3.6示例:使用CompletionService實現頁面渲染器
6.3.7為任務設置時限
6.3.8示例:旅行預定門戶網站
第7章取消與關閉
第8章線程池的使用
第9章圖形用戶界面應用程序
第三部分活躍性、性能與測試
第10章避免活躍性危險
第11章性能與可伸縮性
第12章並發程序的測試
第四部分高級主題
第13章顯式鎖
第14章構建自定義的同步工具
第15章原子變數與非阻塞同步機制
第16章Java內存模型
附錄A並發性標注
參考文獻
2. Java編程思想的作品目錄
讀者評論
前言 第1章 對象導論
1.1 抽象過程
1.2 每個對象都有一個介面
1.3 每個對象都提供服務
1.4 被隱藏的具體實現
1.5 復用具體實現
1.6 繼承
1.6.1 「是一個」(is-a)與「像是一個」(is-like-a)關系
1.7 伴隨多態的可互換對象
1.8 單根繼承結構
1.9 容器
1.9.1 參數化類型(范型)
1.10 對象的創建和生命期
1.11 異常處理:處理錯誤
1.12 並發編程
1.13 Java與Internet
1.13.1 Web是什麼
1.13.2客戶端編程
1.13.3 伺服器端編程
1.22 總結
第2章 一切都是對象
2.1 用引用操縱對象
2.2 必須由你創建所有對象
2.2.1 存儲到什麼地方
2.2.2 特例:基本類型
2.2.3 Java中的數組
2.3 永遠不需要銷毀對象
2.3.1 作用域
2.3.2 對象的作用域
2.4 創建新的數據類型:類
2.4.1 域和方法
2.4.2 基本成員默認值
2.5 方法、參數和返回值
2.5.1 參數列表
2.6 構建一個Java程序
2.6.1 名字可見性
2.6.2 運用其他構件
2.6.3 static 關鍵字
2.7 你的第一個Java程序
編譯和運行
2.8 注釋和嵌入式文檔
2.8.1 注釋文檔
2.8.2 語法
2.8.3 嵌入式HTML
2.8.4 一些標簽示例
2.8.5 文檔示例
2.9 編碼風格
2.10 總結
2.11 練習
第3章 操作符
3.1 更簡單的列印語句
3.2 使用Java操作符
3.3 優先順序
3.4 賦值
3.4.1 方法調用中的別名問題
3.5 算術操作符
3.5.1 一元加、減操作符
3.6 自動遞增和遞減
3.7 關系操作符
3.7.1 測試對象的等價性
3.8 邏輯操作符
3.8.1 短路
3.9 直接常量
3.9.1 指數記數法
3.10 按位操作符
3.11 移位操作符
3.12 三元操作符 if-else
3.13 字元串操作符 + 和 +=
3.14 使用操作符時常犯的錯誤
3.15 類型轉換操作符
3.15.1 截尾和舍入
3.15.2提升
3.16 Java沒有「sizeof」
3.17 操作符小結
3.18 總結
第4章 控制執行流程
4.1 true和false
4.2 if-else
4.3 迭代
4.3.1 do-while
4.3.2 for
4.3.3 逗號操作符
4.4 Foreach語法
4.5 return
4.6 break和 continue
4.7 臭名昭著的「goto」
4.8 switch
4.9 總結
第5章 初始化與清理
5.1 用構造器確保初始化
5.2 方法重載
5.2.1 區分重載方法
5.2.2 涉及基本類型的重載
5.2.3 以返回值區分重載方法
5.3 預設構造器
5.4 this關鍵字
5.4.1 在構造器中調用構造器
5.4.2 static的含義
5.5 清理:終結處理和垃圾回收
5.5.1 finalize()的用途何在
5.5.2 你必須實施清理
5.5.3 終結條件
5.5.4 垃圾回收器如何工作
5.6 成員初始化
5.6.1 指定初始化
5.7 構造器初始化
5.7.1 初始化順序
5.7.2. 靜態數據的初始化
5.7.3. 顯式的靜態初始化
5.7.4. 非靜態實例初始化
5.8 數組初始化
5.8.1 可變參數列表
5.9 枚舉類型
5.10 總結
第6章 訪問許可權控制
第7章 復用類
第8章 多態
第9章 介面
第10章 內部類
第11章 持有對象
第12章 通過異常處理錯誤
第13章 字元串
第14章 類型信息
第15章 泛型
第16章 數組
第17章 容器深入研究
第18章 Java I/O系統
第19章 枚舉類型
第20章 註解
第21章 並發
第22章 圖形化用戶界面
附錄A 補充材料
可下載的補充材料
Thinking in C:Java的基礎
Java編程思想 研討課
Hands-on Java研討課CD
Thinking in Objects研討課
Thinking in Enterprise Java
Thinking in Patterns(with Java)
Thinking in Patterns研討課
設計咨詢與復審
附錄B 資源
軟體
編輯器與IDE
書籍
分析與設計
Python
我的著作列表
索引
3. UNIX環境高級編程的作品目錄
第1章UNIX基礎知識1
1.1引言1
1.2UNIX體系結構1
1.3登錄1
1.4文件和目錄3
1.5輸入和輸出6
1.6程序和進程8
1.7出錯處理10
1.8用戶標識12
1.9信號14
1.10時間值15
1.11系統調用和庫函數16
1.12小結17
習題18
第2章UNIX標准化及實現19
2.1引言19
2.2UNIX標准化19
2.2.1ISO C19
2.2.2IEEE POSIX20
2.2.3Single UNIX Specification25
2.2.4FIPS26
2.3UNIX系統實現26
2.3.1SVR426
2.3.24.4BSD27
2.3.3FreeBSD27
2.3.4Linux27
2.3.5Mac OS X28
2.3.6Solaris28
2.3.7其他UNIX系統28
2.4標准和實現的關系28
2.5限制29
2.5.1ISO C限制29
2.5.2POSIX限制30
2.5.3XSI限制32
2.5.4sysconf、pathconf和fpathconf函數32
2.5.5不確定的運行時限制38
2.6選項42
2.7功能測試宏44
2.8基本系統數據類型45
2.9標准之間的沖突45
2.10小結46
習題46
第3章文件I/O47
3.1引言47
3.2文件描述符47
3.3open函數48
3.4creat函數49
3.5close函數50
3.6lseek函數50
3.7read函數53
3.8write函數54
3.9I/O的效率54
3.10文件共享56
3.11原子操作59
3.12p和p2函數60
3.13sync、fsync和fdatasync函數61
3.14fcntl函數62
3.15ioctl函數66
3.16/dev/fd67
3.17小結68
習題68
第4章文件和目錄71
4.1引言71
4.2stat、fstat和lstat函數71
4.3文件類型72
4.4設置用戶ID和設置組ID74
4.5文件訪問許可權75
4.6新文件和目錄的所有權77
4.7access函數77
4.8umask函數79
4.9chmod和fchmod函數81
4.10粘住位83
4.11chown、fchown和lchown函數84
4.12文件長度85
4.13文件截短86
4.14文件系統86
4.15link、unlink、remove和rename函數89
4.16符號鏈接91
4.17symlink和readlink函數94
4.18文件的時間94
4.19utime函數95
4.20mkdir和rmdir函數97
4.21讀目錄98
4.22chdir、fchdir和getcwd函數102
4.23設備特殊文件104
4.24文件訪問許可權位小結106
4.25小結106
習題107
第5章標准I/O庫109
5.1引言109
5.2流和FILE對象109
5.3標准輸入、標准輸出和標准出錯110
5.4緩沖110
5.5打開流112
5.6讀和寫流114
5.7每次一行I/O116
5.8標准I/O的效率117
5.9二進制I/O119
5.10定位流120
5.11格式化I/O121
5.12實現細節125
5.13臨時文件127
5.14標准I/O的替代軟體130
5.15小結130
習題130
第6章系統數據文件和信息133
6.1引言133
6.2口令文件133
6.3陰影口令136
6.4組文件137
6.5附加組ID138
6.6實現的區別139
6.7其他數據文件139
6.8登錄賬戶記錄140
6.9系統標識141
6.10時間和日期常式142
6.11小結146
習題146
第7章進程環境147
7.1引言147
7.2main函數147
7.3進程終止147
7.4命令行參數151
7.5環境表152
7.6C程序的存儲空間布局152
7.7共享庫154
7.8存儲器分配154
7.9環境變數157
7.10setjmp和longjmp函數159
7.11getrlimit和setrlimit函數164
7.12小結168
習題168
第8章進程式控制制171
8.1引言171
8.2進程標識符171
8.3fork函數172
8.4vfork函數176
8.5exit函數178
8.6wait和waitpid函數179
8.7waitid函數183
8.8wait3和wait4函數184
8.9競爭條件185
8.10exec函數188
8.11更改用戶ID和組ID192
8.12解釋器文件196
8.13system函數200
8.14進程會計203
8.15用戶標識208
8.16進程時間208
8.17小結210
習題211
第9章進程關系213
9.1引言213
9.2終端登錄213
9.3網路登錄216
9.4進程組218
9.5會話219
9.6控制終端220
9.7tcgetpgrp、tcsetpgrp和tcgetsid函數221
9.8作業控制222
9.9shell執行程序225
9.10孤兒進程組228
9.11FreeBSD實現230
9.12小結231
習題232
第10章信號233
10.1引言233
10.2信號概念233
10.3signal函數240
10.4不可靠的信號242
10.5中斷的系統調用244
10.6可重入函數246
10.7SIGCLD語義248
10.8可靠信號術語和語義250
10.9kill和raise函數251
10.10alarm和pause函數252
10.11信號集256
10.12sigprocmask函數258
10.13sigpending函數259
10.14sigaction函數261
10.15sigsetjmp和siglongjmp函數266
10.16sigsuspend函數268
10.17abort函數274
10.18system函數276
10.19sleep函數280
10.20作業控制信號282
10.21其他特徵284
10.22小結285
習題285
第11章線程287
11.1引言287
11.2線程概念287
11.3線程標識288
11.4線程的創建288
11.5線程終止291
11.6線程同步297
11.7小結311
習題311
第12章線程式控制制313
12.1引言313
12.2線程限制313
12.3線程屬性314
12.4同步屬性318
12.5重入324
12.6線程私有數據328
12.7取消選項331
12.8線程和信號333
12.9線程和fork336
12.10線程和I/O339
12.11小結340
習題340
第13章守護進程341
13.1引言341
13.2守護進程的特徵341
13.3編程規則342
13.4出錯記錄345
13.5單實例守護進程348
13.6守護進程的慣例350
13.7客戶進程-伺服器進程模型354
13.8小結354
習題354
第14章高級I/O355
14.1引言355
14.2非阻塞I/O355
14.3記錄鎖357
14.4STREAMS370
14.5I/O多路轉接379
14.5.1select和pselect函數381
14.5.2poll函數384
14.6非同步I/O386
14.6.1系統V非同步I/O386
14.6.2BSD非同步I/O387
14.7readv和writev函數387
14.8readn和writen函數389
14.9存儲映射I/O390
14.10小結395
習題396
第15章進程間通信397
15.1引言397
15.2管道398
15.3popen和pclose函數403
15.4協同進程408
15.5FIFO412
15.6XSI IPC415
15.6.1標識符和鍵415
15.6.2許可權結構416
15.6.3結構限制417
15.6.4優點和缺點417
15.7消息隊列418
15.8信號量422
15.9共享存儲427
15.10客戶進程-伺服器進程屬性432
15.11小結434
習題434
第16章網路IPC:套接字437
16.1引言437
16.2套接字描述符437
16.3定址439
16.3.1位元組序440
16.3.2地址格式441
16.3.3地址查詢442
16.3.4將套接字與地址綁定449
16.4建立連接450
16.5數據傳輸452
16.6套接字選項464
16.7帶外數據466
16.8非阻塞和非同步I/O467
16.9小結468
習題468
第17章高級進程間通信469
17.1引言469
17.2基於STREAMS的管道469
17.2.1命名的STREAMS管道472
17.2.2唯一連接473
17.3UNIX域套接字476
17.3.1命名UNIX域套接字477
17.3.2唯一連接478
17.4傳送文件描述符482
17.4.1經由基於STREAMS的管道傳送文件描述符484
17.4.2經由UNIX域套接字傳送文件描述符486
17.5open伺服器版本1493
17.6open伺服器版本2498
17.7小結505
習題505
第18章終端I/O507
18.1引言507
18.2綜述507
18.3特殊輸入字元512
18.4獲得和設置終端屬性516
18.5終端選項標志516
18.6stty命令522
18.7波特率函數523
18.8行控制函數524
18.9終端標識524
18.10規范模式529
18.11非規范模式532
18.12終端的窗口大小537
18.13termcap,terminfo和curses539
18.14小結540
習題540
第19章偽終端541
19.1引言541
19.2概述541
19.3打開偽終端設備544
19.3.1基於STREAMS的偽終端547
19.3.2基於BSD的偽終端549
19.3.3基於Linux的偽終端551
19.4pty_fork函數553
19.5pty程序555
19.6使用pty程序559
19.7高級特性564
19.8小結565
習題565
第20章資料庫函數庫567
20.1引言567
20.2歷史567
20.3函數庫568
20.4實現概述569
20.5集中式或非集中式572
20.6並發574
20.7構造函數庫574
20.8源代碼575
20.9性能598
20.10小結600
習題601
第21章與網路列印機通信603
21.1引言603
21.2網路列印協議603
21.3超文本傳輸協議605
21.4列印假離線技術605
21.5源代碼607
21.6小結644
習題645
附錄A函數原型647
附錄B其他源代碼677
附錄C部分習題答案685
參考書目709
索引715
4. 代碼整潔之道的作品目錄
第1章整潔代碼1
1.1要有代碼21.2糟糕的代碼2
1.3混亂的代價3
1.3.1華麗新設計4
1.3.2態度
1.3.3迷題5
1.3.4整潔代碼的藝術5
1.3.5什麼是整潔代碼6
1.4思想流派10
1.5我們是作者11
1.6童子軍軍規12
1.7前傳與原則121.8小結12
1.9文獻13
第2章有意義的命名15
2.1介紹15
2.2名副其實16
2.3避免誤導17
2.4做有意義的區分18
2.5使用讀得出來的名稱19
2.6使用可搜索的名稱202.7避免使用編碼21
2.7.1匈牙利語標記法21
2.7.2成員前綴21
2.7.3介面和實現22
2.8避免思維映射22
2.9 類名23
2.10方法名23
2.11別扮可愛23
2.12每個概念對應一個詞24
2.13別用雙關語24
2.14使用解決方案領域名稱25
2.15使用源自所涉問題領域的名稱25
2.16添加有意義的語境25
2.17不要添加沒用的語境27
2.18最後的話27
第3章函數29
3.1短小32
3.2隻做一件事33
3.3每個函數一個抽象層級34
3.4switch語句35
3.5使用描述性的名稱36
3.6函數參數37
3.6.1一元函數的普遍形式38
3.6.2標識參數38
3.6.3二元函數38
3.6.4三元函數39
3.6.5參數對象39
3.6.6參數列表40
3.6.7動詞與關鍵字40
3.7無副作用40
3.8分隔指令與詢問42
3.9使用異常替代返回錯誤碼423.9.1抽離Try/Catch代碼塊43
3.9.2錯誤處理就是一件事44
3.9.3Error.java依賴磁鐵44
3.10別重復自己44
3.11結構化編程45
3.12如何寫出這樣的函數45
3.13小結45
3.14SetupTeardownIncluder程序463.15文獻48
第4章注釋49
4.1注釋不能美化糟糕的代碼50
4.2用代碼來闡述51
4.3好注釋51
4.3.1法律信息51
4.3.2提供信息的注釋51
4.3.3對意圖的解釋52
4.3.4闡釋534.3.5警示53
4.3.6TODO注釋54
4.3.7放大54
4.3.8公共API中的Javadoc55
4.4壞注釋55
4.4.1喃喃自語55
4.4.2多餘的注釋56
4.4.3誤導性注釋58
4.4.4循規式注釋58
4.4.5日誌式注釋594.4.6廢話注釋59
4.4.7可怕的廢話61
4.4.8能用函數或變數時就別用注釋62
4.4.9位置標記62
4.4.10括弧後面的注釋62
4.4.11歸屬與署名63
4.4.12注釋掉的代碼63
4.4.13HTML注釋64
4.4.14非本地信息64
4.4.15信息過多65
4.4.16不明顯的聯系654.4.17函數頭66
4.4.18非公共代碼中的Javadoc66
4.4.19範例66
4.5文獻69
第5章格式71
5.1格式的目的72
5.2垂直格式72
5.2.1向報紙學習73
5.2.2概念間垂直方向上的區隔735.2.3垂直方向上的靠近74
5.2.4垂直距離75
5.2.5垂直順序79
5.3橫向格式79
5.3.1水平方向上的區隔與靠近80
5.3.2水平對齊81
5.3.3縮進82
5.3.4空范圍84
5.4團隊規則84
5.5鮑勃大叔的格式規則85
第6章對象和數據結構876.1數據抽象87
6.2數據、對象的反對稱性89
6.3得墨忒耳律91
6.3.1火車失事91
6.3.2混雜92
6.3.3隱藏結構92
6.4數據傳送對象93
6.5小結946.6文獻94
第7章錯誤處理95
7.1使用異常而非返回碼96
7.2先寫Try-Catch-Finally語句97
7.3使用不可控異常98
7.4給出異常發生的環境說明99
7.5依調用者需要定義異常類99
7.6定義常規流程100
7.7別返回null值101
7.8別傳遞null值102
7.9小結1037.10 文獻104
第8章邊界105
8.1使用第三方代碼106
8.2瀏覽和學習邊界107
8.3學習log4j108
8.4學習性測試的好處不只是免費110
8.5使用尚不存在的代碼110
8.6整潔的邊界111
8.7文獻112
第9章單元測試113
9.1TDD三定律1149.2保持測試整潔115
9.3整潔的測試116
9.3.1面向特定領域的測試語言118
9.3.2雙重標准119
9.4每個測試一個斷言121
9.5F.I.R.S.T.122
9.6小結123
9.7文獻124
第10章類125
10.1類的組織126
10.2類應該短小126
10.2.1單一權責原則128
10.2.2內聚129
10.2.3保持內聚性就會得到許多短小的類130
10.3為了修改而組織136
10.4文獻139
第11章系統141
11.1如何建造一個城市142
11.2將系統的構造與使用分開142
11.2.1分解main143
11.2.2工廠143
11.2.3依賴注入144
11.3擴容145
11.4Java代理148
11.5純Java AOP框架150
11.6AspectJ的方面152
11.7測試驅動系統架構15311.8優化決策154
11.9明智使用添加了可論證價值的標准154
11.10 系統需要領域特定語言154
11.11 小結155
11.12 文獻155
第12章迭進157
12.1通過迭進設計達到整潔目的157
12.2簡單設計規則1:運行所有測試15812.3簡單設計規則2~4:重構158
12.4不可重復159
12.5表達力161
12.6盡可能少的類和方法162
12.7小結162
12.8文獻162
第13章並發編程163
13.1為什麼要並發16413.2挑戰165
13.3並發防禦原則166
13.3.1單一權責原則166
13.3.2推論:限制數據作用域166
13.3.3推論:使用數據復本167
13.3.4推論:線程應盡可能地獨立167
13.4了解Java庫167
13.5了解執行模型168
13.5.1生產者-消費者模型16913.5.2讀者-作者模型169
13.5.3宴席哲學家169
13.6警惕同步方法之間的依賴169
13.7保持同步區域微小170
13.8很難編寫正確的關閉代碼170
13.9測試線程代碼171
13.9.1將偽失敗看作可能的線程問題171
13.9.2先使非線程代碼可工作171
13.9.3編寫可插拔的線程代碼172
13.9.4編寫可調整的線程代碼172
13.9.5運行多於處理器數量的線程17213.9.6在不同平台上運行172
13.9.7裝置試錯代碼173
13.9.8硬編碼173
13.9.9自動化174
13.10小結175
13.11文獻175
第14章逐步改進176
14.1Args的實現17714.2Args:草稿183
14.2.1所以我暫停了195
14.2.2漸進195
14.3字元串參數197
14.4小結234
第15章JUnit內幕235
15.1JUnit框架236
15.2小結249第16章重構SerialDate251
16.1首先,讓它能工作252
16.2讓它做對254
16.3小結266
16.4文獻267
第17章味道與啟發269
17.1注釋270
17.2環境271
17.3函數271
17.4一般性問題272
17.5Java28817.6名稱291
17.7測試294
17.8小結295
17.9文獻296
附錄A並發編程II297
A.1客戶端/伺服器的例子297
A.1.1伺服器297
A.1.2添加線程代碼298A.1.3觀察伺服器端299
A.1.4小結301
A.2執行的可能路徑301
A.2.1路徑數量302
A.2.2深入挖掘303
A.2.3小結305
A.3了解類庫305
A.3.1Executor框架305
A.3.2非鎖定的解決方案306
A.3.3非線程安全類307
A.4方法之間的依賴可能破壞並發代碼308A.4.1容忍錯誤309
A.4.2基於客戶代碼的鎖定309
A.4.3基於服務端的鎖定311
A.5提升吞吐量312
A.5.1單線程條件下的吞吐量313
A.5.2多線程條件下的吞吐量313
A.6死鎖314
A.6.1互斥315
A.6.2上鎖及等待315
A.6.3無搶先機制315
A.6.4循環等待315
A.6.5不互斥316
A.6.6不上鎖及等待316
A.6.7滿足搶先機制317
A.6.8不做循環等待317
A.7測試多線程代碼317
A.8測試線程代碼的工具支持320
A.9小結320
A.10 教程:完整代碼範例321
A.10.1客戶端/伺服器非線程代碼321
A.10.2使用線程的客戶端/伺服器代碼324
附錄Borg.jfree.date.SerialDate327
結束語389
5. 深入理解計算機系統的目錄2
第1章計算機系統漫遊1
1.1信息就是位+上下文1
1.2程序被其他程序翻譯成不同的格式3
1.3了解編譯系統如何工作是大有益處的4
1.4處理器讀並解釋存儲在存儲器中的指令5
1.4.1系統的硬體組成5
1.4.2運行hello程序7
1.5高速緩存至關重要7
1.6存儲設備形成層次結構9
1.7操作系統管理硬體10
1.7.1進程11
1.7.2線程12
1.7.3虛擬存儲器12
1.7.4文件13
1.8系統之間利用網路通信13
1.9重要主題15
1.9.1並發和並行15
1.9.2計算機系統中抽象的重要性17
1.10小結17
參考文獻說明18
.第一部分程序結構和執行
第2章信息的表示和處理20
2.1信息存儲22
2.1.1十六進製表示法22
2.1.2字25
2.1.3數據大小25
2.1.4定址和位元組順序26
2.1.5表示字元串31
2.1.6表示代碼31
2.1.7布爾代數簡介32
2.1.8c語言中的位級運算34
2.1.9c語言中的邏輯運算36
2.1.10c語言中的移位運算36
2.2整數表示38
2.2.1整型數據類型38
2.2.2無符號數的編碼39
2.2.3補碼編碼40
2.2.4有符號數和無符號數之間的轉換44
2.2.5c語言中的有符號數與無符號數47
2.2.6擴展一個數字的位表示49
2.2.7截斷數字51
2.2.8關於有符號數與無符號數的建議52
2.3整數運算54
2.3.1無符號加法54
2.3.2補碼加法57
2.3.3補碼的非59
2.3.4無符號乘法60
2.3.5補碼乘法60
2.3.6乘以常數63
2.3.7除以2的冪64
2.3.8關於整數運算的最後思考67
2.4浮點數67
2.4.1二進制小數68
2.4.2ieee浮點表示70
2.4.3數字示例71
2.4.4舍入74
2.4.5浮點運算76
2.4.6c語言中的浮點數77
2.5小結79
參考文獻說明80
家庭作業80
練習題答案90
第3章程序的機器級表示102
3.1歷史觀點103
3.2程序編碼105
3.2.1機器級代碼106
3.2.2代碼示例107
3.2.3關於格式的註解109
3.3數據格式111
3.4訪問信息112
3.4.1操作數指示符112
3.4.2數據傳送指令114
3.4.3數據傳送示例116
3.5算術和邏輯操作118
3.5.1載入有效地址118
3.5.2一元操作和二元操作119
3.5.3移位操作120
3.5.4討論120
3.5.5特殊的算術操作122
3.6控制123
3.6.1條件碼124
3.6.2訪問條件碼125
3.6.3跳轉指令及其編碼127
3.6.4翻譯條件分支129
3.6.5循環132
3.6.6條件傳送指令139
3.6.7switch語句144
3.7過程149
3.7.1棧幀結構149
3.7.2轉移控制150
3.7.3寄存器使用慣例151
3.7.4過程示例152
3.7.5遞歸過程156
3.8數組分配和訪問158
3.8.1基本原則158
3.8.2指針運算159
3.8.3嵌套的數組159
3.8.4定長數組161
3.8.5變長數組163
3.9異質的數據結構164
3.9.1結構164
3.9.2聯合167
3.9.3數據對齊170
3.10綜合:理解指針172
3.11應用:使用gdb調試器174
3.12存儲器的越界引用和緩沖區溢出175
3.13x86-64:將ia32擴展到64位183
3.13.1x86-64的歷史和動因184
3.13.2x86-64簡介185
3.13.3訪問信息187
3.13.4控制192
3.13.5數據結構200
3.13.6關於x86-64的總結性評論200
3.14浮點程序的機器級表示201
3.15小結201
參考文獻說明202
家庭作業202
練習題答案212
第4章處理器體系結構230
4.1y86指令集體系結構231
4.1.1程序員可見的狀態231
4.1.2y86指令232
4.1.3指令編碼233
4.1.4y86異常237
4.1.5y86程序237
4.1.6一些y86指令的詳情241
4.2邏輯設計和硬體控制語言hcl242
4.2.1邏輯門243
4.2.2組合電路和hcl布爾表達式243
4.2.3字級的組合電路和hcl整數表達式245
4.2.4集合關系248
4.2.5存儲器和時鍾248
4.3y86的順序實現250
4.3.1將處理組織成階段250
4.3.2seq硬體結構258
4.3.3seq的時序259
4.3.4seq階段的實現262
4.4流水線的通用原理267
4.4.1計算流水線268
4.4.2流水線操作的詳細說明269
4.4.3流水線的局限性271
4.4.4帶反饋的流水線系統272
4.5y86的流水線實現273
4.5.1seq+:重新安排計算階段273
4.5.2插入流水線寄存器276
4.5.3對信號進行重新排列和標號277
4.5.4預測下一個pc279
4.5.5流水線冒險280
4.5.6用暫停來避免數據冒險283
4.5.7用轉發來避免數據冒險285
4.5.8載入/使用數據冒險288
4.5.9異常處理289
4.5.10pipe各階段的實現291
4.5.11流水線控制邏輯297
4.5.12性能分析305
4.5.13未完成的工作306
4.6小結308
參考文獻說明309
家庭作業309
練習題答案314
第5章優化程序性能324
5.1優化編譯器的能力和局限性325
5.2表示程序性能328
5.3程序示例330
5.4消除循環的低效率332
5.5減少過程調用336
5.6消除不必要的存儲器引用336
5.7理解現代處理器340
5.7.1整體操作340
5.7.2功能單元的性能343
5.7.3處理器操作的抽象模型344
5.8循環展開348
5.9提高並行性351
5.9.1多個累積變數351
5.9.2重新結合變換354
5.10優化合並代碼的結果小結358
5.11一些限制因素359
5.11.1寄存器溢出359
5.11.2分支預測和預測錯誤處罰360
5.12理解存儲器性能363
5.12.1載入的性能363
5.12.2存儲的性能364
5.13應用:性能提高技術369
5.14確認和消除性能瓶頸369
5.14.1程序剖析370
5.14.2使用剖析程序來指導優化371
5.14.3amdahl定律374
5.15小結375
參考文獻說明375
家庭作業376
練習題答案378
第6章存儲器層次結構382
6.1 存儲技術382
6.1.1隨機訪問存儲器383
6.1.2磁碟存儲389
6.1.3固態硬碟398
6.1.4存儲技術趨勢399
6.2局部性401
6.2.1對程序數據引用的局部性402
6.2.2取指令的局部性403
6.2.3局部性小結403
6.3存儲器層次結構405
6.3.1存儲器層次結構中的緩存406
6.3.2存儲器層次結構概念小結408
6.4高速緩存存儲器408
6.4.1通用的高速緩存存儲器結構409
6.4.2直接映射高速緩存410
6.4.3組相聯高速緩存416
6.4.4全相聯高速緩存418
6.4.5有關寫的問題420
6.4.6一個真實的高速緩存層次結構的解剖421
6.4.7高速緩存參數的性能影響422
6.5編寫高速緩存友好的代碼423
6.6綜合:高速緩存對程序性能的影響426
6.6.1存儲器山426
6.6.2重新排列循環以提高空間局部性430
6.6.3在程序中利用局部性433
6.7小結433
參考文獻說明434
家庭作業434
練習題答案442
第二部分在系統上運行程序
第7章鏈接448
7.1編譯器驅動程序449
7.2靜態鏈接450
7.3目標文件450
7.4可重定位目標文件451
7.5符號和符號表452
7.6符號解析454
7.6.1鏈接器如何解析多重定義的全局符號455
7.6.2與靜態庫鏈接457
7.6.3鏈接器如何使用靜態庫來解析引用460
7.7重定位461
7.7.1重定位條目461
7.7.2重定位符號引用462
7.8可執行目標文件465
7.9載入可執行目標文件466
7.10動態鏈接共享庫467
7.11從應用程序中載入和鏈接共享庫468
7.12與位置無關的代碼(pic)471
7.13處理目標文件的工具473
7.14小結473
參考文獻說明474
家庭作業474
練習題答案479
第8章異常控制流480
8.1異常481
8.1.1異常處理481
8.1.2異常的類別482
8.1.3linux/ia32系統中的異常484
8.2進程487
8.2.1邏輯控制流487
8.2.2並發流487
8.2.3私有地址空間488
8.2.4用戶模式和內核模式488
8.2.5上下文切換489
8.3系統調用錯誤處理491
8.4進程式控制制492
8.4.1獲取進程id492
8.4.2創建和終止進程492
8.4.3回收子進程495
8.4.4讓進程休眠499
8.4.5載入並運行程序500
8.4.6利用fork和execve運行程序502
8.5信號504
8.5.1信號術語505
8.5.2發送信號506
8.5.3接收信號509
8.5.4信號處理問題511
8.5.5可移植的信號處理516
8.5.6顯式地阻塞和取消阻塞信號517
8.5.7同步流以避免討厭的並發錯誤517
8.6非本地跳轉521
8.7操作進程的工具524
8.8小結524
參考文獻說明525
家庭作業525
練習題答案530
第9章虛擬存儲器534
9.1物理和虛擬定址535
9.2地址空間535
9.3虛擬存儲器作為緩存的工具536
9.3.1dram緩存的組織結構537
9.3.2頁表537
9.3.3頁命中538
9.3.4缺頁538
9.3.5分配頁面539
9.3.6又是局部性救了我們539
9.4虛擬存儲器作為存儲器管理的工具540
9.5虛擬存儲器作為存儲器保護的工具541
9.6地址翻譯542
9.6.1結合高速緩存和虛擬存儲器544
9.6.2利用tlb加速地址翻譯545
9.6.3多級頁表546
9.6.4綜合:端到端的地址翻譯547
9.7案例研究:intel core i7/linux存儲器系統550
9.7.1core i7地址翻譯551
9.7.2linux虛擬存儲器系統554
9.8存儲器映射556
9.8.1再看共享對象557
9.8.2再看fork函數558
9.8.3再看execve函數559
9.8.4使用mmap函數的用戶級存儲器映射559
9.9動態存儲器分配561
9.9.1malloc和free函數561
9.9.2為什麼要使用動態存儲器分配563
9.9.3分配器的要求和目標564
9.9.4碎片565
9.9.5實現問題565
9.9.6隱式空閑鏈表565
9.9.7放置已分配的塊567
9.9.8分割空閑塊567
9.9.9獲取額外的堆存儲器567
9.9.10合並空閑塊568
9.9.11帶邊界標記的合並568
9.9.12綜合:實現一個簡單的分配器570
9.9.13顯式空閑鏈表576
9.9.14分離的空閑鏈表576
9.10垃圾收集578
9.10.1垃圾收集器的基本知識579
9.10.2mark&sweep垃圾收集器580
9.10.3c程序的保守mark&sweep580
9.11c程序中常見的與存儲器有關的錯誤581
9.11.1間接引用壞指針582
9.11.2讀未初始化的存儲器582
9.11.3允許棧緩沖區溢出582
9.11.4假設指針和它們指向的對象是相同大小的583
9.11.5造成錯位錯誤583
9.11.6引用指針,而不是它所指向的對象583
9.11.7誤解指針運算584
9.11.8引用不存在的變數584
9.11.9引用空閑堆塊中的數據584
9.11.10引起存儲器泄漏585
9.12小結585
參考文獻說明586
家庭作業586
練習題答案589
第三部分程序間的交互和通信
第10章系統級i/o596
10.1unix i/o596
10.2打開和關閉文件597
10.3讀和寫文件598
10.4用rio包健壯地讀寫599
10.4.1rio的無緩沖的輸入輸出函數600
10.4.2rio的帶緩沖的輸入函數600
10.5讀取文件元數據604
10.6共享文件606
10.7i/o重定向608
10.8標准i/o609
10.9綜合:我該使用哪些i/o函數610
10.10小結611
參考文獻說明612
家庭作業612
練習題答案612
第11章網路編程614
11.1客戶端-伺服器編程模型614
11.2網路615
11.3全球ip網際網路618
11.3.1ip地址619
11.3.2網際網路域名620
11.3.3網際網路連接623
11.4套接字介面625
11.4.1套接字地址結構625
11.4.2socket函數626
11.4.3connect函數626
11.4.4open_clientfd函數627
11.4.5bind函數628
11.4.6listen函數628
11.4.7open_listenfd函數628
11.4.8accept函數629
11.4.9echo客戶端和伺服器的示例630
11.5web伺服器633
11.5.1web基礎633
11.5.2web內容633
11.5.3http事務634
11.5.4服務動態內容636
11.6綜合:tiny web伺服器639
11.7小結645
參考文獻說明645
家庭作業646
練習題答案646
第12章並發編程648
12.1基於進程的並發編程649
12.1.1基於進程的並發伺服器649
12.1.2 關於進程的優劣651
12.2基於i/o多路復用的並發編程651
12.2.1基於i/o多路復用的並發事件驅動伺服器653
12.2.2i/o多路復用技術的優劣657
12.3基於線程的並發編程657
12.3.1線程執行模型657
12.3.2posix線程658
12.3.3創建線程659
12.3.4終止線程659
12.3.5回收已終止線程的資源660
12.3.6分離線程660
12.3.7初始化線程660
12.3.8一個基於線程的並發伺服器661
12.4多線程程序中的共享變數662
12.4.1線程存儲器模型663
12.4.2將變數映射到存儲器663
12.4.3共享變數664
12.5用信號量同步線程664
12.5.1進度圖667
12.5.2信號量668
12.5.3使用信號量來實現互斥669
12.5.4利用信號量來調度共享資源670
12.5.5綜合:基於預線程化的並發伺服器674
12.6使用線程提高並行性676
12.7其他並發問題680
12.7.1線程安全680
12.7.2可重入性682
12.7.3在線程化的程序中使用已存在的庫函數682
12.7.4競爭683
12.7.5死鎖685
12.8小結687
參考文獻說明687
家庭作業688
練習題答案691
附錄a錯誤處理694
a.1unix系統中的錯誤處理694
a.2 錯誤處理包裝函數696
參考文獻698
6. java編程思想關於並發的那章怎麼樣
不知道你的是第幾版。前面幾章講面向對象的最重要,是JAVA基本的思想和機制,好像一直到容器那章之前吧。
中間的講API的可以選擇性的看看,新手的話還是多學學例子,對於快速上手比較好。不過能邊實踐邊看的話效果最好,因為API使用這東西很多都靠經驗積累。
後面的講異常和多線程的也比較重要,屬於JAVA語言比較精華的部分。
建議前面幾章一定要吃透背熟,看後面的例子就不會有什麼問題了。異常和多線程精讀。
接下來有一定實踐經驗後去讀《effective java》第二版,提升境界之作
再然後去讀java虛擬機的書,據說這本不錯http://book.360buy.com/10697182.html,我買了還沒怎麼看。還有這本《JAVA深度歷險》http://book.douban.com/subject/1119896/,讀過一次,很有意思
java學習我推薦以下幾本:
Head First Java : 這本才是最適合入門的,也是整個Head First系列奠基之作。
Java Programming Language : 恐怕沒有人比java的作者Gosling更有資格詮釋java背後的設計哲學和使用思想了,進階之選。
Effective Java: 這本是真正的經典,以小見大,其中編程相關的內容已經超越了單一語言本身,無論是否java使用者都值得一看
Core Java: 在以前這本可以做參考手冊,現在不好說。
從總的趨勢來看,Java社區在逐漸轉向scala或clojure,推薦繼續學習這兩門語言,並比較他們與java的優越之處。
7. Linux/UNIX網路編程的目錄
序
前言
第1章TCP/IP簡介
1.1概述
l.1.1基本的C/S服務模型
1.1.2OSI模型和TCP/IP四層結構
1.2IP協議介紹
1.2.lIP數據報的格式
1.2.2IP地址
1.2.3子網掩碼(subnetmask)
1.3TCP協議介紹
1.3.1TCP連接的建立與終止
1.3.2TCP狀態轉換圖
1.4LJDP協議
1.5埠號
1.6本章小結
1.7實戰檢驗
理論鞏固
第2章套接字編程簡介
2.1套接字基礎
2.2套接字的類型
2.3套接字地址結構
2.3.1I.Pv4套接字地址結構
2.3.2IPv6套接字地址結構
2.3.3兩種套接字地址結構的比較
2.3.4通用套接字地址結構
2.4套接字基本函數
2.4.1位元組排序函數
2.4.2位元組操縱函數
2.4.3IP地址轉換函數
.2.4.4isfdtype()函數
2.5值.結果參數
2.6本章小結
2.7實戰檢驗
理論鞏固
上機實戰
第3章基本l'CP套接字編程
3,1TCP套接字編程
3.1.1socket()函數
3.1.2connect()函數
3.1.3bind()函數
3.1.4listen()函數
3.1.5accept()函數
3.1.6數據傳輸函數
3.1.7close()函數
3.2TCP套接字編程實例
3.3伺服器的3種異常情況
3.3.1伺服器主機崩潰
3.3.2伺服器主機崩潰後重啟
3.3.3伺服器主機關閉
3.4本章小結
3.5實戰檢驗+
理論鞏固
上機實戰
第4章基本UDP套介面編程
4.1UDP套接字編程
4.1.1recvfrom()函數
4.1.2sendto函數
4.2UDP套接字編程實例
4.3UDP中對數據報的各項處理
4.3.1數據報的丟失
4.3.2驗證收到的響應
4.3.3伺服器進程未運行
4.4connect函數用於
4.5本章小結
4.6實戰檢驗
理論鞏固
上機實戰
第5章並發伺服器
5.1伺服器的分類
5.2多進程並發伺服器
5.2.1進程基礎
5.2.2進程創建
5.2.3進程終止L
5.2.4多進程並發伺服器
5.2.5多進程並發伺服器實例
5.3多線程伺服器
5.3.1線程基礎
5.3.2線程基礎函數
5.3.3給新線程傳遞參數
5.3.4多線程並發伺服器實例
5.3.5線程安全函數
5.3.6線程安全實例
5.3.7用函數參變數實現線程安全性
5.4本章小結
5.5實戰檢驗
理論鞏固
上機實戰
第6章名字與地址轉換編程;
6.1概述.
6.2域名系統.
6.3gethostbyname()函數
6.4RES—USE—INET6解析器選項
6.5gethostbyname2函數對IPv6的支持
6.6gethostbyaddr()函數
6.7uname()函數
6.8gethostname函數
6.9getservbyname和getservbyport函數
6.10getaddrinfo、gai_strerror.和host—serv函數
6.11freeaddrinfo函數
6.12使用getaddrinfo的了CP和IJD
6.13getnameinfo函數
6.14gethostbyaddr實例
6.15本章小結
6.16實戰檢驗
理論鞏固
上機實戰
第7章IPv4和IPv6編程
7.1IPv4客戶與IPv6伺服器
7.2IPv6客戶與IPv4伺服器
7.3IPv6一ADDRFORM套介面選頊
7.4IPv6地址測試宏
7.5源代碼的可移植性
7.6本章小結
7.7實戰檢驗
理論鞏固
上機實戰
第8章守護進程和inetd超級伺服器
8.1守護進程的原理
8.1.1啟動守護進程
8.1.2輸出守護進程消息
8.1.3syslog函數
8.1.4創建守護進程
8.1.5以守護進程方式運行的時間伺服器
8.2inetd的工作原理
8.2.1概念
8.2.2工作流程
8.2.3inetd處理並發
8.3本章小結
8.4實戰檢驗
理論鞏固
上機實戰
第9章I/0編程
9.1I/O模型
9.2select函數
9.3shutdown函數
9.4poll函數
9.5使用select函數的TCP例子
9.6高級的I/O編程
9.6.1recv和send函數
9.6.2recvmsg和sendmsg函數
9.7非阻塞connect
9.8ioctl函數
9.8.1套介面操作
9.8.2文件操作
9.8.3介面配置
9.8.4介面操作
9.8.5ARP操作
9.8.6路由表操作
9.9本章小結
9.10實戰檢驗
理論鞏固
上機實戰
第10章廣播與多播編程
10.1廣播的概念
10.1.1廣播的原理
10.1.2廣播的示例
10.2多播概念
10.2.1多播與廣播的比較
10.2.2多播套介面選項
10.2.3多播的實例
10.3本章小結
10.4理論與鞏固
實戰檢驗
上機實戰
第1P章路由套介面編程
11.1概念和數據鏈路套介面地址結構
1].2sysctl操作
11.3介面名和索引函數
]1.4本章小結
11.5實戰檢驗
理論與鞏固
上機實戰
第72章信號量編程
12.1信號的概念
12.2信號的概念及常見信號介紹
12.2.1signal函數
12.2.2處理SIGCHLD信號
12.2.3wait和waitpid函數
12.2.4kill和raise函數
12.2.5SIGPIPE信號
12.2.6alarm和pause函數
12.2.7sigprocmask函數
12.2.8sigpending函數
12.2.9sigaction函數
12.2.10sigsetjmp和siglongjmp函數
12.2.l1sigsuspend函數
12.2.12abort函數
12.2.13system函數
12.2.14sleep函數
12.3例子:使用SIGIO的UDP回射伺服器程序
12.4,本章小結
12.5實戰檢驗
理論鞏固
上機實戰
第P3章原始套介面與數據鏈路訪問編程
13.1原始套介面創建
13.2原始套介面輸出
]3.3原始套介面輸入
13.4原始套接字編程實例
13.4.1實例l:拒絕服務攻擊
13.4.2實例2:ICMP包的構建、發送和接收
13.4.3實例3:ping程序
13.5數據鏈路層訪問
13.5.1BPF:BSD分組過濾器
13.5.2數據鏈路提供者DLPI
13.5.3Linux的SOCKPACKET20
13.5.4分組捕獲函數庫libpca
13.5.5libpcap的庫函數
13.5.6數據鏈路層訪問實例
13.6本章小結
13.7理論與鞏固
實戰檢驗
上機實戰
第P4章實驗指導
14.1Socket基本編程
14.2伺服器與單客戶的連接處理
14.3多進程伺服器模板
14.4多線程編寫模板
14.5線程專用數據TSD實現模板
參考文獻
8. 深入理解計算機系統的目錄1
1 A Tour of Computer Systems
1.1 Information is Bits + Context
1.2 Programs Are Translated by Other Programs into Different Forms
1.3 It Pays to Understand How Compilation Systems Work
1.4 Processors Read and Interpret Instructions Stored in Memory
1.5 Caches Matter
1.6 Storage Devices Form a Hierarchy
1.7 The Operating System Manages the Hardware
1.8 Systems CommunicateWith Other Systems Using Networks
1.9 The Next Step
1.10 Summary
Bibliographics Notes
Part I Program Structure and Execution
2 Representing and Manipulating Information
2.1 Information Storage
2.2 Integer Representations
2.3 Integer Arithmetic
2.4 Floating Point
2.5 Summary
Bibliographic Notes
Homework Problems
Solution to Practice Problems
3 Machine-Level Representation of Programs
3.1 A Historical Perspective
3.2 Program Encodings
3.3 Data Formats
3.4 Accessing Information
3.5 Arithmetic and Logical Operations
3.6 Control
3.7 Proceres
3.8 Array Allocation and Access
3.9 Heterogeneous Data Structures
3.10 Alignment
3.11 Putting it Together: Understanding Pointers
3.12 Life in the RealWorld: Using the GDB Debugger
3.13 Out-of-Bounds Memory References and Buffer Over
3.14 *Floating-Point Code
3.15 *Embedding Assembly Code in C Programs
3.16 Summary
Bibliographic Notes
Homework Problems
Solutions to Practice Problems
4 Processor Architecture
5 Optimizing Program Performance
6 The Memory Hierarchy
Part Ⅱ Running Programs on a System
7 Linking
8 Exceptional Control Flow
9 Measuring Program Execution Time
10 Virtual Memory
Part Ⅲ Interaction and Communication Between Programs
11 System-Level I/O
12 Network Programming
13 Concurrent Programming
A HCL Descriptions of Processor Control Logic
B Error Handling
Bibliography
Index
目錄:
第1章 計算機系統漫遊
1.1 信息就是比特+上下文
1.2 程序被其他程序翻譯成不同的格式
1.3 了解編譯系統如何工作是大有益處的
1.4 處理器讀並解釋儲存在存儲器中的指令
1.4.1 系統的硬體組成
1.4.2 執行hello程序
1.5 高速緩存
1.6 形成層次結構的存儲設備
1.7 操作系統管理硬體
1.7.1 進程
1.7.2 線程
1.7.3 虛擬存儲器
1.7.4 文件
1.8 利用網路系統和其他系統通信
1.9 下一步
1.10 小結
參考文獻說明
第2章 信息的表示和處理
2.1 信息存儲
2.2 整數表示
2.3 整數運算
2.4 浮點
2.5 小結
參考文獻說明
家庭作業
練習題答案
第3章 程序的機器級表示
3.1 歷史觀點
3.2 程序編碼
3.3 數據格式
3.4 訪問信息
3.5 算術和邏輯操作
3.6 控制
3.7 過程
3.8 數組分配和訪問
3.9 異類的數據結構
3.10 對齊(alignment)
3.11 綜合:理解指針
3.12 現實生活:使用GDB調試器
3.13 存儲器的越界引用和緩沖區溢出
3.14 *浮點代碼
3.15 *在C程序中嵌入匯編代碼
3.16 小結
第4章 處理器體系結構
4.1 Y86指令集體系結構
4.2 邏輯設計和硬體控制語言HCL 271
4.3 Y86的順序(sequential)實現
4.4 流水線的通用原理
4.5 Y86的流水線實現
4.6小結
第5章 優化程序性能
5.1 優化編譯器的能力和局限性
5.2 表示程序性能
5.3 程序示例
5.4 消除循環的低效率
5.5 減少過程調用
5.6 消除不必要的存儲器引用
5.7 理解現代處理器
5.8 降低循環開銷
5.9 轉換到指針代碼
5.10 提高並行性
5.11 綜合:優化合並代碼的效果小結
5.12 分支預測和預測錯誤處罰
5.13 理解存儲器性能
5.14 現實生活:性能提高技術
5.15 確認和消除性能瓶頸
5.16 小結
第6章 存儲器層次結構
6.1 存儲技術
6.2 局部性
6.3 存儲器層次結構
6.4 高速緩沖存儲器
6.5 編寫高速緩存友好的代碼
6.6 綜合:高速緩存對程序性能的影響
6.7 綜合:利用你程序中的局部性
6.8 小結
參考文獻說明
家庭作業
練習題答案
第7章鏈接
7.1編譯器驅動程序
7.2靜態鏈接
7.3目標文件
7.4可重定位目標文件
7.5符號和符號表
7.6符號解析
7.7重定
7.8可執行目標文件
7.9載入可執行目標文件
7.10動態鏈接共享庫
7.11從應用程序中載入和鏈接共享庫
7.12*與位置無關的代碼(PIC)
7.13處理目標文件的工具
7.14小結
第8章 異常控制流
8.1異常
8.2進程
8.3系統調用和錯誤處理
8.4進程式控制制
8.5信號
8.6非本地跳轉
8.7操作進程的工具
8.8小結
第9章 測量程序執行時間
9.1計算機系統上的時間流
9.2通過間隔計數(interval counting)來測量時間
9.3周期計數器
9.4用周期計數器來測量程序執行時間
9.5於gettimeofday函數的測量
9.6綜合:一個實驗協議
9.7展望未來
9.8現實生活:K次最優測量方法
9.9得到的經驗教訓
9.10小結
第10章 虛擬存儲器
10.1物理和虛擬定址
10.2地址空間
10.3VM作為緩存的工具
10.4 VM作為存儲器管理的工具
10.5 VM作為存儲器保護的工具
10.6 地址翻譯
10.7 案例研究:Pentium/Linux存儲器系統
10.8 存儲器映射
10.9 動態存儲器分配
10.10 垃圾收集
10.11 C程序中常見的與存儲器有關的錯誤
10.12扼要重述一些有關虛擬存儲器的關鍵概念
10.13 小結
第11章 系統級I/O
11.1 Unix I/O
11.2 打開和關閉文件
11.3 讀和寫文件
11.4 用RIO包進行健壯地讀和寫
11.5 讀取文件元數據
11.6 共享文件
11.7 I/O重定向
11.8 標准I/O
11.9 綜合:我該使用哪些I/O函數?
11.10 小結
第12章 網路編程
12.1 客戶端-伺服器編程模型
12.2 網路
12.3 全球IP網際網路
12.4 套接字介面
12.5 Web伺服器
12.6 綜合:TINY Web伺服器
12.7 小結
第13章 並 發 編 程
13.1 基於進程的並發編程
13.2 基於I/O 多路復用的並發編程
13.3 基於線程的並發編程
13.4 多線程程序中的共享變數
13.5 用信號量同步線程
13.6 綜合:基於預線程化的並發伺服器
13.7 其他並發性問題
13.8 小結
參考文獻說明
家庭作業習題
練習題答案
附錄A 處理器控制邏輯的 HCL描述
A.1 HCL參考手冊
A.2 SEQ
A.3 SEQ+
A.4 PIPE
附錄B 錯 誤 處 理
B.1 Unix系統中的錯誤處理
B.2 錯誤處理包裝函數
B.3 csapp.h頭文件
B.4 csapp.c源文件
9. Java編程思想第3版的目錄
第1章 對象導論
1.1 抽象過程
1.2 每個對象都有一個介面
1.3 每個對象都提供服務
1.4 被隱藏的具體實現
1.5 復用具體實現
1.6 繼承:復用介面
1.7 伴隨多態的可互換對象
1.8 對象的創建、使用和生命期
1.8.1 集合與迭代器
1.8.2 單根繼承結構
1.8.3 向下轉型與模板/泛型
1.8.4 確保正確清理
1.9 異常處理:處理錯誤
1.10 並發性
1.11 持久性
1.12 Java與Internet
1.12.1 Web是什麼
1.12.2 客戶端編程
1.12.3 伺服器端編程
1.12.4 應用
1.13 Java為什麼成功
1.13.1 系統易於表達、易於理解
1.13.2 類庫的巨大影響力
1.13.3 錯誤處理
1.13.4 大型程序設計
1.14 Java與C++
1.15 總結
第2章 一切都是對象
2.1 用引用操縱對象
2.2 必須由你創建所有對象
2.2.1 存儲到什麼地方
2.2.2 特例:基本類型
2.2.3 Java中的數組
2.3 永遠不需要銷毀對象
2.3.1 作用域
2.3.2 對象的作用域
2.4 創建新的數據類型:類
2.5 方法、參數和返回值
2.6 構建一個Java程序
2.6.1 名字可見性
2.6.2 運用其他構件
2.6.3 static 關鍵字
2.7 你的第一個Java程序
2.8 注釋和嵌入式文檔
2.8.1 注釋文檔
2.8.2 語法
2.8.3 嵌入式HTML
2.8.4 一些標簽示例
2.8.5 文檔示例
2.9 編碼風格
2.10 總結
2.11 練習
第3章 控製程序流程
3.1 使用Java操作符
3.1.1 優先順序
3.1.2 賦值
3.1.3 算術操作符
3.1.4 自動遞增和遞減
3.1.5 關系操作符
3.1.6 邏輯操作符
3.1.7 按位操作符
3.1.8 移位操作符
3.1.9 三元操作符 if-else
3.1.10 逗號操作符
3.1.11 字元串操作符+
3.1.12 使用操作符時常犯的錯誤
3.1.13 類型轉換操作符
3.1.14 Java沒有「sizeof」
3.1.15 再論優先順序
3.1.16 操作符小結
3.2 執行流程式控制制
3.2.1 true和false
3.2.2 if-else
3.2.3 return
3.2.4 迭代
3.2.5 do-while
3.2.6 for
3.2.7 break和 continue
3.2.8 switch
3.3 總結
3.4 練習
第4章 初始化與清理
4.1 用構造器確保初始化
4.2 方法重載
4.2.1 區分重載方法
4.2.2 涉及基本類型的重載
4.2.3 以返回值區分重載方法
4.2.4 預設構造器
4.2.5 this關鍵字
4.3 清理:終結處理和垃圾回收
4.3.1 finalize()的用途何在
4.3.2 你必須實施清理
4.3.3 終結條件
4.3.4 垃圾回收器如何工作
4.4 成員初始化
4.4.1 指定初始化
4.4.2 構造器初始化
4.5 數組初始化
4.6 總結
4.7 練習
第5章 隱藏具體實現
5.1 包:程序庫單元
5.1.1 創建獨一無二的包名
5.1.2 定製工具庫
5.1.3 用 import改變行為
5.1.4 對使用包的忠告
5.2 Java訪問許可權修飾詞
5.2.1 包訪問許可權
5.2.2 public:介面訪問許可權
5.2.3 private: 你無法訪問
5.2.4 protected:繼承訪問許可權
5.3 介面和實現
5.4 類的訪問許可權
5.5 總結
5.6 練習
第6章 復用類
6.1 組合語法
6.2 繼承語法
6.3 結合使用組合和繼承
6.3.1 確保正確清理
6.3.2 名稱屏蔽
6.4 在組合與繼承之間選擇
6.5 protected關鍵字
6.6 增量開發
6.7 向上轉型
6.8 final關鍵字
6.8.1 final 數據
6.8.2 final 方法
6.8.3 final 類
6.8.4 有關final的忠告
6.9 初始化及類的載入
6.10 總結
6.11 練習
第7章 多態
7.1 再論向上轉型
7.2 轉機
7.2.1 方法調用綁定
7.2.2 產生正確的行為
7.2.3 可擴展性
7.2.4 缺陷:「覆蓋」私有方法
7.3 抽象類和抽象方法
7.4 構造器和多態
7.4.1 構造器的調用順序
7.4.2 繼承與清理
7.4.3 構造器內部的多態方法的行為
7.5 用繼承進行設計
7.5.1 純繼承與擴展
7.5.2 向下轉型與運行時類型識別
7.6 總結
7.7 練習
第8章 介面與內部類
……
第9章 通過異常處理錯誤
第10章 類型檢查
第11章 對象的集合
第12章 Java I/O系統
第13章 並發
第14章 創建窗口與applet程序
第15章 發現問題
第16章 分析與設計
附錄A 對象的傳遞與返回
附錄B Java編程指南
附錄C 補充材料
附錄D 資源
索引