深入分析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被包装成StandardWrapper
  • Servlet实例: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(迪米特原则),一个对象应到对其他对象细节尽可能少的了解。

优化的理论基础

    • 减少程序的封装程度
    • 简单的程序复杂化
    • 减少翻译的代价
    • 变的转为不变的
时间: 2024-10-09 23:32:24

深入分析java web技术内幕目录一览的相关文章

JAVA读书推荐----《深入分析Java Web技术内幕》--《java多线程编程核心技术》--《大型网站技术架构 核心原理与案例分析》-《Effective Java中文版》

(1)  首先推荐的不是一本书,而是一个博客,也是我们博客园另外一位博友java_my_life. 目前市面上讲解设计模式的书很多,虽然我前面讲了看书是最好的,但是对设计模式感兴趣的朋友们,我推荐的是这个博客.这位博友的设计模式讲得非常非常好,我认为90%的内容都是没有问题且很值得学习的,其讲解设计模式的大体路线是: 1.随便开篇点明该设计模式的定义 2.图文并茂讲解该设计模式中的结构 3.以详细的代码形式写一下该种设计模式的实现 4.补充内容 5.讲解该设计模式的优缺点 对于一个设计模式我们关

读书笔记之深入分析Java Web技术内幕

章节: 1 B/SB/S的优点: 客户端使用统一的浏览器(Browser) ,浏览器的统一带来了操作的统一,无论使用什么服务,因为浏览器是相同的,所以操作类似.客户使用简单了.服务端开发简化; 使用统一的http协议,便于开发,可以直接使用现有的基于http协议的容器,只关注业务逻辑. 2. BS的结构    B/S架构前后端都基于http协议交互数据. http协议采用无状态的短连接的数据模式,既一次请求完成一次数据交互,也对应着一个业务逻辑.          DNS可以解析域名为IP地址

深入分析java web技术内幕 学习笔记

在Java虚拟机规范中将Java运行时数据划分为6种,(其中的域即类的成员)分别为: ◎  PC寄存器数据: 它用于保存当前正常执行的程序的内存地址, JVM规范只定义了Java方法需要记录指针信息,而对于Native方法,并没有要求记录执行的指针地址.pc寄存器所指向的也是当前活动栈(栈顶, 即当前执行的方法)地址 ◎  Java栈: 与线程密切相关, 线程中的每个调用的方法都会在栈中有一个对应的栈针,栈中主要存放一些基本类型的变量数据(int.short.long.byte.float.do

深入分析Java Web技术内幕 笔记

1. B/S网络架构概述 当一个用户在浏览器里输入www.csdn.net这个URL时,将会发生很多操作.首先,它会请求DNS把这个域名解析成对应的IP地址,然后根据这个IP地址在互联网上找到对应的服务器,想这个服务器发起一个get请求,由这个服务器决定返回默认的数据资源给访问的用户.在服务器端实际上还有很多复杂的业务逻辑:服务器可能有很多台,到底指定哪台服务器来处理请求,这需要一个负载均衡设备来平均分配所有用户的请求:还有请求的数据是存储在分布式缓存里还是一个静态文件中,或是在数据库里:当数据

深入分析Java Web技术(1)

BS网络模型的基本过程: 当我们在浏览器中输入"www.google.com"的时候,首先会请求DNS服务器对域名进行解析成都应的IP地址,然后根据这个IP地址在互联网上找到谷歌的服务器,向这个服务器发送一个"get"请求,有这个服务器决定返回数据资源给请求的用户(在服务器端可能还会存在其他复杂的业务逻辑,服务器端有很多机器的话,需要考虑负载均衡,由哪一台服务器对资源进行回复,请求的文件是存储在静态文件中还是存储在分布式缓存中或者是数据库中,当数据返回服务器时,会发

深入分析Java Web技术(2) IO

IO是当今Web面临的主要问题之一,可以说,大部分web应用的瓶颈都是IO的瓶颈. Java的IO类是java.io.它包含有80多个类,分为4大部分: 基于字节操作: InputStream,OutputStream 基于字符操作: Writer 和Reader 基于磁盘操作: File 基于网络操作: Socket 一.基于字符的IO操作 不管是网络传输还是磁盘,最小的存储单元都是字节,而不是字符,那为什么还有字符的处理呢?这是因为我们程序中操作的单位一般都是字符,而不是字节,而将字符转换为

Java Web技术总结(目录)

来源于:http://www.jianshu.com/p/539bdb7d6cfa Java Web技术经验总结(一) Java Web技术经验总结(二) Java Web技术经验总结(三) Java Web技术经验总结(四) Java Web技术经验总结(五) Java Web技术经验总结(六) Java Web技术经验总结(七) Java Web技术经验总结(八) Java Web技术经验总结(九) Java Web技术经验总结(十) Java Web技术经验总结(十一) 文/杜琪(简书作者

基于JAVA WEB技术旅游服务网站系统设计与实现网上程序代写

基于JAVA WEB技术旅游服务网站系统设计与实现网上程序代写 专业程序代写服务(QQ:928900200) 随着社会的进步.服务行业的服务水平不断发展与提高,宾馆.酒店.旅游等服务行业的信息量和工作量日益变大,而传统的人工管理方式已经远远不能满足现在旅游的服务方式.传统的旅游方式经分析其有诸多的缺陷,存在数据维护效率低下,不易保管,容易丢失和出错.同时查询也不方便,劳动力成本过高导致的旅游资源信息不方便,也在一定程度上导致了对各种信息反应缓慢,容易丧失商机.为了弥补上述缺陷,便于开展旅游预订工

深入分析Java Web中的中文编码问题

要对Java Web项目进行编码原因: 1.在计算机中存储信息的最小单位是1个字节,即8个bit,所以能表示的字符范围是0~255个. 2.电脑需要表示的符号太多.无法用1个字节完全表示. 要解决这个问题,必须要有一个新的数据结构char,而从bit到char就要进行编码. 常见的编码格式: 1.ASCII码 总共128个,用1个字符的低7位表示,0~31是控制字符,如换行.回车.删除等.32~126是打印字符,可以通过键盘输入并且表示出来 2.ISO-8859-1 ISO组织在ASCII的基础