本文基于《深入分析Java Web 技术内幕》

《深入分析Java Web 技术内幕》,作者是 许令波,电子工业出版社。本文只是记录书本当中的精彩部分,作个人回顾和技术分享,请读者支持正版!

第一章:深入Web请求过程

1.1 B/S网络架构概述

HTTP采用无状态的短连接的通信方式。

当一个用户在浏览器里输入www.taobao.com这个URL时,会请求DNS把这个域名解析成对应的IP地址,然后根据这个IP地址在互联网上找到对应的服务器,向这个服务器发起一个get请求,由这个服务器决定返回默认的数据资源给访问的用户。

1.2 如何发起一个HTTP请求

发起一个http请求的过程就是建立一个Socket的通信过程

1.3HTTP解析

HTTP最重要的就是 HTTP Header,应熟记HTTP常见的Request Header 、Response Header 、Status Code,

在Chrome-->F12-->Network中,可查看相应的信息。

第二章:深入分析Java I/O的工作机制

大部分Web应用系统的瓶颈都是I/O瓶颈,包括Java的I/O类库的基本结构,磁盘I/O工作机制,网络I/O的工作机制

2.1Java的I/O类库的基本结构

基于字节操作的I/O接口:InputStream和OutputStream

基于字符操作的I/O接口:writer reader

基于磁盘操作的I/O接口: File

基于网络操作的I/O接口: Socket

数据格式和传输方式是影响效率的关键

字节和字符之间需要转化

2.3.3Java Socket 的工作机制

Socket建立连接由底层根据TCP/IP协议,建立TCP连接,由IP来寻址网络中的主机

TCP建立连接三次握手---TCP释放连接四次挥手

2.4NIO的工作方式

首先清楚三个概念,BIO--Blocking IO 同步阻塞IO模式,NIO--New IO同时支持阻塞和非阻塞模式,

AIO--Asynchronous IO(JDK7后支持)异步非阻塞模式

第三章:深入分析Java Web中的中文编码问题

做过的项目都是统一使用 utf-8字符编码,不深究。

第四章:Javac编译原理

Javac编译器,将Java源码编译成Java字节码,也就是JVM能够识别的二进制码。表面是将.java文件转化成.class文件,实际上是将Java的源代码转化为一连串二进制数字。Javac主要有4个模块,词法分析器,语法分析器,语义分析器和代码生成器。

第五章:深入class文件结构

略。

第六章:深入分析ClassLoader工作机制

ClassLoader将class加载到JVM中。JVM加载class文件到内存有两种方式:隐式加载和显式加载。

6.4常见的加载类错误分析

ClassNotFoundException-->解决办法:检查当前的classpath目录

ClassCastException

ExceptionInitializerError

第七章:JVM体系结构与工作方式

java能够跨平台,主要是由于JVM屏蔽了与各个计算机平台相关的软件和硬件之间的差异,使得与平台相关的耦合统一由JVM提供者来实现。

JVM主要由四部分组成

1.类加载器,再JVM启动时或者在类运行时将需要的class加载到JVM中。

2.执行引擎,执行引擎的任务是负责执行class文件中包含的字节码指令,相当于实际机器上的CPU。

3.内存区,将内存划分为若干个区以模拟实际机器上的存储、记录和调度功能模块,如实际机器上的各种功能的寄存器或者PC指针的记录器等。

4.本地方法调用,调用C或C++实现的本地方法的代码返回结果。

第八章:JVM内存管理

这一部分内容不如 周志明 的《深入理解Java虚拟机:JVM高级特性与最佳实践(第二版)》,机械工业出版社。个人感觉《深入理解Java虚拟机:JVM高级特性与最佳实践(第二版)》内容更详细,易于理解。

第九章:Servlet工作原理解析

JAVA Coder 的《深入分析Java Web 技术内幕》读书笔记的更多相关文章

  1. Struts2技术内幕 读书笔记一 框架的本质

    本读书笔记系列,主要针对陆舟所著<<Struts2技术内幕 深入解析Strtus2架构设计与实现原理>>一书.笔记中所用的图片若无特殊说明,就都取自书中,特此声明. 什么是框架 ...

  2. Struts2技术内幕 读书笔记三 表示层的困惑

    表示层能有什么疑惑?很简单,我们暂时忘记所有的框架,就写一个注册的servlet来看看. index.jsp <form id="form1" name="form ...

  3. 深入理解linux网络技术内幕读书笔记(三)--用户空间与内核的接口

    Table of Contents 1 概论 1.1 procfs (/proc 文件系统) 1.1.1 编程接口 1.2 sysctl (/proc/sys目录) 1.2.1 编程接口 1.3 sy ...

  4. Struts2技术内幕 读书笔记二 web开发的基本模式

    最佳实践 在讨论基本模式之前,我们先说说一个词:最佳实践 任何程序的编写都得遵循一个特定的规范.这种规范有约定俗称的例如:包名全小写,类名每个单词第一个字母大写等等等等;另外还有一些需要我们严格遵守的 ...

  5. webkit技术内幕读书笔记 (一)

    本文部分摘录自互联网. Chromeium与Chrome Chromium是Google为发展自家的浏览器Google Chrome而打开的项目,所以Chromium相当于Google Chrome的 ...

  6. MySQL技术内幕读书笔记(八)——事务

    事务的实现 ​ 事务隔离性由锁来实现.原子性.一致性.持久性通过数据库的redo log和undo log来完成.redo log称为重做日志,用来保证事务的原子性和持久性.undo log用来保证事 ...

  7. spring 技术内幕读书笔记1

    1 在 java 应用开发中,往往会涉及复杂的对象耦合关系,在 代码中处理这些耦合关系,对代码的维护性和应用扩展性会带来许多不便.通过使用spring 的 IOC 容器,可以对这些耦合关系实现一个文本 ...

  8. Kafka技术内幕 读书笔记之(六) 存储层——日志的读写

    -Kafka是一个分布式的( distributed ).分区的( partitioned ).复制的( replicated )提交日志( commitlog )服务 . “分布式”是所有分布式系统 ...

  9. Kafka技术内幕 读书笔记之(二) 生产者——新生产者客户端

    消息系统通常由生产者(producer ). 消费者( consumer )和消息代理( broker ) 三大部分组成,生产者会将消息写入消息代理,消费者会从消息代理中读取消息 . 对于消息代理而言 ...

  10. Kafka技术内幕 读书笔记之(一) Kafka入门

    在0.10版本之前, Kafka仅仅作为一个消息系统,主要用来解决应用解耦. 异步消息 . 流量削峰等问题. 在0.10版本之后, Kafka提供了连接器与流处理的能力,它也从分布式的消息系统逐渐成为 ...

随机推荐

  1. 从零和使用mxnet实现softmax分类

    1.softmax从零实现 from mxnet.gluon import data as gdata from sklearn import datasets from mxnet import n ...

  2. 图、流程图、ER图怎么画及常见画图工具(流程图文章汇总)

    流程图基本符号 首先要记住图中1.2.3.4.6这几种符号. 图片摘自网络 流程图基本概念及入门 简易流程图 流程图简介(基本符号与绘制工具) 你可能学了假流程图,三步教会你绘制大厂流程图 使用流程图 ...

  3. 上传文件到新浪云Storage的方法

    上传文件到新浪云Storage的方法,兼容本地服务器 if (!empty($_FILES['sharepic']['name'])){ $tmp_file = $_FILES['sharepic'] ...

  4. 码医自学法V2.2(附名老中医)

    这段时间经常有网友微信公众号问我怎么入门'中医' 我贴下我自己的学习方法(仅供参考) 基础回顾:https://www.cnblogs.com/dunitian/p/7483038.html PS:自 ...

  5. python入门之名称空间的查找顺序

    名称空间的查找顺序: 局部:局部 > 全局 > 内置 全局:全局 > 内置 # 内置再找不到就报错 # 函数内部使用的名字,在定义阶段已经规定死了,与你的调用位置无关 x = 111 ...

  6. c++ 数值计算库Eigen

    http://eigen.tuxfamily.org/index.php?title=Main_Page

  7. SSL密钥协商过程分析

    一.说明 尽管做过证书生成.双向认证.SSL通信编程等事情,但一直不清楚SSL如何完成密钥交换.看网上的资料则众说纷纭,最近和朋友学习时聊到了这个问题,然后正巧上周处理客户反馈SSL版本过低时领导也想 ...

  8. Git flow 工作流与规范

    概述 简版图: PS. 可能用到的命令: 1.从指定 commit拉出新分支   git checkout commitId -b 本地新branchName git checkout 9fbc3d0 ...

  9. Tomcat 部署 Jenkins (Linux系统)

    环境说明:Linux环境,CentOS 7版本. 关于部署tomcat,见上一篇博客:https://www.cnblogs.com/lelelong/p/10252225.html 接着,在Tomc ...

  10. C#RSA对接JAVA中RSA方式

    C#中通过FromXmlString属性加载的是XML形式,而JAVA中用到的是解析后的PEM格式的字符串,总之读取证书中信息无非是转换方式问题 /// <summary> /// c# ...