编辑推荐

  

  

让读者知其然,并知其所以然,是《深入分析JavaWeb技术内幕(修订版)》一书的特色。

  作者来自淘宝技术一线,亲历了淘宝网PV从1亿到10亿的发展历程,直接经历了在这个过程中技术的不断突破、飞跃等变迁,并积累了丰富实践经验。

  《深入分析JavaWeb技术内幕(修订版)》正是分享了作者在面临种种技术问题、技术瓶颈时的思路、方法和技巧,具体的应用实践和直接的案例。

  在这次的修订版中,作者补充了淘宝网近两年在无线端的应用实践。在这个快速发展的移动互联的时代,这样直接的技术积累和分享尤其珍贵。

  相信读者一定能从中获益匪浅。

  阿里巴巴集团技术丛书是抱持着为工程师服务的理念诞生的。

  阿里的快速发展,使我们见证技术变革的强大力量。在这过程中,我们经历了技术的变迁、兴衰、成败,既有收获也有教训。如今,阿里已成为一家令人瞩目的互联网公司,站在这样的时点上,回顾过去,放眼四周,我们深刻地觉得有必要将沉淀下来的一线经验与智慧,结集出版,理由有三。

  1.回报。我们获得的种种经验与教训,只有在阿里这样快速成长、体量巨大的公司中才会亲历。这样的技术环境并不是每个工程师都有缘遇到的。这些经历帮助了我们个人能力的提升,也帮助阿里成为一家技术实力过硬的公司。我们愿意把这些内容分享出来,帮助即将或已经面临类似问题的朋友们,如果他们可以从阅读中获得一些启发而少走弯路的话,将令我们欣慰。

  2.交流。在这套丛书里,我们同样会抛出我们的困惑、问题,借助丛书的平台,扩大工程师沟通的圈子,以书会友,共同探索、学习、提高。

  3.温故知新。以结集的形式,将以往的经验与知识固化下来,既可便于以后查阅,也可以帮助我们系统地梳理思路,更为全面地审视、洞察、并理解过去发生的种种,为未来的变化做好更充分、扎实的准备。

  基于以上的考虑,阿里巴巴集团技术丛书将立足于实践,着眼于问题,从工程师的视角解读技术的内涵。

让思考成为我们生活的乐趣,让阅读成为我们进步的阶梯!


  

内容简介

  

  

《深入分析JavaWeb技术内幕(修订版)》新增了淘宝在无线端的应用实践,包括:CDN动态加速、多终端化改造、多终端Session统一,以及在大流量的情况下,如何跨越性能、网络和一个地区的电力瓶颈等内容,并提供了比较完整的解决方案。

《深入分析JavaWeb技术内幕(修订版)》主要围绕JavaWeb相关技术从三方面全面、深入地进行了阐述。首先介绍前端知识,即在JavaWeb开发中涉及的一些基本知识,包括Web请求过程、HTTP、DNS技术和CDN技术。其次深入介绍了Java技术,包括I/O技术、中文编码问题、Javac编译原理、class文件结构解析、ClassLoader工作机制及JVM的内存管理等。最后介绍了Java服务端技术,主要包括Servlet、Session与Cookie、Tomcat与Jetty服务器、Spring容器、iBatis框架和Velocity框架等原理介绍,并介绍了服务端的一些优化技术。

《深入分析JavaWeb技术内幕(修订版)》不仅介绍这些技术和框架的工作原理,而且结合示例来讲解,通过通俗易懂的文字和丰富、生动的配图,让读者充分并深入理解它们的内部工作原理,同时还结合了设计模式来介绍这些技术背后的架构思维。


  

作者简介

  2009年加入淘宝,一直关注性能优化领域,经历了淘宝PV从1亿到10亿的发展历程,参与了淘宝高访问量Web系统模板引擎的改造、静态化、无线化、CDN等优化改造项目。
  先后研究过分布式数据库Cassandra系统、Tomcat、Jetty等系统的源码。一直参与淘宝访问量高的系统页面详情系统的优化工作,设计并实现了sketch模板引擎、MVC框架Feiba等,将服务端性能提升近50%左右;所在的性能优化小组一直在做详情的前端优化,将详情页的首屏展示时间缩短为1s之内。

精彩书评

  ★这是一本关于Java的书,里面讲述的大量基础知识对前端开发工程师非常有帮助。比如中文编码章节,作者以一个实践者的身份详细阐述了编码问题的方方面面。总之,这是一本很用心的书,是实践者的思考和总结。目前在国内很少看到这类书籍,强烈推荐从事Web开发工作的人员阅读并实践之。
  ——王保平(玉伯),开源前端类库KISSY、SeaJS作者
  
  ★作者在淘宝做了很多JavaWeb方面的改造项目,在JavaWeb的相关技术上有深入的掌握,并积累了丰富的经验。在这《深入分析Java Web技术内幕(修订版)》中作者不仅向读者展示了这类大改造项目所需的知识,还展示了JavaWeb更为全景的技术知识体系。《深入分析Java Web技术内幕(修订版)》值得JavaWeb开发人员阅读。
  ——林昊(毕玄),淘宝资深技术专家
  
  ★从第1次拜读相关内容开始,就可以感觉到作者并不是在简简单单地讲述一门技术或者一个概念,他的分析和讲解十分深入,并且可以很好地聚焦读者的思路,尤其是在JavaWeb、Servlet规范及字符串处理方面,都有很优秀的内容。在众多向developerWorks投稿的国内作者中,无论是从文章的质量看,还是从内容的选题方向看,作者的文章都可称为上乘之作。同时,他的多篇文章还得到了广大网站读者的好评,其访问量、评分及评论的数量均名列前茅。
  ——刘达,developerWorks中国Java专区编辑、技术工程师

目录

第1章深入Web请求过程1
1.1B/S网络架构概述2
1.2如何发起一个请求4
1.3HTTP协议解析6
1.3.1查看HTTP信息的工具8
1.3.2浏览器缓存机制9
1.4DNS域名解析12
1.4.1DNS域名解析过程12
1.4.2跟踪域名解析过程15
1.4.3清除缓存的域名18
1.4.4几种域名解析方式19
1.5CDN工作机制20
1.5.1CDN架构20
1.5.2负载均衡21
1.5.3CDN动态加速24
1.6总结25
第2章深入分析JavaI/O的工作机制26
2.1Java的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.2Java访问磁盘文件34
2.2.3Java序列化技术35
2.3网络I/O工作机制37
2.3.1TCP状态转化38
2.3.2影响网络传输的因素40
2.3.3JavaSocket的工作机制40
2.3.4建立通信链路41
2.3.5数据传输42
2.4NIO的工作方式42
2.4.1BIO带来的挑战42
2.4.2NIO的工作机制43
2.4.3Buffer的工作方式46
2.4.4NIO的数据访问方式48
2.5I/O调优50
2.5.1磁盘I/O优化50
2.5.2TCP网络参数调优51
2.5.3网络I/O优化53
2.6设计模式解析之适配器模式57
2.6.1适配器模式的结构57
2.6.2JavaI/O中的适配器模式58
2.7设计模式解析之装饰器模式58
2.7.1装饰器模式的结构59
2.7.2JavaI/O中的装饰器模式59
2.8适配器模式与装饰器模式的区别60
2.9总结60
第3章深入分析JavaWeb中的中文编码问题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.6UTF-8编码代码片段72
3.3.7对几种编码格式的比较74
3.4在JavaWeb中涉及的编解码74
3.4.1URL的编解码76
3.4.2HTTPHeader的编解码79
3.4.3POST表单的编解码79
3.4.4HTTPBODY的编解码80
3.5JS中的编码问题81
3.5.1外部引入JS文件81
3.5.2JS的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.1Javac是什么90
4.2Javac编译器的基本结构90
4.3Javac工作原理分析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.2Javac中访问者模式的实现120
4.5总结121
第5章深入class文件结构122
5.1JVM指令集简介122
5.1.1与类相关的指令124
5.1.2方法的定义125
5.1.3属性的定义126
5.1.4其他指令集127
5.2class文件头的表示形式135
5.3常量池139
5.3.1UTF8常量类型142
5.3.2Fieldref、Methodref常量类型143
5.3.3Class常量类型143
5.3.4NameAndType常量类型144
5.4类信息144
5.5Fields和Methods定义145
5.6类属性描述149
5.7Javap生成的class文件结构150
5.7.1LineNumberTable152
5.7.2LocalVariableTable153
5.8总结155
第6章深入分析ClassLoader工作机制156
6.1ClassLoader类结构分析157
6.2ClassLoader的等级加载机制158
6.3如何加载class文件161
6.3.1加载字节码到内存161
6.3.2验证与解析163
6.3.3初始化Class对象163
6.4常见加载类错误分析163
6.4.1ClassNotFoundException163
6.4.2NoClassDefFoundError164
6.4.3UnsatisfiedLinkError165
6.4.4ClassCastException166
6.4.5ExceptionInInitializerError167
6.5常用的ClassLoader分析168
6.6如何实现自己的ClassLoader172
6.6.1加载自定义路径下的class文件172
6.6.2加载自定义格式的class文件174
6.7实现类的热部署176
6.8Java应不应该动态加载类178
6.9总结179
第7章JVM体系结构与工作方式180
7.1JVM体系结构180
7.1.1何谓JVM180
7.1.2JVM体系结构详解183
7.2JVM工作机制185
7.2.1机器如何执行代码185
7.2.2JVM为何选择基于栈的架构186
7.2.3执行引擎的架构设计187
7.2.4执行引擎的执行过程188
7.2.5JVM方法调用栈193
7.3总结197
第8章JVM内存管理198
8.1物理内存与虚拟内存199
8.2内核空间与用户空间200
8.3在Java中哪些组件需要使用内存201
8.3.1Java堆201
8.3.2线程201
8.3.3类和类加载器202
8.3.4NIO202
8.3.5JNI203
8.4JVM内存结构203
8.4.1PC寄存器204
8.4.2Java栈204
8.4.3堆205
8.4.4方法区205
8.4.5运行时常量池206
8.4.6本地方法栈206
8.5JVM内存分配策略206
8.5.1通常的内存分配策略207
8.5.2Java中的内存分配详解207
8.6JVM内存回收策略212
8.6.1静态内存分配和回收212
8.6.2动态内存分配和回收213
8.6.3如何检测垃圾213
8.6.4基于分代的垃圾收集算法215
8.7内存问题分析224
8.7.1GC日志分析224
8.7.2堆快照文件分析227
8.7.3JVMCrash日志分析227
8.8实例1233
8.9实例2235
8.10实例3237
8.11总结242

第9章Servlet工作原理解析243
9.1从Servlet容器说起243
9.1.1Servlet容器的启动过程244
9.1.2Web应用的初始化工作247
9.2创建Servlet实例249
9.2.1创建Servlet对象250
9.2.2初始化Servlet250
9.3Servlet体系结构252
9.4Servlet如何工作255
9.5Servlet中的Listener257
9.6Filter如何工作259
9.7Servlet中的url-pattern261
9.8总结262
第10章深入理解Session与Cookie263
10.1理解Cookie264
10.1.1Cookie属性项264
10.1.2Cookie如何工作265
10.1.3使用Cookie的限制268
10.2理解Session269
10.2.1Session与Cookie269
10.2.2Session如何工作270
10.3Cookie安全问题273
10.4分布式Session框架274
10.4.1存在哪些问题274
10.4.2可以解决哪些问题275
10.4.3总体实现思路275
10.5Cookie压缩280
10.6表单重复提交问题282
10.7多终端Session统一283
10.8总结285
第11章Tomcat的系统架构与设计模式286
11.1Tomcat总体设计286
11.1.1Tomcat总体结构287
11.1.2Connector组件293
11.1.3Servlet容器Container298
11.1.4Tomcat中的其他组件309
11.2Tomcat中的设计模式309
11.2.1门面设计模式309
11.2.2观察者设计模式311
11.2.3命令设计模式313
11.2.4责任链设计模式314
11.3总结316
第12章Jetty的工作原理解析317
12.1Jetty的基本架构317
12.1.1Jetty的基本架构简介317
12.1.2Handler的体系结构319
12.2Jetty的启动过程320
12.3接受请求321
12.3.1基于HTTP协议工作321
12.3.2基于AJP工作323
12.3.3基于NIO方式工作326
12.4处理请求327
12.5与JBoss集成330
12.6与Tomcat的比较331
12.6.1架构比较331
12.6.2性能比较332
12.6.3特性比较332
12.7总结333


第13章Spring框架的设计理念与设计模式分析334
13.1Spring的骨骼架构334
13.1.1Spring的设计理念335
13.1.2核心组件如何协同工作336
13.2核心组件详解337
13.2.1Bean组件337
13.2.2Context组件339
13.2.3Core组件340
13.2.4Ioc容器如何工作342
13.3Spring中AOP的特性详解352
13.3.1动态代理的实现原理352
13.3.2SpringAOP如何实现355
13.4设计模式解析之代理模式358
13.4.1代理模式原理358
13.4.2Spring中代理模式的实现358
13.5设计模式解析之策略模式361
13.5.1策略模式原理361
13.5.2Spring中策略模式的实现362
13.6总结362
第14章SpringMVC工作机制与设计模式364
14.1SpringMVC的总体设计364
14.2Control设计369
14.2.1HandlerMapping初始化370
14.2.2HandlerAdapter初始化372
14.2.3Control的调用逻辑373
14.3Model设计374
14.4View设计375
14.5框架设计的思考377
14.5.1为什么需要框架377
14.5.2需要什么样的框架377
14.5.3框架设计的原则378
14.5.4“指航灯”378
14.5.5最基本的原则378
14.6设计模式解析之模板模式379
14.6.1模板模式的结构379
14.6.2SpringMVC中的模板模式示例379
14.7总结380
第15章深入分析Ibatis框架之系统架构与映射原理381
15.1Ibatis框架主要的类层次结构381
15.2Ibatis框架的设计策略382
15.3Ibatis框架的运行原理384
15.4示例386
15.5Ibatis对SQL语句的解析388
15.6数据库字段映射到Java对象389
15.7示例运行的结果391
15.8设计模式解析之简单工厂模式391
15.8.1简单工厂模式的实现原理391
15.8.2在Ibatis中的简单工厂模式示例392
15.9设计模式解析之工厂模式393
15.9.1工厂模式的实现原理393
15.9.2Ibatis中的工厂模式示例394
15.10总结395
第16章Velocity工作原理解析397
16.1Velocity总体架构398
16.2JJTree渲染过程解析401
16.2.1#set语法405
16.2.2Velocity的方法调用406
16.2.3#if、#elseif和#else语法409
16.2.4#foreach语法410
16.2.5#parse语法412
16.3事件处理机制413
16.4常用优化技巧416
16.4.1减少树的总节点数量416
16.4.2减少渲染耗时的节点数量416
16.5与JSP比较417
16.5.1JSP渲染机制417
16.5.2Velocity与JSP423
16.6设计模式解析之合成模式423
16.6.1合成模式的结构423
16.6.2Velocity中合成模式的实现424
16.7设计模式解析之解释器模式425
16.7.1解释器模式的结构425
16.7.2Velocity中解释器模式的实现426
16.8总结426
第17章Velocity优化实践427
17.1现实存在的问题427
17.2优化的理论基础428
17.2.1程序语言的三角形结构428
17.2.2数据结构减少抽象化429
17.2.3简单的程序复杂化429
17.2.4减少翻译的代价430
17.2.5变的转化为不变430
17.3一个高效的模板引擎的实现思路430
17.3.1vm模板如何被编译432
17.3.2方法调用的无反射优化439
17.3.3将字符输出改成字节输出442
17.4优化的成果443
17.4.1将char转成byte443
17.4.2无反射执行444
17.5其他优化手段445
17.6总结445
第18章大浏览量系统的静态化架构设计446
18.1淘宝大浏览量商品详情系统简介446
18.2系统面临哪些挑战447
18.3淘宝前台系统的优化历程449
18.4大浏览量系统的静态改造449
18.4.1什么是静态化系统449
18.4.2为什么要进行静态化架构设计450
18.4.3如何改造动态系统451
18.4.4几种静态化方案的设计及选择453
18.4.5如何解决失效问题458
18.4.6服务端静态化方案的演进:CDN化459
18.5总结462


其他推荐