自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 DelayQueue1.8源码

DelayQueue 内部通过组合PriorityQueue 来实现存储和维护元素顺序的,通过compareTo方法,排序存储,小的在前面。每次插入元素,都可能移动元素DelayQueue 存储元素必须实现Delayed 接口,通过实现Delayed 接口,可以获取到元素延迟时间,以及可以比较元素大小(Delayed 继承Comparable)DelayQueue 通过一个可重入锁来控制元素的...

2019-04-30 16:49:01 310

原创 Semaphore1.8源码

Semaphore 主要用于限量控制并发执行代码的工具类, 其内部通过 一个 permit 来进行定义并发执行的数量, 其实可以理解为一个 限制数量的 ReadLock 获取.Semaphore 主要特点:1.Semaphore 方法的实现通过 Sync(AQS的继承类)代理来实现2.支持公平与非公平模式, 都是在AQS的子类里面进行, 主要区分在 tryAcquire 里面使用pack...

2019-04-30 13:37:34 112

原创 多个线程顺序执行

1.wait-notifyAll同步方法package com.study.demo;/** * Created by Administrator on 2019\3\2 0002. */public class Test { private int seq = 1; public synchronized void method1() { try ...

2019-04-30 09:47:59 235

原创 ReadWriteLock1.8源码

ReadWriteLock管理一组锁,一个是只读的锁,一个是写锁。读锁可以在没有写锁的时候被多个线程同时持有,写锁是独占的。所有读写锁的实现必须确保写操作对读操作的内存影响。换句话说,一个获得了读锁的线程必须能看到前一个释放的写锁所更新的内容。读写锁比互斥锁允许对于共享数据更大程度的并发。每次只能有一个写线程,但是同时可以有多个线程并发地读数据。ReadWriteLock适用于读多写少的并发情...

2019-04-29 17:32:52 115

原创 LinkedBlockingQueue1.8源码

使用 private int i; LinkedBlockingQueue<Integer> queue = new LinkedBlockingQueue<>(3); class Producer implements Runnable { @Override public void run() { ...

2019-04-28 17:32:00 147

原创 idea插件

插件安装方式:1.Maven Helper分析依赖冲突插件此插件可用来方便显示maven的依赖树,在没有此插件时,如果想看maven的依赖树需要输入命令行: mvn dependency:tree 才可查看依赖。如果想看是否有依赖包冲突的话也需要输入命令行等等的操作。而如果安装Maven Helper插件就可免去命令行困扰。通过界面即可操作完成。使用方式:打开项目中的pom文件,在底...

2019-04-28 11:43:50 163

原创 CountDownLatch1.8源码

使用 private static Random random = new Random(); private static int num = 3; public static void main(String[] args) { CountDownLatch latch = new CountDownLatch(num); Syste...

2019-04-26 18:37:49 168

原创 ReentrantLock1.8源码

使用举例默认是非公平锁,公平锁构造参数用truepackage com.study.demo;import java.util.concurrent.locks.ReentrantLock;/** * Created by Administrator on 2019\3\2 0002. */public class Test { private static Reentr...

2019-04-24 19:48:11 139

原创 序列化继承

相关注意事项a)序列化时,只对对象的状态进行保存,而不管对象的方法;b)当一个父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口;c)当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象进行序列化;但是该对象也要实现序列化接口d)并非所有的对象都可以序列化,至于为什么不可以,有很多原因了,比如:1.安全方面的原因,比如一个对象拥有private,pub...

2019-04-23 11:33:40 1170

原创 idea问题解决

启动报错Caused by: java.net.SocketException: Unrecognized Windows Sockets error: 10106: create以管理员身份打开命令提示符(win7附件中右键命令操作符选择管理员模式运行、win8或10可先菜单中搜索命令操作符然后右键…)运行 netsh winsock reset重启电脑...

2019-04-23 10:30:05 423

原创 kafka源码1-生产者

由KafkaTemplete发起发送请求,可分为如下几个步骤:一、数据入池1.KafkaProducer启动发送消息2.消息发送拦截器拦截3.用序列化器把数据进行序列化4.用分区器选择消息的分区5.添加进记录累加器二、NIO发送数据6.等待数据条数达到批量发送阀值或者新建一个RecoedBatch,立即唤醒Sender线程执行run方法7.发送器内部从累加器Deque中拿到要发送...

2019-04-22 15:45:34 389

原创 Kafka使用问题

1.关于Kafka的分区:开始使用Kafka的时候,没有分区的概念,以为类似于传统的MQ中间件一样,就直接从程序中获取Kafka中的数据。后来程序搭建了多套,发现永远只有一个消费者(消费者应用部署在多个tomcat上)会从Kafka中获取数据进行处理,后来才知道有分区这么一个概念。具体不说了,网上有很多资料,总的概括:Kafka的分区,相当于把一个Topic再细分成了多个通道,一个消费者应用...

2019-04-22 10:50:23 133

原创 kfka主从同步

Kafka的副本功能不是必须的,你可以配置只有一个副本,这样其实就相当于只有一份数据比如有3个副本,那么有1个leader,2个flower创建副本的单位是topic的分区,每个分区都有一个leader和零或多个followers.所有的读写操作都由leader处理,一般分区的数量都比broker的数量多的多,各分区的leader均匀的分布在brokers中。所有的followers都复制le...

2019-04-22 09:45:09 229

转载 消息队列的使用场景

4种,异步处理,应用解耦,流量削锋和消息通讯异步处理同一个服务发邮件,发短信应用解耦不同服务的订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功库存系统:订阅下单的消息,采用拉/推的方式,获取下单信息,库存系统根据下单信息,进行库存操作流量削锋用户的请求,服务器接收后,首先写入消息队列。假如消息队列长度超过最大数量,则直接抛弃用户请求或跳转到错...

2019-04-20 21:36:07 76

转载 Session和cookie的区别

一. 概念理解1、无状态的HTTP协议:协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。2、会话(Ses...

2019-04-18 16:42:15 93

原创 HTTP和HTTPS的区别

HTTPS和HTTP的区别1、https协议需要到CA申请证书,一般免费证书较少,因而需要一定费用。  2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。  3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。  4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密...

2019-04-18 16:23:53 64

原创 HTTPS加密解密过程

https:在http(超文本传输协议)基础上提出的一种安全的http协议,因此可以称为安全的超文本传输协议。http协议直接放置在TCP协议之上,而https提出在http和TCP中间加上一层加密层。从发送端看,这一层负责把http的内容加密后送到下层的TCP,从接收方看,这一层负责将TCP送来的数据解密还原成http的内容。SSL(Secure Socket Layer):是Netscap...

2019-04-18 16:11:15 8205 3

转载 HTTP的长连接和短连接

HTTP协议与TCP/IP协议的关系HTTP的长连接和短连接本质上是TCP长连接和短连接。HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。 IP协议主要解决网络路由和寻址问题,TCP协议主要解决如何在IP层之上可靠地传递数据包,使得网络上接收端收到发送端所发出的所有包,并且顺序与发送顺序一致。TCP协议是可靠的、面向连接的。如何理解HTTP协议是无状态的HTTP...

2019-04-18 15:29:47 133

转载 HTTP协议的无状态性

无状态指每次的请求都是独立的,它的执行情况和结果与前面的请求和之后的请求是无直接关系的,它不会受前面的请求应答情况直接影响,也不会直接影响后面的请求应答情况web应用是有状态的。所以我们加入了cookies、session等机制去实现由状态的web应用。所以我们可以这么理解:Web应用=http协议+session、cookies等状态机制+其他辅助的机制。TCP为一个有状态的传输层通信协...

2019-04-18 14:55:15 3407

转载 TIME_WAIT和CLOSE_WAIT的区别

系统上线之后,通过如下语句查看服务器时,发现有不少TIME_WAIT和CLOSE_WAIT。netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' TIME_WAIT 297ESTABLISHED 53CLOSE_WAIT 5解释TIME_WAIT:表示主动关闭,通过优化系统内核参数可容易解决。CLO...

2019-04-18 14:35:25 6901

原创 http1.0和http1.1区别

1 可扩展性可扩展性的一个重要原则:如果HTTP的某个实现接收到了自身未定义的头域,将自动忽略它。Ø 在消息中增加版本号,用于兼容性判断。注意,版本号只能用来判断逐段(hop-by-hop)的兼容性,而无法判断端到端(end-to-end)的兼容性。例如,一台HTTP/1.1的源服务器从使用HTTP/1.1的Proxy那儿接收到一条转发的消息,实际上源服务器并不知道终端客户使用的是HTTP...

2019-04-18 10:23:05 460

原创 springboot2源码3-自动配置

自动读取配置文件,装配配置类从刷新容器开始:AbstractApplicationContextpublic void refresh() throws BeansException, IllegalStateException { //... invokeBeanFactoryPostProcessors(beanFactory); //... } protected v...

2019-04-17 17:07:08 154

原创 springboot2源码2-SpringApplication运行

SpringApplication的run方法public ConfigurableApplicationContext run(String... args) { //时间监控 StopWatch stopWatch = new StopWatch(); stopWatch.start(); ConfigurableApplicationContext context = nu...

2019-04-16 18:16:05 185

原创 springboot2源码1-SpringApplication实例化

springboot 2.0.0.7.RELEASE版本启动类package com.study.bootweb;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplica...

2019-04-16 16:54:55 138

原创 mybatis3源码2-查询

查询举例public class Main { public static void main(String[] args) throws IOException { String resource = "mybatis.xml"; InputStream inputStream = Resources.getResourceAsStream(resou...

2019-04-15 16:45:15 121

原创 mybatis3源码1-初始化

项目mybatis配置文件mybatis.xmlmapper.xml<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">&lt...

2019-04-12 15:59:25 188

原创 springmvc5中设计模式

用了5种设计模式组合模式责任链模式适配器模式策略模式组合模式WebMvcConfigurerComposite体现了组合模式树枝节点用Composite结尾,里面包含了树叶节点,树枝和树叶都实现了相同的抽象类或接口WebMvcConfigurerclass WebMvcConfigurerComposite implements WebMvcConfigurer { pri...

2019-04-10 21:10:06 8014 1

原创 @EnableWebMvc启动springmvc特性

使用@EnableWebMvc@SpringBootApplicationpublic class Application { public static void main(String[] args) { log.debug("access {}","main"); SpringApplication.run(Application.class,...

2019-04-10 19:31:32 158

原创 springmvc5源码

SpringMVC源码分析我们根据工作机制中三部分来分析SpringMVC的源代码。其一,ApplicationContext初始化时建立所有url和Controller类的对应关系(用Map保存);其二,根据请求url找到对应的Controller,并从Controller中找到处理请求的方法;其三,request参数绑定到方法的形参,执行方法处理请求,并返回结果视图.第一个步骤,也就...

2019-04-10 11:40:38 414

原创 六大设计原则

开闭原则单一职责原则里氏替换原则依赖倒置原则接口隔离原则迪米特法则开闭原则OCP,open-closed principle,是面向对象设计中最基础的设计原则,它指导我们如何建立稳定灵活的系统,开闭原则只定义了对修改关闭,对扩展开放。其实只要遵循下面5中设计模式,设计出来的软件就是符合开闭原则的。类,方法可以扩展,不能修改。面对新需求,增加代码,不是修改代码。关键就在于“抽象”。...

2019-04-05 22:44:19 117

原创 TreeMap1.8源码

使用TreeMap使用比较器排序,按照key的排序遍历,如果没有比较器,用默认比较器,key的类默认实现了Comparable接口的compareTo方法,比如Integer,Stringkey不能为null,value可以为null Map<String, String> treeMap = new TreeMap<String, String>()...

2019-04-03 20:07:01 146

原创 平衡二叉树

平衡二叉树是由前苏联的两位数学家G.M.Adelse-Velskil和E.M.Landis提出,因此一般也称作AVL树,AVL树本质还是一棵二叉查找树,只是在其基础上增加了“平衡”的要求。所谓平衡是指,对AVL树的任意结点来说,其左子树与右子树的高度之差的绝对值不超过1,其中左子树与右子树的高度因子之差称为平衡因子。如下所示,就是一棵由{1,2,3,4,5,7,8}构建的AVL树:只要能随时...

2019-04-03 15:26:57 117

原创 二叉排序树

二叉排序树BST,又叫二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3)左、右子树也分别为二叉排序树;二分查找,时间log2n优化方式有Size Balanced Tree(SBT)AVL树红黑树Treap(Tree+Heap)这些均可以使...

2019-04-03 15:21:10 113

原创 红黑树

R-B Tree,全称是Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)。红黑树的特性:(1)每个节点或者是黑色,或者是红色。(2)根节点是黑色。(3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!](4)如果一个节点是红色的,则它的子节...

2019-04-03 14:49:17 107

原创 JDK1.8 LinkedHashMap源码

LinkedHashMap,根据插入值的顺序读取key和value都可以为null,和hashmap相同使用 Map<String, String> linkedMap = new LinkedHashMap<String, String>(); linkedMap.put("a", "1"); linkedMap.put...

2019-04-03 13:55:19 231

原创 swagger使用

依赖 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version&g...

2019-04-02 13:39:55 196

原创 springboot2.0新特性

Java 9 支持Spring Boot 2.0 要求Java 版本必须8以上, Java 6 和 7 不再支持。基本支持了Java 9。之所以是“基本”,是因为还没得到用户的验证。Jedis变为了LettuceRedis客户端驱动现在由Jedis变为了Lettuce。使用Jedis的同学们,大概知道方向了吧。但仍然支持Jedis,那么exclude掉io.lettuce:lettuce...

2019-04-02 10:49:46 334

空空如也

空空如也

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

TA关注的人

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