[套装书]深入解析Java编译器:源码剖析与实例详解+分布式中间件技术实战(Java版)(2册)

作者
马智钟林森
丛书名
出版社
机械工业出版社
ISBN
9782001141134
简要
简介
内容简介书籍计算机书籍 ---------------------------深入解析Java编译器:源码剖析与实例详解--------------------------- 本书针对Java语言的编译器源码进行深度剖析,所以本书面向的读者主要是那些想深入研究Java语言运行原理的人。另外本书还可以用作编译原理的学习,通过强实践来达到学习的目的,所以对于想学习编译原理的人,如软件专业的学生,也是一个很好的选择。 本书共18章,5个附录,涵盖-Javac文件系统、词法分析、语法分析、符号表、语义分析、泛型、数据流、语法糖、字节码、Class文件等大量内容。由于Java编译器有10万行以上的代码,并且逻辑周密,细节众多。为了能够让读者更好的理解其中的要点,本书将会有大量的配图和实例,并且要对重点源代码展开细致的讲解。 ---------------------------分布式中间件技术实战(Java版)--------------------------- 《分布式中间件技术实战(Java版)》站在初学者的角度,介绍了几款比较流行的分布式中间件,带领读者从零开始一步一个脚印地学习Java企业级应用开发。书中在讲解必要的理论知识和应用场景后都给出了实际项目案例,可以提高读者的开发水平和项目实战能力。 《分布式中间件技术实战(Java版)》共10章,分为3篇。第1篇开发工具准备,介绍了分布式系统架构的相关知识要点,包括其功能、作用及演进历程,并由此引出了分布式中间件的相关介绍。第2篇开发实战,全面介绍了目前在实际开发中应用比较广泛的几款Java中间件,包括缓存中间件Redis、消息中间件RabbitMQ、统一协调管理中间件ZooKeeper和综合中间件Redisson等,重点介绍了这几款中间件的基本概念、典型应用场景及相应的功能组件等。第3篇总结,对相关内容做了重点回顾与总结。值得一提的是,《分布式中间件技术实战(Java版)》在介绍几款中间件的理论知识时,还以Spring Boot微服务框架作为奠基,整合了相关中间件之间的依赖,并结合作者的实际项目经验进行了代码实战。 《分布式中间件技术实战(Java版)》特别适合中间件实践经验为零的开发者阅读;对于有一定Java应用开发经验的工程师而言,通过阅读《分布式中间件技术实战(Java版)》可以了解中间件在构建企业级应用过程中所提供的思路和解决方案;IT培训机构的学员,也可以通过《分布式中间件技术实战(Java版)》系统地学习中间件技术。
目录



---------------------------深入解析Java编译器:源码剖析与实例详解---------------------------


前言
第1章 Javac介绍 1
1.1 初识Javac 1
1.2 Javac源码与调试 4
1.3 Javac命令 7
第2章 Javac文件系统 12
2.1 文件相关实现类 12
2.2 文件的管理 25
2.2.1 获取JavacFileManager对象 25
2.2.2 StandardLocation类 28
2.2.3 JavacFileManager类 31
第3章 词法分析 38
3.1 字符编码 38
3.2 获取字符输入流 40
3.3 Token与Name 43
3.3.1 Token介绍 44
3.3.2 Name对象的生成与存储 47
3.3.3 Name映射为Token 51
3.4 生成Token流 52
第4章 语法分析之认识树节点 67
4.1 定义及声明 68
4.1.1 JCCompilationUnit类 68
4.1.2 JCImport类 69
4.1.3 JCClassDecl类 70
4.1.4 JCModifiers类 71
4.1.5 JCTypeParameter类 72
4.1.6 JCVariableDecl类 72
4.1.7 JCMethodDecl类 74
4.2 语句 75
4.2.1 JCBlock类 75
4.2.2 JCIf类 76
4.2.3 JCWhileLoop、JCDoWhileLoop、JCForLoop与JCEnhancedForLoop类 78
4.2.4 JCSwitch与JCCase类 79
4.2.5 JCTry、JCCatch与JCThrow类 81
4.2.6 JCLabeledStatement、JCReturn、JCContinue与JCBreak类 82
4.2.7 JCSynchronized类 83
4.2.8 JCAssert类 83
4.3 表达式 83
4.3.1 基本表达式 84
4.3.2 含运算符的表达式 88
4.3.3 类型相关表达式 94
4.3.4 注解表达式 97
4.4 生成树节点 98
第5章 语法分析之建立抽象语法树 101
5.1 定义及声明的抽象语法树 101
5.2 语句的抽象语法树 112
5.3 表达式的抽象语法树 121
5.3.1 基本表达式 122
5.3.2 含有运算符的表达式 134
5.4 遍历抽象语法树 140
第6章 符号表的组织 143
6.1 符号的定义 143
6.1.1 Symbol类 144
6.1.2 TypeSymbol及其子类 150
6.1.3 VarSymbol类 154
6.1.4 MethodSymbol及OperatorSymbol类 154
6.2 符号表的组织 160
6.2.1 Env类介绍 160
6.2.2 AttrContext类介绍 162
6.2.3 Scope类介绍 163
6.2.4 符号表的建立 164
6.3 类型的定义 169
6.3.1 普通类型的定义 169
6.3.2 泛型相关类型的定义 175
第7章 填充符号表 180
7.1 依赖的处理 180
7.1.1 创建包或类符号 180
7.1.2 输入包或类下的成员符号 184
7.2 符号输入的第一阶段 189
7.2.1 Enter类 190
7.2.2 visitTopLevel()方法 192
7.2.3 visitClassDef()方法 193
7.2.4 visitTypeParameter()方法 196
7.3 符号输入第二阶段 197
7.3.1 MemberEnter类 197
7.3.2 visitImport()方法 200
7.3.3 visitMethodDef()方法 207
7.3.4 visitVarDef()方法 209
第8章 插入式注解的实现 211
8.1 注解处理器基础 211
8.1.1 编写注解处理器 211
8.1.2 注解配置 215
8.1.3 工具类 215
8.2 初始化注解处理器 222
8.3 运行注解处理器 226
第9章 语义分析之类型转换 233
9.1 类型转换的种类 233
9.2 赋值转换 245
9.3 方法调用转换 253
9.4 强制类型转换 254
9.5 数字提升 266
第10章 语义分析之语法检查 269
10.1 类型定义的检查 269
10.1.1 父类及实现接口的检查 269
10.1.2 类型定义的唯一性检查 273
10.1.3 类型中方法的兼容性检查 276
10.1.4 类型中实现方法的检查 287
10.2 变量定义的检查 294
10.3 方法定义的检查 296
10.3.1 方法的唯一性检查 296
10.3.2 方法的隐藏 298
10.3.3 方法的覆写 303
第11章 语义分析之引用消解 307
11.1 Resolve类介绍 307
11.2 类型引用的消解 310
11.3 变量引用的消解 320
11.4 方法引用的消解 323
第12章 语义分析之语法树标注 345
12.1 Attr类介绍 346
12.2 表达式相关树节点的标注 348
12.2.1 JCUnary树节点标注 348
12.2.2 JCBinary树节点的标注 350
12.2.3 JCAssignOp树节点的标注 351
12.3 JCIdent树节点的标注 351
12.4 JCFieldAccess树节点的标注 354
第13章 泛型的实现 361
13.1 泛型类型 361
13.2 泛型方法 364
13.2.1 类型推断 365
13.2.2 钻石语法 383
13.3 泛型擦除 386
第14章 数据流检查 396
14.1 Flow类介绍 396
14.1.1 语句的活跃性分析 396
14.1.2 变量赋值检查 398
14.1.3 异常检查 405
14.2 if语句的分析 405
14.2.1 if语句 405
14.2.2 一元表达式与if语句 409
14.2.3 二元表达式与if语句 410
14.2.4 三元表达式与if语句 412
14.3 循环语句的分析 413
14.3.1 for语句 413
14.3.2 中断循环语句 416
14.4 try语句与throw语句的分析 419
14.4.1 抛出异常 419
14.4.2 异常检查 424
14.4.3 变量赋值状态及语句的活跃性 430
第15章 语法糖去除 435
15.1 简单语法糖 436
15.1.1 变长参数 436
15.1.2 条件编译 437
15.1.3 自动装箱与拆箱 438
15.2 语句语法糖 440
15.2.1 foreach语句 440
15.2.2 switch语句 442
15.2.3 try-with-resources语句 447
15.3 枚举类语法糖 452
15.4 内部类语法糖 453
15.4.1 调用私有构造方法 454
15.4.2 引用成员 457
15.4.3 super关键字引用父类成员 470
15.4.4 访问自由变量 472
第16章 字节码指令生成 486
16.1 字节码指令集 486
16.2 生成字节码指令 492
16.2.1 实现本地变量表 492
16.2.2 实现操作数栈 495
16.2.3 常量池信息的存储 497
16.2.4 Code类介绍 499
16.3 Gen类介绍 502
16.4 可寻址实体Item 506
16.4.1 LocalItem类 508
16.4.2 ImmediateItem类 512
16.4.3 StackItem类 514
16.4.4 AssignItem类 515
16.4.5 StaticItem类 517
16.4.6 MemberItem类 520
16.4.7 SelfItem类 523
16.4.8 IndexedItem类 524
第17章 重要结构的字节码指令生成 527
17.1 控制转移指令与地址回填 527
17.1.1 认识控制转移指令 527
17.1.2 地址回填 529
17.2 语句的条件判断表达式 530
17.2.1 CondItem类 530
17.2.2 一元与二元条件判断表达式 533
17.2.3 三元条件判断表达式 534
17.3 if语句 536
17.4 循环语句 537
17.5 switch语句 539
17.6 异常与finally语句 545
17.6.1 异常的抛出 545
17.6.2 异常的捕获与finally语句 545
第18章 生成Class文件 553
18.1 Class文件的结构 553
18.2 魔数与版本 556
18.3 常量池 556
18.4 类定义的基本信息 562
18.4.1 访问标识符 562
18.4.2 类、父类及接口集合 564
18.5 字段集合 565
18.6 方法集合 570
18.7 类属性集合 575
18.8 描述符和签名 581
18.8.1 描述符 581
18.8.2 签名 582
18.8.3 描述符与签名的实现 585
附录A Javac命令 589
附录B 文法 592
附录C 类型常见操作 600
C.1 supertype()方法 600
C.2 interfaces()方法 604
C.3 asSuper()方法 606
C.4 asOuterSuper()方法 608
C.5 isSameType()方法 609
C.6 L()与U()方法 615
C.7 lowerBound()与upperBound()方法 616
C.8 containsType()方法 617
C.9 hasSameArgs()方法 621
C.10 subst()方法 623
C.11 memberType()方法 626
C.12 erasure()与erasureRecursive()方法 628
附录D 符号常见操作 632
D.1 isInheritedIn()方法 632
D.2 hiddenIn()方法 633
D.3 isMemberOf()方法 634
D.4 overrides()方法 635
D.5 implementation()方法 639
附录E 虚拟机字节码指令表 645
E.1 加载与存储指令 645
E.2 运算指令 648
E.3 类型转换指令 650
E.4 对象操作指令 651
E.5 操作数栈管理指令 652
E.6 控制转移指令 652
E.7 方法调用和返回指令 653
E.8 异常抛出指令 654
E.9 同步指令 654



---------------------------分布式中间件技术实战(Java版)---------------------------


第1篇 开发工具准备
第1章 走进分布式中间件 2
1.1 分布式系统概述 2
1.1.1 白话分布式系统 3
1.1.2 分布式系统发展历程 3
1.1.3 分布式系统特性 6
1.1.4 分布式系统常见问题 7
1.2 分布式中间件概述 7
1.2.1 白话分布式中间件 7
1.2.2 常见中间件介绍 8
1.3 本书核心知识要点 9
1.4 本书实战要求与建议 10
第2章 搭建微服务项目 11
2.1 Spring Boot概述 11
2.1.1 什么是Spring Boot 11
2.1.2 Spring Boot的优势 12
2.1.3 Spring Boot的几大特性 13
2.2 搭建规范与搭建流程 13
2.2.1 Spring Boot项目搭建规范 14
2.2.2 Spring Boot项目搭建流程 14
2.2.3 写个Hello World吧 26
2.3 总结 28
第2篇 开发实战
第3章 缓存中间件Redis 30
3.1 Redis概述与典型应用场景介绍 30
3.2 Redis的使用 32
3.2.1 快速安装Redis 32
3.2.2 在Windows环境下使用Redis 34
3.2.3 Spring Boot项目整合Redis 37
3.2.4 Redis自定义注入Bean组件配置 38
3.2.5 RedisTemplate实战 39
3.2.6 StringRedisTemplate实战 43
3.3 Redis常见数据结构实战 45
3.3.1 字符串 45
3.3.2 列表 47
3.3.3 集合 48
3.3.4 有序集合 50
3.3.5 哈希Hash存储 52
3.3.6 Key失效与判断是否存在 54
3.4 Redis实战场景之缓存穿透 56
3.4.1 什么是缓存穿透 57
3.4.2 缓存穿透的解决方案 58
3.4.3 实战过程 58
3.4.4 其他典型问题介绍 65
3.5 总结 66
第4章 Redis典型应用场景实战之抢红包系统 67
4.1 整体业务流程介绍 67
4.1.1 抢红包系统业务流程 68
4.1.2 业务流程分析 68
4.1.3 业务模块划分 70
4.2 数据库表设计与环境搭建 71
4.2.1 数据库表设计 71
4.2.2 开发环境搭建 73
4.2.3 开发流程介绍 83
4.3 红包金额”随机生成算法实战 85
4.3.1 随机数算法 86
4.3.2 红包随机金额生成算法要求 86
4.3.3 二倍均值法简介 87
4.3.4 红包随机金额生成算法实战 88
4.3.5 红包随机金额生成算法自测 90
4.4 发红包”模块实战 91
4.4.1 业务模块分析 92
4.4.2 整体流程实战 93
4.4.3 业务模块自测 99
4.5 抢红包”模块实战 101
4.5.1 业务模块分析 101
4.5.2 整体流程 102
4.5.3 业务模块自测 105
4.5.4 总结 109
4.6 Jmeter压力测试高并发抢红包 110
4.7 问题分析与优化方案 116
4.7.1 问题分析 117
4.7.2 优化方案介绍 118
4.7.3 优化方案之Redis分布式锁实战 118
4.7.4 不足之处 122
4.8 总结 122
第5章 消息中间件RabbitMQ 124
5.1 RabbitMQ简介 124
5.1.1 认识RabbitMQ 125
5.1.2 典型应用场景介绍 126
5.1.3 RabbitMQ后端控制台介绍 132
5.1.4 基于Spring的事件驱动模型实战 133
5.2 Spring Boot项目整合RabbitMQ 137
5.2.1 RabbitMQ相关词汇介绍 138
5.2.2 Spring Boot项目整合RabbitMQ 139
5.2.3 自定义注入配置Bean相关组件 140
5.2.4 RabbitMQ发送、接收消息实战 142
5.2.5 其他发送接收消息方式实战 147
5.3 RabbitMQ多种消息模型实战 152
5.3.1 基于FanoutExchange的消息模型实战 152
5.3.2 基于DirectExchange的消息模型实战 160
5.3.3 基于TopicExchange的消息模型实战 165
5.4 RabbitMQ确认消费机制 171
5.4.1 消息高可用和确认消费 172
5.4.2 常见的确认消费模式介绍 174
5.4.3 基于自动确认消费模式实战 176
5.4.4 基于手动确认消费模式实战 182
5.5 典型应用场景实战之用户登录成功写日志 188
5.5.1 整体业务流程介绍与分析 188
5.5.2 数据库表设计 189
5.5.3 开发环境搭建 197
5.5.4 基于TopicExchange构建日志消息模型 200
5.5.5 异步发送接收登录日志消息实战 201
5.5.6 整体业务模块自测实战 205
5.6 总结 208
第6章 死信队列/延迟队列实战 209
6.1 死信队列概述 209
6.1.1 死信队列简介与作用 209
6.1.2 典型应用场景介绍 212
6.2 RabbitMQ死信队列实战 213
6.2.1 死信队列专有词汇介绍 214
6.2.2 死信队列消息模型实战 215
6.2.3 死信队列延迟发送消息实战 221
6.3 典型应用场景实战之商城平台订单支付超时 226
6.3.1 整体业务场景介绍 227
6.3.2 整体业务流程分析 228
6.3.3 数据库设计 229
6.3.4 构建RabbitMQ死信队列消息模型 236
6.3.5 Controller层开发用户下单及订单失效功能 240
6.3.6 用户下单支付超时”延迟发送接收实战 246
6.3.7 用户下单支付超时”整体功能自测 250
6.4 总结 254
第7章 分布式锁实战 256
7.1 分布式锁概述 256
7.1.1 锁机制 257
7.1.2 分布式锁登场 263
7.1.3 典型应用场景介绍 265
7.1.4 小结 268
7.2 基于数据库实现分布式锁 268
7.2.1 乐观锁简介 268
7.2.2 乐观锁实战 269
7.2.3 Jmeter高并发测试乐观锁 280
7.2.4 悲观锁简介 286
7.2.5 悲观锁实战 288
7.2.6 Jmeter高并发测试悲观锁 290
7.2.7 小结 291
7.3 基于Redis实现分布式锁 292
7.3.1 Redis温故而知新 292
7.3.2 分布式锁的实现流程与原理分析 294
7.3.3 基于Redis实战实现分布式锁 295
7.3.4 Jmeter高并发测试 303
7.3.5 小结 307
7.4 基于ZooKeeper实现分布式锁 308
7.4.1 ZooKeeper简介与作用 308
7.4.2 分布式锁的实现流程与原理分析 310
7.4.3 Spring Boot整合ZooKeeper 312
7.4.4 基于ZooKeeper实现分布式锁 315
7.4.5 Jmeter高并发测试 317
7.4.6 小结 319
7.5 典型应用场景之书籍抢购模块设计与实战 319
7.5.1 整体业务流程介绍与分析 319
7.5.2 数据库表设计与用例设计 321
7.5.3 书籍抢购核心业务逻辑开发实战 324
7.5.4 Jmeter重现库存超卖”的问题 328
7.5.5 采用分布式锁解决问题 330
7.5.6 小结 334
7.6 总结 334
第8章 综合中间件Redisson 336
8.1 Redisson概述 336
8.1.1 Redisson简介与作用 337
8.1.2 Redisson的功能特性 339
8.1.3 典型应用场景之布隆过滤器与主题 340
8.1.4 典型应用场景之延迟队列与分布式锁 345
8.1.5 Spring Boot整合Redisson 348
8.2 Redisson常见功能组件实战 352
8.2.1 布隆过滤器 352
8.2.2 发布-订阅式主题 355
8.2.3 数据结构之映射Map 361
8.2.4 数据结构之集合Set 366
8.2.5 队列Queue实战 370
8.2.6 延迟队列Delayed Queue实战1 374
8.2.7 延迟队列Delayed Queue实战2 381
8.3 分布式锁实战 385
8.3.1 重温分布式锁 385
8.3.2 分布式锁之一次性锁实战 387
8.3.3 分布式锁之可重入锁实战 392
8.4 总结 398
第9章 Redisson典型应用场景实战之高性能点赞 399
9.1 整体业务流程介绍与分析 399
9.1.1 业务背景介绍 400
9.1.2 业务流程介绍与分析 401
9.1.3 业务模块划分与数据库设计 404
9.2 点赞与取消点赞”操作模块实战 409
9.2.1 点赞与取消点赞”业务流程分析 409
9.2.2 Controller层接收请求信息 412
9.2.3 Service层插入、更新并缓存记录信息 415
9.2.4 业务模块自测 421
9.3 排行榜”业务模块实战 424
9.3.1 排行榜”业务流程分析 425
9.3.2 接收前端请求并触发缓存排行榜 426
9.3.3 业务模块自测 428
9.4 总结 432
第3篇 总结
第10章 总结与回顾 434



有问题微信扫码联系

推荐

Understand China
桂ICP备20004708号-4