JAVA Coder 的《深入分析Java Web 技术内幕》读书笔记
本文基于《深入分析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 技术内幕》读书笔记的更多相关文章
- Struts2技术内幕 读书笔记一 框架的本质
本读书笔记系列,主要针对陆舟所著<<Struts2技术内幕 深入解析Strtus2架构设计与实现原理>>一书.笔记中所用的图片若无特殊说明,就都取自书中,特此声明. 什么是框架 ...
- Struts2技术内幕 读书笔记三 表示层的困惑
表示层能有什么疑惑?很简单,我们暂时忘记所有的框架,就写一个注册的servlet来看看. index.jsp <form id="form1" name="form ...
- 深入理解linux网络技术内幕读书笔记(三)--用户空间与内核的接口
Table of Contents 1 概论 1.1 procfs (/proc 文件系统) 1.1.1 编程接口 1.2 sysctl (/proc/sys目录) 1.2.1 编程接口 1.3 sy ...
- Struts2技术内幕 读书笔记二 web开发的基本模式
最佳实践 在讨论基本模式之前,我们先说说一个词:最佳实践 任何程序的编写都得遵循一个特定的规范.这种规范有约定俗称的例如:包名全小写,类名每个单词第一个字母大写等等等等;另外还有一些需要我们严格遵守的 ...
- webkit技术内幕读书笔记 (一)
本文部分摘录自互联网. Chromeium与Chrome Chromium是Google为发展自家的浏览器Google Chrome而打开的项目,所以Chromium相当于Google Chrome的 ...
- MySQL技术内幕读书笔记(八)——事务
事务的实现 事务隔离性由锁来实现.原子性.一致性.持久性通过数据库的redo log和undo log来完成.redo log称为重做日志,用来保证事务的原子性和持久性.undo log用来保证事 ...
- spring 技术内幕读书笔记1
1 在 java 应用开发中,往往会涉及复杂的对象耦合关系,在 代码中处理这些耦合关系,对代码的维护性和应用扩展性会带来许多不便.通过使用spring 的 IOC 容器,可以对这些耦合关系实现一个文本 ...
- Kafka技术内幕 读书笔记之(六) 存储层——日志的读写
-Kafka是一个分布式的( distributed ).分区的( partitioned ).复制的( replicated )提交日志( commitlog )服务 . “分布式”是所有分布式系统 ...
- Kafka技术内幕 读书笔记之(二) 生产者——新生产者客户端
消息系统通常由生产者(producer ). 消费者( consumer )和消息代理( broker ) 三大部分组成,生产者会将消息写入消息代理,消费者会从消息代理中读取消息 . 对于消息代理而言 ...
- Kafka技术内幕 读书笔记之(一) Kafka入门
在0.10版本之前, Kafka仅仅作为一个消息系统,主要用来解决应用解耦. 异步消息 . 流量削峰等问题. 在0.10版本之后, Kafka提供了连接器与流处理的能力,它也从分布式的消息系统逐渐成为 ...
随机推荐
- 爬虫之selenium模块chrome版本映射表
驱动及版本对应关系如下: 驱动下载路径见底部: chromedriver版本 支持的Chrome版本v2.43 v69-71v2.42 v68-70v2.41 v67-69v2.40 v66-68v2 ...
- 11-散列4 Hashing - Hard Version (30 分)
Given a hash table of size N, we can define a hash function H(x)=x%N. Suppose that the linear probin ...
- nginx配置神器
原文 https://mp.weixin.qq.com/s/zFEk7XzHj3xPReDXEnQxcQ https://nginxconfig.io/ Nginx作为一个轻量级的HTTP服务器,相比 ...
- 苹果 appstore 上架 ipv6 服务 配置
前言 好久之前的事了,苹果审核突然要求ipv6,一片哀嚎. 研究了好久找到了基于阿里云经典网络Windows Server的配置方法. https://bbs.aliyun.com/read/2849 ...
- java基础之 hashmap
Hashmap是一种非常常用的.应用广泛的数据类型,最近研究到相关的内容,就正好复习一下.网上关于hashmap的文章很多,但到底是自己学习的总结,就发出来跟大家一起分享,一起讨论. 1.hashma ...
- spark 通过keytab 获取认证
/usr/local/spark--bin--cdh5.8.0/bin/spark-submit \ --keytab /home/jj/tl.keytab \ --principal vf@FC.C ...
- jquery swipper插件的一些弊端
jquery swipper插件的一些弊端touch触摸机制是swipper的 阻止click冒泡.拖动Swiper时阻止click事件.下面这个方法或许可以解决触摸机制的问题 <pre> ...
- 彻底解决springboot修改页面和代码会自动重启
3.application.yml配置 spring.devtools.restart.enabled=falsespring.thymeleaf.cache=false 1.解决thymeleaf修 ...
- react加入websocket
1.首先创建一个公共的组件,封装websocket 代码如下 /** * 参数:[socketOpen|socketClose|socketMessage|socketError] = func,[s ...
- C语言 宏定义的1<<0 与 直接定义1 有什么区别
[1]示例程序 如下示例代码: #include <stdio.h> #define TEST1 1 << 0 #define TEST2 (1 << 0) #de ...