`

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

阅读更多

深入分析Java Web技术内幕

1深入Web请求

一个HTTP连接本质上是建立一个Socket连接,所以可以使用HTTPClient模拟

 

HTTP协议中最重要的是Header,控制着数据传输,控制着浏览器的渲染和服务器的执行逻辑。

Cache-control/Pragma

用于指定所有缓存机制在整个请求中必须服从的指令。如果知道该页面是否是缓存,不仅可以控制浏览器,还可以控制和HTTP协议相关的缓存或代理服务器。

Cache-controlno-cachePragmano-cache作用一样

 

Expires:过期时间。浏览器发出请求前,先检查是否过期,过期了就重新请求数据。

 

Last-modify:服务器资源的最后修改时间。配合304Code304即目前页面是最新的,不用请求。

 

HOST配置:

Window对应的,在Linux系统中,文件是/etc/named.conf

HOST文件在系统域名解析时用。域名解析过程(浏览器缓存、OS Host文件、域名服务器)

Win/Linux查看域名解析结果:nslookup

刷新DNS缓存:Winipconfig/flushdns

Linux:/etc/init.d/nscd restart

 

Java JVM中也会缓存DNS的解析结果:

InetAddress类中完成。有两种缓存策略:正确解析结果缓存,失败解析结果缓存。这2个缓存时间配置决定,位于%JAVA_HOME%/lib/security/java. Security文件。配置项是networkaddress.cache.tllnetworkaddress.cache.nagetive.tll,默认值是-110秒。

要修改这两个值,可以直接改文件,也可以再启动时加-Dsun.net.inetaddr.tll=XXX修改默认值。或通过INetAddress类修改。

 

域名解析记录形式

A记录:

A代表Address,用来指定域名对应的IPA记录可以将多个域名解析到一个IP,但不能将一个域名解析到多个IP

 

MX记录:

表示Email Exchange。将域名下的邮件服务器指向自己的Mail Server

 

CNAME记录:即别名解析。为一个域名设置一个或多个别名。

NS记录:为某个域名指定DNS解析服务器。

TXT记录:为某个主机名或域名设置说明。

 

常用的负载均衡架构设计:链路负载均衡、集群负载均衡、操作系统负载均衡

链路负载均衡:通过DNS解析到不同IP,用户请求根据IP访问不同服务器;(优)请求直接访问目标服务器,无需经过代理,快。(缺)某个服务器挂掉,很难及时更新域名解析结构。

集群负载均衡:分为软件负载均衡(成本低,多次代理,会增加延时)、硬件负载均衡(使用一台专门的硬件设备转发请求,性能好但很贵)。

操作系统负载均衡:利用OS中的软中断或硬件中断达到负载均衡。

2Java IO机制

Java IO类在io下,80多个类。分为四组:

字节操作:InputStream OutputStream

字符操作:Writer Reader

磁盘操作:File

网络操作:Socket

 

访问文件的方式

标准访问方式:当应用程序调用read接口时,OS检查内核的高速缓存中有没有需要的数据,如果已经缓存了,就直接从缓存中取出。如果没有,从磁盘中读取,并缓存到OS的缓存中。

直接IO方式:直接从磁盘读取,减少数据的缓存复制。

同步访问方式:数据读写都是同步操作,只有数据写入磁盘才返回成功标记。(性能差)

异步访问方式:线程发出数据请求后,继续做其他事情,而非阻塞等待。数据返回后再处理。(高效)

 

Java序列化:将一个对象转化为二进制的字节数组。更好的多语言间的序列化工具,如Google Proto

 

Linux磁盘IO情况命令:iostat

查看可使用的端口范围:/proc/sys/net/ipv4/ip_local_port_range

 

网络IO优化

减少网络交互次数(设置缓存、合并请求)、减少网络传输数据量的大小(数据压缩、简单协议只读头部内容)、尽量减少编码(网络IO以字节传输)。

 

同步异步、阻塞非阻塞

根据交互场景设计合适的交互方式,主要有同步异步、阻塞非阻塞。

同步异步的比喻:打电话和短信

 

阻塞和非阻塞是从CPU角度说的。阻塞就是CPU停下来等待一个慢任务完成后,才能做其他的事情;非阻塞就是慢任务进行时CPU进行其他事情,等慢任务完成,CPU再继续做后续工作。非阻塞表面提高了CPU利用率,但也带来线程切换。

 

其组合共有四种:

同步阻塞:最简单最常用的,IO性能差,CPU大部分时间是空闲状态;

同步非阻塞:提升IO性能的常用手段,在网络IO长连接同时传输数据不多时使用;

异步阻塞:分布式数据库常用。一个写操作,写几个机器。提升网络IO效率。尤其是同时写多分数据。

异步非阻塞:少数非常复杂的情况下使用。如集群消息同步,如cassandra。适用于同时写多份相同数据到不同机器,数据量不大但很频繁。

设计模式之适配器模式

功能:将一个类的接口变成客户端所能接收的另一种接口,从而使两个不匹配、无法工作的2个类一起工作。

Java IO类库中应用该模式的类:InputstreamReaderOutputStreamWriterStringReaderByteArrayInputStream

设计模式之装饰器模式

让类重新装饰一下,更漂亮或功能更强大。而类原来的使用者不会感受到装饰前后的变化。

Java IO示例:FilteriorInputStream

 

装饰器模式和适配器模式的异同:

都有一个别名包装模式,透明的作用看起来都是包装一个类或对象的作用,但目的不一样。

适配器模式的意义是将一个接口变成另一个接口,通过改变接口实现复用的目的;

装饰器模式不是要改变被装饰对象的接口,而且保持原接口,但增强接口的功能。

3中文编码问题

为什么要编码

计算机中存储信息的最小单位是byte字节,8bit,所以能表示的字符有0-255

人类的符号太多,无法用一个字节表示。

所以必须要有一个新的数据结构char,从charbyte要编码

各种编码

汉字编码:GB2312GBKUTF8UTF16

几种编码格式比较:

GB2312<GBKGBK范围大,能表示所有汉字

UTF16Java内存编码方式,但不适合网络传输

UTF8最理想

 

URL编码

URL组成:

http://  localhost  :8080   /examples     /servlets/   info=

schema  domain   port    contextPath   servletPath   path info

 

?a=aaa

queryString

 

同一个汉字在path infoqueryString的编码是不一样的,比如前者可能是UTF8编码后者可能是GBK编码。不同浏览器对path Info的编码可能不一样。

浏览器URL编码规则是将非ASCII字符按照某种编码格式编码成每个16进制表示的字节+%

 

Tomcat中对URLURI部分编码的设置是在connectorURIEncoding进行的

 

不同的JS框架对URL编码处理不同

JS中常用的编码函数escape():将ASCII、数字、字母、标点符号以外的字符均转化为Unicode。并在编码值前加%u。解码unsecape().

EncodeURI():将整个URL进行UTF8编码,每个编码值前加%

解码decodeURI()。

EncodeURIComponent():除数字、字母不编码,其他均编码。解码decodeURIComponent()、

4Javac编译原理

Javac编译器的工作:将Java语言规范转化为JVM语言规范。即将Java源代码的语言转化成当前这台机器能够识别的机器语言。

常见编译器的工作步骤

1读取源代码,一个个字节读入,找出预发关键词--词法分析,找出规范的Token流;

2Token流进行语法分析,检查这些关键词组合是不是符合Java规范,形成抽象语法树;

3语义分析:复杂语法转化简单语法;形成注解过的抽象语法树;

4通过字节码生成器生成字节码;

5深入Class文件结构

 

6深入分析ClassLoader工作机制

ClassLoader的作用:

1class文件加载到JVM

2审查每个类由谁加载(父优先的等级加载)

3class字节码重新解析成JVM统一要求的格式

 

7JVM体系结构和工作方式

JVM基本结构:类加载器、执行引擎(解析字节码,得到执行结果)、内存区、本地方法调用

 

高级语言之所以屏蔽硬件差异是因为中间有一层编译,与硬件耦合的工作交给了编译器

 

JVM执行字节码基于栈的结构理由:要设计成与平台无关、为了JVM更好的优化代码、指令的紧凑性

 

8JVM内存管理

 

Java中使用内存的组件:Java堆、线程、类和类加载器、NIOJNI

 

Java内存分配主要有堆栈两种形式

9Servlet工作原理解析

url-pattern:精确匹配、路径匹配、后缀匹配

10深入理解SessionCookie

作用都是为了保持访问用户和服务器的交互状态

 

每次addCookie都会增加一个Header,但返回时会降Header汇总成一个

 

Spring的三大核心组件:CoreContextBean

Java采用的是big  endian字节序

zookeeperJava API ZKClient

 

memcache客户端和服务端通过构建在TCP之上的memcache协议通信。协议支持两种数据传输:文本行(客户端的命令和服务端的响应)和非结构化数据(客户端和服务端数据传递)。

memcache不是分布式系统,分布式功能由客户端保证,如根据Key Hash%机器

潜在问题:某台机器负载可能很高--》一致性Hash解决

 

分布式Session可以用memcache,缺点:重启后会话数据会丢失,需要重新建立

 

Tomcat可以使用memcached-session-manager工具(配置在config.xml)结合memcache实现分布式session

 

Hbase伸缩能力好,更适合海量数据存储和处理,并发写入能力好;但查询维度有限,不支持group by,order by ,join等复杂操作;

Redis读写吞吐能力好,支持的并发数高,能提供丰富的数据结构支持。

 

互联网安全架构

 

常见的web攻击手段和防御方法,如XSSCRSFSQL注入、DDOS攻击等;

常见的安全算法:如数字摘要、对称加密、非对称加密、数字签名、数字证书;

如何采用摘要认证方式防止信息篡改、通过数字签名来验证通信双方的合法性、通过HTTPS协议保障通信过程中数据不被第三方监听和截获;

在开放平台体系下,OAuth协议如何保障ISV对数据的访问是经过授权的合法行为。

 

XSS(跨站脚本攻击:在网页中嵌入恶意代码)

防范:(出现是因为用户数据变成了代码。)对用户输入的数据进行HTML转义处理。

CRSF(跨站请求伪造)

XSS区别:XSS利用站内信任的用户,CRSF伪造来自受信任的用户请求来利用受信任的网站--盗用用户身份攻击网站

防御:将cookie设置为HttpOnly、增加TokenToken服务端校验)、通过refer识别

 

SQL注入:将SQL伪装成HTTP参数,传到服务端,欺骗服务器,执行恶意命令

防范:使用预编译语句(预编译使用参数占位符替代需要动态传入发参数,使语句的语义结构无法被改变)、使用ORM框架:iBATISherbiNate,避免密码明文存放。

 

常用的安全算法

数字摘要:亦即消息摘要,唯一对应的消息或文本的固定长度值。Hash计算产生,如MD5 128位、SHA 160位、十六进制编码、Base64编码。

对称加密算法:DESAES

非对称加密算法:RSA

数字签名:非对称加密算法+数字摘要。

数字证书:含用户认证信息。

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    读书笔记:深入分析java web技术内幕.zip

    读书笔记:深入分析java web技术内幕

    读书笔记:深入分析java web 技术内幕.zip

    读书笔记:深入分析java web 技术内幕

    读书笔记:深入分析java web 技术内幕相关demo.zip

    读书笔记:深入分析java web 技术内幕相关demo

    读书笔记:深入分析Java web 技术内幕源代码.zip

    读书笔记:深入分析Java web 技术内幕源代码

    读书笔记:《深入分析 Java Web 技术内幕》 分布式 Session 框架 DEMO.zip

    读书笔记:《深入分析 Java Web 技术内幕》 分布式 Session 框架 DEMO

    Java_Web开发内幕 笔记

    《Java_Web开发内幕 笔记》是一份深入探讨Java Web开发核心概念和技术的文档,博主在ITEYE博客上分享了这份宝贵的资料。通过阅读这份笔记,开发者可以深入理解Java Web开发的各个方面,包括但不限于服务器配置、...

    java读书笔记笔记笔记笔记笔记笔记

    【标题】"java读书笔记笔记笔记笔记笔记笔记" 暗示了这是一份关于Java编程语言的学习笔记,可能包含了作者在阅读Java相关书籍时所做的重要记录和理解。笔记通常涵盖了语言的基础概念、核心特性、类与对象、内存管理...

    《Java高手真经:Java Web高级开发技术》读书笔记模板.pptx

    该资源为Java开发者提供了一个系统的Java Web高级开发技术教程,从Java高手真经(高级编程卷):Java Web高级开发技术读书笔记模板开始,到Java Web企业级开发技术EJB,最后到Java Web高级开发技术 frameworks与开源...

    java web技术笔记

    Java Web技术笔记涵盖了Web开发中的多个重要领域,主要包括JavaScript、CSS以及各种框架的应用。下面将对这些关键知识点进行深入解析。 一、JavaScript技术 JavaScript是一种轻量级的解释型编程语言,主要用于网页...

    Spring技术内幕 学习笔记

    《Spring技术内幕 学习笔记》是一份深入探讨Spring框架核心机制的学习资料,结合作者zzc1684在iteye博客上的博文,我们可以从中学习到Spring框架的多个重要知识点。Spring作为Java企业级应用开发的基石,其设计思想...

    深入理解LINUX网络技术内幕.part1

    一本很好的书, 深入理解LINUX网络技术内幕.

    MLDN Java web开发实战笔记pdf

    MLDN Java web开发实战笔记pdf,MLDN Java web开发实战笔记pdf,MLDN Java web开发实战笔记pdf,MLDN Java web开发实战笔记pdf

    JAVA WEB开发实战经典培训【课堂笔记】

    这份笔记对于初学者和希望深入理解Java Web技术的人来说是一份宝贵的资源。 一、Java Web基础知识 Java Web开发基于Java平台的服务器端技术,包括Servlet、JSP(JavaServer Pages)、JSTL(JavaServer Pages ...

    java笔记 Java-Web笔记 J2EE三大框架笔记

    其次,Java-Web笔记进一步讲解了Servlet、JSP、过滤器、监听器等Java Web开发的核心技术。Servlet是Java Web应用的基础,用于接收和响应HTTP请求;JSP则提供了更简便的视图层开发方式,允许开发者在HTML中嵌入Java...

    java web基础 大纲 基础 笔记

    Java Web基础是编程领域中的重要组成部分,主要涵盖了使用Java语言进行Web应用程序开发的相关技术。这份“java web基础大纲笔记”提供了全面的知识框架,是学习和复习的宝贵资料。以下是对大纲内容的详细解读: 1. ...

    基于java web端的云笔记

    【基于Java Web端的云笔记】是一个典型的Web应用程序开发项目,主要目标是构建一个在线的、基于浏览器的笔记管理平台,允许用户存储、编辑和共享他们的笔记。在毕业设计中,这样的项目通常涵盖了许多核心的IT知识...

    圣思园java.web笔记

    Java Web是Java技术在Web开发领域的应用,它涵盖了服务器端编程、网页交互、数据库操作等多个方面。本笔记重点讲述了如何利用Java语言进行动态网站开发,结合了Servlet、JSP、JSTL等核心技术。 【Lesson 1-13】 ...

    MySQL技术内幕InnoDB存储引擎-读书笔记.pdf

    MySQL技术内幕InnoDB存储引擎-读书笔记.pdf

    Java web基础学习笔记

    Java Web是Java技术在Web应用开发中的应用,它包含了Servlet、JSP(JavaServer Pages)、JSTL(JavaServer Pages Standard Tag Library)、EL(Expression Language)等多种技术,为构建动态、交互式的Web应用提供了...

    Java Web框架技术笔记

    《Java Web框架技术笔记》是一份深入探讨Java Web开发的资料,特别关注Spring框架及其与Vue.js的结合使用。这份笔记旨在帮助开发者理解和掌握基于Java的Web开发,包括网页、应用程序以及微信小程序的开发。 课程...

Global site tag (gtag.js) - Google Analytics