深入搜索引擎-高清扫描版-带完整书签
深入搜索引擎--海量信息的压缩、索引和查询-高清扫描版-带完整书签
《深入搜索引擎:海量信息的压缩、索引和查询》是斯坦福大学信息检索和挖掘课程的首选教材之一,并已成为全球主要大学信息检索的主要教材。《深入搜索引擎:海量信息的压缩、索引和查询》理论和实践并重,深入浅出地给出了海量信息数据处理的整套解决方案,包括压缩、索引和查询的方方面面。其最大的特色在于不仅仅满足信息检索理论学习的需要,更重要的是给出了实践中可能面对的各种问题及其解决方法。
《深入搜索引擎:海量信息的压缩、索引和查询》作为斯坦福大学信息检索课程的教材之一,具有一定的阅读难度,主要面向信息检索专业高年级本科生和研究生、搜索引擎业界
数据挖掘概念与技术-第3版-中文版-高清扫描版-带完整书签
数据挖掘概念与技术-第3版-中文版-高清扫描版-带完整书签
网上下载的大多数书签不签,于是自己制作了书签,和书中目录中的一样,十分详细,方便翻页
Head First Servlets&JSP;-第2版-高清扫描版-带详细书签
Head First Servlets&JSP;-第2版-高清扫描版-带详细书签
高清扫描版,书签比较详细,和目录一样
离散数学-学习指导与习题解析-第2版-屈婉婷--高清扫描版-带完整书签
离散数学-学习指导与习题解析-第2版-屈婉婷--高清扫描版-带完整书签
离散数学及其应用-Kenneth Rosen-第7版-英文版与中文版及答案-带详细书签
离散数学及其应用-Kenneth Rosen-第7版-英文版与中文版及答案-带详细书签
包括英文版与中文版书籍,还有课后习题答案,均带详细书签
深度学习Deep Learning-带完整书签
深度学习Deep Learning-带完整书签
书签及其详细,和目录中的一样
SQL基础教程[日]MICK著-高清扫描版-带完整书签
SQL基础教程[日]MICK著-高清扫描版-带完整书签
第1章 数据库和SQL 17
1-1 数据库是什么 19
我们身边的数据库 19
为什么DBMS那么重要 20
DBMS种类 22
1-2 数据库的结构 24
RDBMS的常见系统结构 24
表的结构 26
1-3 SQL概要 29
标准SQL 29
SQL语句及其种类 30
SQL的基本书写规则 31
1-4 表的创建 34
表的内容的创建 34
数据库的创建(CREATE DATABASE语句) 35
表的创建(CREATE TABLE语句) 35
命名规则 37
数据类型的指定 38
约束的设置 40
1-5 表的删除和更新 41
表的删除(DROP TABLE语句) 41
表定义的更新(ALTER TABLE语句) 42
向Shohin表中插入数据 43
练习题 46
MATLAB函数速查手册[修订版]-邓薇-文字版-带完整书签
MATLAB函数速查手册[修订版]-邓薇-文字版-带完整书签
《MATLAB函数速查手册》立足MATLAB函数基础,并且附带较多的实例讲解,所以既适合初学者,又适合有一定经验的MATLAB使用者。《MATLAB函数速查手册》也可以作为大专院校学生的参考用书。 内容全面:近500个函数,全面覆盖MATLAB的各类应用;查询方便:提供功能索引和字母索引;实例丰富:每个函数均配有实例讲解。
Excel2013函数速查手册-带完整书签
Excel2013函数速查手册-带完整书签
一、 财务函数(55 条) 13
1. ACCRINT 13
2. ACCRINTM 13
3. AMORDEGRC 13
4. AMORLINC 13
5. COUPDAYBS 14
6. COUPDAYS 14
7. COUPDAYSNC 14
8. COUPNCD 14
9. COUPNUM 14
10. COUPPCD 15
11. CUMIPMT 15
12. CUMPRINC 15
13. DB 15
14. DDB 15
15. DISC 15
16. DOLLARDE 16
17. DOLLARFR 16
18. DURATION 16
19. EFFECT 16
20. FV 16
Qt及Qt Quick开发实战精解-霍亚飞-高清扫描版-带完整书签
Qt及Qt Quick开发实战精解-霍亚飞-高清扫描版-带完整书签
Python语言及其应用-高清文字版-带完整书签
Python语言及其应用-高清文字版-带完整书签
第1章 Python 初探 1
1.1 真实世界中的 Python 5
1.2 Python 与其他语言 5
1.3 为什么选择 Python 7
1.4 何时不应该使用 Python 8
1.5 Python 2 与 Python 3 8
1.6 安装 Python 9
1.7 运行 Python 9
1.7.1 使用交互式解释器 9
1.7.2 使用 Python 文件 10
1.7.3 下一步 11
1.8 禅定一刻 11
1.9 练习 11
Python学习手册-第4版-中文版-高清扫描版-带完整书签
Python学习手册-第4版-中文版-高清扫描版-带完整书签
第1章 问答环节 19
人们为何使用Python 19
软件质量 20
开发效率 21
Python是“脚本语言”吗 21
好吧,Python的缺点是什么呢 23
如今谁在使用Python 23
使用Python可以做些什么 24
系统编程 25
用户图形接口 25
internet脚本 25
组件集成 26
数据库编程 26
快速原型 27
数值计算和科学计算编程 27
游戏、图像、人工智能、xml、机器人等 27
Python如何获得支持 28
Python有哪些技术上的优点 28
面向对象 28
免费 29
可移植 29
功能强大 30
可混合 31
简单易用 31
简单易学 32
Python和其他语言比较起来怎么样 32
本章小结 33
本章习题 33
习题解答 34
Python是工程,不是艺术 34
C++语言程序设计-第3版-郑莉-高清扫描版-带完整书签
C++语言程序设计-第3版-郑莉-高清扫描版-带完整书签
第1章 绪论 1
1.1 计算机程序设计语言的发展 1
1.1.1 机器语言与汇编语言 1
1.1.2 高级语言 2
1.1.3 面向对象的语言 2
1.2 面向对象的方法 2
1.2.1 面向对象方法的由来 3
1.2.2 面向对象的基本概念 4
1.3 面向对象的软件开发 5
1.3.1 分析 5
1.3.2 设计 5
1.3.3 编程 6
1.3.4 测试 6
1.3.5 维护 6
1.4 信息的表示与存储 6
1.4.1 计算机的数字系统 7
1.4.2 几种进位记数制之间的转换 8
1.4.3 信息的存储单位 10
1.4.4 二进制数的编码表示 11
1.4.5 定点数和浮点数 14
1.4.6 数的表示范围 15
1.4.7 非数值信息的表示 16
1.5 程序的开发过程 16
1.5.1 基本术语 16
1.5.2 程序的开发过程 17
1.6 小结 18
习题 18
C程序设计-第4版-谭浩强-高清扫描版-带完整书签
C程序设计-第4版-谭浩强-高清扫描版-带完整书签
第1章 程序设计和C语言 1
1.1 什么是计算机程序 1
1.2 什么是计算机语言 1
1.3 C语言的发展及其特点 3
1.4 最简单的C语言程序 5
1.4.1 最简单的C语言程序举例 6
1.4.2 C语言程序的结构 10
1.5 运行C程序的步骤与方法 12
1.6 程序设计的任务 14
习题 15
第2章 算法—程序的灵魂 16
2.1 什么是算法 16
2.2 简单的算法举例 17
2.3 算法的特性 21
2.4 怎样表示一个算法 22
2.4.1 用自然语言表示算法 22
2.4.2 用流程图表示算法 22
2.4.3 三种基本结构和改进的流程图 26
2.4.4 用N-S流程图表示算法 28
2.4.5 用伪代码表示算法 31
2.4.6 用计算机语言表示算法 32
2.5 结构化程序设计方法 34
习题 36
C程序设计-第3版-谭浩强-高清扫描版-带完整书签
C程序设计-第3版-谭浩强-高清扫描版-带完整书签
第1章 C语言概述 1
1.1 C语言出现的历史背景 1
1.2 C语言的特点 2
1.3 简单的C语言程序介绍 4
1.4 运行C程序的步骤与方法 7
习题 12
第2章 程序的灵魂——算法 14
2.1 算法的概念 14
2.2 简单算法举例 15
2.3 算法的特性 19
2.4 怎样表示一个算法 20
2.5 结构化程序设计方法 34
习题 36
第3章 数据类型、运算符与表达式 37
3.1 C语言的数据类型 37
3.2 常量与变量 37
3.3 整型数据 40
3.4 浮点型数据 45
3.5 字符型数据 48
3.6 变量赋初值 53
3.7 各类数值型数据间的混合运算 54
3.8 算术运算符和算术表达式 55
3.9 赋值运算符和赋值表达式 59
3.10 逗号运算符和逗号表达式 65
习题 66
大规模C++程序设计-高清扫描版-带完整书签
大规模C++程序设计-高清扫描版-带完整书签
第1部分 基础知识 31
第1章 预备知识 33
1.1 多文件C++程序 33
1.2 typedef(类型别名)声明 40
1.3 assert语句 41
1.4 有关风格的一些问题 42
1.5 迭代器 48
1.6 逻辑设计符号 54
1.7 继承与分层 62
1.8 最小化 63
1.9 小结 64
第2章 基本规则 66
2.1 概述 66
2.2 成员数据访问 67
2.3 全局名称空间 71
2.4 包含卫哨 79
2.5 冗余包含卫哨 81
2.6 文档 86
2.7 标识符命名规则 87
2.8 小结 89
C程序设计学习辅导-第4版-谭浩强-带完整书签
C程序设计学习辅导-第4版-谭浩强-带完整书签
封面 1
目录 8
第1部分 《C程序设计(第四版)》习题和参考解答 11
第1章 程序设计和C语言 11
第2章 算法——程序的灵魂 14
第3章 最简单的C程序设计——顺序程序设计 24
第4章 选择结构程序设计 34
第5章 循环结构程序设计 47
第6章 利用数组处理批量数据 64
第7章 用函数实现模块化程序设计 84
第8章 善于利用指针 109
第9章 用户自己建立数据类型 138
第10章 对文件的输入输出 169
第2部分 深入学好C 程序设计 187
第11章 预处理指令 187
第12章 位运算 202
第13章 C程序案例 214
第3部分 C语言程序上机指南 233
第14章 怎样使用Visual C++运行程序 233
C++程序设计-谭浩强-清晰版完整书签
C++程序设计-谭浩强-清晰版完整书签
封面 -24
目录 -10
第1篇 基本知识 1
第1章 C++的初步知识 3
1.1 从C到C++ 3
1.2 最简单的C++程序 5
1.3 C++程序的构成和书写形式 12
1.4 C++程序的编写和实现 13
1.5 关于C++上机实践 15
习题 16
第2章 数据类型与表达式 19
2.1 C++的数据类型 19
2.2 常量 21
2.2.1 什么是常量 21
2.2.2 数值常量 21
2.2.3 字符常量 23
2.2.4 符号常量 26
2.3 变量 27
2.3.1 什么是变量 27
2.3.2 变量名规则 28
2.3.3 定义变量 28
2.3.4 为变量赋初值 29
2.3.5 常变量 30
2.4 C++的运算符 31
2.5 算术运算符与算术表达式 32
2.5.1 基本的算术运算符 32
2.5.2 算术表达式和运算符的优先级与结合性 32
2.5.3 表达式中各类数值型数据间的混合运算 32
2.5.4 自增和自减运算符 33
2.5.5 强制类型转换运算符 35
2.6 赋值运算符与赋值表达式 36
2.6.1 赋值运算符 36
2.6.2 赋值过程中的类型转换 36
2.6.3 复合的赋值运算符 38
2.6.4 赋值表达式 39
2.7 逗号运算符与逗号表达式 40
习题 41
Head First 设计模式
带完整书签
封面 -36
目录- -15
1.欢迎来到设计模式世界:设计模式入门 1
模拟鸭子应用 2
Joe想到继承 5
利用接口如何? 6
软件开发的不变真理 8
分开变化和不变部分 10
设计鸭子的行为 11
测试鸭子的代码 18
动态地设置行为 20
封装行为的大局观 22
“有一个”比“是一个”更好 策略模式 23
策略模式 24
共享模式词汇的威力 28
我如何使用设计模式? 29
设计箱内的工具 32
习題解答 34
2.让你的对象知悉现况:观察者模式 37
气象观测站 39
认识观察者模式 44
出版者+订阅者=观察者模式 45
五分钟短剧:观察主题 48
定义观察者模式 51
松耦合的威力 53
设计气象站 56
实现气象站 57
使用Java内建的观察者模式 64
java.util.Observable的黑暗面 71
设计箱内的工具 74
习题解答 78
3.装饰对象:装饰者模式 79
欢迎来到星巴兹咖啡 80
幵放-关闭原则 86
认识装饰者模式 88
以装饰者构造饮料订单 89
定义装饰者模式 91
装饰饮料 92
写下星巴兹的代码 95
真实世界的装饰者:Java I/O 100
编写自己的Java I/O装饰者 102
设计箱内的工具 105
习题解答 106
4.烘烤OO的精华:工厂模式 109
当看到到“new",就会想到“具体” 110
对象村比萨 112
封装创建对象的代码 114
建立一个简单比萨工厂 115
定义简单工厂 117
给比萨店使用的框架 120
允许子类做决定 121
让我们幵一家比萨店吧 123
声明一个工厂方法 125
认识工厂方法模式 131
一个很依赖的比萨店 137
看看对象依賴 138
依赖倒置原则 139
再回到到比萨店…… 144
原料家族 145
建造原料工厂 146
看看抽象工厂 153
幕后花絮 154
定义抽象工厂模式 156
比较工厂方法和抽象工厂 160
设计箱内的工具 162
习题解答 164
5.独一无二的对象:单件模式 169
独一无二 170
小小单件 171
剖析经典的单件模式实现 173
单件的告白 174
巧克力工厂 175
定义单件模式 177
Hershey我们遇到麻烦了 178
化身为JVM 179
处理多线程 180
单件Q&A 184
设计箱内的工具 186
习题解答 188
6.封装调用:命令模式 191
巴斯特家电自动化公司 192
遥控器 193
看一下厂商的类 194
同时,回到餐厅…… 197
研究餐厅的交互 198
对象村餐厅的角色和职责 199
从餐厅到命令模式 201
第一个命令对象 203
定义命令模式 206
命令模式与遥控器 208
实现遥控器 210
逐步测试遥控器 212
写文档的时刻到了 215
使用状态实现撤销 220
每个遥控器都需要Party模式! 224
使用宏命令 225
命令模式的更多用途:队列请求 228
命令換式的更多用途:日志请求 229
设计箱内的工具 230
习题解答 232
7.随遇而安:适配器与外观模式 235
我们周围的适配器 236
面向对象适配器 237
适配器模式解析 241
定义适配器模式 243
对象和类的适配器 244
今夜话题:对象适配器和类适配器 247
真实世界的适配器 248
将枚举适配到迭代器 249
今夜话题:装饰者模式和适配器模式 252
甜蜜的家庭影院 255
灯光、相机、外观! 258
构造家庭影院外观 261
定义外观模式 264
“最少知识”原则 265
设计箱内的工具 270
习题解答 272
8.封装算法:模板方法模式 275
快速搞定几个咖啡和茶的类 277
抽取咖啡和茶 280
更进一步的设计…… 281
抽象prepareRecipe() 282
我们做了什么? 285
认识模板方法 286
走,泡茶去 287
模板方法带给我们什么? 288
定义模板方法模式 289
再靠近一点 290
对模板方法进行挂钩…… 292
使用钩子 293
咖啡?茶?执行测试程序 294
好莱坞原则 296
好莱坞原则和模板方法 297
荒野中的模板方法 299
用模板方法排序 300
来排序鸭子吧…… 301
比较鸭子 302
观察鸭子排序的内部运作3〇 4
一个Swing的窗口程序 306
Applet 307
今夜话题:模板方法和策略 308
设计箱内的工具3H
习题解答 312
9.管理良好的集合:迭代器与组合模式 315
对象村餐厅和对象村煎饼屋合并了 316
比较菜单的实现 318
可以封装遍历吗? 323
认识迭代器模式 325
在餐厅菜单中加人一个迭代器 326
鸟瞰目前的设计 331
利用 java.ulil.Iterator来治理 333
这为我们带来什么好处? 335
定义迭代器模式 336
单一责任 339
迭代器与集合 348
Java 5的迭代器和集合 349
正当我们认为这很安全的时候…… 353
定义组合模式 356
利用组合设计菜单 359
实现组合菜单 362
闪回到迭代器 368
空迭代器 372
迭代器和组合凑在一起的魔力…… 374
设计箱内的工具 380
习题解答 381
10.事物的状态:状态模式 385
如何实现状态?(办公室隔间对话) 387
状态机101 388
状态机代码的第一个版本 390
该来的躲不掉……变更请求! 394
混乱的状态…… 396
定义状态接口和类 399
实现我们的状态类 401
重新改造糖果机 402
定义状态模式 410
状态VS.策略模式 411
精神检査…… 417
我们差点儿忘了! 420
设计箱内的工具 423
习题解答 424
11.控制对象访问:代理模式 429
监控糖果机 430
远程代理的色 434
RMI浏览 437
GumballMachine 远程代理 450
代理幕后花絮 458
定义代理模式 460
准备虚拟代理 462
设计CD封面虚拟代理 464
虚拟代理的幕后花絮 470
使用Java API的代理 474
五分钟短剧:保护主题 478
创建动态代理 479
代理动物园 488
设计箱内的工具 491
习题解答 492
12.模式中的模式:复合模式 499
复合模式 500
与鸭子重聚 501
加人一个适配器 504
加人一个装饰者 506
加人一个工厂 508
加入一个组合和一个迭代器 513
加入一个观察者 516
検式槪览 523
鸭瞰:类图 524
模型-视图-控制器之歌 526
设计模式是MVC的钥匙 528
戴着模式的有色眼镜看MVC 532
利用MVC控制节拍…… 534
模型 537
视图 539
控制器 542
探索策略 545
适配模型 546
现在我们准备写HeartController 547
MVC与Web 549
设计模式和Model 2 557
设计箱内的工具 560
习题解答 561
13.真实世界中的模式:与设计模式相处 577
对象村指南 578
定义设计模式 579
更近地观察设计模式的定义 581
愿力与你同在 582
模式类目 583
如何创建模式 586
想当一个设计模式作家吗? 587
组织设计模式 589
用模式思考 594
使用模式的心智 597
別忘了共享词汇的威力 599
共享词汇的五种方式 600
和四人组一同巡游对象忖 601
你的旅途刚刚开始…… 602
其他设计模式资源 603
模式动物园 604
以反模式歼灭恶势力 606
设计箱内的工具 608
离开对象村…… 609
14.附录A:剩下的模式 611
桥接 612
生成器 614
责任链 616
蝇量 618
解释器 620
中介者 622
备忘录 624
原型 626
访问者 628
PYTHON网络爬虫从入门到实践-带书签
PYTHON网络爬虫从入门到实践.pdf
作者:唐松 陈智铨
带完整书签
封面 -16
目录 -6
第1章 网络爬虫入门 1
1.1 为什么要学网络爬虫 2
1.1.1 网络爬虫能带来什么好处 2
1.1.2 能从网络上爬取什么数据 3
1.1.3 应不应该学爬虫 3
1.2 网络爬虫是否合法 3
1.2.1 Robots协议 4
1.2.2 网络爬虫的约束 5
1.3 网络爬虫的基本议题 6
1.3.1 Python爬虫的流程 7
1.3.2 三个流程的技术实现 7
第2章 编写第一个网络爬虫 8
2.1 搭建Python平台 9
2.1.1 Python的安装 9
2.1.2 使用pip安装第三方库 10
2.1.3 使用编译器Jupyter编程 11
2.2 Python使用入门 13
2.2.1 基本命令 13
2.2.2 数据类型 14
2.2.3 条件语句和循环语句 15
2.2.4 函数 16
2.2.5 面向对象编程 17
2.3 编写第一个简单的爬虫 21
2.3.1 第一步:获取页面 22
2.3.2 第二步:提取需要的数据 23
2.3.3 第三步:存储数据 24
2.4 Python实践:基础巩固 25
2.4.1 Python基础试题 26
2.4.2 参考答案 27
2.4.3 自我实践题 30
第3章 静态网页抓取 31
3.1 安装Requests 32
3.2 获取响应内容 32
3.3 定制Requests 33
3.3.1 传递URL参数 33
3.3.2 定制请求头 34
3.3.3 发送POST请求 35
3.3.4 超时 36
3.4 Requests爬虫实践:TOP250电影数据 36
3.4.1 网站分析 37
3.4.2 项目实践 37
3.4.3 自我实践题 39
第4章 动态网页抓取 40
4.1 动态抓取的实例 41
4.2 解析真实地址抓取 42
4.3 通过Selenium模拟浏览器抓取 47
4.3.1 Selenium的安装与基本介绍 47
4.3.2 Selenium的实践案例 48
4.3.3 Selenium获取文章的所有评论 49
4.3.4 Selenium的高级操作 52
4.4 Selenium爬虫实践:深圳短租数据 55
4.4.1 网站分析 55
4.4.2 项目实践 57
4.4.3 自我实践题 60
第5章 解析网页 61
5.1 使用正则表达式解析网页 62
5.1.1 re.match方法 62
5.1.2 re.search方法 64
5.1.3 re.fmdall方法 64
5.2 使用BeautifulSoup解析网页 66
5.2.1 BeautifUlSoup的安装 66
5.2.2 使用BeautifolSoup获取博客标题 67
5.2.3 BeautifUlSoup的其他功能 68
5.3 使用lxml解析网页 72
5.3.1 lxml的安装 72
5.3.2 使用lxml获取博客标题 72
5.3.3 XPath的选取方法 74
5.4 麟 75
5.5 BeautiflilSoup爬虫实践:房屋价格数据 76
5.5.1 网站分析 76
5.5.2 项目实践 77
5.5.3 自我实践题 79
第6章 数据存储 80
6.1 基本存储:存储至TXT或CSV 81
6.1.1 把数据存储至TXT 81
6.1.2 把数据存储至CSV 82
6.2 存储至MySQL数据库 84
6.2.1 下载安装MySQL 85
6.2.2 MySQL的基本操作 88
6.2.3 Python操作MySQL数据库 92
6.3 存储至MongoDB数据库 94
6.3.1 下载安装MongoDB 95
6.3.2 MongoDB的基本概念 98
6.3.3 Python操作MongoDB数据库 99
6.3.4 RoboMongo的安装与使用 101
6.4 总结 102
6.5 MongoDB爬虫实践:虎扑论坛 103
6.5.1 网站分析 103
6.5.2 项目实践 104
6.5.3 自我实践题 110
第7章 提升爬虫的速度 111
7.1 并发和并行,同步和异步 112
7.1.1 并发和并行 112
7.1.2 同步和异步 112
7.2 多线程爬虫 113
7.2.1 简单单线程爬虫 114
7.2.2 学习Python多线程 114
7.2.3 简单的多线程爬虫 117
7.2.4 使用Queue的多线程爬虫 120
7.3 多进程爬虫 122
7.3.1 使用multiprocessing的多进程爬虫 122
7.3.2 使用Pool+Queue的多进程爬虫 124
7.4 多协程爬虫 127
7.5 总结 129
7.5.1 回顾多线程、多进程、多协程 129
7.5.2 性能对比 130
第8章 反爬虫问题 132
8.1 为什么会被反爬虫 133
8.2 反爬虫的方式有哪些 133
8.2.1 不返回网页 134
8.2.2 返回非目标网页 134
8.2.3 获取数据变难 135
8.3 如何“反反爬虫” 135
8.3.1 修改请求头 135
8.3.2 修改爬虫的间隔时间 136
8.3.3 使用代理 139
8.4 总结 140
第9章 解决中文乱码 141
9.1 什么是字符编码 142
9.2 Python的字符编码encode和decode 144
9.3 解决中文编码问题 146
9.3.1 问题1:获取网站的中文显示乱码 147
9.3.2 问题2:非法字符抛出异常 148
9.3.3 问题3:网页使用gzip压缩 149
9.3.4 问题4:读写文件的中文乱码 150
9.4 总结 152
第10章 登录与验证码处理 153
10.1 处理登录表单 154
10.1.1 处理登录表单 154
10.1.2 处理cookies,让网页记住你的登录 158
10.1.3 完整的登录代码 160
10.2 验证码的处理 162
10.2.1 如何使用验证码验证 163
10.2.2 人工方法处理验证码 164
10.2.3 OCR处理验证码 167
10.3 总结 169
第11章 服务器采集 170
11.1 为什么使用服务器釆集 171
11.1.1 大规模爬虫的需要 171
11.1.2 防止IP地址被封杀 171
11.2 使用动态IP拨号服务器 172
11.2.1 购买拨号服务器 172
11.2.2 登录服务器 172
11.2.3 使用Python更换IP 174
11.2.4 结合爬虫和更换IP功能 175
11.3 使用Tor代理服务器 176
11.3.1 Tor的安装 177
11.3.2 Tor的使用 180
第12章 分布式爬虫 184
12.1 安装Redis 185
12.2 修改Redis配置 188
12.2.1 修改Redis密码 188
12.2.2 让Redis服务器被远程访问 188
12.2.3 使用RedisDesktopManager管理 189
12.3 Redis分布式爬虫实践 189
12.3.1 安装Redis库 190
12.3.2 加入任务队列 190
12.3.3 读取任务队列并下载图片 191
12.3.4 分布式爬虫代码 192
12.4 总结 194
第13章 爬虫实践一:维基百科 195
13.1 项目描述 196
13.1.1 项目目标 196
13.1.2 项目描述 196
13.1.3 深度优先和广度优先 198
13.2 网站分析 199
13.3 项目实施:深度优先的递归爬虫 201
13.4 项目进阶:广度优先的多线程爬虫 203
13.5 总结 207
第14章 爬虫实践二:知乎Live 208
14.1 项目描述 209
14.2 网站分析 209
14.3 项目实施 212
14.3.1 获取所有Live 212
14.3.2 获取Live的听众 215
14.4 总结 218
第15章 爬虫实践三:百度地图API 219
15.1 项目描述 220
15.2 获取API秘钥 221
15.3 项目实施 222
15.3.1 获取所有拥有公园的城市 224
15.3.2 获取所有城市的公园数据 225
15.3.3 获取所有公园的详细信息 229
15.4 总结 233
第16章 爬虫实践四:餐厅点评 234
16.1 项目描述 235
16.2 网站分析 235
16.3 项目实施 237
16.3.1 获取深圳的餐厅列表 237
16.3.2 获取餐厅的详细信息 242
16.4 总结 244
自制编程语言-扫描版-带完整书签.pdf
带完整书签
第1章 引子 001
1.1 为什么要制作编程语言 002
1.2 自制编程语言并不是很难 003
1.3 本书的构成与面向读者 004
1.4 用什么语言来制作 006
1.5 要制作怎样的语言 007
1.5.1 要设计怎样的语法 007
1.5.2 要设计怎样的运行方式 009
补充知识 “用户”指的是谁? 012
补充知识 解释器并不会进行翻译 012
1.6 环境搭建 012
1.6.1 搭建开发环境 012
补充知识 关于bison与flex的安装 014
1.6.2 本书涉及的源代码以及编译器 015
第2章 试做一个计算器 017
2.1 yacc/lex是什么 018
补充知识 词法分析器与解析器是各自独立的 019
2.2 试做一个计算器 020
2.2.1 lex 021
2.2.2 简单正则表达式讲座 024
2.2.3 yacc 026
2.2.4 生成执行文件 033
2.2.5 理解冲突所代表的含义 034
2.2.6 错误处理 040
2.3 不借助工具编写计算器 041
2.3.1 自制词法分析器 041
补充知识 保留字(关键字) 046
补充知识 避免重复包含 047
2.3.2 自制语法分析器 048
补充知识 预读记号的处理 053
2.4 少许理论知识——LL(1)与LALR(1) 054
补充知识 Pascal/C中的语法处理诀窍 056
2.5 习题:扩展计算器 056
2.5.1 让计算器支持括号 056
2.5.2 让计算器支持负数 058
第3章 制作无类型语言crowbar 061
3.1 制作crowbarver.0.1 语言的基础部分 062
3.1.1 crowbar是什么 062
3.1.2 程序的结构 063
3.1.3 数据类型 064
3.1.4 变量 064
补充知识 初次赋值兼做变量声明的理由 066
补充说明 各种语言的全局变量处理 067
3.1.5 语句与结构控制 067
补充知识 elif、elsif、elseif的选择 068
3.1.6 语句与运算符 069
3.1.7 内置函数 069
3.1.8 让crowbar支持C语言调用 070
3.1.9 从crowbar中调用C语言(内置函数的编写) 071
3.2 预先准备 071
3.2.1 模块与命名规则 072
3.2.2 内存管理模块MEM 073
补充知识 valgrind 075
补充知识 富翁式编程 075
补充知识 符号表与扣留操作 076
3.2.3 调试模块DBG 076
3.3 crowbarver.0.1 的实现 077
3.3.1 crowbar的解释器——CRB_Interpreter 077
补充知识 不完全类型 080
3.3.2 词法分析——crowbar.l 081
补充知识 静态变量的许可范围 084
3.3.3 分析树的构建——crowbar.y与create.c 085
3.3.4 常量折叠 089
3.3.5 错误信息 089
补充知识 关于crowbar中使用的枚举型定义 091
3.3.6 运行——execute.c 092
3.3.7 表达式评估——eval.c 096
3.3.8 值——CRB_Value 104
3.3.9 原生指针型 105
3.3.1 0变量 106
3.3.1 1字符串与垃圾回收机制——string_pool.c 108
3.3.1 2编译与运行 110
第4章 数组和mark-sweep垃圾回收器 113
4.1 crowbarver. 0.2 114
4.1.1 crowbar的数组 114
4.1.2 访问数组元素 115
4.1.3 数组是一种引用类型 116
补充知识 “数组的数组”和多维数组 116
4.1.4 为数组添加元素 118
4.1.5 增加(模拟)函数调用功能 118
4.1.6 其他细节 118
4.2 制作mark-sweepGC 119
4.2.1 引用数据类型的结构 119
4.2.2 mark-sweepGC 121
补充知识 引用和immutable 123
4.2.3 crowbar栈 124
4.2.4 其他根 127
4.2.5 原生函数的形式参数 128
4.3 实现GC本身 129
4.3.1 对象的管理方法 129
4.3.2 GC何时启动 129
4.3.3 sweep阶段 132
补充知识 GC现存的问题 133
补充知识 CopingGC 134
4.4 其他修改 136
4.4.1 修改语法 136
4.4.2 函数的模拟 137
4.4.3 左值的处理 139
4.4.4 创建数组和原生函数的书写方法 142
4.4.5 原生指针类型的修改 144
第5章 中文支持和Unicode 147
5.1 中文支持策略和基础知识 148
5.1.1 现存问题 148
5.1.2 宽字符(双字节)串和多字节字符串 149
补充知识 wchar_t肯定能表示1个字符吗? 150
5.1.3 多字节字符/宽字符之间的转换函数群 150
5.2 Unicode 153
5.2.1 Unicode的历史 153
5.2.2 Unicode的编码方式 154
补充知识 Unicode可以固定(字节)长度吗? 156
5.3 crowbarbook_ver.0.3 的实现 156
5.3.1 要实现到什么程度? 156
5.3.2 发起转换的时机 157
5.3.3 关于区域设置 158
5.3.4 解决0x5C问题 158
补充知识 失败的#ifdef 160
5.3.5 应该是什么样子 160
补充知识 还可以是别的样子——CodeSetIndependent 161
第6章 制作静态类型的语言Diksam 163
6.1 制作DiksamVer0.1 语言的基本部分 164
6.1.1 Diksam的运行状态 164
6.1.2 什么是Diksam 165
6.1.3 程序结构 165
6.1.4 数据类型 166
6.1.5 变量 166
6.1.6 语句和流程控制 167
6.1.7 表达式 167
6.1.8 内建函数 168
6.1.9 其他 168
6.2 什么是静态的/执行字节码的语言 169
6.2.1 静态类型的语言 169
6.2.2 什么是字节码 169
6.2.3 将表达式转换为字节码 170
6.2.4 将控制结构转换为字节码 173
6.2.5 函数的实现 173
6.3 Diksamver.0.1 的实现——编译篇 175
6.3.1 目录结构 175
6.3.2 编译的概要 176
6.3.3 构建分析树(create.c) 176
6.3.4 修正分析树(fix_tree.c) 179
6.3.5 Diksam的运行形式——DVM_Executable 185
6.3.6 常量池 186
补充知识 YARV的情况 187
6.3.7 全局变量 188
6.3.8 函数 189
6.3.9 顶层结构的字节码 189
6.3.1 0行号对应表 190
6.3.1 1栈的需要量 190
6.3.1 2生成字节码(generate.c) 191
6.3.1 3生成实际的编码 193
6.4 Diksam虚拟机 197
6.4.1 加载/链接DVM_Executable到DVM 200
6.4.2 执行——巨大的switchcase 202
6.4.3 函数调用 204
第7章 为Diksam引入数组 207
7.1 Diksam中数组的设计 208
7.1.1 声明数组类型的变量 208
7.1.2 数组常量 209
补充知识 D语言的数组 210
7.2 修改编译器 210
7.2.1 数组的语法规则 210
7.2.2 TypeSpecifier结构体 212
7.3 修改DVM 213
7.3.1 增加指令 213
补充知识 创建Java的数组常量 215
补充知识 C语言中数组的初始化 217
7.3.2 对象 217
补充知识 ArrayStoreException 218
7.3.3 增加null 219
7.3.4 哎!还缺点什么吧? 219
第8章 将类引入Diksam 221
8.1 分割源文件 222
8.1.1 包和分割源代码 222
补充知识 #include、文件名、行号 225
8.1.2 DVM_ExecutableList 225
8.1.3 ExecutableEntry 226
8.1.4 分开编译源代码 227
8.1.5 加载和再链接 230
补充知识 动态加载时的编译器 233
8.2 设计Diksam中的类 233
8.2.1 超简单的面向对象入门 233
8.2.2 类的定义和实例创建 237
8.2.3 继承 239
8.2.4 关于接口 241
8.2.5 编译与接口 242
8.2.6 Diksam怎么会设计成这样? 243
8.2.7 数组和字符串的方法 245
8.2.8 检查类的类型 246
8.2.9 向下转型 246
8.3 关于类的实现——继承和多态 247
8.3.1 字段的内存布局 247
8.3.2 多态——以单继承为前提 249
8.3.3 多继承——C++ 250
8.3.4 Diksam的多继承 252
补充知识 无类型语言中的继承 254
8.3.5 重写的条件 254
8.4 关于类的实现 256
8.4.1 语法规则 256
8.4.2 编译时的数据结构 258
8.4.3 DVM_Executable中的数据结构 260
8.4.4 与类有关的指令 262
补充知识 方法调用、括号和方法指针 263
8.4.5 方法调用 264
8.4.6 super 266
8.4.7 类的链接 266
8.4.8 实现数组和字符串的方法 267
8.4.9 类型检查和向下转型 267
补充知识 对象终结器(finalizer)和析构函数(destructor) 268
第9章 应用篇 271
9.1 为crowbar引入对象和闭包 272
9.1.1 crowbar的对象 272
9.1.2 对象实现 273
9.1.3 闭包 274
9.1.4 方法 276
9.1.5 闭包的实现 278
9.1.6 试着跟踪程序实际执行时的轨迹 281
9.1.7 闭包的语法规则 284
9.1.8 普通函数 284
9.1.9 模拟方法(修改版) 285
9.1.1 0基于原型的面向对象 286
9.2 异常处理机制 286
9.2.1 为crowbar引入异常 286
9.2.2 setjmp()/longjmp() 289
补充知识 Java和C#异常处理的不同 293
9.2.3 为Diksam引入异常 295
补充知识 catch的编写方法 296
9.2.4 异常的数据结构 297
9.2.5 异常处理时生成的字节码 299
9.2.6 受查异常 301
补充知识 受查异常的是与非 303
补充知识 异常处理本身的是与非 304
9.3 构建脚本 305
9.3.1 基本思路 306
9.3.2 YY_INPUT 307
9.3.3 Diksam的构建脚本 308
9.3.4 三次加载/链接 308
9.4 为crowbar引入鬼车 309
9.4.1 关于“鬼车” 309
9.4.2 正则表达式常量 310
9.4.3 正则表达式的相关函数 311
9.5 其他 312
9.5.1 foreach和迭代器(crowbar) 312
9.5.2 switchcase(Diksam) 314
9.5.3 enum(Diksam) 315
9.5.4 delegate(Diksam) 316
9.5.5 final、const(Diksam) 319
附录A crowbar语言的设计 322
附录B Diksam语言的设计 336
附录C DiksamVirtualMachine指令集 359
编程语言实用化指南——写在最后 369
参考文献 375
算法 第4版-谢路云译-带完整书签
本书带完整书签
第1章 基础 1
1.1 基础编程模型 4
1.1.1 Java程序的基本结构 4
1.1.2 原始数据类塑与表达式 6
1.1.3 语句 8
1.1.4 简便记法 9
1.1.5 数组 10
1.1.6 静态方法 12
1.1.7 API 16
1.1.8 字符串 20
1.1.9 输入输出 21
1.1.10 二分査找 28
1.1.11 展望 30
1.2 数据抽象 38
1.2.1 使用抽象数据类型 38
1.2.2 抽象数据类型举例 45
1.2.3 抽象教据类型的实现 52
1.2.4 更多抽象数据类型的实现 55
1.2.5 数据类型的设计 60
1.3 背包、队列和栈 74
1.3.1 API 74
1.3.2 集合类數据类型的实现 81
1.3.3 链表 89
1.3.4 综述 98
1.4 算法分析 108
1.4.1 科学方法 108
1.4.2 观察 108
1.4.3 数学模型 112
1.4.4 增长数量级的分类 117
1.4.5 设计更快的算法 118
1.4.6 倍率实验 121
1.4.7 注意事项 123
1.4.8 处理对于输入的依赖 124
1.4.9 内存 126
1.4.10 展望 129
1.5 案例研究:union-find算法 136
1.5.1 动态连通性 136
1.5.2 实现 140
1.5.3 展望 148
第2章 排序 152
2.1 初级排序算法 153
2.1.1 游戏规则 153
2.1.2 选择排序 155
2.1.3 插入排序 157
2.1.4 排序算法的可视化 159
2.1.5 比较两种排序算法 159
2.1.6 希尔排序 162
2.2 归并排序 170
2.2.1 原地归并的抽象方法 170
2.2.2 自顶向下的归并排序 171
2.2.3 自底向上的归并排序 175
2.2.4 排序算法的复杂度 177
2.3 快速排序 182
2.3.1 基本算法 182
2.3.2 性能特点 185
2.3.3 算法改进 187
2.4 优先队列 195
2.4.1 API 195
2.4.2 初级实现 197
2.4.3 堆的定义 198
2.4.4 堆的算法 199
2.4.5 堆排序 205
2.5 应用 214
2.5.1 将各种數据排序 214
2.5.2 我应该使用啷种排序算法 218
2.5.3 问题的归约 219
2.5.4 排序应用一览 221
第3章查找 227
3.1 符号表 228
3.1.1 API 228
3.1.2 有序符号表 230
3.1.3 用例举例 233
3.1.4 无序链表中的顺序查找 235
3.1.5 有序數组中的二分查找 238
3.1.6 对二分査找的分析 242
3.1.7 预览 244
3.2 二叉查找树 250
3.2.1 基本实现 250
3.2.2 分析 255
3.2.3 有序性相关的方法与删除操作 257
3.3 平衡査找树 269
3.3.1 2-3査找树 269
3.3.2 红黑二叉查找树 275
3.3.3 实现 280
3.3.4 删除操作 282
3.3.5 红黑树的性质 284
3.4 散列表 293
3.4.1 散列函数 293
3.4.2 基于拉链法的散列表 297
3.4.3 基于线性探测法的散列表 300
3.4.4 调整教组大小 304
3.4.5 内存使用 306
3.5 应用 312
3.5.1 我应该使用符号表的哪种实现 312
3.5.2 集合的API 313
3.5.3 字典类用例 315
3.5.4 索引类用例 318
3.5.5 稀疏向量 322
第4章 图 329
4.1 无向图 331
4.1.1 术语表 331
4.1.2 表示无向图的数据类型 333
4.1.3 深度优先搜索 338
4.1.4 寻找路径 342
4.1.5 广度优先搜索 344
4.1.6 连通分量 349
4.1.7 符号图 352
4.1.8 总结 358
4.2 有向图 364
4.2.1 术语 364
4.2.2 有向图的数据类型 365
4.2.3 有向图中的可达性 367
4.2.4 环和有向无环图 369
4.2.5 有向图中的强连通性 378
4.2.6 总结 385
4.3 最小生成树 390
4.3.1 原理- 391
4.3.2 加权无向图的数据类型 393
4.3.3 最小生成树的API和测试用例 396
4.3.4 Prim算法 398
4.3.5 Prim算法的即时实现 401
4.3.6 Kruskal算法 404
4.3.7 展望 407
4.4 最短路径 412
4.4.1 最短路径的性质 413
4.4.2 加权有向图的数据结构 414
4.4.3 最短路径算法的理论基础 420
4.4.4 Dijkstra算法 421
4.4.5 无环加权有向图中的最短路径算法 425
4.4.6 一般加权有向图中的最短路径问题 433
4.4.7 展望 445
第5章 字符串 451
5.1 字符串排序 455
5.1.1 键索引计数法 455
5.1.2 低位优先的字符串排序 458
5.1.3 高位优先的字符串排序 461
5.1.4 三向字符串快速排序 467
5.1.5 字符串排序算法的选择 470
5.2 单词查找树 474
5.2.1 单词查找树 475
5.2.2 单词查找树的性质 483
5.2.3 三向单词查找树 485
5.2.4 三向单词查找树的性质 487
5.2.5 应该使用字符串符号表的哪种实现 489
5.3 子字符串查找 493
5.3.1 历史简介 493
5.3.2 暴力子字符串査找算法 494
5.3.3 Knuth-Morris-Pratt子字符串查找算法 496
5.3.4 Boyer-Moore字符串查找算法 502
5.3.5 Rabin-Karp指纹字符串查找算法 505
5.3.6 总结 509
5.4 正则表达式 514
5.4.1 使用正则表达式描述模式 514
5.4.2 缩略写法 516
5.4.3 正则表达式的实际应用 517
5.4.4 非确定有限状态自动机 518
5.4.5 模拟NFA的运行 520
5.4.6 构造与正则表达式对应的NFA 522
5.5 数据压缩 529
5.5.1 游戏规则 529
5.5.2 读写二进制数据 530
5.5.3 局限 533
5.5.4 热身运动:基因组 534
5.5.5 游程编码 537
5.5.6 霍夫曼压缩 540
第6章背景 558
索引 611