自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 机器学习笔记

机器学习总结

2022-12-17 11:11:30 160 1

原创 CQRS学习总结

最近一段时间在研究DDD总的CQRS,借着此篇文章做一个总结,也算是阶段性的成功,后续会进一步研究,将会通过其他文章进行完善。

2022-01-23 12:18:24 361

原创 知识点总结

总结知识点

2021-11-24 11:03:04 209

原创 并发安全集合和线程池

链接:http://note.youdao.com/noteshare?id=2fca953a259ca779438803a9bf8b9885&sub=5FBC1E4F114F4181AA5B3F0D9CF595D6

2021-11-23 11:13:25 146

原创 线程池知识点总结

1. 线程池中的worker继承AQS,实现了不可重入锁,主要是为了通过有锁,无锁标识worker处于忙碌状态还是空闲状态,从而可以判断是否对woker进行销毁。参考文章: ThreadPoolExecutor关闭线程池原理

2021-10-20 23:24:54 166

原创 AQS源码总结

本文参考文章:万字超强图文讲解AQS以及ReentrantLock应用1. CLH队列的头结点和尾结点都是虚拟节点,头结点可以理解为哨兵节点。并且为了节省内存都是lazy initialized. 并且头结点如果存在,可以保证部位CANCELLED状态2. 在doAcquireNanos(int args, long nanosTimeout)方法中,也就是具有超时功能的获取锁的过程中,并不是一开始就park住线程的,有一个自旋阈值,如果超过了在挂起,因为如果时间没有超过1000 nanosseco

2021-10-12 21:08:51 129

原创 Netty的好处

高并发架构 网络模型:nio非阻塞模型 线程模型:reactor模型 高性能 动态分配byteBuf 网络参数优化:接收缓冲区 发送缓冲区 noDelay 高可靠 网络连接断开 网络链路探查 nioEventLoop线程池(单线程)容错的处理try cacth epoll空轮序的bug tailContext byteBuf内存自动释放 可扩展 pipeline中handler调用链 序列化协议 定制网络通信协议 nio拆包和粘包问题 编码器

2021-07-10 17:09:28 149

原创 分布式事务总结

XA规范TM:Transaction Manager:事务管理器 RM:Resource Manager:资源管理器即每个数据库资源 AP:Application:应用程序即程序入口 CRM:Communication Resource Manager:通信资源管理器全局事务概念 X/OPEN定义一套分布式模型和规范 DTP:Distributed Transaction Processing Reference Model:分布式事务处理模型 TM RM AP CRM等模型

2021-07-10 17:05:08 223 1

原创 Redis aof持久化流程图

2021-07-10 16:57:02 344 1

原创 Redis rdb持久化流程图

2021-07-10 16:49:26 269

原创 Redis内存淘汰策略

过期时间 过期时间设置 秒:expire key 100 毫秒:pexpire key 100 指定秒:expireat key 23423423423 指定毫秒:pexpireat key 23423423423000 底层实现转为pexpireat expire key 100 转毫秒:expire key 100000 计算指定毫秒值:100000+now()=11111100000 设置过期时间:pexpireat key 11111100000

2021-07-10 16:47:22 100

原创 Redis主从复制流程图

参考文章:Redis主从复制详解

2021-07-10 16:45:28 164

原创 分布式锁简单流程总结

zk分布式锁简单版本 获取锁的节点成功在zk中创建临时目录 获取锁失败的节点等待,注册watch监听临时节点删除后唤醒节点去获取锁 顺序节点获取锁 获取锁在zk中创建一个临时顺序节点 获取锁失败同理创建一个顺序节点同时监听前一个顺序节点 watch监听到事件后判断自己是否是第一个节点则获取锁成功 redis简单版本: set ex nx方式,当key存在时返回nil代表获取锁失败,key不存在返回成功获取锁成功 锁的超时时间为ex 释放锁lua脚本 get+del

2021-07-10 16:31:51 172

原创 Zk curator分布式锁流程

2021-07-10 16:29:06 228

原创 Redisson加锁解锁过程

2021-07-10 16:24:31 471

原创 细说缓存雪崩-击穿-穿透

在我们的项目中,可能是tomcat活着rpc服务,当请求过来的时候,都会先判断cache中是否存在你想要的数据,如果存在,就直接返回给调用端,如果不存在,就会先查询数据库,然后缓存到cache中,然后返回结果给调用方。下次查询过来的时候,就可以命中缓存。但是会存在一些极端情况,包括缓存雪崩,缓存击穿,缓存穿透。缓存雪崩: 如果大批量的key在同一时刻失效,有可能会导致大批量的请求在同一时刻打到后台数据库,因为数据库的吞吐量是有限的,很有可能把数据库打垮,这种情况就是缓存雪崩。尤其是...

2021-07-10 15:51:15 95

原创 时空转换问题总结

1. 空间换时间,在各个框架源码中有很多地方会体现出来。 ThreadLocal 内部有一个ThreadLocalMap, 其结构是一个Entry数组,在进行get,set操作的时候会对key为null的entry进行expunge,但是因为他是通过探测法解决hash冲突的,说以每次清除完之后要对相同哈希码的key进行重新整理。时间复杂度高,空间复杂度低。 Netty中的FastThreadLocal,在每个fastThreadLocalThread线程内部有一个InternalThreadL...

2021-07-09 09:30:49 279

原创 LINUX网络编程

协议: 一组规则分层模型结构: OSI(Open System Interconnect): 物,数,网,传,会,表,应 TCP/IP 4层模型: 链,网,传,应 应用层:HTTP,FTP,SSH,TELNET,NFS 传输层:TCP, UDP 网络层: IP, ICMP, IGMP 链路层: 以太网帧协议,ARP网络传输流程: 数据没有封装以前,是不能在网络中传递以太网帧协议(链路层): ARP协议:...

2021-07-04 21:50:35 117 1

原创 问题总结一

1. ThreadLocal, FastThreadLocal, InheritThreadLocal, TransmittableThreadLocal2. Http 1.1 2.0区别3. 查看GC log应该关注哪些参数(sys, user, real)4. weakReference回收过程和finilize回收过程5. jstack查看线程死锁, jstack底层, 抓线程不准确,有没有更好的方法6. 分析sql慢查询应该关注哪些参数...

2021-07-03 21:54:30 71

原创 ThreadLocal中的一些细节

ThreadLocal中不止是有内存泄漏的问题,源码中还有很多值得研究的细节。包括线性探测法怎么解决数据重复问题等。源码分析 ThreadLocal, ThreadLocalMap和Thread的关系图如下:为什么ThreadLocalMap采用链地址法来解决Hash冲突? Jdk中大部分采用链地址法来解决hash冲突,但是ThreadLocalMap采用开放地址发来解决哈希冲突。链地址法和开放地址法优缺点:开放地址法:1. 容易产生堆积问题,不适用于...

2021-07-03 17:17:30 127

原创 网络编程七

实现UDP单播和广播UDP 这样的无连接协议中,并没有持久化连接这样的概念,并且每个消息(一个UDP 数据报)都是一个单独的传输单元。此外,UDP 也没有TCP 的纠错机制。通过类比,TCP 连接就像打电话,其中一系列的有序消息将会在两个方向上流动。相反,UDP 则类似于往邮箱中投入一叠明信片。你无法知道它们将以何种顺序到达它们的目的地,或者它们是否所有的都能够到达它们的目的地。UDP的这些方面可能会让你感觉到严重的局限性,但是它们也解释了为何它会比TCP快那么多:所有的握手以及消息管理机制的开

2021-06-29 20:57:43 136

原创 网络编程六

解决粘包/半包问题回顾我们的的Hello,Netty再讲解一遍,加上注释什么是TCP粘包半包?改造程序,客户端发送100遍消息假设客户端分别发送了两个数据包D1和D2给服务端,由于服务端一次读取到的字节数是不确定的,故可能存在以下4种情况。(1)服务端分两次读取到了两个独立的数据包,分别是D1和D2,没有粘包和拆包;(2)服务端一次接收到了两个数据包,D1和D2粘合在一起,被称为TCP粘包;(3)服务端分两次读取到了两个数据包,第一次读取到了完整的D1包和D2包的部分内容

2021-06-29 20:53:11 76

原创 网络编程五

Netty组件再了解Channel、EventLoop 和ChannelFutureNetty 网络抽象的代表Channel—Socket;EventLoop—控制流、多线程处理、并发;ChannelFuture—异步通知。Channel 接口基本的I/O 操作(bind()、connect()、read()和write())依赖于底层网络传输所提供的原语。在基于Java 的网络编程中,其基本的构造是class Socket。Netty 的Channel 接口所提供的API,被用

2021-06-29 20:50:54 922

原创 网络编程四

Netty是什么?为什么要用Netty?为什么要用Netty1、虽然JAVA NIO框架提供了 多路复用IO的支持,但是并没有提供上层“信息格式”的良好封装。例如前两者并没有提供针对 Protocol Buffer、JSON这些信息格式的封装,但是Netty框架提供了这些数据格式封装(基于责任链模式的编码和解码功能);2、直接使用NIO需要需要额外的技能,例如Java多线程,网络编程;3、要编写一个可靠的、易维护的、高性能的NIO服务器应用。除了框架本身要兼容实现各类操作系统的实现外。更重要

2021-06-29 20:48:24 65

原创 网络编程二

TCP/IP中的数据包每个分层中,都会对所发送的数据附加一个首部,在这个首部中包含了该层必要的信息,如发送的目标地址以及协议相关信息。通常,为协议提供的信息为包首部,所要发送的内容为数据。在下一层的角度看,从上一层收到的包全部都被认为是本层的数据。网络中传输的数据包由两部分组成:一部分是协议所要用到的首部,另一部分是上一层传过来的数据。首部的结构由协议的具体规范详细定义。在数据包的首部,明确标明了协议应该如何读取数据。反过来说,看到首部,也就能够了解该协议必要的信息以及所要处理的数据。 ① .

2021-06-29 20:45:56 85

原创 网络编程一

OSI采用了分层的结构化技术,共分为七层,物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。TCP/IP协议:TCP:TCP是面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于端到端的通讯。TCP提供的是一种可靠的数据流服务,采用带重传的肯定确认技术来实现传输的可靠性。TCP还采用一种称为“滑动窗口”的方式进行流量控制,所谓窗口实际表示接收能力,用以限制发送方的发送速度。面向连接的服务(例如Telnet、FTP、r..

2021-06-27 22:04:41 68

原创 Redis集群中的数据分区方案

数据分区方案: 数据分区有顺序分区、哈希分区等,其中哈希分区由于其天然的随机性,使用广泛;redis集群的分区方案就是哈希分区的一种。 哈希分区的基本思路:对数据的特征值(如key)进行分区,然后根据哈希值决定数据落在哪个节点。常见的哈希分区包括:哈希取余分区,一致性哈希分区,带虚节点的一致性哈希分区等。 衡量数据分区方法的好坏标准很多,其中比较重要的两个因素是:(1)数据分布是否均匀(2)增加或删除节点对数据分区的影响。由于哈希的随机性,哈希分区基本可以保证数据分部均...

2021-06-27 14:10:35 413 1

原创 时间轮算法以及Netty中的时间轮算法

时间轮算法总结

2021-06-27 14:10:07 124

原创 Epoll的两种工作方式

epoll对文件描述符的操作由两种模式:LT(level trigger)和ET(edge trigger)。LT模式是默认模式,两者区别如下: LT模式:当epoll_wait检测到文件描述符事件发生并将此事件通知应用程序,应用程序可以不立即处理该事件。下次调用epoll_wati时,会再次响应应用程序并通知次事件。 ET模式:当epoll_wait检测到文件描述符事件发生并将此事件通知应用程序,应用程序必须立即处理该事件。如果不处理,下次调用epoll_wait时,不会再...

2021-06-24 09:49:14 902

原创 Dubbo原理学习总结三

前言:

2021-06-24 09:15:46 62

原创 Dubbo原理学习总结二

在一个典型RPC使用场景中,包含了服务发现,负载,容错,透明代理,网络传输,序列化,编解码等组件,其中RPC协议就指明了程序如何进行网络传输和序列化。也就是说一个RPC协议的实现就等于一个非透明的RPC调用。协议的基本组成:地址: 服务提供者地址 端口: 协议指定开放的端口 运行服务: netty mina RMI服务 servlet容器 报文编解码 序列化方式: Hessian2Serialization、DubboSerialization、JavaSeria...

2021-06-24 08:57:53 97

原创 双亲委派模型和破坏场景

前言: Java虚拟机把描述类的数据从Class文件加载进内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是虚拟机的类加载机制。虚拟机设计团队把类记载阶段中通过一个类的全限定名来获取描述此类的二进制字节流这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块叫做“类加载器”。 类加载器虽然只用于实现类的加载动作,但是在java程序中起到的作用却远远不限于类加载阶段。对于任意的一个类...

2021-06-21 21:24:38 487

原创 Dubbo原理学习总结一

前言: dubbo是阿里开源的一个RPC远程调用框架,但从RPC框架来说,dubbo功能比较完善,支持多种传输和序列化fa

2021-06-20 20:21:50 91

原创 Kafka消息丢失和消息重复的几种情况及解决方式

前言kafka消息丢失会发生在Broker,Producer和Consumer三种中的任意一种。Broker消息丢失:Broker丢失消息是由Kafka自身原因造成的,也可以理解为由现有的操作系统组成方式造成的。kafka为了提高吞吐量和性能,采用异步批量的刷盘策略,也就是按照一定的消息量,和间隔时间进行刷盘。在之前讲解IO底层的文章中我们介绍过,我们将数据存储在Linux操作系统中,会先存储在也缓存中(Page Cache)中,之后由操作系统根据自己的策略进行刷盘或者通过fsync命令强制刷盘

2021-06-15 21:02:42 3138 2

原创 Redis中存在的两大阻塞:fork阻塞和AOF追加阻塞

前言:在之前的文章中介绍过Redis的持久化策略,和Redis的底层模型。这篇文章主要介绍Redis中存在的两大阻塞情况,Fork阻塞和AOF追加阻塞。1. fork阻塞:CPU的阻塞在Redis中,众多因素导致Redis单机内存不能过大。当面对请求暴增时,需要从库扩容,如果单机内存过大会导致扩容时间过长; 当主机宕机后,切换主机需要重新挂载从库,Redis内存过大会导致挂载速度过慢; 持久化过程中的fork操作fork操作:父进程通过fork操作可以创建子进程;子进程创建后,父子

2021-06-14 21:33:09 1986 2

原创 内存调优思路总结

内存调优思路总结

2021-05-30 14:56:30 70

原创 线上内存泄漏问题定位分析

线上内存泄漏定位分析

2021-05-30 14:55:39 90

原创 线上问题排查思路总结

前言:本文总结一些常见的线上问题和对应的排查思路,工具。对于线上问题,我们必须记住一个原则:尽快恢复服务,消除影响。不管出于应急的哪个阶段,我们首先必须想到的是恢复问题,恢复问题并不意味着必须在当下定位到问题。在大多数情况下,我们都是先恢复服务,尽可能多的保留当时的异常信息(内存dump,线程dump,gc log等),等到服务正常,再去复盘问题。下面描述几个经常会遇到的线上紧急问题。常用的命令工具总结1. top 命令-H :Threads-mode operation In

2021-05-27 16:39:23 2273 1

原创 动态代理:JDK动态代理和CGLIB动态代理区别

前言:动态代理作为java中的一大特性,在很多框架中都会用到。这篇文章介绍下JDK动态代理和CGLIB动态代理的区别。

2021-05-26 16:05:22 98

原创 Spring总结一:Bean的初始化过程

前言:这篇文章并不是真正的关于Spring中Bean的初始化过程的详细介绍,只是简单介绍,在介绍Spring设计模式的文章中因为需要,链接到这篇文章,对bean的初始化过程简单说明。bean容器的启动:读取bean的xml配置文件或者解析特定注解的类,将bean元素转换成BeanDefinition对象(BeanDefinition对象存储了bean对象的所有特征,是否单例,是否懒加载,factoryBeanName等) 通过DeanDefinitionRegistry将这些bean注册到be

2021-05-26 14:15:28 2277

空空如也

空空如也

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

TA关注的人

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