- 博客(14)
- 资源 (1)
- 收藏
- 关注
原创 【NoHttpResponseException】问题分析--HttpClient(InternalHttpClient)
项目场景:在A服务中通过自己实现的HttpClient请求B服务,偶尔出现NoHttpResponseException : failed to respondurl: http://B-host:port/xxxQPS: 100 - 700A服务ClientConfig参数(本次需要关注的):AsyncHttpClientConfig.maxConnections: 500AsyncHttpClientConfig.maxConnectionsPerHost: 500AsyncHttpCli
2022-04-18 17:15:05 1686
原创 手绘 ✍︎ 一致性hash算法原理
一致性hash算法为什么需要一致性hash算法一致性hash算法一致性hash算法增强(添加虚拟节点)为什么需要一致性hash算法有时候由于数据量太大,一个数据库的容量不能满足我们的需求就需要多个数据库存储数据,这样读写前我们需要先确定应该操作哪一个数据库如下图,我们想将一批数据放入到8个数据库中。可以将数据ID跟8做求模运算,根据得到的值选择对应的数据库,这样读写都可以这样选择一个数据库操作(有时候不一定是根据ID或ID非数值又或其他原因,一般会使用其hash值来做求模运算)存在的问题:
2021-02-03 14:24:34 247
原创 Mysql之innodb浅析
Mysql之innodb浅析Mysql之innodb浅析基本描述数据结构事物隔离级别Read Uncommitted(读取未提交内容)Read Committed(读取提交内容)Repeatable Read(可重读)Serializable(可串行化)锁当前读快照读MVCC(多版本并发控制)Mysql之innodb浅析基本描述Mysql的数据库引擎之一,目前是默认存储引擎区别于ISAM和MyISAM,最大的特色是支持ACID兼容的事物功能事务管理(ACID)原子性(Atomicit
2020-11-11 17:46:03 176
原创 5种网络IO模型简析
网络IO模型网络IO模型基础描述阻塞IO(bloking IO -- BIO)非阻塞IO(non-blocking IO -- NIO)多路复用IO(multiplexing IO)selectpollepollepoll_create()epoll_ctl()两种模式信号驱动式IO(signal-driven IO)异步IO(asynchronous IO -- AIO)各类IO比较网络IO模型基础描述IO:一般指访问磁盘数据,分为两个步骤;以read操作为例,第一步是等待数据阶段,数据放入系统
2020-11-11 17:37:15 224
原创 HTTP三次握手四次挥手过程(清晰梳理)
HTTP三次握手四次挥手过程HTTP三次握手四次挥手过程基本描述工作流程建立连接-TCP三次握手为什么三次握手断开连接-TCP四次挥手为什么四次挥手HTTP三次握手四次挥手过程基本描述http协议全称:HyperText Transfer Protocol,超文本传输协议;用于服务传输超文本到本地浏览器的传送协议应用层协议、C/S模型、无状态通常承载与TCP协议层上,有时也承载与TLS或SSL协议层上,此时成了https[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(i
2020-11-11 17:32:11 1244
原创 volatile关键字解析(阅后即粉)
volatile关键字解析volatile关键字解析基本描述内存可见性禁止指令重排volatile关键字解析基本描述volatile用来修饰变量,保证内存可见性及禁止指令重排volatile并不能保证原子性,比如i++是3步指令,只有完成3步时才会写入主存,所以并发时会有问题内存可见性缓存一致性问题[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2337Jf6o-1605086788107)(./系统内存关系.png)]多核处理器涉及到同一共享内存时,
2020-11-11 17:28:50 106
原创 发布项目到maven中央仓库(Mac环境)
安装gpg并生成秘钥安装命令 brew install gpg ,预计10分钟左右生成秘钥命令 gpg --gen-key,输入姓名、邮箱、保护密码(需要记住)查看秘钥 gpg --list-keys发布秘钥需要发布两个服务器gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys 秘钥值gpg --keyserver hkp://pool.sks-keyservers.net --send-keys 秘钥值验证秘钥是否
2020-10-15 17:23:42 503
原创 浅谈3种动态代理
浅谈JDK动态代理与CGLIB动态代理的区别JDK动态代理CGLIB动态代理JDK动态代理代理类实现InvocationHandler接口通过反射实现被代理类必须实现某个接口代码示例:// ------------- 代理类 -------------import lombok.extern.slf4j.Slf4j;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import j
2020-08-26 18:06:03 164
原创 线程池-ThreadPoolExecutor使用总结
ThreadPoolExecutor使用总结流程图构造参数corePoolSizemaximumPoolSizekeepAliveTimeunitworkQueuethreadFactoryhandler流程图构造参数corePoolSize核心线程数:默认情况下,核心线程即使空闲也不会被销毁添加新任务时,如果总工作线程数小于corePoolSize,无论当前工作线程是否空闲,都会直接创建新线程添加新任务时,如果总工作线程数大于或等于corePoolSize,任务添加到工作队列ma
2020-08-19 17:17:27 160
原创 为什么阿里巴巴代码规范不允许for循环里使用add/remove方法
为什么阿里巴巴代码规范不允许for循环里使用add/remove方法主要是remove方法,add方法在for循环内使用不当可能会死循环不要在foreach循环里进行元素的remove/add操作,remove元素请使用Iterator方式。Negative example: List<String> originList = new ArrayList<String>(); originList.add("22"); for (String ite
2020-08-14 19:07:24 406
原创 synchronized原理分析笔记
synchronized原理使用场景锁的升级(膨胀)对象头的操作使用场景使用场景分为两种,一种是用于类,一种是用于对象;类: 修饰静态方法、同步块指向类;修饰方法指向当前类,同步块指向指定的类对象: 修饰非静态方法、同步块指向对象;修饰方法指向当前实例,同步块指向指定的对象每个对象和类都有自己独立的监听器Monitor,jvm用Monitor实现Lock;比如HashTable.class 有一个Monitor,每个new HashTable() 也有自己Monitor;监听器Monitor
2020-06-30 11:51:58 142
原创 你确定String是不可变的?
有一次面试被问到 String对象不可被改变么?仔细一想是可变,然后研究了下发现了String的神奇之处!不可变的String众所周知String被设计为不可变类被final修饰,不可被继承;内部由一个char数组实现,由于该变量被final修饰所以保证了其长度不可变String没有提供任何修改char数组内容的方法,保证了内容不可被修改改变String值想必有些人已经想到了,通过反射拿到char数组对象然后修改其值String str = "123";Field field =.
2020-06-08 11:48:27 204
原创 单例模式-各种实现总结
单例模式-学习总结饿汉式直接赋值静态块赋值懒汉式简单版double check(双重校验)内部类饿汉式饿汉式是最简单最直接的,在单例数量较少的应用里推荐使用这种方式。优点: 线程安全缺点: 类加载时就初始化,耗费不必要的资源直接赋值public class HungrySingleton { private static final HungrySingleton INSTAN...
2019-10-28 18:10:05 160
原创 JAVA集合map、list、set详解
Map中常用的5个集合HashMapLinkedHashMapHashTableConcurrentHashMapTreeMapList中常用的3个集合ArrayListLinkedListVectorSet中常用的3个集合HashSetLinkedHashSetTreeSetCopyOnWriteArraySet使用总结线程安全效率高有顺序Map中常用的5个集
2017-11-03 09:52:21 387
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人