Hadoop权威指南大数据的存储与分析 第4版
第Ⅰ部分Hadoop基础知识
第1章初识Hadoop3
1.1数据!数据!3
1.2数据的存储与分析5
1.3查询所有数据6
1.4不仅仅是批处理7
1.5相较于其他系统的优势8
1.6ApacheHadoop发展简史12
1.7本书包含的内容16
第2章关于MapReduce19
2.1气象数据集19
2.2使用Unix工具来分析数据21
2.3使用Hadoop来分析数据22
2.4横向扩展31
2.5HadoopStreaming37
第3章Hadoop分布式文件系统42
3.1HDFS的设计42
3.2HDFS的概念44
3.3命令行接口50
3.4Hadoop文件系统52
3.5Java接口56
3.6数据流68
3.7通过distcp并行复制76
第4章关于YARN78
4.1剖析YARN应用运行机制79
4.2YARN与MapReduce1相比82
4.3YARN中的调度85
4.4延伸阅读95
第5章Hadoop的I/O操作96
5.1数据完整性96
5.2压缩99
5.3序列化109
5.4基于文件的数据结构127
第Ⅱ部分关于MapReduce
第6章MapReduce应用开发141
6.1用于配置的API142
6.2配置开发环境144
6.3用MRUnit来写单元测试152
6.4本地运行测试数据156
6.5在集群上运行160
6.6作业调优174
6.7MapReduce的工作流176
第7章MapReduce的工作机制184
7.1剖析MapReduce作业运行
机制184
7.2失败191
7.3shuffle和排序195
7.4任务的执行201
第8章MapReduce的
类型与格式207
8.1MapReduce的类型207
8.2输入格式218
8.3输出格式236
第9章MapReduce的特性243
9.1计数器243
9.2排序252
9.3连接264
9.4边数据分布270
9.5MapReduce库类276
第Ⅲ部分Hadoop的操作
第10章构建Hadoop集群279
10.1集群规范280
10.2集群的构建和安装284
10.3Hadoop配置288
10.4安全性305
10.5利用基准评测程序测试
Hadoop集群311
第11章管理Hadoop314
11.1HDFS314
11.2监控327
11.3维护329
第Ⅳ部分Hadoop相关开源项目
第12章关于Avro341
12.1Avro数据类型和模式342
12.2内存中的序列化和
反序列化特定API347
12.3Avro数据文件349
12.4互操作性351
12.5模式解析352
12.6排列顺序354
12.7关于AvroMapReduce356
12.8使用AvroMapReduce
进行排序359
12.9其他语言的Avro362
第13章关于Parquet363
13.1数据模型364
13.2Parquet文件格式367
13.3Parquet的配置368
13.4Parquet文件的读/写369
13.5ParquetMapReduce374
第14章关于Flume377
14.1安装Flume378
14.2示例378
14.3事务和可靠性380
14.4HDFSSink382
14.5扇出385
14.6通过代理层分发387
14.7Sink组391
14.8Flume与应用程序的集成395
14.9组件编目395
14.10延伸阅读397
第15章关于Sqoop398
15.1获取Sqoop398
15.2Sqoop连接器400
15.3一个导入的例子401
15.4生成代码404
15.5深入了解数据库导入405
15.6使用导入的数据409
15.7导入大对象412
15.8执行导出414
15.9深入了解导出功能416
15.10延伸阅读419
第16章关于Pig420
16.1安装与运行Pig421
16.2示例425
16.3与数据库进行比较428
16.4PigLatin429
16.5用户自定义函数446
16.6数据处理操作455
16.7Pig实战465
16.8延伸阅读468
第17章关于Hive469
17.1安装Hive470
17.2示例472
17.3运行Hive473
17.4Hive与传统数据库相比480
17.5HiveQL483
17.6表488
17.7查询数据501
17.8用户定义函数508
17.9延伸阅读516
第18章关于Crunch517
18.1示例518
18.2Crunch核心API521
18.3管线执行537
18.4Crunch库545
18.5延伸阅读547
第19章关于Spark548
19.1安装Spark549
19.2示例549
19.3弹性分布式数据集555
19.4共享变量564
19.5剖析Spark作业运行机制565
19.6执行器和集群管理器570
19.7延伸阅读574
第20章关于HBase575
20.1HBase基础575
20.2概念576
20.3安装581
20.4客户端584
20.5创建在线查询应用589
20.6HBase和RDBMS的比较598
20.7Praxis601
20.8延伸阅读602
第21章关于ZooKeeper604
21.1安装和运行ZooKeeper605
21.2示例607
21.3ZooKeeper服务615
21.4使用ZooKeeper来构建
应用629
21.5生产环境中的ZooKeeper640
21.6延伸阅读643
第Ⅴ部分案例学习
第22章医疗公司塞纳(Cerner)
的可聚合数据647
22.1从多CPU到语义集成647
22.2进入ApacheCrunch648
22.3建立全貌649
22.4集成健康医疗数据651
22.5框架之上的可组合性654
22.6下一步655
第23章生物数据科学:
用软件拯救生命657
23.1DNA的结构659
23.2遗传密码:将DNA字符
转译为蛋白质660
22.3将DNA想象成源代码661
23.4人类基因组计划和参考
基因组663
22.5DNA测序和比对664
23.6ADAM,一个可扩展的
基因组分析平台666
23.7使用Avro接口描述语言进行
自然语言编程666
23.8使用Parquet进行面向列的
存取668
23.9一个简单例子:用Spark和
ADAM做k-mer计数669
23.10从个性化广告到个性化
医疗672
23.11联系我们673
第24章开源项目Cascading674
24.1字段、元组和管道675
24.2操作678
24.3Taps,Schemes和Flows680
24.4Cascading实践应用681
24.5灵活性684
24.6ShareThis中的Hadoop和
Cascading685
24.7总结689
附录A安装ApacheHadoop691
附录B关于CDH697
附录C准备NCDC气象数据699
附录D新版和旧版Java
MapReduceAPI702
汇编语言 基于x86处理器
出版者的话
译者序
前言
第1章 基本概念 1
1.1 欢迎来到汇编语言的世界 1
1.1.1 读者可能会问的问题 2
1.1.2 汇编语言的应用 4
1.1.3 本节回顾 5
1.2 虚拟机概念 5
1.3 数据表示 7
1.3.1 二进制整数 7
1.3.2 二进制加法 8
1.3.3 整数存储大小 9
1.3.4 十六进制整数 10
1.3.5 十六进制加法 11
1.3.6 有符号二进制整数 12
1.3.7 二进制减法 13
1.3.8 字符存储 14
1.3.9 本节回顾 15
1.4 布尔表达式 16
1.4.1 布尔函数真值表 18
1.4.2 本节回顾 18
1.5 本章小结 19
1.6 关键术语 19
1.7 复习题和练习 20
1.7.1 简答题 20
1.7.2 算法基础 21
第2章 x86处理器架构 23
2.1 一般概念 23
2.1.1 基本微机设计 23
2.1.2 指令执行周期 24
2.1.3 读取内存 25
2.1.4 加载并执行程序 26
2.1.5 本节回顾 26
2.2 32位x86处理器 27
2.2.1 操作模式 27
2.2.2 基本执行环境 27
2.2.3 x86内存管理 30
2.2.4 本节回顾 30
2.3 64位x86-64处理器 30
2.3.1 64位操作模式 31
2.3.2 基本64位执行环境 31
2.4 典型x86计算机组件 32
2.4.1 主板 32
2.4.2 内存 34
2.4.3 本节回顾 34
2.5 输入输出系统 34
2.5.1 I/O访问层次 34
2.5.2 本节回顾 36
2.6 本章小结 36
2.7 关键术语 37
2.8 复习题 38
第3章 汇编语言基础 39
3.1 基本语言元素 39
3.1.1 第一个汇编语言程序 39
3.1.2 整数常量 40
3.1.3 整型常量表达式 41
3.1.4 实数常量 41
3.1.5 字符常量 42
3.1.6 字符串常量 42
3.1.7 保留字 42
3.1.8 标识符 43
3.1.9 伪指令 43
3.1.10 指令 44
3.1.11 本节回顾 46
3.2 示例:整数加减法 46
3.2.1 AddTwo程序 46
3.2.2 运行和调试AddTwo程序 48
3.2.3 程序模板 52
3.2.4 本节回顾 52
3.3 汇编、链接和运行程序 53
3.3.1 汇编–链接–执行周期 53
3.3.2 列表文件 53
3.3.3 本节回顾 55
3.4 定义数据 55
3.4.1 内部数据类型 55
3.4.2 数据定义语句 55
3.4.3 向AddTwo程序添加一个变量 56
3.4.4 定义BYTE和SBYTE数据 57
3.4.5 定义WORD和SWORD数据 59
3.4.6 定义DWORD和SDWORD数据 59
3.4.7 定义QWORD数据 60
3.4.8 定义压缩BCD(TBYTE)数据 60
3.4.9 定义浮点类型 61
3.4.10 变量加法程序 61
3.4.11 小端顺序 62
3.4.12 声明未初始化数据 62
3.4.13 本节回顾 63
3.5 符号常量 63
3.5.1 等号伪指令 63
3.5.2 计算数组和字符串的大小 64
3.5.3 EQU伪指令 65
3.5.4 TEXTEQU伪指令 66
3.5.5 本节回顾 66
3.6 64位编程 67
3.7 本章小结 68
3.8 关键术语 69
3.8.1 术语 69
3.8.2 指令、运算符和伪指令 70
3.9 复习题和练习 70
3.9.1 简答题 70
3.9.2 算法基础 71
3.10 编程练习 71
第4章 数据传送、寻址和算术运算 73
4.1 数据传送指令 73
4.1.1 引言 73
4.1.2 操作数类型 73
4.1.3 直接内存操作数 74
4.1.4 MOV指令 75
4.1.5 整数的全零/符号扩展 76
4.1.6 LAHF和SAHF指令 77
4.1.7 XCHG指令 78
4.1.8 直接–偏移量操作数 78
4.1.9 示例程序(Moves) 79
4.1.10 本节回顾 80
4.2 加法和减法 81
4.2.1 INC和DEC指令 81
4.2.2 ADD指令 81
4.2.3 SUB指令 81
4.2.4 NEG指令 82
4.2.5 执行算术表达式 82
4.2.6 加减法影响的标志位 82
4.2.7 示例程序(AddSubTest) 85
4.2.8 本节回顾 86
4.3 与数据相关的运算符和伪指令 87
4.3.1 OFFSET运算符 87
4.3.2 ALIGN伪指令 88
4.3.3 PTR运算符 88
4.3.4 TYPE运算符 89
4.3.5 LENGTHOF运算符 89
4.3.6 SIZEOF运算符 90
4.3.7 LABEL伪指令 90
4.3.8 本节回顾 90
4.4 间接寻址 91
4.4.1 间接操作数 91
4.4.2 数组 91
4.4.3 变址操作数 92
4.4.4 指针 93
4.4.5 本节回顾 95
4.5 JMP和LOOP指令 95
4.5.1 JMP指令 96
4.5.2 LOOP指令 96
4.5.3 在Visual Studio调试器中显示数组 97
4.5.4 整数数组求和 98
4.5.5 复制字符串 98
4.5.6 本节回顾 99
4.6 64位编程 99
4.6.1 MOV指令 99
4.6.2 64位的SumArray程序 100
4.6.3 加法和减法 101
4.6.4 本节回顾 102
4.7 本章小结 102
4.8 关键术语 104
4.8.1 术语 104
4.8.2 指令、运算符和伪指令 104
4.9 复习题和练习 104
4.9.1 简答题 104
4.9.2 算法基础 106
4.10 编程练习 107
第5章 过程 108
5.1 堆栈操作 108
5.1.1 运行时堆栈(32位模式) 108
5.1.2 PUSH和POP指令 110
5.1.3 本节回顾 112
5.2 定义并使用过程 112
5.2.1 PROC伪指令 112
5.2.2 CALL和RET指令 114
5.2.3 过程调用嵌套 115
5.2.4 向过程传递寄存器参数 116
5.2.5 示例:整数数组求和 116
5.2.6 保存和恢复寄存器 118
5.2.7 本节回顾 119
5.3 链接到外部库 119
5.3.1 背景知识 119
5.3.2 本节回顾 120
5.4 Irvine32链接库 120
5.4.1 创建库的动机 120
5.4.2 概述 122
5.4.3 过程详细说明 123
5.4.4 库测试程序 133
5.4.5 本节回顾 139
5.5 64位汇编编程 139
5.5.1 Irvine64链接库 139
5.5.2 调用64位子程序 140
5.5.3 x64调用规范 140
5.5.4 调用过程示例 141
5.6 本章小结 142
5.7 关键术语 143
5.7.1 术语 143
5.7.2 指令、运算符和伪指令 143
5.8 复习题和练习 143
5.8.1 简答题 143
5.8.2 算法基础 146
5.9 编程练习 146
第6章 条件处理 148
6.1 条件分支 148
6.2 布尔和比较指令 148
6.2.1 CPU状态标志 149
6.2.2 AND指令 149
6.2.3 OR指令 150
6.2.4 位映射集 151
6.2.5 XOR指令 152
6.2.6 NOT指令 153
6.2.7 TEST指令 153
6.2.8 CMP指令 154
6.2.9 置位和清除单个CPU标志位 155
6.2.10 64位模式下的布尔指令 155
6.2.11 本节回顾 156
6.3 条件跳转 156
6.3.1 条件结构 156
6.3.2 Jcond指令 156
6.3.3 条件跳转指令类型 157
6.3.4 条件跳转应用 159
6.3.5 本节回顾 163
6.4 条件循环指令 163
6.4.1 LOOPZ和LOOPE指令 163
6.4.2 LOOPNZ和LOOPNE指令 164
6.4.3 本节回顾 164
6.5 条件结构 164
6.5.1 块结构的IF语句 165
6.5.2 复合表达式 167
6.5.3 WHILE循环 168
6.5.4 表驱动选择 169
6.5.5 本节回顾 171
6.6 应用:有限状态机 172
6.6.1 验证输入字符串 172
6.6.2 验证有符号整数 172
6.6.3 本节回顾 176
6.7 条件控制流伪指令 176
Java 8函数式编程
前言
第1章 简介
1.1 为什么需要再次修改Java
1.2 什么是函数式编程
1.3 示例
第2章 Lambda 表达式
2.1 第一个Lambda 表达式
2.2 如何辨别Lambda 表达式
2.3 引用值,而不是变量
2.4 函数接口
2.5 类型推断
2.6 要点回顾
2.7 练习
第3章 流
3.1 从外部迭代到内部迭代
3.2 实现机制
3.3 常用的流操作
3.3.1 collect(toList())
3.3.2 map
3.3.3 filter
3.3.4 flatMap
3.3.5 max 和min
3.3.6 通用模式
3.3.7 reduce
3.3.8 整合操作
3.4 重构遗留代码
3.5 多次调用流操作
3.6 高阶函数
3.7 正确使用Lambda 表达式
3.8 要点回顾
3.9 练习
3.10 进阶练习
第4章 类库
4.1 在代码中使用Lambda 表达式
4.2 基本类型
4.3 重载解析
4.4 @FunctionalInterface
4.5 二进制接口的兼容性
4.6 默认方法
4.7 多重继承
4.8 权衡
4.9 接口的静态方法
4.10 Optional
4.11 要点回顾
4.12 练习
4.13 开放练习
第5章 高级集合类和收集器
5.1 方法引用
5.2 元素顺序
5.3 使用收集器
5.3.1 转换成其他集合
5.3.2 转换成值
5.3.3 数据分块
5.3.4 数据分组
5.3.5 字符串
5.3.6 组合收集器
5.3.7 重构和定制收集器
5.3.8 对收集器的归一化处理
5.4 一些细节
5.5 要点回顾
5.6 练习
第6章 数据并行化
6.1 并行和并发
6.2 为什么并行化如此重要
6.3 并行化流操作
6.4 模拟系统
6.5 限制
6.6 性能
6.7 并行化数组操作
6.8 要点回顾
6.9 练习
第7章 测试、调试和重构
7.1 重构候选项
7.1.1 进进出出、摇摇晃晃
7.1.2 孤独的覆盖
7.1.3 同样的东西写两遍
7.2 Lambda 表达式的单元测试
7.3 在测试替身时使用Lambda 表达式
7.4 惰性求值和调试
7.5 日志和打印消息
7.6 解决方案:peak
7.7 在流中间设置断点
7.8 要点回顾
第8章 设计和架构的原则
8.1 Lambda 表达式改变了设计模式
8.1.1 命令者模式
8.1.2 策略模式
8.1.3 观察者模式
8.1.4 模板方法模式
8.2 使用Lambda 表达式的领域专用语言
8.2.1 使用Java 编写DSL
8.2.2 实现
8.2.3 评估
8.3 使用Lambda 表达式的SOLID 原则
8.3.1 单一功能原则
8.3.2 开闭原则
8.3.3 依赖反转原则
8.4 进阶阅读
8.5 要点回顾
第9章 使用Lambda 表达式编写并发程序
9.1 为什么要使用非阻塞式I/O
9.2 回调
9.3 消息传递架构
9.4 末日金字塔
9.5 Future
9.6 CompletableFuture
9.7 响应式编程
9.8 何时何地使用新技术
9.9 要点回顾
9.10 练习
第10章 下一步该怎么办
封面介绍
Java虚拟机规范 Java SE 8版
译者序
前言
第1章 引言
1.1 简史
1.2 Java虚拟机
1.3 各章节摘要
1.4 说明
1.5 反馈
第2章 Java虚拟机结构
2.1 class文件格式
2.2 数据类型
2.3 原始类型与值
2.3.1 整数类型与整型值
2.3.2 浮点类型、取值集合及浮点值
2.3.3 returnAddress类型和值
2.3.4 boolean类型
2.4 引用类型与值
2.5 运行时数据区
2.5.1 pc寄存器
2.5.2 Java虚拟机栈
2.5.3 Java堆
2.5.4 方法区
2.5.5 运行时常量池
2.5.6 本地方法栈
2.6 栈帧
2.6.1 局部变量表
2.6.2 操作数栈
2.6.3 动态链接
2.6.4 方法调用正常完成
2.6.5 方法调用异常完成
2.7 对象的表示
2.8 浮点算法
2.8.1 Java虚拟机和IEEE,754中的浮点算法
2.8.2 浮点模式
2.8.3 数值集合转换
2.9 特殊方法
2.10 异常
2.11 字节码指令集简介
2.11.1 数据类型与Java虚拟机
2.11.2 加载和存储指令
2.11.3 算术指令
2.11.4 类型转换指令
2.11.5 对象的创建与操作
2.11.6 操作数栈管理指令
2.11.7 控制转移指令
2.11.8 方法调用和返回指令
2.11.9 抛出异常
2.11.10 同步
2.12 类库
2.13 公有设计、私有实现
第3章 Java虚拟机编译器
3.1 示例的格式说明
3.2 常量、局部变量和控制结构的使用
3.3 算术运算
3.4 访问运行时常量池
3.5 与控制结构有关的更多示例
3.6 接收参数
3.7 方法调用
3.8 使用类实例
3.9 数组
3.10 编译switch语句
3.11 使用操作数栈
3.12 抛出异常和处理异常
3.13 编译finally语句块
3.14 同步
3.15 注解
第4章 class文件格式
4.1 ClassFile结构
4.2 各种名称的内部表示形式
4.2.1 类和接口的二进制名称
4.2.2 非限定名
4.3 描述符
4.3.1 语法符号
4.3.2 字段描述符
4.3.3 方法描述符
4.4 常量池
4.4.1 CONSTANT_Class_info结构
4.4.2 CONSTANT_Fieldref_info、CONSTANT_Methodref_info和CONSTANT_InterfaceMethodref_info结构
4.4.3 CONSTANT_String_info结构
4.4.4 CONSTANT_Integer_info和CONSTANT_Float_info结构
4.4.5 CONSTANT_Long_info和CONSTANT_Double_info结构
4.4.6 CONSTANT_NameAnd-Type_info结构
4.4.7 CONSTANT_Utf8_info结构
4.4.8 CONSTANT_MethodHandle_info结构
4.4.9 CONSTANT_MethodType_info结构
4.4.10 CONSTANT_Invoke-Dynamic_info结构
4.5 字段
4.6 方法
4.7 属性
4.7.1 自定义和命名新的属性
4.7.2 ConstantValue属性
4.7.3 Code属性
4.7.4 StackMapTable属性
4.7.5 Exceptions属性
4.7.6 InnerClasses属性
4.7.7 EnclosingMethod属性
4.7.8 Synthetic属性
4.7.9 Signature属性
4.7.10 SourceFile属性
4.7.11 SourceDebugExtension属性
4.7.12 LineNumberTable属性
4.7.13 LocalVariableTable属性
4.7.14 LocalVariableTypeTable属性
4.7.15 Deprecated属性
4.7.16 RuntimeVisibleAnnota-tions属性
4.7.17 RuntimeInvisible-Annotations属性
4.7.18 RuntimeVisibleParameterAnnotations属性
4.7.19 RuntimeInvisiblePara-meterAnnotations属性
4.7.20 RuntimeVisibleTypeAnnotations属性
4.7.21 RuntimeInvisibleType-Annotations属性
4.7.22 AnnotationDefault属性
4.7.23 BootstrapMethods属性
4.7.24 MethodParameters属性
4.8 格式检查
4.9 Java虚拟机代码约束
4.9.1 静态约束
4.9.2 结构化约束
4.10 class文件校验
4.10.1 类型检查验证
4.10.2 类型推导验证
4.11 Java虚拟机限制
第5章 加载、链接与初始化
5.1 运行时常量池
5.2 虚拟机启动
5.3 创建和加载
5.3.1 使用引导类加载器来加载类型
5.3.2 使用用户自定义类加载器来加载类型
5.3.3 创建数组类
5.3.4 加载限制
5.3.5 从class文件表示得到类
5.4 链接
5.4.1 验证
5.4.2 准备
5.4.3 解析
5.4.4 访问控制
5.4.5 方法覆盖
5.5 初始化
5.6 绑定本地方法实现
5.7 Java虚拟机退出
第6章 Java虚拟机指令集
6.1 设定:“必须”的含义
6.2 保留操作码
6.3 虚拟机错误
6.4 指令描述格式
6.5 指令集描述
第7章 操作码助记符
附录A Limited License Grant
Spring实战(第4版)
第1部分 Spring的核心
第1章 Spring之旅 3
1.1 简化Java开发 4
1.1.1 激发POJO的潜能 5
1.1.2 依赖注入 5
1.1.3 应用切面 11
1.1.4 使用模板消除样板式代码 16
1.2 容纳你的Bean 18
1.2.1 使用应用上下文 19
1.2.2 bean的生命周期 20
1.3 俯瞰Spring风景线 21
1.3.1 Spring模块 22
1.3.2 Spring Portfolio 24
1.4 Spring的新功能 27
1.4.1 Spring 3.1新特性 27
1.4.2 Spring 3.2新特性 28
1.4.3 Spring 4.0新特性 30
1.5 小结 30
第2章 装配Bean 33
2.1 Spring配置的可选方案 34
2.2 自动化装配bean 35
2.2.1 创建可被发现的bean 35
2.2.2 为组件扫描的bean命名 38
2.2.3 设置组件扫描的基础包 39
2.2.4 通过为bean添加注解实现自动装配 40
2.2.5 验证自动装配 42
2.3 通过Java代码装配
bean 44
2.3.1 创建配置类 44
2.3.2 声明简单的bean 45
2.3.3 借助JavaConfig实现注入 46
2.4 通过XML装配bean 48
2.4.1 创建XML配置规范 48
2.4.2 声明一个简单的
49
2.4.3 借助构造器注入初始化bean 50
2.4.4 设置属性 56
2.5 导入和混合配置 61
2.5.1 在JavaConfig中引用XML配置 61
2.5.2 在XML配置中引用JavaConfig 63
2.6 小结 65
第3章 高级装配 67
3.1 环境与profile 67
3.1.1 配置profile bean 69
3.1.2 激活profile 73
3.2 条件化的bean 75
3.3 处理自动装配的歧义性 78
3.3.1 标示首选的bean 79
3.3.2 限定自动装配的bean 80
3.4 bean的作用域 84
3.4.1 使用会话和请求作用域 86
3.4.2 在XML中声明作用域代理 88
3.5 运行时值注入 88
3.5.1 注入外部的值 89
3.5.2 使用Spring表达式语言进行装配 93
3.6 小结 99
第4章 面向切面的Spring 101
4.1 什么是面向切面编程? 102
4.1.1 定义AOP术语 103
4.1.2 Spring对AOP的支持 105
4.2 通过切点来选择连接点 107
4.2.1 编写切点 108
4.2.2 在切点中选择bean 109
4.3 使用注解创建切面 109
4.3.1 定义切面 110
4.3.2 创建环绕通知 114
4.3.3 处理通知中的参数 115
4.3.4 通过注解引入新功能 118
4.4 在XML中声明切面 120
4.4.1 声明前置和后置通知 122
4.4.2 声明环绕通知 124
4.4.3 为通知传递参数 125
4.4.4 通过切面引入新的功能 127
4.5 注入AspectJ切面 128
4.5 小结 131
第2部分 Web中的Spring
第5章 构建Spring Web应用程序 135
5.1 Spring MVC起步 136
5.1.1 跟踪Spring MVC的请求 136
5.1.2 搭建Spring MVC 138
5.1.3 Spittr应用简介 142
5.2 编写基本的控制器 143
5.2.1 测试控制器 145
5.2.2 定义类级别的请求处理 146
5.2.3 传递模型数据到视图中 147
5.3 接受请求的输入 153
5.3.1 处理查询参数 153
5.3.2 通过路径参数接受输入 155
5.4 处理表单 157
5.4.1 编写处理表单的控制器 160
5.4.2 校验表单 163
5.5 小结 166
第6章 渲染Web视图 167
6.1 理解视图解析 167
6.2 创建JSP视图 170
6.2.1 配置适用于JSP的视图解析器 170
6.2.2 使用Spring的JSP库 172
6.3 使用Apache Tiles视图定义布局 184
6.3.1 配置Tiles视图解析器 185
6.4 使用Thymeleaf 190
6.4.1 配置Thymeleaf视图解析器 190
6.4.2 定义Thymeleaf模板 192
6.5 小结 196
第7章 Spring MVC的高级技术 197
7.1 Spring MVC配置的替代方案 198
7.1.1 自定义DispatcherServlet配置 198
7.1.2 添加其他的Servlet和Filter 199
7.1.3 在web.xml中声明DispatcherServlet 201
7.2 处理multipart形式的数据 204
7.2.1 配置multipart解析器 205
7.2.2 处理multipart请求 208
7.3 处理异常 212
7.3.1 将异常映射为HTTP状态码 213
7.3.2 编写异常处理的方法 214
7.4 为控制器添加通知 216
7.5 跨重定向请求传递数据 217
7.5.1 通过URL模板进行重定向 218
7.5.2 使用flash属性 219
7.6 小结 221
第8章 使用Spring WebFlow 223
8.1 在Spring中配置Web Flow 224
8.1.1 装配流程执行器 224
8.1.2 配置流程注册表 224
8.1.3 处理流程请求 225
8.2 流程的组件 226
8.2.1 状态 226
8.2.2 转移 230
8.2.3 流程数据 231
8.3 组合起来:披萨流程 232
8.3.1 定义基本流程 233
8.3.2 收集顾客信息 236
8.3.2 构建订单 242
8.3.2 支付 244
8.4 保护Web流程 246
8.5 小结 246
第9章 保护Web应用 249
9.1 Spring Security简介 250
9.1.1 理解Spring Security的模块 250
9.1.2 过滤Web请求 251
9.1.3 编写简单的安全性配置 252
9.2 选择查询用户详细信息的服务 255
9.2.1使用基于内存的用户存储 255
9.2.2 基于数据库表进行认证 257
9.2.3 基于LDAP进行认证 259
9.2.4 配置自定义的用户服务 263
9.3 拦截请求 265
9.3.1 使用Spring表达式进行安全保护 267
9.3.2 强制通道的安全性 269
9.3.3 防止跨站请求伪造 270
9.4 认证用户 271
9.4.1 添加自定义的登录页 272
9.4.2 启用HTTP Basic认证 274
9.4.3 启用Remember-me功能 274
9.4.4 退出 275
9.5 保护视图 276
9.5.1 使用Spring Security的JSP标签库 276
9.5.2 使用Thymeleaf的SpringSecurity方言 280
9.6 小结 281
第3部分 后端中的Spring
第10章 通过Spring和JDBC征服数据库 285
10.1 Spring的数据访问哲学 286
10.1.1 了解Spring的数据访问异常体系 287
10.1.2 数据访问模板化 289
10.2 配置数据源 291
10.2.1 使用JNDI数据源 292
10.2.2 使用数据源连接池 292
10.2.3 基于JDBC驱动的数据源 294
10.2.4 使用嵌入式的数据源 295
10.2.5 使用profile选择数据源 296
10.3 在Spring中使用
JDBC 298
10.3.1 应对失控的JDBC代码 299
10.3.2 使用JDBC模板 302
10.4 小结 307
第11章 使用对象-关系映射持久化数据 309
11.1 在Spring中集成Hibernate 310
11.1.1 声明Hibernate的Session工厂 311
11.1.2 构建不依赖于Spring的Hibernate代码 313
11.2 Spring与Java持久化API 315
11.2.1 配置实体管理器工厂 315
11.2.2 编写基于JPA的Repository 320
11.3 借助Spring Data实现自动化的JPA Repository 322
11.3.1 定义查询方法 325
11.3.2 声明自定义查询 328
11.3.3 混合自定义的功能 329
11.4 小结 330
第12章 使用NoSQL数据库 333
12.1 使用MongoDB持久化文档数据 334
12.1.1 启用MongoDB 335
12.1.2 为模型添加注解,实现MongoDB持久化 338
12.1.3 使用MongoTemplate访问MongoDB 341
12.1.4 编写MongoDBRepository 342
12.2 使用Neo4j操作图数据 347
12.2.1 配置Spring DataNeo4j 347
12.2.2 使用注解标注图实体 350
12.2.3 使用Neo4jTemplate 353
12.2.4 创建自动化的Neo4j Repository 354
12.3 使用Redis操作key-value数据 359
12.3.1 连接到Redis 359
12.3.2 使用RedisTemplate 360
12.3.3 使用key和value的序列化器 364
12.4 小结 365
第13章 缓存数据 367
13.1 启用对缓存的支持 368
13.1.1 配置缓存管理器 369
13.2 为方法添加注解以支持缓存 373
13.2.1 填充缓存 374
13.2.2 移除缓存条目 378
13.3 使用XML声明缓存 379
13.4 小结 383
第14章 保护方法应用 385
14.1 使用注解保护方法 386
14.1.1 使用@Secured注解限制方法调用 386
14.1.2 在Spring Security中使用
JSR-250的@RolesAllowed注解 387
14.2 使用表达式实现方法级别的安全性 388
14.2.1 表述方法访问规则 389
14.2.2 过滤方法的输入和输出 391
14.3 小结 395
第4部分 Spring集成
第15章 使用远程服务 399
15.1 Spring远程调用概览 400
15.2 使用RMI 402
15.2.1 导出RMI服务 403
15.2.2 装配RMI服务 405
15.3 使用Hessian和Burlap发布远程服务 407
15.3.1 使用Hessian和Burlap导出bean的功能 408
15.3.2 访问Hessian/Burlap服务 411
15.4 使用Spring的HttpInvoker 413
15.4.1 将bean导出为HTTP服务 413
15.4.2 通过HTTP访问服务 414
15.5 发布和使用Web服务 416
15.5.1 创建基于Spring的JAX-WS端点 416
15.5.2 在客户端代理JAX-WS服务 419
15.6 小结 421
第16章 使用Spring MVC创建REST API 423
16.1 了解REST 424
16.1.1 REST的基础知识 424
16.1.2 Spring是如何支持REST的 425
16.2 创建第一个REST端点 426
16.2.1 协商资源表述 428
16.2.2 使用HTTP信息转换器 433
16.3 提供资源之外的其他内容 438
16.3.1 发送错误信息到客户端 438
16.3.2 在响应中设置头部信息 443
16.4 编写REST客户端 445
16.4.1 了解RestTemplate的操作 446
16.4.2 GET资源 447
16.4.3 检索资源 448
16.4.4 抽取响应的元数据 449
16.4.5 PUT资源 450
16.4.6 DELETE资源 451
16.4.7 POST资源数据 452
16.4.8 在POST请求中获取响应对象 452
16.4.9 在POST请求后获取资源位置 453
16.4.10 交换资源 454
16.5 小结 456
第17章 Spring消息 457
17.1 异步消息简介 458
17.1.1 发送消息 459
17.1.2 评估异步消息的优点 461
17.2 使用JMS发送消息 463
17.2.1 在Spring中搭建消息代理 463
17.2.2 使用Spring的JMS模板 465
17.2.3 创建消息驱动的POJO 474
17.2.4 使用基于消息的RPC 477
17.3 使用AMQP实现消息功能 479
17.3.1 AMQP简介 480
17.3.2 配置Spring支持AMQP消息 481
17.3.3 使用RabbitTemplate发送消息 484
17.3.4 接收AMQP消息 486
17.4 小结 489
第18章 使用WebSocket和STOMP实现消息功能 491
18.1 使用Spring的低层级WebSocket API 492
18.2 应对不支持WebSocket的场景 497
18.3 使用STOMP消息 500
18.3.1 启用STOMP消息功能 501
18.3.2 处理来自客户端的STOMP消息 504
18.3.3 发送消息到客户端 507
18.4 为目标用户发送消息 511
18.4.1 在控制器中处理用户的消息 512
18.4.2 为指定用户发送消息 514
18.5 处理消息异常 515
18.6 小结 516
第19章 使用Spring发送Email 517
19.1 配置Spring发送邮件 518
19.1.1 配置邮件发送器 518
19.1.2 装配和使用邮件发送器 520
19.2 构建丰富内容的Email消息 521
19.2.1 添加附件 521
19.2.2 发送富文本内容的Email 522
19.3 使用模板生成Email 524
19.3.1 使用Velocity构建Email消息 524
19.3.2 使用Thymeleaf构建Email消息 526
19.4 小结 528
第20章 使用JMX管理Spring Bean 529
20.1 将Spring bean导出为MBean 530
20.1.1 通过名称暴露方法 533
20.1.2 使用接口定义MBean的操作和属性 535
20.1.3 使用注解驱动的MBean 536
20.1.4 处理MBean冲突 538
20.2 远程MBean 539
20.2.1 暴露远程MBean 539
20.2.2 访问远程MBean 540
20.2.3 代理MBean 542
20.3 处理通知 543
20.3.1 监听通知 544
20.4 小结 545
第21章 借助Spring Boot简化Spring开发 547
21.1 Spring Boot简介 548
21.1.1 添加Starter依赖 548
21.1.2 自动配置 552
21.1.3 Spring Boot CLI 552
21.1.4 Actuator 553
21.2 使用Spring Boot构建应用 553
21.2.1 处理请求 556
21.2.2 创建视图 558
21.2.3 添加静态内容 560
21.2.4 持久化数据 561
21.2.5 尝试运行 563
21.3 组合使用Groovy与SpringBoot CLI 566
21.3.1 编写Groovy控制器 566
21.3.2 使用Groovy Repository实现数据持久化 569
21.3.3 运行Spring Boot CLI 570
21.4 通过Actuator获取了解应用内部状况 571
21.5 小结 574
数据仓库生命周期工具箱
自1998年《数据仓库生命周期工具箱(第2版)》第一版出版以来,经过十多年的发展,数据仓库行业已经完全成熟,而且软硬件都有了极大的进步。那一版所提出的方法几乎已经被所有的数据仓库厂商和从业人员所采纳。现在,RalphKimbatl和其他专家一起对原有的生命周期方法和技巧集进行了改良。在《数据仓库生命周期工具箱(第2版)》中,他们将悉心为您讲述设计、开发和部署DW/Bl系统的详细步骤。这些步骤将教会您如何创建一个具有适应性的系统来为业务用户提供数据和分析结果,以帮助他们做出更好的商务决策。
OpenStack从零开始学
OpenStack作为开源云计算技术首当其冲,有着广泛的受众、活跃的社区和良好的传播,尊为云计算技术的领导者。, 《OpenStack从零开始学》由浅入深,从设计理论到实际操作,带领读者认识OpenStack云计算的全貌,轻松步入OpenStack云计算的世界。其内容涵盖了OpenStack云计算设计理论,虚拟化技术KVM和Xen的原理与应用,4种OpenStack网络架构(Flat、Local、GRE和VXLAN)模式和网络OSI 7层模型介绍,Ceph分布式存储, OpenStack安装配置(Nova、Cinder、Neutron、Horizon、Swift和Keystone等服务组件)、应用场景和实际操作(卷管理、创建网络和实例、实例热迁移和冷迁移)等多个方面,使读者读后如沐春风,真正喜欢云计算这项技术。, 《OpenStack从零开始学》适合刚刚或者计划进入云计算领域的初级读者学习,也适合已经进入云计算领域并且有一定相关知识或认识的中级读者阅读。对于一些从事售前工作的读者,《OpenStack从零开始学》也非常适用。
Apache Kylin权威指南
Apache Kylin是Hadoop大数据平台上的一个开源OLAP引擎,将大数据的查询速度和并发性能提升至原来的百倍以上,为超大规模数据集上的交互式大数据分析打开了大门。本书由Apache Kylin核心开发团队编写,系统地介绍了Apache Kylin安装、入门、可视化、模型调优、运维、二次开发等各个方面,是关于Apache Kylin的权威指南。, 第1章和第2章是基本概念和快速入门,为初学者打下坚实基础。第3章和第4章介绍增量构建和进阶的流式构建,应对数据的持续增长。第5章展示丰富的查询接口和其上的可视化能力。第6章则重点讲解了Cube模型和调优,它们是用好Apache Kylin,提升百倍性能的关键。第7章通过一系列有行业特点的具体案例分析,贯穿之前的所有概念,温故知新。第8章介绍可扩展架构和二次开发接口,适合开发者。第9章则介绍企业级功能、用户的认证和授权相关知识。第10章着重于安装和企业级部署、运维管理等内容。第11章和第12章分别说明如何参与和贡献到开源,以及Apache Kylin的未来。
开源大数据分析引擎Impala实战
《开源大数据分析引擎Impala实战》内容Impala是Cloudera公司ZHI名品牌开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和HBase中的PB级大数据。Impala1.0版比原来基于MapReduce的HiveSQL查询速度提升3~90倍,因此,Impala有可能接近取代Hive。作者基于自己在本职工作中应用Impala的实践和心得编写了《开源大数据分析引擎Impala实战》。《开源大数据分析引擎Impala实战》共分10章,全面介绍开源大数据分析引擎Impala的技术背景、安装与配置、架构、操作方法、性能优化,以及很富技术含量的应用设计原则和应用案例。
HBase权威指南
《hbase权威指南》探讨了如何通过使用与hbase高度集成的hadoop将hbase的可伸缩性变得简单;把大型数据集分布到相对廉价的商业服务器集群中;使用本地java客户端,或者通过提供了rest、avro和thrift应用编程接口的网关服务器来访问hbase;了解hbase架构的细节,包括存储格式、预写日志、后台进程等;在hbase中集成mapreduce框架;了解如何调节集群、设计模式、拷贝表、导入批量数据和删除节点等。, 《hbase权威指南》适合使用hbase进行数据库开发的高级数据库研发人员阅读
数据仓库工具箱 维度建模权威指南 第3版
随着The Data Warehouse Toolkit(1996)第1版的出版发行,Ralph Kimball为整个行业引入了维度建模技术。从此,维度建模成为一种被广泛接受的表达数据仓库和商业智能(DW/BI)系统中数据的方法。该经典书籍被认为是维度建模技术、模式和最佳实践的权威资源。
这本《数据仓库工具箱(第3版)--维度建模权威指南》汇集了到目前为止最全面的维度建模技术。本书采用新的思路和最佳实践对上一版本进行了全面修订,给出了设计维度模型的全面指南,既适合数据仓库新手,也适合经验丰富的专业人员。
本书涉及的所有技术都基于作者实际从事DW/BI的设计经验,通过实际案例加以描述。
主要内容
◆ 实用设计技术--有关维度和事实表的基本和高级技术
◆ 14个案例研究,涉及零售业、电子商务、客户关系管理、采购、库存、订单管理、会计、人力资源、金融服务、医疗卫生、保险、教育、电信和运输等
◆ 为12个案例研究提供了数据仓库总线矩阵示例
◆ 需要避免的维度建模陷阱和错误
◆ 增强的缓慢变化维度(SCD)技术类型0~类型7
◆ 用于处理参差不齐的可变深度层次和多值属性的桥接表
◆ 大数据分析的最佳实践
◆ 与业务参与方合作、交互设计会议的指南
◆ 有关Kimball DW/BI项目生命周期方法论的概论
◆ 对ETL系统和设计思考的总结
◆ 构建维度和事实表的34个ETL子系统和技术
C语言学籍管理系统
C语言下简单的学籍管理系统源代码.cpp
178个经典c语言源代码
178个经典c语言源代码 适合初学者的研究性问题。资源免费。