编辑推荐
让读者知其然,并知其所以然,是《深入分析Java Web技术内幕(修订版)》一书的特色。
作者来自淘 宝技术一线,亲历了淘 宝网PV从1亿到10亿的发展历程,直接经历了在这个过程中技术的不断突破、飞跃等变迁,并积累了丰富实践经验。
《深入分析Java Web技术内幕(修订版)》正是分享了作者在面临种种技术问题、技术瓶颈时的思路、方法和技巧,具体的应用实践和直接的案例。
在这次的修订版中,作者补充了淘宝网近两年在无线端的应用实践。在这个快速发展的移动互联的时代,这样直接的技术积累和分享尤其珍贵。
相信读者一定能从中获益匪浅。
阿里巴巴集团技术丛书是抱持着为工程师服务的理念诞生的。
阿里的快速发展,使我们见证技术变革的强大力量。在这过程中,我们经历了技术的变迁、兴衰、成败,既有收获也有教训。如今,阿里已成为一家令人瞩目的互联网公司,站在这样的时点上,回顾过去,放眼四周,我们深刻地觉得有必要将沉淀下来的一线经验与智慧,结集出版,理由有三。
1.回报。我们获得的种种经验与教训,只有在阿里这样快速成长、体量巨大的公司中才会亲历。这样的技术环境并不是每个工程师都有缘遇到的。这些经历帮助了我们个人能力的提升,也帮助阿里成为一家技术实力过硬的公司。我们愿意把这些内容分享出来,帮助即将或已经面临类似问题的朋友们,如果他们可以从阅读中获得一些启发而少走弯路的话,将令我们欣慰。
2.交流。在这套丛书里,我们同样会抛出我们的困惑、问题,借助丛书的平台,扩大工程师沟通的圈子,以书会友,共同探索、学习、提高。
3.温故知新。以结集的形式,将以往的经验与知识固化下来,既可便于以后查阅,也可以帮助我们系统地梳理思路,更为全面地审视、洞察、并理解过去发生的种种,为未来的变化做好更充分、扎实的准备。
基于以上的考虑,阿里巴巴集团技术丛书将立足于实践,着眼于问题,从工程师的视角解读技术的内涵。
让思考成为我们生活的乐趣,让阅读成为我们进步的阶梯!
内容简介
《深入分析Java Web技术内幕(修订版)》新增了淘 宝在无线端的应用实践,包括:CDN 动态加速、多终端化改造、 多终端Session 统一 ,以及在大流量的情况下,如何跨越性能、网络和一个地区的电力瓶颈等内容,并提供了比较完整的解决方案。
《深入分析Java Web技术内幕(修订版)》主要围绕Java Web 相关技术从三方面全面、深入地进行了阐述。首先介绍前端知识,即在JavaWeb 开发中涉及的一些基本知识,包括Web 请求过程、HTTP、DNS 技术和CDN 技术。其次深入介绍了Java 技术,包括I/O 技术、中文编码问题、Javac 编译原理、class 文件结构解析、ClassLoader 工作机制及JVM 的内存管理等。最后介绍了Java 服务端技术,主要包括Servlet、Session 与Cookie、Tomcat 与Jetty服务器、Spring 容器、iBatis 框架和Velocity 框架等原理介绍,并介绍了服务端的一些优化技术。
《深入分析Java Web技术内幕(修订版)》不仅介绍这些技术和框架的工作原理,而且结合示例来讲解,通过通俗易懂的文字和丰富、生动的配图,让读者充分并深入理解它们的内部工作原理,同时还结合了设计模式来介绍这些技术背后的架构思维。
作者简介
2009年加入淘宝,一直关注性能优化领域,经历了淘宝PV从1亿到10亿的发展历程,参与了淘宝高访问量Web系统模板引擎的改造、静态化、无线化、CDN等优化改造项目。
先后研究过分布式数据库Cassandra系统、Tomcat、Jetty等系统的源码。一直参与淘宝访问量高的系统页面详情系统的优化工作,设计并实现了sketch模板引擎、MVC框架Feiba等,将服务端性能提升近50%左右;所在的性能优化小组一直在做详情的前端优化,将详情页的首屏展示时间缩短为1s之内。
精彩书评
★这是一本关于Java 的书,里面讲述的大量基础知识对前端开发工程师非常有帮助。比如中文编码章节,作者以一个实践者的身份详细阐述了编码问题的方方面面。总之,这是一本很用心的书,是实践者的思考和总结。目前在国内很少看到这类书籍,强烈推荐从事Web 开发工作的人员阅读并实践之。
——王保平(玉伯),开源前端类库KISSY、SeaJS作者
★作者在淘宝做了很多Java Web 方面的改造项目,在Java Web 的相关技术上有深入的掌握,并积累了丰富的经验。在这本书中作者不仅向读者展示了这类大改造项目所需的知识,还展示了Java Web 更为全景的技术知识体系。本书值得Java Web 开发人员阅读。
——林昊(毕玄),淘宝资深技术专家
★从第1 次拜读相关内容开始,就可以感觉到作者并不是在简简单单地讲述一门技术或者一个概念,他的分析和讲解十分深入,并且可以很好地聚焦读者的思路,尤其是在Java Web 、Servlet 规范及字符串处理方面,都有很优秀的内容。在众多向developerWorks投稿的国内作者中,无论是从文章的质量看,还是从内容的选题方向看,作者的文章都可称为上乘之作。同时,他的多篇文章还得到了广大网站读者的好评,其访问量、评分及评论的数量均名列前茅。
——刘达,developerWorks中国Java 专区编辑、技术工程师
目录
第1章 深入Web请求过程 1
1.1 B/S网络架构概述 2
1.2 如何发起一个请求 4
1.3 HTTP协议解析 6
1.3.1 查看HTTP信息的工具 8
1.3.2 浏览器缓存机制 9
1.4 DNS域名解析 12
1.4.1 DNS域名解析过程 12
1.4.2 跟踪域名解析过程 15
1.4.3 清除缓存的域名 18
1.4.4 几种域名解析方式 19
1.5 CDN工作机制 20
1.5.1 CDN架构 20
1.5.2 负载均衡 21
1.5.3 CDN动态加速 24
1.6 总结 25
第2章 深入分析Java I/O的工作机制 26
2.1 Java的I/O类库的基本架构 26
2.1.1 基于字节的I/O操作接口 27
2.1.2 基于字符的I/O操作接口 28
2.1.3 字节与字符的转化接口 29
2.2 磁盘I/O工作机制 30
2.2.1 几种访问文件的方式 30
2.2.2 Java访问磁盘文件 34
2.2.3 Java序列化技术 35
2.3 网络I/O工作机制 37
2.3.1 TCP状态转化 38
2.3.2 影响网络传输的因素 40
2.3.3 Java Socket的工作机制 40
2.3.4 建立通信链路 41
2.3.5 数据传输 42
2.4 NIO的工作方式 42
2.4.1 BIO带来的挑战 42
2.4.2 NIO的工作机制 43
2.4.3 Buffer的工作方式 46
2.4.4 NIO的数据访问方式 48
2.5 I/O调优 50
2.5.1 磁盘I/O优化 50
2.5.2 TCP网络参数调优 51
2.5.3 网络I/O优化 53
2.6 设计模式解析之适配器模式 57
2.6.1 适配器模式的结构 57
2.6.2 Java I/O中的适配器模式 58
2.7 设计模式解析之装饰器模式 58
2.7.1 装饰器模式的结构 59
2.7.2 Java I/O中的装饰器模式 59
2.8 适配器模式与装饰器模式的区别 60
2.9 总结 60
第3章 深入分析Java Web中的中文编码问题 61
3.1 几种常见的编码格式 61
3.1.1 为什么要编码 61
3.1.2 如何“翻译” 62
3.2 在Java中需要编码的场景 64
3.2.1 在I/O操作中存在的编码 64
3.2.2 在内存操作中的编码 66
3.3 在Java中如何编解码 67
3.3.1 按照ISO-8859-1编码 69
3.3.2 按照GB2312编码 70
3.3.3 按照GBK编码 71
3.3.4 按照UTF-16编码 71
3.3.5 按照UTF-8编码 72
3.3.6 UTF-8编码代码片段 72
3.3.7 对几种编码格式的比较 74
3.4 在Java Web中涉及的编解码 74
3.4.1 URL的编解码 76
3.4.2 HTTP Header的编解码 79
3.4.3 POST表单的编解码 79
3.4.4 HTTP BODY的编解码 80
3.5 JS中的编码问题 81
3.5.1 外部引入JS文件 81
3.5.2 JS的URL编码 82
3.5.3 其他需要编码的地方 84
3.6 常见问题分析 84
3.6.1 中文变成了看不懂的字符 84
3.6.2 一个汉字变成一个问号 85
3.6.3 一个汉字变成两个问号 85
3.6.4 一种不正常的正确编码 86
3.7 一种繁简转换的实现方式 87
3.8 总结 88
第4章 Javac编译原理 89
4.1 Javac是什么 90
4.2 Javac编译器的基本结构 90
4.3 Javac工作原理分析 92
4.3.1 词法分析器 93
4.3.2 语法分析器 100
4.3.3 语义分析器 105
4.3.4 代码生成器 115
4.4 设计模式解析之访问者模式 118
4.4.1 访问者模式的结构 119
4.4.2 Javac中访问者模式的实现 120
4.5 总结 121
第5章 深入class文件结构 122
5.1 JVM指令集简介 122
5.1.1 与类相关的指令 124
5.1.2 方法的定义 125
5.1.3 属性的定义 126
5.1.4 其他指令集 127
5.2 class文件头的表示形式 135
5.3 常量池 139
5.3.1 UTF8常量类型 142
5.3.2 Fieldref、Methodref常量类型 143
5.3.3 Class常量类型 143
5.3.4 NameAndType常量类型 144
5.4 类信息 144
5.5 Fields和Methods定义 145
5.6 类属性描述 149
5.7 Javap生成的class文件结构 150
5.7.1 LineNumberTable 152
5.7.2 LocalVariableTable 153
5.8 总结 155
第6章 深入分析ClassLoader工作机制 156
6.1 ClassLoader类结构分析 157
6.2 ClassLoader的等级加载机制 158
6.3 如何加载class文件 161
6.3.1 加载字节码到内存 161
6.3.2 验证与解析 163
6.3.3 初始化Class对象 163
6.4 常见加载类错误分析 163
6.4.1 ClassNotFoundException 163
6.4.2 NoClassDefFoundError 164
6.4.3 UnsatisfiedLinkError 165
6.4.4 ClassCastException 166
6.4.5 ExceptionInInitializerError 167
6.5 常用的ClassLoader分析 168
6.6 如何实现自己的ClassLoader 172
6.6.1 加载自定义路径下的class文件 172
6.6.2 加载自定义格式的class文件 174
6.7 实现类的热部署 176
6.8 Java应不应该动态加载类 178
6.9 总结 179
第7章 JVM体系结构与工作方式 180
7.1 JVM体系结构 180
7.1.1 何谓JVM 180
7.1.2 JVM体系结构详解 183
7.2 JVM工作机制 185
7.2.1 机器如何执行代码 185
7.2.2 JVM为何选择基于栈的架构 186
7.2.3 执行引擎的架构设计 187
7.2.4 执行引擎的执行过程 188
7.2.5 JVM方法调用栈 193
7.3 总结 197
第8章 JVM内存管理 198
8.1 物理内存与虚拟内存 199
8.2 内核空间与用户空间 200
8.3 在Java中哪些组件需要使用内存 201
8.3.1 Java堆 201
8.3.2 线程 201
8.3.3 类和类加载器 202
8.3.4 NIO 202
8.3.5 JNI 203
8.4 JVM内存结构 203
8.4.1 PC寄存器 204
8.4.2 Java栈 204
8.4.3 堆 205
8.4.4 方法区 205
8.4.5 运行时常量池 206
8.4.6 本地方法栈 206
8.5 JVM内存分配策略 206
8.5.1 通常的内存分配策略 207
8.5.2 Java中的内存分配详解 207
8.6 JVM内存回收策略 212
8.6.1 静态内存分配和回收 212
8.6.2 动态内存分配和回收 213
8.6.3 如何检测垃圾 213
8.6.4 基于分代的垃圾收集算法 215
8.7 内存问题分析 224
8.7.1 GC日志分析 224
8.7.2 堆快照文件分析 227
8.7.3 JVM Crash日志分析 227
8.8 实例1 233
8.9 实例2 235
8.10 实例3 237
8.11 总结 242
第9章 Servlet工作原理解析 243
9.1 从Servlet容器说起 243
9.1.1 Servlet容器的启动过程 244
9.1.2 Web应用的初始化工作 247
9.2 创建Servlet实例 249
9.2.1 创建Servlet对象 250
9.2.2 初始化Servlet 250
9.3 Servlet体系结构 252
9.4 Servlet如何工作 255
9.5 Servlet中的Listener 257
9.6 Filter如何工作 259
9.7 Servlet中的url-pattern 261
9.8 总结 262
第10章 深入理解Session与Cookie 263
10.1 理解Cookie 264
10.1.1 C
深入分析Java Web技术内幕(修订版) 下载 mobi epub pdf txt 电子书 格式