- 博客(0)
- 资源 (11)
- 收藏
- 关注
Orange'S:一个操作系统的实现_高清扫描_带书签
《自己动手写操作系统》的第二版,第一版https://download.csdn.net/download/onlyone_1/10368499
封面; 1
作者自序; 6
本书导读; 9
目录; 14
上 篇; 21
第1章 马上动手写一个最小的"操作系统"; 22
1.1 准备工作; 22
1.2 十分钟完成的操作系统; 23
1.3 引导扇区; 24
1.4 代码解释; 24
1.5 水面下的冰山; 26
1.6 回顾; 27
第2章 搭建你的工作环境; 28
2.1 虚拟计算机Bochs; 28
2.1.1 Bochs初体验; 28
2.1.2 Bochs的安装; 29
2.1.3 Bochs的使用 ; 30
2.1.4 用Bochs调试操作系统 ; 32
2.2 QEMU ; 35
2.3 平台之争:Windows还是*nix ; 36
2.4 GNU/Linux下的开发环境 ; 40
2.5 Windows下的开发环境 ; 42
2.6 总结 ; 43
第3章 保护模式(Protect Mode) ; 45
3.1 认识保护模式 ; 45
3.1.1 保护模式的运行环境 ; 49
3.1.2 GDT(Global Descriptor Table) ; 51
3.1.3 实模式到保护模式,不一般的jmp ; 53
3.1.4 描述符属性 ; 55
3.2 保护模式进阶 ; 58
3.2.1 海阔凭鱼跃 ; 58
3.2.2 LDT(Local Descriptor Table) ; 64
3.2.3 特权级概述 ; 68
3.2.4 特权级转移 ; 71
3.2.5 关于"保护"二字的一点思考 ; 85
3.3 页式存储 ; 85
3.3.1 分页机制概述 ; 86
3.3.2 编写代码启动分页机制 ; 87
3.3.3 PDE和PTE ; 88
3.3.4 cr3 ; 91
3.3.5 回头看代码 ; 92
3.3.6 克勤克俭用内存 ; 93
3.3.7 进一步体会分页机制 ; 101
3.4 中断和异常 ; 107
3.4.1 中断和异常机制 ; 107
3.4.2 外部中断 ; 110
3.4.3 编程操作8259A ; 111
3.4.4 建立IDT ; 114
3.4.5 实现一个中断 ; 115
3.4.6 时钟中断试验 ; 116
3.4.7 几点额外说明 ; 118
3.5 保护模式下的I/O ; 120
3.5.1 IOPL ; 120
3.5.2 I/O许可位图(I/O Permission Bitmap) ; 120
3.6 保护模式小结 ; 121
第4章 让操作系统走进保护模式 ; 122
4.1 突破512字节的限制 ; 122
4.1.1 FAT12 ; 123
4.1.2 DOS可以识别的引导盘 ; 128
4.1.3 一个最简单的Loader ; 128
4.1.4 加载Loader入内存 ; 129
4.1.5 向Loader交出控制权 ; 136
4.1.6 整理boot.asm ; 136
4.2 保护模式下的"操作系统" ; 137
第5章 内核雏形 ; 139
5.1 在Linux下用汇编写Hello World ; 139
5.2 再进一步,汇编和C同步使用 ; 140
5.3 ELF(Executable and Linkable Format) ; 143
5.4 从Loader到内核 ; 147
5.4.1 用Loader加载ELF ; 147
5.4.2 跳入保护模式 ; 151
5.4.3 重新放置内核 ; 157
5.4.4 向内核交出控制权 ; 162
5.5 扩充内核 ; 163
5.5.1 切换堆栈和GDT ; 164
5.5.2 整理我们的文件夹 ; 168
5.5.3 Makefile ; 169
5.5.4 添加中断处理 ; 175
5.5.5 两点说明 ; 188
5.6 小结 ; 189
第6章 进程 ; 191
6.1 迟到的进程 ; 191
6.2 概述 ; 191
6.2.1 进程介绍 ; 192
6.2.2 未雨绸缪--形成进程的必要考虑 ; 192
6.2.3 参考的代码 ; 193
6.3 最简单的进程 ; 194
6.3.1 简单进程的关键技术预测 ; 195
6.3.2 第一步--ring0→ring1 ; 198
6.3.3 第二步--丰富中断处理程序 ; 209
6.4 多进程 ; 220
6.4.1 添加一个进程体 ; 220
6.4.2 相关的变量和宏 ; 220
6.4.3 进程表初始化代码扩充 ; 222
6.4.4 LDT ; 223
6.4.5 修改中断处理程序 ; 223
6.4.6 添加一个任务的步骤总结 ; 226
6.4.7 号外:Minix的中断处理 ; 227
6.4.8 代码回顾与整理 ; 232
6.5 系统调用 ; 240
6.5.1 实现一个简单的系统调用 ; 242
6.5.2 get_ticks的应用 ; 247
6.6 进程调度 ; 252
6.6.1 避免对称--进程的节奏感 ; 252
6.6.2 优先级调度总结 ; 260
第7章 输入/输出系统 ; 262
7.1 键盘 ; 262
7.1.1 从中断开始--键盘初体验 ; 262
7.1.2 AT、PS/2键盘 ; 263
7.1.3 键盘敲击的过程 ; 264
7.1.4 用数组表示扫描码 ; 268
7.1.5 键盘输入缓冲区 ; 271
7.1.6 用新加的任务处理键盘操作 ; 273
7.1.7 解析扫描码 ; 274
7.2 显示器 ; 283
7.2.1 初识TTY ; 284
7.2.2 基本概念 ; 284
7.2.3 寄存器 ; 287
7.3 TTY任务 ; 290
7.3.1 TTY任务框架的搭建 ; 292
7.3.2 多控制台 ; 297
7.3.3 完善键盘处理 ; 301
7.3.4 TTY任务总结 ; 308
7.4 区分任务和用户进程 ; 309
7.5 printf ; 311
7.5.1 为进程指定TTY ; 312
7.5.2 printf()的实现 ; 312
7.5.3 系统调用write() ; 314
7.5.4 使用printf() ; 316
下 篇; 319
第8章 进程间通信 ; 320
8.1 微内核还是宏内核 ; 320
8.1.1 Linux的系统调用 ; 322
8.1.2 Minix的系统调用 ; 323
8.1.3 我们的选择 ; 325
8.2 IPC ; 326
8.3 实现IPC ; 326
8.3.1 assert()和panic() ; 329
8.3.2 msg_send()和msg_receive() ; 333
8.3.3 增加消息机制之后的进程调度 ; 341
8.4 使用IPC来替换系统调用get_ticks ; 342
8.5 总结 ; 344
第9章 文件系统 ; 345
9.1 硬盘简介 ; 345
9.2 硬盘操作的I/O 端口 ; 346
9.3 硬盘驱动程序 ; 347
9.4 文件系统 ; 357
9.5 硬盘分区表 ; 358
9.6 设备号 ; 364
9.7 用代码遍历所有分区 ; 367
9.8 完善硬盘驱动程序 ; 372
9.9 在硬盘上制作一个文件系统 ; 375
9.9.1 文件系统涉及的数据结构 ; 376
9.9.2 编码建立文件系统 ; 378
9.10 创建文件 ; 386
9.10.1 Linux下的文件操作 ; 386
9.10.2 文件描述符(file descriptor) ; 387
9.10.3 open() ; 389
9.11 创建文件所涉及的其他函数 ; 397
9.11.1 strip_path() ; 397
9.11.2 search_file() ; 398
9.11.3 get_inode()和sync_inode() ; 399
9.11.4 init_fs() ; 401
9.11.5 read_super_block()和get_super_block() ; 402
9.12 关闭文件 ; 403
9.13 查看已创建的文件 ; 404
9.14 打开文件 ; 406
9.15 读写文件 ; 407
9.16 测试文件读写 ; 410
9.17 文件系统调试 ; 413
9.18 删除文件 ; 415
9.19 插曲:奇怪的异常 ; 421
9.20 为文件系统添加系统调用的步骤 ; 423
9.21 将TTY纳入文件系统 ; 424
9.22 改造printf ; 431
9.23 总结 ; 433
第10章 内存管理 ; 434
10.1 fork ; 434
10.1.1 认识fork ; 434
10.1.2 fork前要做的工作(为fork所做的准备) ; 437
10.1.3 fork()库函数 ; 441
10.1.4 MM ; 441
10.1.5 运行 ; 447
10.2 exit和wait ; 447
10.3 exec ; 452
10.3.1 认识exec ; 453
10.3.2 为自己的操作系统编写应用程序 ; 454
10.3.3 "安装"应用程序 ; 456
10.3.4 实现exec ; 462
10.4 简单的shell ; 467
10.5 总结 ; 469
第11章 尾声 ; 471
11.1 让mkfs()只执行一次 ; 471
11.2 从硬盘引导 ; 475
11.2.1 编写硬盘引导扇区和硬盘版loader ; 475
11.2.2 "安装"hdboot.bin和hdldr.bin ; 481
11.2.3 grub ; 481
11.2.4 小结 ; 483
11.3 将OS安装到真实的计算机 ; 485
11.3.1 准备工作 ; 485
11.3.2 安装Linux ; 486
11.3.3 编译源代码 ; 486
11.3.4 开始安装 ; 487
11.4 总结 ; 487
参考文献 ; 490
2018-04-23
自己动手写操作系统_于渊_高清带书签版
资源仅供个人学习,建议购买纸质版。另外该书第二版《Orange'S:一个操作系统的实现》也已分享!!!
封面; 1
序; 2
审校者的话; 5
本书导读; 8
作者自序; 6
目录; 14
第1章 马上动手写一个最小的“操作系统” ; 18
1.1 准备工作 ; 18
1.2 10分钟完成的操作系统 ; 18
1.3 Boot Sector ; 20
1.4 代码解释 ; 20
1.5 水面下的冰山 ; 22
1.6 回顾 ; 23
第2章 搭建你的工作环境 ; 24
2.1 虚拟计算机(Virtual PC) ; 24
2.1.1 Virtual PC初体验 ; 25
2.1.2 创建你的第一个Virtual PC ; 26
2.1.3 虚拟软盘研究 ; 29
2.1.4 虚拟软盘实战 ; 31
2.2 编译器(NASM & GCC) ; 35
2.3 安装虚拟Linux ; 36
2.4 在虚拟Linux上访问Windows文件夹 ; 43
2.5 安装虚拟PCDOS ; 43
2.6 其他要素 ; 46
2.7 Bochs ; 46
2.7.1 Bochs vs. Virtual PC vs. VMware ; 47
2.7.2 Bochs的使用方法 ; 48
2.7.3 用Bochs进行调试 ; 50
2.7.4 在Linux上开发 ; 51
2.8 总结与回顾 ; 53
第3章 保护模式(Protect Mode) ; 54
3.1 认识保护模式 ; 54
3.1.1 GDT(Global Descriptor Table) ; 59
3.1.2 实模式到保护模式,不一般的jmp ; 62
3.1.3 描述符属性 ; 64
3.2 保护模式进阶 ; 67
3.2.1 海阔凭鱼跃 ; 67
3.2.2 LDT(Local Descriptor Table) ; 75
3.2.3 特权级 ; 79
3.3 页式存储 ; 99
3.3.1 分页机制概述 ; 100
3.3.2 编写代码启动分页机制 ; 101
3.3.3 PDE和PTE ; 102
3.3.4 cr3 ; 105
3.3.5 回头看代码 ; 105
3.3.6 克勤克俭用内存 ; 107
3.3.7 进一步体会分页机制 ; 117
3.4 中断和异常 ; 124
3.4.1 中断和异常机制 ; 126
3.4.2 外部中断 ; 128
3.4.3 编程操作8259A ; 130
3.4.4 建立IDT ; 133
3.4.5 实现一个中断 ; 134
3.4.6 时钟中断试验 ; 136
3.4.7 几点额外说明 ; 138
3.5 保护模式下的I/O ; 139
3.5.1 IOPL ; 139
3.5.2 I/O许可位图(I/O Permission Bitmap) ; 140
3.6 保护模式小结 ; 140
第4章 让操作系统走进保护模式 ; 142
4.1 突破512字节的限制 ; 142
4.1.1 FAT12 ; 143
4.1.2 DOS可以识别的引导盘 ; 148
4.1.3 一个最简单的Loader ; 149
4.1.4 加载Loader入内存 ; 150
4.1.5 向Loader交出控制权 ; 159
4.1.6 整理boot.asm ; 159
4.2 保护模式下的“操作系统” ; 161
第5章 内核雏形 ; 163
5.1 用NASM在Linux下写Hello World ; 163
5.2 再进一步,汇编和C同步使用 ; 165
5.3 ELF(Executable and Linkable Format) ; 167
5.4 从Loader到内核 ; 172
5.4.1 用Loader加载ELF ; 172
5.4.2 跳入保护模式 ; 178
5.4.3 重新放置内核 ; 187
5.4.4 向内核交出控制权 ; 192
5.4.5 操作系统的调试方法 ; 193
5.5 扩充内核 ; 201
5.5.1 切换堆栈和GDT ; 201
5.5.2 整理我们的文件夹 ; 208
5.5.3 Makefile ; 208
5.5.4 添加中断处理 ; 217
5.5.5 两点说明 ; 235
5.6 小结 ; 236
第6章 进程 ; 238
6.1 迟到的进程 ; 238
6.2 概述 ; 239
6.2.1 进程介绍 ; 239
6.2.2 未雨绸缪——形成进程的必要考虑 ; 239
6.2.3 参考的代码 ; 241
6.3 最简单的进程 ; 241
6.3.1 简单进程的关键技术预测 ; 242
6.3.2 第一步——ring0→ring1 ; 244
6.3.3 第二步——丰富中断处理程序 ; 260
6.3.4 进程体设计技巧 ; 271
6.4 多进程 ; 273
6.4.1 添加一个进程体 ; 273
6.4.2 相关的变量和宏 ; 274
6.4.3 进程表初始化代码扩充 ; 275
6.4.4 LDT ; 277
6.4.5 修改中断处理程序 ; 278
6.4.6 添加一个任务的步骤总结 ; 280
6.4.7 号外:Minix的中断处理 ; 282
6.4.8 代码回顾与整理 ; 286
6.5 系统调用 ; 297
6.5.1 实现一个简单的系统调用 ; 297
6.5.2 get_ticks的应用 ; 303
6.6 进程调度 ; 309
6.6.1 避免对称——进程的节奏感 ; 309
6.6.2 优先级调度总结 ; 317
第7章 输入/输出系统 ; 319
7.1 键盘 ; 319
7.1.1 从中断开始——键盘初体验 ; 319
7.1.2 AT、PS/2键盘 ; 321
7.1.3 键盘敲击的过程 ; 321
7.1.4 解析扫描码 ; 326
7.2 显示器 ; 342
7.2.1 初识TTY ; 342
7.2.2 基本概念 ; 343
7.2.3 寄存器 ; 345
7.3 TTY任务 ; 349
7.3.1 TTY任务框架的搭建 ; 351
7.3.2 多控制台 ; 357
7.3.3 完善键盘处理 ; 363
7.3.4 TTY任务总结 ; 371
7.4 区分任务和用户进程 ; 371
7.5 printf ; 374
7.5.1 为进程指定TTY ; 374
7.5.2 printf()的实现 ; 375
7.5.3 系统调用write() ; 378
7.5.4 使用pri ; 380
后记 ; 383
参考文献 ; 386
附录书中的章节和代码对照表 ; 387
2018-04-23
冒号课堂——编程范式与OOP思想(带书签完整版)
《冒号课堂》以课堂对话的形式,借六位师生之口讲述编程要义。上篇对编程范式作了入门性的介绍,并对一些流行的编程语言进行了简评;下篇侧重阐发软件设计思想,其中在范式上以OOP为主,在语言上以C++、Java和C#为主。全书寓庄于谐,深入浅出,既可开阔眼界,又能引发思考,值得编程爱好者品读。
上篇:编程范式与编程语言
第1课 开班导言
1.1 开班发言——程序员的4层境界
1.2 首轮提问——什么语言好?
1.3 语言选择——合适的就是好的
1.4 初识范式——程序王国中的世界观与方法论
1.5 开发技术——实用还是时髦?
第2课 重要范式
2.1 命令范式——一切行动听指挥
2.2 声明范式——目标决定行动
2.3 对象范式——民主制社会的编程法则
2.4 并发范式——合作与竞争
第3课 常用范式
3.1 泛型范式——抽象你的算法
3.2 超级范式——提升语言的级别
3.3 切面范式——多角度看问题
3.4 事件驱动——有事我叫你,没事别烦我
第4课 重温范式
4.1 函数范式——精巧的数学思维
4.2 逻辑范式——当算法失去了控制
4.3 汇总范式——一张五味俱全的大烙饼
4.4 情景范式——餐馆里的编程范式
第5课 语言小谈
5.1 教学计划——接下来的故事
5.2 数据类型——规则与变通
5.3 动态语言——披着彩衣飞舞的脚本语言
5.4 语言误区——语言的宗教情结
第6课 语言简评
6.1 系统语言——权力的双刃剑
6.2 平台语言——先搭台后唱戏
6.3 前台语言——视觉与交互的艺术
6.4 后台脚本——敏捷开发的利器
下篇:抽象机制与对象范式
第7课 抽象封装
7.1 抽象思维——减法和除法的学问
7.2 数据抽象——“做什么”重于“怎么做”
7.3 封装隐藏——包装的讲究
第8课 抽象接口
8.1 软件应变——随需而变,适者生存
8.2 访问控制——代码的多级管理
8.3 接口服务——讲诚信与守规矩
第9课 继承机制
9.1 继承关系——继承财富,更要继承责任
9.2 慎用继承——以谨慎之心对待权力
第10课 多态机制
10.1 多态类型——静中之动
10.2 抽象类型——实中之虚
第11课 值与引用
11.1 语法类型——体用之分
11.2 语义类型——阴阳之道
第12课 设计原则
12.1 间接原则——柔胜于刚,曲胜于直
12.2 依赖原则——有求皆苦,无欲则刚
12.3 肉聚原则——不是一家人,不进一家门
12.4 保变原则——与魔鬼打交道的艺术
第13课 设计模式
13.1 创建模式——不要问我从哪里来
13.2 结构模式——建筑的技巧
13.3 行为模式——君子之交淡如水
13.4 闭班小结——软件无形,编程有道
索引
设计手记
编辑手记
2018-01-18
深入理解计算机系统(原书第3版)
和第2版相比,本版内容上*大的变化是,从以IA32和x86-64为基础转变为完全以x86-64为基础。主要更新如下:, 基于x86-64,大量地重写代码,首次介绍对处理浮点数据的程序的机器级支持。, 处理器体系结构修改为支持64位字和操作的设计。, 引入更多的功能单元和更复杂的控制逻辑,使基于程序数据流表示的程序性能模型预测更加可靠。, 扩充关于用GOT和PLT创建与位置无关代码的讨论,描述了更加强大的链接技术(比如库打桩)。, 增加了对信号处理程序更细致的描述,包括异步信号安全的函数等。, 采用新函数,更新了与协议无关和线程安全的网络编程。
2018-01-01
数据挖掘:实用机器学习工具与技术(原书第3版)
大数据时代应用机器学习方法解决数据挖掘问题的实用指南。, 洞察隐匿于大数据中的结构模式,有效指导数据挖掘实践和商业应用。, weka系统的主要开发者将丰富的研发、商业应用和教学实践的经验和技术融会贯通。, 广泛覆盖在数据挖掘实践中采用的算法和机器学习技术,着眼于解决实际问题, 避免过分要求理论基础和数学知识,重点在于告诉读者“如何去做”,同时包括许多算法、代码以及具体实例的实现。, 将所有的概念都建立在具体实例的基础之上,促使读者首先考虑使用简单的技术。如果简单的技术不足以解决问题,再考虑提升到更为复杂的高级技术。, 新版增加了大量近年来最新涌现的数据挖掘算法和诸如Web数据挖掘等新领域的介绍,所介绍的weka系统增加了50%的算法及大量新内容。, 本书是机器学习和数据挖掘领域的经典畅销教材,被众多国外名校选为教材。书中详细介绍用于数据挖掘领域的机器学习技术和工具以及实践方法,并且提供了一个公开的数据挖掘工作平台Weka。本书主要内容包括:数据输入/输出、知识表示、数据挖掘技术(决策树、关联规则、基于实例的学习、线性模型、聚类、多实例学习等)以及在实践中的运用。本版对上一版内容进行了全面更新,以反映自第2版出版以来数据挖掘领域的技术变革和新方法,包括数据转换、集成学习、大规模数据集、多实例学习等,以及新版的Weka机器学习软件。
2018-01-01
Java 8编程官方参考教程(第9版)带书签
封面; 1
书名; 2
前言; 4
目录; 11
正文; 26
第一部分java语言; 26
第1章 Java的历史和演变; 28
1.1 Java的家世; 29
1.1.1 现代编程语言的诞生:C语言; 29
1.1.2 C++\:下一个阶梯; 30
1.1.3 Java出现的时机已经成熟; 31
1.2 Java的诞生; 31
1.3 Java改变Internet的方式; 33
1.3.1 Java applet; 33
1.3.2 安全性; 33
1.3.3 可移植性; 33
1.4 Java的魔力:字节码; 34
1.5 Servlet:服务器端的Java; 35
1.6 Java的关键特性; 35
1.6.1 简单性; 35
1.6.2面向对象; 36
1.6.3 健壮性; 36
1.6.4 多线程; 36
1.6.5 体系结构中立; 36
1.6.6 解释执行和高性能; 37
1.6.7 分布式; 37
1.6.8 动态性; 37
1.7 Java的演变历程; 37
1.8Java SE 8; 39
1.9 文化革新; 40
第2章 Java综述; 42
2.1 面向对象编程; 42
2.1.1 两种范式; 43
2.1.2 抽象; 43
2.1.3 OOP三原则; 44
2.2 第一个简单程序; 48
2.2.1 输入程序; 48
2.2.2 编译程序; 48
2.2.3 深入分析第一个示例程序; 49
2.3 第二个简短程序; 51
2.4 两种控制语句; 52
2.4.1 if语句; 52
2.4.2 for循环; 54
2.5 使用代码块; 55
2.6 词汇问题; 56
2.6.1 空白符; 57
2.6.2 标示符; 57
2.6.3 字面量; 57
2.6.4 注释; 57
2.6.5 分隔符; 57
2.6.6 Java关键字; 58
2.7 Java类库; 59
第3章 数据类型、变量和数组; 60
3.1 Java是强类型化的语言; 60
3.2 基本类型; 61
3.3 整型; 61
3.3.1 byte; 62
3.3.2 short; 62
3.3.3 int; 62
3.3.4 long; 62
3.4 浮点型; 63
3.4.1 float; 63
3.4.2 double; 64
3.5 字符型; 64
3.6 布尔型; 66
3.7 深入分析字面量; 67
3.7.1 整型字面量; 67
3.7.2 浮点型字面量; 68
3.7.3 布尔型字面量; 68
3.7.4 字符型字面量; 68
3.7.5 字符串字面量; 69
3.8 变量; 70
3.8.1 变量的声明; 70
3.8.2 动态初始化; 70
3.8.3 变量的作用域和生存期; 71
3.9 类型转换和强制类型转换; 73
3.9.1 Java的自动类型转换; 73
3.9.2 强制转换不兼容的类型; 73
3.10 表达式中的自动类型提升; 75
3.11 数组; 76
3.11.1 一维数组; 76
3.11.2 多维数组; 79
3.11.3 另一种数组声明语法; 83
3.12 关于字符串的一些说明; 83
3.13 向c/c++程序员提供指针方面的说明; 84
第4章 运算符; 86
4.1 算术运算符; 86
4.1.1 基本算术运算符; 87
4.1.2 求模运算符; 88
4.1.3 算术与赋值复合运算符; 89
4.1.4 自增与自减运算符; 90
4.2 位运算符; 91
4.2.1位逻辑运算符; 92
4.2.2 左移; 95
4.2.3 右移; 96
4.2.4 无符号右移; 97
4.2.5 位运算符与赋值的组合; 99
4.3 关系运算符; 99
4.4 布尔逻辑运算符; 100
4.5 赋值运算符; 102
4.6 “?”运算符; 103
4.7 运算符的优先级; 104
4.8 使用圆括号; 105
第5章 控制语句; 106
5.1 Java的选择语句; 106
5.1.1 if语句; 107
5.1.2 switch语句; 109
5.2 迭代语句; 114
5.2.1 while语句; 114
5.2.2 do-while语句; 116
5.2.3 for语句; 118
5.2.4 for循环的for-each版本; 122
5.2.5 嵌套的循环; 127
5.3 跳转语句; 128
5.3.1 使用break语句; 128
5.3.2 使用continue语句; 132
5.3.3 return语句; 133
第6章 类; 136
6.1 类的基础知识; 137
6.11 类的一般形式; 137
6.1.2 一个简单的类; 138
6.2 声明对象; 140
6.3 为对象引用变量赋值; 142
6.4 方法; 143
6.4.1 为Box类添加方法; 143
6.4.2 返回值; 145
6.4.3 添加带参数的方法; 146
6.5 构造函数; 148
6.6 this关键字; 151
6.7 垃圾回收; 152
6.8 finalize()方法; 153
6.9 堆栈类; 153
第7章 方法和类的深入分析; 156
7.1 重载方法; 156
7.1.1 重载构造函数; 159
7.2 将对象用作参数; 161
7.3 参数传递的深入分析; 164
7.4 返回对象; 166
7.5 递归; 167
7.6 访问控制; 169
7.7 理解static; 172
7.8 final介绍; 174
7.9 重新审视数组; 174
7.10 嵌套类和内部类; 176
7.11 String类介绍; 179
7.12 使用命令行参数; 181
7.13 varargs:可变长参数; 182
7.13.1 重载varargs方法; 185
7.13.2 varargs方法与模糊性; 186
第8章 继承; 190
8.1 继承的基础知识; 190
8.1.1 成员访问与继承; 192
8.1.2 一个更实际的例子; 193
8.1.3 超类变量可以引用子类对象; 195
8.2 使用super关键字; 196
8.2.1 使用super调用超类的构造函数; 196
8.2.2 super的另一种用法; 200
8.3 创建多级继承层次; 201
8.4 构造函数的调用时机; 204
8.5 方法重写; 205
8.6 动态方法调度; 208
8.6.1 重写方法的目的; 209
8.6.2 应用方法重写; 210
8.7 使用抽象类; 211
8.8 在继承中使用final关键字; 214
8.8.1 使用final关键字阻止重写; 214
8.8.2 使用final关键字阻止继承; 215
8.9 Object类; 215
第9章 包和接口; 218
9.1 包; 219
9.1.1 定义包; 219
9.1.2 包查找与CLASSPATH; 220
9.1.3 一个简短的包示例; 220
9.2 访问保护; 221
9.3 导入包; 225
9.4 接口; 227
9.4.1 定义接口; 227
9.4.2 实现接口; 228
9.4.3 嵌套接口; 231
9.4.4应用接口; 232
9.4.5 接口中的变量; 235
9.4.6 接口可以扩展; 237
9.5 默认接口方法; 238
9.5.1 默认方法的基础知识; 239
9.5.2 一个更加实用的例子; 240
9.5.3 多级继承的问题; 241
9.6 在接口中使用静态方法; 242
9.7 关于包和接口的最后说明; 243
第10章 异常处理; 244
10.1 异常处理的基础知识; 244
10.2 异常类型; 245
10.3 未捕获的异常; 246
10.4 使用try和catch; 247
10.5 多条catch子句; 249
10.6 嵌套的try语句; 250
10.7 thow; 253
10.8 throws; 254
10.9 finally; 255
10.10 Java的内置异常; 257
10.11 创建自己的异常子类; 258
10.12 链式异常; 260
10.13 3个近期添加的异常特性; 262
10.14 使用异常; 263
第11章 多线程编程; 264
11.1 Java线程模型; 265
11.1.1 线程优先级; 266
11.1.2 同步; 266
11.1.3 消息传递; 267
11.1.4 Thread类和Runnable接口; 267
11.2 主线程; 268
11.3 创建线程; 269
11.3.1 实现Runnable接口; 270
11.3.2 扩展Thread类; 272
11.3.3 选择一种创建方式; 273
11.4 创建多个线程; 273
11.5 使用isAlive()和join()方法; 274
11.6 线程优先级; 277
11.7 同步; 278
11.7.1 使用同步的方法; 278
11.7.2 synchronized语句; 280
11.8 线程间通信; 282
11.9 挂起、恢复与停止线程; 288
11.10 获取线程的状态; 291
11.11 使用多线程; 292
第12章 枚举、自动装箱与注解(元数据); 294
12.1 枚举; 294
12.1.1 枚举的基础知识; 295
12.1.2 values()和valueOf()方法; 297
12.1.3 Java枚举是类类型; 298
12.1.4 枚举继承自Enum类; 300
12.1.5 另一个枚举示例; 302
12.2 类型封装器; 304
12.2.1 Character封装器; 304
12.2.2 Boolean封装器; 304
12.2.3 数值类型的封装器; 305
12.3 自动装箱; 306
12.3.1 自动装箱与方法; 306
12.3.2 表达式中发生的自动装箱/拆箱; 307
12.3.3 布尔型和字符型数值的自动装箱/拆箱; 309
12.3.4 自动装箱/拆箱有助于防止错误; 310
12.3.5 一些警告 ; 310
12.4 注解(元数据); 311
12.4.1 注解的基础知识; 311
12.4.2 指定保留策略; 312
12.4.3 在运行时使用反射获取注解; 313
12.4.4 AnnotatedElement接口; 318
12.4.5 使用默认值; 318
12.4.6 标记注解; 320
12.4.7 单成员注解; 321
12.4.8 内置注解; 322
12.5 类型注解; 324
12.6 重复注解; 328
第13章 I/O、applet以及其他主题; 332
13.1 I/O的基础知识; 333
13.1.1 流; 333
13.1.2 字节流和字符流; 333
13.1.3 预定义流; 335
13.2 读取控制台输入; 336
13.2.1 读取字符; 336
13.2.2 读取字符串; 337
13.3 向控制台写输出; 339
13.4 PrintWriter类; 339
13.5 读/写文件; 340
13.6 自动关闭文件; 346
13.7 applet的基础知识; 350
13.8 transient和volatile修饰符; 352
13.9 使用instanceof运算符; 353
13.10 strictfp; 355
13.11 本地方法; 356
13.12 使用assert; 359
13.13 静态导入; 362
13.14 通过this()调用重载的构造函数; 364
13.15 紧凑API配置文件; 367
第14章 泛型; 368
14.1 什么是泛型; 369
14.2 一个简单的泛型示例; 369
14.2.1 泛型只使用引用类型; 373
14.2.2 基于不同类型参数的泛型类型是不同的; 373
14.2.3 泛型提升类型安全性的原理; 373
14.3 带两个类型参数的泛型类; 375
14.4 泛型类的一般形式; 377
14.5 有界类型; 377
14.6 使用通配符参数; 380
14.7 创建泛型方法; 388
14.8 泛型接口; 391
14.9 原始类型与遗留代码; 393
14.10 泛型类层次; 395
14.10.1 使用泛型超类; 395
14.10.2 泛型子类; 397
14.10.3 泛型层次中的运行时类型比较; 399
14.10.4 强制转换; 401
14.10.5 重写泛型类的方法; 401
14.11 泛型的类型推断; 403
14.12 擦除; 404
14.13 模糊性错误; 406
14.14 使用泛型的一些限制; 407
14.14.1 不能实例化类型参数; 407
14.14.2 对静态成员的一些限制; 408
14.14.3 对泛型数组的一些限制; 408
14.14.4 对泛型异常的限制; 409
第15章 lambda表达式; 410
15.1 lambda表达式简介; 411
15.1.1 lambda表达式的基础知识; 411
15.1.2 函数式接口; 412
15.1.3 几个lambda表达式示例; 413
15.2 块lambda表达式; 416
15.3 泛型函数式接口; 418
15.4 作为参数传递lambda表达式; 420
15.5 lambda表达式与异常; 423
15.6 lambda表达式和变量捕获; 424
15.7 方法引用; 425
15.7.1 静态方法的方法引用; 425
15.7.2 实例方法的方法引用; 426
15.7.3 泛型中的方法引用; 430
15.8 构造函数的引用; 433
15.9 预定义的函数式接口; 437
第二部分Java库; 440
第16章 字符串处理; 442
16.1 String类的构造函数; 443
16.2 字符串的长度; 445
16.3 特殊的字符串操作; 445
16.3.1 字符串字面值; 446
16.3.2 字符串连接; 446
16.3.3 字符串和其他数据类型的连接; 446
16.3.4 字符串转换和toString()方法; 447
16.4 提取字符; 448
16.4.1 charAt(); 449
16.4.2 getChars(); 449
16.4.3 getBytes(); 449
16.4.4 toCharArray(); 450
16.5 比较字符串; 450
16.5.1 equals()和equalsIgnoreCase(); 450
16.5.2 regionMatches(); 451
16.5.3 startsWith()和endsWith(); 451
16.5.4 equals()与==; 452
16.5.5 compareTo(); 452
16.6 查找字符串; 454
16.7 修改字符串; 455
16.7.1 substring(); 455
16.7.2 concat(); 456
16.7.3 replace(); 457
16.7.4 trim(); 457
16.8使用valueOf()转换数据; 458
16.9 改变字符串中字符的大小写; 459
16.10 连接字符串; 459
16.11 其他String方法; 460
16.12 StringBuffer类; 461
16.12.1 StringBuffer类的构造函数; 462
16.12.2 length()与capacity(); 462
16.12.3 ensureCapacity(); 463
16.12.4 setLength(); 463
15.12.5 charAt()与setCharAt(); 463
16.12.6 getChars(); 464
16.12.7 append(); 464
16.12.8 insert(); 465
16.12.9 reverse(); 465
16.12.10 delete()与deleteCharAt(); 466
16.12.11 replace(); 466
16.12.12 substring(); 467
16.12.13 其他StringBuffer方法; 467
16.13 StringBuider类; 468
第17章 探究java.lang; 470
17.1 基本类型封装器; 471
17.1.1 Number; 471
17.1.2 Double与Float; 472
17.1.3 理解isInfinite()与isNaN(); 475
17.1.4 Byte、Short、Integer和Long; 476
17.1.5 Charater; 484
17.1.6 对Unicode代码点的附加支持; 487
17.1.7 Boolean; 488
17.2 Void类; 489
17.3 Process类; 489
17.4 Runtime类; 490
17.4.1 内存管理; 491
17.4.2 执行其他程序; 492
17.5 ProcessBuider类; 494
17.6 System类; 496
17.6.1 使用currentTimeMillis()计时程序的执行; 497
17.6.2 使用arraycopy(); 498
17.6.3 环境属性; 499
17.7 Object类; 499
17.8 使用clone() 方法和Cloneable接口; 500
17.9 Class类; 502
17.10 ClassLoader类; 505
17.11 Math类; 506
17.11.1 三角函数; 506
17.11.2 指数函数; 506
17.11.3 舍入函数; 507
17.11.4 其他数学方法; 508
17.12 StrictMath类; 510
17.13 Compiler类; 510
17.14 Thread类、ThreadGroup类和Runnable接口; 510
17.14.1 Runnable接口; 510
17.14.2 Thread类; 511
17.14.3 ThreadGroup类; 513
17.15 ThreadLocal和InheritableThreadLocal类; 517
17.16 Package类; 517
17.17 RuntimePermission类; 519
17.18 Throwable类; 519
17.19 SecurityManager类; 519
17.20 StackTraceElement类; 519
17.21 Enum类; 520
17.22 ClassValue类; 521
17.23 CharSequence接口; 521
17.24 Comparable接口; 521
17.25 Appendable接口; 522
17.26 Iterable接口; 522
17.27 Readable接口; 523
17.28 AutoCloseable接口; 523
17.29 Thread.UncaughtExceptionHandler接口; 523
17.30 java.lang子包; 524
17.30.1 java.lang.annotation; 524
17.30.2 java.lang.instrument; 524
17.30.3 java.lang.invoke; 524
17.30.4 java.lang.management; 524
17.30.5 java.lang.ref; 524
17.30.6 java.lang.reflect; 524
第18章 java.util第一部分:集合框架; 526
18.1 集合概述; 528
18.2 JDK5对集合框架的修改; 529
18.2.1 泛型从根本上改变了集合框架; 529
18.2.2 自动装箱使得使用基本型更加容易; 529
18.2.3 for-each风格的for循环; 530
18.3 集合接口; 530
18.3.1 Collection接口; 531
18.3.2 List接口; 533
18.3.3 Set接口; 534
18.3.4 SortedSet接口; 534
18.3.5 NavigableSet接口; 535
18.3.6 Queue接口; 536
18.3.7 Deque接口; 537
18.4 集合类; 539
18.4.1 ArrayList类; 540
18.4.2 LinkedList类; 543
18.4.3 HashSet类; 545
18.4.4 LinkedHashSet类; 546
18.4.5 TreeSet类; 546
18.4.6 PriorityQueue类; 548
18.4.7 ArrayDeque类; 548
18.4.8 numSet类; 549
18.5 通过迭代器访问集合; 550
18.5.1 使用迭代器; 552
18.5.2 使用for-each循环替代迭代器; 553
18.6 Spliterator; 554
18.7 在集合中存储用户定义的类; 557
18.8 RandomAccess接口; 558
18.9 使用映射; 559
18.9.1 映射接口; 559
18.9.2 映射类; 564
18.10 比较器; 569
18.11 集合算法; 577
18.12 Arrays类; 583
18.13 遗留的类和接口; 588
18.13.1 Enumeration接口; 589
18.13.2 Vector类; 589
18.13.3 Stack类; 593
18.13.4 Dictionary类; 595
18.13.5 Hashtable类; 596
18.13.6 Properties类; 599
18.13.7 实用store() 和load(); 603
18.14 集合小结; 605
第19章 java.util第2部分:更多实用工具类; 606
19.1 StringTokenizer类; 606
19.2 BitSet类; 608
19.3 Optional、OptionalDouble、OptionalInt和OptionalLong; 611
19.4 Date类; 613
19.5 Calendar类; 615
19.6 GregorianCalendar类; 618
19.7 TimeZone类; 620
19.8 SimpleTimeZone类; 621
19.9 Locale类; 622
19.10 Random类; 623
19.11 Observable类; 625
19.11.1 Observer接口; 626
19.11.2 Observer示例; 626
19.12 Timer和TimerTask类; 629
19.13 Currency类; 631
19.14 Formatter类; 632
19.14.1 Formatter类的构造函数; 632
19.14.2 Formatter类的方法; 633
19.14.3 格式化的基础知识; 634
19.14.4 格式化字符串和字符; 636
19.14.5 格式化数字; 636
19.14.6 格式化时间和日期; 637
19.14.7 %n和%%说明符; 639
19.14.8 指定最小字段宽度; 639
19.14.9 指定精度; 641
19.14.10 使用格式标志; 642
19.14.11 对齐输出; 642
19.14.12 空格、“+”、“0"以及”("标志; 643
19.14.13 逗号标志; 644
19.14.14 “\#”标志; 644
19.14.15 大写选项; 644
19.14.16 使用参数索引; 645
19.14.17 关闭Formatter对象; 646
19.14.18 print()方法; 647
19.15 Scanner类; 647
19.15.1 Scanner类的构造函数; 647
19.15.2 扫描的基础知识; 648
19.15.3 一些Scanner示例; 651
19.15.4 设置定界符; 655
19.15.5 其他Scanner特性; 657
19.16 ResourceBundle、ListResourceBundle和PropertyResourceBundle类; 658
19.17 其他实用工具类和接口; 662
19.18 java.util子包; 663
19.18.1 java.util.concurrent、java.util.concurrent.atomic和java.util.concurrent.locks; 663
19.18.2 java.util.function; 663
19.18.3 java.util.jar; 666
19.18.4 java.util.logging; 666
19.18.5 java.util.prefs; 666
19.18.6 java.util.regex; 666
19.18.7 java.util.spi; 667
19.18.8 java.util.stream; 667
19.18.9 java.util.zip; 667
第20章 输入/输出:探究java.io; 668
20.1 I/O类和接口; 669
20.2 File类; 670
20.2.1 目录; 673
20.2.2 使用FilenameFilter接口; 674
20.2.3 listFiles()方法; 675
20.2.4 创建目录; 675
20.3 AutoCloseable、Closeable和Flushable接口; 675
20.4 I/O异常; 676
20.5 关闭流的两种方式; 676
20.6 流类; 678
20.7 字节流; 678
20.7.1 InputStream 类; 678
20.7.2 OutputStream类 ; 679
20.7.3 FileInputStream类; 679
20.7.4 FileOutputStream类; 681
20.7.5 ByteArrayInputStream类; 684
20.7.6 ByteArrayOutputStream类; 685
20.7.7 过滤的字节流; 687
20.7.8 缓冲的字节流; 687
20.7.9 SequenceInputStream类; 691
20.7.10 PrintStream类; 692
20.7.11 DataOutputStream和DataInputStream类; 695
20.7.12 RandomAccessFile类; 696
20.8 字符流; 697
20.8.1 Reader类; 697
20.8.2 Writer类; 698
20.8.3 FileReader类; 699
20.8.4 FileWriter类; 700
20.8.5 CharArrayReader类; 701
20.8.6 CharArrayWriter类; 702
20.8.7 BufferedReader; 703
20.8.8 BufferedWriter类; 705
20.8.9 PushbackReader类; 705
20.8.10 PrintWriter类; 706
20.9 Console类; 707
20.10 串行化; 709
20.10.1 Serializable接口; 709
20.10.2 Externalizable接口; 710
20.10.3 ObjectOutput接口; 710
20.10.4 ObjectOutputStream类; 710
20.10.5 ObjectInput接口; 711
20.10.6 ObjectInputStream类; 712
20.10.7 串行化示例; 713
20.11 流的优点; 715
第21章 探究NIO; 716
21.1 NIO类; 716
21.2 NIO的基础知识; 717
21.2.1 缓冲区; 717
21.2.2 通道; 719
21.2.3 字符集和选择器; 720
21.3 JDK7对NIO的增强; 721
21.3.1 Path接口; 721
21.3.2 Files类; 722
21.3.3 Path接口; 725
21.3.4 文件属性接口; 725
21.3.5 FileSystem、FileSystems和FileStore类; 727
21.4 使用NIO系统; 727
21.4.1 为基于通道的I/O使用NIO; 728
21.4.2 为基于流的I/O使用NIO; 737
21.4.3 为路径和文件系统操作使用NIO; 739
21.5 JDK7之前基于通道的例子; 747
21.5.1 读文件(JDK7之前); 747
21.5.2 写文件(JDK7之前); 751
第22章 联网; 754
22.1 联网的基础知识; 755
22.2 联网类和接口; 756
22.3 InetAddress类; 757
22.3.1 工厂方法; 757
22.3.2 实例方法; 758
22.4 Inet4Address类和Inet6Address类; 758
22.5 TCP/IP客户端套接字; 759
22.6 URL类; 762
22.7 URLConnection类; 764
22.8 HttpURLConnection类; 766
22.9 URI类; 769
22.10 cookie; 769
22.11 TCP/IP服务器套接字; 769
22.12 数据报; 770
22.12.1 DatagramSocket类; 770
22.12.2 DatagramPacket类; 771
22.12.3 数据报示例; 772
第23章 Applet类; 774
23.1 applet的两种类型; 774
23.2 applet的基础知识; 775
23.3 applet的架构; 778
23.4 applet的骨架; 778
23.4.1 applet的初始化和终止; 780
23.4.2 重写update()方法; 781
23.5 简单的applet显示方法; 781
23.6 请求重画; 783
23.7 使用状态栏窗口; 786
23.8 HTML APPLET标记; 787
23.9 向applet传递参数; 788
23.10 getDocumentBase()和getCodeBase(); 791
23.11 AppletContext接口和showDocument()方法; 792
23.12 AudioClip接口; 794
23.13 AppletStub接口; 794
23.14 向控制台输出; 794
第24章 事件处理; 796
24.1 两种事件的处理机制; 797
24.2 委托事件模型; 797
24.2.1 事件; 797
24.2.2 事件源; 797
24.2.3 事件监听器; 798
24.3 事件类; 798
24.3.1 ActionEvent类; 800
24.3.2 AdjustmentEvent类; 800
24.3.3 ComponentEvent类; 801
24.3.4 ContainerEvent类; 802
24.3.5 FocusEvent类; 802
24.3.6 InputEvent类; 803
24.3.7 ItemEvent类; 804
24.3.8 KeyEvent类; 804
24.3.9 MouseEvent类; 805
24.3.11 TextEvent类; 808
24.3.10 MouseWheelEvent类; 807
24.3.12 WindowEvent类; 808
24.4 事件源; 809
24.5 事件监听器接口; 809
24.5.1 ActionListener接口; 810
24.5.2 AdjustmentListener接口; 810
24.5.3 ComponentListener接口; 810
24.5.4 ContainerListener接口; 811
24.5.5 FocusListener接口; 811
24.5.6 ItemListener接口; 811
24.5.7 KeyListener接口; 811
24.5.8 MouseListener接口; 811
24.5.9 MouseMotionListener接口; 812
24.5.10 MouseWheelListener接口; 812
24.5.11 TextListener接口; 812
24.5.12 WindowFocusListener接口; 812
24.5.13 WindowListener接口; 812
24.6 使用委托事件模型; 813
24.6.1 处理鼠标事件; 813
24.6.2 处理键盘事件; 816
24.7 适配器类; 819
24.8 内部类; 820
第25章 AWT介绍:使用窗口、图形和文本; 824
25.1 AWT类; 825
25.2 窗口基本元素; 827
25.2.1 Component类; 828
25.2.2 Container类; 828
25.2.3 Panel类; 828
25.2.4 Window类; 828
25.2.5 Frame类; 828
25.2.6 Canvas类; 828
25.3 使用框架窗口; 829
25.3.1 设置窗口的尺寸; 829
25.3.2 隐藏和显示窗口; 829
25.3.3 设置窗口的标题; 829
25.3.4 关闭框架窗口; 830
25.4 在基于AWT的applet中创建框架窗口; 830
25.5 创建基于窗口的程序; 836
25.6 在窗口中显示信息; 838
25.7 使用图形; 839
25.7.1 绘制直线; 839
25.7.2 绘制矩形; 839
25.7.3 绘制椭圆和圆; 840
25.7.4 绘制弧形; 840
25.7.5 绘制多边形; 840
25.7.6 演示绘制方法; 840
25.7.7 改变图形的大小; 842
25.8 使用颜色; 843
25.8.1 Color类的方法; 844
25.8.2 设置当前图形的颜色; 845
25.8.3 一个演示颜色的applet; 845
25.9 设置绘图模式; 846
25.10 使用字体; 848
25.10.1 确定可用字体; 849
25.10.2 创建和选择字体; 850
25.10.3 获取字体信息; 852
25.11 使用FontMetrics管理文本输出; 853
25.11.1 显示多行文本; 854
25.11.2 居中显示文本; 856
25.11.3 对齐多行文本; 857
第26章 使用AWT控件、布局管理器和菜单; 862
26.1 AWT控件的基础知识; 863
26.1.1 添加和移除控件; 863
26.1.2 响应控件; 864
26.1.3 HeadlessException异常; 864
26.2 使用标签; 864
26.3 使用命令按钮; 865
26.4 使用复选框; 869
26.5 使用复选框组; 871
26.6 使用下拉列表; 872
26.7 使用列表框; 874
26.8 管理滚动条; 877
26.9 使用TextField; 880
26.10 使用TextArea; 882
26.11 理解布局管理器; 884
26.11.1 FlowLayout布局管理器; 884
26.11.2 BorderLayout布局管理器; 886
26.11.3 使用Insets; 888
26.11.4 GridLayout布局管理器; 889
26.11.5 CardLayout布局管理器; 891
26.11.6 GridBagLayout布局管理器; 894
26.12 菜单栏和菜单; 899
26.13 对话框; 904
26.14 FileDialog类; 910
26.15 关于重写pain()方法; 911
第27章 图像; 914
27.1 文件格式; 915
27.2 图像基础:创建、加载与显示; 915
27.2.1 创建Image对象; 915
27.2.2 加载图像; 916
27.2.3 显示图像; 916
27.3 ImageObserver接口; 918
27.4 双缓冲; 919
27.5 MediaTracker类; 921
27.6 ImageProducer接口; 924
27.7 ImageConsumer接口; 926
27.8 ImageFilter类; 929
27.8.1 CropimageFilter类; 929
27.8.2 RGBimageFilter类; 931
27.9 其他图像类; 942
第28章 并发使用工具; 944
28.1 并发API包; 945
28.1.1 java.util.concurrent包; 945
28.1.2 Java.util.concurrent.atomic包; 946
28.1.3 java.util.concurrent.locks包; 946
28.2 使用同步对象; 946
28.2.1 Semaphore类; 947
28.2.2 CountDownLatch类; 952
28.2.3 CyclicBarrier类; 954
28.2.4 Exchanger类; 957
28.2.5 Phaser类; 959
28.3 使用执行器; 966
28.3.1 一个简单的执行器示例; 967
28.3.2 使用Callable和Future接口; 969
28.4 TimeUnit枚举; 972
28.5 并发集合; 973
28.6 锁; 974
28.7 原子操作; 976
28.8 通过Fork/Join框架进行并行编程; 978
28.8.1 主要的Fork/Join类; 978
28.8.2 分而治之的策略; 981
28.8.3 一个简单的Fork/Join示例; 982
28.8.4 理解并行级别带来的影响; 985
28.8.5 一个使用RecursiveTask<V>的例子; 988
28.8.6 异步执行任务; 990
28.8.7 取消任务; 991
28.8.8 确定任务的完成状态; 991
28.8.9 重新启动任务; 991
28.8.10 深入研究; 992
28.8.11 关于Fork/Join框架的一些提示; 993
28.9 并发实用工具与Java传统方式的比较; 993
第29章 流API; 996
29.1 流的基础知识; 997
29.1.1 流接口; 997
29.1.2 如何获得流; 999
29.1.3 一个简单的流示例; 1000
29.2 缩减操作; 1003
29.3 使用并行流; 1005
29.4 映射; 1008
29.5 收集; 1012
29.6 迭代器和流; 1016
29.6.1 对流使用迭代器; 1016
29.6.2 使用Spliterator; 1017
29.7 流API中更多值得探索的地方; 1020
第30章 正则表达式和其他包; 1022
30.1 核心JavaAPI包; 1023
30.2 正则表达式处理; 1025
30.2.1 Pattem类; 1025
30.2.2 Matcher类; 1025
30.2.3 正则表达式的语法; 1026
30.2.4 演示匹配模式; 1027
30.2.5 模式匹配的两个选项; 1032
30.2.6 探究正则表达式; 1033
30.3 反射; 1033
30.4 远程方法调用; 1037
30.5 使用java.text格式化日期和时间; 1040
30.5.1 DataFormat类; 1040
30.5.2 SimpleDateFormat类; 1042
30.6 JDK8新增的时间和日期API; 1044
30.6.1 时间和日期的基础知识; 1045
30.6.2 格式化日期和时间; 1046
30.6.3 解析日期和事件字符串; 1049
30.7 探究java.time包的其他方面; 1050
第三部分 使用Swing进行GUI编程; 1052
第31章 Swing简介; 1054
31.1 Swing的起源; 1055
31.2 Swing以AWT为基础; 1055
31.3 两个关键的Swing特性; 1055
31.3.1 Swing组件是轻量级的; 1056
31.3.2 Swing支持可插入外观; 1056
31.4 MVC连接; 1056
31.5 组件与容器; 1057
31.5.1 组件; 1057
31.5.2 容器; 1058
31.5.3 顶级容器窗格; 1058
31.6 Swing包; 1059
31.7 一个简单的Swing应用程序; 1059
31.8 事件处理; 1063
31.9 创建Swing applet; 1066
31.10 在Swing中绘图; 1069
31.10.1 绘制的基础知识; 1069
31.10.2 计算可绘制区域; 1070
第32章 探索Swing; 1074
32.1 JLabel与ImageIcon; 1075
32.2 JTextField; 1076
32.3 Swing按钮; 1078
32.3.1 JButton; 1078
32.3.2 JToggleButton; 1081
32.3.3 复选框; 1083
32.3.4 单选按钮; 1085
32.4 JTabbedPane; 1088
32.5 JScrollPane; 1090
32.6 JList; 1092
32.7 JComboBox; 1095
32.8 树; 1098
32.9 JTable; 1101
第33章 Swing菜单简介; 1104
33.1 菜单的基础知识; 1105
33.2 JMenuBar、JMenu和JMenuItem概述; 1106
33.2.1 JMenuBar; 1106
33.2.2 JMenu; 1107
33.2.3 JMenuItem; 1108
33.3 创建主菜单; 1109
33.4 向菜单项添加助记符和加速键; 1113
33.5 向菜单项添加图片和工具提示; 1115
33.6 使用JRadioButtonMenuItem和JCheckBoxMenuItem; 1116
33.7 创建弹出菜单; 1119
33.8 创建工具栏; 1121
33.9 使用动作; 1124
33.10 完整演示MenuDemo程序; 1129
33.11 继续探索Swing; 1136
第四部分 使用JavaFX进行GUI编程; 1138
第34章 JavaFX GUI编程简介; 1140
34.1 JavaFX的基础概念; 1141
34.1.1 JavaFX包; 1141
34.1.3 节点和场景图; 1142
34.1.2 Stage和Scene类; 1142
34.1.4 布局; 1142
34.1.5 Application类和生命周期方法; 1142
34.1.6 启动JavaFX应用程序; 1143
34.2 JavaFX应用程序的骨架; 1143
34.3 编译和运行JavaFX程序; 1146
34.4 应用程序线程; 1147
34.5 一个简单的JavaFX控件:Label; 1147
34.6 使用按钮和事件; 1149
34.6.1 事件的基础知识; 1149
34.6.2 按钮控件简介; 1150
34.6.3 演示事件处理和按钮; 1150
34.7 直接在画布上绘制; 1153
第35章 探究JavaFX控件; 1160
35.1 使用Image和ImageView; 1161
35.1.1 向标签添加图片; 1163
35.1.2 在按钮中使用图片; 1165
35.2 ToggleButton; 1168
35.3 RadioButton; 1170
35.3.1 处理开关组中的变化事件; 1174
35.3.2 处理单选按钮的另一种方式; 1175
35.4 CheckBox; 1177
35.5 ListView; 1181
35.5.1 ListView的滚动条; 1185
35.5.2 启用多项选择; 1185
35.6 ComoBox; 1186
35.7 TextField; 1189
35.8 ScrollPane; 1192
35.9 TreeView; 1195
35.10 效果和变换简介; 1200
35.10.1 效果; 1200
35.10.2 变量; 1201
35.10.3 演示效果和变换; 1202
35.11 添加工具提示; 1205
35.12 禁用控件; 1206
第36章 JavaFX菜单简介; 1208
36.1 菜单的基础知识; 1209
36.2 MenuBar、Menu和MenuItem概述; 1210
36.2.1 MenuBar; 1210
36.2.2 Menu; 1210
36.2.3 MenuItem; 1211
36.3 创建主菜单; 1212
36.4 向菜单项添加助记符和加速键; 1218
36.5 向菜单项添加图片; 1219
36.6 使用RadioMenuItem和CheckMenuItem; 1220
36.7 创建上下文菜单; 1222
36.8 创建工具栏; 1225
36.9 完整的MenuDemo程序; 1227
36.10 继续探究JavaFX; 1234
第五部分 应用Java; 1236
第37章 Java Bean; 1238
37.1 JavaBean是什么; 1239
37.2 JavaBean的优势; 1239
37.3 内省; 1239
37.3.1 属性的设计模式; 1239
37.3.2 事件的设计模式; 1241
37.3.3 方法与设计模式; 1241
37.3.4 使用BeanInfo接口; 1241
37.4 绑定属性与约束属性; 1242
37.5 持久性; 1242
37.6 定制器; 1243
37.7 JavaBean API; 1243
37.7.1 Introspector类; 1244
37.7.2 PropertyDescriptor类; 1245
37.7.3 EventSetDescriptor类; 1245
37.7.4 MethodDescriptor类; 1245
37.8 一个Bean示例; 1245
第38章 Servlet; 1250
38.1 背景; 1250
38.2 Servlet的生命周期; 1251
38.3 Servlet开发选项; 1252
38.4 使用Tomcat; 1252
38.5 一个简单的Servlet; 1254
38.5.1 创建和编译Servlet源代码; 1254
38.5.2 启动Tomcat; 1255
38.5.3 启动Web浏览器并请求Servlet; 1255
38.6 Servlet API; 1255
38.7 javax.servlet包; 1255
38.7.1 Servlet接口; 1256
38.7.2 ServletConfig接口; 1256
38.7.3 ServletContext接口; 1257
38.7.4 ServletRequest接口; 1257
38.7.5 ServletResponse接口; 1258
38.7.6 GenericServlet类; 1258
38.7.7 ServletInputStream类; 1259
38.7.8 ServletOutputStream类; 1259
38.7.9 servlet异常类; 1259
38.8 读取servlet参数; 1259
38.9 javax.servlet.http包; 1261
38.9.1 HttpServletRequest接口; 1261
38.9.2 HttpServletResponse接口; 1262
38.9.3 HttpSession接口; 1263
38.9.4 Cookie类; 1264
38.9.5 HttpServlet类; 1265
38.10 处理HTTP请求和相应; 1266
38.10.1 处理HTTP GET请求; 1266
38.10.2 处理HTTP POST请求; 1268
38.11 使用cookie; 1269
38.12 会话跟踪; 1271
附录 使用Java的文档注释; 1274
封底; 1281
2018-01-01
Java面试关键与综合软件项目开发全程实战
前言
致谢
第1章 面向对象程序设计
第2章 Java程序设计基础
第3章 Java的高级特性
第4章 Java的网络编程
第5章 数据结构和算法
第6章 JDBC编程
第7章 Java XML编程
第8章 HTML基础和进阶
第9章 JavaScript基础和进阶
第10章 Java Servlet技术
第11章 JSP技术
第12章 Struts开源框架技术
第13章 Hibernate开源框架应用
第14章 Spring开源框架应用
第15章 微博权限管理系统
第16章 一号通业务管理系统
2018-01-01
深入体验Java Web项目开发
Java Web技术是当今使用最为频繁的Web开发技术之一,在开发领域占据重要的地位。《深入体验Java Web项目开发》通过10个综合实例的实现过程,详细讲解Java Web在实践项目中的综合运用过程,这些项目从作者的学生时代写起,到作者成为软件工程师结束,一直贯穿于作者最重要的开发时期。, 《深入体验Java Web项目开发》分为10章,其内容如下:第1章讲解电子商务系统的具体实现流程;第2章讲解高校在线答疑系统的具体实现流程;第3章讲解综合供求信息网的具体实现流程;第4章讲解客户管理系统的具体实现流程;第5章讲解在线订购系统的具体实现流程;第6章讲解公告管理系统的具体实现流程;第7章讲解企业进销存系统的具体实现流程;第8章讲解OA办公自动化系统的具体实现流程;第9章讲解学校餐费管理系统的具体实现流程;第10章讲解典型企业快信系统的具体实现流程。在具体讲解每个实例时,都遵循项目的进度,从接到项目到具体开发,直到最后的调试和发布,内容循序渐进,并穿插了学习技巧和职场生存法则,引领读者全面掌握Java Web开发技术。, 《深入体验Java Web项目开发》不但适用于Java Web的初学者,也适于有一定Java Web基础的读者,还可以作为有一定造诣的程序员的参考书。在《深入体验Java Web项目开发》的配套光盘中,为读者提供了书中案例的源代码,以及详细的视频讲解。另外,还赠送十个案例的源代码,供读者学习使用。
2018-01-01
精通嵌入式Linux编程构建自己的GUI环境
带书签高清完整
第1章 概论
1.1 嵌入式系统的基本概念
1.2 嵌入式系统的特征
1.3 选择Linux构建嵌入式系统
1.4 GUI在嵌入式Linux系统中的地位及要求
1.5 用户界面概况
1.5.1 用户界面的历史
1.5.2 图形用户界面的特征
1.5.3 图形用户界面系统的结构模型
1.5.4 用户界面的发展:GUI+新人机交互技术
1.6 Linux图形环境及桌面平台简介
1.7 各种嵌入式 Linux上的图形库与GUI系统介绍
1.7.1 Qt/Embedded
1.7.2 MicroWindows/NanoX
1.7.3 MiniGUI
1.7.4 OpenGUI
1.7.5 GTK+
1.8 Linux系统中的多语言问题
1.9 一个嵌入式LinuxGUI系统开发的实例
1.9.1 开发GUI系统主要考虑的问题
1.9.2 后续讲解的实例
第2章 Linux基本编程知识
2.1 编译器的使用
2.2 函数库的使用
2.3 Makefile
2.4 GDB
2.5 建立交叉编译环境
2.5.1 什么是交叉编译环境
2.5.2 交叉编译的基本概念
2.5.3 建立arm_linux交叉编译环境
2.6 Linux下常见的图形库编程简介
2.6.1 Qt
2.6.2 GTK+
第3章 Linux高级程序设计简介
3.1 Linux IPC介绍
3.1.1 信号
3.1.2 管道
3.1.3 消息队列
3.1.4 信号量
3.1.5 共享内存
3.1.6 Domain Socket
3.2 Linux多线程编程介绍
3.2.1 创建线程
3.2.2 线程的退出与取消
3.2.3 线程退出时的同步问题
3.2.4 线程清理函数
3.2.5 线程取消状态
3.2.6 线程同步
3.2.7 第三方函数库
3.3 FrameBuffer编程简介
第4章 基本体系结构
4.1 基础知识
4.1.1 嵌入式Linux的GUI到底有什么用
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 进程创建与进程的管理
第5章 多窗口的设计与实现
第6章 GUI中的消息管理
第7章 窗口输出及无效区的管理
第8章 DC与GDI的设计与实现
第9章 控件实现
第10章 定制GUI对图像的支持
第11章 字库及输入法的实现
第12章 GUI的移植
第13章 LGUI应用开发模式
第14章 GUI系统的效率问题
后记——LGUI开发的一些体会
参考文献
2017-12-29
Unix-Linux编程实践教程(有书签pdf)+随书光盘ISO
本光盘为美国培生教育出版集团的原书《Understanding Unix/Linux Programming》的配盘,为学习本书提供了更好的帮助与参考,对教师也有很高的参考价值。
本书适合初学者,对于linux的一些指令用c重新写成,实践味很强。对于学linux云里雾里的人来说是一剂良药。设计到系统编程,游戏编程,网络编程。可以对linux初步掌握,对以后深入有较大好处。
豆瓣链接:https://book.douban.com/subject/1219329/
中文名: Unix/Linux编程实践教程
原名: Understanding UNIX/LINUX Programming
作者: Bruce Molay / 杨宗源 / 黄海涛译者: 杨宗源 / 黄海涛图书分类: 网络
资源格式: PDF+ISO随书光盘
版本: 扫描版
出版社: 清华大学出版社书号: 9787302096139发行时间: 2004年10月1日
地区: 大陆
语言: 简体中文
内容简介:
操作系统是计算机最重要的系统软件。Unix操作系统历经了几十年,至今仍是主流的操作系统。《Unix\Linux编程实践教程》通过解释Unix的工作原理,循序渐进地讲解实现Unix中系统命令的方法,让读者理解并逐步精通Unix系统编程,进而具有编制Unix应用程序的能力。书中采用启发式、举一反三、图示讲解等多种方法讲授,语言生动、结构合理、易于理解。每一章后均附有大量的习题和编程练习,以供参考。本书适合作为高等院校计算机及相关专业的教材和教学参考书,亦可作为有一定系统编程基础的开发人员的自学教材和参考手册。
基本信息:
原书名: Understanding Unix/Linux Programming A Guide to Theory and Practice
作者:Bruce Molay
译者: 杨宗源 黄海涛
丛书名: 国外经典教材·计算机科学与技术
出版社:清华大学出版社
ISBN:9787302096139
出版日期:2004 年10月
开本:16开
页码:495
版次:1-1
作者简介:
Bruce Molay,哈佛大学著名教授,从事Unix系统编程和教学十余年之久,本书就是在哈佛继续教育学院的Unix system Programming课程的基础上,结合作者的实践、教学经验编写而成。
目录:
第1章 unix系统编程概述
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 从用户的角度来理解unix
1.4.1 unix能做些什么
1.4.2 登录--运行程序--注销
1.4.3 目录操作
1.4.4 文件操作
1.5 从系统的角度来看unix
1.5.1 用户和程序之间的连接方式
1.5.2 网络桥牌
1.5.3 bc:unix的计算器
.1.5.4 从bc/dc到web
1.6 动手实践
1.7 工作步骤与概要图
1.7.1 接下来的工作步骤
1.7.2 unix的概要图
1.7.3 unix的发展历程
小结
第2章 用户、文件操作与联机帮助:编写who命令
2.1 介绍
2.2 关于命令who
2.3 问题1:who命令能做些什么
2.4 问题2:who命令是如何工作的
2.5 问题3:如何编写who
2.5.1 问题:如何从文件中读取数据结构
2.5.2 答案:使用open、read和close
2.5.3 编写wh01.c
2.5.4 显示登录信息
2.5.5 编写wh02.c
2.5.6 回顾与展望
2.6 编写cp(读和写)
2.6.1 问题1:cp命令能做些什么
2.6.2 问题2:cp命令是如何创建/重写文件的
2.6.3 问题3:如何编写cp
2.6.4 unix编程看起来好像很简单
2.7 提高文件i/o效率的方法:使用缓冲
2.7.1 缓冲区的大小对性能的影响
2.7.2 为什么系统调用需要很多时间
2.7.3 低效率的wh02.c
2.7.4 在wh02.c中运用缓冲技术
2.8 内核缓冲技术
2.9 文件读写
2.9.1 注销过程:做了些什么
2.9.2 注销过程:如何工作的
2.9.3 改变文件的当前位置
2.9.4 编写终端注销的代码
2.10 处理系统调用中的错误
小结
第3章 目录与文件属性:编写ls
3.1 介绍
3.2 问题1:1s命令能做什么
3.2.1 1s可以列出文件名和文件的属性
3.2.2 列出指定目录或文件的信息
3.2.3 经常用到的命令行选项
3.2.4 问题1的答案
3.3 文件树
3.4 问题2:1s是如何工作的
3.4.1 什么是目录
3.4.2 是否可以用open、read和close来操作目录
3.4.3 如何读目录的内容
3.5 问题3:如何编写ls
3.6 编写ls-1
3.6.1 问题1:ls-1能做些什么
3.6.2 问题2:ls-1是如何工作的
3.6.3 用stat得到文件信息
3.6.4 stat提供的其他信息
3.6.5 如何实现
3.6.6 将模式字段转换成字符
3.6.7 将用户/组id转换成字符串
3.6.8 编写ls2.c
3.7 三个特殊的位
3.7.1 set-user-id位
3.7.2 set-group-id位
3.7.3 sticky位
3.7.4 用ls-1看到的特殊属性
3.8 ls小结
3.9 设置和修改文件的属性
3.9.1 文件类型
3.9.2 许可位与特殊属性位
3.9.3 文件的链接数
3.9.4 文件所有者与组
3.9.5 文件大小
3.9.6 时间
3.9.7 文件名
小结
第4章 文件系统:编写pwd
4.1 介绍
4.2 从用户的角度看文件系统
4.2.1 目录和文件
4.2.2 目录命令
4.2.3 文件操作命令
4.2.4 针对目录树的命令
4.2.5 目录树的深度几乎没有限制
4.2.6 unix文件系统小结
4.3 unix文件系统的内部结构
4.3.1 第一层抽象:从磁盘到分区
4.3.2 第二层抽象:从磁盘到块序列
4.3.3 第三层抽象:从块序列到三个区域的划分
4.3.4 文件系统的实现:创建一个文件的过程
4.3.5 文件系统的实现:目录的工作过程
4.3.6 文件系统的实现:cat命令的工作原理
4.3.7 i-节点和大文件
4.3.8 unix文件系统的改进
4.4 理解目录
4.4.1 理解目录结构
4.4.2 与目录树相关的命令和系统调用
4.5 编写pwd
4.5.1 pwd的工作过程
4.5.2 pwd的一种版本
4.6 多个文件系统的组合:由多棵树构成的树
4.6.1 装载点
4.6.2 多重i-节点号和设备交叉链接
4.6.3 符号链接
小结
第5章 连接控制:学习stty
5.1 为设备编程
5.2 设备就像文件
5.2.1 设备具有文件名
5.2.2 设备和系统调用
5.2.3 例子:终端就像文件
5.2.4 设备文件的属性
5.2.5 编写write程序
5.2.6 设备文件和i-节点
5.3 设备与文件的不同之处
5.4 磁盘连接的属性
5.4.1 属性1:缓冲
5.4.2 属性2:自动添加模式
5.4.3 用open控制文件描述符
5.4.4 磁盘连接小结
5.5 终端连接的属性
5.5.1 终端的i/o并不如此简单
5.5.2 终端驱动程序
5.5.3 stty命令
5.5.4 编写终端驱动程序:关于设置
5.5.5 编写终端驱动程序:关tx数
5.5.6 编写终端驱动程序:关于位
5.5.7 编写终端驱动程序:几个程序例子
5.5.8 终端连接小结
5.6 其他设备编程:ioctl
5.7 文件、设备和流
小结
第6章 为用户编程:终端控制和信号
6.1 软件工具与针对特定设备编写的程序
6.2 终端驱动程序的模式
6.2.1 规范模式:缓冲和编辑
6.2.2 非规范处理
6.2.3 终端模式小结
6.3 编写一个用户程序:play_again.c
6.4 信号
6.4.1 ctrl-c做什么
6.4.2 信号是什么
6.4.3 进程该如何处理信号
6.4.4 信号处理的例子
6.5 为处理信号做准备:play_again4.c
6.6 进程终止
6.7 为设备编程
小结
第7章 事件驱动编程:编写一个视频游戏
7.1 视频游戏和操作系统
7.2 任务:单人弹球游戏(pong)
7.3 屏幕编程:curses库
7.3.1 介绍curses
7.3.2 curses内部:虚拟和实际屏幕
7.4 时间编程:sleep
7.5 时钟编程1:alarms
7.5.1 添加时延:sleep
7.5.2 sleep()是如何工作的:使用unix中的alarms
7.5.3 调度将要发生的动作
7.6 时间编程2:间隔计时器
7.6.1 添加精度更高的时延:usleep
7.6.2 三种计时器:真实、进程和实用
7.6.3 两种间隔:初始和重复
7.6.4 用间隔计时器编程
7.6.5 计算机有几个时钟
7.6.6 计时器小结
7.7 信号处理1:使用signal
7.7.1 早期的信号处理机制
7.7.2 处理多个信号
7.7.3 测试多个信号
7.7.4 信号机制其他的弱点
7.8 信号处理2:sigaction
7.8.1 处理多个信号:sigaction
7.8.2 信号小结
7.9 防止数据损毁(datacorruption)
7.9.1 数据损毁的例子
7.9.2 临界(criticalsections)
7.9.3 阻塞信号:sigprocmask和sigsetops
7.9.4 重入代码(reentrantcode):递归调用的危险
7.9.5 视频游戏中的临界区
7.10 kill:从另--个进程发送的信号
7.11 使用计时器和信号:视频游戏
7.11.1 bounceld.c:在一条线上控制动画
7.11.2 bounce2d.c:两维动画
7.11.3 完成游戏
7.12 输入信号,异步i/o
7.12.1 使用异步i/o
7.12.2 方法1:使用oasync
7.12.3 方法2:使用aio..read
7.12.4 弹球程序中需要异步读人吗
7.12.5 异步输入、视频游戏和操作系统
小结
第8章 进程和程序:编写命令解释器sh
8.1 进程=运行中的程序
8.2 通过命令ps学习进程
8.2.1 系统进程
8.2.2 进程管理和文件管理
8.2.3 内存和程序
8.3 shell:进程控制和程序控制的--个工具
8.4 shell是如何运行程序的
8.4.1 shell的主循环
8.4.2 问题1:一个程序如何运行另一个程序
8.4.3 问题2:女口何建立新的进程
8.4.4 问题3:父进程如何等待子进程的退出
8.4.5 小结:shell如何运行程序
8.5 实现一个shell:psh2.c
8.6 思考:用进程编程
8.7 exit和exec的其他细节
8.7.1 进程死亡:exit和_exit
8.7.2 exec家族
小结
第9章 可编程的shell、shell变量和环境:编写自己的shell
9.1 shell编程
9.2 什么是以及为什么要使用shell脚本语言
9.3 smshl--命令行解析
9.4 shell中的流程控制
9.4.1 if语句做些什么
9.4.2 if是女口何工作的
9.4.3 在stash中增加if
9.4.4 smsh2.c:修改后的代码
9.5 shell变量:局部和全局
9.5.1 使用shell变量
9.5.2 变量的存储
9.5.3 增加变量命令:built-ins
9.5.4 效果如何
9.6 环境:个性化设置
9.6.1 使用环境
9.6.2 什么是环境以及它是如何工作的
9.6.3 在smsh中增加环境处理
9.6.4 varlib.c的代码
9.7 已实现的shell的功能
小结
第10章 i/o重定向和管道
10.1 shell编程
10.2 一个shell应用程序:监视系统用户
10.3 标准i/o与重定向的若干概念
10.3.1 概念1:3个标准文件描述符
10.3.2 默认的连接:tty
10.3.3 程序都输出到stdout
10.3.4 重定向i/o的是shell而不是程序
10.3.5 理解i/o重定向
10.3.6 概念2:“最低可用文件描述符(lowest-available-fd)”原则
10.3.7 两个概念的结合
10.4 如何将stdin定向到文件
10.4.1 方法1:closethenopen
10.4.2 方法2:open..close..dup..close
10.4.3 系统调用dup小结
10.4.4 方法3:open..dup2..close
10.4.5 shell为其他程序重定向stdin
10.5 为其他程序重定向i/o:who]userlist
10.6 管道编程
10.6.1 创建管道
10.6.2 使用fork来共享管道
10.6.3 使用pipe、fork以及exec
10.6.4 技术细节:管道并非文件
小结
第11章 连接到近端或远端的进程:服务器与socket(套接宇)
11.1 产品和服务
11.2 一个简单的比喻:饮料机接口
11.3 bc:unix中使用的计算器
11.3.1 编写bc:pipe、fork、dup、exec
11.3.2 对协同进程的讨论
11.3.3 fdopen:让文件描述符像文件--样使用
11.4 popen-让进程看似文件
11.4.1 popen的功能
11.4.2 实现popen:使用fdopen命令
11.4.3 访问数据:文件、应用程序接el(apl)和服务器
11.5 socket:与远端进程相连
11.5.1 类比:“电话中传来声音:现在时间是…”
11.5.2 因特网时间、dap和天气服务器
11.5.3 服务列表:众所周知的端口
11.5.4 编写timeserv . cc时间服务器
11.5.5 测试timeserv.c
11.5.6 编写timecint.c:时间服务客户端
11.5.7 测试timecint.c
11.5.8 另一种服务器:远程的ls
11.6 软件精灵
小结
第12章 连接和协议:编写web服务器
12.1 服务器设计重点
12.2 三个主要操作
12.3 操作1和操作2:建立连接
12.3.1 操作1:建立服务器端socket
12.3.2 操作2:建立到服务器的连接
12.3.3 socklib.c
12.4 操作3:客户/服器的会话
12.4.1 使用socklib.c的timeserv/timecint
12.4.2 第2版的服务器:使用fork
12.4.3 服务器的设计问题:diy或代理
12.5 编写web服务器
12.5.1 web服务器功能
12.5.2 设计web服务器
12.5.3 web服务器协议
12.5.4 编写web服务器
12.5.5 运行web服务器
12.5.6 webserv的源程序
12.5.7 比较web服务器
小结
第13章 基于数据报(datagram)的编程:编写许可证服务器
13.1 软件控制
13.2 许可证控制简史
13.3 一个非计算机系统实例:轿车管理系统
13.3.1 轿车钥匙管理描述
13.3.2 用客户/服务器方式管理轿车
13.4 许可证管理
13.4.1 许可证服务系统:它做些什么
13.4.2 许可证服务系统:如何工作
13.4.3 一个通信系统的例子
13.5 数据报socket
13.5.1 流与数据报的比较
13.5.2 数据报编程
13.5.3 sendto和recvfrom的小结
13.5.4 数据报应答
13.5.5 数据报小结
13.6 许可证服务器版本1.0
13.6.1 客户端版本1
13.6.2 服务器端版本1
13.6.3 测试版本1
13.6.4 进一步的工作
13.7 处理现实的问题
13.7.1 处理客户端崩溃
13.7.2 处理服务器崩溃
13.7.3 测试版本2
13.8 分布式许可证服务器
13.9 unix域socket
13.9.1 文件名作为socket地址
13.9.2 使用unix域socket编程
13.10 小结;socket和服务器
小结
第14章 线程机制:并发函数的使用
14.1 同一时刻完成多项任务
14.2 函数的执行路线
14.2.1 一个单线程程序
14.2.2 一个多线程程序
14.2.3 相关函数小结
14.3 线程间的分工合作
14.3.1 例1:incrprint.c
14.3.2 例2:twordcount.c
14.3.3 线程内部的分工合作:小结
14.4 线程与进程
14.5 线程间互通消息
14.5.1 通知选举中心
14.5.2 使用条件变量编写程序
14.5.3 使用条件变量的函数
14.5.4 回到web服务器的例子
14.6 多线程的web服务器
14.6.1 web服务器程序的改进
14.6.2 多线程版本允许一个新的功能
14.6.3 防止僵尸线程(zombiethreads):独立线程
14.6.4 web服务器代码
14.7 线程和动画
14.7.1 使用线程的优点
14.7.2 多线程版本的bouneeld.c
14.7.3 基于多线程机制的多重动画:tanimate.c
14.7.4 tanimate.c中的互斥量
14.7.5 屏幕控制线程
小结
第15章 进程间通信(1pc)
15.1 编程方式的选择
15.2 talk命令:从多个数据源读取数据
15.2.1 同时从两个文件描述符读取数据
15.2.2 select系统调用
15.2.3 select与talk
15.2.4 select与poll
15.3 通信的选择
15.3.1 一个问题的三种解决方案
15.3.2 通过文件的进程间通信
15.3.3 命名管道
15.3.4 共享内存
15.3.5 各种进程间通信方法的比较
15.4 进程之间的分工合作
15.4.1 文件锁
15.4.2 信号量(semaphores)
15.4.3 socket及fifo与共享的存储
15.5 打印池
15.5.1 多个写者、一个读者
15.5.2 客户/服务器模型
15.6 纵观ipc
15.7 连接与游戏
小结
2017-11-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人