0%

基本信息

名称: 趣学Python编程
作者信息: 作者: Jason Briggs [ 英文 pdf ]

简单介绍

Python是一种强大并通俗易懂的编程语言,而且它易学又好用!但是关于学习Python语言的书大多很枯燥无趣,读起来没什么乐趣。本书把你带入一个鲜活的Python编程世界。作者Jason R. Briggs将带领你用独特的(往往很好玩的)示例程序带你学习基础知识。每章后面都配有编程练习来帮助训练思维并加强理解。在本书的最后部分,你将编写两个完整的游戏:一个经典弹球游戏的复制品,以及一个能在平台上跳跃、有动画及更多效果的《火柴人逃生》游戏。当你完成这个编程之旅后,你将学到:● 使用列表、元组和字典等基本数据结构;● 用函数和模块来组织以并重用代码;● 使用循环和条件语句等控制结构;● 用Python 的海龟模块来画形状和图案;● 用tkinter 来创建游戏、动画以及其他画面效果。为什么这本书也能给读者带来乐趣?因为本书是你进入神奇的计算机编程世界的门票。

目录

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

第1部分 学习编程

第1章 Python不是大蟒蛇 3 1.1 关于计算机语言 3 1.2 安装Python 4 1.2.1 在Windows 7上安装Python 4 1.2.2 在苹果OS X上安装Python 6 1.2.3 在Ubuntu上安装Python 8 1.3 当你安装好Python以后 9 1.4 保存Python程序 10 1.5 你学到了什么 12

第2章 计算与变量 13 2.1 用Python来做计算 13 2.1.1 Python的运算符 14 2.1.2 运算的顺序 15 2.2 变量就像是标签 16 2.3 使用变量 17 2.4 你学到了什么 20

第3章 字符串、列表、元组和字典 21 3.1 字符串 21 3.1.1 创建字符串 21 3.1.2 处理字符串相关的问题 23 3.1.3 在字符串里嵌入值 25 3.1.4 字符串乘法 26 3.2 列表比字符串还强大 27 3.2.1 添加元素到列表 29 3.2.2 从列表中删除元素 30 3.2.3 列表上的算术 31 3.3 元组 32 3.4 Python里的map不是用来指路的 33 3.5 你学到了什么 35 3.6 编程小测验 36

第4章 用海龟画图 37 4.1 使用Python的turtle(海龟)模块 37 4.1.1 创建画布 38 4.1.2 移动海龟 39 4.2 你学到了什么 43 4.3 编程小测验 43

第5章 用if和else来提问 45 5.1 if语句 45 5.2 语句块就是一组程序语句 45 5.3 条件语句帮助我们做比较 48 5.4 if-then-else语句 49 5.5 if和elif语句 50 5.6 组合条件 51 5.7 没有值的变量——None 52 5.8 字符串与数字之间的不同 52 5.9 你学到了什么 55 5.10 编程小测验 55

第6章 循环 57 6.1 使用for循环 57 6.2 还有一种叫while的循环 64 6.3 你学到了什么 67 6.4 编程小测验 67

第7章 使用函数和模块来重用你的代码 69 7.1 使用函数 69 7.1.1 函数的组成部分 70 7.1.2 变量和作用域 71 7.2 使用模块 73 7.3 你学到了什么 75 7.4 编程小测验 76

第8章 如何使用类和对象 78 8.1 把事物拆分成类 78 8.1.1 父母与孩子 79 8.1.2 增加属于类的对象 80 8.1.3 定义类中的函数 81 8.1.4 用函数来表示类的特征 81 8.1.5 为什么使要用类和对象 82 8.1.6 画图中的对象与类 84 8.2 对象和类的另一些实用功能 86 8.2.1 函数继承 87 8.2.2 从函数里调用其他函数 88 8.3 初始化对象 89 8.4 你学到了什么 90 8.5 编程小测验 90

第9章 Python的内建函数 92 9.1 使用内建函数 92 9.1.1 abs函数 92 9.1.2 bool函数 93 9.1.3 dir函数 94 9.1.4 eval函数 96 9.1.5 exec函数 97 9.1.6 float函数 98 9.1.7 int函数 98 9.1.8 len函数 99 9.1.9 max和min函数 100 9.1.10 range函数 101 9.1.11 sum函数 102 9.2 使用文件 103 9.2.1 创建测试文件 103 9.2.2 在Python中打开文件 106 9.2.3 写入到文件 107 9.3 你学到了什么 108 9.4 编程小测验 108

第10章 常用的Python模块 109 10.1 使用copy模块来复制 109 10.2 keyword模块记录了所有的关键字 112 10.3 用random模块获得随机数 112 10.3.1 用randint来随机挑选一个数字 112 10.3.2 用choice从列表中随机选取一个元素 114 10.3.3 用shuffle来给列表洗牌 115 10.4 用sys模块来控制Shell程序 115 10.4.1 用exit函数来退出Shell程序 115 10.4.2 从stdin对象读取 115 10.4.3 用stdout对象来写入 116 10.4.4 我用的Python是什么版本的 116 10.5用time模块来得到时间 117 10.5.1 用asctime来转换日期 118 10.5.2 用localtime来得到日期和时间 119 10.5.3 用sleep来休息一会儿吧 120 10.6 用pickle模块来保存信息 120 10.7 你学到了什么 122 10.8 编程小测验 122

第11章 高级海龟作图 124 11.1 从基本的正方形开始 124 11.2 画星星 125 11.3 画汽车 128 11.4 填色 130 11.4.1 用来画填色圆形的函数 131 11.4.2 使用纯白和纯黑 132 11.5 画方形的函数 133 11.6 画填色正方形 134 11.7 画填好色的星星 135 11.8 你学到了什么 137 11.9 编程小测验 137

第12章 用tkinter画高级图形 139 12.1 创造一个可以点的按钮 140 12.2 使用具名参数 142 12.3 创建一个画图用的画布 142 12.4 画线 143 12.5 画盒子 144 12.5.1 画许多矩形 146 12.5.2 设置颜色 148 12.6 画圆弧 151 12.7 画多边形 153 12.8 显示文字 154 12.9 显示图片 155 12.10 创建基本的动画 157 12.11 让对象对操作有反应 159 12.12 更多使用ID的方法 161 12.13 你学到了什么 163 12.14 编程小测验 163

第2部分 弹球实例

第13章 你的第一个游戏:弹球 167 13.1 击打反弹球 167 13.2 创建游戏的画布 168 13.3 创建Ball类 169 13.4 增加几个动作 171 13.4.1 让小球移动 171 13.4.2 让小球来回反弹 172 13.4.3 改变小球的起始方向 174 13.5 你学到了什么 176

第14章 完成你的第一个游戏:反弹吧,小球! 177 14.1 加上球拍 177 14.2 让球拍移动 179 判断小球是否击中球拍 180 14.3 增加输赢因素 183 14.4 你学到了什么 187 14.5 编程小测验 187

第3部分 火柴人实例

第15章 火柴小人游戏的图形 191 15.1 火柴小人游戏计划 191 15.2 得到GIMP 192 15.3 创建游戏中的元素 193 15.3.1 准备一个有透明背景的图形 194 15.3.2 画火柴人 195 15.3.3 画平台 197 15.3.4 画门 197 15.3.5 画背景 198 15.3.6 透明 199 15.4 你学到了什么 200

第16章 开发火柴人游戏 201 16.1 创建Game类 201 16.1.1 设置窗口标题以及创建画布 201 16.1.2 完成init函数 202 16.1.3 创建主循环函数 203 16.2 创建坐标类 205 16.3 冲突检测 205 16.3.1 精灵在水平方向上冲突 206 16.3.2 精灵在垂直方向上冲突 208 16.3.3 把它们放在一起:最终的冲突检测代码 208 16.4 创建精灵类 210 16.5 添加平台类 211 16.5.1 加入平台对象 212 16.5.2 添加很多平台 213 16.6 你学到了什么 215 16.7 编程小测验 215

第17章 创建火柴人 217 17.1 初始化火柴人 217 17.1.1 装入火柴人图形 217 17.1.2 设置变量 218 17.1.3 与键盘按键绑定 219 17.2 让火柴人向左转和向右转 220 17.3 让火柴人跳跃 221 17.4 我们都做了什么 221 17.5 你学到了什么 222

第18章 完成火柴人逃生游戏 223 18.1 让火柴人动起来 223 18.1.1 创建动画函数 223 18.1.2 得到火柴人的位置 226 18.1.3 让火柴人移动 227 18.2 测试我们的火柴人精灵 235 18.3 门 235 18.3.1 创建DoorSprite类 236 18.3.2 门的检测 237 18.3.3 加入门对象 237 18.4 最终的游戏 238 18.5 你学到了什么 244 18.6 编程小测验 245

结束语 接下来学什么 246 附录 Python的关键字 253 术语表 265

亚马逊链接

基本信息

名称: Mahout实战
作者信息: 作者: Sean Owen Robin Anil Ted Dunning Ellen Friedman [ 英文 pdf ]

简单介绍

Apache基金会官方推荐Mahout核心团队权威力作大数据时代机器学习的实战经典

目录

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

第1章 初识Mahout 1 1.1 Mahout的故事 1 1.2 Mahout的机器学习主题 2 1.2.1 推荐引擎 2 1.2.2 聚类 3 1.2.3 分类 4 1.3 利用Mahout和Hadoop处理大规模数据 4 1.4 安装Mahout 6 1.4.1 Java和IDE 6 1.4.2 安装Maven 7 1.4.3 安装Mahout 7 1.4.4 安装Hadoop 8 1.5 小结 8

第一部分 推荐

第2章 推荐系统 10 2.1 推荐的定义 10 2.2 运行第一个推荐引擎 11 2.2.1 创建输入 11 2.2.2 创建一个推荐程序 13 2.2.3 分析输出 14 2.3 评估一个推荐程序 14 2.3.1 训练数据与评分 15 2.3.2 运行RecommenderEvaluator 15 2.3.3 评估结果 16 2.4 评估查准率与查全率 17 2.4.1 运行RecommenderIRStats-Evaluator 17 2.4.2 查准率和查全率的问题 19 2.5 评估GroupLens数据集 19 2.5.1 提取推荐程序的输入 19 2.5.2 体验其他推荐程序 20 2.6 小结 20

第3章 推荐数据的表示 21 3.1 偏好数据的表示 21 3.1.1 Preference对象 21 3.1.2 PreferenceArray及其实现 22 3.1.3 改善聚合的性能 23 3.1.4 FastByIDMap和FastIDSet 23 3.2 内存级DataModel 24 3.2.1 GenericDataModel 24 3.2.2 基于文件的数据 25 3.2.3 可刷新组件 25 3.2.4 更新文件 26 3.2.5 基于数据库的数据 26 3.2.6 JDBC和MySQL 27 3.2.7 通过JNDI进行配置 27 3.2.8 利用程序进行配置 28 3.3 无偏好值的处理 29 3.3.1 何时忽略值 29 3.3.2 无偏好值时的内存级表示 30 3.3.3 选择兼容的实现 31 3.4 小结 33

第4章 进行推荐 34 4.1 理解基于用户的推荐 34 4.1.1 推荐何时会出错 34 4.1.2 推荐何时是正确的 35 4.2 探索基于用户的推荐程序 36 4.2.1 算法 36 4.2.2 基于GenericUserBased-Recommender实现算法 36 4.2.3 尝试GroupLens数据集 37 4.2.4 探究用户邻域 38 4.2.5 固定大小的邻域 39 4.2.6 基于阈值的邻域 39 4.3 探索相似性度量 40 4.3.1 基于皮尔逊相关系数的相似度 40 4.3.2 皮尔逊相关系数存在的问题 42 4.3.3 引入权重 42 4.3.4 基于欧氏距离定义相似度 43 4.3.5 采用余弦相似性度量 43 4.3.6 采用斯皮尔曼相关系数基于相对排名定义相似度 44 4.3.7 忽略偏好值基于谷本系数计算相似度 45 4.3.8 基于对数似然比更好地计算相似度 46 4.3.9 推测偏好值 47 4.4 基于物品的推荐 47 4.4.1 算法 48 4.4.2 探究基于物品的推荐程序 49 4.5 Slope-one推荐算法 50 4.5.1 算法 50 4.5.2 Slope-one实践 51 4.5.3 DiffStorage和内存考虑 52 4.5.4 离线计算量的分配 53 4.6 最新以及试验性质的推荐算法 53 4.6.1 基于奇异值分解的推荐算法 53 4.6.2 基于线性插值物品的推荐算法 54 4.6.3 基于聚类的推荐算法 55 4.7 对比其他推荐算法 56 4.7.1 为Mahout引入基于内容的技术 56 4.7.2 深入理解基于内容的推荐算法 57 4.8 对比基于模型的推荐算法 57 4.9 小结 57

第5章 让推荐程序实用化 59 5.1 分析来自约会网站的样本数据 59 5.2 找到一个有效的推荐程序 61 5.2.1 基于用户的推荐程序 61 5.2.2 基于物品的推荐程序 62 5.2.3 slope-one推荐程序 63 5.2.4 评估查准率和查全率 63 5.2.5 评估性能 64 5.3 引入特定域的信息 65 5.3.1 采用一个定制的物品相似性度量 65 5.3.2 基于内容进行推荐 66 5.3.3 利用IDRescorer修改推荐结果 66 5.3.4 在IDRescorer中引入性别 67 5.3.5 封装一个定制的推荐程序 69 5.4 为匿名用户做推荐 71 5.4.1 利用PlusAnonymousUser-DataModel处理临时用户 71 5.4.2 聚合匿名用户 73 5.5 创建一个支持Web访问的推荐程序 73 5.5.1 封装WAR文件 74 5.5.2 测试部署 74 5.6 更新和监控推荐程序 75 5.7 小结 76

第6章 分布式推荐 78 6.1 分析Wikipedia数据集 78 6.1.1 挑战规模 79 6.1.2 分布式计算的优缺点 80 6.2 设计一个基于物品的分布式推荐算法 81 6.2.1 构建共现矩阵 81 6.2.2 计算用户向量 82 6.2.3 生成推荐结果 82 6.2.4 解读结果 83 6.2.5 分布式实现 83 6.3 基于MapReduce实现分布式算法 83 6.3.1 MapReduce简介 84 6.3.2 向MapReduce转换:生成用户向量 84 6.3.3 向MapReduce转换:计算共现关系 85 6.3.4 向MapReduce转换:重新思考矩阵乘 87 6.3.5 向MapReduce转换:通过部分乘积计算矩阵乘 87 6.3.6 向MapReduce转换:形成推荐 90 6.4 在Hadoop上运行MapReduce 91 6.4.1 安装Hadoop 92 6.4.2 在Hadoop上执行推荐 92 6.4.3 配置mapper和reducer 94 6.5 伪分布式推荐程序 94 6.6 深入理解推荐 95 6.6.1 在云上运行程序 95 6.6.2 考虑推荐的非传统用法 97 6.7 小结 97

第二部分 聚类

第7章 聚类介绍 100 7.1 聚类的基本概念 100 7.2 项目相似性度量 102 7.3 Hello World:运行一个简单的聚类示例 103 7.3.1 生成输入数据 103 7.3.2 使用Mahout聚类 104 7.3.3 分析输出结果 107 7.4 探究距离测度 108 7.4.1 欧氏距离测度 108 7.4.2 平方欧氏距离测度 108 7.4.3 曼哈顿距离测度 108 7.4.4 余弦距离测度 109 7.4.5 谷本距离测度 110 7.4.6 加权距离测度 110 7.5 在简单示例上使用各种距离测度 111 7.6 小结 111

第8章 聚类数据的表示 112 8.1 向量可视化 113 8.1.1 将数据转换为向量 113 8.1.2 准备Mahout所用的向量 115 8.2 将文本文档表示为向量 116 8.2.1 使用TF-IDF改进加权 117 8.2.2 通过n-gram搭配词考察单词的依赖性 118 8.3 从文档中生成向量 119 8.4 基于归一化改善向量的质量 123 8.5 小结 124

第9章 Mahout中的聚类算法 125 9.1 k-means聚类 125 9.1.1 关于k-means你需要了解的 126 9.1.2 运行k-means聚类 127 9.1.3 通过canopy聚类寻找最佳k值 134 9.1.4 案例学习:使用k-means对新闻聚类 138 9.2 超越k-means: 聚类技术概览 141 9.2.1 不同类型的聚类问题 141 9.2.2 不同的聚类方法 143 9.3 模糊k-means聚类 145 9.3.1 运行模糊k-means聚类 145 9.3.2 多模糊会过度吗 147 9.3.3 案例学习:用模糊k-means对新闻进行聚类 148 9.4 基于模型的聚类 149 9.4.1 k-means的不足 149 9.4.2 狄利克雷聚类 150 9.4.3 基于模型的聚类示例 151 9.5 用LDA进行话题建模 154 9.5.1 理解LDA 155 9.5.2 对比TF-IDF与LDA 156 9.5.3 LDA参数调优 156 9.5.4 案例学习:寻找新闻文档中的话题 156 9.5.5 话题模型的应用 158 9.6 小结 158

第10章 评估并改善聚类质量 160 10.1 检查聚类输出 160 10.2 分析聚类输出 162 10.2.1 距离测度与特征选择 163 10.2.2 簇间与簇内距离 163 10.2.3 簇的混合与重叠 166 10.3 改善聚类质量 166 10.3.1 改进文档向量生成过程 166 10.3.2 编写自定义距离测度 169 10.4 小结 171

第11章 将聚类用于生产环境 172 11.1 Hadoop下运行聚类算法的快速入门 172 11.1.1 在本地Hadoop集群上运行聚类算法 173 11.1.2 定制Hadoop配置 174 11.2 聚类性能调优 176 11.2.1 在计算密集型操作中避免性能缺陷 176 11.2.2 在I/O密集型操作中避免性能缺陷 178 11.3 批聚类及在线聚类 178 11.3.1 案例分析:在线新闻聚类 179 11.3.2 案例分析:对维基百科文章聚类 180 11.4 小结 181

第12章 聚类的实际应用 182 12.1 发现Twitter上的相似用户 182 12.1.1 数据预处理及特征加权 183 12.1.2 避免特征选择中的常见陷阱 184 12.2 为Last.fm上的艺术家推荐标签 187 12.2.1 利用共现信息进行标签推荐 187 12.2.2 构建Last.fm艺术家词典 188 12.2.3 将Last.fm标签转换成以艺术家为特征的向量 190 12.2.4 在Last.fm数据上运行k-means算法 191 12.3 分析Stack Overflow数据集 193 12.3.1 解析Stack Overflow数据集 193 12.3.2 在Stack Overflow中发现聚类问题 193 12.4 小结 194

第三部分 分类

第13章 分类 198 13.1 为什么用Mahout做分类 198 13.2 分类系统基础 199 13.2.1 分类、推荐和聚类的区别 201 13.2.2 分类的应用 201 13.3 分类的工作原理 202 13.3.1 模型 203 13.3.2 训练、测试与生产 203 13.3.3 预测变量与目标变量 204 13.3.4 记录、字段和值 205 13.3.5 预测变量值的4种类型 205 13.3.6 有监督学习与无监督学习 207 13.4 典型分类项目的工作流 207 13.4.1 第一阶段工作流:训练分类模型 208 13.4.2 第二阶段工作流:评估分类模型 212 13.4.3 第三阶段工作流:在生产中使用模型 212 13.5 循序渐进的简单分类示例 213 13.5.1 数据和挑战 213 13.5.2 训练一个模型来寻找颜色填充:初步设想 214 13.5.3 选择一个学习算法来训练模型 215 13.5.4 改进填充颜色分类器的性能 217 13.6 小结 221

第14章 训练分类器 222 14.1 提取特征以构建分类器 222 14.2 原始数据的预处理 224 14.2.1 原始数据的转换 224 14.2.2 一个计算营销的例子 225 14.3 将可分类数据转换为向量 226 14.3.1 用向量表示数据 226 14.3.2 用Mahout API做特征散列 228 14.4 用SGD对20 Newsgroups数据集进行分类 231 14.4.1 开始:数据集预览 231 14.4.2 20 Newsgroups数据特征的解析和词条化 234 14.4.3 20 Newsgroups数据的训练代码 234 14.5 选择训练分类器的算法 238 14.5.1 非并行但仍很强大的算法:SGD和SVM 239 14.5.2 朴素分类器的力量:朴素贝叶斯及补充朴素贝叶斯 239 14.5.3 精密结构的力量:随机森林算法 240 14.6 用朴素贝叶斯对20 Newsgroups数据分类 241 14.6.1 开始:为朴素贝叶斯提取数据 241 14.6.2 训练朴素贝叶斯分类器 242 14.6.3  测试朴素贝叶斯模型 242 14.7 小结 244

第15章 分类器评估及调优 245 15.1 Mahout中的分类器评估 245 15.1.1 获取即时反馈 246 15.1.2 确定分类“好”的含义 246 15.1.3 认识不同的错误代价 247 15.2 分类器评估API 247 15.2.1 计算AUC 248 15.2.2 计算混淆矩阵和熵矩阵 250 15.2.3 计算平均对数似然 252 15.2.4 模型剖析 253 15.2.5 20 Newsgroups语料上SGD分类器的性能指标计算 254 15.3 分类器性能下降时的处理 257 15.3.1 目标泄漏 258 15.3.2 特征提取崩溃 260 15.4 分类器性能调优 262 15.4.1 问题调整 262 15.4.2 分类器调优 265 15.5 小结 267

第16章 分类器部署 268 16.1 巨型分类系统的部署过程 268 16.1.1 理解问题 269 16.1.2 根据需要优化特征提取过程 269 16.1.3 根据需要优化向量编码 269 16.1.4 部署可扩展的分类器服务 270 16.2 确定规模和速度需求 270 16.2.1 多大才算大 270 16.2.2 在规模和速度之间折中 272 16.3 对大型系统构建训练流水线 273 16.3.1 获取并保留大规模数据 274 16.3.2 非规范化及下采样 275 16.3.3 训练中的陷阱 276 16.3.4 快速读取数据并对其进行编码 278 16.4 集成Mahout分类器 282 16.4.1 提前计划:集成中的关键问题 283 16.4.2 模型序列化 287 16.5 案例:一个基于Thrift的分类服务器 288 16.5.1 运行分类服务器 292 16.5.2 访问分类器服务 294 16.6 小结 296

第17章 案例分析——Shop It To Me 297 17.1 Shop It To Me选择Mahout的原因 297 17.1.1 Shop It To Me公司简介 298 17.1.2 Shop It To Me需要分类系统的原因 298 17.1.3 对Mahout向外扩展 298 17.2 邮件交易系统的一般结构 299 17.3 训练模型 301 17.3.1 定义分类项目的目标 301 17.3.2 按时间划分 303 17.3.3 避免目标泄漏 303 17.3.4 调整学习算法 303 17.3.5 特征向量编码 304 17.4 加速分类过程 306 17.4.1 特征向量的线性组合 307 17.4.2 模型得分的线性扩展 308 17.5 小结 310

附录A JVM调优 311 附录B Mahout数学基础 313 附录C 相关资源 318

索引 320

亚马逊链接

基本信息

名称: UNIX环境高级编程(第3版)(英文版)
作者信息: 作者: 史蒂文斯 (W.Richard Stevens) [ 英文 pdf ]

简单介绍

20多年来,严谨的C程序员都是依靠一本书来深入了解驱动UNIX和Linux内核的编程接口的实用知识的,这本书就是W. Richard Stevens所著的《UNIX高级环境编程》。现在,Stevens的同事Steve Rago彻底更新了这本经典著作。新的第3版支持当今领先的系统平台,反映了最新技术进展和最佳实践,并且符合最新的Single UNIX Specification第4版(SUSv4)。
Rago保留了使本书前版成为经典之作的精髓和方法。他在Stevens原著的基础上,从基础的文件、目录和进程讲起,并给诸如信号处理和终端I/O之类的先进技术保留较大的篇幅。他还深入讨论了线程和多线程编程、使用套接字接口驱动进程间通信(IPC)等方面的内容。
这一版涵盖了70多个最新版POSIX.1标准的新增接口,包括POSIX异步I/O、旋转锁、屏障(barrier)和POSIX信号量。此外,这一版删除了许多过时的接口,保留了一些广泛使用的接口。书中几乎所有实例都已经在目前最主流的4个平台上测试过,包括Solaris 10、Mac OS X 10.6.8(Darwin 10.8.0)、FressBSD 8.0、Ubuntu 12.04(基于Linux 3.2内核)。
与前两版一样,读者仍可以通过实例学习,这些实例包括了1万多行可下载的ISO C源代码,书中通过简明但完整的程序阐述了400多个系统调用和函数,清楚地说明它们的用法、参数和返回值。为了使读者能融会贯通,书中还提供了几个贯穿整章的案例,每个案例都根据现在的技术环境进行了全面更新。
本书帮助了几代程序员写出强大、高性能、可靠的代码。第3版根据当今主流系统进行更新,更具实用价值。

目录

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
第1章UNIX基础知识1
1.1引言1
1.2UNIX体系结构1
1.3登录1
1.4文件和目录3
1.5输入和输出6
1.6程序和进程8
1.7出错处理11
1.8用户标识13
1.9信号14
1.10时间值16
1.11系统调用和库函数17
1.12小结18
习题18
第2章UNIX标准及实现20
2.1引言20
2.2UNIX标准化20
2.2.1ISOC20
2.2.2IEEEPOSIX21
2.2.3SingleUNIXSpecification25
2.2.4FIPS26
2.3UNIX系统实现26
2.3.1SVR427
2.3.24.4BSD27
2.3.3FreeBSD28
2.3.4Linux28
2.3.5MacOSX28
2.3.6Solaris28
2.3.7其他UNIX系统29
2.4标准和实现的关系29
2.5限制29
2.5.1ISOC限制30
2.5.2POSIX限制31
2.5.3XSI限制33
2.5.4函数sysconf、pathconf和fpathconf33
2.5.5不确定的运行时限制40
2.6选项43
2.7功能测试宏46
2.8基本系统数据类型47
2.9标准之间的冲突48
2.10小结48
习题48
第3章文件I/O49
3.1引言49
3.2文件描述符49
3.3函数open和openat50
3.4函数creat52
3.5函数close53
3.6函数lseek53
3.7函数read57
3.8函数write57
3.9I/O的效率58
3.10文件共享59
3.11原子操作62
3.12函数dup和dup263
3.13函数sync、fsync和fdatasync65
3.14函数fcntl65
3.15函数ioctl70
3.16/dev/fd71
3.17小结72
习题72
第4章文件和目录74
4.1引言74
4.2函数stat、fstat、fstatat和lstat74
4.3文件类型75
4.4设置用户ID和设置组ID78
4.5文件访问权限79
4.6新文件和目录的所有权80
4.7函数access和faccessat81
4.8函数umask82
4.9函数chmod、fchmod和fchmodat84
4.10粘着位87
4.11函数chown、fchown、fchownat和lchown87
4.12文件长度89
4.13文件截断90
4.14文件系统90
4.15函数link、linkat、unlink、unlinkat和remove93
4.16函数rename和renameat95
4.17符号链接96
4.18创建和读取符号链接99
4.19文件的时间99
4.20函数futimens、utimensat和utimes101
4.21函数mkdir、mkdirat和rmdir103
4.22读目录104
4.23函数chdir、fchdir和getcwd108
4.24设备特殊文件110
4.25文件访问权限位小结112
4.26小结113
习题113
第5章标准I/O库115
5.1引言115
5.2流和FILE对象115
5.3标准输入、标准输出和标准错误116
5.4缓冲116
5.5打开流118
5.6读和写流120
5.7每次一行I/O122
5.8标准I/O的效率123
5.9二进制I/O125
5.10定位流126
5.11格式化I/O127
5.12实现细节131
5.13临时文件134
5.14内存流137
5.15标准I/O的替代软件140
5.16小结140
习题140
第6章系统数据文件和信息142
6.1引言142
6.2口令文件142
6.3阴影口令145
6.4组文件146
6.5附属组ID147
6.6实现区别148
6.7其他数据文件148
6.8登录账户记录149
6.9系统标识150
6.10时间和日期例程151
6.11小结157
习题157
第7章进程环境158
7.1引言158
7.2main函数158
7.3进程终止158
7.4命令行参数162
7.5环境表163
7.6C程序的存储空间布局163
7.7共享库165
7.8存储空间分配165
7.9环境变量168
7.10函数setjmp和longjmp170
7.11函数getrlimit和setrlimit175
7.12小结180
习题180
第8章进程控制181
8.1引言181
8.2进程标识181
8.3函数fork182
8.4函数vfork187
8.5函数exit188
8.6函数wait和waitpid190
8.7函数waitid194
8.8函数wait3和wait4195
8.9竞争条件196
8.10函数exec199
8.11更改用户ID和更改组ID204
8.12解释器文件207
8.13函数system211
8.14进程会计215
8.15用户标识220
8.16进程调度221
8.17进程时间224
8.18小结226
习题226
第9章进程关系228
9.1引言228
9.2终端登录228
9.3网络登录231
9.4进程组233
9.5会话234
9.6控制终端235
9.7函数tcgetpgrp、tcsetpgrp和tcgetsid237
9.8作业控制237
9.9shell执行程序240
9.10孤儿进程组244
9.11FreeBSD实现246
9.12小结248
习题248
第10章信号249
10.1引言249
10.2信号概念249
10.3函数signal256
10.4不可靠的信号259
10.5中断的系统调用260
10.6可重入函数262
10.7SIGCLD语义264
10.8可靠信号术语和语义266
10.9函数kill和raise267
10.10函数alarm和pause268
10.11信号集273
10.12函数sigprocmask275
10.13函数sigpending276
10.14函数sigaction278
10.15函数sigsetjmp和siglongjmp283
10.16函数sigsuspend286
10.17函数abort291
10.18函数system293
10.19函数sleep、nanosleep和clock_nanosleep298
10.20函数sigqueue300
10.21作业控制信号301
10.22信号名和编号303
10.23小结305
习题305
第11章线程307
11.1引言307
11.2线程概念307
11.3线程标识308
11.4线程创建309
11.5线程终止311
11.6线程同步318
11.6.1互斥量320
11.6.2避免死锁322
11.6.3函数pthread_mutex_timedlock327
11.6.4读写锁328
11.6.5带有超时的读写锁332
11.6.6条件变量332
11.6.7自旋锁335
11.6.8屏障336
11.7小结340
习题340
第12章线程控制341
12.1引言341
12.2线程限制341
12.3线程属性342
12.4同步属性345
12.4.1互斥量属性345
12.4.2读写锁属性352
12.4.3条件变量属性353
12.4.4屏障属性353
12.5重入354
12.6线程特定数据358
12.7取消选项361
12.8线程和信号364
12.9线程和fork367
12.10线程和I/O370
12.11小结371
习题371
第13章守护进程372
13.1引言372
13.2守护进程的特征372
13.3编程规则374
13.4出错记录377
13.5单实例守护进程380
13.6守护进程的惯例381
13.7客户进程—服务器进程模型386
13.8小结386
习题387
第14章高级I/O388
14.1引言388
14.2非阻塞I/O388
14.3记录锁391
14.4I/O多路转接403
14.4.1函数select和pselect404
14.4.2函数poll408
14.5异步I/O410
14.5.1SystemV异步I/O410
14.5.2BSD异步I/O411
14.5.3POSIX异步I/O411
14.6函数readv和writev419
14.7函数readn和writen421
14.8存储映射I/O422
14.9小结428
习题428
第15章进程间通信429
15.1 引言429
15.2 管道430
15.3函数popen和pclose436
15.4 协同进程441
15.5 FIFO445
15.6 XSIIPC448
15.6.1标识符和键448
15.6.2权限结构449
15.6.3结构限制450
15.6.4优点和缺点450
15.7 消息队列451
15.8 信号量455
15.9 共享存储459
15.10 POSIX信号量465
15.11 客户进程—服务器进程属性470
15.11小结472
习题472
第16章网络IPC:套接字474
16.1引言474
16.2套接字描述符474
16.3寻址477
16.3.1字节序477
16.3.2地址格式478
16.3.3 地址查询480
16.3.4 将套接字与地址关联486
16.4建立连接487
16.5数据传输491
16.6套接字选项502
16.7带外数据504
16.8非阻塞和异步I/O505
16.9小结506
习题506
第17章高级进程间通信507
17.1 引言507
17.2 UNIX域套接字507
17.3 唯一连接512
17.4 传送文件描述符518
17.5 open服务器进程第1版527
17.6 open服务器进程第2版533
17.7小结542
习题542
第18章终端I/O544
18.1引言544
18.2综述544
18.3特殊输入字符549
18.4获得和设置终端属性553
18.5终端选项标志554
18.6stty命令560
18.7波特率函数560
18.8行控制函数561
18.9终端标识562
18.10规范模式567
18.11非规范模式570
18.12终端窗口大小576
18.13termcap、terminfo和curses578
18.14小结578
习题579
第19章伪终端580
19.1引言580
19.2概述580
19.3打开伪终端设备585
19.4函数pty_fork588
19.5pty程序590
19.6使用pty程序595
19.7高级特性600
19.8小结601
习题601
第20章数据库函数库603
20.1 引言603
20.2 历史603
20.3函数库604
20.4 实现概述605
20.5集中式或非集中式608
20.6并发610
20.7构造函数库610
20.8源代码611
20.9性能635
20.10小结639
习题639
第21章与网络打印机通信640
21.1引言640
21.2网络打印协议640
21.3超文本传输协议HTTP642
21.4打印假脱机技术643
21.5源代码644
21.6小结684
习题684
附录A函数原型685
附录A函数原型附录B其他源代码721
附录C部分习题答案730
附录参考书目730
索引770

亚马逊链接

基本信息

名称: 易学Python
作者信息: 作者: Anthony Briggs [ 英文 pdf ]

简单介绍

Python凭借其迅速和高效的特点虏获了程序员的芳心,Python编程语言的学习也应该具备迅速和高效的特点。《易学Python》正是以这样一种方式,通过让读者自行编写程序来学习Python的基本概念,以及一些高级概念和编程新风格的简单介绍。简单易学 即使读者之前没有写过一行代码,也可以迅速写出真正的Python应用程序。案例优秀 本书每章都有新花样,其中包括游戏、Django Web开发、数据库等。图文并茂 使用大量的卡通插图和平实的写作风格,来引导读者学习Python。

目录

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

第1章 为何学习Python 1 1.1 学习编程 2 1.1.1 告诉计算机做什么 2 1.1.2 编程是创意 4 1.1.3 编程是设计 4 1.2 是什么让Python如此杰出 5 1.2.1 Python简单易学 5 1.2.2 Python是真正的语言 5 1.2.3 Python“开箱即用” 6 1.2.4 Python社区规模庞大 6 1.3 在Windows系统上安装Python 7 1.3.1 安装Python 7 1.3.2 在Windows系统上运行Python程序 9 1.3.3 从命令行运行Python程序 11 1.4 Linux 14 1.4.1 在Linux系统上安装Python 14 1.4.2 Linux GUI 14 1.4.3 Linux命令行 16 1.5 Macintosh 16 1.5.1 更新Shell配置文件 17 1.5.2 设置默认应用程序 17 1.6 排除故障 18 1.6.1 语法错误 18 1.6.2 文件扩展名不对(Windows) 19 1.6.3 Python的安装位置不对(Linux) 19 1.7 文本编辑器和IDE 19 1.8 总结 20

第2章 Hunt the Wumpus 21 2.1 程序是什么 22 2.1.1 在屏幕上显示 23 2.1.2 使用变量存储信息 23 2.1.3 询问玩家想做什么 24 2.1.4 做出决策 24 2.1.5 循环 25 2.1.6 函数 26 2.2 您的第一个程序 27 2.2.1 Hunt the Wumpus的第一个版本 27 2.2.2 调试 29 2.3 捣鼓程序 29 2.3.1 调整洞穴数量 30 2.3.2 更友好的wumpus 30 2.3.3 多个wumpus 30 2.4 创建洞穴 31 2.4.1 列表 31 2.4.2 for循环 33 2.4.3 构造洞穴网络 33 2.5 修复微妙的错误 35 2.5.1 问题 36 2.5.2 解决方案 36 2.5.3 打造连通的洞穴网络 36 2.6 使用函数让代码更整洁 39 2.6.1 函数的基本知识 39 2.6.2 变量作用域 40 2.6.3 共享状态 41 2.7 使用函数组织游戏Hunt the Wumpus 42 2.7.1 与洞穴交互 42 2.7.2 创建洞穴 43 2.7.3 与玩家交互 44 2.7.4 程序的其他部分 45 2.8 弓和箭 47 2.9 进一步美化 49 2.10 接下来如何做 51 2.10.1 蝙蝠和深渊 52 2.10.2 让Wumpus移动 52 2.10.3 不同的洞穴网络 52 2.11 总结 52

第3章 与外部交互 53 3.1 开箱即用:Python库 54 3.1.1 Python标准库 54 3.1.2 其他库 54 3.1.3 使用库 55 3.1.4 库到底是什么 55 3.2 另一种提问方式 58 3.2.1 使用命令行参数 58 3.2.2 使用模块sys 58 3.3 读写文件 59 3.3.1 路径和目录(我的文件在哪里) 59 3.3.2 路径 61 3.3.3 打开文件 61 3.4 比较文件 63 3.4.1 采集文件的指纹 63 3.4.2 将文件的指纹存储到字典中 64 3.5 综合应用 65 3.6 测试程序 68 3.7 改进脚本 70 3.7.1 按顺序排列结果 70 3.7.2 比较目录 72 3.8 接下来如何做 73 3.9 总结 73

第4章 组织有序 74 4.1 规范程序 74 4.2 如何确定程序是正确的 75 4.2.1 手工测试太烦 75 4.2.2 功能测试 76 4.2.3 单元测试:让计算机去做 76 4.2.4 测试驱动的开发 76 4.3 编写程序 77 4.4 整合程序 80 4.4.1 测试用户界面 80 4.4.2 用输入做什么 81 4.4.3 执行命令 82 4.4.4 运行程序 85 4.5 状况评估 85 4.5.1 接下来做什么 86 4.5.2 我既繁忙又重要 88 4.5.3 列表解析 89 4.5.4 发现bug 92 4.6 存储待办事项清单 95 4.7 编辑和删除 98 4.7.1 修复一个小问题 99 4.7.2 删除待办事项 101 4.7.3 编辑待办事项 103 4.8 接下来如何做 106 4.8.1 帮助命令 106 4.8.2 撤销 106 4.8.3 不同的界面 107 4.8.4 时间管理和估算 107 4.8.5 研究一个单元测试框架 107 4.9 总结 107

第5章 面向业务的编程 109 5.1 让程序相互交流 110 5.1.1 CSV来救场 110 5.1.2 其他格式 111 5.2 准备工作 112 5.2.1 安装Beautiful Soup 112 5.2.2 安装Firefox和Firebug 113 5.2.3 查看网页 113 5.3 使用Python下载网页 115 5.3.1 提取想要的数据 116 5.3.2 进一步提取数据 117 5.3.3 网页抓取的注意事项 119 5.4 写入CSV文件 119 5.5 通过电子邮件发送CSV文件 121 5.5.1 电子邮件的结构 121 5.5.2 创建电子邮件 122 5.5.3 发送电子邮件 123 5.5.4 其他电子邮件模块 124 5.6 一个简单脚本——哪些地方可能出问题 125 5.6.1 未连接到网络 126 5.6.2 数据无效 126 5.6.3 数据出乎意料 126 5.6.4 无法写入数据 126 5.6.5 无法访问邮件服务器 126 5.6.6 您不必修复这些问题 127 5.7 如何处理有问题的脚本 127 5.7.1 交流 127 5.7.2 对故障的承受力 127 5.7.3 一开始就做好 128 5.7.4 失败要赶早,还要大张旗鼓 128 5.7.5 双保险 128 5.7.6 压力测试和性能测试 129 5.7.7 以后再试 129 5.8 异常 131 5.8.1 为何使用异常 131 5.8.2 程序崩溃是什么意思 131 5.8.3 捕获异常 134 5.8.4 模块traceback 135 5.9 接下来如何做 136 5.10 总结 136

第6章 类与面向对象编程 137 6.1 类是什么 137 6.1.1 类包含数据 138 6.1.2 类是类型 138 6.1.3 类的工作原理 138 6.1.4 您的第一个类 138 6.2 面向对象设计 140 6.3 玩家输入 143 6.4 财宝 146 6.4.1 方法该放在什么地方 146 6.4.2 寻宝 147 6.4.3 捡宝 148 6.5 在洞穴迷宫中漫步 151 6.6 怪物出没 156 6.6.1 创建怪物 156 6.6.2 一些面向对象的技巧 157 6.6.3 组合起来 158 6.7 危险与刺激 161 6.8 接下来如何做 163 6.8.1 增加怪物和财宝 164 6.8.2 扩展格斗方式和物品 164 6.8.3 添加更多冒险元素 164 6.8.4 尝试动词和名词 164 6.8.5 研究类的高级功能 164 6.9 总结 164

第7章 高级技术 166 7.1 面向对象 166 7.1.1 混合类 166 7.1.2 super()及注意事项 169 7.2 定制类 169 7.2.1 getattr 170 7.2.2 setattr 170 7.2.3 getattribute 172 7.2.4 特性(property) 173 7.2.5 模拟其他类型 175 7.3 生成器和迭代器 177 7.3.1 迭代器 177 7.3.2 生成器 179 7.3.3 生成器表达式 180 7.4 使用迭代器 180 7.4.1 读文件 181 7.4.2 处理日志行 183 7.4.3 提取字段 184 7.5 函数式编程 188 7.5.1 副作用 188 7.5.2 map和filter 188 7.5.3 传递和返回函数 189 7.6 接下来如何做 191 7.7 总结 191

第8章 Django 192 8.1 使用Django编写Web应用 193 8.1.1 安装Django 193 8.1.2 设置Django 193 8.2 编写应用 197 8.2.1 最简单的待办事项清单 197 8.2.2 使用模板 198 8.3 使用模型 201 8.3.1 设置数据库 201 8.3.2 创建模型 201 8.3.3 Django模块admin 203 8.3.4 添加管理界面 204 8.4 使用数据 206 8.4.1 使用模型 206 8.4.2 设计URL 208 8.4.3 提交表单 210 8.4.4 处理待办事项 213 8.5 最后的优化 216 8.6 接下来如何做 217 8.7 总结 217

第9章 使用Pyglet开发游戏 218 9.1 安装Pyglet 218 9.2 起步 220 9.3 简单的宇宙飞船 222 9.3.1 让事情发生 224 9.3.2 回到学校:牛顿第一定律及矢量 226 9.4 引力 229 9.4.1 计算引力 229 9.4.2 小心行星 232 9.5 不能缺了枪炮 234 9.6 邪恶的外星人 237 9.7 接下来如何做 242 9.7.1 添加新元素 242 9.7.2 改成别的类型 242 9.7.3 重构 243 9.7.4 获取反馈 243 9.8 总结 243

第10章 Twisted网络编程 244 10.1 安装Twisted 244 10.2 第一个应用程序 245 10.3 MUD初步 249 10.4 让游戏更有趣 254 10.4.1 可恨的怪物 254 10.4.2 回到聊天服务器 256 10.5 要求玩家登录 260 10.5.1 探索不熟悉的代码 260 10.5.2 整合 261 10.5.3 编写自定义状态机 265 10.6 保存玩家状态 269 10.7 接下来如何做 273 10.8 总结 273

第11章 再谈Django 274 11.1 身份验证 274 11.1.1 登录 275 11.1.2 添加用户 277 11.2 只列出当前用户的待办事项 278 11.2.1 修复数据库 279 11.2.2 言归正传 282 11.2.3 滴水不漏 283 11.2.4 更新接口 284 11.3 测试 285 11.3.1 单元测试 285 11.3.2 功能测试 287 11.3.3 运行测试 288 11.4 图像和样式 289 11.4.1 使用Django提供媒体内容 289 11.4.2 由另一个服务器提供媒体 291 11.4.3 最后一步 292 11.5 接下来如何做 292 11.6 总结 293

第12章 接下来如何做 294 12.1 再阅读一些代码 294 12.1.1 Python标准库 295 12.1.2 Python秘诀 295 12.1.3 开源项目 295 12.1.4 加入Python社区 295 12.1.5 加入邮件列表 295 12.1.6 寻找当地用户组 296 12.1.7 给开源项目帮忙 296 12.2 解决自己遇到的问题 296 12.3 其他Python库 297 12.3.1 代码剖析 297 12.3.2 日志 297 12.3.3 子进程和多任务 297 12.3.4 更复杂的分析 297 12.3.5 PIL和图像处理 298 12.3.6 XML、ElementTree和JSON 298 12.4 总结 298

亚马逊链接

基本信息

名称: 周鸿祎自述:我的互联网方法论
作者信息: 作者: 周鸿祎 [ 中文 pdf ]

简单介绍

《周鸿祎自述:我的互联网方法论》编辑推荐:《周鸿祎自述:我的互联网方法论》是中国安全之父、颠覆式创新家、360 掌门人周鸿祎唯一一部亲笔著作。在《周鸿祎自述:我的互联网方法论》中,第一代互联网老兵,分享独家成功秘籍。系统阐述十几年互联网观、产品观和管理思想,解密360的产品策略、商业战略和成长逻辑。周鸿祎首次面向传统企业,讲述独家转型方法论。
如果你致力于成为史上最牛叉的产品经理,如果你是渴求成功却陷于困境的互联网创业者,如果你是曾经叱咤风云如今却看不清互联网大势的传统行业从业者。
或者,你仅仅是一位刚刚走出校园的学生,却相信自己可以改变世界……来听听第一代互联网老兵周鸿祎的互联网方法论
本书聚焦企业最关注的热点问题:互联网时代的大趋势是什么?传统行业如何面对互联网的挑战?360为什么奉行“用户至上”?互联网产品的本质是什么?为什么互联网可以真免费?为什么说口碑是衡量创新的标准?
本书为企业提供最有效的互联网转型指南:360的赚钱之道;互联网产品秘籍;好产品是让用户离不开;
互联网时代的“扁平化”管理和“小而美”组织;企业创新土壤的培养方法。

目录

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
第一章 欢迎来到互联网时代
任何企业都可以找最强的竞争对手,但有一个对手你是打不过的,那就是趋势。趋势一旦爆发,就不会是一个线性的发展。它会积蓄力量于无形,最后突然爆发出雪崩效应,任何不愿意改变的力量都会在雪崩面前被毁灭,被市场边缘化。
没有人能打败趋势
互联网里的黑天鹅
火鸡的悲剧
互联网思维就是一层纸
消费者变了,营销要玩新手法
核心是产品体验
商业模式不是赚钱模式
第二章 互联网里的用户至上
为什么说360是一个互联网公司,而不是单纯的杀毒软件公司?因为360不是靠卖杀毒软件挣钱,而是通过免费杀毒得到了海量的用户基数。直到今天,360杀毒依然不赚钱,但因为我们向海量用户推荐使用360浏览器,通过导航、搜索、网页游戏等业务获得了丰厚利润。这就是用户的力量。
是用户,而不是客户
用户是互联网商业模式的基础
360为什么要“用户至上”?
互联网产品的本质是为用户服务
第三章 颠覆式创新
颠覆式创新都不是敲锣打鼓来的,而是隐藏在一片噪声里,它是代表了未来趋势的一个讯号,但你却通常看不到、看不懂、看不清。所以,一定不能以一种藐视的态度来看一个新生事物,它可能满身缺点,但是颠覆你的东西,不需要做成十项全能,它只要在一个点上追求极致,远远超过你,这就足够了。
颠覆式创新是人性的表达
颠覆式创新是屌丝的逆袭
360是如何颠覆传统杀毒市场的?
颠覆和破坏不是贬义词
颠覆式创新为什么总是发源于小企业
颠覆不是敲锣打鼓来的
颠覆式创新,需要逆向思维
乔布斯是如何苹果进行颠覆的?
乔布斯的拿来主义
《创新者的窘境》、《柔道战略》和《定位》
《创新者的窘境》之引言
第四章 免费时代
传统经济的本质,就是低买高卖。但互联网最激动人心的地方,在于你能给亿万用户提供一个非常好的产品,免费用,最后你还能因此获得巨额的财富。这种模式在传统的商业世界中是无法解释的。
免费开启我的互联网之旅
真免费和假免费
为什么互联网可以真免费?
免费是一种商业模式
免费不仅是商业模式
企鹅的秘密
360为什么要免费?
都是免费惹得祸
硬件也免费
什么是互联网化?
免费是一种颠覆性的力量
互联网的转型与跨界
为什么我不看好智能手表?
特写:360是如何赚钱的?
特写:免费VS收费的三次战争
第五章 体验为王
在拉斯维加斯有一个酒店,客人离开酒店的时候,门童会塞上两瓶冰镇矿泉水,免费给客人在路上喝的。这两瓶水给客人的感觉是无微不至的关怀,也是预料之外的贴心服务。这就是超出预期的体验,才是真正的客户体验。
一个百亿美元的教训
超出预期的才叫用户体验。
亚马逊的“飞轮”
苹果的像素
体验需要追求极致
体验的基础是用户需求
细节,还是细节
一定要聚焦
大道至简
商业秀节选
第六章 互联网方法论
在微创新的时候,很重要一点就是不要老想着做平台。无论是创业公司,还是转型互联网的传统企业,最忌讳的就是一上来就冲着宏大的平台化思维做,因为用户不会因为你做了一个平台就接受你的产品。
什么是微创新?
小处着眼
小步快跑
不要平台化思维
口碑是衡量创新的标准
创新需要土壤
容忍失败
硅谷创业者的启示
think Different
战略必须要落地到产品
互联网产品秘籍
好的产品:让用户离不开
好的体验需要处处留心
做产品需要“现场力”
强需求与弱需求
像小白一样思考
做产品要有一颗粗糙的心
360如何做产品
如何建立一个“铁打的营盘”?
“扁平化”与“小而美”

亚马逊链接

基本信息

名称: Python黑帽子:黑客与渗透测试编程之道
作者信息: 作者: 塞茨 (Justin Seitz) [ 英文 pdf ]

简单介绍

《Python黑帽子:黑客与渗透测试编程之道》适合有一定编程基础的安全爱好者、计算机从业人员阅读,特别是对正在学习计算机安全专业,立志从事计算机安全行业,成为渗透测试人员的人来说,这本书更是不可多得的参考。

目录

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
第1章设置Python环境
安装Kali Linux虚拟机
WingIDE
第2章网络基础
Python网络编程简介
TCP客户端
UDP客户端
TCP服务器
取代netcat
小试牛刀
创建一个TCP代理
小试牛刀
通过Paramiko使用SSH
小试牛刀
SSH隧道
小试牛刀
第3章网络:原始套接字和流量嗅探
开发UDP主机发现工具
Windows和Linux上的包嗅探
小试牛刀
解码IP层
小试牛刀
解码ICMP
小试牛刀
第4章Scapy:网络的掌控者
窃取Email认证
小试牛刀
利用Scapy进行ARP缓存投毒
小试牛刀
处理PCAP文件
小试牛刀
第5章Web攻击
Web的套接字函数库:urlli2
开源Web应用安装
小试牛刀
暴力破解目录和文件位置
小试牛刀
暴力破解HTML表格认证
小试牛刀
第6章扩展Burp代理
配置
Burp模糊测试
小试牛刀
在Burp中利用Bing服务
小试牛刀
利用网站内容生成密码字典
小试牛刀
第7章基于GitHub的命令和控制
GitHub账号设置
创建模块
木马配置
编写基于GitHub通信的木马
Python模块导入功能的破解
小试牛刀
第8章Windows下木马的常用功能
有趣的键盘记录
小试牛刀
截取屏幕快照
Python方式的shellcode执行
小试牛刀
沙盒检测
第9章玩转浏览器
基于浏览器的中间人攻击
创建接收服务器
小试牛刀
利用IE的COM组件自动化技术窃取数据
小试牛刀
第10章Windows系统提权
环境准备
创建进程监视器
利用WMI监视进程
小试牛刀
Windows系统的令牌权限
赢得竞争
小试牛刀
代码插入
小试牛刀
第11章自动化攻击取证
工具安装
工具配置
抓取口令的哈希值
直接代码注入
小试牛刀

亚马逊链接

基本信息

名称: 编写可维护的JavaScript
作者信息: 作者: 扎卡斯 [ 英文 pdf ]

简单介绍

《编写可维护的JavaScript》中强调:任何语言都需要强调编码风格的一致性。只要是团队开发,每个人都以相同方式编写代码就是至关重要的。这样大家才能方便地互相看懂和维护对方的代码。运用《编写可维护的JavaScript》中讲述的技巧和技术,可以使JavaScript团队编程从侠义的个人偏好的阴霾走出来,走向真正的高可维护性、高效能和高水准。它是一本构建编码风格手册,帮助开发团队从“游击队”走向“正规军”。

目录

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
第一部分 编程风格
第1章 基本的格式化
1.1 缩进层级
1.2 语句结尾
1.3 行的长度
1.4 换行
1.5 空行
1.6 命名
1.6.1 变量和函数
1.6.2 常量
1.6.3 构造函数
1.7 直接量
1.7.1 字符串
1.7.2 数字
1.7.3 null
1.7.4 undefined
1.7.5 对象直接量
1.7.6 数组直接量
第2章 注释
2.1 单行注释
2.2 多行注释
2.3 使用注释
2.3.1 难于理解的代码
2.3.2 可能被误认为错误的代码
2.3.3 浏览器特性hack
2.4 文档注释
第3章 语句和表达式
3.1 花括号的对齐方式
3.2 块语句间隔
3.3 switch语句
3.3.1 缩进
3.3.2 case语句的“连续执行”
3.3.3 default
3.4 with语句
3.5 for循环
3.6 for-in循环
第4章 变量、函数和运算符
4.1 变量声明
4.2 函数声明
4.3 函数调用间隔
4.4 立即调用的函数
4.5 严格模式
4.6 相等
4.6.1 eval()
4.6.2 原始包装类型
第二部分 编程实践
第5章 UI层的松耦合
5.1 什么是松耦合
5.2 将JavaScript从CSS中抽离
5.3 将CSS从JavaScript中抽离
5.4 将JavaScript从HTML中抽离
5.5 将HTML从JavaScript中抽离
5.5.1 方法1:从服务器加载
5.5.2 方法2:简单客户端模板
5.5.3 方法3:复杂客户端模板
第6章 避免使用全局变量
6.1 全局变量带来的问题
6.1.1 命名冲突
6.1.2 代码的脆弱性
6.1.3 难以测试
6.2 意外的全局变量
避免意外的全局变量
6.3 单全局变量方式
6.3.1 命名空间
6.3.2 模块
6.4 零全局变量
第7章 事件处理
7.1 典型用法
7.2 规则1:隔离应用逻辑
7.3 规则2:不要分发事件对象
第8章 避免“空比较”
8.1 检测原始值
8.2 检测引用值
8.2.1 检测函数
8.2.2 检测数组
8.3 检测属性
第9章 将配置数据从代码中分离出来
9.1 什么是配置数据
9.2 抽离配置数据
9.3 保存配置数据
第10章 抛出自定义错误
10.1 错误的本质
10.2 在JavaScript中抛出错误
10.3 抛出错误的好处
10.4 何时抛出错误
10.5 try-catch语句
10.6 错误类型
第11章 不是你的对象不要动
11.1 什么是你的
11.2 原则
11.2.1 不覆盖方法
11.2.2 不新增方法
11.2.3 不删除方法
11.3 更好的途径
11.3.1 基于对象的继承
11.3.2 基于类型的继承
11.3.3 门面模式
11.4 关于Polyfill的注解
11.5 阻止修改
第12章 浏览器嗅探
12.1 User-Agent检测
12.2 特性检测
12.3 避免特性推断
12.4 避免浏览器推断
12.5 应当如何取舍
第三部分 自动化
第13章 文件和目录结构
13.1 最佳实践
13.2 基本结构
第14章 Ant
14.1 安装
14.2 配置文件
14.3 执行构建
14.4 目标操作的依赖
14.5 属性
14.6 Buildr项目
第15章 校验
15.1 查找文件
15.2 任务
15.3 增强的目标操作
15.4 其他方面的改进
15.5 Buildr任务
第16章 文件合并和加工
16.1 任务
16.2 行尾结束符
16.3 文件头和文件尾
16.4 加工文件
第17章 文件精简和压缩
17.1 文件精简
17.1.1 使用YUI Compressor精简代码
17.1.2 用Closure Compiler精简
17.1.3 使用UglifyJS精简
17.2 压缩
17.2.1 运行时压缩
17.2.2 构建时压缩
第18章 文档化
18.1 JSDoc Toolkit
18.2 YUI Doc
第19章 自动化测试
19.1 YUI Test Selenium引擎
19.1.1 配置一台Selenium服务器
19.1.2 配置YUI Test Selenium引擎
19.1.3 使用YUI Test Selenium引擎
19.1.4 Ant的配置写法
19.2 Yeti
19.3 PhantomJS
19.3.1 安装及使用
19.3.2 Ant的配置写法
19.4 JsTestDriver
19.4.1 安装及使用
19.4.2 Ant的配置写法
第20章 组装到一起
20.1 被忽略的细节
20.2 编制打包计划
20.2.1 开发版本的构建
20.2.2 集成版本的构建
20.2.3 发布版本的构建
20.3 使用CI系统
20.3.1 Jenkins
20.3.2 其他CI系统
附录A JavaScript编码风格指南
附录B JavaScript工具集

亚马逊链接

基本信息

名称: 程序员的自我修养
作者信息: 作者: 潘爱民 [ 中文 pdf ]

简单介绍

《程序员的自我修养:链接、装载与库》主要介绍系统软件的运行机制和原理,涉及在Windows和Linux两个系统平台上,一个应用程序在编译、链接和运行时刻所发生的各种事项,包括:代码指令是如何保存的,库文件如何与应用程序代码静态链接,应用程序如何被装载到内存中并开始运行,动态链接如何实现,C/C++运行库的工作原理,以及操作系统提供的系统服务是如何被调用的。每个技术专题都配备了大量图、表和代码实例,力求将复杂的机制以简洁的形式表达出来。本书最后还提供了一个小巧且跨平台的C/C++运行库MiniCRT,综合展示了与运行库相关的各种技术。
《程序员的自我修养:链接、装载与库》对装载、链接和库进行了深入浅出的剖析,并且辅以大量的例子和图表,可以作为计算机软件专业和其他相关专业大学本科高年级学生深入学习系统软件的参考书。同时,还可作为各行业从事软件开发的工程师、研究人员以及其他对系统软件实现机制和技术感兴趣者的自学教材。

目录

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
第1部分 简介
 第1章 温故而知新
  1.1 从HELLO WORLD 说起
  1.2 万变不离其宗
  1.3 站得高,望得远
  1.4 操作系统做什么
  1.5 内存不够怎么办
  1.6 众人拾柴火焰高
  1.7 本章小结
第2部分 静态链接
 第2章 编译和链接
  2.1 被隐藏了的过程
  2.2 编译器做了什么
  2.3 链接器年龄比编译器长
  2.4 模块拼装——静态链接
  2.5 本章小结
 第3章 目标文件里有什么
  3.1 目标文件的格式
  3.2 目标文件是什么样的
  3.3 挖掘SIMPLESECTION.O
  3.4 ELF 文件结构描述
  3.5 链接的接口——符号
  3.6 调试信息
  3.7 本章小结
 第4章 静态链接
  4.1 空间与地址分配
  4.2 符号解析与重定位
  4.3 COMMON 块
  4.4 C++相关问题
  4.5 静态库链接
  4.6 链接过程控制
  4.7 BFD 库
  4.8 本章小结
 第5章 WINDOWS PE/COFF
  5.1 WINDOWS 的二进制文件格式PE/COFF 134
  5.2 PE 的前身——COFF
  5.3 链接指示信息
  5.4 调试信息
  5.5 大家都有符号表
  5.6 WINDOWS 下的ELF——PE
  5.7 本章小结
第3部分 装载与动态链接
 第6章 可执行文件的装载与进程
  6.1 进程虚拟地址空间
  6.2 装载的方式
  6.3 从操作系统角度看可执行文件的装载
  6.4 进程虚存空间分布
  6.5 LINUX 内核装载ELF 过程简介
  6.6 WINDOWS PE 的装载
  6.7 本章小结
 第7章 动态链接
  7.1 为什么要动态链接
  7.2 简单的动态链接例子
  7.3 地址无关代码
  7.4 延迟绑定(PLT)
  7.5 动态链接相关结构
  7.6 动态链接的步骤和实现
  7.7 显式运行时链接
  7.8 本章小结
 第8章 LINUX 共享库的组织
  8.1 共享库版本
  8.2 符号版本
  8.3 共享库系统路径
  8.4 共享库查找过程
  8.5 环境变量
  8.6 共享库的创建和安装
  8.7 本章小结
 第9章 WINDOWS 下的动态链接
  9.1 DLL 简介
  9.2 符号导出导入表
  9.3 DLL 优化
  9.4 C++与动态链接
  9.5 DLL HELL
  9.6 本章小结
第4部分 库与运行库
 第10章 内存
  10.1 程序的内存布局
  10.2 栈与调用惯例
  10.3 堆与内存管理
  10.4 本章小结
 第11章 运行库
  11.1 入口函数和程序初始化
  11.2 C/C++运行库
  11.3 运行库与多线程
  11.4 C++全局构造与析构
  11.5 FREAD 实现
  11.6 本章小结
 第12章 系统调用与API
  12.1 系统调用介绍
  12.2 系统调用原理
  12.3 WINDOWS API
  12.4 本章小结
 第13章 运行库实现
  13.1 C 语言运行库
  13.2 如何使用MINI CRT
  13.3 C++运行库实现
  13.4 如何使用MINI CRT++
  13.5 本章小结
附录A
 A.1 字节序(BYTE ORDER)
 A.2 ELF 常见段
 A.3 常用开发工具命令行参考
索引

亚马逊链接

基本信息

名称: COM技术内幕
作者信息: 作者: Dale Rogerson [ 中文 pdf ]

简单介绍

微软公司的组件对象模型(COM)作为一种重要的工具已崭露头角,它是微软迈向分布式计算的基础。不论现在还是将来,它都是定制应用程序的一种强大的方法。并且它是OLE和ActiveX的基础。COM帮助你理解未来的程序开发技术,而这本书帮助你理解COM。在本书中你将发现:构建优美的COM组件的清晰、简单、实用的规则;COM是如何易学易用,特虽是对那些熟练掌握C++的人;循序渐进地介绍COM设计;以代码形式给出的大量实例。
   《COM技术内幕》适合于中、高级C++程序员;COM、ActiveX和OLE程序员;对组件设计感兴趣的研究人员;以及那些当COM移植到UNIX、MVS和其他环境时想要使用到COM的程序员

目录

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
引言
第1章 组件
1.1 使用组件的优点
1.1.1 应用程序定制
1.1.2 组件库
1.1.3 分布式组件
1.2 对组件的需求
1.2.1 动态链接
1.2.2 信息封装
1.3 com
1.3.1 com组件是
1.3.2 com不是
1.3.3 com库
1.3.4 com方法
1.3.5 com超越了用户的需要
1.4 本章小结
第2章 接口
2.1 接口的作用
2.1.1 可复用应用程序架构
2.1.2 com接口的其他优点
.2.2 com接口的实现
2.2.1 编码约定
2.2.2 一个完整的例子
2.2.3 非接口通信
2.2.4 实现细节
2.3 接口理论:第二部分
2.3.1 接口的不变性
2.3.2 多态
2.4 接口的背后
2.4.1 虚拟函数表
2.4.2 vtbl指针及实例数据
2.4.3 多重实例
2.4.4 不同的类,相同的vtbl
2.5 本章小结
第3章 queryinterface函数
3.1 接口查询
3.1.1 关于iunknown
3.1.2 iunknown指针的获取
3.1.3 关于querinterface
3.1.4 querinterface的使用
3.1.5 querinterface的实现
3.1.6 关于类型转换
3.1.7 一个完整的例子
3.2 关于querinterface的实现规则
3.2.1 同一iunknown
3.2.2 客户可以获取曾经得到过的接口
3.2.3 可以再次获取已经拥有的接口
3.2.4 客户可以从任何接口返回到起始接口
3.2.5 若能够从某接口获取某特定接口,则从任意接口都将能够获取此接口
3.3 querinterface定义了组件
3.3.1 接口集
3.4 新版本组件的处理
3.4.1 何时需要建立一个新版本
3.4.2 不同版本接口的命名
3.4.3 隐含合约
3.5 本章小结
第4章 引用计数
4.1 生命期控制
4.2 引用计数简介
4.2.1 引用计数简介
4.2.2 addref和release的实现
4.3 何时进行引用计数
4.3.1 引用计数的优化
4.3.2 引用计数规则
4.4 本章小结
第5章 动态链接
5.1 组件的创建
5.1.1 从dli中输出函数
5.1.2 dll的装载
5.2 客户和组件的划分
5.2.1 程序清单
5.3 对象串
5.4 本章小结
第6章 关于hresult、guid、注册表及其他细节
6.1 hresult
6.1.1 hresult值的查找
6.1.2 hresult值的使用
6.1.3 用户自己代码的定义
6.2 guid
6.2.1 为什么要使用guid
6.2.2 guid的声明和定义
6.2.3 guid的比较
6.2.4 将guid作为组件标识符
6.2.5 通过引用传递guid值
6.3 windows注册表
6.3.1 注册表的组织
6.3.2 注册表编辑器
6.3.3 clsid关键字结构
6.3.4 关于注册表的其他细节
6.3.5 progid
6.3.6 自注册
6.3.7 组件类别
6.3.8 oleview
6.4 com库函数
6.4.1 com库的初始化
6.4.2 内存管理
6.4.3 将字符串转化成guid
6.5 本章小结
第7章 类厂
7.1 cocreateinstance
7.1.1 cocreateinstance的声明
7.1.2 cocreateinstance的使用
7.1.3 类上下文
7.1.4 客户程序清单
7.1.5 cocreateinstance的不灵活性
7.2 类厂
7.2.1 cocetclassobject
7.2.2 iclassfactory
7.2.3 cocreateinstance与cogetclassobject的比较
7.2.4 类厂的若干特性
7.3 类厂的实现
7.3.1 dllgetclassobject的使用
7.3.2 组件的创建过程
7.3.3 组件代码清单
7.3.4 流程控制
7.3.5 组件的注册
7.4 同一dll中的多个组件
7.4.1 类厂实现的复用
7.5 dll的卸载
7.5.1 dllcanunloadnow的使用
7.5.2 lockserver
7.6 本章小结
第8章 组件复用:包容与聚合
8.1 包容和聚合
8.1.1 包容简介
8.1.2 聚合简介
8.1.3 包容与聚合的比较
8.2 包容的实现
8.2.1 接口扩展
8.3 聚合的实现
8.3.1 queryinterface的实现
8.3.2 不正确的iunknown
8.3.3 聚合的未知接口
8.3.4 内部组件的创建
8.3.5 外部组件中指向内部组件接口的指针
8.4 一个完整的例子
8.4.1 盲目聚合
8.5 现实世界中的聚合和包容
8.5.1 组件的内部状态信息
8.5.2 虚拟函数的模拟
8.6 本章小结
第9章 编程工作的简化
9.1 客户端的简化
9.1.1 智能接口指针
9.1.2 c++包装类
9.2 服务器端的简化
9.2.1 未知接口基类
9.2.2 类厂基类
9.2.3 cunknown和cfactory的使用
9.2.4 集成步骤
9.3 本章小结
第10章 exe中的服务器
10.1 不同的进程
10.1.1 本地过程调用
10.1.2 调整
10.1.3 代理/残根dll
10.2 idl/midl简介
10.2.1 关于idl
10.2.2 idl接口描述举例
10.2.3 midl编译器
10.3 本地服务器的实现
10.3.1 示例程序的运行
10.3.2 去掉入口点函数
10.3.3 类厂的启动
10.3.4 对lockserver的修改
10.4 远程访问能力
10.4.1 dcomcnfg.exe所完成的工作
10.4.2 工作机理
10.4.3 其他dcom信息
10.5 本章小结
第11章 调度接口与自动化
11.1 一种新的通信方式
11.1.1 旧的通信方式
11.1.2 idispatch接口
11.2 idispatch的使用
11.2.1 inuoke函数的参数
11.2.2 示例
11.2.3 variant类型
11.2.4 bstr数据类型
11.2.5 safearray类型
11.3 类型库
11.3.1 类型库的创建
11.3.2 类型库的使用
11.3.3 注册表中的类型库
11.4 idispatch接口的实现
11.4.1 异常的引发
11.4.2 参数调整
11.5 本章小结
第12章 多线程
12.1 com线程模型
12.1.1 win32线程
12.1.2 com线程
12.1.3 套间
12.1.4 套间线程
12.1.5 自由线程
12.1.6 调整与同步
12.2 套间线程的实现
12.2.1 自动调整
12.2.2 手工调整
12.2.3 编码
12.2.4 对套间线程例子的说明
12.3 自由线程的实现
12.3.1 对自由线程例子的说明
12.3.2 自由线程参数调整的优化
12.4 关于线程模型的注册表关键字
12.5 本章小结
第13章 一个完整的例子
13.1 tangram程序
13.1.1 tangram的运行
13.1.2 所用的组件
13.1.3 客户程序
13.1.4 tangrammodel组件
13.1.5 tangramgdivisual和tangramglvisual组件
13.1.6 tangramgdiworld和tangramglworld组件
13.2 展示
13.3 idl文件
13.3.1 dlidata.c文件
13.4 循环引用计数
13.4.1 不调用addref
13.4.2 使用显示终止
13.4.3 使用一个单独的组件
13.5 事件和连接点
13.5.1 ienumxxx
13.6 本章小结
结束语

亚马逊链接

基本信息

名称: 天书夜读:从汇编语言到Windows内核编程
作者信息: 作者: 谭文 [ 中文 pdf ]

简单介绍

《天书夜读:从汇编语言到Windows内核编程》适合使用C/C++在Windows 上编程的读者,尤其适合希望加深自己技术功底的Windows应用程序员、训算机专业的有志于软件开发的大中院校学生:专业的Windows内核程序员,亦可丛本书得到超越一般内核程序开。

目录

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
入手篇 熟悉汇编
第1章 汇编指令与C语言
1.1 上机建立第一个工程
1.1.1 用Visual Studio创建工程
1.1.2 用Visual Studio查看汇编代码
1.2 简要复习常用的汇编指令
1.2.1 堆栈相关指令
1.2.2 数据传送指令
1.2.3 跳转与比较指令
1.3 C函数的参数传递过程

第2章 C语言的流程和处理 2.1 C语言的循环反汇编 2.1.1 for循环 2.1.2 do循环 2.1.3 while循环 2.2 C语言判断与分支的反汇编 2.2.1 if-else判断分支 2.2.2 switch-case判断分支 2.3 C语言的数组与结构 2.4 C语言的共用体和枚举类型

第3章 练习反汇编C语言程序 3.1 算法的反汇编 3.1.1 算法反汇编代码分析 3.1.2 算法反汇编阅读技巧 3.2 发行版的反汇编 3.3 汇编反C语言练习

基础篇 内核编程 第4章 内核字符串与内存 4.1 字符串的处理 4.1.1 使用字符串结构 4.1.2 字符串的初始化 4.1.3 字符串的拷贝 4.1.4 字符串的连接 4.1.5 字符串的打印 4.2 内存与链表 4.2.1 内存的分配与释放 4.2.2 使用LIST_ENTRY 4.2.3 使用长长整型数据 4.2.4 使用自选锁

第5章 文件与注册表操作 5.1 文件操作 5.1.1 使用OBJECT_ATTRIBUTES 5.1.2 打开和关闭文件 5.1.3 文件读/写操作 5.2 注册表操作 5.2.1 注册表键的打开 5.2.2 注册表值的读 5.2.3 注册表值的写

第6章 时间与线程 6.1 时间与定时器 6.1.1 获得当前滴答数 6.1.2 获得当前系统时间 6.1.3 使用定时器 6.2 线程与事件 6.2.1 使用系统线程 6.2.2 在线程中睡眠 6.2.3 使用同步事件

第7章 驱动、设备与请求 7.1 驱动与设备 7.1.1 驱动入口与驱动对象 7.1.2 分发函数和卸载函数 7.1.3 设备与符号链接 7.1.4 设备的安全创建 7.1.5 设备与符号链接的用户相关性 7.2 请求处理 7.2.1 IRP与IO_STACK_LOCATION 7.2.2 打开与关闭请求的处理 7.2.3 应用层信息传入 7.2.4 驱动层信息传出

探索篇 研究内核 第8章 进入Windows内核 8.1 开始Windows内核编程 8.1.1 内核编程的环境准备 8.1.2 用C语言写一个内核程序 8.2 学习用WinDbg进行调试 8.2.1 软件的准备 8.2.2 设置Windows XP调试执行 8.2.3 设置VMWare虚拟机调试 8.2.4 设置被调试机为Vista的情况 8.2.5 设置Windows内核符号表 8.2.6 调试例子diskperf 8.3 认识内核代码函数调用方式 8.4 尝试反写C内核代码 8.5 如何在代码中寻找需要的信息

第9章 用C++编写的内核程序 9.1 用C++开发内核程序 9.1.1 建立一个C++的内核工程 9.1.2 使用C接口标准声明 9.1.3 使用类静态成员函数 9.1.4 实现new操作符 9.2 开始阅读一个反汇编的类 9.2.1 new操作符的实现 9.2.2 构造函数的实现 9.3 了解更多的C++特性

第10章 继续探索Windows内核 10.1 探索Windows已有内核调用 10.2 自己实现XP的新调用 10.2.1 对照调试结果和数据结构 10.2.2 写出C语言的对应代码 10.3 没有符号表的情况 10.4 64位操作系统下的情况 10.4.1 分析64位操作系统的调用 10.4.2 深入了解64位内核调用参数传递

深入篇 修改内核 第11章 机器码与反汇编引擎 11.1 了解Intel的机器码 11.1.1 可执行指令与数据 11.1.2 单条指令的组成 11.1.3 MOD-REG-R/M的组成 11.1.4 其他的组成部分 11.2 反汇编引擎XDE32基本数据结构 11.3 反汇编引擎XDE32具体实现

第12章 CPU权限级与分页机制 12.1 Ring0和Ring3权限级 12.2 保护模式下的分页内存保护 12.3 分页内存不可执行保护 12.3.1 不可执行保护原理 12.3.2 不可执行保护的漏洞 12.4 权限级别的切换 12.4.1 调用门及其漏洞 12.4.2 sysenter和sysexit指令

第13章 开发Windows内核Hook 13.1 XP下Hook系统调用IoCallDriver 13.2 Vista下IofCallDriver的跟踪 13.3 Vista下inline hook 13.3.1 写入跳转指令并拷贝代码 13.3.2 实现中继函数

实战篇 实际开发 第14章 反病毒、木马实例开发 14.1 反病毒、木马的设想 14.2 开发内核驱动 14.2.1 在内核中检查可执行文件 14.2.2 在内核中生成设备接口 14.2.3 在内核中等待监控进程的响应 14.3 开发监控进程 14.4 本软件进一步展望

第15章 Rootkit与HIPS 15.1 Rootkit为何很重要 15.2 Rootkit如何逃过检测 15.3 HIPS如何检测Rootkit

第16章 手写指令保护代码 16.1 混淆字符串 16.2 隐藏内核函数 16.3 混淆流程与数据操作 16.3.1 混淆函数出口 16.3.2 插入有意义的花指令

第17章 用VMProtect保护代码 17.1 安装VMProtect 17.2 使用VMProtect 17.3 查看VMProtect效果 参考文献

亚马逊链接