Java编程思想第四版.pdf百度网盘下载地址
Java编程思想第四版.pdf百度网盘下载地址
JavaScript权威指南(第6版)中文版.pdf百度网盘下载地址
JavaScript权威指南(第6版)中文版.pdf百度网盘下载地址
how tomcat works中文版.pdf百度网盘下载地址
how tomcat works中文版.pdf百度网盘下载地址
Java RESTful Web Service实战 [韩陆著][机械工业出版社][2014.09][298页].pdf百度网盘下载地址
Java RESTful Web Service实战 [韩陆著][机械工业出版社][2014.09][298页].pdf百度网盘下载地址
CSS权威指南__(第三版).pdf百度网盘下载地址
CSS权威指南__(第三版).pdf百度网盘下载地址
TOMCAT权威指南第二版.pdf百度网盘下载地址
TOMCAT权威指南第二版.pdf百度网盘下载地址
《数据结构》算法实现及解析.pdf百度网盘下载地址
《数据结构》算法实现及解析.pdf百度网盘下载地址
《数据结构算法实现及解析》配有光盘,光盘中包括书中所有程序及用标准C语言改写的程序。所有程序均在计算机上运行通过。《数据结构算法实现及解析》适用于使用教科书的大中专学生和自学者。书中的基本操作函数也可供从事计算机工程与应用工作的科技人员参考和采用。
《机器学习实战》(高清中文版PDF+高清英文版PDF+源代码)百度网盘下载地址
《机器学习实战》(高清中文版PDF+高清英文版PDF+源代码)百度网盘下载地址
[Java参考文档].JDK_API_1_6_zh_CN.CHM百度网盘下载地址
[Java参考文档].JDK_API_1_6_zh_CN.CHM百度网盘下载地址
[Java.7入门经典].(Beginning.Java.).Ivor.Horton(English).pdf百度网盘下载地址
编程导师Ivor Horton全新著作,引领无数全球编程爱好者进入开发殿堂 最为细致、全面的Java入门书籍!
内容简介
无论学习Java是为了编写嵌入网页的定制applet,还是为了编写大型应用程序,《Java7入门经典》都十分适合阅读。《Java7入门经典》是关于Java语言讲解最为细致、全面的入门书籍,介绍了使用的Java JDK 7开发程序所需要的所有基础知识。书中包含大量的示例,清晰地解释了涉及的关键概念,演示了Java开发的复杂细节。在阅读各个章节的过程中,您还能获得无价的编程经验,并逐步开始编写功能全面的Java程序。Ivor Horton在编写入门类编程图书方面独具心得,著作深受好评。Java SE 7相对之前发布版本更新了超过30%的语言特性,《Java7入门经典》从基础知识入门,介绍了使用这一发布版本编写Java程序的方方面面,涵盖了Java的所有语言新特性,可为读者打下坚实的基础。
作者简介
Ivor Horton,是Java、C和C++编程语言方面的杰出作者,由他执笔的图书都非常有名,如《Visual C++ 2010入门经典(第5版)》、《C语言入门经典(第4版)》、《C++入门经典(第3版)》等。他编写的图书十分适合初学者学习,讲解细腻、全面,示例丰富,深受读者好评。Ivor Horton还是私人实践方面的系统顾问。
目录
第1章 java简介
1.1 java概览
1.2 java语言的特性
1.3 学习java
1.3.1 java程序
1.3.2 java学习路线图
1.4 java环境
1.5 java中的面向对象编程
1.5.1 什么是对象
1.5.2 如何定义对象类
1.5.3 对象操作
1.5.4 java程序语句
1.5.5 封装
1.5.6 类与数据类型
1.5.7 类与子类
1.5.8 使用对象的优势
1.5.9 标记
1.5.10 泛型类
1.6 java程序结构
.1.6.1 java的类库
1.6.2 java应用程序
1.7 java和unicode
1.8 小结
1.9 资源
第2章 程序、数据、变量和计算
2.1 数据和变量
2.1.1 变量的命名
2.1.2 变量名与unicode
2.1.3 变量与类型
2.2 整数数据类型
2.3 浮点数数据类型
2.3.1 浮点数字面量
2.3.2 声明浮点型变量
2.4 固定变量的值
2.5 算术运算
2.5.1 整数计算
2.5.2 整数除法和余数
2.5.3 增量与减量运算符
2.5.4 短整数类型的计算
2.5.5 整数算术中的错误
2.5.6 浮点计算
2.5.7 其他浮点算术运算符
2.5.8 浮点算术中的错误情况
2.5.9 混合算术表达式
2.5.10 显式转换
2.5.11 赋值中的自动类型转换
2.6 op=运算符
2.7 数学函数和常量
2.8 存储字符
2.8.1 字符转义序列
2.8.2 字符算术
2.9 位运算
2.9.1 使用and和or运算符
2.9.2 使用异或运算符
2.9.3 位移操作
2.9.4 位操作方法
2.10 取值范围为固定整数值集合的变量
2.11 布尔变量
2.12 运算符的优先级
2.13 程序注释
2.14 小结
第3章 循环与逻辑
3.1 决策
3.1.1 比较
3.1.2 if语句
3.1.3 嵌套的if语句
3.1.4 比较枚举值
3.2 逻辑运算符
3.2.1 逻辑与操作
3.2.2 逻辑或操作
3.2.3 异或操作
3.2.4 布尔非操作
3.2.5 使用标准库方法测试字符
3.3 条件运算符
3.4 switch语句
3.5 变量的作用域
3.6 循环
3.6.1 循环的种类
3.6.2 使用浮点值计数
3.6.3 嵌套循环
3.6.4 continue语句
3.6.5 带标签的continue语句
3.6.6 在循环中使用break语句
3.7 断言
3.8 小结
第4章 数组与字符串
4.1 数组
4.1.1 数组变量
4.1.2 定义数组
4.1.3 数组长度
4.1.4 访问数组元素
4.1.5 重用数组变量
4.1.6 初始化数组
4.1.7 使用数组
4.1.8 二维数组
4.1.9 字符数组
4.2 字符串
4.2.1 字符串字面量
4.2.2 创建string对象
4.2.3 字符串数组
4.3 字符串操作
4.3.1 连接字符串
4.3.2 比较字符串
4.3.3 字符串排序
4.3.4 访问字符串中的字符
4.3.5 在字符串中查找字符
4.3.6 查找子字符串
4.3.7 提取子字符串
4.3.8 string对象的修改版本
4.3.9 从string对象创建字符数组
4.3.10 使用字符串执行基于集合的for循环
4.3.11 在字符串中获取字节数组形式的字符
4.3.12 从字符数组中创建string对象
4.4 可变字符串
4.4.1 创建stringbuffer对象
4.4.2 stringbuffer对象的容量
4.4.3 为stringbuffer对象修改字符串的长度
4.4.4 增长stringbuffer对象
4.4.5 寻找子字符串的位置
4.4.6 替换缓冲区中的子字符串
4.4.7 插入字符串
4.4.8 从可变字符串中提取字符
4.4.9 可变字符串的其他操作
4.4.10 从stringbuffer对象创建string对象
4.5 小结
第5章 定义类
5.1 类的定义
5.1.1 类定义中的域
5.1.2 类定义中的方法
5.1.3 访问变量和方法
5.1.4 final域
5.2 定义类
5.3 定义方法
5.3.1 方法的返回值
5.3.2 参数列表
5.3.3 定义类方法
5.3.4 访问方法中的类数据成员
5.3.5 变量this
5.3.6 初始化数据成员
5.4 构造函数
5.4.1 默认构造函数
5.4.2 创建类的对象
5.5 定义和使用类
5.6 方法重载
5.6.1 多个构造函数
5.6.2 使用构造函数复制对象
5.7 使用对象
5.8 递归
5.9 理解包
5.9.1 对类打包
5.9.2 将类从包添加到程序中
5.9.3 程序中的包和名称
5.9.4 导入静态类成员
5.9.5 标准包
5.10 类成员的访问控制
5.10.1 使用访问属性
5.10.2 设定访问属性
5.10.3 选择访问属性
5.11 嵌套类
5.11.1 静态嵌套类
5.11.2 使用非静态嵌套类
5.11.3 使用非顶级类的嵌套类
5.11.4 本地嵌套类
5.12 小结
第6章 扩展类与继承
6.1 使用已有的类
6.2 类继承
6.2.1 继承数据成员
6.2.2 继承方法
6.2.3 覆盖基类方法
6.3 @override标记
6.4 选择基类访问属性
6.5 多态
6.6 多级继承
6.7 抽象类
6.8 通用超类
6.8.1 tostring()方法
6.8.2 判定对象的类型
6.8.3 复制对象
6.9 接受可变数目参数的方法
6.10 转换对象
6.10.1 转换对象的时机
6.10.2 识别对象
6.11 枚举进阶
6.12 设计类
6.13 使用final修饰符
6.14 接口
6.14.1 在程序中封装常量
6.14.2 用接口声明方法
6.14.3 扩展接口
6.14.4 使用接口
6.14.5 将接口类型作为方法的参数使用
6.14.6 在接口定义中嵌套类
6.14.7 接口与真实环境
6.15 匿名类
6.16 小结
第7章 异常
7.1 异常的基本思想
7.2 异常类型
7.2.1 error类型的异常
7.2.2 runtimeexception类型的异常
7.2.3 exception类的其他子类
7.3 处理异常
7.3.1 设定方法能够抛出的异常
7.3.2 处理异常
7.3.3 try代码块
7.3.4 catch代码块
7.3.5 在一个代码块中捕获多种异常类型
7.3.6 finally代码块
7.3.7 构造方法
7.3.8 执行顺序
7.3.9 嵌套的try代码块
7.3.10 重新抛出异常
7.4 异常对象
7.4.1 throwable类
7.4.2 标准异常
7.5 定义自己的异常
7.5.1 定义异常类
7.5.2 抛出自己的异常
7.5.3 异常的抛出策略
7.6 小结
第8章 理解流
8.1 流与输入输出操作
8.2 流的概念
8.2.1 输入流与输出流
8.2.2 二进制流与字符流
8.3 输入输出类
8.3.1 基本的输入流操作
8.3.2 缓冲输入流
8.3.3 基本的输出流操作
8.3.4 流读取器和编写器
8.4 标准流
8.4.1 从键盘读入数据
8.4.2 写到命令行中
8.4.3 printf()方法
8.4.4 将数据格式化为字符串
8.5 小结
第9章 访问文件与目录
9.1 访问文件系统
9.2 使用path对象
9.2.1 访问系统属性
9.2.2 设置系统属性
9.2.3 测试和检查path对象
9.2.4 查询文件和目录
9.2.5 获取文件属性
9.2.6 其他的路径操作
9.3 创建与删除目录和文件
9.3.1 创建目录
9.3.2 创建文件
9.3.3 删除文件和目录
9.4 获取目录内容
9.5 关闭流
9.6 移动与复制文件和目录
9.6.1 对文件或目录重命名
9.6.2 复制文件和目录
9.6.3 遍历文件树
9.7 小结
第10章 写文件
10.1 文件i/o基础
10.2 文件输出
10.3 通过输出流写文件
10.4 使用writer写文件
10.5 缓冲区
10.5.1 缓冲区的容量
10.5.2 缓冲区的位置和限制
10.5.3 设置位置和限制
10.5.4 创建缓冲区
10.5.5 标记缓冲区
10.5.6 缓冲区数据传输
10.5.7 使用视图缓冲区
10.5.8 准备缓冲区以输出到文件中
10.6 使用通道写文件
10.6.1 通道接口
10.6.2 通道操作
10.6.3 为文件获取通道
10.6.4 通道写操作
10.7 文件写操作
10.7.1 将缓冲区的一部分写入到文件中
10.7.2 文件的位置
10.7.3 使用视图缓冲区加载字节缓冲区
10.7.4 将变长字符串写入到文件中
10.7.5 直接和间接缓冲区
10.7.6 使用通道写入数值数据
10.7.7 将混合数据写入到文件中
10.7.8 从多个缓冲区写入
10.8 强制将数据写入到设备中
10.9 小结
第11章 读文件
11.1 文件读取操作
11.1.1 使用输入流读取文件
11.1.2 使用缓冲读取器读取文件
11.2 使用通道读取文件
11.2.1 读取文本文件
11.2.2 从缓冲区获取数据
11.2.3 读取二进制数据
11.2.4 读取混合数据
11.2.5 压缩缓冲区
11.3 复制文件
11.4 随机访问文件
11.5 内存映射文件
11.5.1 锁住文件
11.5.2 锁住文件的特定部分
11.5.3 实用的文件加锁考量
11.6 小结
第12章 序列化对象
12.1 在文件中存储对象
12.2 将对象写入到文件中
12.2.1 将基本类型数据写入到对象流中
12.2.2 实现serializable接口
12.3 从文件读取对象
12.3.1 判定反序列化对象所属的类
12.3.2 使用对象序列化
12.3.3 手动序列化类
12.3.4 序列化问题和困难
12.4 小结
第13章 泛型
13.1 什么是泛型
13.2 定义泛型类
13.2.1 实现泛型类
13.2.2 实例化泛型类
13.2.3 泛型类实例在运行时的类型
13.2.4 泛型类实例之间的关系
13.2.5 多个类型参数
13.2.6 类型参数的作用域
13.2.7 泛型类的静态域
13.2.8 类型参数的边界
13.3 泛型类和泛型接口
13.3.1 实现针对容器类的基于
集合的循环
13.3.2 实现迭代器的功能
13.3.3 二叉树的参数化类型
13.4 原生类型的变量
13.5 使用通配符类型参数
13.5.1 针对通配符的约束
13.5.2 深入class类
13.6 数组与参数化类型
13.7 参数化方法
13.8 参数化类型及继承
13.9 总结
第14章 集合框架
14.1 理解集合框架
14.2 对象集合
14.2.1 集
14.2.2 序列
14.2.3 地图
14.3 迭代器
14.4 集合类
14.5 使用enumset
14.6 数组集合类
14.6.1 创建矢量
14.6.2 存储对象
14.6.3 检索对象
14.6.4 移除对象
14.6.5 搜索对象
14.6.6 应用矢量
14.6.8 对集合中的元素进行排序
14.6.9 堆栈存储器
14.7 链表
14.8 使用地图
14.8.1 散列过程
14.8.2 把自己的类用作键
14.8.3 创建hashmap容器
14.8.4 存储、检索和移除对象
14.8.5 处理地图中的所有元素
14.9 小结
14.10 练习
第15章 一组有用的类
15.1 数组的实用方法
15.1.1 填充数组
15.1.2 复制数组
15.1.3 比较数组
15.1.4 数组的排序
15.1.5 搜索数组
15.1.6 将数组的内容用作字符串
15.2 observable和observer对象
15.2.1 定义observable对象的类
15.2.2 observable类的方法
15.3 生成随机数
15.4 日期和时间
15.4.1 date类
15.4.2 解释date对象
15.4.3 公历
15.5 正则表达式
15.6 使用scanner对象
15.6.1 创建scanner对象
15.6.2 从scanner对象获取输入
15.6.3 测试标记
15.6.4 为标记定义自己的模式
15.7 小结
15.8 练习
第16章 线程
16.1 理解线程
16.1.1 创建线程
16.1.2 停止线程
16.1.3 连接线程
16.1.4 线程的调度
16.1.5 实现runnable接口
16.2 管理线程
16.2.1 同步
16.2.2 死锁
16.3 使用执行器
16.3.1 使用执行器
16.3.2 执行callable[v]任务
16.3.3 future[v]对象方法
16.3.4 关闭线程池
16.4 线程优先级
16.5 小结
16.6 练习
第17章 创建窗口
17.1 java中的图形用户界面
17.2 创建窗口
17.2.1 设计窗口
17.2.2 在gui代码中禁止死锁
17.3 组件和容器
17.3.1 window和frame组件
17.3.2 window面板
17.4 组件的基础知识
17.4.1 组件的属性
17.4.2 组件的大小和位置
17.4.2 点和矩形
17.4.3 组件的可视化特性
17.4.4 swing 组件
17.5 使用swing容器
17.6 容器的布局管理器
17.6.1 流布局管理器
17.6.2 使用边界布局管理器
17.6.3 使用卡片布局管理器
17.6.4 使用网格布局管理器
17.6.5 使用boxlayout管理器
17.6.7 使用gridbaglayout管理器
17.6.8 使用springlayout管理器
17.7 向窗口中添加菜单
17.7.1 创建jmenu和jmenuitem对象
17.7.2 创建菜单
17.7.3 为菜单添加菜单项
17.7.4 添加菜单快捷键和加速器
17.8 小结
17.9 练习
第18章 处理事件
18.1 交互式java程序
18.2 事件处理过程
18.3 事件类
18.3.1 低级事件类
18.3.2 使窗口处理自己的事件
18.3.3 允许其他低级事件
18.3.4 低级事件监听器
18.3.5 使用适配器类
18.3.6 语义事件
18.3.7 语义事件监听器
18.4 applet中语义事件的处理
18.4.1 其他事件处理方式
18.4.2 处理低级事件和语义事件
18.5 应用程序中的语义事件监听器
18.6 使用动作
18.6.1 action接口
18.6.2 action方法
18.6.3 把动作用作菜单项
18.6.4 定义action类
18.7 添加工具栏
18.8 添加菜单图标
18.9 添加工具提示
18.10 禁用动作
18.11 小结
18.12 练习
第19章 在窗口中绘图
19.1 使用模型/视图体系结构
19.2 组件坐标系统
19.3 在组件上绘图
19.3.1 图形环境
19.3.2 绘图过程
19.3.3 渲染操作
19.4 形状
19.4.1 定义点的类
19.4.2 直线和矩形
19.4.3 圆弧和椭圆
19.4.4 曲线
19.4.5 复杂路径
19.5 填充图形
19.6 管理图形
19.6.1 存储模型中的图形
16.6.2 绘制图形
19.7 用鼠标绘图
19.7.1 处理鼠标事件
19.8 定义自己的图形类
19.8.1 定义直线
19.8.2 定义矩形
19.8.3 定义圆
19.8.4 绘制曲线
19.9 修改光标
19.10 小结
19.11 练习
第20章 扩展gui
20.1 创建状态栏
20.1.1 用于sketcher的状态栏类
20.1.2 更新面板
20.2 使用对话框
20.2.1 模态对话框和非模态对话框
20.2.2 一个简单的模态对话框
20.2.3 即时消息对话框
20.2.4 即时输入对话框
20.3 使用对话框创建文本元素
20.3.1 为文本定义菜单项和工具栏按钮
20.3.2 定义文本类
20.3.3 创建文本元素
20.4 字体选择对话框
20.4.1 fontdialog类
20.4.2 创建字体对话框按钮
20.4.3 添加数据面板
20.4.4 实现字体列表
20.4.5 显示所选的字体
20.4.6 使用分隔面板
20.4.7 使用微调按钮
20.4.8 使用单选按钮来选择字体样式
20.4.9 监听单选按钮
20.5 弹出式菜单
20.5.1 显示弹出式菜单
20.5.2 实现上下文菜单
20.7 变换用户坐标系统
20.8 选择自定义颜色
20.8.1 使用缓存的图像
20.8.2 使用jcolorchooser对话框
20.8.3 添加自定义颜色gui
20.8.4 显示颜色选择对话框
20.9 小结
20.10 练习
第21章 填充和打印文档
21.1 串行化草图
21.1.1 实现串行化
21.1.2 串行化元素列表
21.2 用来保存草图的基本架构
21.2.1 指定文件名
21.2.1 验证草图的目录
21.2.3 记录草图是否修改
21.2.4 处理file菜单事件
21.3 使用文件选择器
21.3.1 显示文件保存对话框
21.3.2 显示文件打开对话框
21.3.3 定制文件选择对话框
21.4 实现文件操作
21.4.1 创建定制的文件对话框
21.4.2 实现保存操作
21.4.3 实现save as操作
21.4.4 实现文件打开操作
21.4.5 启动新草图
21.4.6 禁止在关闭时丢失数据
21. 5 在java中打印
21.5.1 创建和使用printerjob对象
21.5.2 打印页面
21.5.3 打印整个草图
21.5.4 横向打印
21.5.5 提高打印性能
21.2.6 实现页面设置
21.5.7 使用java打印对话框
21.5.8 多页面文档的打印
21.5.9 使用book对象进行打印
21.5.10 打印swing组件
21.6 小结
21.7 练习
第22章 java和xml
22.1 xml
22.1.1 xml的作用
22.1.2 在java中处理xml
22.2 xml文档结构
22.2.1 结构良好的xml文档
22.2.2 有效的xml文档
22.2.3 xml文档中的元素
22.2.4 元素的属性
22.3 xml中的数据结构
22.4 文档类型定义
22.4.1 声明dtd
22.4.2 定义dtd
22.4.3 sketcher的dtd
22.5 结构良好的文档的规则
22.6 xml名称空间
22.6.1 名称空间声明
22.6.2 xml名称空间和dtd
22.7 xml 模式
22.7.1 定义模式
22.7.2 定义模式元素
22.7.3 指定数据类型
22.7.4 定义复杂元素的属性
22.7.5 值的限制
22.7.6 定义属性组
22.7.7 指定一组元素选项
22.8 sketcher模式
22.8.1 定义直线元素
22.8.2 定义矩形元素类型
22.8.3 定义圆元素类型
22.8.4 定义曲线元素类型
22.8.5 定义文本元素类型
22.8.6 完整的sketcher模式
22.8.7 使用模式的文档
22.9 用xml文档编程
22.9.1 sax 处理
22.9.2 dom 处理
22.10 访问解析器
22.11 使用sax
22.11.1 解析器的属性和特征
22.11.2 用sax解析文档
22.11.3 实现sax处理程序
22.11.4 处理其他解析事件
22.11.5 解析模式实例文档
22.12 小结
22.13 练习
第23章 创建和修改xml文档
23.1 文档对象模型
23.2 设置dom解析器的特征
23.3 解析文档
23.4 导航document对象树
23.4.1 节点类型
23.4.2 可忽略的空白和元素内容
23.4.3 访问属性
23.5 转换xml
23.6 创建document对象
23.7 把草图存储为xml文档
23.7.1 添加元素节点
23.7.2 为完成的草图创建document对象
23.7.3 把草图保存为xml文件
23.8 读取草图的xml表示
23.8.1 从xml中创建基类对象
23.8.2 从xml节点中创建元素
23.8.3 处理import xml事件
23.8.4 读取xml文件
23.8.5 创建模型
23.9 小结
23.10 练习
附录a 关键字
附录b 计算机的算术
查看全部↓
精彩书摘
1)十六进制字面量
Java中的十六进制字面量在开头都有o)【或0X,而且遵循使用字母A到F(或者a到f)分别表示数字10到15的约定。如果对十六进制不是很熟悉,这里有一些例子:
如果不熟悉十六进制数,可以在附录8中找到有关它们工作方式的说明。上面所有的十六进制字面量都是int类型。如果想要设定一个long类型的十六进制字面量,就必须在字面量后面添加一个L,就像对十进制字面量一样。例如,0xFL是一个与十进制值l5等同的十六进制字面量。当然,可以将一个字面量,例如0xAABBCCD9L写成0xAABB_CCD9L。这里的下划线字符将十六进制数字每4个分成一组。每组的4个十六进制数对应内存中的两个字节。与十进制整数字面量一样,下划线只能在十六进制字面量的数字之间出现,因此0x_3ABC和0x3ABC_都不对。
2)二进制字面量
有时,将整数字面量设置为二进制值更加方便。在一个字面量的前面加上0b或0B就能将其标识为一个二进制数。在这种情况下,数字只能是0或1。例如,0b110010101011或0B110010101011和0xCAB以及十进制值3243一样。也可以在二进制字面量中使用下划线字符,所以可以将值写为Ob1100 1010 1011,那样更容易阅读。每组的4个二进制数对应一个十六进制数。当然,二进制字面量也可以是long类型;只需要在数字后面附加一个L。0b_1000和0b1000_都不正确,因为下划线只能在数字之间出现。
3)八进制字面量
写八进制数字字面量时要以零开头,所以035和067都是int类型的八进制数,而0777777L是long类型的八进制字面量,后者也可以写成0777_777L。八进制数只能使用数字0~7,而且每个八进制数都定义为3比特。在以前机器都用3比特倍数的长字来存储数字时,经常使用八进制数。
现在很少有必要使用八进制数,但是必须注意不要意外使用它们。如果在一个整数字面量的前面添加一个0,Java编译器就会认为在指定一个八进制值。除非其中一个数字比7大,导致编译器将其标记为错误,否则将无法知道该错误,而这个数字也不会是想象中的值。
2.2.1声明整型变量
如前所述,可以使用如下语句声明long类型的变量:
long bigOne;
该语句是对变量bigOne的声明,指定变量bigOne存储一个long类型的值。编译该语句时,会为变量bigOne分配8字节的内存。Java不会自动初始化一个这样的变量。如果想要变量有一个初始值,而不是使用内存上次使用后留下来的无效值,就必须在声明中指定自己的值。为了声明变量bigOne并初始化为2,999,999,999,只需要这样写:
long bigOne=2_999_999_999L;
这会将该变量设置为等号后面的值。在声明变量时总是初始化是一个很好的实践。在字面量中插入下划线是为了使它易读。注意如果在计算中使用没有赋值的变量,程序将无法编译。有时候如果不在声明变量时对其初始化,编译器就不能在使用该变量之前判断出它是否已经初始化,即使看起来很明显已经初始化。这也会被标记为一个错误,但是如果能在声明这些变量时总是初始化它们,就可以避免这些问题。
……
查看全部↓
前言/序言
欢迎阅读《Java 7 入门经典》,本书通俗易懂,是学习Java语言以及Java平台API的综合性入门指南。本书提供了在Java JDK 7或更高版本环境下进行程序开发的一些基础知识。
本书除了教授Java知识外,还会介绍与Java程序员有关的各种主题。本书的组织结构经过了仔细设计,符合思维逻辑,让Java编程学习的各个阶段都环环相扣。
本书读者对象 Java编程应用范围广泛,而且随着语言本身以及关联的函数库的增长,Java的应用领域仍然在不断扩展。自从发布以来,Java作为一门面向对象的语言已成为Internet编程、跨平台应用以及教学中的首选语言。在笔者看来,这其中有三个原因:Java与生俱来的系统无关的特性、Java语言的简单性和强大,以及Java作为工具可以有效并轻松实现的编程任务的广泛性。对于主要的应用程序开发,Java是许多程序员的选择。与其他语言相比,Java能提供便捷的开发和维护优势。此外,还有在各种计算机和操作系统中不用修改代码即可运行的内在能力。使用Java可以做到更多、更快、更容易。
本书旨在提供对于Java语言的全面理解以及在一些Java应用程序上下文环境中进行编程的经验,希望读者能在其中的每个核心领域都打下坚实的基础。书中介绍的Java各方面知识都通过实际的例子进行解释和说明,这些例子也可以自己创建并运行,而且也应该自己进行试验。每章末尾的练习有助于对所学知识进行尝试。在理解本书介绍的主题内容之后,就能开始编写有特色而且有效果的Java程序了。 书名中的“入门”更多是指本书的编写风格而不是指读者的能力水平,所以也可以称为“直通Java”,这是因为本书的结构设计合理,不论是已有其他语言编程经验的程序员还是刚入门的新手,本书都适合阅读。
本书假定您至少有一点编程的基础,比如应该至少理解程序运行的基本概念。但是在阅读本书之前并不需要太多的预备知识。
本书讲解的进度虽然有些快,但却覆盖了对Java运行工作机制的所有必要解释。
查看全部↓
[Apache Tomcat 6高级编程].pdf百度网盘下载地址
Apache Tomcat 6高级编程是一本Apache Tomcat 6编著书籍,由乔帕(Chopra V.)编著,杨金奎等人翻译。本书重点讲解Tomcat 6的应用知识,介绍了新的架构和性能更改。从基本的Tomcat和Web应用程序配置到用于集群、JDBC连接、日志和其他功能的高级技术,这些内容将帮助读者高效地管理和执行Tomcat部署。通过阅读本书,读者将掌握安装、配置和运行Apache Tomcat服务器的全部知识,适用于负责Tomcat配置、性能调优、系统安全或部署架构的J2EE系统管理员和Java开发者阅读。
内容介绍
《Apache Tomcat 6高级编程》全面介绍了安装、配置和运行Apache Tomcat服务器的知识。书中不仅提供了配置选项的逐行分析,还探究了Tomcat的特性和功能,可以帮助读者解决出现在系统管理的各个阶段的各种问题,包括共享主机、安全、系统测试和性能测试及调优。本书重点讲解Tomcat 6的应用知识。从基本的Tomcat和Web应用程序配置,到用于集群、JDBC连接、日志和其他功能的更高级技术,这些内容将帮助读者高效地管理和执行Tomcat部署。
主要内容:
在Windows和UNIX/Linux系统上安装JVM和Tomcat的方法;
打包和部署Web应用程序的步骤;
配置Tomcat的内部HTTP协议栈,包括新的APR和Nl0连接器;
使用Apache Web服务器或Microsoft IIS作为前端Web月E务器来部署Tomcat的方法;
负载均衡和大量Tomcat服务器的集群;
在虚拟主机环境下安装Tomcat的方法;
加载部署在Tomcat中的测试Web应用程序的方法;
使用内部的维护统计功能实时监控Tomcat服务器的方法;
提供Web应用程序的扩展性和高可用性的技术;
提供Tomcat 6的性能技巧和最佳实践。
章节目录
第1章 Apache Tomcat
1.1 谦逊的开始:Apache项目
1.2 Apache软件基金会
1.3 Tomcat
1.3.1 分发Tomcat:Apache的许可证
1.3.2 与其他许可证的比较
1.4 蓝图:Java EE
1.4.1 Java API
1.4.2 Java EE API
1.4.3 Java EE应用服务
1.4.4 向标准化看齐,在实践中竞争
1.4.5 Tomcat和应用服务器
1.5 Tomcat和Web服务器
1.6 本章小结
第2章 Web的应用:Servlet、JSP及其他
2.1 Web应用简史
2.1.1 CGI脚本:第一个动态文本机制
2.1.2 Java服务器端:Servlet
2.1.3 JavaServer Page
2.1.4 JSP标签库
2.1.5 JSP EL
2.1.6 MVC架构
2.1.7 使用合适的Web技术
2.2 Web应用的创建和分类
2.3 本章小结
第3章 Tomcat安装
3.1 安装Java虚拟机
3.1.1 在Windows上安装JVM
3.1.2 在Linux上安装JVM
3.2 安装Tomcat
3.2.1 选择安装类别
3.2.2 检验下载文件
3.2.3 Windows上安装Tomcat
3.2.4 在Windows下使用ZIP文件安装Tomcat
3.2.5 在Linux下安装Tomcat
3.3 使用源代码构建Tomcat
3.3.1 是需要通过源代码构建Tomcat
3.3.2 下载源代码版本
3.3.3 subversion储存库
3.3.4 构建一个源代码版本
3.4 Tomcat安装目录
3.5 安装APR
3.6 疑难解答和详细说明
3.6.1 类版本错误
3.6.2 使用中的端口号
3.6.3 运行多重实例
3.6.4 代理阻塞通道
3.7 本章小结
第4章 Tomcat架构
4.1 Tomcat目录概述
4.1.1 bin目录
4.1.2 conf目录
4.1.3 lib目录
4.1.4 logs目录
4.1.5 temp目录
4.1.6 webapps目录
4.1.7 work目录
4.2 Tomcat架构概述
4.2.1 服务器
4.2.2 服务
4.2.3 Tomcat架构中的其余类
4.3 连接器架构
4.3.1 通信路径
4.3.2 连接器协议
4.3.3 选择连接器
4.4 生命周期
4.4.1 LifeCycle接口
4.4.2 LifecycleListener接口
4.5 根据架构进行配置
4.6 本章小结
第5章 Tomcat的基本配置
5.1 Tomcat 6配置的要点
5.2 $CATALINA_HOME/conf中的文件
5.3 服务器的基本配置
5.3.1 通过server.xml默认文件配置服务器
5.3.2 应用服务器配置下的Tomcat运行
5.3.3 Web应用软件的Context定义
5.3.4 默认context.xml文件
5.3.5 认证和tomcat-users.xml文件
5.3.6 默认的部署描述符——Web.xml
5.3.7 servlet.xml、Context描述符和web.xml怎样协同工作
5.3.8 严密的访问控制:catlina.policy
5.3.9 Catalina.properties:建立 在访问查询上的严密的访问控制
5.3.10 引导配置
5.3.11 配置和管理的不同点
5.4 Tomcat 6基于Web的GUI配置器
5.5 本章小结
第6章 高级Tomcat特性
6.1 阀——截取Tomcat样式
6.2 标准阀
6.3 访问日志实现
6.4 日志文件范围
6.5 单点登录实现
6.5.1 不使用单点登录阀实现多次登录
6.5.2 配置单点登录阀
6.6 Form认证器阀
6.7 通过请求过滤器限制访问
6.7.1 远程地址过滤器
6.7.2 远程主机过滤器
6.7.3 配置请求过滤器阀
6.7.4 请求记录器阀
6.8 持久会话
6.8.1 持久会话的必要性
6.8.2 配置Persistent Session Manager
6.9 JNDI资源配置
6.9.1 什么是JNDI
6.9.2 Tomcat和JNDI
6.9.3 典型的Tomcat JNDI资源
6.9.4 通过JNDI配置资源
6.9.5 配置JDBC DataSource
6.9.6 配置Mail会话
6.10 配置Lifecycle listener
6.10.1 Tomcat组件发送的生命周期事件
6.10.2 元素
6.10.3 Tomcat 6 Lifecycle listener配置
6.11 本章小结
第7章 Web应用程序配置
7.1 理解Web应用程序内容
7.1.1 公共资源
7.1.2 Web-INF目录
7.1.3 META-INF目录
7.2 理解部署描述符
7.2.1 Servlet 2.3类型部署描述符
7.2.2 Servlet 2.4/2.5类型部署描述符
7.3 本章小结
第8章 Web应用程序管理
8.1 Web应用程序示例
8.2 Tomcat管理员程序
8.2.1 允许访问管理员程序
8.2.2 配置管理员程序
8.3 Tomcat管理器:网络接口
8.3.1 显示Tomcat服务器状态
8.3.2 管理Web应用程序
8.3.3 部署Web应用程序
8.4 Tomcat管理器:用Ant管理应用程序
8.5 Tomcat管理器:使用HTTP请求
8.5.1 列出已部署的应用程序
8.5.2 部署新的应用程序
8.5.3 在Tomcat 6中安装/部署应用程序
8.5.4 远程部署新的应用程序
8.5.5 从本地路径部署新的应用程序
8.5.6 重载现有的应用程序
8.5.7 列出可用的JNDI资源
8.5.8 列出OS和JVM属性
8.5.9 停止现有的应用程序
8.5.10 启动被停止的应用程序
8.5.11 反部署Web应用程序
8.5.12 显示会话统计
8.5.13 使用JMX代理Servlet查询Tomcat内核
8.5.14 使用JMX代理Servlet设置Tomcat内核
8.6 可能发生的错误
8.7 安全性考虑
8.8 Tomcat部署器
8.9 本章小结
第9章 类装载器
9.1 类装载器概述
9.1.1 标准的Java SE类装载器
9.1.2 关于类装载器的更多行为
9.1.3 创建自定义类装载器
9.1.4 为什么Tomcat需要自定义的类装载器
9.2 安全性和类装载器
9.2.1 类装载器委派
9.2.2 核心类限制
9.2.3 独立的类装载器命名空间
9.2.4 SecurityManager
9.3 Tomcat与类装载器
9.3.1 系统类装载器
9.3.2 Endorsed Standards Override机制
9.3.3 通用类装载器
9.3.4 Web应用程序类装载器
9.4 动态类重载
9.5 通用类装载器缺陷
9.5.1 在不同的类装载器中分割包
9.5.2 Singleton
9.5.3 XML分析器
9.6 本章小结
第10章 HTTP连接器
10.1 HTTP连接器
10.1.1 Tomcat 6 HTTP/1.1连接器
10.1.2 高级NIO连接器
10.1.3 Comet异步IO支持
10.1.4 本地APR连接器
10.2 配置Tomcat支持CGI
10.3 配置Tomcat以支持SSI
10.3.1 配置Tomcat 6 SSI Servlet
10.3.2 配置Tomcat 6 SSI过滤器
10.4 在代理服务器后运行Tomcat
10.5 性能调整
10.5.1 可调整的配置属性
10.5.2 TCP/IP栈调整技巧
10.6 前端Tomcat 6和Web服务器
10.7 本章小结
第11章 Tomcat与Apache HTTP服务器
11.1 AJP连接器体系结构
11.1.1 Apache的本地代码模块
11.1.2 Apache JServ协议
11.1.3 AJP连接器
11.2 Apache Web服务器前端或独立的Tomcat
11.3 了解Tomcat Worker
11.3.1 多个Tomcat Worker
11.3.2 使用workers.properties文件配置Apache服务器 与多个Tomcat Worker协同工作
11.4 连接Tomcat与Apache
11.4.1 Tomcat 6配置
11.4.2 Apache Web服务器配置
11.4.3 使用mod_jk模块
11.4.4 使用mod_proxy模块
11.5 为Apache Web服务器配置SSL
11.5.1 为Apache配置mod_ssl
11.5.2 测试启用SSL的Apache设置
11.5.3 启用SSL的Apache-Tomcat设置
11.6 Tomcat负载平衡与Apache
11.6.1 更改Tomcat启动文件中的CATALINA_HOME
11.6.2 设置不同的AJP连接器端口
11.6.3 设置不同的服务器端口
11.6.4 禁用默认的HTTP/1.1连接器
11.6.5 在Standalone Engine中设置jvmRoute
11.6.6 注释 Catalina Engine
11.6.7 httpd.conf中的指令
11.6.8 workers.properties中的worker配置
11.7 测试负载平衡器
11.7.1 测试Sticky会话
11.7.2 测试Round-Robin行为
11.7.3 在不同的负载系数下测试
11.8 本章小结
第12章 Tomcat与IIS
12.1 ISAPI插件的角色
12.2 连接Tomcat和IIS
12.2.1 检查Tomcat与IIS的安装
12.2.2 配置JK连接器
12.2.3 安装ISAPI插件
12.2.4 配置Tomcat worker
12.2.5 配置转发请求规则
12.2.6 可选的URL重写规则配置
12.2.7 为ISAPI插件升级Windows注册表
12.2.8 IIS 5独立模式(只针对IIS 6)
12.2.9 在IIS下创建虚拟目录
12.2.10 添加作为IIS过滤器的ISAPI插件
12.2.11 授权作为Web应用程序扩展的ISAPI插件(只针对IIS 6)
12.2.12 测试最后的设置
12.3 故障解决技巧
12.4 使用SSL
12.5 IIS和Tomcat的可扩展架构
12.5.1 分发Web和应用程序部署
12.5.2 多个Tomcat Workers
12.5.3 负载平衡的AJP Worker
12.6 本章小结
第13章 JDBC连接
13.1 JDBC基础
13.1.1 建立和终止RDBMS连接
13.1.2 JDBC版本演化
13.1.3 JDBC驱动类型
13.1.4 数据库连接池
13.1.5 连接池的问题
13.1.6 Tomcat和JDBC演化
13.2 Tomcat 6中的JNDI模拟和连接池
13.3 首选的配置:JNDI资源
13.3.1 Resource标签
13.3.2 继承JNDI资源配置
13.3.3 测试JNDI资源配置
13.4 可选的JDBC配置
13.5 可选的连接池管理器
13.5.1 关于c3p0池管理器
13.5.2 部署c3p0池管理器
13.5.3 无需JNDI查找获得JDBC连接
13.5.4 使用c3p0测试对非JNDI池的访问
13.5.5 使用JNDI映射获得连接
13.5.6 使用Tomcat 6 JNDI-comp-atible查找测试c3p0
13.5.7 部署第三方连接池
13.6 本章小结
第14章 Tomcat安全
14.1 核查下载的Tomcat的完整性
14.1.1 核查MD5摘要
14.1.2 使用PGP签名来核查下载的文件
14.2 确保Tomcat服务器安全安装
14.2.1 去除默认的应用程序
14.2.2 ROOT和tomcat-docs
14.2.3 系统应用程序——manager和host-manager
14.2.4 约束系统应用程序访问安全性
14.2.5 删除JSP和Servlet的例子
14.2.6 更改SHUTDOWN命令
14.3 使用特殊账户运行Tomcat
14.3.1 创建一个无特权的Tomcat用户
14.3.2 使用Tomcat用户运行Tomcat
14.4 确保文件系统安全
14.4.1 Windows文件系统
14.4.2 Linux文件系统
14.5 确保Java虚拟机的安全
14.5.1 Security Manager概述
14.5.2 使用Tomcat的Security Manager
14.5.3 推荐的Security Manager练习
14.6 确保Web应用程序的安全
14.6.1 “认证”和“域”
14.6.2 域安全性
14.7 SSL加密
14.7.1 JSSE
14.7.2 使用SSL保护资源
14.8 保证DefaultServlet的安全
14.8.1 禁用目录列表
14.8.2 禁用Invoker Servlet、SSI和CGI Gateway
14.9 主机限制
14.10 本章小结
第15章 共享的Tomcat主机
15.1 虚拟主机概念
15.2 Apache中的虚拟主机
15.2.1 实例部署方案
15.2.2 Apache中基于IP的虚拟主机
15.2.3 Apache中基于名称的虚拟主机
15.3 Tomcat中的虚拟主机
15.3.1 实例部署方案
15.3.2 作为独立服务器的Tomcat
15.3.3 使用Apache的Tomcat
15.3.4 配置Apache
15.4 Tomcat Host-Manager应用程序
15.5 虚拟主机问题:稳定性、安全和性能
15.6 调整Tomcat中的虚拟主机设置
15.6.1 为每个虚拟主机创建独立的JVM
15.6.2 在Tomcat JVM上设置内存资源限制
15.6.3 使用Java Security Manager限制
15.7 本章小结
第16章 使用JMX监视和管理Tomcat
16.1 管理需求
16.2 关于JMX
16.2.1 JMX体系结构
16.2.2 工具层
16.2.3 代理层
16.2.4 分布式服务层
16.3 JMX远程API
16.4 MBean介绍
16.4.1 标准MBean
16.4.2 动态MBean
16.4.3 模型MBean
16.4.4 开放MBean
16.5 JMX在Tomcat 6中的可管理元素
16.5.1 可管理的Tomcat 6体系结构组件
16.5.2 可管理的嵌入式组件
16.5.3 可管理的运行时数据对象
16.5.4 可管理的资源对象
16.6 通过Manager Proxy访问Tomcat 6的JMX Support
16.6.1 使用JMX Proxy
16.6.2 修改MBean属性
16.6.3 使用jconsole GUI监视 Tomcat
16.6.4 为远程监视配置Tomcat
16.7 本章小结
第17章 集群
17.1 集群益处
17.1.1 可扩展性与集群
17.1.2 高可靠性的必要性
17.2 集群基础
17.2.1 主-备用拓扑模式
17.2.2 故障转移行为模式
17.3 Tomcat 6集群模型
17.3.1 负载平衡
17.3.2 会话共享
17.4 使用Tomcat 6集群
17.4.1 Tomcat 6中的会话管理
17.4.2 Cookie和现代浏览器的角色
17.4.3 配置一个Tomcat 6集群
17.4.4 通用前端:通过Apache mod_jk使负载平衡
17.4.5 准备使用不同的后端会话共享
17.4.6 后端1:内存复制配置
17.4.7 后端2:使用共享文件存储的永久会话管理器
17.4.8 后端3:使用JDBC存储的永久会话管理器
17.4.9 测试使用JDBC永久会话管理器后端的Tomcat集群
17.5 集群的复杂性
17.5.1 集群和性能
17.5.2 集群和响应时间
17.5.3 使用集群解决性能问题
17.6 本章小结
第18章 嵌入式Tomcat
18.1 现代系统设计中嵌入式Tomcat的重要性
18.1.1 典型地嵌入式应用程序
18.1.2 使用嵌入式Tomcat开发
18.2 本章小结
第19章 日志
19.1 从Tomcat 5的变革
19.2 log4j
19.2.1 log4j体系结构
19.2.2 log4j安装和配置
19.2.3 log4j入门指南
19.2.4 log4j高级用法
19.2.5 log4j性能建议
19.3 JULI
19.3.1 Java日志体系结构
19.3.2 JULI入门指南
19.4 日志文件分析
19.5 本章小结
第20章 性能测试
20.1 性能概念
20.1.1 评估什么
20.1.2 可扩展性和性能
20.1.3 理解用户角度的性能
20.1.4 评估性能
20.2 JMeter
20.2.1 安装和运行JMeter
20.2.2 设计和理解使用JMeter的测试计划
20.2.3 JMeter特性
20.2.4 分布式负荷测试
20.2.5 解释测试结果
20.3 替代JMeter的工具
20.4 性能测试后的事项
20.5 本章小结
第21章 性能调优
21.1 性能调优的最佳实践
21.1.1 步骤1:建立测试台
21.1.2 步骤2:性能测试和确定基线
21.1.3 步骤3:诊断性能瓶颈
21.2 诊断Tomcat的性能问题
21.3 Tomcat性能调优提示
21.3.1 JVM的参数调优
21.3.2 预编译JSP
21.3.3 Tomcat配置调优
21.3.4 适当的时候使用Web服务器的静态内容
21.4 本章小结
附录A Tomcat和集成开发环境
A.1 Eclipse
A.1.1 调试Eclipse中的远程Web应用程序
A.1.2 使用Sysdeo Tomcat插件部署和调试本地Web应用程序
A.1.3 使用Web工具平台部署和调试Web应用程序
A.1.4 使用Apache Ant和Eclipse管理Web应用程序部署
A.2 NetBeans
A.2.1 调试NetBeans中的远程Web应用程序
A.2.2 调试NetBeans内的Web应用程序
A.3 小结
附录B Apache Ant
B.1 安装Ant
B.2 Ant介绍
B.3 Ant诀窍
B.3.1 使用Ant创建Web应用程序
B.3.2 编译JSP
B.3.3 利用属性文件和命令行参数的可重用Ant脚本
B.3.4 创建日志
B.3.5 通过电子邮件创建通知
B.3.6 Ant和源控制系统
B.3.7 自动测试
B.4 持续集成
B.5 Ant任务参考
B.6 小结
HTTP权威指南.pdf
《HTTP权威指南》是HTTP及其相关核心Web技术方面的权威著作,主要介绍了Web应用程序是如何工作的,核心的因特网协议如何与架构构建块交互,如何正确实现因特网客户和服务器等。《HTTP权威指南》适合所有想了解HTTP和Web底层结构的人阅读。
图书目录:
第一部分 HTTP:Web的基础
第1章 HTTP概述 3
1.1 HTTP——因特网的多媒体信使 4
1.2 Web客户端和服务器 4
1.3 资源 5
1.3.1 媒体类型 6
1.3.2 URI 7
1.3.3 URL 7
1.3.4 URN 8
1.4 事务 9
1.4.1 方法 9
1.4.2 状态码 10
1.4.3 Web页面中可以包含多个对象 10
1.5 报文 11
1.6 连接 13
1.6.1 TCP/IP 13
1.6.2 连接、IP地址及端口号 14
1.6.3 使用Telnet实例 16
1.7 协议版本 18
1.8 Web的结构组件 19
1.8.1 代理 19
1.8.2 缓存 20
1.8.3 网关 20
1.8.4 隧道 21
1.8.5 Agent代理 21
1.9 起始部分的结束语 22
1.10 更多信息 22
1.10.1 HTTP协议信息 22
1.10.2 历史透视 23
1.10.3 其他万维网信息 23
第2章 URL与资源 25
2.1 浏览因特网资源 26
2.2 URL的语法 28
2.2.1 方案——使用什么协议 29
2.2.2 主机与端口 30
2.2.3 用户名和密码 30
2.2.4 路径 31
2.2.5 参数 31
2.2.6 查询字符串 32
2.2.7 片段 33
2.3 URL快捷方式 34
2.3.1 相对URL 34
2.3.2 自动扩展URL 37
2.4 各种令人头疼的字符 38
2.4.1 URL字符集 38
2.4.2 编码机制 38
2.4.3 字符限制 39
2.4.4 另外一点说明 40
2.5 方案的世界 40
2.6 未来展望 42
2.7 更多信息 44
第3章 HTTP报文 45
3.1 报文流 46
3.1.1 报文流入源端服务器 46
3.1.2 报文向下游流动 47
3.2 报文的组成部分 47
3.2.1 报文的语法 48
3.2.2 起始行 50
3.2.3 首部 53
3.2.4 实体的主体部分 55
3.2.5 版本0.9的报文 55
3.3 方法 56
3.3.1 安全方法 56
3.3.2 GET 56
3.3.3 HEAD 57
3.3.4 PUT 57
3.3.5 POST 58
3.3.6 TRACE 58
3.3.7 OPTIONS 60
3.3.8 DELETE 60
3.3.9 扩展方法 61
3.4 状态码 62
3.4.1 100~199——信息性状态码 62
3.4.2 200~299——成功状态码 63
3.4.3 300~399——重定向状态码 64
3.4.4 400~499——客户端错误状态码 68
3.4.5 500~599——服务器错误状态码 69
3.5 首部 70
3.5.1 通用首部 71
3.5.2 请求首部 72
3.5.3 响应首部 74
3.5.4 实体首部 75
3.6 更多信息 77
第4章 连接管理 79
4.1 TCP连接 80
4.1.1 TCP的可靠数据管道 80
4.1.2 TCP流是分段的、由IP分组传送 81
4.1.3 保持TCP连接的正确运行 82
4.1.4 用TCP套接字编程 84
4.2 对TCP性能的考虑 85
4.2.1 HTTP事务的时延 86
4.2.2 性能聚焦区域 87
4.2.3 TCP连接的握手时延 87
4.2.4 延迟确认 88
4.2.5 TCP慢启动 89
4.2.6 Nagle算法与TCP_NODELAY 89
4.2.7 TIME_WAIT累积与端口耗尽 90
4.3 HTTP连接的处理 91
4.3.1 常被误解的Connection首部 91
4.3.2 串行事务处理时延 92
4.4 并行连接 94
4.4.1 并行连接可能会提高页面的加载速度 94
4.4.2 并行连接不一定更快 95
4.4.3 并行连接可能让人“感觉”更快一些 95
4.5 持久连接 96
4.5.1 持久以及并行连接 96
4.5.2 HTTP/1.0+ keep-alive连接 97
4.5.3 Keep-Alive操作 98
4.5.4 Keep-Alive选项 98
4.5.5 Keep-Alive连接的限制和规则 99
4.5.6 Keep-Alive和哑代理 100
4.5.7 插入Proxy-Connection 102
4.5.8 HTTP/1.1持久连接 104
4.5.9 持久连接的限制和规则 104
4.6 管道化连接 105
4.7 关闭连接的奥秘 106
4.7.1 “任意”解除连接 106
4.7.2 Content-Length及截尾操作 107
4.7.3 连接关闭容限、重试以及幂等性 107
4.7.4 正常关闭连接 108
4.8 更多信息 110
4.8.1 HTTP连接 110
4.8.2 HTTP性能问题 110
4.8.3 TCP/IP 111
第二部分 HTTP结构
第5章 Web服务器 115
5.1 各种形状和尺寸的Web服务器 116
5.1.1 Web服务器的实现 116
5.1.2 通用软件Web服务器 117
5.1.3 Web服务器设备 117
5.1.4 嵌入式Web服务器 118
5.2 最小的Perl Web服务器 118
5.3 实际的Web服务器会做些什么 120
5.4 第一步——接受客户端连接 121
5.4.1 处理新连接 121
5.4.2 客户端主机名识别 122
5.4.3 通过ident确定客户端用户 122
5.5 第二步——接收请求报文 123
5.5.1 报文的内部表示法 124
5.5.2 连接的输入/输出处理结构 125
5.6 第三步——处理请求 126
5.7 第四步——对资源的映射及访问 126
5.7.1 docroot 127
5.7.2 目录列表 129
5.7.3 动态内容资源的映射 130
5.7.4 服务器端包含项 131
5.7.5 访问控制 131
5.8 第五步——构建响应 131
5.8.1 响应实体 131
5.8.2 MIME类型 132
5.8.3 重定向 133
5.9 第六步——发送响应 134
5.10 第七步——记录日志 134
5.11 更多信息 134
第6章 代理 135
6.1 Web的中间实体 136
6.1.1 私有和共享代理 136
6.1.2 代理与网关的对比 137
6.2 为什么使用代理 138
6.3 代理会去往何处 143
6.3.1 代理服务器的部署 144
6.3.2 代理的层次结构 144
6.3.3 代理是如何获取流量的 147
6.4 客户端的代理设置 148
6.4.1 客户端的代理配置:手工配置 149
6.4.2 客户端代理配置:PAC文件 149
6.4.3 客户端代理配置:WPAD 150
6.5 与代理请求有关的一些棘手问题 151
6.5.1 代理URI与服务器URI的不同 151
6.5.2 与虚拟主机一样的问题 152
6.5.3 拦截代理会收到部分URI 153
6.5.4 代理既可以处理代理请求,也可以处理服务器请求 154
6.5.5 转发过程中对URI的修改 154
6.5.6 URI的客户端自动扩展和主机名解析 155
6.5.7 没有代理时URI的解析 155
6.5.8 有显式代理时URI的解析 156
6.5.9 有拦截代理时URI的解析 157
6.6 追踪报文 158
6.6.1 Via首部 158
6.6.2 TRACE方法 162
6.7 代理认证 164
6.8 代理的互操作性 165
6.8.1 处理代理不支持的首部和方法 166
6.8.2 OPTIONS:发现对可选特性的支持 166
6.8.3 Allow首部 167
6.9 更多信息 167
第7章 缓存 169
7.1 冗余的数据传输 170
7.2 带宽瓶颈 170
7.3 瞬间拥塞 171
7.4 距离时延 172
7.5 命中和未命中的 173
7.5.1 再验证 173
7.5.2 命中率 175
7.5.3 字节命中率 176
7.5.4 区分命中和未命中的情况 176
7.6 缓存的拓扑结构 177
7.6.1 私有缓存 177
7.6.2 公有代理缓存 177
7.6.3 代理缓存的层次结构 179
7.6.4 网状缓存、内容路由以及对等缓存 180
7.7 缓存的处理步骤 181
7.7.1 第一步——接收 181
7.7.2 第二步——解析 182
7.7.3 第三步——查找 182
7.7.4 第四步——新鲜度检测 182
7.7.5 第五步——创建响应 182
7.7.6 第六步——发送 183
7.7.7 第七步——日志 183
7.7.8 缓存处理流程图 183
7.8 保持副本的新鲜 183
7.8.1 文档过期 184
7.8.2 过期日期和使用期 185
7.8.3 服务器再验证 185
7.8.4 用条件方法进行再验证 186
7.8.5 If-Modified-Since:Date再验证 187
7.8.6 If-None-Match:实体标签再验证 189
7.8.7 强弱验证器 190
7.8.8 什么时候应该使用实体标签和最近修改日期 190
7.9 控制缓存的能力 191
7.9.1 no-Store与no-Cache响应首部 191
7.9.2 max-age响应首部 192
7.9.3 Expires响应首部 192
7.9.4 must-revalidate响应首部 192
7.9.5 试探性过期 193
7.9.6 客户端的新鲜度限制 194
7.9.7 注意事项 194
7.10 设置缓存控制 195
7.10.1 控制Apache的HTTP首部 195
7.10.2 通过HTTP-EQUIV控制HTML缓存 196
7.11 详细算法 197
7.11.1 使用期和新鲜生存期 198
7.11.2 使用期的计算 198
7.11.3 完整的使用期计算算法 201
7.11.4 新鲜生存期计算 202
7.11.5 完整的服务器——新鲜度算法 202
7.12 缓存和广告 204
7.12.1 发布广告者的两难处境 204
7.12.2 发布者的响应 204
7.12.3 日志迁移 205
7.12.4 命中计数和使用限制 205
7.13 更多信息 205
第8章 集成点:网关、隧道及中继 207
8.1 网关 208
8.2 协议网关 210
8.2.1 HTTP/*:服务器端Web网关 211
8.2.2 HTTP/HTTPS:服务器端安全网关 212
8.2.3 HTTPS/HTTP客户端安全加速器网关 212
8.3 资源网关 213
8.3.1 CGI 215
8.3.2 服务器扩展API 215
8.4 应用程序接口和Web服务 216
8.5 隧道 217
8.5.1 用CONNECT建立HTTP隧道 217
8.5.2 数据隧道、定时及连接管理 219
8.5.3 SSL隧道 219
8.5.4 SSL隧道与HTTP/HTTPS网关的对比 220
8.5.5 隧道认证 221
8.5.6 隧道的安全性考虑 221
8.6 中继 222
8.7 更多信息 224
第9章 Web机器人 225
9.1 爬虫及爬行方式 226
9.1.1 从哪儿开始:根集 226
9.1.2 链接的提取以及相对链接的标准化 227
9.1.3 避免环路的出现 228
9.1.4 循环与复制 228
9.1.5 面包屑留下的痕迹 229
9.1.6 别名与机器人环路 230
9.1.7 规范化URL 230
9.1.8 文件系统连接环路 231
9.1.9 动态虚拟Web空间 232
9.1.10 避免循环和重复 233
9.2 机器人的HTTP 236
9.2.1 识别请求首部 236
9.2.2 虚拟主机 236
9.2.3 条件请求 237
9.2.4 对响应的处理 238
9.2.5 User-Agent导向 239
9.3 行为不当的机器人 239
9.4 拒绝机器人访问 240
9.4.1 拒绝机器人访问标准 241
9.4.2 Web站点和robots.txt文件 242
9.4.3 robots.txt文件的格式 243
9.4.4 其他有关robots.txt的知识 246
9.4.5 缓存和robots.txt的过期 246
9.4.6 拒绝机器人访问的Perl代码 246
9.4.7 HTML的robot-control元标签 249
9.5 机器人的规范 251
9.6 搜索引擎 254
9.6.1 大格局 255
9.6.2 现代搜索引擎结构 255
9.6.3 全文索引 255
9.6.4 发布查询请求 257
9.6.5 对结果进行排序,并提供查询结果 258
9.6.6 欺诈 258
9.7 更多信息 258
第10章 HTTP-NG 261
10.1 HTTP发展中存在的问题 262
10.2 HTTP-NG的活动 263
10.3 模块化及功能增强 263
10.4 分布式对象 264
10.5 第一层——报文传输 264
10.6 第二层——远程调用 265
10.7 第三层——Web应用 265
10.8 WebMUX 265
10.9 二进制连接协议 266
10.10 当前的状态 267
10.11 更多信息 267
第三部分 识别、认证与安全
第11章 客户端识别与cookie机制 271
11.1 个性化接触 272
11.2 HTTP首部 273
11.3 客户端IP地址 274
11.4 用户登录 275
11.5 胖URL 277
11.6 cookie 278
11.6.1 cookie的类型 278
11.6.2 cookie是如何工作的 279
11.6.3 cookie罐:客户端的状态 280
11.6.4 不同站点使用不同的cookie 282
11.6.5 cookie成分 283
11.6.6 cookies版本0(Netscape) 284
11.6.7 cookies版本1(RFC 2965) 285
11.6.8 cookie与会话跟踪 288
11.6.9 cookie与缓存 290
11.6.10 cookie、安全性和隐私 291
11.7 更多信息 292
第12章 基本认证机制 293
12.1 认证 294
12.1.1 HTTP的质询/响应认证框架 294
12.1.2 认证协议与首部 295
12.1.3 安全域 296
12.2 基本认证 297
12.2.1 基本认证实例 298
12.2.2 Base-64用户名/密码编码 298
12.2.3 代理认证 299
12.3 基本认证的安全缺陷 300
12.4 更多信息 301
第13章 摘要认证 303
13.1 摘要认证的改进 304
13.1.1 用摘要保护密码 304
13.1.2 单向摘要 306
13.1.3 用随机数防止重放攻击 307
13.1.4 摘要认证的握手机制 307
13.2 摘要的计算 308
13.2.1 摘要算法的输入数据 308
13.2.2 算法H(d)和KD(s,d) 310
13.2.3 与安全性相关的数据(A1) 310
13.2.4 与报文有关的数据(A2) 310
13.2.5 摘要算法总述 311
13.2.6 摘要认证会话 312
13.2.7 预授权 312
13.2.8 随机数的选择 315
13.2.9 对称认证 315
13.3 增强保护质量 316
13.3.1 报文完整性保护 316
13.3.2 摘要认证首部 317
13.4 应该考虑的实际问题 317
13.4.1 多重质询 318
13.4.2 差错处理 318
13.4.3 保护空间 318
13.4.4 重写URI 319
13.4.5 缓存 319
13.5 安全性考虑 320
13.5.1 首部篡改 320
13.5.2 重放攻击 320
13.5.3 多重认证机制 320
13.5.4 词典攻击 321
13.5.5 恶意代理攻击和中间人攻击 321
13.5.6 选择明文攻击 321
13.5.7 存储密码 322
13.6 更多信息 322
第14章 安全HTTP 323
14.1 保护HTTP 的安全 324
14.2 数字加密 326
14.2.1 密码编制的机制与技巧 326
14.2.2 密码 327
14.2.3 密码机 328
14.2.4 使用了密钥的密码 328
14.2.5 数字密码 328
14.3 对称密钥加密技术 330
14.3.1 密钥长度与枚举攻击 330
14.3.2 建立共享密钥 332
14.4 公开密钥加密技术 332
14.4.1 RSA 333
14.4.2 混合加密系统和会话密钥 334
14.5 数字签名 334
14.6 数字证书 336
14.6.1 证书的主要内容 336
14.6.2 X.509 v3证书 337
14.6.3 用证书对服务器进行认证 338
14.7 HTTPS——细节介绍 339
14.7.1 HTTPS概述 339
14.7.2 HTTPS方案 340
14.7.3 建立安全传输 341
14.7.4 SSL握手 341
14.7.5 服务器证书 343
14.7.6 站点证书的有效性 344
14.7.7 虚拟主机与证书 345
14.8 HTTPS客户端实例 345
14.8.1 OpenSSL 346
14.8.2 简单的HTTPS客户端 347
14.8.3 执行OpenSSL客户端 350
14.9 通过代理以隧道形式传输安全流量 351
14.10 更多信息 353
14.10.1 HTTP安全性 353
14.10.2 SSL与TLS 353
14.10.3 公开密钥基础设施 354
14.10.4 数字密码 354
第四部分 实体、编码和国际化
第15章 实体和编码 357
15.1 报文是箱子,实体是货物 359
15.2 Content-Length: 实体的大小 361
15.2.1 检测截尾 361
15.2.2 错误的Content-Length 362
15.2.3 Content-Length与持久连接 362
15.2.4 内容编码 362
15.2.5 确定实体主体长度的规则 362
15.3 实体摘要 364
15.4 媒体类型和字符集 364
15.4.1 文本的字符编码 365
15.4.2 多部分媒体类型 365
15.4.3 多部分表格提交 366
15.4.4 多部分范围响应 367
15.5 内容编码 368
15.5.1 内容编码过程 368
15.5.2 内容编码类型 369
15.5.3 Accept-Encoding首部 369
15.6 传输编码和分块编码 371
15.6.1 可靠传输 371
15.6.2 Transfer-Encoding首部 372
15.6.3 分块编码 373
15.6.4 内容编码与传输编码的结合 375
15.6.5 传输编码的规则 375
15.7 随时间变化的实例 375
15.8 验证码和新鲜度 376
15.8.1 新鲜度 377
15.8.2 有条件的请求与验证码 378
15.9 范围请求 380
15.10 差异编码 382
15.11 更多信息 385
第16章 国际化 387
16.1 HTTP对国际性内容的支持 388
16.2 字符集与HTTP 389
16.2.1 字符集是把字符转换为二进制码的编码 389
16.2.2 字符集和编码如何工作 390
16.2.3 字符集不对,字符就不对 391
16.2.4 标准化的MIME charset值 391
16.2.5 Content-Type首部和Charset首部以及META标志 393
16.2.6 Accept-Charset首部 393
16.3 多语言字符编码入门 394
16.3.1 字符集术语 394
16.3.2 字符集的命名很糟糕 395
16.3.3 字符 396
16.3.4 字形、连笔以及表示形式 396
16.3.5 编码后的字符集 397
16.3.6 字符编码方案 399
16.4 语言标记与HTTP 402
16.4.1 Content-Language首部 402
16.4.2 Accept-Language首部 403
16.4.3 语言标记的类型 404
16.4.4 子标记 404
16.4.5 大小写 405
16.4.6 IANA语言标记注册 405
16.4.7 第一个子标记——名字空间 405
16.4.8 第二个子标记——名字空间 406
16.4.9 其余子标记——名字空间 407
16.4.10 配置和语言有关的首选项 407
16.4.11 语言标记参考表 407
16.5 国际化的URI 408
16.5.1 全球性的可转抄能力与有意义的字符的较量 408
16.5.2 URI字符集合 408
16.5.3 转义和反转义 409
16.5.4 转义国际化字符 409
16.5.5 URI中的模态切换 410
16.6 其他需要考虑的地方 410
16.6.1 首部和不合规范的数据 410
16.6.2 日期 411
16.6.3 域名 411
16.7 更多信息 411
16.7.1 附录 411
16.7.2 互联网的国际化 411
16.7.3 国际标准 412
第17章 内容协商与转码 413
17.1 内容协商技术 414
17.2 客户端驱动的协商 415
17.3 服务器驱动的协商 415
17.3.1 内容协商首部集 416
17.3.2 内容协商首部中的质量值 417
17.3.3 随其他首部集而变化 417
17.3.4 Apache中的内容协商 417
17.3.5 服务器端扩展 418
17.4 透明协商 419
17.4.1 进行缓存与备用候选 419
17.4.2 Vary首部 420
17.5 转码 422
17.5.1 格式转换 422
17.5.2 信息综合 423
17.5.3 内容注入 423
17.5.4 转码与静态预生成的对比 423
17.6 下一步计划 424
17.7 更多信息 424
第五部分 内容发布与分发
第18章 Web主机托管 429
18.1 主机托管服务 430
18.2 虚拟主机托管 431
18.2.1 虚拟服务器请求缺乏主机信息 432
18.2.2 设法让虚拟主机托管正常工作 433
18.2.3 HTTP/1.1的Host首部 437
18.3 使网站更可靠 438
18.3.1 镜像的服务器集群 438
18.3.2 内容分发网络 440
18.3.3 CDN中的反向代理缓存 440
18.3.4 CDN中的代理缓存 440
18.4 让网站更快 441
18.5 更多信息 441
第19章 发布系统 443
19.1 FrontPage为支持发布而做的服务器扩展 444
19.1.1 FrontPage服务器扩展 444
19.1.2 FrontPage术语表 445
19.1.3 FrontPage的RPC协议 445
19.1.4 FrontPage的安全模型 448
19.2 WebDAV与协作写作 449
19.2.1 WebDAV的方法 449
19.2.2 WebDAV与XML 450
19.2.3 WebDAV首部集 451
19.2.4 WebDAV的锁定与防止覆写 452
19.2.5 LOCK方法 453
19.2.6 UNLOCK方法 456
19.2.7 属性和元数据 456
19.2.8 PROPFIND方法 457
19.2.9 PROPPATCH方法 459
19.2.10 集合与名字空间管理 460
19.2.11 MKCOL方法 460
19.2.12 DELETE方法 461
19.2.13 COPY与MOVE方法 462
19.2.14 增强的HTTP/1.1方法 465
19.2.15 WebDAV中的版本管理 466
19.2.16 WebDAV的未来发展 466
19.3 更多信息 467
第20章 重定向与负载均衡 469
20.1 为什么要重定向 470
20.2 重定向到何地 471
20.3 重定向协议概览 471
20.4 通用的重定向方法 474
20.4.1 HTTP重定向 474
20.4.2 DNS重定向 475
20.4.3 任播寻址 480
20.4.4 IP MAC转发 481
20.4.5 IP地址转发 482
20.4.6 网元控制协议 484
20.5 代理的重定向方法 485
20.5.1 显式浏览器配置 485
20.5.2 代理自动配置 485
20.5.3 Web代理自动发现协议 487
20.6 缓存重定向方法 492
20.7 因特网缓存协议 496
20.8 缓存阵列路由协议 497
20.9 超文本缓存协议 500
20.9.1 HTCP认证 502
20.9.2 设置缓存策略 503
20.10 更多信息 504
第21章 日志记录与使用情况跟踪 505
21.1 记录内容 506
21.2 日志格式 507
21.2.1 常见日志格式 507
21.2.2 组合日志格式 508
21.2.3 网景扩展日志格式 509
21.2.4 网景扩展2日志格式 510
21.2.5 Squid代理日志格式 512
21.3 命中率测量 515
21.3.1 概述 515
21.3.2 Meter首部 516
21.4 关于隐私的考虑 517
21.5 更多信息 518
第六部分 附录
附录A URI方案 521
附录B HTTP状态码 529
附录C HTTP首部参考 533
附录D MIME类型 557
附录E Base-64编码 603
附录F 摘要认证 607
附录G 语言标记 615
附录H MIME字符集注册表 641
索引 661
算法导论中文第三版.pdf
内容简介 · · · · · ·
在有关算法的书中,有一些叙述非常严谨,但不够全面;另一些涉及了大量的题材,但又缺乏严谨性。本书将严谨性和全面性融为一体,深入讨论各类算法,并着力使这些算法的设计和分析能为各个层次的读者接受。全书各章自成体系,可以作为独立的学习单元;算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂;说明和解释力求浅显易懂,不失深度和数学严谨性。
全书选材经典、内容丰富、结构合理、逻辑清晰,对本科生的数据结构课程和研究生的算法课程都是非常实用的教材,在IT专业人员的职业生涯中,本书也是一本案头必备的参考书或工程实践手册。
第3版的主要变化:
新增了van Emde Boas树和多线程算法,并且将矩阵基础移至附录。
修订了递归式(现在称为“分治策略”)那一章的内容,更广泛地覆盖分治法。
移除两章很少讲授的内容:二项堆和排序网络。
修订了动态规划和贪心算法相关内容。
流网络相关材料现在基于边上的全部流。
由于关于矩阵基础和Strassen算法的材料移到了其他章,矩阵运算这一章的内容所占篇幅更小。
修改了对Knuth-Morris-Pratt字符串匹配算法的讨论。
新增100道练习和28道思考题,还更新并补充了参考文献。
作者简介 · · · · · ·
Thomas H. Cormen (托马斯•科尔曼) 达特茅斯学院计算机科学系教授、系主任。目前的研究兴趣包括:算法工程、并行计算、具有高延迟的加速计算。他分别于1993年、1986年获得麻省理工学院电子工程和计算机科学博士、硕士学位,师从Charles E. Leiserson教授。由于他在计算机教育领域的突出贡献,Cormen教授荣获2009年ACM杰出教员奖。
Charles E. Leiserson(查尔斯•雷瑟尔森)麻省理工学院计算机科学与电气工程系教授,Margaret MacVicar Faculty Fellow。他目前主持MIT超级计算技术研究组,并是MIT计算机科学和人工智能实验室计算理论研究组的成员。他的研究兴趣集中在并行和分布式计算的理论原理,尤其是与工程现实相关的技术研究。Leiserson教授拥有卡内基•梅隆大学计算机科学博士学位,还是ACM、IEEE和SIAM的会士。
Ronald L. Rivest (罗纳德•李维斯特)现任麻省理工学院电子工程和计算机科学系安德鲁与厄纳•维特尔比(Andrew and Erna Viterbi)教授。他是MIT计算机科学和人工智能实验室的成员,并领导着其中的信息安全和隐私中心。他1977年从斯坦福大学获得计算机博士学位,主要从事密码安全、计算机安全算法的研究。他和Adi Shamir和Len Adleman一起发明了RSA公钥算法,这个算法在信息安全中获得最大的突破,这一成果也使他和Shamir、Adleman一起得到2002年ACM图灵奖。他现在担任国家密码学会的负责人。
Clifford Stein(克利福德•斯坦)哥伦比亚大学计算机科学系和工业工程与运筹学系教授,他还是工业工程与运筹学系的系主任。在加入哥伦比亚大学大学之前,他在达特茅斯学院计算机科学系任教9年。Stein教授拥有MIT硕士和博士学位。他的研究兴趣包括:算法的设计与分析,组合优化、运筹学、网络算法、调度、算法工程和生物计算。
目录 · · · · · ·
出版者的话
译者序
前言
第一部分 基础知识
第1章 算法在计算中的作用 3
1.1 算法 3
1.2 作为一种技术的算法 6
思考题 8
本章注记 8
第2章 算法基础 9
2.1 插入排序 9
2.2 分析算法 13
2.3 设计算法 16
2.3.1 分治法 16
2.3.2 分析分治算法 20
思考题 22
本章注记 24
第3章 函数的增长 25
3.1 渐近记号 25
3.2 标准记号与常用函数 30
思考题 35
本章注记 36
第4章 分治策略 37
4.1 最大子数组问题 38
4.2 矩阵乘法的Strassen算法 43
4.3 用代入法求解递归式 47
4.4 用递归树方法求解递归式 50
4.5 用主方法求解递归式 53
4.6 证明主定理 55
4.6.1 对b的幂证明主定理 56
4.6.2 向下取整和向上取整 58
思考题 60
本章注记 62
第5章 概率分析和随机算法 65
5.1 雇用问题 65
5.2 指示器随机变量 67
5.3 随机算法 69
5.4 概率分析和指示器随机变量的进一步使用 73
5.4.1 生日悖论 73
5.4.2 球与箱子 75
5.4.3 特征序列 76
5.4.4 在线雇用问题 78
思考题 79
本章注记 80
第二部分 排序和顺序统计量
第6章 堆排序 84
6.1 堆 84
6.2 维护堆的性质 85
6.3 建堆 87
6.4 堆排序算法 89
6.5 优先队列 90
思考题 93
本章注记 94
第7章 快速排序 95
7.1 快速排序的描述 95
7.2 快速排序的性能 97
7.3 快速排序的随机化版本 100
7.4 快速排序分析 101
7.4.1 最坏情况分析 101
7.4.2 期望运行时间 101
思考题 103
本章注记 106
第8章 线性时间排序 107
8.1 排序算法的下界 107
8.2 计数排序 108
8.3 基数排序 110
8.4 桶排序 112
思考题 114
本章注记 118
第9章 中位数和顺序统计量 119
9.1 最小值和最大值 119
9.2 期望为线性时间的选择算法 120
9.3 最坏情况为线性时间的选择算法 123
思考题 125
本章注记 126
第三部分 数据结构
第10章 基本数据结构 129
10.1 栈和队列 129
10.2 链表 131
10.3 指针和对象的实现 134
10.4 有根树的表示 137
思考题 139
本章注记 141
第11章 散列表 142
11.1 直接寻址表 142
11.2 散列表 143
11.3 散列函数 147
11.3.1 除法散列法 147
11.3.2 乘法散列法 148
11.3.3 全域散列法 148
11.4 开放寻址法 151
11.5 完全散列 156
思考题 158
本章注记 160
第12章 二叉搜索树 161
12.1 什么是二叉搜索树 161
12.2 查询二叉搜索树 163
12.3 插入和删除 165
12.4 随机构建二叉搜索树 169
思考题 171
本章注记 173
第13章 红黑树 174
13.1 红黑树的性质 174
13.2 旋转 176
13.3 插入 178
13.4 删除 183
思考题 187
本章注记 191
第14章 数据结构的扩张 193
14.1 动态顺序统计 193
14.2 如何扩张数据结构 196
14.3 区间树 198
思考题 202
本章注记 202
第四部分 高级设计和分析技术
第15章 动态规划 204
15.1 钢条切割 204
15.2 矩阵链乘法 210
15.3 动态规划原理 215
15.4 最长公共子序列 222
15.5 最优二叉搜索树 226
思考题 231
本章注记 236
第16章 贪心算法 237
16.1 活动选择问题 237
16.2 贪心算法原理 242
16.3 赫夫曼编码 245
16.4 拟阵和贪心算法 250
16.5 用拟阵求解任务调度问题 253
思考题 255
本章注记 257
第17章 摊还分析 258
17.1 聚合分析 258
17.2 核算法 261
17.3 势能法 262
17.4 动态表 264
17.4.1 表扩张 265
17.4.2 表扩张和收缩 267
思考题 270
本章注记 273
第五部分 高级数据结构
第18章 B树 277
18.1 B树的定义 279
18.2 B树上的基本操作 281
18.3 从B树中删除关键字 286
思考题 288
本章注记 289
第19章 斐波那契堆 290
19.1 斐波那契堆结构 291
19.2 可合并堆操作 292
19.3 关键字减值和删除一个结点 298
19.4 最大度数的界 300
思考题 302
本章注记 305
第20章 van Emde Boas树 306
20.1 基本方法 306
20.2 递归结构 308
20.2.1 原型van Emde Boas结构 310
20.2.2 原型van Emde Boas结构上的操作 311
20.3 van Emde Boas树及其操作 314
20.3.1 van Emde Boas树 315
20.3.2 van Emde Boas树的操作 317
思考题 322
本章注记 323
第21章 用于不相交集合的数据结构 324
21.1 不相交集合的操作 324
21.2 不相交集合的链表表示 326
21.3 不相交集合森林 328
21.4 带路径压缩的按秩合并的分析 331
思考题 336
本章注记 337
第六部分 图算法
第22章 基本的图算法 341
22.1 图的表示 341
22.2 广度优先搜索 343
22.3 深度优先搜索 349
22.4 拓扑排序 355
22.5 强连通分量 357
思考题 360
本章注记 361
第23章 最小生成树 362
23.1 最小生成树的形成 362
23.2 Kruskal算法和Prim算法 366
思考题 370
本章注记 373
第24章 单源最短路径 374
24.1 Bellman-Ford算法 379
24.2 有向无环图中的单源最短路径问题 381
24.3 Dijkstra算法 383
24.4 差分约束和最短路径 387
24.5 最短路径性质的证明 391
思考题 395
本章注记 398
第25章 所有结点对的最短路径问题 399
25.1 最短路径和矩阵乘法 400
25.2 Floyd-Warshall算法 404
25.3 用于稀疏图的Johnson算法 409
思考题 412
本章注记 412
第26章 最大流 414
26.1 流网络 414
26.2 Ford\Fulkerson方法 418
26.3 最大二分匹配 428
26.4 推送重贴标签算法 431
26.5 前置重贴标签算法 438
思考题 446
本章注记 449
第七部分 算法问题选编
第27章 多线程算法 453
27.1 动态多线程基础 454
27.2 多线程矩阵乘法 465
27.3 多线程归并排序 468
思考题 472
本章注记 476
第28章 矩阵运算 478
28.1 求解线性方程组 478
28.2 矩阵求逆 486
28.3 对称正定矩阵和最小二乘逼近 489
思考题 493
本章注记 494
第29章 线性规划 495
29.1 标准型和松弛型 499
29.2 将问题表达为线性规划 504
29.3 单纯形算法 507
29.4 对偶性 516
29.5 初始基本可行解 520
思考题 525
本章注记 526
第30章 多项式与快速傅里叶变换 527
30.1 多项式的表示 528
30.2 DFT与FFT 531
30.3 高效FFT实现 536
思考题 539
本章注记 541
第31章 数论算法 543
31.1 基础数论概念 543
31.2 最大公约数 547
31.3 模运算 550
31.4 求解模线性方程 554
31.5 中国余数定理 556
31.6 元素的幂 558
31.7 RSA公钥加密系统 561
31.8 素数的测试 565
31.9 整数的因子分解 571
思考题 574
本章注记 576
第32章 字符串匹配 577
32.1 朴素字符串匹配算法 578
32.2 Rabin\Karp算法 580
32.3 利用有限自动机进行字符串匹配 583
32.4 Knuth-Morris-Pratt算法 588
思考题 594
本章注记 594
第33章 计算几何学 595
33.1 线段的性质 595
33.2 确定任意一对线段是否相交 599
33.3 寻找凸包 604
33.4 寻找最近点对 610
思考题 613
本章注记 615
第34章 NP完全性 616
34.1 多项式时间 619
34.2 多项式时间的验证 623
34.3 NP完全性与可归约性 626
34.4 NP完全性的证明 633
34.5 NP完全问题 638
34.5.1 团问题 638
34.5.2 顶点覆盖问题 640
34.5.3 哈密顿回路问题 641
34.5.4 旅行商问题 644
34.5.5 子集和问题 645
思考题 647
本章注记 649
第35章 近似算法 651
35.1 顶点覆盖问题 652
35.2 旅行商问题 654
35.2.1 满足三角不等式的旅行商问题 654
35.2.2 一般旅行商问题 656
35.3 集合覆盖问题 658
35.4 随机化和线性规划 661
35.5 子集和问题 663
思考题 667
本章注记 669
第八部分 附录:数学基础知识
附录A 求和 672
A.1 求和公式及其性质 672
A.2 确定求和时间的界 674
思考题 678
附录注记 678
附录B 集合等离散数学内容 679
B.1 集合 679
B.2 关系 682
B.3 函数 683
B.4 图 685
B.5 树 687
B.5.1 自由树 688
B.5.2 有根树和有序树 689
B.5.3 二叉树和位置树 690
思考题 691
附录注记 692
附录C 计数与概率 693
C.1 计数 693
C.2 概率 696
C.3 离散随机变量 700
C.4 几何分布与二项分布 702
C.5 二项分布的尾部 705
思考题 708
附录注记 708
附录D 矩阵 709
D.1 矩阵与矩阵运算 709
D.2 矩阵基本性质 712
思考题 714
附录注记 715
参考文献 716
索引 732