自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Arthas使用与线上问题排查实战

arthas是阿里巴巴开源的线上诊断工具,可以在不重启项目的情况下修改某一些代码里面的参数,查看方法参数,并且可以监控当前整个项目的情况,例如可对:死锁,cpu飙高,oom等造成问题的代码堆栈进行导出,也可以实时查看某一个方法里面的详细耗时。他的具体实现为字节码插桩,类似动态aop帮你在方法执行前后执行一些操作.

2023-06-30 23:01:31 2275

原创 JVM调优和线上问题

JVM调优可能很多人都没遇到过,真正遇到了不知道如何去分析和解决问题,其实很多时候我们出现这个问题的原因都是最近提交的代码有问题,出现问题的时候主要靠cpu,内存等指标去参考,并且一般只有内存dump才能知道是什么问题。所以下面我总结了我如何排查线上JVM的问题,以及如何去调优,下一章我也会介绍一个大杀器Arthas。

2023-05-31 13:27:42 1568 1

原创 分布式事务解决方案和代码落地

在学习Spring cloud alibaba Seata之前,我们先来了解一下分布式事务的常用解决方案和代码实现,看完出去面试再遇到分布式事务的问题,战无不胜。完成某一个业务功能可能需要横跨多个服务,操作多个数据库,这个时候,我们本地事务就无法保证每个服务对数据库的操作是同时成功或者同时失败,这个时候就需要我们了解分布式事务。1.跨库事务 跨库事务指的是,一个应用某个功能需要操作多个库。2.分库分表通常一个库数据量比较大或者预期未来的数据量比较大,都会进行水平拆分,也就是分库分表。如下

2022-06-15 02:57:13 3457 7

原创 SpringCloud Alibaba(五)Nacos raft协议介绍

前一章,我们了解了当Nacos客户端注册的节点为临时节点时,服务端的一致性协议使用的Distro协议,那么当我们的客户端注册节点为非临时节点的时候,他用的一致性协议是raft协议,下面,我们就来介绍一下raft协议。1.什么是raft协议在分布式系统中,为了消除单点提高系统可用性,通常会使用副本来进行容错,但这会带来另一个问题,即如何保证多个副本之间的一致性?所谓的强一致性(线性一致性)并不是指集群中所有节点在任一时刻的状态必须完全一致,而是指一个目标,即让一个分布式系统看起来只有一个数据副

2022-05-11 00:20:27 2375

原创 算法与数据结构(四) 数组与均摊复杂度

我们知道我们在java中只要数组初始化之后,长度就不能修改,所以我们一般使用ArrayList,他会自动扩容.下面我们来自己实现一个简单可扩容的数组. 1.代码实现 注意点:当我们插入或者删除元素的时候,我们需要判断数组是否满了,或者数组的size容量是否达到容量的一半,如果是则需要进行扩容和缩容 扩容的时候我们需要new一个原本容量两倍的数组,然后把老的数组元素赋值给新数组 缩容的时候,也是new一个容量为原本一半的数组,然后把老的数组元素赋值给新数组 所以我们新增或...

2022-03-09 01:19:08 212

原创 算法与数据结构(三) 插入排序

1.什么是插入排序插入排序法每次只处理当前的那个元素,例如将数组进行遍历,第N轮循环,第N个元素和之前的所有元素进行对比,然后插入到自己合适的位置.例如我有一个有序数组4,6,2,3,4,5;第一轮获取到第一个元素4,他为第一个元素,不需要对比,第二轮获取到6,6和前面的元素4对比,比4大,不需要动.第三轮获取到元素2,他先和6对比,发现需要插入到6前面,然后再和4对比,发现又需要插到4前面,就会变为2,4,6,3,1,5;如此类推.2.插入排序和选择排序的比较 我们发现插..

2022-03-09 00:07:47 322

原创 算法与数据结构(二)选择排序

1.什么是选择排序 我有一个无序数组A,第一次我先把A最小的数字拿出来,放在数组B的第一位,然后第二次,我从数组A剩下元素中获取到最小的数字,放到数组B的第二位,如此类推,每一轮我们都从数组A中获取到剩余元素的最小一个,放到数组B,最后数组B为有序的数组. 假设我有一个数组,6,4,3,1,2,5.我想进行排序,所以我需要遍历这个数组.假设第一轮遍历,我挨个去比较,我获取到最小的数字是1即minIndex=3,我的数字1需要排在第一个数字的位置,即索引0,就用0索引和3索引位置的元素交换...

2022-03-08 22:17:44 380

原创 算法与数据结构(一) 时间复杂度和循环不变量

1.什么是算法Algorithm的本意:解决问题的方法.一系列解决问题的,清晰,可执行的计算机指令2.循环不变量2.1线性查找法 从数组中找到,找到我所需要的元素. public static <E> int search(E[] data, E target){ for(int i = 0; i < data.length; i ++) if(data[i].equals(target)) ..

2022-03-08 00:23:20 6628

原创 SpringCloud Alibaba(四) Nacos服务端本地启动和源码浅析(AP架构),Distro协议介绍,CAP原则介绍

前一章,我们学习了Nacos的客户端,我们知道了客户端会调用服务端的接口,包括注册到注册中心,心跳保活,拉取服务列表.这一章我们来看一下Nacos服务端.1.基础知识1.1CAP原则1.2BASE理论1.3Distro协议...

2022-01-17 23:57:03 5649 5

原创 SpringCloud Alibaba(三) Nacos 客户端源码浅析(AP架构)

前面我们介绍了Nacos的简单使用,此篇,我们将围绕Nacos的客户端来展开,一步步揭开Nacos神秘的面纱,这次我们使用的是Nacos1.4.1版本,尽管现在已经出了2.0版本,他们之间最大的改变是1.X的Http请求,2.X使用的是grpc,但是市面上用得最多的仍然是1.X版本,我们只需要学会他的思想 ,万变不离其宗.Spring Cloud版本为Hoxton.SR8,Spring Cloud Alibaba版本为2.2.5.RELEASE.1.Nacos客户端(我们先基于Nacos服务...

2022-01-08 19:08:44 2495

原创 SpringCloud Alibaba(一) Nacos注册中心快速入门

1.基本概念1.1 什么是Spring Cloud Spring Cloud是分布式微服务架构的一站式解决方案,是多种微服务架构落地技术的集合体,俗称微服务全家桶。 Spring Cloud为开发人员提供了快速构建分布式系统中的一些常见模式的工具(例如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态).1.2 什么是Nacos Spring Cloud Alibaba的一个服务注册与发现的组件,用来代替不再...

2021-12-29 23:13:42 875 1

原创 SpringBoot自动配置原理快速入门

1. 基础介绍1.1 什么是Spring? 我们可以理解为一个容器,一个Map,这个Map里面有我们所有配置的Bean,这样我们就不用每次new Bean,而是由Spring帮我们实例化.1.2 什么是SpringBoot 基于Spring的脚手架框架,我们以前使用Spring的时候,无论整合MyBatis,Redis,全部需要自己实例化并且配置,并且配置许多的XML,但是有了SpringBoot之后,我们只需要引入对应的依赖,配置文件配置好,他就自动帮我们实例化了对应的B...

2021-12-17 02:23:09 504

原创 Netty(八) Netty心跳检测机制

1.什么是长链接和短链接 在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。 而从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码: Connection:kee...

2021-12-15 11:26:16 687

原创 Netty(七) Netty编解码与TCP粘包,拆包

在我们了解了netty的基本组件之后,我们来了解netty一下使用netty带来的问题以及如何解决.1.Netty编解码1.1 Netty涉及到编解码的组件有Channel、ChannelHandler、ChannelPipe,我们再来复习一下一个 Channel 包含了一个 ChannelPipeline,而 ChannelPipeline 中又维护了一个由 ChannelHandlerContext 组成的双向链表,并且每个 ChannelHandlerContext...

2021-12-12 03:05:09 664

原创 Netty(六) 初探Netty与Netty线程模型

1.为什么我们使用NettyNIO 的类库和 API 繁杂, 使用麻烦: 需要熟练掌握Selector、 ServerSocketChannel、 SocketChannel、 ByteBuffer等。开发工作量和难度都非常大: 例如客户端面临断线重连、 网络闪断、心跳处理、半包读写、 网络拥塞和异常流的处理等等。Netty 对 JDK 自带的 NIO 的 API 进行了良好的封装,解决了上述问题。且Netty拥有高性能、 吞吐量更高,延迟更低,减少资源消耗,最小化不必要的内存复制等优点。..

2021-12-06 22:55:56 971

原创 Netty(五) Reactor模型与事件驱动

前几章我们了解了nio以及epoll,在我们了解netty之前,我们还需要了解什么是Reactor编程模型,netty则是这个模型的实现. 1.事件驱动 在很久以前我们使用JWT的时候,我首先需要把点击或者滚动事件注册在按钮上,然后当我鼠标点击或者滚动的时候会触发事件,会告诉监听者,这个时候我的监听者就会进行一系列的逻辑操作.2.观察者设计模式 观察者设计模式其实就是事件驱动,两者其实本质上可以认为是一致的. 简单来说就是我有一个Subject主题...

2021-12-05 02:49:39 830

原创 Netty(四)select,poll,epoll区别

经过上一章我们可以发现jdk1.8中他对selector的操作实际上调用了epoll的三个函数,分别是,epoll_create,epoll_ctl,epoll_wait.这就说明了我们我们java底层使用了epoll的多路复用机制.而在jdk1.4版本之前IO多路复用的实现还有select和poll.Linux内核事件机制 在Linux内核中存在着等待队列的数据结构,该数据结构是基于双端链表实现,Linux内核通过将阻塞的进程任务添加到等待队列中,而进程任务被唤醒则是在队...

2021-11-25 01:35:11 1833

原创 Netty(三) 浅析Nio源码

前面我们介绍了BIO,NIO还有AIO,这一篇我们来简单看一下Nio的底层是怎么实现的.要是不想看这一篇可以直接看结论:Nio底层实际调用的epoll的三个函数,分别是epoll_create(创建epoll对象),epoll_ctl(把channel关联到epoll对象),epoll_wait(等待事件就绪),下一篇我们降介绍select,poll和epoll的区别.1.前置条件:看NIO的源码,必须下载openJdk源码,因为windos上面的实现和linux上面的实现不一样,都是调用...

2021-11-24 22:25:36 839

原创 Netty(一) 网络基础概念与5种IO模型

学习netty之前 我们首先需要知道一些基础概念.一.基础概念1.什么是文件Linux下面万物皆文件,linux将文件作为一切可用资源的使用接口.“一切资源”包括内存、磁盘、其他各种设备、进程间的通信,还有网络通信。这是一种简化的思想,把一切资源都简化为文件展示出来,将这些对资源的操作简化为对文件的操作。2.Socket在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据.

2021-11-23 23:35:34 540

原创 Netty(二):一文看懂Bio,Nio,Aio

基础概念基础概念不了解的同学可以去看上一章,非常重要.BIO(Blocking IO)同步阻塞模型,一个客户端连接对应一个处理线程 .在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个ServerSocket,然后在客户端启动Socket来对服务端进行通信.服务端接受到请求后,要指派或新建一个线程去处理客户端的IO请求,直到收到断开连接的指令。应用场景:BIO 方式适用于连接数目比较小且固定的架构, 这种方式对服务器资源要求比较高, 但程序简...

2021-09-14 16:33:57 302

原创 一.redis简介,优缺点

1.什么是Redis一个基于内存K,V的数据库,QPS官方数据压测可达数十万QPS,非常适合读多写少的场景.2.为什么要用redis,以及技术选型,可以帮我们解决什么问题优点:1:性能高,单线程非常适合读多写少的场景,可以减轻数据库压力,数据库并不可以随意横向拓展,并且大多数场景,性能瓶颈都在我们数据库.(这里单线程指的是执行命令的客户端单线程,实际上redis内部会有许多子进程去做持久化,删除key等事情)为什么性能高1.单线程,避免了频繁上下文切换,正因为 Redis 是单线程,所以要小心

2021-08-27 21:11:22 1344

空空如也

空空如也

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

TA关注的人

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