0%

基本信息

名称: JavaScript DOM编程艺术(第2版)
作者信息: 作者: 基思 (Jeremy Keith) [ 中文 pdf ]

简单介绍

《JavaScript DOM编程艺术(第2版)》编辑推荐:Amazom超级畅销书最新,释放JavaScript和DOM编程的惊人潜力,涵养HTML5及jQuery。

目录

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
第1章 JavaScript简史 1
1.1 JavaScript的起源 1
1.2 DOM 2
1.3 浏览器战争 3
1.3.1 DHTML 3
1.3.2 浏览器之间的冲突 3
1.4 制定标准 4
1.4.1 浏览器以外的考虑 4
1.4.2 浏览器战争的结局 5
1.4.3 崭新的起点 5
1.5 小结 6

第2章 JavaScript语法 8 2.1 准备工作 8 2.2 语法 10 2.2.1 语句 10 2.2.2 注释 10 2.2.3 变量 11 2.2.4 数据类型 14 2.2.5 数组 16 2.2.6 对象 18 2.3 操作 19 2.4 条件语句 21 2.4.1 比较操作符 22 2.4.2 逻辑操作符 23 2.5 循环语句 24 2.5.1 while循环 24 2.5.2 for循环 25 2.6 函数 26 2.7 对象 29 2.7.1 内建对象 30 2.7.2 宿主对象 31 2.8 小结 31

第3章 DOM 32 3.1 文档:DOM中的“D” 32 3.2 对象:DOM中的“O” 32 3.3 模型:DOM中的“M” 33 3.4 节点 35 3.4.1 元素节点 35 3.4.2 文本节点 35 3.4.3 属性节点 36 3.4.4 CSS 36 3.4.5 获取元素 38 3.4.6 盘点知识点 42 3.5 获取和设置属性 43 3.5.1 get Attribute 43 3.5.2 set Attribute 44 3.6 小结 45

第4章 案例研究:JavaScript图片库 46 4.1 标记 46 4.2 JavaScript 48 4.2.1 非DOM解决方案 49 4.2.2 最终的函数代码清单 50 4.3 应用这个JavaScript函数 50 4.4 对这个函数进行扩展 52 4.4.1 child Nodes属性 53 4.4.2 node Type属性 54 4.4.3 在标记里增加一段描述 54 4.4.4 用JavaScript改变这段描述 55 4.4.5 node Value属性 56 4.4.6 first Child和last Child属性 56 4.4.7 利用node Value属性刷新这段描述 57 4.5 小结 60

第5章 最佳实践 61 5.1 过去的错误 61 5.1.1 不要怪罪JavaScript 61 5.1.2 Flash的遭遇 62 5.1.3 质疑一切 63 5.2 平稳退化 63 5.2.1 “javascript:”伪协议 64 5.2.2 内嵌的事件处理函数 65 5.2.3 谁关心这个 65 5.3 向CSS学习 66 5.3.1 结构与样式的分离 66 5.3.2 渐进增强 67 5.4 分离JavaScript 68 5.5 向后兼容 70 5.5.1 对象检测 70 5.5.2 浏览器嗅探技术 71 5.6 性能考虑 72 5.6.1 尽量少访问DOM和尽量减少标记 72 5.6.2 合并和放置脚本 73 5.6.3 压缩脚本 73 5.7 小结 74

第6章 案例研究:图片库改进版 75 6.1 快速回顾 75 6.2 它支持平稳退化吗 76 6.3 它的JavaScript与HTML标记是分的吗 77 6.3.1 添加事件处理函数 77 6.3.2 共享onload事件 82 6.4 不要做太多的假设 84 6.5 优化 86 6.6 键盘访问 88 6.7 把JavaScript与CSS结合起来 90 6.8 DOM Core和HTML-DOM 93 6.9 小结 94

第7章 动态创建标记 96 7.1 一些传统方法 96 7.1.1 document. write 96 7.1.2 inner HTML属性 98 7.2 DOM方法 101 7.2.1 create Element方法 101 7.2.2 append Child方法 102 7.2.3 create Text Node方法 103 7.2.4 一个更复杂的组合 105 7.3 重回图片库 107 7.3.1 在已有元素前插入一个新元素 108 7.3.2 在现有方法后插入一个新元素 109 7.3.3 图片库二次改进版 111 7.4 Ajax 114 7.4.1 XML Http Request对象 115 7.4.2 渐进增强与Ajax 119 7.4.3 Hijax 120 7.5 小结 121

第8章 充实文档的内容 122 8.1 不应该做什么 122 8.2 把“不可见”变成“可见” 123 8.3 内容 123 8.3.1 选用HTML、XHTML还是HTML5 124 8.3.2 CSS 126 8.3.3 JavaScript 127 8.4 显示“缩略语列表” 127 8.4.1 编写display Abbreviations函数 128 8.4.2 创建标记 130 8.4.3 一个浏览器“地雷” 135 8.5 显示“文献来源链接表” 138 8.6 显示“快捷键清单” 143 8.7 检索和添加信息 146 8.8 小结 147

第9章 CSS-DOM 148 9.1 三位一体的网页 148 9.1.1 结构层 148 9.1.2 表示层 148 9.1.3 行为层 149 9.1.4 分离 150 9.2 style属性 150 9.2.1 获取样式 151 9.2.2 设置样式 156 9.3 何时该用DOM脚本设置样式 158 9.3.1 根据元素在节点树里的位置来设置样式 158 9.3.2 根据某种条件反复设置某种样式 161 9.3.3 响应事件 165 9.4 class Name属性 167 9.5 小结 171

第10章 用JavaScript实现动画效果 172 10.1 动画基础知识 172 10.1.1 位置 172 10.1.2 时间 175 10.1.3 时间递增量 175 10.1.4 抽象 178 10.2 实用的动画 184 10.2.1 提出问题 184 10.2.2 解决问题 186 10.2.3 CSS 187 10.2.4 JavaScript 189 10.2.5 变量作用域问题 192 10.2.6 改进动画效果 193 10.2.7 添加安全检查 196 10.2.8 生成HTML标记 198 10.3 小结 200

第11章 HTML5 201 11.1 HTML5简介 201 11.2 来自朋友的忠告 203 11.3 几个示例 204 11.3.1 Canvas 205 11.3.2 音频和视频 209 11.3.3 表单 215 11.4 HTML5还有其他特性吗 219 11.5 小结 219

第12章 综合示例 220 12.1 项目简介 220 12.1.1 原始资料 220 12.1.2 站点结构 220 12.1.3 页面结构 221 12.2 设计 222 12.3 CSS 223 12.3.1 颜色 225 12.3.2 布局 226 12.3.3 版式 228 12.4 标记 229 12.5 JavaScript 230 12.5.1 页面突出显示 231 12.5.2 JavaScript幻灯片 235 12.5.3 内部导航 239 12.5.4 JavaScript图片库 242 12.5.5 增强表格 245 12.5.6 增强表单 249 12.5.7 压缩代码 263 12.6 小结 264 附录 JavaScript库 265

亚马逊链接

基本信息

名称: iPhone 4与iPad开发基础教程
作者信息: 作者: Dave Mark [ 中文 pdf ]

简单介绍

由马克和纳丁等编著的《iPhone4与iPad开发基础教程》将带你走上创建iOS应用程序的大道。我们的目标是让你通过初步学习,理解iOS应用程序的运行和构建方式。在学习过程中,你将创建一系列小型应用程序,每个应用程序都会突出某些iOS特性,展示如何控制这些特性或与其交互。如果你扎实地掌握了本书中的基本知识,充分发挥自己的创造力,并且坚定不移,同时借助苹果公司大量翔实的文档,你就具备了创建专业级iPhone和iPad应用程序所需的一切条件。

目录

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
目 录 

第1章 欢迎来到iPhone世界 1 1.1 关于本书 1 1.2 必要条件 1 1.2.1 开发者的选择 3 1.2.2 必备知识 4 1.3 编写iOS应用程序有何不同 4 1.3.1 只有一个应用程序正在运行 5 1.3.2 只有一个窗口 5 1.3.3 受限访问 5 1.3.4 有限的响应时间 5 1.3.5 有限的屏幕大小 5 1.3.6 有限的系统资源 6 1.3.7 不支持垃圾收集 6 1.3.8 新功能 6 1.3.9 与众不同的方法 7 1.4 本书内容 7 1.5 本次更新的内容 8 1.6 准备开始吧 8

第2章 创建基本项目 9 2.1 在Xcode中设置项目 9 2.2 Interface Builder简介 14 2.2.1 nib文件的构成 15 2.2.2 在视图中添加标签 16 2.2.3 改变属性 18 2.3 美化iPhone应用程序 19 2.4 小结 22

第3章 处理基本交互 23 3.1 MVC范型 23 3.2 创建项目 24 3.3 创建视图控制器 24 3.3.1 输出口 25 3.3.2 操作 26 3.3.3 将操作和输出口添加到视图控制器 27 3.3.4 将操作和输出口添加到实现文件 30 3.4 使用应用程序委托 34 3.5 编辑MainWindow.xib 36 3.6 编辑Button_FunViewController.xib 37 3.6.1 在Interface Builder中创建视图 37 3.6.2 连接所有元素 40 3.6.3 测试 43 3.7 小结 43

第4章 更丰富的用户界面 44 4.1 满是控件的屏幕 44 4.2 活动和被动控件 46 4.3 创建应用程序 46 4.4 实现图像视图和文本字段 47 4.4.1 确定输出口 47 4.4.2 确定操作 48 4.4.3 添加图像视图 49 4.4.4 添加文本字段 52 4.4.5 设置第二个文本字段的属性 55 4.4.6 连接输出口 55 4.5 关闭键盘 55 4.5.1 完成输入后关闭键盘 56 4.5.2 通过触摸背景关闭键盘 57 4.6 实现滑块和标签 59 4.6.1 确定输出口和操作 59 4.6.2 添加输出口和操作 60 4.6.3 添加滑块和标签 61 4.6.4 连接操作和输出口 62 4.7 实现开关、按钮和分段控件 62 4.7.1 添加输出口和操作 62 4.7.2 添加开关、按钮和分段控件 65 4.7.3 连接开关输出口和操作 66 4.7.4 添加按钮 66 4.8 实现操作表和警报 67 4.8.1 遵从操作表委托方法 67 4.8.2 显示操作表 68 4.8.3 使用操作表委托 70 4.9 美化按钮 71 4.9.1 viewDidLoad方法 71 4.9.2 控件状态 72 4.9.3 可拉伸图像 72 4.10 成为出色的内存使用者 73 4.11 小结 74

第5章 自动旋转和自动调整大小 75 5.1 自动旋转机制 75 5.2 使用自动调整属性处理旋转 77 5.2.1 指定旋转支持 77 5.2.2 使用自动调整属性设计界面 79 5.2.3 大小检查器的自动调整属性 80 5.2.4 设置按钮的自动调整属性 81 5.3 在旋转时重构视图 82 5.3.1 声明和连接输出口 83 5.3.2 在旋转时移动按钮 84 5.4 切换视图 85 5.4.1 确定输出口和操作 86 5.4.2 声明操作和输出口 87 5.4.3 设计两个视图 88 5.4.4 实现交换和操作 88 5.5 小结 91

第6章 多视图应用程序 92 6.1 多视图应用程序的常见类型 92 6.2 多视图应用程序的体系结构 94 6.2.1 根控制器 95 6.2.2 内容视图剖析 96 6.3 构建View Switcher 96 6.3.1 创建视图控制器和nib文件 97 6.3.2 修改应用程序委托 99 6.3.3 SwitchViewController.h 101 6.3.4 添加视图控制器 101 6.3.5 构建包含工具栏的视图 103 6.3.6 编写根视图控制器 104 6.3.7 实现内容视图 108 6.3.8 制作转换动画 110 6.4 小结 113

第7章 标签栏与选取器 114 7.1 Pickers应用程序 114 7.2 委托和数据源 117 7.3 建立工具栏框架 117 7.3.1 创建文件 117 7.3.2 添加根视图控制器 118 7.3.3 编辑MainWindow.xib 120 7.3.4 连接输出口,然后运行 123 7.4 实现日期选取器 124 7.5 实现单个组件选取器 126 7.5.1 声明输出口和操作 126 7.5.2 构建视图 127 7.5.3 将控制器实现为数据源和委托 127 7.6 实现多组件选取器 131 7.6.1 声明输出口和操作 131 7.6.2 构建视图 132 7.6.3 实现控制器 132 7.7 实现独立组件 135 7.8 使用自定义选取器创建简单游戏 141 7.8.1 编写控制器头文件 141 7.8.2 构建视图 142 7.8.3 添加图像资源 143 7.8.4 实现控制器 143 7.8.5 最后的细节 149 7.8.6 链接Audio Toolbox框架 153 7.9 小结 154

第8章 表视图简介 155 8.1 表视图基础 156 8.1.1 表视图和表视图单元 156 8.1.2 分组表和无格式表 157 8.2 实现一个简单的表 158 8.2.1 设计视图 158 8.2.2 编写控制器 158 8.2.3 添加一个图像 161 8.2.4 表视图单元样式 163 8.2.5 设置缩进级别 165 8.2.6 处理行的选择 165 8.2.7 更改字体大小和行高 167 8.3 定制表视图单元 168 8.3.1 单元应用程序  168 8.3.2 使用UITableViewCell的自定义子类 172 8.4 分组分区和索引分区 176 8.4.1 构建视图 176 8.4.2 导入数据 177 8.4.3 实现控制器 177 8.4.4 添加索引 181 8.5 实现搜索栏 181 8.5.1 重新考虑设计 181 8.5.2 深层可变副本 182 8.5.3 更新控制器头文件 184 8.5.4 修改视图 185 8.5.5 修改控制器实现 186 8.6 小结 197

第9章 导航控制器和表视图 198 9.1 导航控制器 198 9.1.1 栈的性质 198 9.1.2 控制器栈 199 9.2 由6个部分组成的分层应用程序:Nav 200 9.2.1 子控制器 200 9.2.2 Nav应用程序的骨架 203 9.2.3 第一个子控制器:展示按钮视图 209 9.2.4 第二个子控制器:校验表 217 9.2.5 第三个子控制器:表行上的控件 221 9.2.6 第四个子控制器:可移动的行 227 9.2.7 第五个子控制器:可删除的行 233 9.2.8 第六个子控制器:可编辑的详细窗格 239 9.2.9 其他内容 257 9.3 小结 260

第10章 iPad开发注意事项 261 10.1 分割视图和浮动窗口 261 10.2 创建SplitView项目 263 10.3 xib定义结构 264 10.4 代码定义功能 265 10.5 显示总统信息 272 10.6 创建浮动窗口 276 10.7 小结 282

第11章 应用程序设置和用户默认设置 283 11.1 设置束 283 11.2 AppSettings应用程序 284 11.2.1 创建项目 286 11.2.2 使用设置束 286 11.2.3 读取应用程序中的设置 297 11.2.4 更改应用程序中的默认设置 302 11.2.5 实现逼真效果 305 11.3 小结 307

第12章 保存数据 308 12.1 应用程序的沙盒 308 12.1.1 获取Documents目录 309 12.1.2 获取tmp目录 310 12.2 文件保存策略 310 12.2.1 单个文件持久性 310 12.2.2 多个文件持久性 311 12.3 属性列表 311 12.3.1 属性列表序列化 311 12.3.2 持久性应用程序的第一个版本 312 12.4 对模型对象进行归档 317 12.4.1 符合NSCoding 318 12.4.2 实现NSCopying 319 12.4.3 对数据对象进行归档和取消归档 319 12.4.4 归档应用程序 320 12.5 使用iPhone的嵌入式SQLite3 324 12.5.1 创建或打开数据库 325 12.5.2 绑定变量 327 12.5.3 SQLite3应用程序 327 12.6 使用Core Data 334 12.6.1 实体和托管对象 335 12.6.2 Core Data应用程序 339 12.7 小结 348

第13章 Grand Central Dispatch、后台处理及其应用 349 13.1 Grand Central Dispatch 349 13.2 SlowWorker简介 350 13.3 线程基础知识 352 13.4 工作单元 353 13.5 GCD:低级队列 354 13.5.1 傻瓜式操作 354 13.5.2 改进SlowWorker 355 13.6 后台处理 360 13.6.1 应用程序生命周期 361 13.6.2 状态更改通知 361 13.6.3 创建State Lab 363 13.6.4 执行状态 364 13.6.5 利用执行状态更改 365 13.6.6 处理不活动状态 366 13.6.7 处理后台状态 370 13.7 小结 378

第14章 使用Quartz和OpenGL绘图 379 14.1 图形世界的两个视图 379 14.2 Quart绘图方法 380 14.2.1 Quartz 2D的图形上下文 380 14.2.2 坐标系 381 14.2.3 指定颜色 382 14.2.4 在上下文中绘制图像 383 14.2.5 绘制形状:多边形、直线和曲线 383 14.2.6 Quartz 2D工具示例:模式、梯度、虚线模式 384 14.3 QuartzFun应用程序 384 14.3.1 构建QuartzFun应用程序 384 14.3.2 添加Quartz Drawing代码 394 14.3.3 优化QuartzFun应用程序 398 14.4 GLFun应用程序 401 14.4.1 构建GLFun应用程序 402 14.4.2 使用OpenGL绘图 404 14.4.3 完成GLFun 411 14.5 小结 411

第15章 轻击、触摸和手势 412 15.1 多触摸术语 412 15.2 响应者链 413 15.2.1 响应者链中的对象 413 15.2.2 转发事件:保持响应者链的活动状态 414 15.3 多触摸体系结构 415 15.3.1 将触摸相关代码放在何处 415 15.3.2 4个手势通知方法 415 15.4 检测触摸 416 15.4.1 构建一个Touch Explorer应用程序 417 15.4.2 运行Touch Explorer 419 15.5 检测轻扫 419 15.5.1 构建Swipes应用程序 420 15.5.2 使用自动手势识别 423 15.5.3 实现多个轻扫动作 424 15.6 检测多次轻击 425 15.7 检测捏合操作 430 15.8 创建和使用自定义手势 433 15.8.1 定义选中标记手势 433 15.8.2 将勾选标记手势附加到视图 435 15.9 小结 437

第16章 Core Location定位功能 438 16.1 位置管理器 438 16.1.1 设置所需的精度 439 16.1.2 设置距离筛选器 439 16.1.3 启动位置管理器 439 16.1.4 更明智地使用位置管理器 440 16.2 位置管理器委托 440 16.2.1 获取位置更新 440 16.2.2 使用CLLocation获取纬度和经度 440 16.2.3 错误通知 442 16.3 尝试使用Core Location 442 16.3.1 更新位置管理器 446 16.3.2 确定移动距离 447 16.4 小结 447

第17章 加速计 448 17.1 加速计物理学 448 17.2 不要忘记旋转 449 17.3 Core Motion和动作管理器 449 17.3.1 基于事件的动作 450 17.3.2 主动动作访问 455 17.3.3 加速计结果 457 17.4 检测摇动 458 17.4.1 Baked-In摇动 459 17.4.2 摇动与击碎 459 17.5 将加速计用作方向控制器 464 17.5.1 滚弹珠程序 464 17.5.2 编写Ball View 466 17.5.3 计算小球运动 469 17.6 小结 472

第18章 iPhone照相机和照片库 473 18.1 使用图像选取器和UIImagePicker-Controller 474 18.2 实现图像选取器控制器委托 475 18.3 实际测试照相机和库 476 18.3.1 设计界面 477 18.3.2 实现照相机视图控制器 477 18.4 小结 481

第19章 应用程序本地化 482 19.1 本地化体系结构 482 19.2 字符串文件 483 19.2.1 字符串文件里面是什么 484 19.2.2 本地化的字符串宏 484 19.3 现实中的iPhone:本地化应用程序 485 19.3.1 创建LocalizeMe 485 19.3.2 测试LocalizeMe 489 19.3.3 本地化nib文件 489 19.3.4 本地化图像 492 19.3.5 生成和本地化字符串文件 493 19.3.6 本地化应用程序显示名称 495 19.4 小结 496

第20章 未来之路 497 20.1 别陷进单一的思路里 497 20.1.1 苹果公司的文档 497 20.1.2 邮件列表 498 20.1.3 论坛 498 20.1.4 网站 499 20.1.5 博客 499 20.2 参考资料 500 20.3 作者 501 20.4 再会 501

亚马逊链接

基本信息

名称: HTML5游戏开发
作者信息: 作者: Jeanine Meyer [ 中文 pdf ]

简单介绍

今天,大多数现代浏览器都已经支持HTML5。学习体验HTML5带给Web开发的便捷、快速和强大功能,是每一位Web设计和开发人员的当务之急。 迈耶编著的《HTML5游戏开发》通过人们熟悉的一个个游戏让读者轻松掌握HTML5、CSS和JavaScript的新特性,并将这些特性灵活应用到Web开发中。书中主要介绍了使用carwas元素直接在屏幕上绘图、添加图像和编写文本,只使用HTML5、CSS和JavaScript在网站上加入视频和音频。使用事件处理响应鼠标事件和按键。使用定时事件生成动画。验证表单输入,在玩家的计算机上存储迷宫布局之类的信息并按需重新加载。跟随作者的指引。你也能开发出妙趣横生的小游戏。

目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
目 录 

第1章 基础知识 1 1.1 引言 1 1.2 关键需求 3 1.3 HTML5、CSS和JavaScript特性 3 1.3.1 基本HTML 结构和标记 4 1.3.2 JavaScript编程 9 1.4 构建自己的应用 10 1.5 测试和上传应用 16 1.6 小结 16

第2章 骰子游戏 17 2.1 引言 17 2.2 关键需求 20 2.3 HTML5、CSS和JavaScript特性 20 2.3.1 伪随机处理和数学表达式 20 2.3.2 变量和赋值语句 21 2.3.3 程序员自定义函数 22 2.3.4 条件语句:if和switch 23 2.3.5 在画布上绘图 25 2.4 构建自己的应用 34 2.4.1 掷一个骰子 35 2.4.2 掷两个骰子 40 2.4.3 完整的craps游戏 44 2.5 测试和上传应用 50 2.6 小结 51

第3章 弹跳球 52 3.1 引言 52 3.2 关键需求 54 3.3 HTML5、CSS和JavaScript特性 55 3.4 构建自己的应用 64 3.5 测试和上传 74 3.6 小结 74

第4章 炮弹和弹弓 75 4.1 引言 75 4.2 关键需求 78 4.3 HTML5、CSS和JavaScript特性 79 4.3.1 数组和程序员自定义对象 79 4.3.2 绘图旋转和平移 80 4.3.3 绘制线段 84 4.3.4 拉弹弓的鼠标事件 85 4.3.5 使用数组接合改变显示元素列表 87 4.3.6 点之间的距离 87 4.4 构建自己的应用 88 4.4.1 有大炮、角度和速度的炮弹应用 92 4.4.2 弹弓:使用鼠标设置飞行参数 98 4.5 测试和上传应用 106 4.6 小结 106

第5章 记忆力(注意力)游戏 107 5.1 引言 107 5.2 关键需求 111 5.3 HTML5、CSS和JavaScript特性 112 5.3.1 表示扑克牌 112 5.3.2 使用Date 确定时间 113 5.3.3 提供暂停 114 5.3.4 绘制文本 114 5.3.5 绘制多边形 116 5.3.6 洗牌 117 5.3.7 单击牌的实现 118 5.3.8 防止某些作弊行为 119 5.4 构建自己的应用 119 5.5 测试和上传应用 132 5.6 小结 132

第6章 猜谜游戏 133 6.1 引言 133 6.2 关键需求 137 6.3 HTML5、CSS和JavaScript特性 138 6.3.1 存储和获取数组信息 138 6.3.2 程序执行时创建HTML 140 6.3.3 使用JavaScript代码修改CSS来改变元素 142 6.3.4 使用form和input元素的文本反馈 144 6.3.5 表现视频 144 6.4 构建自己的应用 146 6.5 测试和上传应用 157 6.6 小结 157

第7章 迷宫 158 7.1 引言 158 7.2 关键需求 162 7.3 HTML5、CSS和JavaScript特性 162 7.3.1 墙和token的表示 163 7.3.2 建立和定位墙的鼠标事件 163 7.3.3 检测箭头按键 164 7.3.4 token与墙的碰撞检测 165 7.3.5 使用本地存储 167 7.3.6 为本地存储编码数据 172 7.3.7 单选按钮 174 7.4 构建自己的应用 174 7.5 测试和上传应用 189 7.6 小结 189

第8章 石头剪刀布 191 8.1 引言 191 8.2 关键需求 194 8.3 HTML5、CSS和JavaScript特性 195 8.3.1 为玩家提供图片按钮 195 8.3.2 生成计算机动作 199 8.3.3 启动 206 8.4 构建自己的应用 206 8.5 测试和上传应用 212 8.6 小结 213

第9章 上吊小人游戏 214 9.1 引言 214 9.2 关键需求 221 9.3 HTML5、CSS和JavaScript特性 222 9.3.1 将单词表存储为一个在外部脚本文件中定义的数组 222 9.3.2 生成和定位HTML 标记,使标记作为按钮并禁用这些按钮 223 9.3.3 在画布上逐步绘制 225 9.3.4 维护游戏状态并确定输赢 226 9.3.5 检查猜测,设置textContent显示秘密词中的字母 227 9.4 构建自己的应用 228 9.5 测试和上传应用 236 9.6 小结 236

第10章 黑桃J 237 10.1 引言 237 10.2 关键需求 242 10.3 HTML5、CSS和JavaScript特性 242 10.4 构建自己的应用 249 10.5 测试和上传应用 258 10.6 小结 258

亚马逊链接

基本信息

名称: 黑客 计算机革命的英雄
作者信息: 作者: 里夫 (Steven Levy) [ 中文 pdf ]

简单介绍

《黑客:计算机革命的英雄》由Steven Levy所著,黑客文化和伦理的奠基之作,计算机专业人士必读。二十五周年新版,涵盖比尔·盖茨、马克·扎克伯格、理查德·斯托曼、史蒂夫·沃兹尼克等著名黑客的最新资料。多年前,射击游戏之父、Doom游戏的作者约翰·卡马克由于读到《黑客:计算机革命的英雄》,坚定了游戏开发的决心。谷歌首席信息官本·弗里德也是《黑客:计算机革命的英雄》的忠实读者。探寻黑客文化的本质,体会黑客精神的精髓。“黑客”一词来源于英语动词hack,原意为“劈、砍”,也就意味着“辟出、开辟”后来,hack的含义演变为用有效的手段解决某一个问题。1984年,Steven Levy编著的“黑客》一书追溯了黑客传统和历史,讲述黑客的人生和故事,归纳黑客创造的技术奇迹,总结黑客文化和伦理。《黑客:计算机革命的英雄》第一次将黑客的价值观总结为六条“黑客伦理”,直到今天这几条伦理仍为这方面的经典论述,对计算机的访问(以及任何可能帮助你认识我们这个世界的事物)应该是不受限制的,完全的任何人都有动手尝试的权利!所有的信息都应该可以自由获取。不迷信权威——促进分权评判黑客的标准应该是他们的技术,而不是那些没有实际用途的指标,比如学位、年龄、种族或职位。你可以在计算机上创造出艺术与美。计算机技术可以让你的生活更美好。《黑客》一书依然是后人无法超越的一本巅峰之作《黑客:计算机革命的英雄》写于20世纪80年代初期,当时正是PC崛起计算机解放浪潮的初期当然不可否认,随着计算机不断社会化,黑客的组成和社会内涵已经发生了巨大变化,但是,不管“黑客”这个概念如何被曲解《黑客》一书已经为黑客确立了真正的历史传统和严谨祖训,它们不可动摇地传承着,为无数的黑客带来了积极的影响。2010年4月,在《黑客》一书出版25周年之际,《连线》杂志最近发表了作者Steven Levy的文章,讲述了他近期再访书中名人的感受,同时阐述了黑客对网络发展的影响。时隔25年,经典著作《黑客》再度出版,涵盖比尔·盖茨、马克·扎克伯格、理查德·斯托曼、史蒂夫·沃兹尼克等著名黑客的最新资料;将“黑客精神”和“黑客伦理”传承给下一代冉冉升起的黑客。黑客文化和伦理的奠基之作,计算机专业人士必读,25周年新版,涵盖比尔·盖茨、马克·扎克伯格、理查德·斯托曼、史蒂夫·沃兹尼克等著名黑客的最新资料,多年前,射击游戏之父,Doom游戏的作者约翰·卡马克由于读到本书而坚定了游戏开发的决心,谷歌首席信息官本·弗里德也是本书的忠实读者,探寻黑客文化的本质,体会黑客精神的精髓。

目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
前言
本书人物谱(也包括计算机):“巫师”和他们的机器
第一部分 真正的黑客
剑桥:20世纪50年代和60年代
第1章 技术模型铁路俱乐部
第2章 黑客伦理
第3章 太空大战
第4章 格林布莱特和高斯珀
第5章 午夜计算机改装组织
第6章 成功者和失败者
第7章 《生命》游戏

第二部分 硬件黑客 加州北部:20世纪70年代 第8章 2100年大叛乱 第9章 每个人都能成为上帝 第10章 家酿计算机俱乐部 第11章 Tiny BASIC 第12章 天才沃兹 第13章 秘密

第三部分 游戏黑客 Sierras:20世纪80年代 第14章 巫师和公主 第15章 联盟之道 第16章 第三代黑客 第17章 夏令营 第18章 《青蛙过河》 第19章 苹果节 第20章 巫师大比拼

第四部分 最后一名真正的黑客 剑桥:1983 最后一名真正的黑客 编后记:十年以后 编后记:2010 备注 致谢 作者简介

亚马逊链接

基本信息

名称: 研磨Struts2
作者信息: 作者: 陈臣 [ 中文 pdf ]

简单介绍

《研磨Struts2》:超过450分钟的Struts2课堂教学视频,提供配书视频对应的PPT、课堂讲义和源代码。Struts2的架构和运行流程、Action、Result和Intercepter、值栈的功能和使用OGNL、Struts2标签体系、Struts2对Ajax的支持、Struts2对文件上传下载的支持、防止重复提交和进度条、整合Spring、JFreeChart、SiteMeth、Struts2的国际化、使用Struts2的验证框架和类型转换、Struts2对零配置的支持。国内知名的高端Java实训机构:一个能让你学到真实本领的Java学习基地!一个能帮助你真正解决就业问题的机构!在Java私塾:高薪就业根本就不是问题。更好的职业发展才是硬道理。

目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
第1章 Struts2概述
1.1 MVC模式
1.1.1 MVC模式简介
1.1.2 MVC模式基础
1.1.3 MVC模式作用
1.1.4 Model2模型中的MVC
1.2 Struts2基础
1.2.1 Strutsl时代
1.2.2 Struts2出世
1.2.3 Struts2基本组成
1.2.4 Struts2能干什么
1.3 Struts2和MVC

第2章 struts2的HelloWorId 2.1 概述 2.2 准备开发环境和运行环境 2.2.1 配置JDK 2.2.2 下载并安装:Eclipse 2.2.3 下载Tomcat并在Eclipse里面引用Tomcat 2.2.4 下载Struts2以及认识Struts2包结构 2.3 从Servlet+JSP+JavaBean实现MVC开始 2.3.1 起点概述 2.3.2 建立动态的Web工程 2.3.3 配置工程运行环境 2.3.4 编写JavaBean 2.3.5 编写Servlet 2.3.6 配置web.xml 2.3.7 编写登录页面 2.3.8 编写欢迎页面 2.3.9 测试示例 2.3.10 中文处理 2.4 Struts2的HelloWorld 2.4.1 概述 2.4.2 配置Struts2的运行环境 2.4.3 实现动作类(Action) 2.4.4 配置struts.xml 2.4.5 制作登录页面 2.4.6 制作欢迎页面 2.4.7 测试示例 2.5 开发中的一些小窍门 2.5.1 概述 2.5.2 使用DTD来获得XML帮助 2.5.3 在新建菜单中添加JSP 2.5.4 获得Action的全类名 2.5.5 获得JSP在Web工程中的绝对路径

第3章 struts2的架构和运行流程 3.1 Struts2的系统架构 3.1.1 Struts2的系统架构 3.1.2 各模块说明 3.2 Struts2的运行流程 3.3 Struts2的核心概念 3.4 小结

第4章 Action 4.1 Action基础 4.1.1 Action是什么 4.1.2.Action能干什么 4.1.3 Action的基本配置 4.2 Action的实现 4.2.1 POJO的实现 4.2.2 实现Action接口 4.2.3 继承ActionSupport类 4.2.4 execute方法内部实现方式 4.2.5 简单的单元测试 4.3 Action的数据 4.3.1 数据来源 4.3.2 基本的数据对应方式 4.3.3 传入非String类型的值 4.3.4 如何处理传入多个值 4.4 Action的配置 4.4.1 〈package〉的配置 4.4.2 〈action〉的配置 4.4.3 分模块配置方式 4.4.4 使用通配符 4.4.5 默认类配置方式 4.5 Action的其他重要知识 4.5.1 Action的生命周期 4.5.2 调用非execute方法

第5章 ResuIt 5.1 Result基础 5.1.1 Result是什么和能干什么 5.1.2 Result和ResultType 5.1.3 Result有什么 5.2 预定义的Result 5.2.1 预定义的ResultType 5.2.2 如何配置使用 5.2.3 名称为dispatcher的ResultType 5.2.4 名称为redirect的ResultType 5.2.5 名称为chain的ResultType 5.2.6 名称为FreeMarker的ResultType 5.2.7 其他ResultType 5.3 全局Result 5.3.1 全局Result概述 5.3.2 配置和使用 5.3.3 搜寻Result的顺序 5.3.4 应用示例 5.4.使用通配符 5.5 Struts2的异常映射 5.5.1 异常映射基础 5.5.2 局部异常映射与全局异常映射 5.5.3 在页面输出异常信息 5.6 PreResultListener 5.6.1 什么是PreResultListener 5.6.2 PreResultListener实现示例 5.7 自定义Result 5.7.1 自定义Result概述 5.7.2 开发自定义Result

第6章 拦截器 6.1 拦截器基础 6.1.1 拦截器是什么 6.1.2 拦截器的优点 6.1.3 拦截器有什么 6.2 预定义的拦截器 6.2.1 预定义的拦截器 6.2.2 预定义的拦截器栈 6.2.3 预定义拦截器的配置使用 6.2.4 拦截器的调用顺序 6.2.5 实践一下 6.3 自定义的拦截器 6.3.1 什么是自定义的拦截器 6.3.2 开发自定义拦截器 6.3.3 向拦截器传入参数 6.4 两个有用的拦截器 6.4.1 更强大的logger拦截器 6.4.2 登录检查拦截器

第7章 值栈和0GNL 7.1 值栈 7.1.1 值栈是什么 7.1.2 值栈能干什么 7.1.3 值栈有什么 7.1.4 ActionContext的基本使用 7.1.5 ValueStack的基本使用 7.2 OGNL 7.2.1 0GNL概述 7.2.2 OGNL的基本使用 …… 附录A 参考文献

亚马逊链接

基本信息

名称: HTML5与CSS3实战指南
作者信息: 作者: 威尔(Estelle Weyl) [ 中文 pdf ]

简单介绍

《HTML5与CSS3实战指南》:在我们酷炫的示例网站上查看HTML5和CSS3的魔力,采用SVG和Carwas来为图形提供最大的灵活性,使用地理定位等新API创建卓越的Web应用程序。《HTML5与CSS3实战指南》将向读者展示如何使用前沿的Web开发技术——HTML5与CSS3来开发动态Web站点。《HTML5与CSS3实战指南》涵盖了零基础开发Web站点的所有知识,通过学习《HTML5与CSS3实战指南》,读者将掌握HTML5中可用的全新语义标记,以及如何在不求助复杂解决方案的情况下使用CSS3来开发Web站点。您将学习如何:通过使用HTML5自身的Video元素来摆脱Flash的束缚,使用@font-face设置完全支持您的信息的类型,构建用户喜欢的具有智能验证功能的Web表单,构建运行在移动环境中的现代Web应用程序,使用SVG和carwas迅速创建动态、高效的图形,使用全新的API添加地理定位和离线Web应用等功能。

目录

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
第1章 HTML5和CSS3简介 1
1.1 什么是HTML5 1
1.2 如何发展至今 2
1.3 我们为什么应关注HTML5 4
1.4 什么是CSS3 4
1.5 我们为什么应关注CSS3 5
1.6 在现实中,我们想做的是什么 6
1.6.1 多种浏览器的市场 6
1.6.2 不断发展的移动市场 7
1.7 实际应用 8

第2章 HTML5样式的标记 11 2.1 The HTML5 Herald简介 11 2.2 基本的HTML5模板 12 2.2.1 Doctype 13 2.2.2 html元素 14 2.2.3 head元素 14 2.2.4 公平竞争 16 2.2.5 剩余部分是历史简介 17 2.3 HTML5常见问题 18 2.3.1 为什么这些变更仍能够在旧版浏览器中工作 18 2.3.2 是否需要关闭所有标签 20 2.3.3 关于其他的基于XHTML的语法使用习惯 20 2.4 定义页面结构 22 2.4.1 header元素 22 2.4.2 section元素 23 2.4.3 article元素 24 2.4.4 nav元素 25 2.4.5 aside元素 26 2.4.6 footer元素 27 2.5 构建The HTML5 Herald 28 2.6 小结 30

第3章 关于HTML5语义的更多内容 31 3.1 关于内容类型的新视角 31 3.2 文档大纲 33 3.3 最新消息 34 3.4 更多新元素 37 3.4.1 figure和figcaption元素 37 3.4.2 mark元素 38 3.4.3 progress和meter元素 38 3.4.4 time元素 39 3.5 对现有功能的更改 41 3.5.1 单词“Deprecated”是被弃用的 41 3.5.2 链接中的block元素 41 3.5.3 黑体文本 41 3.5.4 斜体文本 42 3.5.5 大号和小号文体 43 3.5.6 引起争议的cite元素 43 3.5.7 描述(不是定义)列表 43 3.6 其他新元素及功能 44 3.6.1 details元素 44 3.6.2 自定义的有序列表 45 3.6.3 作用域样式 45 3.6.4 script元素的async属性 45 3.7 验证HTML5文档 46 3.8 小结 48

第4章 HTML5表单 49 4.1 工具箱中的相关工具 49 4.2 HTML5表单属性 51 4.2.1 required属性 51 4.2.2 placeholder属性 55 4.2.3 pattern属性 58 4.2.4 disabled属性 59 4.2.5 readonly属性 59 4.2.6 multiple属性 60 4.2.7 form属性 60 4.2.8 autocomplete属性 61 4.2.9 datalist元素和list属性 61 4.2.10 autofocus属性 62 4.3 HTML5新表单输入类型 62 4.3.1 search 63 4.3.2 Email Addresses 64 4.3.3 URL 65 4.3.4 Telephone Numbers 66 4.3.5 Numbers 66 4.3.6 Ranges 67 4.3.7 Colors 68 4.3.8 Dates和Times 69 4.4 HTML5中的其他新表单控件 71 4.4.1 output元素 72 4.4.2 keygen元素 72 4.5 对现有表单控件及属性的更改 72 4.5.1 form元素 72 4.5.2 optgroup元素 73 4.5.3 textarea元素 73 4.6 小结 73

第5章 HTML5音频和视频 75 5.1 历史简介 75 5.2 目前状况 76 5.2.1 视频容器格式 76 5.2.2 视频编解码器 77 5.2.3 音频编解码器 77 5.2.4 当前浏览器使用哪种组合 77 5.3 标记 78 5.3.1 启用本机控件 78 5.3.2 autoplay属性 79 5.3.3 loop属性 80 5.3.4 preload属性 80 5.3.5 poster属性 81 5.3.6 audio属性 81 5.3.7 添加对多种视频格式的支持 81 5.3.8 资源顺序 82 5.3.9 关于Internet Explorer 6~8 83 5.3.10 MIME类型 85 5.4 用于网络的视频文件解码 86 5.5 创建自定义控件 86 5.5.1 让我们从一些标记和设计开始 87 5.5.2 介绍媒体元素API 88 5.5.3 播放和暂停视频 90 5.5.4 视频音轨的静音与取消静音 93 5.5.5 视频结束播放的响应 94 5.5.6 更新视频播放的时间 94 5.5.7 媒体元素API的其他一些功能 97 5.6 关于音频 99 5.7 可访问的媒体 99 5.8 小结 100

第6章 CSS3简介 101 6.1 改进旧版浏览器 101 6.2 CSS3选择器 102 6.2.1 关系选择器 102 6.2.2 属性选择器 104 6.2.3 伪类 105 6.2.4 结构化伪类 107 6.2.5 伪元素和生成的内容 110 6.3 CSS3颜色 111 6.3.1 RGBA 112 6.3.2 HSL和HSLA 113 6.3.3 不透明度 114 6.4 实际应用 114 6.5 圆角:border-radius 116 6.6 投影 118 6.7 文本阴影 122 6.8 更多阴影 122 6.9 小结 123

第7章 CSS3渐变和多背景 125 7.1 线性渐变 126 7.1.1 W3C语法 127 7.1.2 旧WebKit语法 130 7.1.3 实际应用 131 7.1.4 使用SVG的线性渐变 133 7.1.5 使用Internet Explorer滤镜的线性渐变 135 7.1.6 便捷的工具 136 7.2 径向渐变 136 7.2.1 W3C语法 137 7.2.2 旧WebKit语法 139 7.2.3 实际应用 140 7.3 重复渐变 141 7.4 多背景图像 142 7.5 背景大小 145 7.6 小结 147

第8章 CSS3转换和过渡 149 8.1 转换 149 8.1.1 平移 150 8.1.2 缩放 152 8.1.3 旋转 153 8.1.4 倾斜 154 8.1.5 更改转换的原点 154 8.1.6 对Internet Explorer 8及更早版本的支持 155 8.2 过渡 156 8.2.1 transition-property 157 8.2.2 transition-duration 158 8.2.3 transition-timing-function 159 8.2.4 transition-delay 160 8.2.5 transition简写属性 160 8.2.6 多个过渡 161 8.3 动画 162 8.3.1 关键帧 162 8.3.2 动画属性 164 8.4 小结 167

第9章 嵌入字体和多列布局 169 9.1 Web字体和@font-face 169 9.1.1 实现@font-face 170 9.1.2 声明字体来源 172 9.1.3 字体属性描述符 174 9.1.4 Unicode范围 175 9.1.5 应用字体 176 9.1.6 法律因素 176 9.1.7 创建各种字体文件类型:Font Squirrel 177 9.1.8 其他考虑因素 180 9.2 CSS3多列布局 180 9.2.1 column-count属性 181 9.2.2 column-gap属性 182 9.2.3 column-width属性 182 9.2.4 columns简写属性 184 9.2.5 列和height属性 184 9.2.6 其他列功能 185 9.2.7 其他考虑因素 186 9.2.8 渐进增强 187 9.3 媒体查询 188 9.3.1 什么是媒体查询 188 9.3.2 语法 189 9.3.3 媒体查询的灵活性 190 9.3.4 浏览器支持 190 9.3.5 其他阅读材料 191 9.4 小结 191

第10章 地理定位、离线Web应用和Web存储 193 10.1 地理定位 194 10.1.1 隐私问题 195 10.1.2 地理定位方法 195 10.1.3 使用Modernizr检查支持 196 10.1.4 获取当前位置 196 10.1.5 地理定位的Position对象 197 10.1.6 获取经度和纬度 198 10.1.7 加载地图 199 10.1.8 关于旧式移动设备的结束语 204 10.2 离线Web应用 204 10.2.1 工作原理:HTML5应用程序缓存 205 10.2.2 设置站点离线工作 205 10.2.3 获取离线存储站点的权限 208 10.2.4 离线测试 208 10.2.5 使The HTML5 Herald离线可用 210 10.2.6 离线Web应用存储的限制 211 10.2.7 后备部分 211 10.2.8 刷新缓存 213 10.2.9 我们在线吗 214 10.2.10 其他阅读材料 215 10.3 Web存储 215 10.3.1 两种存储 216 10.3.2 Web存储数据的外观 217 10.3.3 获取和设置数据 218 10.3.4 转换存储的数据 218 10.3.5 快捷方式 219 10.3.6 删除条目和清除数据 219 10.3.7 存储限制 219 10.3.8 安全考虑 220 10.3.9 将Web存储添加到The HTML5 Herald 221 10.3.10 用网页审查工具查看Web存储值 224 10.4 其他HTML5 API 226 10.4.1 网络工作者 226 10.4.2 网络套接字 227 10.4.3 Web SQL和IndexedDB 227 10.5 返回到绘制面板 228

第11章 画布、SVG和拖放 229 11.1 画布 229 11.1.1 关于画布的一些历史 230 11.1.2 创建画布元素 230 11.1.3 在画布上绘制 232 11.1.4 获取背景 232 11.1.5 用颜色填充画笔 233 11.1.6 在画布上绘制矩形 234 11.1.7 画布坐标系统 234 11.1.8 fillStyle的变化 235 11.1.9 通过创建路径绘制其他形状 237 11.1.10 存储画布绘制 240 11.1.11 在画布上绘制图像 241 11.1.12 处理图像 243 11.1.13 将彩色图像转换为黑白图像 244 11.1.14 getImageData的安全性错误 247 11.1.15 用画布测试视频 247 11.1.16 在画布上显示文字 250 11.1.17 关注可访问性 254 11.1.18 其他阅读材料 254 11.2 SVG 254 11.2.1 在SVG上绘制 255 11.2.2 使用Inkscape创建SVG图像 258 11.2.3 SVG过滤器 258 11.2.4 使用Rapha?l库 259 11.2.5 画布与SVG 261 11.3 拖放 262 11.3.1 给WAI-ARIA猫喂食 263 11.3.2 使元素可拖动 264 11.3.3 DataTransfer对象 265 11.3.4 接受可以放下的元素 266 11.3.5 其他阅读材料 269 11.4 结束了,朋友们! 269 附录A Modernizr 271 附录B WAI-ARIA 277 附录C 微数据 281

亚马逊链接

基本信息

名称: 疯狂Java 突破程序员基本功的16课(修订版)
作者信息: 作者: 李刚 [ 中文 pdf ]

简单介绍

《疯狂Java:突破程序员基本功的16课(修订版)》:疯狂源自梦想,技术成就辉煌。你是否在求职时被鄙视“基本功不扎实”而万分惭愧?《疯狂Java:突破程序员基本功的16课(修订版)》能检验你的基本功,并让你弥补不足。《疯狂Java:突破程序员基本功的16课(修订版)》归纳了Java学习者、工作者在学习、工作过程中最欠缺的技术短板,形成内存管理、常见的陷阱、数据结构、程序调试、软件测试等16堂必修课。

目录

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
第1课 数组与内存控制 
1.1 数组初始化 
1.1.1 Java数组是静态的 
1.1.2 数组一定要初始化吗 
1.1.3 基本类型数组的初始化 
1.1.4 引用类型数组的初始化 
1.2 使用数组 
1.2.1 数组元素就是变量 
1.2.2 没有多维数组 
1.3 小结 

第2课 对象与内存控制  2.1 实例变量和类变量  2.1.1 实例变量和类变量的属性  2.1.2 实例变量的初始化时机  2.1.3 类变量的初始化时机  2.2 父类构造器  2.2.1 隐式调用和显式调用  2.2.2 访问子类对象的实例变量  2.2.3 调用被子类重写的方法  2.3 父子实例的内存控制  2.3.1 继承成员变量和继承方法的区别  2.3.2 内存中子类实例  2.3.3 父、子类的类变量  2.4 final修饰符  2.4.1 final修饰的变量  2.4.2 执行“宏替换”的变量  2.4.3 final方法不能被重写  2.4.4 内部类中的局部变量  2.5 小结 

第3课 常见Java集合的实现细节  3.1 Set和Map  3.1.1 Set和Map的关系  3.1.2 HashMap和HashSet  3.1.3 TreeMap和TreeSet  3.2 Map和List  3.2.1 Map的values()方法  3.2.2 Map和List的关系  3.3 ArrayList和LinkedList  3.3.1 Vector和ArrayList的区别  3.3.2 ArrayList和LinkedList的实现差异  3.3.3 ArrayList和LinkedList的性能分析和适用场景  3.4 Iterator迭代器  迭代时删除指定元素  3.5 小结 

第4课 Java的内存回收  4.1 Java引用的种类  4.1.1 对象在内存中状态  4.1.2 强引用  4.1.3 软引用  4.1.4 弱引用  4.1.5 虚引用  4.2 Java的内存泄漏  4.3 垃圾回收机制  4.3.1 垃圾回收的基本算法  4.3.2 堆内存的分代回收  4.3.3 与垃圾回收的附加选项  4.3.4 常见垃圾回收器  4.4 内存管理的小技巧  4.4.1 尽量使用直接量  4.4.2 使用StringBuilder和StringBuffer进行字符串连接  4.4.3 尽早释放无用对象的引用  4.4.4 尽量少用静态变量  4.4.5 避免在经常调用的方法、循环中创建Java对象  4.4.6 缓存经常使用的对象  4.4.7 尽量不要使用finalize方法  4.4.8 考虑使用SoftReference  4.5 小结 

第5课 表达式中的陷阱  5.1 关于字符串的陷阱  5.1.1 JVM对字符串的处理  5.1.2 不可变的字符串  5.1.3 字符串比较  5.2 表达式类型的陷阱  5.2.1 表达式类型的自动提升  5.2.2 复合赋值运算符的陷阱  5.3 输入法导致的陷阱  5.4 注释的字符必须合法  5.5 转义字符的陷阱  5.5.1 慎用字符的Unicode转义形式  5.5.2 中止行注释的转义字符  5.6 泛型可能引起的错误  5.6.1 原始类型变量的赋值  5.6.2 原始类型带来的擦除  5.6.3 创建泛型数组的陷阱  5.7 正则表达式的陷阱  5.8 多线程的陷阱  5.8.1 不要调用run方法  5.8.2 静态的同步方法  5.8.3 静态初始化块启动新线程执行初始化  5.8.4 注意多线程执行环境  5.9 小结 

第6课 流程控制的陷阱  6.1 switch语句陷阱  6.1.1 default分支永远会执行吗  6.1.2 break的重要性  6.1.3 switch表达式的类型  6.2 标签引起的陷阱  6.3 if语句的陷阱  6.3.1 else隐含的条件  6.3.2 小心空语句  6.4 循环体的花括号  6.4.1 什么时候可以省略花括号  6.4.2 省略花括号的危险  6.5 for循环的陷阱  6.5.1 分号惹的祸  6.5.2 小心循环计数器的值  6.5.3 浮点数作循环计数器  6.6 foreach循环的循环计数器  6.7 小结 

第7课 面向对象的陷阱  7.1 instanceof运算符的陷阱  7.2 构造器的陷阱  7.2.1 构造器之前的void  7.2.2 构造器创建对象吗  7.2.3 无限递归的构造器  7.3 持有当前类的实例  7.4 到底调用哪个重载的方法  7.5 方法重写的陷阱  7.5.1 重写private方法  7.5.2 重写其他访问权限的方法  7.6 非静态内部类的陷阱  7.6.1 非静态内部类的构造器  7.6.2 非静态内部类不能拥有静态成员  7.6.3 非静态内部类的子类  7.7 static关键字  7.7.1 静态方法属于类  7.7.2 静态内部类的限制  7.8 native方法的陷阱  7.9 小结 

第8课 异常捕捉的陷阱  8.1 正确关闭资源的方式  8.2 finally块的陷阱  8.2.1 finally的执行规则  8.2.2 finally块和方法返回值  8.3 catch块的用法  8.3.1 catch块的顺序  8.3.2 不要用catch代替流程控制  8.3.3 只能catch可能抛出的异常  8.3.4 做点实际的修复  8.4 继承得到的异常  8.5 小结 

第9课 线性表  9.1 线性表概述  9.1.1 线性表的定义及逻辑结构  9.1.2 线性表的基本操作  9.2 顺序存储结构  9.3 链式存储结构  9.3.1 单链表上的基本运算  9.3.2 循环链表  9.3.3 双向链表  9.4 线性表的分析  9.4.1 线性表的实现分析  9.4.2 线性表的功能  9.5 小结 

第10课 栈和队列  10.1 栈  10.1.1 栈的基本定义  10.1.2 栈的常用操作  10.1.3 栈的顺序存储结构及实现  10.1.4 栈的链式存储结构及实现  10.1.5 Java集合中的栈  10.2 队列  10.2.1 队列的基本定义  10.2.2 队列的常用操作  10.2.3 队列的顺序存储结构及实现  10.2.4 循环队列  10.2.5 队列的链式存储结构及实现  10.2.6 Java集合中的队列  10.3 双向队列  10.4 小结 

第11课 树和二叉树  11.1 树的概述  11.1.1 树的定义和基本术语  11.1.2 树的基本操作  11.1.3 父节点表示法  11.1.4 子节点链表示法  11.2 二叉树  11.2.1 二叉树的定义和基本概念  11.2.2 二叉树的基本操作  11.2.3 二叉树的顺序存储  11.2.4 二叉树的二叉链表存储  11.2.5 二叉树的三叉链表存储  11.3 遍历二叉树  11.3.1 先序遍历  11.3.2 中序遍历  11.3.3 后序遍历  11.3.4 广度优先(按层)遍历  11.4 森林、树和二叉树的转换  11.4.1 森林、树和二叉树的转换  11.4.2 树的链表存储  11.5 哈夫曼树  11.5.1 哈夫曼树的定义和基本概念  11.5.2 创建哈夫曼树  11.5.3 哈夫曼编码  11.6 排序二叉树  11.7 红黑树  11.7.1 插入操作  11.7.2 删除操作  11.8 小结 

第12课 常用的内部排序  12.1 排序的基本概念  12.1.1 排序概述  12.1.2 内部排序的分类  12.2 选择排序法  12.2.1 直接选择排序  12.2.2 堆排序  12.3 交换排序  12.3.1 冒泡排序  12.3.2 快速排序  12.4 插入排序  12.4.1 直接插入排序  12.4.2 折半插入排序  12.4.3 Shell排序  12.5 归并排序  12.6 桶式排序  12.7 基数排序  12.8 小结 

第13课 程序开发  13.1 扎实的基本功  13.1.1 快速的输入能力  13.1.2 编程实现能力  13.1.3 快速排错  13.2 程序开发之前  13.2.1 分析软件的组件模型  13.2.2 建立软件的数据模型  13.3 弄清程序的具体实现  13.3.1 各组件如何通信  13.3.2 人机交互的实现  13.3.3 复杂算法的分析  13.4 编写开发文档  13.4.1 绘制建模图、流程图  13.4.2 提供简要说明  13.4.3 编写伪码实现  13.5 编码实现和开发心态  13.5.1 开发是复杂的  13.5.2 开发过程是漫长的  13.6 小结 

第14课 程序调试  14.1 程序的可调试性  14.1.1 增加注释  14.1.2 使用log  14.2 程序调试的基本方法  14.2.1 借助编译器的代码审查  14.2.2 跟踪程序执行流程  14.2.3 断点调试  14.2.4 隔离调试  14.2.5 错误重现  14.3 记录常见错误  14.3.1 常见异常可能的错误原因  14.3.2 常见运行时异常可能的错误原因  14.4 程序调试的整体思路  14.4.1 分段调试  14.4.2 分模块调试  14.5 调试心态  14.5.1 谁都会出错  14.5.2 调试比写程序更费时  14.6 小结 

第15课 使用IDE工具  15.1 何时开始利用IDE工具  15.2 IDE工具概述  15.2.1 IDE工具的基本功能  15.2.2 常见的Java IDE工具  15.3 项目管理  15.3.1 建立项目  15.3.2 自动编译  15.3.3 自动部署、运行  15.4 代码管理  15.4.1 向导式的代码生成  15.4.2 代码生成器  15.4.3 代码提示  15.4.4 自动代码补齐  15.4.5 实时错误提示  15.5 项目调试  15.5.1 设置断点  15.5.2 单步调试  15.5.3 步入、步出  15.6 团队协作功能  作为版本控制工具的客户端  15.7 小结 

第16课 软件测试  16.1 软件测试概述  16.1.1 软件测试的概念和目的  16.1.2 软件测试的分类  16.1.3 开发活动和测试活动  16.1.4 常见的Bug管理工具  16.2 单元测试  16.2.1 单元测试概述  16.2.2 单元测试的逻辑覆盖  16.2.3 JUnit介绍  16.2.4 JUnit的用法  16.3 系统测试和自动化测试  16.3.1 系统测试概述  16.3.2 自动化测试  16.3.3 常见自动化测试工具  16.4 性能测试  16.4.1 性能测试概述  16.4.2 性能测试的相关概念  16.4.3 常见性能测试工具  16.5 小结

亚马逊链接

基本信息

名称: 编写高质量代码 改善Java程序的151个建议
作者信息: 作者: 秦小波 [ 中文 pdf ]

简单介绍

《编写高质量代码:改善Java程序的151个建议》:大多数Java程序员都会在前进的道路上被以下几类问题所困扰:一、来自于语言本身的问题。例如:覆写变长方法为什么会出现不能编译的情况?final修饰的int类型常量竟然在运行期被修改?匿名类是否有构造函数?它与普通类的构造函数有何不同?为什么要把受检异常转化为非受检异常?二、来自于程序设计和常用API的问题。例如:如何用一行代码实现两个集合的交、差、并集?如何才能动态加载一个类?数组如何动态加载?在switch中使用枚举类型,为什么会出现NullPointer Exception异常?为什么使用了volatile关键字后数据还是出现混乱?显式锁(Lock类)和内部锁(synchronized关键宇)完全一样吗?三、来自于程序架构和思想方面的问题。例如:Java的性能是否曾经让你担忧过?或者曾经让你很受伤?到底是该多采用开源工具还是自己写工具类?若采用开源工具,有什么评测标准?什么样的代码风格才是优秀的?怎么才能让一个团队保持同样的风格?如果你曾经为诸如此类的问题感到疑惑不解或顿然大悟,说明你正在向Java技术的巅峰攀登,正在成长为“振臂一呼,应者云集”的技术大牛,恭喜你!《编写高质量代码:改善Java程序的151个建议》从不同的侧面出发,对Java编码中各种棘手的疑难杂症和常见问题奉献了真知灼见,相信你一定能从中受益。从语法、程序设计和架构、工具和框架、编码风格、编程思想,5个方面深入探讨编写高质量Java代码的技巧、禁忌和最佳实践。

目录

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
前言
第1章 java开发中通用的方法和准则
建议1: 不要在常量和变量中出现易混淆的字母
建议2: 莫让常量蜕变成变量
建议3: 三元操作符的类型务必一致
建议4: 避免带有变长参数的方法重载
建议5: 别让null值和空值威胁到变长方法
建议6: 覆写变长方法也循规蹈矩
建议7: 警惕自增的陷阱
建议8: 不要让旧语法困扰你
建议9: 少用静态导入
建议10: 不要在本类中覆盖静态导入的变量和方法
建议11: 养成良好习惯,显式声明uid
建议12: 避免用序列化类在构造函数中为不变量赋值
建议13: 避免为final变量复杂赋值
建议14: 使用序列化类的私有方法巧妙解决部分属性持久化问题
建议15: break万万不可忘
建议16: 易变业务使用脚本语言编写
建议17: 慎用动态编译
建议18: 避免instanceof非预期结果
建议19: 断言绝对不是鸡肋
建议20: 不要只替换一个类

第2章 基本类型 建议21: 用偶判断,不用奇判断 建议22: 用整数类型处理货币 建议23: 不要让类型默默转换 建议24: 边界,边界,还是边界 建议25: 不要让四舍五入亏了一方 建议26: 提防包装类型的null值 建议27: 谨慎包装类型的大小比较 建议28: 优先使用整型池 建议29: 优先选择基本类型 建议30: 不要随便设置随机种子

第3章 类、对象及方法 建议31: 在接口中不要存在实现代码 建议32: 静态变量一定要先声明后赋值 建议33: 不要覆写静态方法 建议34: 构造函数尽量简化 建议35: 避免在构造函数中初始化其他类 建议36: 使用构造代码块精炼程序 建议37: 构造代码块会想你所想 建议38: 使用静态内部类提高封装性 建议39: 使用匿名类的构造函数 建议40: 匿名类的构造函数很特殊 建议41: 让多重继承成为现实 建议42: 让工具类不可实例化 建议43: 避免对象的浅拷贝 建议44: 推荐使用序列化实现对象的拷贝 建议45: 覆写equals方法时不要识别不出自己 建议46: equals应该考虑null值情景 建议47: 在equals中使用getclass进行类型判断 建议48: 覆写equals方法必须覆写hashcode方法 建议49: 推荐覆写tostring方法 建议50: 使用package-info类为包服务 建议51: 不要主动进行垃圾回收

第4章 字符串 建议52: 推荐使用string直接量赋值 建议53: 注意方法中传递的参数要求 建议54: 正确使用string、stringbuffer、stringbuilder 建议55: 注意字符串的位置 建议56: 自由选择字符串拼接方法 建议57: 推荐在复杂字符串操作中使用正则表达式 建议58: 强烈 建议使用utf编码 建议59: 对字符串排序持一种宽容的心态

第5章 数组和集合 建议60: 性能考虑,数组是首选 建议61: 若有必要,使用变长数组 建议62: 警惕数组的浅拷贝 建议63: 在明确的场景下,为集合指定初始容量 建议64: 多种最值算法,适时选择 建议65: 避开基本类型数组转换列表陷阱 建议66: aslist方法产生的list对象不可更改 建议67: 不同的列表选择不同的遍历方法 建议68: 频繁插入和删除时使用linkedlist 建议69: 列表相等只需关心元素数据 建议70:子列表只是原列表的一个视图 建议71: 推荐使用sublist处理局部列表 建议72: 生成子列表后不要再操作原列表 建议73: 使用comparator进行排序 建议74: 不推荐使用binarysearch对列表进行检索 建议75: 集合中的元素必须做到compareto和equals同步 建议76: 集合运算时使用更优雅的方式 建议77: 使用shuffle打乱列表 建议78: 减少hashmap中元素的数量 建议79: 集合中的哈希码不要重复 建议80: 多线程使用vector或hashtable 建议81: 非稳定排序推荐使用list 建议82: 由点及面,一叶知秋-集合大家族

第6章 枚举和注解 建议83: 推荐使用枚举定义常量 建议84: 使用构造函数协助描述枚举项 建议85: 小心switch带来的空值异常 建议86: 在switch的default代码块中增加assertionerror错误 建议87: 使用valueof前必须进行校验 建议88: 用枚举实现工厂方法模式更简洁 建议89: 枚举项的数量限制在64个以内 建议90: 小心注解继承 建议91: 枚举和注解结合使用威力更大 建议92: 注意@override不同版本的区别

第7章 泛型和反射 建议93: java的泛型是类型擦除的 建议94: 不能初始化泛型参数和数组 建议95: 强制声明泛型的实际类型 建议96: 不同的场景使用不同的泛型通配符 建议97: 警惕泛型是不能协变和逆变的 建议98:  建议采用的顺序是list[t]、list[?]、list[object] 建议99: 严格限定泛型类型采用多重界限 建议100: 数组的真实类型必须是泛型类型的子类型 建议101: 注意class类的特殊性 建议102: 适时选择getdeclared×××和get××× 建议103: 反射访问属性或方法时将accessible设置为true 建议104: 使用forname动态加载类文件 建议105: 动态加载不适合数组 建议106: 动态代理可以使代理模式更加灵活 建议107: 使用反射增加装饰模式的普适性 建议108: 反射让模板方法模式更强大 建议109: 不需要太多关注反射效率

第8章 异常 建议110: 提倡异常封装 建议111: 采用异常链传递异常 建议112: 受检异常尽可能转化为非受检异常 建议113: 不要在finally块中处理返回值 建议114: 不要在构造函数中抛出异常 建议115: 使用throwable获得栈信息 建议116: 异常只为异常服务 建议117: 多使用异常,把性能问题放一边

第9章 多线程和并发 建议118: 不推荐覆写start方法 建议119: 启动线程前stop方法是不可靠的 建议120: 不使用stop方法停止线程 建议121: 线程优先级只使用三个等级 建议122: 使用线程异常处理器提升系统可靠性 建议123: volatile不能保证数据同步 建议124: 异步运算考虑使用callable接口 建议125: 优先选择线程池 建议126: 适时选择不同的线程池来实现 建议127: lock与synchronized是不一样的 建议128: 预防线程死锁 建议129: 适当设置阻塞队列长度 建议130: 使用countdownlatch协调子线程 建议131: cyclicbarrier让多线程齐步走

第10章 性能和效率 建议132: 提升java性能的基本方法 建议133: 若非必要,不要克隆对象 建议134: 推荐使用“望闻问切”的方式诊断性能 建议135: 必须定义性能衡量标准 建议136: 枪打出头鸟-解决首要系统性能问题 建议137: 调整jvm参数以提升性能 建议138: 性能是个大“咕咚”

第11章 开源世界 建议139: 大胆采用开源工具 建议140: 推荐使用guava扩展工具包 建议141: apache扩展包 建议142: 推荐使用joda日期时间扩展包 建议143: 可以选择多种collections扩展

第12章 思想为源 建议144: 提倡良好的代码风格 建议145: 不要完全依靠单元测试来发现问题 建议146: 让注释正确、清晰、简洁 建议147: 让接口的职责保持单一 建议148: 增强类的可替换性 建议149: 依赖抽象而不是实现 建议150: 抛弃7条不良的编码习惯 建议151: 以技术员自律而不是工人

亚马逊链接

基本信息

名称: 深入剖析Tomcat
作者信息: 作者: 克尼亚万 (Bubi Kurniawan) [ 中文 pdf ]

简单介绍

《深入剖析Tomcat》编辑推荐:深入理解Tomcat的必读之作,欲知其然,更欲知其所以然。《深入剖析Tomcat》以Tomcat 4和Tomcat 5两个版本为基础,从建立一个最简单的连接开始,深入介绍Tomcat的体系结构。从连接器到最终的JMX管理,循序渐进,层层深入。每一章有配有相关代码,既是对理论内容的具体展现,也可以帮助读者编写一个实用的应用服务器。在内容上,《深入剖析Tomcat》更关注对Tomcat基本体系结构的讲解,并没有涉及在实际应用中的具体实现细节。希望读者在阅读的时候,着重把握Torrical的一些设计思想,在此基础上,再针对某一方面进行深入的学习和研究。《深入剖析Tomcat》深入剖析Tomcat 4和Tomcat 5中的每个组件,并揭示其内部工作原理。通过学习《深入剖析Tomcat》,你不仅可以自行开发Tomcat组件,而且可以扩展已有的组件。《深入剖析Tomcat》主要内容:如何开发Java Web服器。Tomcat是否会为每个servlet类创建多个实例。Tomcat如何运行一个实现Simple Thread Model接El的servlet类。servlet容器的两个主要模块:连接器和servlet容器。如何构建或者扩展已有的连接器。4种servlet容器:Engine、Host、Context和Wrapper。T0mcat如何管理Session,以及如何在分布式环境下扩展Session管理器。Tomcat中的类载入器和如何创建自定义载入器。Tomcat如何实现安全性和基本/基于表单/摘要的身份验证。Tomcat中的领域与登录配置是如何工作的。Tomcat如何处理配制文件(server.xml),以及如何通过Digester库将XML元素转换Java对象。Tomcat中的关闭钩子。JMX、Apache的Commons Modeler和Tomcat中的JMX托管资源。

目录

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
译者序
前言
第1章 一个简单的Web服务器
1.1 HTTP
1.1.1 HTTP请求
1.1.2 HTTP响应
1.2 Socket类
1.3 应用程序
1.3.1 HttpServer类
1.3.2 Request类
1.3.3 Response类
1.3.4 运行应用程序
1.4 小结

第2章 一个简单的servlet容器 2.1 javax.servlet.Servlet接口 2.2 应用程序 2.2.1 HttpServer1类 2.2.2 Request类 2.2.3 Response类 2.2.4 StaticResourceProcessor类 2.2.5 servletProcessor1类 2.2.6 运行应用程序 2.3 应用程序 2.4 小结

第3章 连接器 3.1 StringManager类 3.2 应用程序 3.2.1 启动应用程序 3.2.2 HttpConnector类 3.2.3 创建HttpRequest对象 3.2.4 创建HttpResponse对象 3.2.5 静态资源处理器和servlet处理器 3.2.6 运行应用程序 3.3 小结

第4章 Tomcat的默认连接器 4.1 HTTP1.1 的新特性 4.1.1 持久连接 4.1.2 块编码 4.1.3 状态码100的使用 4.2 Connector接口 4.3 HttpConnector类 4.3.1 创建服务器套接字 4.3.2 维护HttpProcessor实例 4.3.3 提供HTTP请求服务 4.4 HttpProcessor类 4.5 Request对象 4.6 Response对象 4.7 处理请求 4.7.1 解析连接 4.7.2 解析请求 4.7.3 解析请求头 4.8 简单的Container应用程序 4.9 小结

第5章 servlet容器 5.1 Container接口 5.2 管道任务 5.2.1 Pipeline接口 5.2.2 Valve接口 5.2.3 ValveContext接口 5.2.4 Contained接口 5.3 Wrapper接口 5.4 Context接口 5.5 Wrapper应用程序 5.5.1 ex05.pyrmont.core.SimpleLoader类 5.5.2 ex05.pyrmont.core.SimplePipeline类 5.5.3 ex05.pyrmont.core.SimpleWrapper类 5.5.4 ex05.pyrmont.core.SimpleWrapperValve类 5.5.5 ex05.pyrmont.valves.ClientIPLoggerValve类 5.5.6 ex05.pyrmont.valves.HeaderLoggerValve类 5.5.7 ex05.pyrmont.startup.Bootstrap 5.5.8 运行应用程序 5.6 Context应用程序 5.6.1 ex05.pyrmont.core.SimpleContextValve类 5.6.2 ex05.pyrmont.core.SimpleContextMapper类 5.6.3 ex05.pyrmont.core.SimpleContext类 5.6.4 ex05.pyrmont.startup.Bootstrap 5.6.5 运行应用程序 5.7 小结

第6章 生命周期 6.1 Lifecycle接口 6.2 LifecycleEvent类 6.3 LifecycleListener接口 6.4 LifecycleSupport类 6.5 应用程序 6.5.1 ex06.pyrmont.core.SimpleContext类 6.5.2 ex06.pyrmont.core.SimpleContextLifecycleListener类 6.5.3 ex06.pyrmont.core.SimpleLoader类 6.5.4 ex06.pyrmont.core.SimplePipeline类 6.5.5 ex06.pyrmont.core.SimpleWrapper类 6.5.6 运行应用程序 6.6 小结

第7章 日志记录器 7.1 Logger接口 7.2 Tomcat的日志记录器 7.2.1 LoggerBase类 7.2.2 SystemOutLogger类 7.2.3 SystemErrLogger类 7.2.4 FileLogger类 7.3 应用程序 7.4 小结

第8章 载入器 8.1 Java的类载入器 8.2 Loader接口 8.3 Reloader接口 8.4 WebappLoader类 8.4.1 创建类载入器 8.4.2 设置仓库 8.4.3 设置类路径 8.4.4 设置访问权限 8.4.5 开启新线程执行类的重新载入 8.5 WebappClassLoader类 8.5.1 类缓存 8.5.2 载入类 8.5.3 应用程序 8.6 运行应用程序 8.7 小结

第9章 Session管理 9.1 Session对象 9.1.1 Session接口 9.1.2 StandardSession类 9.1.3 StandardSessionFacade类 9.2 Manager 9.2.1 Manager接口 9.2.2 ManagerBase类 9.2.3 StandardManager类 9.2.4 PersistentManagerBase类 9.2.5 PersistentManager类 9.2.6 DistributedManager类 9.3 存储器 9.3.1 StoreBase类 9.3.2 FileStore类 9.3.3 JDBCStore类 9.4 应用程序 9.4.1 Bootstrap类 9.4.2 SimpleWrapperValve类 9.4.3 运行应用程序 9.5 小结

第10章 安全性 10.1 领域 10.2 GenericPrincipal类 10.3 LoginConfig类 10.4 Authenticator接口 10.5 安装验证器阀 10.6 应用程序 10.6.1 ex10.pyrmont.core.SimpleContextConfig类 10.6.2 ex10.pyrmont.realm.SimpleRealm类 10.6.3 ex10.pyrmont.realm.SimpleUserDatabaseRealm 10.6.4 ex10.pyrmont.startup.Bootstrap1类 10.6.5 ex10.pyrmont.startup.Bootstrap2类 10.6.6 运行应用程序 10.7 小结

第11章 StandardWrapper 11.1 方法调用序列 11.2 SingleThreadModel 11.3 StandardWrapper 11.3.1 分配servlet实例 11.3.2 载入servlet类 11.3.3 ServletConfig对象 11.3.4 servlet容器的父子关系 11.4 StandardWrapperFacade类 11.5 StandardWrapperValve类 11.6 FilterDef类 11.7 ApplicationFilterConfig类 11.8 ApplicationFilterChain类 11.9 应用程序 11.1 0小结

第12章 StandardContext类 12.1 StandardContext的配置 12.1.1 StandardContext类的构造函数 12.1.2 启动StandardContext实例 12.1.3 invoke()方法 12.2 StandardContextMapper类 12.3 对重载的支持 12.4 backgroundProcess()方法 12.5 小结

第13章 Host和Engine 13.1 Host接口 13.2 StandardHost类 13.3 StandardHostMapper类 13.4 StandardHostValve类 13.5 为什么必须要有一个Host容器 13.6 应用程序1 13.7 Engine接口 13.8 StandardEngine类 13.9 StandardEngineValve类 13.1 0应用程序2 13.1 1小结

第14章 服务器组件和服务组件 14.1 服务器组件 14.2 StandardServer类 14.2.1 initialize()方法 14.2.2 start()方法 14.2.3 stop()方法 14.2.4 await()方法 14.3 Service接口 14.4 StandardService类 14.4.1 connector和container 14.4.2 与生命周期有关的方法 14.5 应用程序 14.5.1 Bootstrap类 14.5.2 Stopper类 14.5.3 运行应用程序 14.6 小结

第15章 Digester库 15.1 Digester库 15.1.1 Digester类 15.1.2 Digester库示例1 15.1.3 Digester库示例2 15.1.4 Rule类 15.1.5 Digester库示例3:使用Rule Set 15.2 Context Config类 15.2.1 default Config()方法 15.2.2 application Config()方法 15.2.3 创建Web Digester 15.3 应用程序 15.4 小结

第16章 关闭钩子 16.1 关闭钩子的例子 16.2 Tomcat中的关闭钩子 16.3 小结

第17章 启动Tomcat 17.1 Catalina类 17.1.1 start()方法 17.1.2 stop()方法 17.1.3 启动Digester对象 17.1.4 关闭Digester对象 17.2 Bootstrap类 17.3 在Windows平台上运行Tomcat 17.3.1 如何编写批处理文件 17.3.2 catalina.bat批处理文件 17.3.3 在Windows平台上启动Tomcat 17.3.4 在Windows平台上关闭Tomcat 17.4 在Linux平台上运行Tomcat 17.4.1 如何编写UNIX/Linux Shell脚本 17.4.2 catalina.sh脚本 17.4.3 在UNIX/Linux平台上启动Tomcat 17.4.4 在UNIX/Linux平台上关闭Tomcat 17.5 小结

第18章 部署器 18.1 部署一个Web应用程序 18.1.1 部署一个描述符 18.1.2 部署一个WAR文件 18.1.3 部署一个目录 18.1.4 动态部署 18.2 Deploy接口 18.3 Standard Host Deployer类 18.3.1 安装一个描述符 18.3.2 安装一个WAR文件或目录 18.3.3 启动Context实例 18.3.4 停止一个Context实例 18.4 小结

第19章 Manager应用程序的servlet类 19.1 使用Manager应用程序 19.2 Containerservlet接口 19.3 初始化Manager Servlet 19.4 列出已经部署的Web应用程序 19.5 启动Web应用程序 19.6 关闭Web应用程序 19.7 小结

第20章 基于JMX的管理 20.1 JMX简介 20.2 JMXAPI 20.2.1 MBean Server类 20.2.2 ObjectName类 20.3 标准MBean 20.4 模型MBean 20.4.1 MBeanInfo接口与ModelM BeanInfo接口 20.4.2 Model MBean示例 20.5 Commons Modeler库 20.5.1 MBean描述符 20.5.2 mbean元素示例 20.5.3 自己编写一个模型MBean类 20.5.4 Registry类 20.5.5 Managed Bean 20.5.6 BaseModel MBean 20.5.7 使用Modeler库API 20.6 Catalian中的MBean 20.6.1 ClassName MBean类 20.6.2 StandardServer MBean类 20.6.3 MBeanFactory类 20.6.4 MBeanUtil 20.7 创建Catalina的MBean 20.8 应用程序 20.9 小结

亚马逊链接

基本信息

名称: Java并发编程实战
作者信息: 作者: 盖茨 (Brian Goetz) [ 英文 pdf ]

简单介绍

《Java并发编程实战》第16届Jolt大奖提名图书,JavaOne大会最畅销图书,了解Java并发编程必读佳作。线程是Java平台的基础组成部分之一。随着多核处理器逐渐成为主流,如何高效地使用并发已成为构建高性能应用程序的重要因素。Java SE 5和Java 6在并发程序开发方面取得了巨大的进步,在其Java虚拟机中能支持一些高性能的并且具有高可伸缩性的并发类,此外还支持一组新的并发基础构建模块。在《Java并发编程实战》中,这些新功能的编写者们不仅介绍了它们的工作原理和使用方式,还介绍了隐藏在这些功能背后的研究背景与设计模式。然而,在开发、测试以及调试多线程的程序时仍然存在巨大的困难。开发人员很容易编写出一些看似能正常工作,但在一些情况下仍然会失败的程序(包括在正式发布的产品中,以及在高负载环境中)。《Java并发编程实战》不仅讲解了并发的理论基础,还介绍了各种实际的开发技术,这些知识对于构建可靠的、可伸缩的以及可维护的并发应用程序来说非常有用。《Java并发编程实战》并不仅是简单地罗列出各种并发API以及机制,而是详细地介绍了许多设计原则、设计模式以及思维模式,这些内容使得开发人员更容易构建出正确的并且高性能的并发程序。《Java并发编程实战》主要内容包括:并发性与线程安全性的基本概念,构建以及组合各种线程安全类的技术,使用java.util.concurrent包中的各种井发构建基础模块,性能优化中的注意事项,如何测试并发程序,以及一些高级主题,包括原子变量,无阻塞算法及JAVA内存模。

目录

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
对本书的赞誉
译者序
前 言
第1章 简介
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 线程无处不在
第一部分 基础知识

第2章 线程安全性 2.1 什么是线程安全性 2.2 原子性 2.2.1 竞态条件 2.2.2 示例:延迟初始化中的竞态条件 2.2.3 复合操作 2.3 加锁机制 2.3.1 内置锁 2.3.2 重入 2.4 用锁来保护状态 2.5 活跃性与性能

第3章 对象的共享 3.1 可见性 3.1.1 失效数据 3.1.2 非原子的64位操作 3.1.3 加锁与可见性 3.1.4 Volatile变量 3.2 发布与逸出 3.3 线程封闭 3.3.1 Ad-hoc线程封闭 3.3.2 栈封闭 3.3.3 ThreadLocal类 3.4 不变性 3.4.1 Final域 3.4.2 示例:使用Volatile类型来发布不可变对象 3.5 安全发布 3.5.1 不正确的发布:正确的对象被破坏 3.5.2  不可变对象与初始化安全性 3.5.3 安全发布的常用模式 3.5.4 事实不可变对象 3.5.5 可变对象 3.5.6 安全地共享对象

第4章 对象的组合 4.1 设计线程安全的类 4.1.1 收集同步需求 4.1.2 依赖状态的操作 4.1.3 状态的所有权 4.2 实例封闭 4.2.1 Java监视器模式 4.2.2 示例:车辆追踪 4.3 线程安全性的委托 4.3.1 示例:基于委托的车辆追踪器 4.3.2 独立的状态变量 4.3.3 当委托失效时 4.3.4 发布底层的状态变量 4.3.5 示例:发布状态的车辆追踪器 4.4 在现有的线程安全类中添加功能 4.4.1 客户端加锁机制 4.4.2 组合 4.5 将同步策略文档化

第5章 基础构建模块 5.1 同步容器类 5.1.1 同步容器类的问题 5.1.2 迭代器与Concurrent-Modification Exception 5.1.3 隐藏迭代器 5.2 并发容器 5.2.1 Concurrent Hash Map 5.2.2 额外的原子Map操作 5.2.3 Copy On Write Array List 5.3 阻塞队列和生产者-消费者模式 5.3.1 示例:桌面搜索 5.3.2 串行线程封闭 5.3.3 双端队列与工作密取 5.4 阻塞方法与中断方法 5.5 同步工具类 5.5.1 闭锁 5.5.2 Future Task 5.5.3 信号量 5.5.4 栅栏 5.6 构建高效且可伸缩的结果缓存 第二部分 结构化并发应用程序

第6章 任务执行 6.1 在线程中执行任务 6.1.1 串行地执行任务 6.1.2 显式地为任务创建线程 6.1.3 无限制创建线程的不足 6.2 Executor框架 6.2.1 示例:基于Executor的Web服务器 6.2.2 执行策略 6.2.3 线程池 6.2.4 Executor的生命周期 6.2.5 延迟任务与周期任务 6.3 找出可利用的并行性 6.3.1 示例:串行的页面渲染器 6.3.2 携带结果的任务Callable与Future 6.3.3 示例:使用Future实现页面渲染器 6.3.4 在异构任务并行化中存在的局限 6.3.5 Completion Service:Executor与Blocking Queue 6.3.6 示例:使用Completion Service实现页面渲染器 6.3.7 为任务设置时限 6.3.8 示例:旅行预定门户网站

第7章 取消与关闭 7.1 任务取消 7.1.1 中断 7.1.2 中断策略 7.1.3 响应中断 7.1.4 示例:计时运行 7.1.5 通过Future来实现取消 7.1.6 处理不可中断的阻塞 7.1.7 采用New Task For来封装非标准的取消 7.2 停止基于线程的服务 7.2.1 示例:日志服务 7.2.2 关闭Executor Service 7.2.3 “毒丸”对象 7.2.4 示例:只执行一次的服务 7.2.5 Shutdown Now的局限性 7.3 处理非正常的线程终止 7.4 JVM关闭 7.4.1 关闭钩子 7.4.2 守护线程 7.4.3 终结器

第8章 线程池的使用 8.1 在任务与执行策略之间的隐性耦合 8.1.1 线程饥饿死锁 8.1.2 运行时间较长的任务 8.2 设置线程池的大小 8.3 配置Thread Pool Executor 8.3.1 线程的创建与销毁 8.3.2 管理队列任务 8.3.3 饱和策略 8.3.4 线程工厂 8.3.5 在调用构造函数后再定制Thread Pool Executor 8.4 扩展 Thread Pool Executor 8.5 递归算法的并行化

第9章 图形用户界面应用程序 9.1 为什么GUI是单线程的 9.1.1 串行事件处理 9.1.2 Swing中的线程封闭机制 9.2 短时间的GUI任务 9.3 长时间的GUI任务 9.3.1 取消 9.3.2 进度标识和完成标识 9.3.3 Swing Worker 9.4 共享数据模型 9.4.1 线程安全的数据模型 9.4.2 分解数据模型 9.5 其他形式的单线程子系统 第三部分 活跃性、性能与测试

第10章 避免活跃性危险 10.1 死锁 10.1.1 锁顺序死锁 10.1.2 动态的锁顺序死锁 10.1.3 在协作对象之间发生的死锁 10.1.4 开放调用 10.1.5 资源死锁 10.2 死锁的避免与诊断 10.2.1 支持定时的锁 10.2.2 通过线程转储信息来分析死锁 10.3 其他活跃性危险 10.3.1 饥饿 10.3.2 糟糕的响应性 10.3.3 活锁

第11章 性能与可伸缩性 11.1 对性能的思考 11.1.1 性能与可伸缩性 11.1.2 评估各种性能权衡因素 11.2 Amdahl定律 11.2.1 示例:在各种框架中隐藏的串行部分 11.2.2 Amdahl定律的应用 11.3 线程引入的开销 11.3.1 上下文切换 11.3.2 内存同步 11.3.3 阻塞 11.4 减少锁的竞争 11.4.1 缩小锁的范围(“快进快出”) 11.4.2 减小锁的粒度 11.4.3 锁分段 11.4.4 避免热点域 11.4.5 一些替代独占锁的方法 11.4.6 监测CPU的利用率 11.4.7 向对象池说“不” 11.5 示例:比较Map的性能 11.6 减少上下文切换的开销

第12章 并发程序的测试 12.1 正确性测试 12.1.1 基本的单元测试 12.1.2 对阻塞操作的测试 12.1.3 安全性测试 12.1.4 资源管理的测试 12.1.5 使用回调 12.1.6 产生更多的交替操作 12.2 性能测试 12.2.1 在PutTakeTest中增加计时功能 12.2.2 多种算法的比较 12.2.3 响应性衡量 12.3 避免性能测试的陷阱 12.3.1 垃圾回收 12.3.2 动态编译 12.3.3 对代码路径的不真实采样 12.3.4 不真实的竞争程度 12.3.5 无用代码的消除 12.4 其他的测试方法 12.4.1 代码审查 12.4.2 静态分析工具 12.4.3 面向方面的测试技术 12.4.4 分析与监测工具 第四部分 高级主题

第13章 显式锁 13.1 Lock与 Reentrant Lock 13.1.1 轮询锁与定时锁 13.1.2 可中断的锁获取操作 13.1.3 非块结构的加锁 13.2 性能考虑因素 13.3 公平性 13.4 在synchronized和Reentrant Lock之间进行选择 13.5 读-写锁

第14章 构建自定义的同步工具 14.1 状态依赖性的管理 14.1.1 示例:将前提条件的失败传递给调用者 14.1.2 示例:通过轮询与休眠来实现简单的阻塞 14.1.3 条件队列 14.2 使用条件队列 14.2.1 条件谓词 14.2.2 过早唤醒 14.2.3 丢失的信号 14.2.4 通知 14.2.5 示例:阀门类 14.2.6 子类的安全问题 14.2.7 封装条件队列 14.2.8 入口协议与出口协议 14.3 显式的Condition对象 14.4 Synchronizer剖析 14.5 Abstract Queued Synchronizer 14.6 java.util.concurrent同步器类中的 AQS 14.6.1 ReentrantLock 14.6.2 Semaphore与CountDownLatch 14.6.3 FutureTask 14.6.4 ReentrantReadWriteLock

第15章 原子变量与非阻塞同步机制 15.1 锁的劣势 15.2 硬件对并发的支持 15.2.1 比较并交换 15.2.2 非阻塞的计数器 15.2.3 JVM对CAS的支持 15.3 原子变量类 15.3.1 原子变量是一种“更好的volatile” 15.3.2 性能比较:锁与原子变量 15.4 非阻塞算法 15.4.1 非阻塞的栈 15.4.2 非阻塞的链表 15.4.3 原子的域更新器 15.4.4 ABA问题

第16章 Java内存模型 16.1 什么是内存模型,为什么需要它 16.1.1 平台的内存模型 16.1.2 重排序 16.1.3 Java内存模型简介 16.1.4 借助同步 16.2 发布 16.2.1 不安全的发布 16.2.2 安全的发布 16.2.3 安全初始化模式 16.2.4 双重检查加锁 16.3 初始化过程中的安全性 附录A 并发性标注 参考文献

亚马逊链接