-
分类:工业工程 语言:简体中文 大小:未知 发布时间:12-09-12
目录: Preface ixChapter 1 Introduction to Control Systems 11–1 Introduction 11–2 Examples of Control Systems 41–3 Closed-Loop Control Versus Open-Loop Control 71–4 Design and Compensation of Control Systems 91–5 Outline of the Book 10Chapter 2 Mathematical Modeling of Control Systems 132–1 Introduction 132–2 Transfer Function and Impulse-Response Function 152–3 Automatic Control Systems 172–4 Modeling in State Space 292–5 State-Space Representation of Scalar DifferentialEquation Systems 352–6 Transformation of Mathematical Models with MATLAB 392–7 Linearization of Nonlinear Mathematical Models 43Example Problems and Solutions 46Problems 60Chapter 3 Mathematical Modeling of Mechanical Systemsand Electrical Systems 63 内容介绍:控制工程(control engineering)是处理自动控制系统各种工程实现问题的综合性工程技术。包括对自动控制系统提出要求(即规定指标)、进行设计、构造、运行、分析、检验等过程。控制工程普遍使用频域法(采用系统外部输入输出关系的频率域描述传递函数作为分析和设计的基础)和状态空间法(建立在状态变量描述基础上的对控制系统分析和综合的方法)。其理论和处理方法涉及许多方面,从线性控制到非线性控制,从单变量控制到多变量控制,从连续控制到采样控制,从定常控制到随机控制,从一般的反馈控制到自适应控制等。内容截图: ...
-
分类:数据库 语言:简体中文 大小:未知 发布时间:12-09-11
内容简介本书中,世界级SQL专家Joe Celko针对数据库的设计与编程提出了一系列规则和建议,内容涵盖命名规范、代码版式、键的设计、数据编码方案、编码风格、SQL中的思考方式等多个方面。可以作为软件公司内部编程规范的基础。书中讲述了如何编写标准、高效、易于维护的SQL代码。更重要的是。还教授读者如何像优秀的SQL程序员那样思考,用查询的思维方式来理解数据库,从而大大改善SQL编程风格并提高SQL编程水平。通过阅读本书,读者可以加深对SQL 思维方式的理解,改善SQL 编程风格,并编写出可读性强、可移植且易于维护的SQL 代码。此外,书中的规则对于公司内部制定编程规范也具有很好的借鉴作用。本书适合数据库管理人员和开发人员阅读,也可作为高等院校计算机专业师生的参考教材。内容截图 第1章 名称与数据元素1.1 名称1.1.1 注意名称长度1.1.2 在名称中避免使用所有特殊字符1.1.3 避免使用引号分隔标识符1.1.4 实施大写规则以避免大小写区分问题1.2 遵循ISO-11179标准命名规范1.2.1 SQL的ISO-111791.2.2 抽象级别1.2.3 避免使用描述性前缀1.2.4 制定标准化的后缀1.2.5 表和视图名称应当是遵循业界标准的、集合、类或复数名称1.2.6 相关名基本上也要遵循与其他名称相同的命名规则1.2.7 关系表名应当是常用描述术语1.2.8 元数据模式访问对象的名称可以包含结构信息1.3 命名数据元素时遇到的问题1.3.1 避免模糊名称1.3.2 避免名称在不同的地方改变1.3.3 不要使用专有暴露的物理定位符第2章 字体、标点和间距2.1 版式与代码2.1.1 名称中只使用大小写字母、数字和下划线2.1.2 列名、参数和变量等标量小写2.1.3 模式对象名首字母大写2.1.4 保留字大写2.1.5 避免使用驼峰命名法2.2 单词间距2.3 遵循规范标点规则2.4 使用完全保留字2.5 如果在使用的SQL产品中有标准保留字,就不要使用专有保留字2.6 如果有标准语句,就不要使用专有语句2.7 疏排版面的隔空白道和垂直间距2.8 缩进2.9 使用行间距将语句分组第3章 数据定义语言3.1 将默认值放到合适的地方3.2 默认值的类型应当与列的类型相同3.3 不要使用专有数据类型3.4 将PRIMARY KEY声明放在CREATE TABLE语句的开头3.5 将列按照逻辑顺序排列并按照逻辑组聚合3.6 将参考约束和操作在数据类型下面缩进3.7 在产品代码中为约束命名3.8 将CHECK()约束放在所检查的内容附近3.8.1 对数值考虑使用范围约束3.8.2 对于字符值考虑使用LIKE和SIMILAR TO约束3.8.3 时间值是有长短的3.8.4 避免使用REAL和FLOAT数据类型3.9 将多列约束尽可能靠近这些列3.10 将表级别的CHECK()约束放到表声明的最后3.11 对多表约束使用CREATE ASSERTION3.12 使CHECK()约束的目的唯一3.13 每个表都必须有键才能称为表3.13.1 自动编号不是关系型键3.13.2 文件不是表3.13.3 键的属性3.14 不要分割属性3.14.1 分割为多个表3.14.2 分割为多个列3.14.3 分割为多个行3.15 不要对RDBMS使用面向对象的设计3.15.1 表不是对象实例3.15.2 对RDBMS不要使用EAV设计第4章 尺度与测量4.1 测度论4.1.1 范围与颗粒度4.1.2 范围4.1.3 颗粒度、准确度和精度4.2 尺度类型4.2.1 名义尺度4.2.2 种类尺度4.2.3 绝对尺度4.2.4 顺序尺度4.2.5 级别尺度4.2.6 间距尺度4.2.7 比例尺度4.3 使用尺度4.4 尺度转换4.5 导出单位4.6 标点与标准单位4.7 在数据库中使用尺度的一般准则第5章 数据编码方案5.1 不好的编码方案5.2 编码方案类型5.2.1 枚举编码5.2.2 测量编码5.2.3 缩写编码5.2.4 算法编码5.2.5 层次编码5.2.6 向量编码5.2.7 拼接编码5.3 设计编码方案的一般准则5.3.1 现有的编码标准5.3.2 允许扩展5.3.3 使用显式的丢失值避免NULL5.3.4 为终端用户转换编码5.3.5 在数据库中保存编码5.4 多字符集第6章 编码选择6.1 选择标准构造,不要选择专有构造6.1.1 使用标准OUTER JOIN语法6.1.2 中缀INNER JOIN和CORSS JOIN语法是可选的,但是很好用6.1.3 使用ISO时间语法6.1.4 使用标准和可移植的函数6.2 选择紧凑格式,不要选择松散格式6.2.1 避免使用多余的括号6.2.2 使用CASE系列表达式6.2.3 避免使用冗余表达式6.2.4 寻找紧凑格式6.3 使用注释6.3.1 存储过程6.3.2 控制语句注释6.3.3 对子句的注释6.4 避免优化器提示6.5 触发器的优先级不应当高于DRI操作6.6 使用SQL存储过程6.7 避免在数据库中使用用户定义函数和扩展6.7.1 多语言问题6.7.2 可移植性问题6.7.3 优化问题6.8 避免使用过度的辅助索引6.9 避免使用关联子查询6.10 避免使用UNION6.11 测试SQL6.11.1 测试NULL所有可能的组合6.11.2 检查并测试所有的CHECK()约束6.11.3 注意字符列6.11.4 测试大小第7章 如何使用视图7.1 视图的命名规范与表一样7.2 视图提供行和列级别的安全性7.3 视图确保了有效访问路径7.4 视图对用户隐藏了复杂性7.5 视图确保了正确的数据派生7.6 视图将表和/或列重新命名7.7 视图实施复杂的完整性约束7.8 可更新的视图7.8.1 WITH CHECK OPTION子句7.8.2 INSTEAD OF触发器7.9 每个视图都要有创建的原因7.10 避免视图的数量快速增长7.11 将视图与基表同步7.12 不恰当地使用视图7.12.1 用于域支持的视图7.12.2 单个解决方案的视图7.12.3 不要为每个基表都创建视图7.13 学习使用物化的视图第8章 如何编写存储过程8.1 大多数SQL 4GL都不是用于应用程序的8.2 基本软件工程8.2.1 内聚8.2.2 耦合8.3 使用传统的结构化编程8.4 避免可移植性问题8.4.1 避免创建临时表8.4.2 避免使用游标8.4.3 面向集合的构造优于过程化代码8.5 标量与结构化参数的对比8.6 避免使用动态SQL8.6.1 性能8.6.2 SQL注入第9章 试探法9.1 将规格说明表达为清晰的语句9.2 在名词的后面加上“……的集合”9.3 从问题语句中删除行为动词9.4 仍然可以使用存根9.5 不要担心数据的显示9.6 第一次尝试需要特别处理9.6.1 不要舍不得扔掉你对DDL的第一次尝试9.6.2 保存你对DML的第一次尝试9.7 不要以方框和箭头的方式思考9.8 画圆圈和集合图9.9 学习方言9.10 假设WHERE子句是“巨型变形虫”9.11 使用新闻组和因特网第10章 以SQL的方式思考10.1 不好的SQL编程方式与过程化语言10.2 把列当作字段思考10.3 以过程化而不是说明性的方式思考10.4 模式应该看起来像输入格式附录A 资源附录B 参考文献索引 ...
-
分类:数据库 语言:简体中文 大小:未知 发布时间:12-09-11
目录: 谜题1 财政年度表谜题2 缺勤者谜题3 麻醉师谜题谜题4 门禁卡谜题5 字母数据谜题6 预订旅馆房间谜题7 跟踪投资组合谜题8 调度打印机谜题9 空座位谜题10 社会保险号的工资谜题11 工作顺序谜题12 索赔状态谜题13 教师谜题14 电话谜题15 找出最近两次工资谜题16 机械师谜题17 职业介绍所谜题18 广告信件谜题19 销售冠军谜题20 测验结果谜题21 飞机与飞行员谜题22 房东谜题23 杂志谜题24 十里挑一谜题25 里程碑谜题26 数据流图谜题27 找出相等集合谜题28 计算正弦函数谜题29 计算众数谜题30 平均销售等待时间谜题31 购买所有产品谜题32 计算税收谜题33 计算折旧谜题34 咨询顾问收入谜题35 库存调整谜题36 双重职务谜题37 移动平均数谜题38 账簿更新谜题39 保险损失谜题40 排列谜题41 预算谜题42 清点鱼的数目谜题43 毕业谜题44 成对的款式谜题45 辣味香肠比萨饼谜题46 促销谜题47 连号的座位谜题48 分组还原谜题49 小器械计数谜题50 三个中的两个谜题51 预算与实际支出谜题52 员工问题谜题53 按列折迭表谜题54 潜在的重复谜题55 赛马谜题56 旅馆房间号谜题57 间隔——版本1谜题58 间隔——版本2谜题59 合并时间段谜题60 条码谜题61 对字符串排序谜题62 格式化报表谜题63 连续的分组谜题64 盒子谜题65 产品面向的年龄范围谜题66 数独谜题67 稳定婚姻问题谜题68 搭乘下一班公交车谜题69 LIFO-FIFO库存谜题70 股票趋势谜题71 计算谜题72 预约服务电话谜题73 小型数据清理谜题74 需要派生表吗谜题75 找一间酒吧索引 内容简介《SQL解惑》(第2版)中收集了75个与SQL编程相关的有趣问题,涉及数据库应用的许多方面,如财务、投资、旅游、销售、计算等,不一而足。针对每一个谜题,作者给出了基于SQL-99及更新标准的多种解决方案,展示了解题思路,对SQL程序员有很强的参考价值。《SQL解惑》(第2版)通过以多种方法解答SQL编程谜题,提供一系列实用性很强的问题分析方法。《SQL解惑》(第2版)适合数据库开发人员阅读,也可作为高等院校数据库课程师生的辅助教材。内容截图 ...
-
分类:操作系统 语言:简体中文 大小:未知 发布时间:12-09-11
内容介绍: Shell是用户与内核进行交互操作的一种接口,是Linux最重要的软件之一。目前最流行的Shell称为bash Shell,bash Shell脚本编程以其简洁、高效而著称,多年来成为Linux程序员和系统管理员解决实际问题的利器。 本书结合大量的示例,系统、全面地介绍了bash Shell脚本编程的语法、命令、技巧、调试等内容,在书中还有很多练习可以引导读者思考,力求使读者掌握Linux bash Shell编程的所有特性。 第1章 Shell脚本编程概述 11.1 Linux和Shell概述 21.1.1 Linux简介 21.1.2 Shell简介 31.2 Shell脚本编程的优势 51.3 第一个Shell脚本例子 61.3.1 Shell脚本的基本元素 61.3.2 执行Shell脚本 71.4 本章小结 8第2章 Linux文件系统和文本编辑器 92.1 用户和用户组管理 102.1.1 用户管理常用命令 102.1.2 用户组管理常用命令 142.2 文件和目录操作 162.2.1 文件操作常用命令 172.2.2 目录操作常用命令 212.2.3 文件和目录权限管理 252.2.4 查找文件命令——find 282.3 文本编辑器 312.3.1 vi编辑器 312.3.2 Gedit编辑器 352.4 本章小结 362.5 上机提议 37第3章 正则表达式 393.1 正则表达式基础 403.2 正则表达式的扩展 433.3 通配 443.4 grep命令 463.4.1 grep命令基本用法 473.4.2 grep和正则表达式结合使用的一组例子 533.4.3 grep命令族简介 573.5 本章小结 583.6 上机提议 58第4章 sed命令和awk编程 604.1 sed命令基本用法 614.2 sed编程的一组例子 634.2.1 sed命令选项的一组例子 634.2.2 sed文本定位的一组例子 664.2.3 sed基本编辑命令的一组例子 684.2.4 sed高级编辑命令的一组例子 764.3 awk编程 794.3.1 awk编程模型 804.3.2 awk调用方法 804.4 awk编程的一组例子 814.4.1 awk模式匹配 814.4.2 记录和域 824.4.3 关系和布尔运算符 844.4.4 表达式 864.4.5 系统变量 884.4.6 格式化输出 894.4.7 内置字符串函数 914.4.8 向awk脚本传递参数 934.4.9 条件语句和循环语句 944.4.10 数组 954.5 本章小结 994.6 上机提议 99第5章 文件的排序、合并和分割 1015.1 sort命令 1025.1.1 sort命令的基本用法 1025.1.2 sort和awk的联合用法 1065.2 uniq命令 1085.3 join命令 1115.4 cut命令 1145.5 paste命令 1155.6 split命令 1175.7 tr命令 1195.8 tar命令 1225.9 本章小结 1255.10 上机提议 126第6章 变量和引用 1286.1 变量 1296.1.1 变量替换和赋值 1296.1.2 无类型的Shell脚本变量 1326.1.3 环境变量 1336.1.4 位置参数 1406.2 引用 1416.2.1 全引用和部分引用 1426.2.2 命令替换 1436.2.3 转义 1466.3 本章小结 1496.4 上机提议 150第7章 退出、测试、判断及操作符 1527.1 退出状态 1537.2 测试 1547.2.1 测试结构 1547.2.2 整数比较运算符 1547.2.3 字符串运算符 1567.2.4 文件操作符 1577.2.5 逻辑运算符 1597.3 判断 1617.3.1 简单if结构 1627.3.2 exit命令 1637.3.3 if/else结构 1647.3.4 if/else语句嵌套 1667.3.5 if/elif/else结构 1697.3.6 case结构 1727.4 运算符 1747.4.1 算术运算符 1757.4.2 位运算符 1767.4.3 自增自减运算符 1787.4.4 数字常量 1787.5 本章小结 1807.6 上机提议 180第8章 循环与结构化命令 1828.1 for循环 1838.1.1 列表for循环 1838.1.2 不带列表for循环 1878.1.3 类C风格的for循环 1888.2 while循环 1918.2.1 计数器控制的while循环 1918.2.2 结束标记控制的while循环 1938.2.3 标志控制的while循环 1958.2.4 命令行控制的while循环 1968.3 until循环 1988.4 嵌套循环 1998.5 循环控制符 2038.5.1 break循环控制符 2038.5.2 continue循环控制符 2068.6 select结构 2088.7 本章小结 2108.8 上机提议 210第9章 变量的高级用法 2129.1 内部变量 2139.2 字符串处理 2219.3 有类型变量 2279.4 间接变量引用 2309.5 bash数学运算 2329.5.1 expr命令 2329.5.2 bc运算器 2349.6 本章小结 2359.7 上机提议 236第10章 I/O重定向 23810.1 管道 23910.1.1 管道简介 23910.1.2 cat和more命令 24010.1.3 sed命令与管道 24210.1.4 awk命令与管道 24410.2 I/O重定向 24610.2.1 文件标识符 24610.2.2 I/O重定向符号及其用法 24810.2.3 exec命令的用法 25210.2.4 代码块重定向 25510.3 命令行处理 25810.3.1 命令行处理流程 25810.3.2 eval命令 26110.4 本章小结 26410.5 上机提议 264第11章 Linux/UNIX Shell类型与区别 26611.1 Linux/UNIX Shell起源与分类 26711.2 dash简介 26811.3 tcsh简介 27011.4 Korn Shell简介 27511.5 本章小结 280第12章 子Shell与进程处理 28112.1 子Shell 28212.1.1 内建命令 28212.1.2 圆括号结构 28512.2 Shell的限制模式 29012.3 进程处理 29212.3.1 进程和作业 29412.3.2 作业控制 29512.3.3 信号 29912.3.4 trap命令 30212.4 本章小结 30512.5 上机提议 305第13章 函数 30713.1 函数的定义和基本知识 30813.2 向函数传递参数 31113.3 函数返回值 31413.4 函数调用 31513.4.1 脚本放置多个函数 31613.4.2 函数相互调用 31713.4.3 一个函数调用多个函数 31913.5 局部变量和全局变量 32013.6 函数递归 32113.6.1 使用局部变量的递归 32213.6.2 不使用局部变量的递归 32313.7 本章小结 32513.8 上机提议 326第14章 别名、列表及数组 32814.1 别名 32914.2 列表 33214.3 数组 33414.3.1 数组的基本用法 33514.3.2 数组的特殊用法 33914.3.3 用数组实现简单的数据结构 34314.4 本章小结 34914.5 上机提议 349第15章 一些混杂的主题 35215.1 脚本编写风格 35315.1.1 缩进 35315.1.2 {}的格式 35515.1.3 空格和空行的用法 35515.1.4 判断和循环的编程风格 35615.1.5 命名规范 35715.1.6 注释风格 35815.2 脚本优化 35915.2.1 简化脚本 35915.2.2 保持脚本的灵活性 36115.2.3 给用户足够的提示 36215.3 Linux中的特殊命令 36415.3.1 shift命令 36415.3.2 getopts命令 36715.4 交互式和非交互式Shell脚本 36915.4.1 非交互式Shell脚本 36915.4.2 交互式Shell脚本 37115.5 /dev文件系统 37215.5.1 /dev文件系统基础知识 37215.5.2 /dev/zero伪设备 37415.5.3 /dev/null伪设备 37515.6 /proc文件系统 37615.6.1 使用/proc/sys优化系统参数 37815.6.2 查看运行中的进程信息 37915.6.3 查看文件系统信息 38015.6.4 查看网络信息 38015.7 Shell包装 38115.8 带颜色的脚本 38315.9 Linux脚本安全 38915.9.1 使用shc工具加密Shell脚本 39015.9.2 Linux Shell脚本编写的病毒 39115.9.3 Linux Shell中的木马 39215.10 本章小结 39215.11 上机提议 393第16章 Shell脚本调试技术 39516.1 Shell脚本调试概述 39616.2 Shell脚本调试技术 39816.2.1 使用trap命令 39816.2.2 使用tee命令 40116.2.3 调试钩子 40316.2.4 使用Shell选项 40416.3 本章小结 40916.4 上机提议 409第17章 bash Shell编程范例 41217.1 将文本文件转化为HTML文件 41317.2 查找文本中n个出现频率最高的单词 41717.3 伪随机数的产生和应用 41917.4 crontab的设置和应用 42317.5 使用MySQL数据库 42617.5.1 MySQL基础 42617.5.2 Shell脚本使用MySQL 42717.6 Linux服务器性能监控系统 43217.6.1 Ganglia简介及安装 43217.6.2 提取服务器性能参数名称及数据 43517.6.3 动态更新服务器监控数据 44117.7 本章小结 44317.8 上机提议 443附录 445附录A POSIX标准简介 446附录B 常用ASCII码对照表 447附录C Linux信号及其意义 452附录D bash内建变量索引 453附录E bash内建命令索引 455参考文献 458 ...
-
分类:编程开发 语言:简体中文 大小:未知 发布时间:12-09-11
内容简介本书介绍了Spring2.0的新特性,诸如Spring2.0的新配置、新AOP支持、增强的IOC、JDBC和form标签等新功能。它通过实际完成一个完整的Spring项目示例,展示了与Spring相关API的使用技巧,能够显著减少每一位入门者摸索SpringAPI的时间。本书是学习SpringWeb开发的最佳读物,它能让读者在示例学习中获得显著提高。内容截图 导读第1章认识Spring第2章Spring入门第3章Bean、消息、事件第4章SpringAOP第5章JDBC、事务支持第6章Hibernate与Spring第7章SpringWebMVC框架第8章View层方案、Web框架整合第9章API封装第10章项目:Spring在线书签 ...
-
分类:编程开发 语言:简体中文 大小:未知 发布时间:12-09-11
内容介绍: 《Python学习手册(第4版)》学习Python的主要内建对象类型:数字、列表和字典。使用Python语句创建和处理对象,并且学习Python的通用语法模型。使用函数构造和重用代码,函数是Python的基本过程工具。学习Python模块:封装语句、函数以及其他工具,以便构建较大的组件。学习Python的面向对象编程工具,用于组织程序代码。学习异常处理模型,以及用于编写较大程序的开发工具。了解高级Python工具,如装饰器、描述器、元类和Unicode处理等。 Google和YouTube由于PythonF的高可适应性、易于维护以及适合于快速开发而采用它。《Python学习手册(第4版)》将帮助你使用Python编写出高质量、高效的并且易于与其他语言和工具集成的代码。《Python学习手册(第4版)》根据Python专家MarkLutz的著名培训课程编写而成,是易于掌握和自学的Python教程。 《python学习手册:第4版》前言 1第一部分 使用入门第1章 问答环节 19人们为何使用python 19软件质量 20开发效率 21python是“脚本语言”吗 21好吧,python的缺点是什么呢 23如今谁在使用python 23使用python可以做些什么 24系统编程 25用户图形接口 25internet脚本 25组件集成 26数据库编程 26快速原型 27数值计算和科学计算编程 27游戏、图像、人工智能、xml、机器人等 27python如何获得支持 28.python有哪些技术上的优点 28面向对象 28免费 29可移植 29功能强大 30可混合 31简单易用 31简单易学 32python和其他语言比较起来怎么样 32本章小结 33本章习题 33习题解答 34python是工程,不是艺术 34第2章 python如何运行程序 36python解释器简介 36程序执行 37程序员的视角 37python的视角 39执行模块的变体 41python实现的替代者 42执行优化工具 43冻结二进制文件 44其他执行选项 45未来的可能性 46本章小结 46本章习题 47习题解答 47第3章 如何运行程序 48交互提示模式下编写代码 48交互地运行代码 49为什么使用交互提示模式 51使用交互提示模式 52系统命令行和文件 54第一段脚本 55使用命令行运行文件 56使用命令行和文件 57unix可执行脚本(#!) 58unix env查找技巧 59点击文件图标 60在windows中点击图标 60input的技巧 61图标点击的其他限制 63模块导入和重载 63模块的显要特性:属性 65import和reload的使用注意事项 68使用exec运行模块文件 69idle用户界面 70idle基础 71使用idle 72高级idle工具 74其他的ide 74其他启动选项 76嵌入式调用 76冻结二进制的可执行性 77文本编辑器启动的选择 77其他的启动选择 77未来的可能 77我应该选用哪种 78调试python代码 78本章小结 80本章习题 80习题解答 80第一部分 练习题 81第二部分 类型和运算第4章 介绍python对象类型 87为什么使用内置类型 88python的核心数据类型 88数字 90字符串 92序列的操作 92不可变性 94类型特定的方法 94寻求帮助 96编写字符串的其他方法 97模式匹配 98列表 98序列操作 98类型特定的操作 99边界检查 100嵌套 100列表解析 101字典 103映射操作 103重访嵌套 104键的排序:for 循环 105迭代和优化 107不存在的键:if 测试 107元组 109为什么要用元组 109文件 110其他文件类工具 111其他核心类型 111如何破坏代码的灵活性 113用户定义的类 114剩余的内容 115本章小结 115本章习题 116习题解答 116第5章 数字 117python的数字类型 117数字常量 118内置数学工具和扩展 119python表达式操作符 120在实际应用中的数字 125变量和基本的表达式 125数字显示的格式 126比较:一般的和连续的 127str和repr显示格式 128除法: 传统除法、floor除法和真除法 129整数精度 133复数 133十六进制、八进制和二进制记数 134位操作 136其他的内置数学工具 137其他数字类型 139小数数字 139分数类型 141集合 145布尔型 151数字扩展 152本章小结 153本章习题 153习题解答 153第6章 动态类型简介 155缺少类型声明语句的情况 155变量、对象和引用 156类型属于对象,而不是变量 157对象的垃圾收集 158共享引用 159共享引用和在原处修改 161共享引用和相等 163动态类型随处可见 164本章小结 165本章习题 165习题解答 165第7章 字符串 167字符串常量 169单双引号字符串是一样的 170用转义序列代表特殊字节 171raw字符串抑制转义 173三重引号编写多行字符串块 175实际应用中的字符串 176基本操作 176索引和分片 177为什么要在意:分片 181字符串转换工具 181修改字符串 184字符串方法 185字符串方法实例:修改字符串 187字符串方法实例:文本解析 189实际应用中的其他常见字符串方法 190最初的字符串模块(在python 3.0中删除) 191字符串格式化表达式 192更高级的字符串格式化表达式 194基于字典的字符串格式化 196字符串格式化调用方法 196基础知识 197添加键、属性和偏移量 198添加具体格式化 198与%格式化表达式比较 200为什么用新的格式化方法 203通常意义下的类型分类 206同样分类的类型共享其操作集合 206可变类型能够在原处修改 207本章小结 208本章习题 208习题解答 208第8章 列表与字典 210列表 210实际应用中的列表 213基本列表操作 213列表迭代和解析 213索引、分片和矩阵 214原处修改列表 215字典 220实际应用中的字典 222字典的基本操作 222原处修改字典 223其他字典方法 224语言表 225字典用法注意事项 226为什么要在意字典接口 229创建字典的其他方法 230python 3.0中的字典变化 231本章小结 237本章习题 237习题解答 237第9章 元组、文件及其他 239元组 239实际应用中的元组 241为什么有了列表还要元组 243文件 243打开文件 244使用文件 245实际应用中的文件 246其他文件工具 252重访类型分类 254为什么要在意操作符重载 255对象灵活性 255引用 vs 拷贝 256比较、相等性和真值 258python 3.0的字典比较 260python中真和假的含义 261python的类型层次 263type对象 263python中的其他类型 265内置类型陷阱 265赋值生成引用,而不是拷贝 265重复能够增加层次深度 266留意循环数据结构 266不可变类型不可以在原处改变 267本章小结 267本章习题 268习题解答 268第二部分练习题 269第三部分 语句和语法第10章 python语句简介 275重访python程序结构 275python的语句 276两个if的故事 278python增加了什么 279python删除了什么 279为什么使用缩进语法 281几个特殊实例 283简短实例:交互循环 285一个简单的交互式循环 285对用户输入数据做数学运算 287用测试输入数据来处理错误 288用try语句处理错误 289嵌套代码三层 290本章小结 290本章习题 291习题解答 291第11章 赋值、表达式和打印 292赋值语句 292赋值语句的形式 293序列赋值 294python 3.0中的扩展序列解包 297多目标赋值语句 301增强赋值语句 302变量命名规则 305python的废弃协议 306表达式语句 308表达式语句和在原处的修改 309打印操作 310python 3.0的print函数 311python 2.6 print语句 313打印流重定向 315版本独立的打印 318为什么要注意print和stdout 319本章小结 320本章习题 321习题解答 321第12章 if测试和语法规则 322if语句 322通用格式 322基本例子 323多路分支 323python语法规则 325代码块分隔符 326语句的分隔符 328一些特殊情况 329真值测试 330if/else三元表达式 332为什么要在意布尔值 334本章小结 335本章习题 335习题解答 335第13章 while和for循环 336while循环 336一般格式 336例子 337break、continue、pass和循环else 338一般循环格式 338pass 338continue 340break 340循环else 341为什么要在意“模拟c 语言的while循环” 342for循环 343一般格式 343例子 344为什么要在意“文件扫描” 349编写循环的技巧 350循环计数器:while和range 351非完备遍历:range和分片 352修改列表:range 353并行遍历:zip和map 354产生偏移和元素:enumerate 357本章小结 358本章习题 358习题解答 359第14章 迭代器和解析,第一部分 360迭代器:初探 360文件迭代器 361手动迭代:iter和next 363其他内置类型迭代器 365列表解析:初探 367列表解析基础知识 368在文件上使用列表解析 369扩展的列表解析语法 370其他迭代环境 371python 3.0中的新的可迭代对象 375range迭代器 376map、zip和filter迭代器 377多个迭代器 vs单个迭代器 378字典视图迭代器 379其他迭代器主题 381本章小结 381本章习题 381习题解答 382第15章 文档 383python文档资源 383#注释 384dir函数 384文档字符串:__doc__ 385pydoc:help函数 388pydoc:html报表 390标准手册集 393网络资源 394已出版的书籍 394常见编写代码的陷阱 395本章小结 397本章习题 397习题解答 397第三部分练习题 398第四部分 函数第16章 函数基础 403为何使用函数 404编写函数 405def语句 406def语句是实时执行的 407第一个例子:定义和调用 408定义 408调用 408python中的多态 409第二个例子:寻找序列的交集 410定义 410调用 411重访多态 411本地变量 412本章小结 413本章习题 413习题解答 413第17章 作用域 415python作用域基础 415作用域法则 416变量名解析:legb原则 418作用域实例 419内置作用域 420在python 2.6中违反通用性 422global语句 422最小化全局变量 423最小化文件间的修改 424其他访问全局变量的方法 426作用域和嵌套函数 427嵌套作用域的细节 427嵌套作用域举例 427nonlocal语句 433nonlocal基础 433nonlocal应用 435为什么使用nonlocal 437本章小结 440本章习题 441习题解答 442第18章 参数 444传递参数 444参数和共享引用 445避免可变参数的修改 447对参数输出进行模拟 448特定的参数匹配模型 449基础知识 449匹配语法 450细节 452关键字参数和默认参数的实例 452任意参数的实例 455python 3.0 keyword-only参数 459min调用 462满分 463加分点 464结论 465一个更有用的例子:通用set函数 465模拟python 3.0 print函数 466使用keyword-only参数 467为什么要在意:关键字参数 469本章小结 469本章习题 470习题解答 470第19章 函数的高级话题 472函数设计概念 472递归函数 474用递归求和 474编码替代方案 475循环语句vs递归 476处理任意结构 477函数对象:属性和注解 478间接函数调用 478函数内省 479函数属性 480python 3.0中的函数注解 481匿名函数: lambda 483lambda表达式 483为什么使用lambda 484如何(不要)让python代码变得晦涩难懂 486嵌套lambda和作用域 487为什么要在意:回调 488在序列中映射函数:map 489函数式编程工具:filter和reduce 490本章小结 492本章习题 492习题解答 492第20章 迭代和解析,第二部分 494回顾列表解析:函数式编程工具 494列表解析与map 495增加测试和嵌套循环 496列表解析和矩阵 498理解列表解析 499为什么要在意:列表解析和map 500重访迭代器:生成器 501生成器函数:yield vs return 502生成器表达式:迭代器遇到列表解析 506生成器函数 vs 生成器表达式 507生成器是单迭代器对象 508用迭代工具模拟zip和map 510为什么你会留意:单次迭代 514内置类型和类中的值生成 515python 3.0解析语法概括 516解析集合和字典解析 517针对集合和字典的扩展的解析语法 517对迭代的各种方法进行计时 518对模块计时 519计时脚本 519计时结果 520计时模块替代方案 523其他建议 527函数陷阱 528本地变量是静态检测的 528默认和可变对象 529没有return语句的函数 531嵌套作用域的循环变量 532本章小结 532本章习题 532习题解答 533第四部分练习题 533第五部分 模块第21章 模块:宏伟蓝图 539为什么使用模块 540python程序架构 540如何组织一个程序 541导入和属性 541标准库模块 543import如何工作 5431.搜索 5442.编译(可选) 5443.运行 545模块搜索路径 545配置搜索路径 547搜索路径的变动 548sys.path列表 548模块文件选择 549高级的模块选择概念 550第三方工具:distutils 550本章小结 551本章习题 551习题解答 551第22章 模块代码编写基础 553模块的创建 553模块的使用 554import语句 554from语句 555from *语句 555导入只发生一次 555import和from是赋值语句 556文件间变量名的改变 557import和from的对等性 557from语句潜在的陷阱 558模块命名空间 560文件生成命名空间 560属性名的点号运算 562导入和作用域 562命名空间的嵌套 563重载模块 564reload基础 565reload实例 566为什么要在意:模块重载 567本章小结 568本章习题 568习题解答 568第23章 模块包 570包导入基础 570包和搜索路径设置 571__init__.py包文件 572包导入实例 573包对应的from语句和import语句 574为什么要使用包导入 575三个系统的传说 576包相对导入 578python 3.0中的变化 578相对导入基础知识 579为什么使用相对导入 581相对导入的作用域 583模块查找规则总结 583相对导入的应用 584为什么要在意:模块包 589本章小结 590本章习题 590习题解答 590第24章 高级模块话题 592在模块中隐藏数据 592最小化from *的破坏:_x和__all__ 593启用以后的语言特性 593混合用法模式:__name__和__main__ 594以__name__进行单元测试 595使用带有__name__的命令行参数 596修改模块搜索路径 599import语句和from语句的as扩展 599模块是对象:元程序 600用名称字符串导入模块 603过渡性模块重载 604模块设计理念 607模块陷阱 607顶层代码的语句次序的重要性 608from复制变量名,而不是连接 609from *会让变量语义模糊 610reload不会影响from导入 610reload、from以及交互模式测试 611递归形式的from导入无法工作 612本章小结 613本章习题 613习题解答 613第五部分练习题 614第六部分 类和oop第25章 oop:宏伟蓝图 619为何使用类 620概览oop 621属性继承搜索 621类和实例 623类方法调用 624编写类树 624oop是为了代码重用 627本章小结 629本章习题 629习题解答 630第26章 类代码编写基础 631类产生多个实例对象 631类对象提供默认行为 632实例对象是具体的元素 632第一个例子 632类通过继承进行定制 635第二个例子 635类是模块内的属性 637类可以截获python运算符 638第三个例子 639为什么要使用运算符重载 641世界上最简单的python类 641类与字典的关系 644本章小结 646本章习题 646习题解答 646第27章 更多实例 649步骤1:创建实例 650编写构造函数 650在进行中测试 651以两种方式使用代码 652版本差异提示 654步骤2:添加行为方法 654编写方法 656步骤3:运算符重载 658提供打印显示 658步骤4:通过子类定制行为 659编写子类 660扩展方法:不好的方式 660扩展方法:好的方式 661多态的作用 663继承、定制和扩展 664oop:大思路 664步骤5:定制构造函数 665oop比我们认为的要简单 666组合类的其他方式 667在python 3.0中捕获内置属性 669步骤6:使用内省工具 670特殊类属性 670一种通用显示工具 671实例与类属性的关系 672工具类的命名考虑 673类的最终形式 674步骤7(最后一步):把对象存储到数据库中 676pickle和shelve 676在shelve数据库中存储对象 677交互地探索shelve 678更新shelve中的对象 680未来方向 681本章小结 683本章习题 684习题解答 684第28章 类代码编写细节 686class语句 686一般形式 686例子 687方法 689例子 690调用超类构造函数 691其他方法调用的可能性 691继承 692属性树的构造 692继承方法的专有化 693类接口技术 694抽象超类 695python 2.6和python 3.0的抽象超类 696命名空间:完整的内容 698简单变量名:如果赋值就不是全局变量 698属性名称:对象命名空间 698python命名空间的“禅”:赋值将变量名分类 699命名空间字典 701命名空间链接 704回顾文档字符串 706类与模块的关系 707本章小结 708本章习题 708习题解答 708第29章 运算符重载 710基础知识 710构造函数和表达式:__init__和__sub__ 711常见的运算符重载方法 711索引和分片:__getitem__和__setitem__ 713拦截分片 713python 2.6中的分片和索引 715索引迭代:__getitem__ 716迭代器对象:__iter__和__next__ 717用户定义的迭代器 717有多个迭代器的对象 719成员关系:__contains__、__iter__和__getitem__ 721属性引用:__getattr__和__setattr__ 723其他属性管理工具 725模拟实例属性的私有性:第一部分 725__repr__和__str__会返回字符串表达形式 726右侧加法和原处加法:__radd__和__iadd__ 729原处加法 730call表达式:__call__ 731函数接口和回调代码 732比较:__lt__、__gt__和其他方法 734python 2.6的__cmp__方法(已经从python 3.0中移除了) 734布尔测试:__bool__和__len__ 735python 2.6中的布尔 736对象析构函数:__del__ 738本章小结 739本章习题 739习题解答 739第30章 类的设计 741python和oop 741通过调用标记进行重载(或不要) 742oop和继承:“是一个”关系 743oop和组合:“有一个”关系 744重访流处理器 746为什么要在意:类和持续性 748oop和委托:“包装”对象 749类的伪私有属性 751变量名压缩概览 751为什么使用伪私有属性 752方法是对象:绑定或无绑定 754在python 3.0中,无绑定方法是函数 756绑定方法和其他可调用对象 757为什么要在意:绑定方法和回调函数 760多重继承:“混合”类 760编写混合显示类 761类是对象:通用对象的工厂 771为什么有工厂 772与设计相关的其他话题 773本章小结 773本章习题 774习题解答 774第31章 类的高级主题 775扩展内置类型 775通过嵌入扩展类型 776通过子类扩展类型 777新式类 779新式类变化 780类型模式变化 781钻石继承变动 785新式类的扩展 789slots实例 789类特性 793__getattribute__和描述符 795元类 795静态方法和类方法 796为什么使用特殊方法 796python 2.6和python 3.0中的静态方法 797静态方法替代方案 799使用静态和类方法 800使用静态方法统计实例 801用类方法统计实例 802装饰器和元类:第一部分 805函数装饰器基础 805装饰器例子 806类装饰器和元类 807更多详细信息 808类陷阱 809修改类属性的副作用 809修改可变的类属性也可能产生副作用 810多重继承:顺序很重要 811类、方法以及嵌套作用域 812python中基于委托的类:__getattr__和内置函数 814“过度包装” 814本章小结 815本章习题 815习题解答 815第六部分练习题 816为什么要在意:大师眼中的oop 821第七部分 异常和工具第32章 异常基础 825为什么使用异常 826异常的角色 826异常处理:简明扼要 827默认异常处理器 827捕获异常 828引发异常 829用户定义的异常 830终止行为 830为什么要在意:错误检查 832本章小结 833本章习题 833习题解答 834第33章 异常编码细节 835try/except/else语句 835try语句分句 836try/else分句 839例子:默认行为 840例子:捕捉内置异常 841try/finally语句 841例子:利用try/finally编写终止行为 842统一try/except/finally语句 843统一try语句语法 845通过嵌套合并finally和except 845合并try的例子 846raise语句 847利用raise传递异常 849python 3.0异常链:raise from 849assert语句 850例子:收集约束条件(但不是错误) 850with/as环境管理器 851基本使用 852环境管理协议 853本章小结 855本章习题 855习题解答 856第34章 异常对象 857异常:回到未来 858字符串异常很简单 858基于类的异常 858类异常例子 859为什么使用类异常 861内置exception类 864内置异常分类 865默认打印和状态 866定制打印显示 867定制数据和行为 868提供异常细节 868提供异常方法 869本章小结 870本章习题 870习题解答 870第35章 异常的设计 872嵌套异常处理器 872例子:控制流程嵌套 873例子:语法嵌套化 874异常的习惯用法 876异常不总是错误 876函数信号条件和raise 876关闭文件和服务器连接 877在try外进行调试 878运行进程中的测试 879关于sys.exc_info 879与异常有关的技巧 880应该包装什么 881捕捉太多:避免空except语句 881捕捉过少:使用基于类的分类 883核心语言总结 884python工具集 884大型项目的开发工具 885本章小结 888第七部分练习题 889第八部分 高级话题注1第36章 unicode和字节字符串 893python 3.0中的字符串修改 894字符串基础知识 895字符编码方法 895python的字符串类型 897文本和二进制文件 899python 3.0中的字符串应用 900常量和基本属性 900转换 901编码unicode字符串 903编码ascii文本 903编码非ascii文本 904编码和解码非ascii文本 904其他unicode编码技术 905转换编码 907在python 2.6中编码unicode字符串 908源文件字符集编码声明 910使用python 3.0 bytes对象 911方法调用 912序列操作 913创建bytes对象的其他方式 913混合字符串类型 914使用python 3.0(和python 2.6)bytearray对象 915使用文本文件和二进制文件 918文本文件基础 919python 3.0中的文本和二进制模式 919类型和内容错误匹配 921使用unicode文件 922在python 3.0中读取和写入unicode 922在python 3.0中处理bom 924python 2.6中的unicode文件 927python 3.0中其他字符串工具的变化 927re模式匹配模块 927struct二进制数据模块 928pickle对象序列化模块 931xml解析工具 932本章小结 935本章习题 935习题解答 936第37章 管理属性 938为什么管理属性 938插入在属性访问时运行的代码 939特性 940基础知识 940第一个例子 941计算的属性 942使用装饰器编写特性 943描述符 944基础知识 945第一个示例 947计算的属性 949在描述符中使用状态信息 950特性和描述符是如何相关的 952__getattr__和__getattribute__ 953基础知识 954第一个示例 956计算属性 958__getattr__和__getattribute__比较 959管理技术比较 960拦截内置操作属性 963重访基于委托的manager 967示例:属性验证 970使用特性来验证 971使用描述符验证 973使用__getattr__来验证 974使用__getattribute__验证 976本章小结 977本章习题 977习题解答 977第38章 装饰器 979什么是装饰器 979管理调用和实例 980管理函数和类 980使用和定义装饰器 981为什么使用装饰器 981基础知识 982函数装饰器 982类装饰器 986装饰器嵌套 988装饰器参数 990装饰器管理函数和类 991编写函数装饰器 991跟踪调用 992状态信息保持选项 993类错误之一:装饰类方法 997计时调用 1002添加装饰器参数 1004编写类装饰器 1007单体类 1007跟踪对象接口 1009类错误之二:保持多个实例 1012装饰器与管理器函数的关系 1013为什么使用装饰器(重访) 1015直接管理函数和类 1016示例:“私有”和“公有”属性 1018实现私有属性 1019实现细节之一 1021公有声明的泛化 1022实现细节之二 1024开放问题 1025python不是关于控制 1029示例:验证函数参数 1030目标 1030针对位置参数的一个基本范围测试装饰器 1031针对关键字和默认泛化 1033实现细节 1036开放问题 1038装饰器参数 vs 函数注解 1039其他应用程序:类型测试 1041本章小结 1042本章习题 1042习题解答 1043第39章 元类 1046要么是元类,要么不是元类 1046提高魔力层次 1047“辅助”函数的缺点 1049元类与类装饰器的关系:第一回合 1051元类模型 1053类是类型的实例 1053元类是type的子类 1055class语句协议 1056声明元类 1057编写元类 1058基本元类 1058定制构建和初始化 1059其他元类编程技巧 1060实例与继承的关系 1063示例:向类添加方法 1064手动扩展 1064基于元类的扩展 1065元类与类装饰器的关系:第二回合 1067示例:对方法应用装饰器 1070用装饰器手动跟踪 1070用元类和装饰器跟踪 1071把任何装饰器应用于方法 1073元类与类装饰器的关系:第三回合 1074“可选的”语言功能 1076本章小结 1078本章习题 1078习题解答 1078第九部分 附录注2附录a 安装和配置 1083附录b 各部分练习题的解答 1093 ...
-
分类:C/C++ 语言:简体中文 大小:未知 发布时间:12-09-11
目录: 前 言组织和策略问题 1第0条 不要拘泥于小节(又名:了解哪些东西不应该标准化) 2第1条 在高警告级别干净利落地进行编译 4第2条 使用自动构建系统 7第3条 使用版本控制系统 8第4条 做代码审查 9设计风格 11第5条 一个实体应该只有一个紧凑的职责 12第6条 正确、简单和清晰第一 13第7条 编程中应知道何时和如何考虑可伸缩性 14第8条 不要进行不成熟的优化 16第9条 不要进行不成熟的劣化 18第10条 尽量减少全局和共享数据 19第11条 隐藏信息 20第12条 懂得何时和如何进行并发性编程 21第13条 确保资源为对象所拥有。使用显式的RAII和智能指针 24编程风格 27第14条 宁要编译时和连接时错误,也不要运行时错误 28第15条 积极使用const 30第16条 避免使用宏 32第17条 避免使用“魔数” 34第18条 尽可能局部地声明变量 35第19条 总是初始化变量 36第20条 避免函数过长,避免嵌套过深 38第21条 避免跨编译单元的初始化依赖 39第22条 尽量减少定义性依赖。避免循环依赖 40第23条 头文件应该自给自足 42第24条 总是编写内部#include保护符,决不要编写外部#include保护符 43函数与操作符 45第25条 正确地选择通过值、(智能)指针或者引用传递参数 46第26条 保持重载操作符的自然语义 47第27条 优先使用算术操作符和赋值操作符的标准形式 48第28条 优先使用++和--的标准形式。优先调用前缀形式 50第29条 考虑重载以避免隐含类型转换 51第30条 避免重载&&、||或 ,(逗号) 52第31条 不要编写依赖于函数参数求值顺序的代码 54类的设计与继承 55第32条 弄清所要编写的是哪种类 56第33条 用小类代替巨类 57第34条 用组合代替继承 58第35条 避免从并非要设计成基类的类中继承 60第36条 优先提供抽象接口 62第37条 公用继承即可替换性。继承,不是为了重用,而是为了被重用 64第38条 实施安全的覆盖 66第39条 考虑将虚拟函数声明为非公用的,将公用函数声明为非虚拟的 68第40条 要避免提供隐式转换 70第41条 将数据成员设为私有的,无行为的聚集(C语言形式的struct)除外 72第42条 不要公开内部数据 74第43条 明智地使用Pimpl 76第44条 优先编写非成员非友元函数 79第45条 总是一起提供new和delete 80第46条 如果提供类专门的new,应该提供所有标准形式(普通、就地和不抛出) 82构造、析构与复制 85第47条 以同样的顺序定义和初始化成员变量 86第48条 在构造函数中用初始化代替赋值 87第49条 避免在构造函数和析构函数中调用虚拟函数 88第50条 将基类析构函数设为公用且虚拟的,或者保护且非虚拟的 90第51条 析构函数、释放和交换绝对不能失败 92第52条 一致地进行复制和销毁 94第53条 显式地启用或者禁止复制 95第54条 避免切片。在基类中考虑用克隆代替复制 96第55条 使用赋值的标准形式 99第56条 只要可行,就提供不会失败的swap(而且要正确地提供) 100名字空间与模块 103第57条 将类型及其非成员函数接口置于同一名字空间中 104第58条 应该将类型和函数分别置于不同的名字空间中,除非有意想让它们一起工作 106第59条 不要在头文件中或者#include之前编写名字空间using 108第60条 要避免在不同的模块中分配和释放内存 111第61条 不要在头文件中定义具有链接的实体 112第62条 不要允许异常跨越模块边界传播 114第63条 在模块的接口中使用具有良好可移植性的类型 116模板与泛型 119第64条 理智地结合静态多态性和动态多态性 120第65条 有意地进行显式自定义 122第66条 不要特化函数模板 126第67条 不要无意地编写不通用的代码 128错误处理与异常 129第68条 广泛地使用断言记录内部假设和不变式 130第69条 建立合理的错误处理策略,并严格遵守 132第70条 区别错误与非错误 134第71条 设计和编写错误安全代码 137第72条 优先使用异常报告错误 140第73条 通过值抛出,通过引用捕获 144第74条 正确地报告、处理和转换错误 145第75条 避免使用异常规范 146STL:容器 149第76条 默认时使用vector。否则,选择其他合适的容器 150第77条 用vector和string代替数组 152第78条 使用vector(和string::c_str)与非C++ API交换数据 153第79条 在容器中只存储值和智能指针 154第80条 用push_back代替其他扩展序列的方式 155第81条 多用范围操作,少用单元素操作 156第82条 使用公认的惯用法真正地压缩容量,真正地删除元素 157STL:算法 159第83条 使用带检查的STL实现 160第84条 用算法调用代替手工编写的循环 162第85条 使用正确的STL查找算法 165第86条 使用正确的STL排序算法 166第87条 使谓词成为纯函数 168第88条 算法和比较器的参数应多用函数对象少用函数 170第89条 正确编写函数对象 172类型安全 173第90条 避免使用类型分支,多使用多态 174第91条 依赖类型,而非其表示方式 176第92条 避免使用reinterpret_cast 177第93条 避免对指针使用static_cast 178第94条 避免强制转换const 179第95条 不要使用C风格的强制转换 180第96条 不要对非POD进行memcpy操作或者memcmp操作 182第97条 不要使用联合重新解释表示方式 183第98条 不要使用可变长参数(...) 184第99条 不要使用失效对象。不要使用不安全函数 185第100条 不要多态地处理数组 186参考文献 187摘要汇总 193索引 205 内容简介 在本书中,两位知名的c++专家将全球c++界的集体智慧和经验凝结成一套编程规范。这些规范可以作为每一个开发团队制定实际开发规范的基础,更是每一位c++程序员应该遵循的行事准则。书中对每一条规范都给出了精确的描述,并辅以实例说明;从类型定义到错误处理,都给出了最佳的c++实践。即使使用c++多年的程序员也会从本书中受益匪浅。 本书适合于各层次c++程序员使用,也可作为高等院校c++课程的教学参考书。 良好的编程规范可以改善软件质量,缩短上市时间,提升团队效率,简化维护工作。在本书中,两位全世界最受尊敬的c++专家将全球c++界的集体智慧和经验凝结成一整套编程规范。这些规范可以作为每一个开发团队制定实际开发规范的基础,更是每一位c++程序员应该遵循的行事准则。. 本书涵盖了c++程序设计的方方面面,包括设计和编码风格、函数、操作符、类的设计、继承、构造与析构、赋值、名字空间、模块、模板、泛型、异常、stl容器和算法等。书中对每一条规范都给出了言简意赅的叙述,并辅以实例说明;书中还给出了从类型定义到错误处理等方面大量的c++最佳实践,包括许多最新总结出的和标准化的技术,即使使用c++多年的程序员也会从中受益匪浅。 ■通过阅读本书,可以找到以下问题的答案:.. ■哪些东西值得标准化?哪些东西不值得标准化? ■使代码可扩展的最佳方法是什么? ■合理的错误处理策略有哪些要素? ■如何(和为什么要)避免不必要的初始化、循环依赖和定义依赖? ■何时应该(以及如何)同时使用静态和动态的多态性? ■如何实践“安全的”改写(override)? ■何时该提供不会失败的交换(swap)? ■为什么要阻止异常跨越模块边界传播?如何阻止? ■为什么不应该在头文件中写名字空间声明或指令? ■为什么应该使用stl vector和string代替数组? ■如何选择正确的stl搜索算法? ■为了保证代码的类型安全,应该遵从哪些规则?作者简介 Herb Sutter ISO C++标准委员会主席,C++ Users Journal杂志特邀编辑和专栏作家;他目前在微软公司领导NET环境下C++浯言扩展的设计工作除本书外.他还撰写了三本广受赞誉的图书:Exceptional C++ Style、Exceptional C++和More Exceptional C++。 Andrei Alexandrescu 世界顶级的C++专家.“C++ Users Journal杂志的专栏作家,他的Modem C++ Design—书曾荣获2001年最佳C++图朽称号.书中所开发的Loki已经成为最负盛名的C++程序库之一。内容截图 ...
-
分类:编程开发 语言:简体中文 大小:未知 发布时间:12-09-11
内容简介本书通过介绍一系列开源Java开发工具和生动的实例,描述如何用极限编程(eXtreme Programming)理论指导具体的开发行为,从而使Java开发更加灵活、高效、低成本。 本书主要讲述J2EE和极限编程的基础,重点介绍如何掌握极限编程过程中最难的部分:测试、整合和部署。全书以基础开篇,接着辅以范例并对著名的宠物商店范例进行功能性剖析。在了解了各个工具的概念后,作者介绍了测试的实践,一步一步指导读者掌握极限编程开发的技术要点。 本书内容丰富、详实、生动,适合作为Java软件开发人员的参考书。 考虑到富有经验的Java程序员的需要,本书首先简短介绍极限编程方法及技术,随后探究本书始终沿用的一个应用程序范例来体验工具的作用和开发活动中的实践。作者在介绍每一个工具时都提供关键概念的描述以及代码范例,并一步一步带领读者掌握极限编程开发方面的技术。 本书覆盖了以下极限编程的主题: 自动单元测试和功能测试 通过自动构建和自动部署进行持续整合 重构和持续整合的价值 如何用Ant、JUnitPerf、Cactus,HTTPUnit和JMeter来实现极限编程中的目标相关的网站包含以下内容: 本书中涉及的范例代码 极限编程软件工具的升级版本 实用的极限编程站点链接 软件界信奉的哲学是“不变则亡”。极限编程为敏捷地应对软件开发中的各种变化提供了全新思路,本书是Richard Hightower和Nicholas Lesiecki关于极限编程(Extreme Programming)的创新之作, 讲述了这种能使开发人员快速、有效、低成本地创建灵活高效软件的方法论、本书将为您演示如何使用开源(Open Source)Java开发工具实现Java开发中的极限编程方法, 并使大家掌握极限编程中最复杂的开发过程:测试、整合及部署。 内容截图 译者序致谢作者简介前言第一部分 关键概念介绍第1章 Extreme Programming介绍 21.1 极限编程概览 21.1.1 极限编程开发方法的四大价值 21.1.2 极限编程的五个原则 31.2 极限编程的12个实践原则 51.2.1 计划的制定 51.2.2 小版本 51.2.3 简单设计 61.2.4 测试 61.2.5 持续整合 61.2.6 重构 71.2.7 配对编程 71.2.8 代码共享 81.2.9 每周只工作40小时 91.2.10 现场客户 91.2.11 隐喻 91.2.12 编码标准 91.3 采用极限编程吗 91.4 小结 10第2章 J2EE 部署 122.1 概述 122.2 JAR文件 142.2.1 JAR文件和applet 142.2.2 可执行的JAR文件 152.3 Web应用程序和WAR文件 162.4 EJB和EJB JAR文件 182.5 企业级应用程序和EAR文件 212.6 小结 21第3章 应用程序范例 233.1 概述 233.2 简单范例:基于Model2的HelloWorld 233.3 范例:宠物商店 243.4 宠物商店的最初版本 253.4.1 model类(公共的接口) 253.4.2 dbmodel类(实现) 263.4.3 数据库模型 273.4.4 Web接口 283.4.5 构建系统 313.5 用测试数据设置数据库:Ant小试牛刀 343.6 完整的代码清单 393.6.1 model包的完整代码清单 393.6.2 dbmodel包的完整代码清单 433.6.3 test包的完整代码清单 493.6.4 JSP和Web.xml的完整代码清单 553.7 小结 60第二部分 掌握工具第4章 使用Ant进行持续整合 624.1 概述 624.2 Ant使用基础 634.3 标准目标 654.3.1 简单的范例 654.3.2 使用特性一起运作 674.3.3 路径设置和fileset设置 684.3.4 条件性目标 704.3.5 使用过滤器 724.3.6 嵌套构建 734.4 小结 73第5章 使用Ant建立Java应用程序 755.1 概述 755.2 Hello World Model项目 755.2.1 model类概览 765.2.2 为Model建立项目目录结构 775.2.3 为共享类库建立构建文件 775.2.4 model项目构建文件的分析 785.2.5 运行Ant构建文件 815.3 Hello World应用程序项目 825.3.1 应用程序的Java类概览 825.3.2 为应用程序建立项目目录结构 835.3.3 为独立应用程序建立清单文件 835.3.4 为独立应用程序建立Ant构建文件 835.4 Hello World主项目 865.4.1 建立主构建文件 865.4.2 关于主构建文件的分析 875.5 applet项目 885.5.1 applet类概览 885.5.2 为applet程序建立构建文件 915.5.3 使用Ant构建applet程序 925.6 Hello World 功能翻新 935.7 小结 93第6章 使用Ant建立J2EE应用程序 946.1 概述 946.2 Hello World 946.3 Web应用程序项目 956.3.1 Web应用程序项目的目录结构 956.3.2 HelloWorldServlet.java 966.3.3 HelloWorldServlet分析 976.3.4 HelloWorld.jsp 986.3.5 HelloWorld Web应用程序的部署描述符 986.3.6 HelloWorld Web应用程序的构建文件 996.3.7 构建和部署Web应用程序 1056.3.8 运行Web应用程序 1076.3.9 HelloWorld.jsp applet 传递 1086.3.10 在WAR文件中包含applet 1096.4 企业级JavaBean 1106.4.1 企业级Bean项目的目录结构 1106.4.2 HelloWorld实体Bean 1116.4.3 会话Bean 1136.4.4 Shadow代理Bean 1166.4.5 企业级JavaBean部署描述符 1186.4.6 企业级Bean的构建文件 1206.4.7 企业级Bean构建文件的分析 1236.4.8 在Web应用程序构建文件中定义ejb特性 1256.4.9 运行构建文件 1266.5 EAR 企业级应用程序 1276.5.1 HelloWorld主项目构建文件 1276.5.2 企业级应用程序构建文件的分析 1296.5.3 企业应用程序部署描述符 1316.6 宠物商店案例学习 1326.7 小结 134第7章 使用JUnit进行单元测试 1367.1 JUnit概述 1377.1.1 编写一个测试案例 1387.1.2 使用Ant整合JUnit 1437.2 案例研究:在宠物商店案例中加入实体Bean 1497.2.1 现有的JUnit测试概述 1497.2.2 在宠物商店案例中加入EJB 1577.2.3 建立一个Ant构建文件用以部署我们的实体Bean 1697.2.4 修改Test构建文件用以测试我们的实体Bean 1757.2.5 学习案例的小结 1777.3 小结 177第8章 使用Cactus测试容器服务 1788.1 概述 1788.2 为什么要做容器内测试 1788.2.1 隔离测试:模拟对象 1788.2.2 上下文测试:整合测试 1798.2.3 一个混合手法 1808.3 为什么使用Cactus 1808.4 安装Cactus 1818.4.1 服务器端安装 1828.4.2 客户端安装 1838.4.3 一个简单的范例 1848.5 Cactus系统架构 1858.5.1 开始执行 1858.5.2 beginXXX()方法 1868.5.3 调用转向器Servlet 1868.5.4 服务器端安装 1868.5.5 服务器端执行 1878.5.6 结果集合和后处理 1878.6 编写Cactus测试 1888.6.1 被测试的代码 1888.6.2 继承适当的类 1908.6.3 beginXXX()方法 1908.6.4 隐含对象 1918.6.5 setUp()和tearDown() 1928.6.6 testXXX() 1938.6.7 endXXX() 1938.7 Cactus与Ant的使用 1958.8 Filter测试 1968.9 JSPTestCase和自定义标记 1988.10 案例学习:使用自定义标记的宠物商店程序 2138.10.1 业务需求 2138.10.2 寻找一个开始点 2138.10.3 测试案例 2148.11 小结 219第9章 使用HttpUnit进行功能测试 2209.1 为什么要做功能测试 2209.2 为什么要使用HttpUnit 2219.3 HttpUnit基础 2229.3.1 WebClient(客户端)功能介绍 2229.3.2 响应检查和多页面处理 2239.4 HttpUnit的高级话题 2319.4.1 DOM检查 2329.4.2 Header和Cookies 2339.4.3 框架页面 2339.4.4 SSL 2349.4.5 HttpUnitOptions 2349.4.6 技术局限性 2349.5 蜘蛛范例程序 2349.5.1 蜘蛛程序开发:第一个循环 2359.5.2 蜘蛛程序开发:二次循环 2369.5.3 蜘蛛工具将来的工作 2409.6 小结 240第10章 使用JMeter测试应用程序性能 24110.1 概述 24110.2 JMeter概述 24210.3 JMeter概念 24210.4 使用JMeter测试Web应用程序浏览程序 24410.5 使用JMeter测试Web应用程序的表单条目 24910.6 使用JMeter测试我们的RDBMS的性能 25510.7 案例学习:宠物商店 25710.7.1 业务需求 25710.7.2 建立测试 25910.7.3 分析 26210.7.4 结论 26310.8 小结 263第11章 使用JUnitPerf进行负载测试 26411.1 概述 26411.2 JUnitPerf概念 26411.3 TimedTest范例 26511.4 LoadTest范例 27211.5 案例学习 27311.5.1 HTTPUnit测试 27311.5.2 JMeter配置 27511.5.3 将它们放在一块 27511.5.4 结论 27811.6 小结 279第三部分 API和标记参考第12章 Ant标记参考 28212.1 Ant命令行选项 28212.2 Ant的父元素 28312.2.1 project标记 28312.2.2 target标记 28312.2.3 path标记 28412.2.4 filter标记 28512.2.5 tstamp标记 28512.3 Ant关键任务 28612.3.1 Ant任务 28612.3.2 antcall任务 28612.3.3 available任务 28712.3.4 echo任务 28812.3.5 fail任务 28812.3.6 property任务 28812.3.7 taskdef任务 28912.4 目录和文件系统任务 28912.4.1 chmod任务 28912.4.2 copy任务 29012.4.3 delete任务 29012.4.4 mkdir任务 29112.4.5 move任务 29112.4.6 touch任务 29212.5 外部执行任务 29212.5.1 apply任务 29212.5.2 exec任务 29312.5.3 execon任务 29412.5.4 java 任务 29512.5.5 javac任务 29512.5.6 sql任务 29612.6 文件库任务 29812.6.1 jar任务 29812.6.2 war任务 29812.6.3 zip任务 29912.6.4 unjar、unzip和unwar任务 30012.7 文件读写和控制 30012.7.1 replace任务 30012.7.2 mail任务 30112.8 源代码控制任务 30112.8.1 cvs任务 30112.8.2 get任务 30212.9 一些关键的可选任务 30212.9.1 junit任务 30212.9.2 junitReport任务 30312.10 常用的嵌套参数和元素 30412.10.1 classpath元素 30412.10.2 mapper元素 30512.10.3 fileset元素 30612.10.4 patternset元素 30612.10.5 zipfileset元素 306第13章 Ant API 参考 30813.1 概述 30813.2 org.apache.tools.ant包 30913.2.1 AntClassLoader类 30913.2.2 BuildEvent类 31013.2.3 BuildException类 31013.2.4 BuildListener接口 31113.2.5 BuildLogger接口 31213.2.6 DefaultLogger类 31313.2.7 DesirableFilter类 31413.2.8 DirectoryScanner类 31413.2.9 FileScanner接口 31613.2.10 IntrospectionHelper类 31713.2.11 Location类 31813.2.12 Main类 31913.2.13 PathTokenizer类 31913.2.14 Project类 31913.2.15 ProjectHelper类 32313.2.16 RuntimeConfigurable类 32413.2.17 Target类 32413.2.18 Task类 32613.2.19 TaskAdapter类 32713.2.20 UnknownElement类 32813.2.21 XmlLogger类 32813.3 小结 329第14章 JUnit API参考 33114.1 junit.framework包 33114.1.1 Assert类 33114.1.2 Protectable接口 33414.1.3 Test接口 33514.1.4 TestCase类 33514.1.5 TestListener接口 33914.1.6 TestFailure类 33914.1.7 TestResult类 34014.1.8 TestSuite类 34214.2 junit.extensions包 34414.2.1 ActiveTestSuite类 34414.2.2 ExceptionTestCase类 34514.2.3 RepeatedTest类 34614.2.4 TestDecorator类 34714.2.5 TestSetup类 348第15章 Cactus API参考 35015.1 概述 35015.2 org.apache.cactus包 35015.2.1 AbstractTestCase类 35015.2.2 Cookie类 35315.2.3 FilterTestCase类 35715.2.4 JspTestCase类 35815.2.5 ServiceDefinition类 35915.2.6 ServiceEnumeration类 35915.2.7 ServletTestCase类 35915.2.8 ServletTestRequest类 不推荐 36215.2.9 ServletURL类 36315.2.10 WebRequest类 36515.2.11 WebResponse类 36715.2.12 WebTestResult类 36815.3 org.apache.cactus.util包 36915.3.1 AssertUtils类 不推荐 36915.3.2 ClientCookie类 不推荐 37015.4 org.apache.cactus.server包 37115.4.1 FilterConfigWrapper类 37115.4.2 HttpServletRequestWrapper类 37215.4.3 PageContextWrapper类 37315.4.4 RequestDispatcherWrapper类 37315.4.5 ServletConfigWrapper类 37315.4.6 ServletContextWrapper类 374第16章 HttpUnit API参考 37516.1 概述 37516.2 com.meterware.httpunit包 37516.2.1 AuthorizationRequired-Exception类 37516.2.2 GetMethodWebRequest类 37616.2.3 HTMLSegment接口 37616.2.4 HttpException类 37916.2.5 HttpInternalErrorException类 37916.2.6 HttpNotFoundException类 38016.2.7 HttpUnitOptions类 38016.2.8 HttpUnitUtils类 38116.2.9 IllegalRequestParameterException类 38216.2.10 MessageBodyWebRequest类 38316.2.11 PostMethodWebRequest类 38316.2.12 PutMethodWebRequest类 38416.2.13 SubmitButton类 38516.2.14 TableCell类 38516.2.15 WebClient类 38616.2.16 WebConversation类 38916.2.17 WebForm类 39016.2.18 WebLink类 39216.2.19 WebRequest类 39316.2.20 WebResponse类 39716.2.21 WebTable类 400第17章 JUnitPerf API参考 40217.1 com.clarkware.junitperf包 40217.1.1 ConstantTimer类 40217.1.2 LoadTest类 40217.1.3 RandomTimer类 40617.1.4 ThreadBarrier类 40617.1.5 ThreadedTest类 40717.1.6 ThreadedTestGroup类 40717.1.7 TimedTest类 40817.1.8 Timer接口 410 ...
-
分类:新浪微博 语言:简体中文 大小:未知 发布时间:12-09-11
内容简介本书将调试作为一门专业的学科进行研究和分析,提供大量的代码实例和问题描述,对调试的各个方面进行细致而深入的阐述和讨论。全书以bug为中心,围绕调试这一主题进行组织。第2章到第5章包括bug的诊断、分类以及它们的症状。第6章到第10章讨论那些处理bug的策略,包括可以使用的工具以及在不同情况下如何最有效地使用它们。第11章到第16章包括对专业调试的解释以及如何成为一个出色的调试员。 本书主要面向的读者群是软件项目的开发人员、调试人员、测试人员以及管理人员。 内容截图 译者序作者简介致谢第1章 debug简介1.l 本书的内容1.2 为什么要关注bug1.3 什么是bug1.4 本书的对象1.5 本书的组织1.6 调试简史1.7 小结1.8 bug问题第2章 研究著名的(以及不太著名的)bug例子2. 1 大致情况2.1.1 现实生活中的分布式系统2. 1.2 therac-252.2 bug实例#12. 3 bug实例#22. 4 bug实例#32.5 bug实例#4.2.5.1 at&t电话中断2. 5.2 缓冲区溢出2.6 小结2.7 bug问题第3章 什么是bug3.l 什么是bug3.1.1 什么是软件缺陷3. 1.2 调试不是什么3.1.3 什么是调试3. 2 为什么要考虑bug3. 2. l bug的信心代价3.2.2 名声和形象的代价3. 2.3 bug的财产损失3. 3 bug的本质3. 3.l bug的发生都有原因3. 3. 2 bug是可以重视的3.3.3 bug通常在有变化时出现3.3.4 bug也会产生bug3.3.5 bug吸引bug3.3.6 证明缺乏理解3.3.7 难的代码对大家都一样难3.3.8 在软件生命周期中不同阶段的bug有不同的性质3.3.9 稳定的系统中的bug的原因可能比错误的系统中的bug的原因更难以识别3.4 小结3. 5 bug问题第4章 bug的生命周期4.l 为什么会出现bug4. 1.1 复杂性4. 1.2 现实4. 1.3 人类的弱点4. 2 bug是如何产生的4. 2. 1 对软件做修改4. 2.2 拙劣的描述4.2.3 方法的复杂性4. 2.4 缺少一致的观点4.2.5 程序员错误4. 3 bug是如何躲过测试的4. 3.l 遵循形式过程代价太大4.3.2 政策/市场决策4.3. 3 时间不充分4. 3.4 缺少重现能力4. 3. 5 自负4. 3.6 差劲的描述/不知道要测试什么4. 3.7 缺乏测试环境4.4 小结4.5 bug问题第5章 bug的分类5.l bug的种类5.1.1 需求阶段的bug5.1.2 设计阶段的bug5.1.3 实现阶段的bug5.1.4 处理阶段的bug5.1.5 编译的bug5.1.6 配置的bug5.1.7 未来计划bug5.1.8 文档bug5.2 严重性5.3 bug分类法5.3.l 名字5.3.2 描述5.3.3 最一般的环境5.3.4 症状5.3.5 例子5.4 bug的分类5.4.l 内存或资源泄漏5.4.2 逻辑错误5.4. 3 编码错误5.4. 4 内存侵占5. 4.5 循环错误5.4.6 条件错误5.4. 7 指针错误5.4.8 分配/释放错误5.4.9 多线程错误5.4.10 定时错误5.4. 11 分布式应用程序错误5. 4.12 存储错误5.4. 13 集成错误5.4.14 转换错误5.4.15 硬编码长度/尺寸5.4. 16 版本bug5.4. 17 不恰当地重用bug5.4. 18 布尔bug5.5 为什么分类重要5.6 小结5. 7 bug问题第6章 检测工作6.1 整体调试6.1.1 复制和粘贴错误6.l.2 全局变量6.1.3 副作用6.1.4 观察意外的消息或结果6.1.5 跟踪诊断显示6.2 调试方法6.2.l 科学方法6.2. 2 直觉6.2.3 思维跳跃6. 2.4 诊断6. 3 商业技巧6. 3.l 内嵌式调试器6.3. 2 日志对象6.3. 3 跟踪对象6.3.4 隐藏的诊断屏6.3.5 为以后的程序运行保存bug数据6.4 可重现实例6.4. 1 测试实例6.4. 2 数据依赖6.4. 3 从根本原因中分离症状6.4. 4 收集观察结果6.4. 5 统计论理6.5 小结6.6 bug问题第7章 调试工具及其使用时机7.l 测试和调试环境7.1.1 测试组7.1.2 测试套7.1.3 过时的bug组7.1.4 日志7.l.5 跟踪7.2 中级调试技术7.2.1 内存漏洞检测工具7.2.2 交叉索弓吸工具用法7.2.3 调试器7.2. 4 heisenberg的不确定原理7.2.5 嵌入式诊断7.2.6 断言的弊端7.2. 7 同用户一起工作7. 2. 8 bug跟踪7.2.9 代码覆盖范围分析7.2. 10 编译器7.3 小结7.4 bug问题第8章 调试的一般过程8.l 识别问题8. l.l 这是bug吗8.1.2 为什么它是一个bug8.1.3 程序应该在做什么8.1.4 程序到底在做什么8.2 收集信息8.2. 1 用户对问题的描述8.2.2 日志文件8.2.3 新自观察8. 2.4 症状8.2.5 失败的测试实例8.2.6 相似的问题8.2.7 近期变化8.2.8 运行的环境信息8.3 形成假设8.4 测试假设8.5 崩溃的web服务器示例8.6 重复直到某个假设被证实8.7 提出解决方法8.8 测试解决方法8.9 重复直到某个解决方法被证实8.10 回归测试8.11 小结8.12 bug问题第9章 调试技术9.l 插入式调试和非插入式调试9.2 短期调试和长期调试技术9.3 成品软件调试的折衷办法9.4 调试技术介绍9.4. 1 面对实际用户9.4. 2 查看观察日志9.4.3 记录调试代码和过程9.4.4 模拟代码和问题9.4.5 简化重视性9.4.6 把问题简化成最简单的元素9.4.7 代码消去法9.4. 8 简化法9.4.9 使用调试器9.4. 10 跳跃9. 4.11 分解法9. 4.12 种植错误法9.4. 13 编译检测法9.4.14 整体考虑法9.4.15 使用不同操作系统上的另一个编译导9.4.16 每次改变一个变量9.4.17 数字命理学和边界条件9.4.18 检查最近的修改9.4. 19 清除系统中的"死代码"9.4. 20 问题假设法9.4.21 检查本测试的代码9.4. 22 不变式法9.4.23 存储器使用情况9.4.24 互斥9.4. 25 显示系统的运行情况9.4. 26 和工作的系统进行代码比较9.4.27 理解算法9.4.28 检查连通性9.4.29 核心文件9.4.30 增加跟踪9.4.31 数据关系检查9.4.32 重放能力(记录动作)9.4. 33 生成系统的副本9.5 小结9.6 bug问题第10章 不同应用系统的调试10.1 小规模单机系统10.1.l 成为系统的用户10.1.2 复制环境10.1.3 提防dll hell10.1.4 输入/输出错误10.2 中规模单机系统10.3 中规模客户/服务器系统10.3.l 生成后端数据库的一个简单描述10.3.2 保留数据的使用情况来发现哪些数据经常被使用10.4 大规模系统10.4.l 为测试安装一个"后门"10.4. 2 观察外部条件的改变10.5 实时系统10.5.l 注意添加调试语句10.5.2 监视硬件软件的冲突10.5.3 时间问题10.6 嵌入式系统10.6.l 模拟器问题10.6.2 抑制中断10.6.3 协议错误10.6.4 看门狗时钟10.6.5 调试嵌入式系统10.7 分布式系统10.7.l 中间设备错误10.7.2 预测错误10.7. 3 连接错误10.7.4 安全错误10.7.5 信息数据库10.7.6 记录的事后调查分析10.8 模拟系统10.8.l 封装硬件接口10.8.2 把模拟调用封装成预测错误返回10.8.3 把实际系统模拟器的问题简化成最简单的形式10.9 小结10.10 bug问题第11章 调试之后11.l 是不是在其他地方犯同样的错误11.2 bug背后隐含了什么11.3 怎样预防同类bug11.3.l 理解原因11.3. 2 保留测试用例11. 3.3 利用bug为将来的设计11.4 怎样更容易发现类似的 bug11.4.1 创造工具11.4.2 记录bug11.4.3 预留调试框架11.5 我是否有所进步11.5.l bug量度11.5.2 bug跟踪11.5.3 怎样处理数据11.6 小结11.7 bug问题第12章 bug预防12. 1 什么是bug预防12.2 一般技术12. 2. 1 预防bug的人12. 2.2 问题原因分析12.2.3 检测错误12.2.4 重用12.2. 5 减小复杂度和管理复杂度12.2.6 现实世界的文档12.2.7 内部基础结构支持12.3 需求中的bug预防12.3.l 理解问题12.3.2 正确获得需求12.4 设计中的bug预防12.4.1 不同的设计产生不同的bug类型12.4. 2 设计接口12.4.3 设计包含文档的代码12. 5 实现中的bug预防12.5.1 理解开发工具12.5.2 防御编码12.5.3 实现选择12.5.4 逐步测试12. 6 小结12. 7 bug问题第13章 测试13. 1 单元测试13.1.l 测试什么13. 1.2 单元测试为什么重要13. 1.3 怎样应用到调试中13.1.4 单元测试有什么重要问题13.2 验证测试13.3 质量保证测试13.4 测试方法13.4.l 路径测试13.4.2 事务处理测试13.4.3 输入验证13.4. 4 算法测试13.4. 5 决策表13.4. 6 状态机分析13.4.7 综合测试13.4. 8 自上向下测试和自下向上测试13.4.9 配置调试13.4.10 恢复崩溃和掉电测试13.4.11 安全性测试13. 4.12 第三方测试13.4.13 多用户测试13.4.14 负载和性能测试13. 4.15 测量和统计13.5 小结13.6 bug问题第14章 维护14. 1 什么是软件维护14.1.l 维护工作14.1.2 维护的挑战14.1.3 软件的退化需要软件维护14. 2 创建一个可维护的软件系统14.2. 1 创建可理解的软件14.2. 2 可维护设计14.2.3 提供一个回归测试环境14. 2.4 创建一个可维护的环境14.3 维护现有的软件14.3.l 修改现有软件系统14.3.2 围绕现有的需求和设计bug展开工作14.3.3 彻底的回归测试14.3.4 保持修改跟踪14. 4 什么时候要放弃14.5 小结14. 6 bug问题第15章 专业调试15.1 学习成为一名调试员15.1.l 在软件维护和改进组中工作15.1.2 学习编写源代码的一个好办法15.2 什么地方需要专业调试员15.2.1 在设计阶段15.2. 2 在需求阶段15.2. 3 在代码审查阶段15.2. 4 在代码移交阶段15.2. 5 项目阶段总结15.3 优秀专业调试者的特点15.3.1 老练15.3.2 耐性15.3.3 探测技巧15.3.4 处理压力的能力15.3. 5 工程的/科学的方法15.3.6 忘我15.3.7 坚定不移15.4 专业调试者的一天15.5 小结15.6 bug问题附录a bug问题的答案附录b 附加的阅读资料 ...
-
分类:新浪微博 语言:简体中文 大小:未知 发布时间:12-09-11
内容简介 《算法导论(原书第2版)》深入浅出,全面地介绍了计算机算法。对每一个算法的分析既易于理解又十分有趣,并保持了数学严谨性。《算法导论(原书第2版)》的设计目标全面,适用于多种用途。涵盖的内容有:算法在计算中的作用,概率分析和随机算法的介绍。本书专门讨论了线性规划,介绍了动态规划的两个应用,随机化和线性规划技术的近似算法等,还有有关递归求解、快速排序中用到的划分方法与期望线性时间顺序统计算法,以及对贪心算法元素的讨论。《算法导论(原书第2版)》还介绍了对强连通子图算法正确性的证明,对哈密顿回路和子集求和问题的np完全性的证明等内容。《算法导论(原书第2版)》提供了900多个练习题和思考题以及叙述较为详细的实例研究。. 《算法导论(原书第2版)》内容丰富,对本科生的数据结构课程和研究生的算法课程都是很实用的教材。《算法导论(原书第2版)》在读者的职业生涯中,也是一本案头的数学参考书或工程实践手册。 第一部分 基础知识引言第1章 算法在计算中的作用1.1 算法1.2 作为一种技术的算法第2章 算法入门2.1 插入排序2.2 算法分析2.3 算法设计2.3.1 分治法2.3.2 分治法分析第3章 函数的增长3.1 渐近记号3.2 标准记号和常用函数第4章 递归式4.1 代换法.4.2 递归树方法4.3 主方法*4.4 主定理的证明4.4.1 取正合幂时的证明4.4.2 上取整函数和下取整函数第5章 概率分析和随机算法5.1 雇用问题5.2 指示器随机变量5.3 随机算法*5.4 概率分析和指示器随机变量的进一步使用5.4.1 生日悖论5.4.2 球与盒子5.4.3 序列5.4.4 在线雇用问题第二部分 排序和顺序统计学引言第6章 堆排序6.1 堆6.2 保持堆的性质6.3 建堆6.4 堆排序算法6.5 优先级队列第7章 快速排序7.1 快速排序的描述7.2 快速排序的性能7.3 快速排序的随机化版本7.4 快速排序分析7.4.1 最坏情况分析7.4.2 期望的运行时间第8章 线性时间排序8.1 排序算法时间的下界8.2 计数排序8.3 基数排序8.4 桶排序第9章 中位数和顺序统计学9.1 最小值和最大值9.2 以期望线性时间做选择9.3 最坏情况线性时间的选择第三部分 数据结构引言第10章 基本数据结构10.1 栈和队列10.2 链表10.3 指针和对象的实现10.4 有根树的表示第11章 散列表11.1 直接寻址表11.2 散列表11.3 散列函数11.3.1 除法散列法11.3.2 乘法散列法*11.3.3 全域散列11.4 开放寻址法*11.5 完全散列第12章 二叉查找树12.1 二叉查找树12.2 查询二叉查找树12.3 插入和删除*12.4 随机构造的二叉查找树第13章 红黑树13.1 红黑树的性质13.2 旋转13.3 插入13.4 删除第14章 数据结构的扩张14.1 动态顺序统计14.2 如何扩张数据结构14.3 区间树第四部分 高级设计和分析技术导论第15章 动态规划15.1 装配线调度15.2 矩阵链乘法15.3 动态规划基础15.4 最长公共子序列15.5 最优二叉查找树第16章 贪心算法16.1 活动选择问题16.2 贪心策略的基本内容16.3 赫夫曼编码*16.4 贪心法的理论基础*16.5 一个任务调度问题第17章 平摊分析17.1 聚集分析17.2 记账方法17.3 势能方法17.4 动态表..17.4.1 表扩张17.4.2 表扩张和收缩第五部分 高级数据结构概述第18章 b树18.1 b树的定义18.2 对b树的基本操作18.3 从b树中删除关键字第19章 二项堆19.1 二项树与二项堆19.1.1 二项树19.1.2 二项堆19.2 对二项堆的操作第20章 斐波那契堆20.1 斐波那契堆的结构20.2 可合并堆的操作20.3 减小一个关键字与删除一个结点20.4 最大度数的界第21章 用于不相交集合的数据结构21.1 不相交集合上的操作21.2 不相交集合的链表表示21.3 不相交集合森林*21.4 带路径压缩的按秩合并的分析第六部分 图 算 法引言第22章 图的基本算法22.1 图的表示22.2 广度优先搜索22.3 深度优先搜索22.4 拓扑排序22.5 强连通分支第23章 最小生成树23.1 最小生成树的形成23.2 kruskal算法和prim算法第24章 单源最短路径24.1 bellman-ford算法24.2 有向无回路图中的单源最短路径24.3 dijkstra算法24.4 差分约束与最短路径24.5 最短路径性质的证明第25章 每对顶点间的最短路径25.1 最短路径与矩阵乘法25.2 floyd-warshall算法25.3 稀疏图上的johnson算法第26章 最大流26.1 流网络26.2 ford-fulkerson方法26.3 最大二分匹配*26.4 压入与重标记算法*26.5 重标记与前移算法第七部分 算法研究问题选编引言第27章 排序网络27.1 比较网络27.2 0-1原理27.3 双调排序网络27.4 合并网络27.5 排序网络第28章 矩阵运算28.1 矩阵的性质28.2 矩阵乘法的strassen算法28.3 求解线性方程组28.4 矩阵求逆28.5 对称正定矩阵与最小二乘逼近第29章 线性规划29.1 标准型和松弛型29.2 将问题表达为线性规划29.3 单纯形算法29.4 对偶性29.5 初始基本可行解第30章 多项式与快速傅里叶变换30.1 多项式的表示30.2 dft与fft30.3 有效的fft实现第31章 有关数论的算法31.1 初等数论概念31.2 最大公约数31.3 模运算31.4 求解模线性方程31.5 中国余数定理31.6 元素的幂31.7 rsa公钥加密系统*31.8 素数的测试*31.9 整数的因子分解第32章 字符串匹配32.1 朴素的字符串匹配算法32.2 rabin-karp算法32.3 利用有限自动机进行字符串匹配*32.4 knuth-morris-pratt算法第33章 计算几何学33.1 线段的性质33.2 确定任意一对线段是否相交33.3 寻找凸包33.4 寻找最近点对第34章 np完全性34.1 多项式时间34.2 多项式时间的验证34.3 np完全性与可归约性34.4 np完全性的证明34.5 np完全问题34.5.1 团问题34.5.2 顶点覆盖问题34.5.3 哈密顿回路问题34.5.4 旅行商问题34.5.5 子集和问题第35章 近似算法35.1 顶点覆盖问题35.2 旅行商问题35.2.1 满足三角不等式的旅行商问题35.2.2 一般旅行商问题35.3 集合覆盖问题35.4 随机化和线性规划35.5 子集和问题第八部分 附录:数学基础知识引言a 求和a.1 求和公式及其性质a.2 确定求和时间的界b 集合等离散数学结构b.1 集合b.2 关系b.3 函数b.4 图b.5 树b.5.1 自由树b.5.2 有根树和有序树b.5.3 二叉树与位置树c 计数和概率c.1 计数c.2 概率c.3 离散随机变量c.4 几何分布与二项分布c.5 二项分布的尾参考文献索引 ...