深入分析java web技术内幕目录一览
Web请求过程
- 如何发起请求:browser,httpclient
- http解析:chrome ,cache
- Dns域名解析:域名缓存
- cdn:负载,动态加速,回源
Java I/O
- I/0类库的基本架构:字节操作,字符操作,字节字符的转化
- 磁盘的I/O:内核空间,用户空间,同步,异步,内存映射
- 网络I/O工作机制:tcp状态转化,网络传输的因素,socket的工作机制,通信链路,数据传输
- NIO的工作方式:BIO cpu被抢占,channel,select,selectionkey,bytebuffer,数据分发
- I/O优化:磁盘I/O优化:raid,
- tcp网络参数:timeout,端口范围,网络I/O:减少交互次数,减少网络传输大小,编码,同步/异步,阻塞/非阻塞。
设计模式:适配器模式(从一个接口态转成另一种接口),装饰器模式(扩展现有接口的功能)
Java编码问题
常见的编码:ASCII(128),ISO-8859-1(256),GB2312,GBK,GB18030,UTF-16,UTF-8
编码解码
web中涉及的编码:- url编码:url编码和querystring编码分开,设置connector的编码URLEncoding="UTF-8" useBodyEncodingForURI="true".
- Http Header编码:不可以传输费AscII字符,如果需要传输,先用URLEncoder编码,服务端再解码
- POST表单:编码由contenttype设定,服务端用filter设置request.setCharacterEncoding解码,上传是字节流不编码。
JS编码:js文件的编码与html的编码不一致,所以默认设置下charset。encodeUrlComponent 两次编码解码
多语言支持:Nginx 增加一个多语言转换。
Javac编译原理
- 词法分析,语法分析,符号表构建,annotation处理,标注和语法检查,数据流分析,类型转化,字节码
- 实现类:com.sun.tools.javac.parser.Scanner ,Parser
- 访问者模式:将稳定的数据结构和对数据结构变化多端的操作解耦
深入class文件结构
- jvm指令集
- class文件头
- 常量池
- 类信息
- Field和methods
- 类属性
- javap
深入classloader工作机制
- classloader:class加载到jvm,类由谁加载,加载成jvm统一的对象格式
- classloader:findClass,defineClass,resolveClass
- 类型:Bootstrap Classloader,ExtClassloader,AppClassLoader
- 自定义的class,类的热部署:
- java的动态加载:jsp动态加载
JVM体系结构与工作方式
JVM体系结构:
通过模拟一个计算机达到计算机所具有的功能:指令集,计算单元,寻址,寄存器,存储。
类加载,执行引擎(解释执行,JIT本地执行,寄存器执行)不同的jvm实现不同,内存区,本地方法调用
JVM工作机制
基于栈的工作机制:与平台无关,指令紧凑,减少数据量
JVM内存管理
物理内存与虚拟内存:虚拟内存与物理内存 n:1 当一个虚拟内存不活跃时,会将该映射的物理内存移到磁盘文件中(页面文件)。
内核空间与用户空间,
Java内存组件:堆,线程,类and类加载,NIO,JNI
JVM内存结构:寄存器,堆,栈,方法区,常量池
JVM内存分配:静态分配,堆分配,栈分配
JVM内存回收:根对象无法到达的对象可以回收(垃圾检测),分代垃圾回收 y,s1,s2,old,perm
serial collector,parallel collector,cms collector
cms针对old和perm区,minor gc采用多线程
DisableExplicitGC,System.gc().变成空调,没有释放NIO,需要改成 ExplicitGCInvokesConcurrent
direct memory 分析工具 sjdrectmem
Servlet工作原理
Servlet容器:tomcat的启动类 XX.startup.Tomcat,一个web应用对应一个StandardContext容器,添加的listener继承了lifecyclelistener接口
globalwebXml>webfragement.xml>web.xml;Servlet被包装成StandardWrapperServlet实例:DefaultServlet和JspServlet
Servlet体系结构:采用门面设计模式拿到该拿的数据
Servlet如何工作:通过 XX.http.mapper 找到对应的wrapper容器,必须要要执行filter链
Servlet中的listener:ServletContextListener在启动后不能再添加新的,spring 的ContextLoadListener实现了该listener,初始化spring容器
Filter如何工作:多个filter串成一个FilterChain,url匹配:精确匹配,路劲匹配,后缀匹配
Session与Cookie
session与cookie是为了保持用户与后端服务器的交互状态,cookie的数量与大小有限制
理解cookie:不超过50个,大小不超过4095
理解session:standardsession对象持久化到session.ser中,必须调用sevlet容器的stop方法,request.getSession() 创建
cookie安全与压缩:cookie可修改(失效时间,加密,结合浏览器或ip特点的唯一key,httpOnly),有安全隐患,可以采用gzip和deflate进行压缩突破存储限制,减少带宽
分布式session框架:应用可写的session项和cookie项统一管理,session分布式缓存存储,InputHttpSession
跳转应用,sessionId在所有域名下都写入cookie中,另外根据用户的私密信息生成唯一key(比如请求ip,证书文件,浏览器信息)。表单重复提交:每次请求是带上一个token,校验token和session中的是否一致,请求后disable按钮
多端session统一:cookie和session要统一,拿统一的session,二维码扫码登录:PC定时拉取该二维码登录有没有登录,手机扫完之后,发送二维码信息,用户的sessionid,发送到服务,标志校验通过,把sessionid发送到终点,唯一信息。
Tomcat的系统架构与设计模式
tomcat的总体设计:
connector和container,container对应多个service,一个service可以设置多个connector
connector负责请求数据和返回数据的封装成request和response,处理这个请求由container完成
tomcat5中默认的connector是coyote。
container是责任链模式,包含engine>host>context>Wrapper,容器可以在backgroudprocess中定义周期性的事件,
其他组件:security,logger,session,mbeans,naming
门面模式
不能将自己的数据过多的暴露出去,通过一层门面进行限制,httprequest和httprequestfacade
观察者模式
由 subject,concretesubject,observer组成,
LifecycleEvent定义主题,LifecycleSupport管理event和observer的关系
命令模式
把发出命令的责任和执行命令的责任分开 command,invoker,receiver组成,HttpProcessor和ContainerBase
责任链模式
责任链模式就是很多对象与对象的家引用形成一条链,例如tomcat中的pipeline和valve。
Jetty的工作原理解析
Jetty的基本架构:所有的扩展组件都作为handler添加到server中,有handlerwrapper和handlercollection构成
Jetty的启动过程:handler有父子关系,启动注册在jmx上的mbean,最后启动connector
接受请求:基于http请求:connectorendpoint,ajp请求:基于ajp13parser上完成,NIO处理:监听和处理分开
处理请求:ServletHolder 是 Servlet的装饰类,添加到handler中
与Jboss集成:基于ajp集成
与tomcat的比较:短生命周期的连接采用tomcat,长连接采用jetty
spring框架的设计理念
spring的骨骼架构:核心为bean,core,context,core是发现,建立和维护bean之间关系的帮助类,context是最终管理平台,bean是业务模型。
核心组件:bean:BeanFactory,BeanDefinition,
ApplicationContext:继承beanfactory和resourceloader,core:资源的访问方式,context的资源加载,解析和描述委托给resolver
BeanFactoryPostProcessor和BeanPostProcessor:beanfactory和bean初始化时执行。
InitializingBean和DisposableBean 分布在bean实例创建和销毁时调用。
FactoryBean:不是预设的球模型,由用户自定义
AOP的特性:继承FactoryBean,以及月java Proxy实现动态代理
代理模式:为实际对象创建代理对象,实际执行时,可以增加一些对原对象的额外操作。
策略模式:完成某个操作有多种实现,根据不同场景选择不同的实现,例如动态代理有cglib,jdk proxy等多种实现。
Spring MVC的工作机制和设计模式
mvc的总体设计:dispatchServlet是核心,实现8个功能:initMultipartResolver 处理文件上传;initLocalResolver 处理应用的国际化;initThemeResolver:定义一个主题;initHandlerMappings,请求映射关系;initHandlerAdapters,根据handler类型定义不同的处理规则;initHandlerExceptionsResolvers:handler出错时统一处理;initRequestToViewNameTranslator;initViewResolver
control的总体设计:HandlerMapping和HandlerAdapters两个组件提供,handlerMapping管理url与handler的对应关系,所有的interceptor必须实现HandlerInterceptor。HandlerAdapter帮助定义各种handler,默认提供4种。
整个调用从dispatch的doService方法开始。Model设计:页面渲染需要的参数存储在modelmao中
view设计:InternalResourceViewResolver create和render页面。
模板模式:大的逻辑已经定义,业务只需要实现一些具体步骤,例如spring的abstractview
Ibatis的系统架构和映射原理
将固定不变的脚本ibatis配置实现。
类层次结构:交互类型的框架 client,executor,session
设计策略:parametermap和resultmap,typehandler负责类型转换
运行原理:session负责事务管理
sql解析:配置文件解析成statement
对象映射:DataExchange和AccessPlan实现真正的数据映射
工厂模式:DataExchangeFactory,DataSourceFactory。
Velocity工作原理
总体架构:主要由app、context、runtime一些辅助类,暴露使用的有Velocity和VelocityEngine,context封装了渲染所需的变量
解析:解析成JTree
事件处理:判空,include,取值$
常用优化:减少树节点数量,
与jsp比较:ParserController将jsp编译成servlet,jsp依赖servlet环境,编译执行velocity反射执行
合成模式:部分整体模式,部分和整体都实现一个方法,来实现子处理
解释器模式:将一定格式的文本解释成特定的数据结构,将vm解释成AST抽象语法树。
Velocity优化实践
现实存在的问题:页面大,cpu压力大,临时对象多,gc影响大,空白字符多,浪费带宽
高效的模板引擎:将velocity编译java类,将反射变成直接调用,字符输出改成字节输出
其他方法:去掉非中文空格,压缩tab和换行,合并相同的数据,异步渲染。
大浏览量系统的静态化设计
java的QPS上万很难。
动静区分
静态化方案选择
问题:是否一致性hash,是否使用esi,是否使用物理机,谁来压缩,网卡选择
共享cache,与应用拆分,进行回源
失效:时间驱动被动失效,主动失效:监控变化,java发布,vm发布
cdn化,cdn分布全国,主动发purge给cache失效,二级cdn。
框架设计的思考
解决什么问题,现有框架是否不能解决,是不是比其他方案好
需要简化开发的框架。
框架设计原则:ocp(开闭原则,扩展开放,修改关闭),LSP(里氏代换,凡是父类能用的地方,子类皆可以);
DIP(依赖倒转)依赖抽象,不依赖于具体,ISP(接口隔离):接口尽可能单一,CARP(合成/聚合复用原则)尽可能聚合/合成使用,不使用继承。LOD(迪米特原则),一个对象应到对其他对象细节尽可能少的了解。
优化的理论基础
减少程序的封装程度
简单的程序复杂化
减少翻译的代价
变的转为不变的
深入分析java web技术内幕目录一览的更多相关文章
- 深入分析Java Web技术内幕(修订版)
阿里巴巴集团技术丛书 深入分析Java Web技术内幕(修订版)(阿里巴巴集团技术丛书.技术大牛范禹.玉伯.毕玄联合力荐!大型互联网公司开发应用实践!) 许令波 著 ISBN 978-7-121- ...
- JAVA Coder 的《深入分析Java Web 技术内幕》读书笔记
本文基于<深入分析Java Web 技术内幕> <深入分析Java Web 技术内幕>,作者是 许令波,电子工业出版社.本文只是记录书本当中的精彩部分,作个人回顾和技术分享,请 ...
- Servlet工作原理解析 《深入分析java web 技术内幕》第九章
参考关于servblet的相关文章 侧重概况:https://blog.csdn.net/levycc/article/details/50728921 ibm的相关:https://www.ibm. ...
- developerWorks 图书频道: 深入分析 Java Web 技术内幕,第 10 章
developerWorks 图书频道: 深入分析 Java Web 技术内幕,第 10 章 深入理解 Session 与 Cookie Session 与 Cookie 不管是对 Java Web ...
- 《深入分析Java Web技术内幕》读书笔记 - 第1章 深入Web请求过程
第1章 深入Web请求过程 1 1.1 B/S网络架构概述 2 基于统一的应用层协议HTTP来交互数据. 1.2 如何发起一个请求 4 HTTP连接本质是建立Socket连接.请求实现方式:工具包如H ...
- 深入分析Java Web技术内幕
深入web请求过程 发起一个http请求的过程就是建立一个socket通信的过程 HTTPClient是一个开源的实现了http请求的工具包 深入分析java I/O的工作机制 深入分析java We ...
- 读书笔记之深入分析Java Web技术内幕
章节: 1 B/SB/S的优点: 客户端使用统一的浏览器(Browser) ,浏览器的统一带来了操作的统一,无论使用什么服务,因为浏览器是相同的,所以操作类似.客户使用简单了.服务端开发简化; 使用统 ...
- JVM内存管理 《深入分析java web 技术内幕》第八章
8.1 物理内存与虚拟内存 物理内存RAM(随机存储器),寄存单元为寄存器,用于存储计算单元执行指令的中间结果. 连接处理器和RAM或者处理器和寄存器的是地址总线,这个地址的宽度影响了物理地址的索引范 ...
- java体系结构与工作方式 《深入分析java web 技术内幕》第七章
java体系结构与工作方式 7.1 JVM体系结构 何谓JVM JVM(Java Virtual Machine) 通过模拟一个计算机来达到一个计算机所具有的计算功能 指令集:计算机所能识别的机器语言 ...
随机推荐
- persona 典型用户
1.姓名:王涛 2.年龄:22 3.收入:基本无收入 4.代表用户在市场上的比例和重要性:王涛为铁道学生.本软件的用户主要是学生和老师,尤其是广大的铁大学子,所以此典型用户的重要性不言而喻,而且比例相 ...
- Android-开关机的广播
在上一篇博客Android-sdcard广播的接收处理,中介绍了,如何订阅接收者,去接收系统发送的Sdcard状态改变广播,而这篇博客是订阅接收者,去接收开机/关机的广播 Android操作系统在开机 ...
- python实现注册登录小程序
用python 实现模拟注册和登录的程序:用户信息最终以字典的格式储存在一个txt文件里,具体实现如下: users.txt里用户字典格式如下: { '}, '}, '} } # 注册 f = ope ...
- ASP.NET 页面执行顺序详解
今天整理了一下ASP执行过程,从.net页码的执行周期开始做一个详细的了解.我重写了页面的绝大多数方法.然后加载执行.所得的顺序如下. 方法是每个重写的事件中都输出一个字符,按字符打印出来的先后判断事 ...
- 解决ie img标签内存泄漏
代码: <html> <head> <meta http-equiv="Content-Type" content="text/html; ...
- docker 存储驱动之 overlay2
overlay2 简介 OverlayFS是一种和AUFS很类似的文件系统,与AUFS相比,OverlayFS有以下特性: 1) 更简单地设计 2) 从3.18开始,就进入了Linux内核主线 3) ...
- jQuery查找标签--选择器,筛选器,模态对话框, 左侧菜单栏
查找标签 选择器: 基本选择器(同css) id选择器 $("#id") 标签选择器 $('tagName') class选择器 $(".className") ...
- Generating an arbitrary digit password dictionary
原理说明:以增量方式从开始到结束! 实现方法:CMD命令 特点:纯数字 语法: FOR /L %variable IN (start,step,end) DO command [command-par ...
- django入门-初窥门径-part1
尊重作者的劳动,转载请注明作者及原文地址 http://www.cnblogs.com/txwsqk/p/6510917.html 完全翻译自官方文档 https://docs.djangoproje ...
- leetcode-54-螺旋矩阵
题目描述: 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7 ...