打赏
摘要: 先来了解2个TCP的概念: MSS:Maximum Segment Size,TCP一次传输发送的最大数据段长度。 RTT:Round-Trip Time,往返时延,表示从发送端发送数据开始,到发送端收到来自接收端的确认(接收端收到数据后便立即发送确认),总共经历的时延。 TCP传输大块数据时,肯定 阅读全文
posted @ 2018-05-09 22:23 lingjiango 阅读(8967) 评论(1) 推荐(8) 编辑
摘要: 前篇文章介绍了三次握手和四次挥手,了解了TCP是如何建立和断开连接的,文末还提到了抓包挥手时的一个“异常”现象,当时无法解释,特地查了资料,知道了数据传输中的延迟确认策略。 何谓延迟确认策略? WIKI:TCP delayed acknowledgment is a technique used b 阅读全文
posted @ 2018-04-06 13:56 lingjiango 阅读(1623) 评论(1) 推荐(0) 编辑
摘要: 学习三次握手和四次挥手前,先了解下几个基础的概念。 Seq:数据段序号,我们都知道TCP是提供有序传输的,有序传输的基础就是数据段序号,接收方在收到发送方乱序包的情况下可以根据Seq进行重新排序,确保接收的数据是正常的。 Len:数据段长度,数据段长度不包括TCP头部,就是TCP除头部以外的内容,比 阅读全文
posted @ 2018-03-25 18:34 lingjiango 阅读(740) 评论(4) 推荐(0) 编辑
摘要: 有这样一个应用场景,对于传入后台的Request和返回页面的Response信息,如果页面的Request带有敏感信息或危险字符串,就会对系统造成影响,所以我们会写过滤器(Filter)处理Request,不同的信息处理会有不同的处理方式,如果我们只用一个Filter来处理所有的信息,扩展性就不够强,所以会针对不同的信息处理写不同的Filter,然后把Filter放在一个FilterChain中,以实现信息处理的“热拔插”,这样一个FilterChain就像一条职责链,链上的每个节点处理不同的功能,同时对于Response我们希望能以Resuest处理的倒序进行返回处理,以达到完全过滤敏感.. 阅读全文
posted @ 2013-06-02 00:32 lingjiango 阅读(6345) 评论(2) 推荐(1) 编辑
摘要: 举个例子,有一个对象Car,其有一个方法run(),现在我们需要知道车子跑了多久,OK,我们首先可能会想到使用继承来监听此方法,就知道车子跑了多久了。1 package com.learn.www;2 3 public interface Runable {4 void run();5 } 1 package com.learn.www; 2 3 import java.util.Random; 4 5 public class Car implements Runable { 6 7 @Override 8 public void run() { 9 ... 阅读全文
posted @ 2013-05-28 21:15 lingjiango 阅读(848) 评论(1) 推荐(0) 编辑
摘要: 观察者模式定义了一种一对多的依赖关系,让多个观察者同时监听一个被观察者,当被观察者发生变化,所有的观察者就做出及时的响应。GUI中的按钮(Button)的事件监听模式就是一个Observer模式的实现,现在我们通过模拟这个事件来理解Observer. 对于Button的图形界面的事件,我们就通过在测试类模拟,而不模拟图形实现。 1 interface Observerable { 2 public void addActionListener(ActionListener a); 3 public void pressed(); 4 } 5 6 class Button i... 阅读全文
posted @ 2013-04-20 22:12 lingjiango 阅读(1299) 评论(2) 推荐(1) 编辑
摘要: 前两篇阐述了FactoryMethod和AbstractFactory的实现以及类结构图,但是正如大家所知道的那样,没有任何事情是完美的,这两种设计模式也有自己的优缺点,而Spring对两种工厂模式取长补短,很好的解决了关于生产的产品维度以及产品系列维度问题。三、FactoryMethod与AbstractFactory对比 FactoryMethod与AbstractFactory对比: FactoryMethod主要是生产产品,为产品维度,缺点是生产产品系列时,易导致工厂泛滥。AbstractFactory主要是产品系列,为产品系列维度,缺点是生产产品品种时,工厂改动比较大,不灵活。四.. 阅读全文
posted @ 2013-04-14 23:13 lingjiango 阅读(436) 评论(0) 推荐(1) 编辑
摘要: 上篇的FactoryMethod阐述的是生产不同的交通工具的工厂,要么让老张单独的开车去,要么让他单独的开飞机去,但是呢,这样老张不是很孤独寂寞去东北吗?一点娱乐的气息都木有,OK,现在我们酝酿一个这样的场景,让老张开着车,叼着苹果,扛着AK47去东北,这样老张就不无聊了,车、苹果、AK47,这是一个系列的产品,而AbstractFactory就是解决系列产品生产问题。二、AbstractFactory AbstractFactory模式 除了生产正常世界的系列产品,我们还可以生产魔法世界的系列产品(扫帚、魔法棒等),其实我们用的QQ或者酷我音乐盒等所用的皮肤更换功能,都是AbstractF. 阅读全文
posted @ 2013-04-14 22:22 lingjiango 阅读(420) 评论(0) 推荐(0) 编辑
摘要: “老张开车去东北 撞了 肇事司机耍流氓 跑了 多亏一个东北人 送到医院缝五针 好了 ……翠花,上酸菜” “老张开车去东北”,OK,这里如果我们刻意的用OO思想来看的话,老张这次是开车去的,下次就有很可能开飞机去的……这里请允许我刻意的这样的思考这个问题,因为刻意的这样思考,我们可以从这句话发现两个蕴含的设计模式,一个是FactoryMethod,一个是AbstractFactory。一、FactoryMethod FactoryMethod模式 OK,回到这句歌词,正如上面所说的,这次开车,下次开飞机……所以我们要思考出一种不管是车还是飞机或者火车,我们的程序都能灵活的适应需求的变化,这里就. 阅读全文
posted @ 2013-04-14 22:09 lingjiango 阅读(978) 评论(0) 推荐(0) 编辑
摘要: 之所以说是浅析单例模式是因为其实单例模式有很多种实现的写法,比如lazy initialization思想带来同步锁的实现方式纠结起细节来就可以写出很多种,这里我主要说一种实现的方式,也是最简单的—静态成员直接初始化的方式。 为什么会产生单例这个设计模式?主要是,如果我们在开发的过程中,每个实例都新建一个的话,会产生很多的内存开销,这对JVM不是什么好事,除此以外,如果很多实例,当这些实例不需要了,JVM去回收又是一件麻烦事,所以对于一些实例,如果确定可以共享,就不如一起共享一个,节省内存,提高性能。 1 /** 2 * 3 * @author LingJian 4 * 5 *... 阅读全文
posted @ 2013-04-13 22:18 lingjiango 阅读(1223) 评论(0) 推荐(0) 编辑