自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(63)
  • 收藏
  • 关注

原创 TCP的TIME_WAIT状态

1. TIME_WAIT状态主动关闭方在收到被动关闭方的FIN包后并返回ACK后,会进入TIME_WAIT状态,TIME_WAIT状态又称2MSL状态,每个TCP连接都必须有一个最大报文段生存时间MSL,在网络传输中超过这个时间的报文段将被丢弃。当TCP连接发起一个主动关闭,并发出最后一个ACK时,必须在TIME_WAIT状态停留两倍MSL时间,在2MSL等待期间,定义这个连接的插口(客户端IP...

2019-12-28 17:52:33 1084

原创 TCP的全连接和半连接队列

TCP的全连接和半连接队列当服务端调用listen函数监听端口的时候,内核会为每个监听的socket创建两个队列:半连接队列(syn queue):客户端发送SYN包,服务端收到后回复SYN+ACK后,服务端进入SYN_RCVD状态,这个时候的socket会放到半连接队列。全连接队列(accept queue):当服务端收到客户端的ACK后,socket会从半连接队列移出到全连接队列。当调...

2019-12-28 17:51:13 573

原创 TCP四次挥手

TCP四次挥手TCP作为可靠的连接协议,不仅体现在连接的建立上,也体现在其释放连接上,但是世界上是不存在百分之百可靠的通信机制的,我们来看下TCP释放连接,也就是四次挥手是如何尽可能保证TCP的可靠性的。使用Wireshark抓包,如图:1.四次挥手的过程当客户端已经发送完数据后,调用close方法向服务端发送FIN包,请求关闭连接,此时客户端进入FIN_WAIT1状态,代表客户端已...

2019-12-28 17:49:31 274

原创 TCP三次握手

TCP三次握手上一篇文章已经说了TCP是面向连接的,那么TCP是如何建立连接的那?答案就是三次握手,如果你已经了解了TCP的三次握手,在面试的时候一定被问过为什么是三次握手?两次或者四次可以吗?带着这些问题,接下来我们使用wireshak抓包工具,看看TCP是如何进行三次握手的。首先我们使用Java的Socket或者使用nc -l port监听一个端口号。例如:然后我们再使用nc ip p...

2019-12-08 14:27:59 1800

原创 初识TCP

1. TCP协议的概念TCP是TCP/协议簇中最重要也是最复杂协议,它位于OSI七层协议模型的网络层,它提供了一种全双工的、面向连接的、可靠的字节流服务。TCP协议是两台主机进程进行通信的基石,TCP使用连接(connection)作为最基本的抽象,同时将TCP连接的端点称为插口或者套接字(socket)。全双工:通信两端在任意时刻可以互相发送数据,既可以是客户端也可以是服务端。面向连接:通...

2019-12-06 21:56:56 377

原创 RabbitMQ

RabbitMQ1.RabbitMQ是什么?RabbitMQ是一个基于AMQP协议的高级消息中间件,它主要的技术特点是可用性,安全性,集群,多协议支持,可视化的客户端,活跃的社区。2.为什么选择RabbitMQ功能强大,支持死信队列,优先级队列,延迟队列,重试队列等多种功能无需二次开发。性能相对还算可以,一般单机的QPS在万级左右,可以满足一般的应用场景。文档说明非常...

2018-04-28 14:58:55 11191

原创 Netty(一):IO通信模型

[TOC] BIO:同步阻塞模型在传统的同步阻塞模型中,ServerSocket负责绑定IP地址,监听端口;Socket负责发起连接操作。连接成功后,双方通过输入和输出流进行同步阻塞式通信。 采用BIO通信模型的Server端,由一个Acceptor线程负责监听客户端的连接,它接收到客户端的连接后,为每一个客户端创建一个新的线程进行链路处理,完成后,通过输出流返回客户端,线程销毁。该模型...

2018-03-15 18:19:56 509

原创 深入dubbo内核(3):本地服务暴露

服务发布原理观察dubbo服务发布时的启动日志[DUBBO] The service ready on spring started. service: com.alibaba.dubbo.demo.DemoService, dubbo version: 2.0.0, current host: 127.0.0.1// 第一步:暴露本地服务[DUBBO] Export dubbo ...

2018-02-12 11:22:18 1018

原创 深入dubbo内核(3):dubbo的IOC机制

当@Adaptive注解没有注解在扩展点实现类上,而是在扩展点实现类的方法上的时候则会生成一个$Adpative的代理类。 private Class createAdaptiveExtensionClass() { String code = createAdaptiveExtensionClassCode(); ClassLoader classLoader =

2018-02-05 16:54:22 1186

原创 深入dubbo内核(2):注解式配置dubbo服务

dubbo注解式配置版本:2.5.8服务提供方配置beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.o

2018-02-01 11:06:43 1052

原创 深入dubbo内核(1):dubbo的自动发现机制

首先了解一下java的spispi的设计目标:面向对象的设计思想是模块之间基于接口编程,模块之间不可以对实现类进行硬编码,一旦代码涉及了具体的实现类就违反了可插拔的原则,如果要替换一种实现就要修改代码。Java spi提供了这样一种机制:为某个接口寻找服务实现的机制,类似于IOC的思想,将装配的控制权转移到代码之外。Java spi的具体约定:当服务的提供者(provider),

2018-01-25 20:03:59 2749

翻译 ThreadPoolExecutor高级应用

自定义线程池队列的选择使用有界队列(ArrayBlockingQueue)自定义线程池,当任务的数量小于corePoolSize的时候,直接创建新的线程执行任务。当任务数量大于corePoolSize的时候会将任务加入到等待队列。若等待队列已满再不大于maxPoolSize的情况下直接创建新的线程执行任务。package threadpool;import java.util.Calendar;

2017-06-18 17:28:57 433

原创 Future模式

package future;//核心接口Data,客户端需要的真实数据,在future模式中,这个data有两个重要实现//RealData,真实数据//FutureData,用来提取RealData的一个"订单",可以立即返回//FutureData实现了一个快速返回的RealData包装,当使用FutureData的getResult时,如果真实//数据没有准备好,程序就会阻塞,等待

2017-06-15 23:14:18 444

翻译 DelayQueue小例子

网吧上网:package Test1;import java.util.Calendar;import java.util.concurrent.DelayQueue;import java.util.concurrent.Delayed;import java.util.concurrent.TimeUnit;public class DelayQueueTest implements Ru

2017-06-15 16:28:15 1536

翻译 JVM类加载机制

class类文件结构任何一个Class文件都对应着唯一 一个类或者接口的定义信息,但是类或者接口不一定都定义在文件里。类或者接口可以直接通过类加载器生成。Class文件是一组以8位字节为基础单位的二进制流,按照严格的顺序排列在Class文件里。Class文件格式采用一种类似于C语言结构体的伪结构来存储数据,这种伪结构只有两种数据类型:无符号和表无符号属于基本数据类型,以u1,u2,u4,u8,代表

2017-05-22 21:49:35 289

原创 hashMap原理

线性表的弊端线性表的顺序存储,占用的空间地址是连续的,查找方便,但是容易造成内存空间的浪费。插入和删除,需要大规模的移动数据,既不安全速度又慢。链式存储虽然插入删除方便但是由于其空间的不连续,查找速度慢。当我们既要对数据增删又要查询显然线性表已经不能满足我们的需求了。散列表(hashTable)散列表的使用分为两步:第一步:使用散列函数将被查找的Key值转换为数组的一个索引,理想情况下不同的key

2017-05-19 23:48:20 232

原创 队列

队列是只允许在一端进行插入操作,而在另一段进行删除操作的线性表。 插入的一段称为队尾,删除的一端称为队头。队列的顺序存储结构:采用顺序存储结构的队列 容易假溢出, 即使是循环队列也面临着大规模的移动数据的安全问题。所以队列采用链式存储结构是最好的方式。而在java中队列只是一个接口,它用LinkedList继承Queue实现了队列。public class Queue<T> { pri

2017-05-18 14:29:47 242

原创 栈(经典应用逆波兰表达式)

java中栈继承了Vector,源码很简单,采用的是顺序存储结构。 实现栈:import java.util.Arrays;public class Stack { private Object[] elementData; private int size; public Stack() { this(10); } public Stack(i

2017-05-17 14:44:43 512

原创 Vector源码分析

public class Vector<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable {// 采用线性存储结构 protected Object[] elementData; // 元素的数量 protected int element

2017-05-16 13:36:39 223

原创 链式存储结构之单向链表

/** * @author Administrator 单向链表 * @param <E> */public class Link<E> { private Node<E> first;// 头节点 private Node<E> last;// 末尾节点 private int size;// 链表的长度 private static class Node<E

2017-05-16 12:30:45 230

原创 LinkedList底层原理(双向链表)

public class LinkedList<E> { private Node<E> first; private Node<E> last; private int size; private class Node<E> { private Node<E> prev; private Node<E> next; E

2017-05-16 12:28:43 1435 1

原创 JDK动态代理原理

public class ProxySubject implements InvocationHandler { private Object target; /** * @param obj * 真实对象 * @return 代理对象 */ public Object bind(Object obj) {

2017-05-14 23:51:03 207

原创 反射机制

什么是反射反射是java的重要特色之一,如果不理解反射不能说是熟悉java,在代理模式,工厂模式,框架和简单java类的调用我们都需要用到反射。包括面试中经常问到反射。只要提到动态那么必然要用到反射,那么反射的作用是什么?用官方一点的话说JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方

2017-05-14 22:11:18 204

原创 线性表顺序存储结构(ArrayList底层实现原理)

public class ArrayList{ private Object[] elementData; private size; //初始化空表 public ArrayList(int initalCapacity){ this.elementData = new Object[initalCapacity]; } //添加 public boole

2017-05-11 21:01:59 658

原创 redis数据类型及持久化方案

String类型赋值 语法:SET key value 127.0.0.1:6379> set test 1 ok

2017-05-08 19:10:20 355

原创 redis3.2.8环境搭建及集群的搭建

环境搭建1.下载redis3.2.8压缩包,使用SFTP上传到linux服务器2.解压文件tar-zxf redis-3.2.8.tar.gz3.安装c语言环境(安装ubnutu之后,自带c语言环境)4.编译源码 root@wang-virtual-machine:/home/wang# cd redis-3.2.8 root@wang-virtual-machine:/home/wang/red

2017-05-06 15:02:33 1048

原创 数据库查询优化策略

数据库查询优化逻辑层查询优化策略1.尽可能的早做选择和投影(基本思路):可以使中间结果变小,节省几个数量级的执行时间 2.把选择和投影串接起来:一元运算序列可一起执行,只需对整个关系进行一趟扫描 3.把投影与其前或后的二元运算结合:在第一次用关系时去掉一些无关属性,可以避免多次扫描整个关系 4.把某些选择与其前的笛卡尔积合并成一个连接:当RxS前有选择运算且其中条件是R,S属性间比较运算的时。

2017-05-04 21:32:55 11403

原创 一些基础的问题

标识符由字母数字下划线$符号组成,但是不能以数字开头关键字从来没有用到的关键字:goto, const jdk1.4 assert jdk1.5 enum接口和抽象类的区别1.从构造器来看:抽象类允许有构造方法,而接口不允许有构造方法。两者均不能被实例化 2.从成员变量来看:抽象类允许有普通的成员变量,而接口不允许有普通的成员变量,必须被public static final 修饰 即常量

2017-05-03 19:57:14 371

原创 数据库进阶(文件的组织方式和索引)

数据库中文件的组织方式数据库的组织要考率更新和检索的需求,更新涉及到数据的存储空间的扩展和回收的问题,检索涉及到扫描整个数据库,和大批量处理数据的问题,不同的需求要求不同的数据组织方式和存取方式。数据的组织方法是指数据组成记录,块,和访问结构的方式,包括把记录和块存储在磁盘上的方式,以及块和记录之间的相互联系。 存取方法是指对文件所采取的存取操作方法。 一种文件组织可以采取多种存取方法进行访问无

2017-05-01 00:19:49 10812 1

原创 数据库概论

数据库管理系统从用户角度看数据库管理系统 数据库定义 数据库操纵:crud 数据库控制 数据库维护从系统角度看数据库管理系统功能 事务管理 故障恢复 安全性控制 完整性控制 数据字典管理 数据库性能分析数据库语言数据库定义语言:DDL 数据库操纵语言:DML 数据库控制语言:DCL数据库的标准结构模式和视图的概念:三级模式和两层映像外模式(子模式):某一用户能

2017-04-26 18:30:44 525

原创 并发随笔(JUC开发包之重入锁)

JDK并发包(JUC) Condition 将 Object 监视器方法(wait、notify 和 notifyAll)分解成截然不同的对象,以便通过将这些对象与任意 Lock 实现组合使用,为每个对象提供多个等待 set(wait-set)。其中,Lock 替代了 synchronized 方法和语句的使用,Condition 替代了 Object 监视器方法的使用。重入锁 (java.util

2017-04-18 23:33:11 525

原创 并发随笔(1)

并发的相关概念进程:

2017-04-17 21:13:43 220

原创 MyBaits缓存原理(源码级跟踪)

数据缓存的作用缓存:当用户量十分巨大,高并发执行的时候,将用户经常查询的数据放到缓存(内存)中,用户查询数据就无需再到磁盘(数据库)中查询,也就是说无需再创建MappedStatement对象,从而 减轻服务器的压力。提升系统的性能。MyBaits提供了一级缓存和二级缓存两种机制:一级缓存:一个SqlSession级别,Sqlsession只能访问自己的一级缓存的数据. 二级缓存:跨SqlSess

2017-04-08 23:50:09 261

原创 springMVC随笔(为什么要使用SpringMVC)

为什么要使用SpringMVC为什么要使用springMVC?他的出现解决了什么问题? 首先回顾一下WebMVC: 如果没有MVC设计模式。程序间的各层之间依赖非常强,耦合度高。严重违背了高内聚低耦合的设计原则。而WebMVC将控制逻辑和功能处理,模型和视图进行了分离。降低耦合但是WebMVC也有严重的缺点:控制器(controller) 1.控制逻辑较为复杂,而且每个模块都需要一个控制

2017-03-28 17:17:10 8070 1

原创 spring随笔(Junit 和web)

在web中配置spring在web中有两种配置spring的方式:1. ContextLoaderListener 通过spring监听<!-- 配置spring 监听器,加载xml配置文件 --><listener> <listener-class>org.springframework.web.context.ContextLoaderListener </listener

2017-03-27 21:15:17 329

原创 spring随笔(事务配置)

spring中的jdbcspring中的jdbc与传统的jdbc有什么区别?Spring的jdbc:节省代码,不管连接(Connection),不管事务、不管异常、不管关闭(con.close() ps.close )由JdbcTemplate实现crudspring代码式管理事务流程: 1.在xml中配置数据源(连接池)dataSource 2.配置事务管理器,注入数据源 DataSource

2017-03-27 20:18:36 315

原创 spring随笔(AOP)

AOP术语1.target:目标类,需要被代理的类。例如:UserService 2.Joinpoint(连接点):所谓连接点是指那些可能被拦截到的方法。例如:所有的方法 3**.PointCut** 切入点:已经被增强的连接点。例如:addUser() 4.advice 通知/增强,增强代码。例如:after、before 5 . Weaving(织入):是指把增强advice应用到目标对

2017-03-27 16:51:09 251

原创 spring 随笔(体系结构和生命周期)

spring体系结构主要apiBeanFactoy 一个工厂,用于生成任意Bean 特点是延迟加载,只有在第一次getBean时才会初始化Bean ApplicatinContext:是他的子接口,功能更加强大,当配置文件被加载,Bean就被初始化。提供了国际化处理,事件传递,Bean自动装配,各层Context实现 ClassPathXmlApplicationContext 加载class

2017-03-27 15:10:50 496

原创 Spring随笔(IOC/DI 及注入方式)

为什么要使用Spring,优点是什么?1.高内聚低耦合,简化开发 spring是一个大工厂(容器),可以将对象的创建和依赖关系的维护全部交给spring管理。 2.支持Aop编程 方便对程序的权限拦截和运行性能进行监控 3.声明式事务支持 通过过配置就可以完成对事务的管理,无需手动编程 4.支持Junit 5.方便集成各种优秀的框架核心技术IOC:控制反转什么是控制反转?Ioc不

2017-03-26 23:05:42 449

原创 spring事物

spring事务介绍PlatformTransactionManager :平台事物管理器,spring要管理事务,必须使用事务管理器进行事务配置时,必须配置事务管理器TransactionDefinition:事务详情(事务定义、事务属性),spring用于确定事务具体详情,例如:隔离级别、是否只读、超时时间 等TransactionStatus:事务状态,spring用于记录当前事务运行状态。例

2017-03-24 14:30:10 320

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除