自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(5)
  • 资源 (17)
  • 收藏
  • 关注

原创 领域驱动设计(DDD):领域接口化设计

领域接口化设计把服务对象(service)和资源库对象(repository)设计成接口是最常见的。但是这对接口化的认识还远远不够,我们需要更深入地去分析接口化设计和更全面地应用接口化编程。所以我们要讨论的是全面接口化,尤其是对领域模型接口化的认识。领域接口化通常的情况下我们会把领域模型设计成类(class),但是你有没有想过把领域模型设计成接口(interface)?比如:public interface User { // ...}public class UserImpl imp

2020-12-09 17:17:23 759

原创 领域驱动设计(DDD):对象属性(property)和 getters , setters 方法

对象属性(property)和 getters , setters 方法“需要为一个对象的属性添加 Getters / Setters 方法”而提出为什么?由此而进行深入思考。它是字段(field)在 Java 中我们都知道如何在类(Class)中声明一个成员属性(field)。public class HikariConfig { public long connectionTimeout; public long validationTimeout;}当我们需要设置对象的属

2020-12-08 15:04:44 551

原创 领域驱动设计(DDD)前夜:三种编码方式

三种编码方式不知道写点啥,就是想写一些问题。过段时间再补。脚本化编程:class Light { status: string color: string}function main() { const light = new Light() if (light.status === "on") { throw new Error("The light is on") } light.status = "on" light.

2020-10-31 17:48:01 396

原创 DDD 领域驱动设计前夜:面向过程与面向对象思维

面向过程与面向对象思维在大多数的情况下,我们都是从面向过程的语言(C语言)开始学起编程,然后是进入到面向对象的语言中,比如 Java、C#、Python 等。但在使用面向对象编程时,有可能依然保留着部分面向过程的思维,或者存在一些错误地面向对象思维。下面我将通过两个示例来对比面向过程与面向对象思维的不同,并在每个示例实现后,再举一个实际示例和错误示例来说明 两个问题:在面向对象编程中会存在一些过程化的脚本编码。对象建模中会存在一些对象建模错误问题的。在描述面向过程与面向对象的区别时,有一个经典的

2020-10-30 20:31:47 297

原创 领域驱动设计(DDD)前夜:面向对象思想

面向对象这篇文章重点讨论的是对象(Object),而不是面向对象的三大特性或者五大基本原则。在面向对象的世界里,万物皆对象。对象是面向对象的核心。对象和类面向对象的核心是对象,对象是由属性和方法组合而成的。在使用面向对象进行分析、设计、编码的时候,你应该想到的是属性和方法组合形成的对象。在需要组合的时候而不应该是只包含属性的对象或者只包含方法的对象。何时需要属性和方法组合的对象、何时只包含属性或者只包含方法的对象呢?对象建模在绝大多数的系统中都会有持久化操作,通常是保存在关系型数据库中,在关系型数

2020-10-29 20:23:24 360

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

2018-05-12

汇编语言 基于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

2018-05-12

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章 下一步该怎么办 封面介绍

2018-05-12

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

2018-05-12

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

2018-05-12

数据仓库生命周期工具箱

自1998年《数据仓库生命周期工具箱(第2版)》第一版出版以来,经过十多年的发展,数据仓库行业已经完全成熟,而且软硬件都有了极大的进步。那一版所提出的方法几乎已经被所有的数据仓库厂商和从业人员所采纳。现在,RalphKimbatl和其他专家一起对原有的生命周期方法和技巧集进行了改良。在《数据仓库生命周期工具箱(第2版)》中,他们将悉心为您讲述设计、开发和部署DW/Bl系统的详细步骤。这些步骤将教会您如何创建一个具有适应性的系统来为业务用户提供数据和分析结果,以帮助他们做出更好的商务决策。

2018-01-07

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从零开始学》也非常适用。

2018-01-07

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的未来。

2018-01-07

开源大数据分析引擎Impala实战

《开源大数据分析引擎Impala实战》内容Impala是Cloudera公司ZHI名品牌开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和HBase中的PB级大数据。Impala1.0版比原来基于MapReduce的HiveSQL查询速度提升3~90倍,因此,Impala有可能接近取代Hive。作者基于自己在本职工作中应用Impala的实践和心得编写了《开源大数据分析引擎Impala实战》。《开源大数据分析引擎Impala实战》共分10章,全面介绍开源大数据分析引擎Impala的技术背景、安装与配置、架构、操作方法、性能优化,以及很富技术含量的应用设计原则和应用案例。

2018-01-07

HBase权威指南

《hbase权威指南》探讨了如何通过使用与hbase高度集成的hadoop将hbase的可伸缩性变得简单;把大型数据集分布到相对廉价的商业服务器集群中;使用本地java客户端,或者通过提供了rest、avro和thrift应用编程接口的网关服务器来访问hbase;了解hbase架构的细节,包括存储格式、预写日志、后台进程等;在hbase中集成mapreduce框架;了解如何调节集群、设计模式、拷贝表、导入批量数据和删除节点等。, 《hbase权威指南》适合使用hbase进行数据库开发的高级数据库研发人员阅读

2018-01-07

数据仓库工具箱 维度建模权威指南 第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子系统和技术

2017-11-23

C语言学籍管理系统

C语言下简单的学籍管理系统源代码.cpp

2014-10-08

178个经典c语言源代码

178个经典c语言源代码 适合初学者的研究性问题。资源免费。

2014-08-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除