自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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

神经⽹络与深度学习

神经网络对于想搞深度学习却不得入门的同学,好好看看这本书

2017-11-27

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关注的人

提示
确定要删除当前文章?
取消 删除