close和shutdown关闭TCP连接

2019-09-05
阅读 10 分钟
9.4k
内核态用户态读写流程 write调用的过程 用户态的用户程序对socket进行write调用 内核会搬运用户程序缓冲区的数据到内核写缓冲区(发送缓冲区),搬运完毕write调用就会返回(即使缓冲区上的数据还没发送出去) 内核TCP协议栈会搬运数据从内核写缓冲区(发送缓冲区)到网卡 网卡在物理层把数据发送到目标网卡上,中间的网...

tcpdump实验:分析TCP连接建立、传输、断开

2019-08-31
阅读 4 分钟
6.7k
序列号seq,其实TCP发送payload数据的每一个字节都是有编号的,每个报文的编号其实就是这个报文payload数据中的首个字节的编号,通俗的例子:一共发了3个报文:P1(payload=aaa), P2(payload=bb), P3(payload=c),那么

Java语法糖的编译结果分析(二)

2018-09-17
阅读 15 分钟
1.9k
语法糖(Syntactic Sugar)的出现是为了降低我们编写某些代码时陷入的重复或繁琐,这使得我们使用语法糖后可以写出简明而优雅的代码。在Java中不加工的语法糖代码运行时可不会被虚拟机接受,因此编译器为了让这些含有语法糖的代码正常工作其实需要对这些代码进行加工,经过编译器在生成class字节码的阶段完成解语法糖(d...

Java语法糖的编译结果分析(一)

2018-09-10
阅读 13 分钟
2.1k
语法糖(Syntactic Sugar)的出现是为了降低我们编写某些代码时陷入的重复或繁琐,这使得我们使用语法糖后可以写出简明而优雅的代码。在Java中不加工的语法糖代码运行时可不会被虚拟机接受,因此编译器为了让这些含有语法糖的代码正常工作其实需要对这些代码进行加工,经过编译器在生成class字节码的阶段完成解语法糖(d...

Java泛型和编译优化的一个例子

2018-09-03
阅读 4 分钟
2.1k
这两个例子唯一的区别是后者的new ArrayList<String>(){}初始化strList的时候带了{}执行了赋初值,虽然语法层面没有什么区别,但是在编译之后的结果却完全不一样。而且执行的结果也完全不一样,前者执行结果:

Java编译期优化思维导图

2018-09-02
阅读 2 分钟
1.8k
本文参考自来自周志明《深入理解Java虚拟机(第2版)》,拓展内容建议读者可以阅读下这本书。 文字版如下: 编译期优化 javac的编译过程 解析和填充符号表 解析 Parse 词法分析 源代码字符流 -> 标记Token 源代码字符是程序编写的最小单位,Token是编译过程的最小元素不可再分 语法分析 Token序列 -> 抽象语法树AS...

JVM字节码执行引擎思维导图

2018-08-25
阅读 7 分钟
3.4k
本文参考自来自周志明《深入理解Java虚拟机(第2版)》,拓展内容建议读者可以阅读下这本书。 文字版如下: 运行时栈帧结构 局部变量表 需要多少大小的局部变量表已写入到class字节码方法的Code属性的max_locals属性中 一个存储单位称为一个Slot(32位) 为了让所有数据类型的局部变量都能够存储到局部变量表中而设定了定...

JVM类加载思维导图

2018-08-20
阅读 4 分钟
2.5k
用一张思维导图尽可能囊括一下JVM的类加载过程的全流程。 本文参考自来自周志明《深入理解Java虚拟机(第2版)》,拓展内容建议读者可以阅读下这本书。 文字版如下: 加载 Loading 过程 通过类的全限定名来获取定义此类的二进制字节流 非数组类的加载,由类加载器加载,可以是启动类加载器,也可以是用户自定义的类加载...

完全图解JVM Class文件结构

2018-08-14
阅读 10 分钟
4.6k
对一个class文件的字节码进行逐行的分析是理解class文件结构的最佳方式。但是往往复杂的二进制字节码会让人望而却步,或者只有仔细一点点盯着才能保证不花眼。本文的目的在于尽可能完整地拆解JVM的Class字节码并将其分块分析,最终得到的图解结构希望可以帮助到你。

Maven依赖冲突的产生原因和解决方式

2018-05-20
阅读 4 分钟
28k
maven定义了许多dependency,每个dependency内部也会定义它的dependency。 首先我们来看一下依赖冲突产生的原因: 如果项目的依赖A和依赖B同时引入了依赖C。 如果依赖C在A和B中的版本不一致就可能依赖冲突。 比如 项目 <- A, B, A <- C(1.0),B <- C(1.1)。 那么maven如果选择高版本C(1.1)来导入(这个选择mave...

Matplotlib中文字体显示

2018-01-31
阅读 2 分钟
8.5k
Matplotlib的安装位置,如果使用pip3安装则其默认的安装路径在/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/matplotlib/。当然你也可以通过如下程序确定你的Mac上的Matplotlab的安装路径:

搭建Tomcat集群&通过Redis缓存共享session的一种流行方案

2017-05-29
阅读 5 分钟
27k
我们使用单台Tomcat的时候不会有共享sesssion的疑虑,只要使用Tomcat的默认配置即可,session即可存储在Tomcat上。

把数据流化:Stream API

2016-12-04
阅读 8 分钟
3.7k
Java8引入了与此前完全不同的函数式编程方法,通过Lambda表达式和StreamAPI来为Java下的函数式编程提供动力。本文是Java8新特性的第二篇,旨在展示Stream API是如何简化程序编写并且体现出函数式编程的美感的,在Stream的世界里面,数据在概念上不再只是内存中存储的字节,而更像是流动的活跃生物。 最近在读这本图灵的...

Ummm... Java8和lambda

2016-11-20
阅读 9 分钟
2.6k
Java8引入了与此前完全不同的函数式编程方法,通过Lambda表达式和StreamAPI来为Java下的函数式编程提供动力。本文是Java8新特性的第一篇,旨在阐释函数式编程的本义,更在展示Java是如何通过新特性实现函数式编程的。 最近在读这本图灵的新书:Java 8 in Action ,本书作者的目的在于向Java程序员介绍Java8带来的新特性...

Spring MVC : WebMVC和Spring MVC框架

2016-02-25
阅读 5 分钟
5.3k
我们先来说一下WebMVC框架的基本任务。在Web应用中,前台负责捕捉用户的动作、展示系统的一般界面和处理结果,后台则主要负责系统的逻辑层面的处理,前台和后台一起为系统和用户的交互、数据的处理服务,并最终构建出完整的Web应用。在这个目的的基础上,我们先来看看Java技术下的Web应用的早期是怎么处理这个问题的。

Java基础:Java核心技术提示的易忽略点 Ch6

2016-02-19
阅读 4 分钟
2k
接口和抽象类是Java继承链的基础,其区别也较为明显,在Java语言的设计中,允许接口的多实现,但不允许抽象类的多继承,这样做符合简洁明了的面向对象设计思路:也就是说类只可以简单地拥有唯一父模型(抽象类),但是可以拥有多种不同的特征(接口),这样的设计大大简化了Java的面向对象逻辑。

Java系统WebService:Spring与CXF的集成

2016-02-03
阅读 9 分钟
9.1k
WebService是什么呢?顾名思义,是Web系统提供的服务,其目的呢,往大了说:是系统实现多异构模块协同合作,服务实现SOA(Services oriented Architecture面向服务的体系结构),往小了说:我们的系统模块能够定义一些功能开放给其他模块,也可以调用其他模块的一些功能。

Java基础 :细说权限描述符

2015-12-27
阅读 1 分钟
2.9k
Java权限描述符 Java中描述访问权限的描述符主要用在两个地方: 在类名前用于说明类的访问权限的描述符:public 缺省的“包内可见” 在成员变量和成员方法前面的描述符:public private protected 缺省的“包内可见” 第一类的描述符简单明了,只是为了说明一个定义出的类在其他类看来的可见性: public描述的类是对被其他所...

Java基础:Java核心技术提示的易忽略点 Ch5

2015-12-22
阅读 6 分钟
2k
开篇Java是一门不那么简单也不那么复杂的语言,Java里面有很多问题和特性是容易被使用者忽视的,这些问题也许会难住新手,同时也许会是老手不小心跌入的无故之坑,只有精于对基础的提炼才能最大程度地解决类似的疑问。所以,在读Cay.Horstmann的《Java核心技术》的过程中,我记录下这些所谓的易忽略的问题,这些问题将会...

Java基础:Java核心技术提示的易忽略点 Ch4

2015-12-21
阅读 5 分钟
3.1k
开篇Java是一门不那么简单也不那么复杂的语言,Java里面有很多问题和特性是容易被使用者忽视的,这些问题也许会难住新手,同时也许会是老手不小心跌入的无故之坑,只有精于对基础的提炼才能最大程度地解决类似的疑问。所以,在读Cay.Horstmann的《Java核心技术》的过程中,我记录下这些所谓的易忽略的问题,这些问题将会...

Spring IOC:Spring IOC 的具体过程

2015-10-31
阅读 9 分钟
5.1k
上回展示了IOC的大致实现的原型,那么在Spring框架中具体是怎么实现这个容器根据metadata元信息配置加载POJO的过程的呢?在整个Spring IOC容器的工作过程中有很多地方是设计地相当灵活的,供给使用者很多空间去完成自己的任务,而不是一味地只是完成容器的机械过程。

Spring IOC:Spring IOC 的根本基础原理在哪里?

2015-10-31
阅读 5 分钟
5.9k
spring框架的基础核心和起点毫无疑问就是IOC,IOC作为spring容器提供的核心技术,成功完成了依赖的反转:从主类的对依赖的主动管理反转为了spring容器对依赖的全局控制。

Java虚拟机 :Java字节码的编译生成和运行优化

2015-10-24
阅读 4 分钟
9.5k
作为Java开发人员,一定程度了解JVM虚拟机的的运作方式非常重要,本文就一些简单的虚拟机的相关概念和运作机制展开我自己的学习过程,是这个系列的第四篇。

Java基础 :java的代理模式

2015-10-19
阅读 4 分钟
2k
代理的目的到底是什么呢?字面意思上就可以解释:代理就是“代人理事”,也就是说当实现某个操作的时候发现根本不能使用相关的对象或者使用这个对象的效果不好的时候就建立一个“代它理事”的代理对象,让代理对象去完成任务,因为我们关注的是完成任务本身,至于是谁完成了这个任务是不重要的。在这种逻辑下,只要建立的代...

Java虚拟机 :Java字节码指令的执行

2015-10-17
阅读 8 分钟
9.8k
作为Java开发人员,一定程度了解JVM虚拟机的的运作方式非常重要,本文就一些简单的虚拟机的相关概念和运作机制展开我自己的学习过程,是这个系列的第三篇。

Java虚拟机:Java二进制字节码的结构、加载

2015-10-16
阅读 7 分钟
8.7k
作为Java开发人员,一定程度了解JVM虚拟机的的运作方式非常重要,本文就一些简单的虚拟机的相关概念和运作机制展开我自己的学习过程,是这个系列的第二篇。

Java虚拟机:Java自动内存管理和回收机制

2015-10-09
阅读 5 分钟
8.9k
这篇文章的素材来自周志明的《深入理解Java虚拟机》。作为Java开发人员,一定程度了解JVM虚拟机的的运作方式非常重要,本文就一些简单的虚拟机的相关概念和运作机制展开我自己的学习过程。

JavaIO : 不同情境使用的流

2015-10-04
阅读 5 分钟
4.2k
FileInputStream和FileOutputStream主要用于解决不限于纯文本的二进制文件的输入输出情境。同时,如果使用带有缓冲区的缓冲输入输出流的话会使得读写IO的效率更高,有助于更快地完成不限于纯文本的二进制文件的读写。

JavaIO :JavaIO输入输出流

2015-10-03
阅读 6 分钟
4.7k
流的原理: 一连串有顺序的数据系列可以看成是一个流。 输入输出流: 数据从IO输入到程序的流是输入流,数据从程序输出到IO的流是输出流。 下面我们使用字节输入输出流来说明这个问题: 输入流 InputStream一般是由javaio对象(如File)建立的,当新建一个InputStream时,io对象建立了一个包含有数据的管道(其实就是我...

Java多线程:Java多线程同步与对象控制权

2015-09-30
阅读 6 分钟
4.3k
join()函数Join的含义是:将某一线程加入成为另一个线程的流程之一,换言之就是等待另一个线程执行完毕。 {代码...} wait()函数notify()函数 如果对象调用了wait方法就会使持有该对象的线程把该对象的控制权交出去,然后处于等待状态。 如果对象调用了notify方法就会通知某个正在等待这个对象的控制权的线程可以继续运行...