西维蜀黍

【Network】TCP 三次握手(TCP Three-way Handshake)

TCP 三次握手(TCP Three-way Handshake)

TCP是面向连接的,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。在TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换 TCP窗口大小信息。

第一次握手 - 建立连接

客户端发送连接请求报文段,将Control Flag中的SYN位置为1,Sequence Number(发送序号)为x;然后,客户端进入 SYN_SENT 状态,等待服务器的确认。

SYN报文段是指,Control Flag中的SYN位为1的TCP报文段。

第二次握手 - 服务器收到SYN报文段

服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置 Acknowledgment Number(确认序号)为x+1(即Sequence Number+1);同时,自己还要发送SYN请求信息(即将 SYN 位为1),Sequence Number(发送序号)为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入 SYN_RECV 状态

类似地,ACK报文段是指Control Flag中的ACK位为1的TCP报文段。而SYN+ACK报文段是指Control Flag中的SYN位和ACK位均为1的TCP报文段。

第三次握手 - 客户端收到服务器的SYN+ACK报文段

客户端收到服务器发送的SYN+ACK报文段后,将Acknowledgment Number(确认序号)设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端进入 ESTABLISHED 状态。当服务器端接收到这个ACK报文段后,服务器端进入 ESTABLISHED 状态,完成TCP三次握手。

而如果,客户端向服务器发送ACK报文段没有达到服务器端(或者延迟了),服务器会重新发送一个第二次握手阶段中的SYN+ACK报文段。

  ...


【Design Pattern】Structural — Decorator

定义

装饰器模式以对客户端透明的方式,给一个对象附加上更多的责任(以实现对对象功能的扩展)。

换言之,客户端并不会觉得对象在装饰前和装饰后有什么不同。装饰器模式可以在不需要创造更多子类的情况下,将对象的功能加以扩展。这就是装饰器模式的模式动机。

  ...


【Spring】Spring 中的 IoC

什么是Spring?

Spring 是个Java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。Spring框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯。

使用Spring框架的好处是什么?

  • 轻量:Spring 是轻量的,基本的版本大约2MB。

  • 控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。

  • 面向切面的编程(AOP):Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。

  • 容器:Spring 包含并管理应用中对象的生命周期和配置。

  • MVC框架:Spring的WEB框架是个精心设计的框架,是Web框架的一个很好的替代品。

  • 事务管理:Spring 提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA)。

  • 异常处理:Spring 提供方便的API把具体技术相关的异常(比如由JDBC,Hibernate or JDO抛出的)转化为一致的unchecked 异常。

  ...


【Programming】面向切面编程(AOP)

Aspect Oriented Programming (AOP)

背景

AOP(Aspect Oriented Programming),即面向切面编程,可以说是**OOP(Object Oriented Programming,面向对象编程)**的补充和完善。

  ...


【Design Pattern】Structural - Proxy/Wrapper

代理模式(Proxy Pattern)

In computer programming, the proxy pattern is a software design pattern.

Proxy is a structural design pattern that lets you provide a substitute or placeholder for another object. A proxy controls access to the original object, allowing you to perform something either before or after the request gets through to the original object.

A proxy, in its most general form, is a class functioning as an interface to something else. The proxy could interface to anything: a network connection, a large object in memory, a file, or some other resource that is expensive or impossible to duplicate.

In short, a proxy is a wrapper or agent object that is being called by the client to access the real serving object behind the scenes. Use of the proxy can simply be forwarding to the real object, or can provide additional logic.

In the proxy, extra functionality can be provided, for example caching when operations on the real object are resource intensive, or checking preconditions before operations on the real object are invoked. For the client, usage of a proxy object is similar to using the real object, because both implement the same interface.

  ...


【Java】泛型(Generics)

什么是泛型(generics)

泛型(generics)是指参数化类型的能力。可以定义带泛型类型的类或方法,随后编译器会用具体的类型来代替它。

  ...


【Java】Java对象的生命周期

Java对象的生命周期

  ...


【Java】关键字 - transient

transient的作用

我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,Java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了Serilizable接口,这个类的所有属性和方法都会自动序列化。

  ...


【Java】反射(Reflection)

什么是反射(Reflection)

Java 反射机制使得程序在运行时,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。这种 动态地获取类信息 以及 动态调用对象的方法 的功能称为 Java 的反射机制

  ...


【Java】instanceof关键字与 isInstance方法

instanceof

instanceof 是 Java 的一个二元操作符,类似于 ==,>,< 等操作符。

  ...