- 博客(19)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 深入Java线程池的执行和关闭流程
线程池状态 线程池状态流转图线程池工作流程图 //任务队列 private final BlockingQueue<Runnable> workQueue; //线程池锁 private final ReentrantLock mainLock = new ReentrantLock(); //工作线程队列 使用HashSe......
2020-01-03 14:23:52
1886
原创 Pigeon服务的注册与发现
上一篇:Pigeon的一次调用服务端发生了什么前面介绍了Pigeon请求调用的过程,那么Pigeon的服务是如何被调用方感知的呢,我们知道通常RPC都会有一个注册中心,以保存服务测的信息(ip,port等等),这样客户端就可以通过注册中心去拿到服务的信息,来完成请求的调用。那一起来看下Pigeon服务的注册和发现机制是如何实现的。服务的注册首先,我们来看下服务的注册机制。在Pigeon中主...
2020-01-19 16:43:26
1001
原创 Pigeon的一次调用服务端发生了什么
上一篇 :Pigeon的一次调用客户端发生了什么接着上一篇,来看一下在这一次请求中服务端发生了什么首先来看下服务端的启动public static void init() { if (!isInitialized) { synchronized (ProviderBootStrap.class) { if (!isIni...
2020-01-17 15:31:31
417
原创 Pigeon的一次调用客户端发生了什么
Pigeon是美团点评的RPC的框架,涉及很多模块,服务注册发现,负载均衡,路由,容灾,故障转移,消息传输等等,要想了解这些模块的实现机制,首先要找到一个入手点,作为一个RPC框架,最重要的当然就是服务之间的请求调用及数据传输了,那么我们就来看一下pigeon客户端的一次调用发生了些什么,又经过了那些链路调用?首先看一下客户端的启动方法public static void startup() ...
2020-01-16 20:05:57
636
原创 netty对象池详解
在netty引用计数机制介绍中,我们说到了对象池,这里对对象池做一个详细的介绍。这里引用上节的内容,介绍下对象池的作用。对象池其实就是缓存一些对象从而避免大量创建同一个类型的对象,类似线程池的概念。对象池缓存了一些已经创建好的对象,避免需要时才创建对象,同时限制了实例的个数。池化技术最终要的就是重复的使用池内已经创建的对象。从上面的内容就可以看出对象池适用于以下几个场景:1.创建对象的开销...
2020-01-15 18:34:48
1227
原创 TCP粘包拆包问题分析与解决
TCP 是一个面向字节流的协议,它是性质是流式的,所以它并没有分段。就像水流一样,你没法知道什么时候开始,什么时候结束。所以他会根据当前的套接字缓冲区的情况进行拆包或是粘包。在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的。因此TCP的socket编程,收发两端(客户端和服务器端)都要有成对的socket,因此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优...
2020-01-13 16:20:21
931
原创 netty对于channel的线程安全保证
netty的几个重要特性1.一个EventLoopGroup当中包含一个或多个EventLoop2.一个EventLoop在其生命周期内只和唯一的一个Thread线程绑定(即一个io线程)3.所有由EventLoop处理的各种io事件都将在其所关联的io线程上执行,因为是单线程保证了线程安全4.一个Channel在其生命周期内只会注册在一个EventLoop(selector)上5.运...
2020-01-12 16:24:33
3304
原创 Zookeeper实现分布式锁
首先要介绍下ZK节点和监听机制1.节点类型持久节点(PERSISTENT)持久节点是zookeeper中最常见的一种节点类型。所谓持久节点,是指在节点创建后,就一直存在,直到有删除操作来主动清除这个节点。持久顺序节点(PERSISTENT_SEQUENTIAL)持久顺序节点的基本特性和持久节点是一致的,额外的特性表现在顺序性上。在zookeeper中,每个父节点会为他的第一级子节点维护一...
2020-01-07 14:18:29
93
原创 synchronize的可见性和原子性
synchronize: 可以保证变量可见性和一段代码的原子性JMM关于synchronized的两条可见性规定: *线程解锁前,必须把共享变量的最新值刷新到主内存中 *线程加锁时,将清空工作内存中共享变量的值,从而使用共享变量时需要从主内存中重新读取最新的值参考:https://blog.csdn.net/weixin_42354330/article/details/8194...
2020-01-06 17:27:18
1122
原创 Https加密解密过程
大致过程如图(转自网络):参考 :https://blog.csdn.net/qq_1290259791/article/details/85939246https://mp.weixin.qq.com/s/7rn4ruT2KemKRJRUkCwyfA
2020-01-06 14:11:41
211
原创 深入理解netty零拷贝
首先来看一次网络I/O,使用传统的方式 (如图)发生了哪些系统调用和数据的copy1.用户空间会发生一次系统调用,调用操作系统的read()方法请求磁盘上的数据2.操作系统收到调用后,到磁盘去读数据,期间发生上下文的切换(由用户态到内核态的切换)3.数据通过DMA(Direct Memory Access,直接内存存取)copy数据到kernel buffer(即内核缓冲区)4.然后用户进...
2020-01-04 20:30:00
878
转载 sql优化的几种方法
在sql查询中为了提高查询效率,我们常常会采取一些措施对查询语句进行sql优化,下面总结的一些方法,有需要的可以参考参考。1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where ...
2018-05-23 21:23:11
148
原创 双检锁DCL与静态内部类实现单例模式的原理解析
双检锁实现单例模式将上锁粒度降低到了仅仅是初始化实例的那部分,保证线程安全,提高执行效率。双检锁的机制出现确实解决了多线程并行中不会出现重复的new对象,实现了懒加载,但是,因为jvm存在一个无序写的问题,原因在于:instance=new DoubleCheckedLock()这行代码在不同编译器上的行为是无法预知的。编译器可能会有如下实现:1. 给新的实体inst...
2018-05-21 10:19:54
994
原创 散列与散列表
对于HashMap使用自定义类作为键时,必须重载hashcode()和equals()方法默认的Object.equals()的实现是“==”比较,比较对象的地址是否相同,相同则为同一对象,结果为true,但子类都会覆写equals方法,像String类就对equals方法进行了重写,其实现是比较两者字符串内容是否相同,相同则为true。默认的Object.hashcode()默认是使用对象的地址...
2018-05-17 18:00:13
204
原创 web应用--远程服务器端的搭建和自动化部署
第一步,环境搭建项目用到了jdk,数据库使用了redis和mysql,反向代理服务器为ngnix,应用部署到tomcat上,代码用git进行管理,maven进行编译构建,下面一次介绍这些部件的安装。1.JDK安装jdk有两种版本,这里采用open-jdk的安装方式。具体参照https://www.cnblogs.com/Dylansuns/p/6974272.html2...
2018-05-13 23:31:51
1792
原创 maven构建项目部署tomcat后 404问题的解决办法
maven install 会有404问题,解决办法:maven clean install 先clean再install可以解决404的问题
2018-05-13 23:23:31
4206
转载 Rxjava学习
RxJava是Reactive Programming(响应式编程)在Java中的一种实现。用一个字来概括就是流(Stream)。Stream就是一个按时间排序的Events序列,它可以放射三种不同的Events:某种类型的Value,Error或者一个Completed Signal。通过分别为Value,Error,Completed定义事件处理函数,将会异步地捕获这些Events。基于观察者...
2018-04-27 11:00:26
94
原创 git学习
cherry-pickgit cherry-pick可以选择某个分支中的一个或几个commit(s)来增加到另外一个分支。比如一个很好的例子,(来自网络 )假设我们有个稳定版本的分支,叫v2.0,另外还有个开发版本的分支v3.0,我们不能直接把两个分支合并,这样会导致稳定版本混乱,但是又想增加一个v3.0中的功能到v2.0中,这里就可以使用cherry-pick了。就是对某一分支的commit 进...
2018-04-20 17:10:22
103
转载 HTTP协议header报头学习
通常HTTP消息包括客户端向服务器的请求消息和服务器向客户端的响应。HTTP的头域包括通用头,请求头,响应头和实体头四个部分。通用头域 (通用首部)通用头域包含请求和响应消息都支持的头域,提供了与报文相关的最基本的信息,通用头域包含 Connection 允许客户端和服务器指定与请求/响应连接有关的选项Date 提供日期和时间标志,说明报文是什么时间创建的MIME-Version 给出发送端使用的...
2018-04-18 16:32:53
910
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人