自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 问答 (1)
  • 收藏
  • 关注

原创 redis基本类型及微博微信中是如何应用的

类型图redis基本类型及类型结构如下图:以下数据类型api都只是一部分,其他可以在官网https://redis.io/topics/data-types-intro进行查看,下面只介绍几种常用的及案例可能需要的Stringapi...

2020-04-26 00:24:20 810

原创 JVM内存结构之运行时数据区

Jvm结构主要构成部分类装载器子系统; 运行时数据区; 执行引擎; 本地方法接口; 垃圾收集模块;jvm结构图运行时数据区上面为jvm的结构图,而今天主要分析的是运行时数据区,也就是运行内存,运行时数据区由堆、元空间、栈、本地方法栈、程序计数器构成,而由堆、元空间可线程共享,栈、本地方法栈、程序计数器则为线程独享。栈定义:栈为线程私有,每个线程对...

2020-02-25 14:11:59 181

原创 初试Zookeeper---概念篇

zookeeper:一个分布式协调框架,主要用在集群管理,分布式应用配置管理等。核心机制:文件系统数据结构 监听通知机制文件系统数据结构每个子目录都被称为znode(目录节点),node分四种类型,如下:持久化目录节点:只要不删除,永远存在;127.0.0.1:2181 $ create /z/aCreated /z/a127.0.0.1:2181 $ ls /z[a]持久化顺序目录节点:比持久化目录节点多一个顺序编号;127.0.0.1:2181 $ crea

2021-05-25 14:57:02 138

原创 netty源码分析及优点

今天梳理了一下netty源码调用流程,整理了一下详细流程图,如下netty流程图netty的优点Reactor主从设计模型 Nio非阻塞 无锁化串行 零拷贝(使用直接内存) ByteBuf内存池 灵活的TCP参数配置能力 并发优化然后找几个解释一下,如下Reactor主从设计模型Netty 抽象出两组线程池BossGroup和WorkerGroup,BossGroup和WorkerGroup类型都NioEventLoopGroup,BossGroup专门负.

2021-04-08 00:58:50 282

原创 Netty心跳检测代码及源码流程

心跳检测是指在TCP长连接中,客户端和服务端定时发送和接受简单数据,确保服务正常,在Netty中,对心跳检测进行了很好的封装,下面我们来看一下心跳检测的实现和源码Netty通过什么来实现心跳?IdleStateHandler:Netty是通过IdleStateHandler来实现心跳检测的。怎么使用?客户端public class HeartBeatClient { public static void main(String[] args) throws Exception

2021-03-31 22:11:44 767

原创 Netty拆包粘包

拆包拆包是指netty传输数据时候,会把一条信息,拆成几部分。比如:"hello "拆成"he" 和 "llo"等,粘包粘包是指将多条信息连在一起 比如发送“hello”和"123",而受到的是 "hello123"解决方案:消息定长,比如固定传100字符,不够的用空格补充 在尾部添加特殊字符 发送信息是发送信息长度下面我们来看一下定长怎么用客户端@Datapublic class MyMessageProtocol { //定义一次发送包体长度 .

2021-03-31 19:42:55 143

原创 Netty编解码及protostuff

Netty编解码是什么?要想了解编解码,首先要知客户端和服务端是怎么处理信息的,当通过Netty发送或者接收信息的时候,首先要将接收到的消息尽心decode()方法进行解码,然后发送ChannelPipeline中的下一个ChannelInboundHandler,也就信息要从Channel中ChannelPipeline的head Handler一直处理到tail Handler,涉及到的编解码组件有Channel、ChannelHandler、ChannelPipe等。这几个组件的关系大致如下:

2021-03-31 19:03:33 239

原创 Netty代码基本使用及调用流程

为什么要使用netty?NIO 的类库和 API 繁杂, 使用麻烦; 开发工作量和难度都非常大,异常处理繁琐 Netty对NIO进行了良好的封装,解决了NIO中繁琐的工作。netty使用场景Dubbo,RocketMQ等分布式系统中,各个节点之间需要远程服务调用。代码服务端public class NettyServer { public static void main(String[] args) throws Exception { // bos

2021-03-30 19:41:02 657

原创 BIO&NIO&AIO

IO模型java共支持3中IO模型:BIO,NIO,AIO。下面来总结一下三种模型。BIOBIO(Blocking IO): 同步阻塞IO。代码public static void main(String[] args) throws Exception { ServerSocket serverSocket = new ServerSocket(9000); System.out.println("BIOServer等待连接。。"); //阻塞方法

2021-03-29 20:07:40 78

原创 springboot集成RabbitMQ-超级详细步骤

前置工作:1.安装rabbitmq2.登录地址: http://localhost:15672/账号密码: guest/guest3.创建角色4.1 创建virtual Hosts4.2为virtual Hosts赋权5.增加Exchanges(交换机)6.增加Queue(队列)7.Exchange绑定queueSpringboot集成RabbitMQSpringboot集成RabbitMQ,..

2020-07-14 12:18:31 5893 2

原创 RabbitMq是如何发送信息的?

什么是RabbitMQ?RabbitMQ是基于AMQP协议的一个开源的消息代理和队里服务器,他是通过ERLANG来开发的。结构如上图,RabbitMQ结构如下Server:又称为broker,接受客户端连接,RabbitMQ 节点; Connection: 连接,应用程序与brokder建立网络连接; channel:网络通道,几乎所有的操作都是在channel中进行的,是进行消息对象的通道,客户端可以建立 多个通道,每一个channel表示一个会话任务 Virt.

2020-06-11 16:33:32 2995

原创 Redis缓存穿透,失效,雪崩原因及解决方案

本博客对应的代码地址:https://github.com/zhangshilin9527/redisson-study缓存穿透出现原因缓存穿透是指客户端查询一个根本不存在的数据(redis缓存和数据库中都不会存在)。缓存穿透将导致每次查询都穿过我们的缓存层直接到达数据库,对我们的数据库造成极大压力,而缓存层也失去了保护后端数据库的意义。造成其的主要原因如下:代码或者数据出现问题; 恶意攻击;解决方案:布隆过滤器我看网上解决方案有的建议将空对象存到redis,这样虽然可以减轻数据库压

2020-06-09 18:08:32 277

原创 redis分布式锁在项目中的实现二 Redisson的使用,原理及源码解读

Redisson本文章对应的代码地址:https://github.com/zhangshilin9527/redisson-study背景接着上一篇文章《redis分布式锁在项目中的实现一 手动实现redis分布式锁》我们继续说一下redis分布式锁,如果还想继续优化一下上面的Demo3,就需要我们引入一个新的组件Redisson。什么是Redisson?Redisson是最先进,最简单的Redis Java客户端,是基于Redis的对象,集合,锁,同步器和Java上分布式应用程.

2020-06-02 18:11:23 656

原创 redis分布式锁在项目中的实现一 手动实现redis分布式锁

redis分布式锁今天发现之前有人分使用redis实现分布式锁,发现了一些问题,下面用一些用例来解释一下这些问题形成原因及解决办法。Demo1代码 public String redisLockDemo1() { String redisKey = "redis_key_001"; try { //1.获取锁 Boolean getLock = stringRedisTemplate.opsForValu

2020-06-02 17:23:40 367 1

原创 redis集群选举原理--带流程图,一看就懂

redis集群reidis集群简介简图:定义:redis集群是一个由多个主从节点群组成的分布式服务器群,它具有复制、高可用和分片特性。reidis集群选举原理了解redis集群选举原理之前,我们首先要明白一件事情,那就是redis集群各节点之前的通讯协议:gossip协议。gossip协议gossip协议简单来解释下:各节点之间都会保持通讯,当某一个节点挂掉或者新增的时候,与它相邻的节点就会感知到,这时候此节点就是失去链接或者创建链接。ping:每个节点都会频..

2020-05-26 16:33:38 7167 4

原创 Redis集群数据分片原理

redis集群reidis集群简介简图:定义:redis集群是一个由多个主从节点群组成的分布式服务器群,它具有复制、高可用和分片特性。优势:相对于哨兵模式他有以下几点优势减少访问瞬断的几率(集群是由多个主从节点组成的,减少了单个主从节点挂掉而引起访问瞬断的情况) 增加存储内存(可水平扩展,可以扩展到上万个节点,但推荐不要超过1000个节点) 支持高并发(redis是单线程操作,单节点很难支持很高的并发)redis集群数据分片原理Redis集群会将所有的数据花分期16384个

2020-05-26 10:38:08 530

原创 Redis持久化方式介绍、设置及对比

今天来看一下redis持久化的几种方式。RDB快照RDB快照方式是redis默认的持久化方式,这种持久化方式是将内存数据按照一定规则方式存储在“dump.rdb”二进制文件中。当redis重启时会加载“dump.rdb”二进制文件中数据到内存。持久化规则:1.通过配置规则自动持久化如果需要RDB方式持久化数据,就需要在redis.conf配置文件中修改以下图中配置:如上...

2020-04-29 00:34:31 835

原创 redis安装---详细步骤,闭眼操作

公司项目中用到了redis,所以今天自己来学习一下redis,但是学习redis首先要自己搞一套redis环境。软件准备VMware centos学习redis,首先得自己搞一个VMware和centos,这些网上有很多,自己找一下就有啦,实在找不到,跟身边同事同学一问,估计就会有。环境准备安装redis之前一点要安装一下gcc。命令:yum install gcc正...

2020-04-24 23:06:59 243

原创 Spring AOP源码 详解二之 代理对象的调用流程

上一篇写了aop代理对象的创建过程,现在来看一下队里对象是怎么调用的,我们以jdk代理为例。源码org.springframework.aop.framework.JdkDynamicAopProxy#invoke @Override @Nullable public Object invoke(Object proxy, Method method, Object[] args...

2020-04-21 00:28:53 413

原创 spring AOP 源码 详解一

概念:AOPAOP(Aspect Oriented Programming),即面向切面编程。简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。源码@EnableAspectJAutoProxy@EnableAspectJAutoProxyz这个是什么?我们可以注意到,...

2020-04-18 01:25:13 186 2

原创 spring IOC源码 - 单实例bean的循环依赖 源码及过程

现在有两个对象Water和Ice,这两个对象相互引用,代码如下:代码Ice类package com.xiaolinzi.cyclicdepen;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;/** *...

2020-04-14 22:30:33 185

原创 spring IOC源码 - Bean的实例化过程 源码及过程

昨天看了看getBean的源码,今天来写一下Bean的实例化过程源码及流程源码首先来看一下getBean源码: org.springframework.beans.factory.support.AbstractBeanFactory#getBean(java.lang.String, java.lang.Class<T>) @Override public ...

2020-04-13 16:24:08 171

原创 spring IOC源码 - AnnotationConfigApplicationContext 详解一

我们要了解AnnotationConfigApplicationContext首先从其构造方法来入手:从他的构造方法来看,其中主要包括三个方法:1. this(); --构造方法2. this.register(annotatedClasses) 注册配置类3. this.refresh 容器的刷新构造方法:首先看以下构造函数会创建哪些重要组件,我们看一下他...

2020-04-12 01:04:58 269

原创 JVM类加载器及类加载机制详解

类加载器种类启动类加载器: 负责加载JRE的核心类库,如jre包下的rt.jar、charset.jar等。拓展类加载器: 扩展类加载器: 负责加载jre扩展目录ext中的jar包。 系统类加载器: 用户自定义加载器: 用户自定义加载器: 负责加载用户自定义路径下的类包。 类加载机制全盘负责委托机制: 一个Cla...

2020-02-26 16:05:09 126

转载 百亿级微信红包的高并发资金交易系统设计方案

推荐理由:本文比较详细的介绍了微信红包的高并发资金交易系统的设计方案转自:http://www.infoq.com/cn/articles/2017hongbao-weixin#原文内容:2017年1月28日,正月初一,微信公布了用户在除夕当天收发微信红包的数量——142亿个,而其收发峰值也已达到76万每秒。百亿级别的红包,如何保障并发性能与资金安全?这给微信带来了超级挑战。面对挑战,微信红包在分...

2018-03-16 15:56:32 192

空空如也

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

TA关注的人

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