編輯推薦
在軟考中級資格中,報考熱門的,也是在校學生關注的是網絡工程師和軟件設計師。
在軟考初級資格中,報考熱門的,也是在校本科生關注的是網絡管理員和程序員。
考生一旦通過考試,便有應聘大企業的敲門金磚。
好消息是這四個模塊的指定教材,從第1版到現在的第4版曆經10年,終於麵市瞭。
更貼近考點,更有利於考生掌握知識點的第4版齣版後,相信您會有量級的提高。
內容簡介
《程序員教程(第4版)》作為初級職稱的軟考指定教材,具有比較專業的指導意義。本書根據《程序員考試大綱》的重點內容,闡述瞭共12章的內容,考生在學習教材內容的同時,還須對照考試大綱,認真學習和復習大綱的知識點。
《程序員教程(第4版)》是在《程序員考試大綱》的指導下,對《程序員教程(第三版)(修訂版)》進行再編後完成的。
《程序員教程(第4版)》適閤參加相關考試的考生和大學在校生作為教材。
內頁插圖
目錄
第1章 計算機係統基礎知識 1
1.1 計算機係統的基本組成 1
1.2 數據的錶示及運算 3
1.2.1 計算機中數據的錶示 3
1.2.2 校驗碼 12
1.2.3 邏輯代數及邏輯運算 16
1.2.4 機器數的運算 18
1.3 計算機的基本組成及工作原理 21
1.3.1 總綫的基本概念 22
1.3.2 中央處理單元 24
1.3.3 存儲係統 28
1.3.4 輸入/輸齣技術 35
1.4 指令係統簡介 38
第2章 操作係統基礎知識 44
2.1 操作係統概述 44
2.2 處理機管理 47
2.2.1 基本概念 47
2.2.2 進程控製 50
2.2.3 進程通信 50
2.2.4 進程調度 55
2.2.5 死鎖 56
2.2.6 綫程 58
2.3 存儲管理 58
2.3.1 基本概念 59
2.3.2 存儲管理方案 60
2.3.3 分頁存儲管理 61
2.3.4 分段存儲管理 63
2.3.5 虛擬存儲管理 64
2.4 設備管理 67
2.4.1 設備管理概述 67
2.4.2 設備管理技術 69
2.4.3 磁盤調度 71
2.5 文件管理 72
2.5.1 基本概念 72
2.5.2 文件的結構和組織 73
2.5.3 文件目錄 75
2.5.4 存取方法、存取控製 76
2.5.5 文件的使用 77
2.5.6 文件的共享和保護 78
2.5.7 係統的安全與可靠性 79
2.6 作業管理 80
2.6.1 基本概念 81
2.6.2 作業調度 82
2.6.3 人機界麵 85
第3章 數據庫基礎知識 87
3.1 基本概念 87
3.1.1 數據庫係統 87
3.1.2 數據庫管理技術的發展 88
3.1.3 大數據 90
3.2 數據模型 93
3.2.1 基本概念 93
3.2.2 數據模型的三要素 94
3.2.3 E-R模型 94
3.2.4 基本的數據模型 98
3.3 DBMS的功能和特徵 101
3.3.1 DBMS的功能 101
3.3.2 DBMS的特徵與分類 102
3.4 數據庫模式 104
3.4.1 模式 104
3.4.2 三級模式兩級映像 105
3.5 關係數據庫與關係運算 106
3.5.1 關係數據庫的基本概念 106
3.5.2 關係數據庫模式 109
3.5.3 完整性約束 109
3.5.4 關係代數運算 110
3.6 關係數據庫SQL語言簡介 113
3.6.1 SQL概述 114
3.6.2 SQL數據定義 115
3.6.3 SQL數據查詢 119
3.6.4 SQL數據更新 127
3.6.5 SQL的訪問控製 129
3.6.6 嵌入式SQL 130
3.7 數據庫設計 131
第4章 多媒體基礎知識 134
4.1 多媒體的基本概念 134
4.1.1 媒體的分類和特徵 134
4.1.2 多媒體計算機係統 135
4.2 音頻 140
4.2.1 數字聲音基礎 140
4.2.2 聲音文件格式 145
4.3 圖形和圖像 146
4.3.1 圖像的基礎知識 146
4.3.2 圖形與圖像信息的錶示和獲取 148
4.3.3 圖形圖像編碼 151
4.4 動畫和視頻 154
4.4.1 動畫的基本概念 154
4.4.2 模擬視頻和數字視頻 156
4.4.3 視頻文件格式 160
4.5 網絡多媒體 161
4.5.1 超文本與超媒體 161
4.5.2 流媒體的基本概念 162
第5章 網絡基礎知識 164
5.1 計算機網絡概述 164
5.1.1 計算機網絡的組成 164
5.1.2 計算機網絡的分類 165
5.2 計算機網絡硬件 168
5.2.1 計算機網絡互連設備 168
5.2.2 計算機網絡傳輸媒體 173
5.3 TCP/IP協議體係結構 177
5.3.1 OSI/ISO參考模型與TCP/IP體係
結構 177
5.3.2 TCP/IP協議 179
5.3.3 IP地址 182
5.4 Internet基礎知識 186
5.4.1 Internet服務 186
5.4.2 因特網接入方式 190
5.4.3 TCP/IP的配置 192
5.4.4 瀏覽器的設置與使用 193
5.5 局域網基礎 196
5.6 網絡安全基本概念 201
第6章 程序設計語言基礎知識 206
6.1 程序設計語言概述 206
6.1.1 程序設計語言的基本概念 206
6.1.2 程序設計語言的分類和特點 207
6.1.3 程序設計語言的基本成分 211
6.2 語言處理程序基礎 217
6.2.1 匯編程序基本原理 217
6.2.2 編譯程序基本原理 219
6.2.3 解釋程序基本原理 228
第7章 軟件工程基礎知識 231
7.1 軟件工程概述 231
7.1.1 軟件生存周期 231
7.1.2 軟件生存周期模型 233
7.1.3 軟件過程 237
7.1.4 軟件工具 239
7.1.5 軟件開發環境 242
7.2 軟件需求分析 243
7.2.1 軟件需求的定義 243
7.2.2 軟件需求分析的基本任務 243
7.2.3 需求建模 244
7.3 軟件設計 244
7.3.1 軟件設計的基本任務 245
7.3.2 軟件設計原則 246
7.4 結構化分析與設計方法 249
7.4.1 結構化分析方法 249
7.4.2 結構化設計方法 251
7.4.3 結構化程序設計方法 254
7.5 麵嚮對象分析與設計方法 254
7.5.1 麵嚮對象的基本概念 254
7.5.2 麵嚮對象分析與設計 256
7.5.3 UML概述 257
7.5.4 設計模式 259
7.6 軟件測試與運行 261
7.6.1 軟件測試的目的及原則 261
7.6.2 軟件測試方法 263
7.6.3 軟件測試過程 266
7.6.4 軟件測試設計和管理 268
7.6.5 軟件調試 268
7.6.6 軟件運行與維護 269
7.7 軟件項目管理 271
7.7.1 軟件項目管理概述 271
7.7.2 軟件質量與軟件質量保證 274
第8章 數據結構與算法 278
8.1 綫性結構 278
8.1.1 綫性錶 278
8.1.2 棧和隊列 285
8.1.3 串 291
8.2 數組和矩陣 292
8.3 樹和圖 296
8.3.1 樹 296
8.3.2 圖 303
8.4 常用算法 307
8.4.1 算法概述 307
8.4.2 排序算法 312
8.4.3 查找算法 319
8.4.4 字符串處理 328
8.4.5 遞歸算法 331
8.4.6 圖的相關算法 332
第9章 標準化和知識産權基礎知識 337
9.1 標準化的基本知識 337
9.1.1 基本概念 337
9.1.2 信息技術標準化 342
9.1.3 標準化組織 345
9.1.4 ISO 9000標準簡介 347
9.1.5 能力成熟度模型簡介 349
9.2 知識産權基礎知識 351
9.2.1 基本概念 351
9.2.2 計算機軟件著作權 353
9.2.3 計算機軟件的商業秘密權 364
第10章 安全性基礎知識 367
10.1 安全性概述 367
10.2 計算機病毒和計算機犯罪概述 369
10.3 網絡安全 375
10.4 訪問控製 378
10.5 加密與解密 380
第11章 C/C++程序設計 385
11.1 C/C++程序基礎 385
11.1.1 C/C++程序基本結構 386
11.1.2 數據類型和運算符 387
11.1.3 基本輸入/輸齣 395
11.1.4 控製語句 399
11.1.5 函數 403
11.1.6 指針與引用 407
11.2 類與對象 412
11.3 繼承與多態 420
11.4 輸入與輸齣流庫 425
11.5 異常處理 428
11.6 類庫 431
11.6.1 string 431
11.6.2 STL 435
11.6.3 vector 436
11.7 C程序設計要點 440
11.7.1 指針與鏈錶 440
11.7.2 遞歸函數 441
11.7.3 程序錯誤 442
第12章 Java語言程序設計 452
12.1 Java語言概述 452
12.1.1 Java語言的特點 452
12.1.2 Java開發環境 453
12.2 Java語言基礎 453
12.2.1 Java基本數據類型 454
12.2.2 控製結構 460
12.2.3 Java數組與字符串 462
12.3 類與接口 466
12.3.1 類的定義與使用 466
12.3.2 對象的初始化 468
12.3.3 包 470
12.3.4 繼承 472
12.3.5 抽象類與接口 474
12.4 異常 480
12.4.1 異常的處理 480
12.4.2 自定義異常 482
12.5 文件輸入、輸齣和流 484
12.5.1 字節流 484
12.5.2 字符流 487
12.5.3 標準輸入/輸齣流 488
12.6 Java小應用程序 490
12.7 Java類庫的使用 493
精彩書摘
3)字形碼
漢字字形碼是錶示漢字字形的字模數據,通常用點陣、矢量函數等方式錶示,用點陣錶示字形時,漢字字形碼指的就是這個漢字字形點陣的代碼。字形碼也稱字模碼,是用點陣錶示的漢字字形碼,它是漢字的輸齣方式,根據輸齣漢字的要求不同,點陣的多少也不同。簡易型漢字為16×16點陣,高精度型漢字為24×24點陣、32×32點陣、48×48點陣等。
字模點陣的信息量是很大的,所占存儲空間也很大,以16×16點陣為例,每個漢字就需要32字節用於機內存儲。字庫中存儲瞭每個漢字的點陣代碼,當顯示輸齣時纔檢索字庫,輸齣字模點陣得到字形。
漢字的矢量錶示法是將漢字看作由筆畫組成的圖形,提取每個筆畫的坐標值,這些坐標值就可以決定每一筆畫的位置,將每一個漢字的所有坐標值信息組閤起來就是該漢字字形的矢量信息。顯然,漢字的字形不同,其矢量信息也就不同,每個漢字都有自己的矢量信息。由於漢字的筆畫不同,則矢量信息就不同。所以,每個漢字矢量信息所占的內存大小不一樣。這與點陣錶示法不一樣。
同樣,將每一個漢字的矢量信息集中在一起就構成瞭漢字庫。當需要漢字輸齣時,利用漢字字形檢索程序根據漢字內碼從字模庫中找到相應的字形碼。
1.2.2校驗碼
計算機係統運行時,各個部件之間要進行數據交換,為瞭確保數據在傳送過程中正確無誤,一是提高硬件電路的可靠性;二是提高代碼的校驗能力,包括查錯和糾錯。通常使用校驗碼的方法來檢測傳送的數據是否齣錯。其基本思想是把數據可能齣現的編碼分為兩類:閤法編碼和錯誤編碼。閤法編碼用於傳送數據,錯誤編碼是不允許在數據中齣現的編碼。閤理地設計錯誤編碼以及編碼規則,使得數據在傳送中齣現某種錯誤時就會變成錯誤編碼,這樣就可以檢測齣接收到的數據是否有錯。
碼距是校驗碼中的一個重要概念。所謂碼距,是指一個編碼係統中任意兩個閤法編碼之間至少有多少個二進製位不同。例如,4位8421碼的碼距為1,在傳輸過程中,該代碼的一位或多位發生錯誤,都將變成另外一個閤法編碼,因此這種代碼無差錯檢驗能力。下麵簡單介紹常用的三種校驗碼:奇偶校驗碼(Parity Codes)、海明碼(Hamming Code)和循環冗餘校驗(Cyclic Redundancy Check,CRC)碼。
……
前言/序言
全國計算機技術與軟件專業技術資格(水平)考試從實施至今已有二十餘年,在社會上産生瞭很大的影響,對我國軟件産業的形成和發展做齣瞭重要的貢獻。為瞭適應我國計算機信息技術發展的需求,人力資源和社會保障部、工業和信息産業部決定將考試的級彆拓展到計算機信息技術行業的各個方麵,以滿足社會上對計算機信息技術人纔的需要。
編者受全國計算機專業技術資格考試辦公室委托,對《程序員教程(第三版)(修訂版)》一書進行再編,以適應新的考試大綱要求。在考試大綱中,要求考生掌握的知識麵很廣,每個章節的內容都能構成相關領域的一門課程,因此編寫本書的難度很高。考慮到參加考試的人員已有一定的基礎,所以本書中隻對考試大綱中所涉及的知識領域的要點加以闡述,但限於篇幅所限,不能詳細地展開,請讀者諒解。
全書共分12章,各章的內容安排如下。
第1章 計算機係統基礎知識:主要介紹計算機係統硬件組成、數據在計算機中的錶示和運算、校驗碼基礎知識和指令係統基礎知識。
第2章 操作係統基礎知識:主要介紹操作係統的類型和功能等基本概念,進程管理、存儲管理、設備管理、文件管理和作業管理等基礎知識。
第3章 數據庫基礎知識:主要介紹數據庫管理係統的主要功能和特徵、數據庫模式、數據模型和ER圖、關係運算和SQL等基礎知識。
第4章 多媒體基礎知識:主要介紹多媒體的基本概念、音頻、圖形和圖像、動畫和視頻、網絡多媒體等基礎知識。
第5章 網絡基礎知識:主要介紹網絡的功能、分類、組成和拓撲結構,基本的網絡協議與標準,常用網絡設備與網絡通信設備的作用和特點、局域網(LAN)和互聯網(Internet)基礎知識。
第6章 程序設計語言基礎知識:主要介紹程序設計語言的類型和特點、程序設計語言的基本成分以及編譯、解釋等基本的語言翻譯基礎知識。
第7章 軟件工程基礎知識:主要介紹軟件工程和項目管理基礎、麵嚮對象分析與設計方法、軟件需求分析、軟件設計、編碼和測試、軟件係統運行與維護、軟件質量管理等基礎知識。
第8章 數據結構與算法:主要介紹綫性錶和鏈錶、棧、隊列、數組、樹、圖等基本數據結構以及查找、排序等常用算法。
第9章 標準化和知識産權基礎知識:主要介紹標準化的基本概念,標準分類、標準的代號及編號等方麵的基礎知識;知識産權的概念與特點、計算機軟件著作權等方麵的基礎知識。
第10章 安全性基礎知識:主要介紹計算機病毒、網絡安全、訪問控製和加解密基礎 知識。
第11章 C/C++程序設計:主要介紹C/C++程序基礎、類與對象、繼承與多態、輸入與輸齣流庫、異常處理和常用STL模闆庫,以及C程序中常見的問題和錯誤。
第12章 Java語言程序設計:主要介紹Java程序語言基礎和特點、類與接口、異常、文件和輸入/輸齣流、Java小應用程序和Java類庫等基礎知識。
本書第1章由張淑平編寫,第2章、第3章由王亞平編寫,第4章由馬誌欣編寫,第5章由嚴體華編寫,第6章由張淑平編寫,第7章由褚華編寫,第8章由張淑平、陳靜玉編寫,第9章由劉強編寫,第10章由嚴體華、張淑平編寫,第11章由霍鞦艷、張淑平編寫,第12章由霍鞦艷編寫,全書由張淑平、霍鞦艷統稿。
在本書的編寫過程中,參考瞭許多相關的書籍和資料,編者在此對這些參考文獻的作者錶示感謝。同時感謝清華大學齣版社在本書齣版過程中所給予的支持和幫助。
因水平有限,書中難免存在錯漏和不妥之處,望讀者指正,以利改進和提高。
編 者
2014年2月
《代碼煉金術:從零到壹的軟件開發秘典》 序言 在這個由數據和算法驅動的時代,軟件的力量無處不在,塑造著我們的生活、工作乃至思維方式。從智能手機上的應用程序,到支撐全球經濟運轉的龐大係統,代碼是構建這個數字世界的基石。然而,對於許多渴望投身其中,但又感到迷茫的初學者而言,軟件開發的廣闊天地似乎布滿瞭荊棘,令人望而生畏。 《代碼煉金術》正是一本為你點亮前路的指南。它並非要塞滿你關於特定語言或框架的死記硬背知識,而是旨在引導你掌握軟件開發的核心思想、原則與方法。我們相信,真正的“煉金術”並非對神秘配方的盲目模仿,而是對內在規律的深刻理解和巧妙運用。本書的目標,就是讓你成為能夠將抽象概念轉化為實際解決方案的“代碼煉金術士”。 我們並非提供一套“即插即用”的工具箱,因為工具會過時,而思想永不落伍。相反,本書將帶你深入軟件開發的心髒地帶,探索那些跨越語言、框架和技術的普適性概念。你將學會如何像一個思考者一樣去編程,如何設計齣優雅、可維護且高效的代碼,如何解決復雜的問題,並在這個快速變化的領域中保持持續的學習和成長。 如果你曾因復雜的術語而卻步,因抽象的概念而睏惑,或者隻是想為自己的職業生涯注入新的活力,《代碼煉金術》都將是你不可或缺的夥伴。本書不是一個簡單的“怎麼做”的教程,而是一個關於“為什麼”和“如何思考”的深度解析。我們將一起拆解復雜的係統,理解背後的邏輯,並最終掌握創造數字世界的強大能力。 第一章:思維的基石——理解編程的本質 在踏上代碼之旅之前,理解編程的本質至關重要。編程並非簡單的敲擊鍵盤,而是將人類的邏輯和意圖轉化為機器能夠理解的指令的過程。本章將帶領你超越錶麵的語法,深入探究編程的核心思想: 抽象與建模: 學習如何將現實世界的問題抽象成計算機可以處理的模型。我們將探討不同層次的抽象,以及如何通過恰當的模型來簡化復雜性。例如,如何將一個“圖書管理係統”的概念,轉化為數據結構和操作的集閤。 邏輯與算法: 理解算法是解決問題的步驟。我們將學習基本的邏輯思維,如何構建清晰、精確的算法,並初步接觸一些經典的算法思想,例如搜索、排序等,理解它們在不同場景下的適用性。 數據與結構: 數據是程序的靈魂,而數據結構則是組織數據的骨架。我們將認識各種基本的數據結構,如數組、鏈錶、棧、隊列,理解它們各自的優缺點和適用場景。 控製流與流程: 程序並非一成不變,而是根據條件和順序執行。本章將深入理解順序執行、分支(if-else)、循環(for, while)等控製流的概念,學習如何通過它們來構建具有邏輯性的程序。 符號與錶達: 計算機語言的強大在於其錶達能力。我們將學習如何使用變量、常量、運算符、錶達式等基本元素來構建程序。 第二章:構建的藍圖——軟件設計的基本原則 編寫齣能夠運行的代碼隻是第一步,而編寫齣高質量、易於維護的代碼則需要設計。本章將為你揭示軟件設計的奧秘: 模塊化與封裝: 學習如何將大型程序分解成更小、更易管理的模塊。理解封裝的概念,即隱藏實現細節,隻暴露必要的接口,從而提高代碼的可重用性和可維護性。 低耦閤與高內聚: 深入理解這兩個重要的設計原則。低耦閤意味著模塊之間相互依賴性低,易於獨立修改;高內聚則指模塊內部的功能緊密相關,職責單一。我們將通過實例來闡釋如何實踐它們。 接口與抽象: 學習如何通過接口來定義模塊之間的交互方式。理解抽象的作用,即專注於“做什麼”,而非“如何做”,從而實現更靈活的設計。 命名與規範: 良好的命名是可讀性的基石。我們將探討有意義的命名原則,以及代碼風格規範的重要性,它們是團隊協作和長期維護的保障。 文檔的重要性: 代碼是活的,文檔則是代碼的說明書。學習編寫清晰、準確的文檔,不僅能幫助他人理解你的代碼,也能在你日後迴顧時提供清晰的指引。 第三章:成長的階梯——數據結構與算法的深度探索 一旦掌握瞭設計的基本原則,我們就需要更強大的工具來構建高效的解決方案。本章將帶領你深入探索數據結構與算法的進階世界: 數據結構的精髓: 除瞭基礎的數據結構,我們還將探討更復雜但用途廣泛的結構,如樹(二叉樹、平衡樹)、圖、哈希錶。理解它們在不同場景下的性能優勢。 算法設計的藝術: 學習常見的算法設計範式,例如分治法、動態規劃、貪心算法。通過分析這些範式的思維過程,培養解決問題的能力。 時間和空間復雜度分析: 理解如何衡量算法的效率。我們將學習大O符號,並學會分析算法在時間和空間上的消耗,從而選擇最優的解決方案。 遞歸與迭代: 掌握遞歸和迭代這兩種解決問題的重要編程技巧,理解它們的異同,並學會如何有效地運用它們。 實踐與優化: 通過一係列具有代錶性的編程挑戰,讓你親身體驗數據結構和算法的應用,並學習如何對現有代碼進行優化,提升性能。 第四章:協同的藝術——團隊協作與版本控製 軟件開發很少是單打獨鬥,團隊協作是現代軟件工程不可或缺的一部分。本章將聚焦於高效的團隊協作和代碼管理: 溝通與協作: 學習有效的溝通技巧,如何清晰地錶達自己的想法,如何傾聽他人的意見,以及如何參與到團隊討論中。 需求分析與任務分解: 理解如何從模糊的需求中提煉齣清晰、可執行的任務,以及如何將大型項目分解成適閤團隊成員的子任務。 版本控製係統(Git): 深入學習Git的核心概念和常用命令。理解分支、閤並、提交、迴滾等操作,掌握如何管理代碼的曆史,並與團隊成員協同開發。 代碼審查(Code Review): 學習代碼審查的價值和流程。理解如何通過他人審視自己的代碼,發現潛在問題,提高代碼質量,並分享知識。 敏捷開發方法論簡介: 初步瞭解敏捷開發的核心理念,如迭代、增量、響應變化,為後續更深入的學習打下基礎。 第五章:實踐的淬煉——調試、測試與部署 “寫齣能跑的代碼”隻是開始,確保代碼“正確地運行”並“可靠地交付”是軟件開發的最終目標。本章將帶你掌握調試、測試和部署的關鍵技能: 調試的藝術: 學習係統性的調試方法,如何定位錯誤,如何使用調試工具,以及如何從錯誤中學習。 單元測試: 理解單元測試的重要性,學習如何為代碼編寫獨立的測試用例,確保每個功能模塊的正確性。 集成測試與係統測試: 瞭解更高層次的測試,如何驗證不同模塊之間的交互,以及整個係統是否符閤預期。 代碼重構: 學習在不改變代碼外部行為的前提下,改進代碼內部結構。理解重構的原則和技巧,如何讓代碼更易讀、更易維護。 自動化部署簡介: 初步瞭解持續集成/持續部署(CI/CD)的概念,以及自動化部署在提高開發效率和交付可靠性方麵的作用。 第六章:持續的進化——學習的路徑與未來的展望 軟件開發領域瞬息萬變,持續學習是每個開發者的必修課。本章將為你指明學習的方嚮: 構建你的知識體係: 如何係統地學習新的編程語言、框架和技術。 閱讀優秀代碼: 學習從開源項目和其他優秀開發者那裏汲取養分。 解決實際問題: 將所學知識應用於解決真實世界的問題,這是最好的學習方式。 社區的力量: 積極參與開發者社區,與其他開發者交流,獲取幫助和分享經驗。 職業發展道路: 瞭解不同的職業發展方嚮,以及如何在軟件開發的道路上不斷成長。 結語 《代碼煉金術》並非一本讓你立刻成為編程大師的速成秘籍,而是一段引導你深入理解軟件開發本質的旅程。我們相信,通過掌握本書傳授的核心思想和方法,你將不再被編程的復雜性所嚇倒,而是能夠以自信、從容的態度去創造、去解決、去進化。願這本書成為你手中那把開啓數字世界大門的鑰匙,願你在代碼的海洋中,發現屬於自己的無限可能。