自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 rcoketMq事务消息

这篇讲解一下rocketMq的事务消息的原理

2023-04-19 13:49:26 274

原创 RocketMq-productor

本文讲解rocketMq的productor部分

2023-04-03 17:28:01 131

原创 RocketMq-broker

broker主要作用就是存储消息。所以重点就放在它对于消息的处理上面

2023-03-25 18:39:13 615

原创 RocketMQ-nameserv

nameserv作为rocketMQ的注册中心,保存着borker的路由信息。

2023-03-08 16:26:37 463

原创 RocketMQ系列开篇

rocketMq开篇

2023-03-08 15:55:34 302

原创 限流算法详解

限流是我们经常会碰到的东西,顾名思义就是限制流量。它能保证我们的系统不会被突然的流量打爆,保证系统的稳定运行。像我们生活中,地铁就会有很多护栏,弯弯绕绕的,这个就是一种限流。像我们抢茅台,肯定大部分流量也是会被限流的,你的请求可能根本没进到下单等环节就被拦截了。

2023-03-08 15:27:39 321

原创 nett学习

netty封装nio

2023-02-20 10:54:48 320

原创 git修改默认编辑器为notepad++

git修改默认编辑器为notepad++

2022-10-08 16:51:14 594

原创 Java 问题定位工具

JDK 自带了很多命令行甚至是图形界面工具,帮助我们查看 JVM 的一些信息。具体可以看jdk的bin目录有很多工具。

2022-06-20 09:34:33 444

原创 RocketMQ-顺序消费原理

顺序消费生产者指定messageQueue消费者启动的时候进行锁定ConsumeMessageOrderlyService#lockMQPeriodically有个定时任务,会去锁定messageQueue。相当于用broker做分布式锁。锁状态存在ProcessQueue中。然后在DefaultMQPushConsumerImpl#pullMessage拉取消息的时候,会判断ProcessQueue是否被自己锁定,只有被自己加锁了,才可以去拉取消息。...

2022-05-15 10:17:54 187

原创 RocketMQ-consumer

consumerconsumer要做的事,就是消费消息。主要就是3件事consumer首先要知道自己要去哪个队列里面消费消息而且还要保存消费进度offset,如果启动之后,才可以知道要去拿哪些数据。负载均衡。同一个group里面的consumer,有一个RebalanceImpl去负责消费端的。如果消费者上线、下线,要通过它来协调。对于保留消费进度offset,consumer中有个offsetStore。如果是广播模式,offset是保留在本地的,因为每一个consumer的进度可能不一样

2022-02-21 14:45:00 284

原创 RocketMQ-producer

首先调用start方法。完成各个类的初始化,启动多个定时任务,其中一个定时任务是updateTopicRouteInfoFromNameServer,这个方法里面和nameService建立长连接,同时维护了topicRouteTable和brokerAddrTable等缓存。topicRouteTable里面维护了这个topic包括有哪些queue和broker。这样producer才可以知道要发往哪里。recketMq的长连接主要实现方式:通过netty进行通信,会获取channel,然后会把cha

2022-02-20 21:26:52 1063

原创 js加减法

减法function subtr(arg1, arg2) { var r1, r2, m, n; try { r1 = arg1.toString().split(".")[1].length } catch (e) { r1 = 0 } try { r2 = arg2.toString().split(".")[1].length } catch (e) { r2 = 0 } m = Math.pow(10, Math.max(r1, r2)); n = (r1

2021-09-11 15:32:10 603

原创 java类加载顺序,一题全搞懂

来直接做题,看看会打印什么。大家自己把答案写下来,注意看清楚上下文,有些变量在最后面。类结构参考java编程思想5.7.2 静态数据的初始化,比原来的结构复杂一点。父类Parentpublic class Parent { static Bowl bow5 = new Bowl(5); Bowl bow6 = new Bowl(6); static { System.out.println("执行Parent静态代码块"); } {

2020-09-04 13:47:18 151

原创 ConcurrentHashMap详解

jdk1.7版本和其他并发集合的区别待完善数据结构 /** * The segments, each of which is a specialized hash table. */ final Segment<K,V>[] segments;可以看到主要就是一个Segment数组,注释也写了,每个都是一个特殊的hash table。来看一下Segment是什么东西。static final class Segment<K,V> ex

2020-06-08 10:02:21 254

原创 HashMap在jdk1.7和1.8中的区别

HashMap在jdk1.7和1.8中的区别1.数据结构Java 7及以前是数组+链表、Java 8及以后是数组+链表+红黑树。1.8中,当链表长度到达8的时候,会转化成红黑树。2.插入链表的方式1.7是头插法,1.8是尾插法3.扩容时,调整数据的方式1.7其实就是根据hash值重新计算索引位置,然后将数据重新放到应该在的位置。而1.8优化了一下,扩容之后,每个数据要么在原来的位置,要么就在j + oldCap的位置,j是原来的下标位置,oldcap就是原来数组的大小。至于这个具体原因可以看

2020-05-29 16:12:43 285

原创 HashMap jdk1.7和1.8详解

HashMap详解1.7的HashMap首先来看一下它的数据结构transient Entry<K,V>[] table = (Entry<K,V>[]) EMPTY_TABLE;其实就是一个Entry数组Entry的属性是这样的 final K key; V value; Entry<K,V> next; int hash; // 构造函数 Entry(int h, K k,

2020-05-29 16:00:43 267

原创 设计一个简单的RPC

设计一个简单的RPCRPC三大要点RPC全称是Remote Procedure Call,远程过程调用。也就是调用其他机器的方法。我们可以自己想一下要怎么实现去调用其他机器的方法。首先我们需要知道去哪里调用我们需要的服务。因为服务端可能提供了很多个远程服务,也有可能多个进程部署在一个机器,为了防止端口冲突,往往使用随机端口,那我们要怎么知道访问哪个端口呢?这就涉及到服务发现的问题。然后是如何传递参数呢?如果有两个参数,要先传第一个还是第二个?TCP一端发送出去的数据,另外一端不能全部读取,怎么

2020-05-27 14:47:13 225

原创 idea开发vue项目通过@跳转

idea开发vue项目通过@跳转vue引入组件通常是这样子的 import aaa from '@/aaa/ggg/aaa'但是使用idea开发,按住ctrl点击路径无法跳转可以这样子,建一个js文件,我把它放在根目录下面,名字随便起,我这个文件叫做alais.config.js,文件内容是这样的:/* 此文件未使用,只是为了让idea可以识别实际位置 */const path ...

2020-02-25 15:48:42 2522

原创 mysql explain详解

explian可以查看sql的执行效率,下面是各个字段的含义。idselect查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序。三种情况:id相同。执行顺序从上至下。id不相同。如果是子查询,id的序列会递增,id的值越大优先级越高,越先被执行。id相同又不相同。id如果相同,可以认为是一组,从上往下顺序执行;在所在组中,id值越大,优先级越高,越先执行。...

2020-01-22 16:44:49 2873

原创 mybatis-generator生成器的使用

mybatis-generator生成器的使用记录一下怎么使用这个插件,首先声明我使用的是springboot。1.pom文件引入插件<plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>sprin...

2020-01-19 16:43:16 301

原创 spring-framework源码阅读——bean的加载

spring-framework源码阅读——bean的加载先来看看我们的测试代码 ClassPathResource classPathResource = new ClassPathResource("beanFactoryTest.xml"); DefaultListableBeanFactory factory = new DefaultListableBeanFactory();...

2019-03-12 19:55:52 219

原创 spring-framework源码——配置文件的读取

spring-framework源码——配置文件的读取我们的配置文件很简单,只定义了一个简单java bean&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/...

2019-03-09 16:59:41 403

原创 intellij idea 搭建spring源码环境

intellij idea 搭建spring源码环境我原本自己安装了gradle 5.X版本的,后面导入idea出错了。spring源码此时好像是只支持4.x版本的。所以后面我就用idea的gradle了,没用自己本地的。idea从git克隆源码先到github上的spring源码上复制https地址https://github.com/spring-projects/spring-fra...

2019-03-03 19:24:22 1062

原创 重新安装mysql服务

重新安装mysql服务前言我在修改了my.ini配置文件之后,想着重启mysql服务生效,不知道脑袋怎么就抽了,直接去任务管理器里面把服务停止了,后面就启动不了。然后在找问题的过程中,发现自己安装了两个mysql,用的是以前的mysql,但是环境变量用的是新的mysql,所以可能导致用了各种方法都无法重启。只能重新安装。彻底卸载mysql服务1.先把mysql服务关了,在mysql安装目录...

2019-01-09 22:44:47 10119

原创 mysql命令报错this is incompatible with sql_mode=only_full_group_by

mysql命令报错this is incompatible with sql_mode=only_full_group_byonly_full_group_by这个sql_mode=only_full_group_by是什么东西呢?运行下面两个命令中的一个select @@sql_modeselect @@global.sql_mode #全局你可以看到自己的sql_mode,值为...

2019-01-09 22:39:05 174

原创 springboot整合mybatis配置

springboot整合mybatis配置本文只说明在springboot中配置mybatis,不涉及springboot的创建。首先pom依赖&lt;dependency&gt; &lt;groupId&gt;mysql&lt;/groupId&gt; &lt;artifactId&gt;mysql-connector-java&lt;/artifactId&gt; &lt;scop...

2019-01-03 21:11:56 44239 10

原创 Visual Studio Code关于写html的快捷键

Visual Studio Code关于写html的快捷键这几天写html,找别人学了一些有趣的快捷键,作用不一定很大,但还是记录一下。多个平级标签输入 div*5 会有提示,按回车,出现下面的代码&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&a

2018-11-17 10:06:26 9527 2

原创 github新建仓库

github新建仓库这篇文章的前提是你已经有了github账号,并且在本地装了git。在github上创建仓库首先在自己的github中新建一个仓库,填上基本的信息,就可以看到自己的仓库了。下载到本地(初始化本地目录)然后在自己本地要放文件的目录下面进入git,输入命令 git clone https://github.com/username/domos.git后面的http路径...

2018-11-06 18:44:31 135

原创 webpack的基本使用

webpack的基本使用这篇文章主要讲如何把一个简单的页面用webpack打包,前提是你已经安装好了node.js。我这里用了个时钟页面,里面只用到了css和js,主要目录是这样的。在最后给出资源文件。Clock.htmlindex.jsstyle.css下面来看看如何使用webpack,首先在自己文件所在的目录执行下面命令,执行完后,目录底下增加了一个package.json文件。...

2018-11-06 18:39:47 110

原创 java设计模式-模板模式

java设计模式-模板模式在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。模板模式很好理解,就是给你设计好模板,给你设定好了大体的方向,具体地说就是模板定义好了要执行哪些方法。然后子类继承模板类,具体实现模板里面定义好的那些方法。这样继承模板类的...

2018-10-09 22:48:12 135

原创 TED《Linux操作系统之父》里提到的代码优化

TED《Linux操作系统之父》里提到的代码优化今天老师放了这个TED的视频给我们看,里面提到了两个代码的比较,课上的时候没办法细看代码,只看到Linus Torvalds说前一段代码需要用到if判断是否是第一个节点,还是中间节点,而后一个代码就不需要。当时很好奇具体代码是什么样的,所以回来找到了这个视频,后面发现后一个代码是用上了指针,所以可以不需要判断,统一处理。代码如下,感兴趣的可以看看。...

2018-10-09 21:07:21 648

原创 java设计模式-装饰器模式

java设计模式-装饰器模式装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。装饰其实很好理解,就像给人穿衣服,你可以给这个人穿衬衫,也可以给他穿夹克,还可以给他穿裙子。这个“人”就是我们要包装的类,衬衫,夹克,裙子就是装饰类型。先来看一下一张很经典的uml类图,图片来自装饰模式...

2018-10-09 20:45:27 245

原创 java设计模式-适配器模式

java设计模式-适配器模式适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。适配器我们可以第一个想到的就是电源适配器,将不相容的接口通过适配器连起来。先来看一下类图,图片来自适配器模式-百度百科举个例子,适配器就像读卡器,原本存储卡没办法直接让电脑读取,所以要经过一个读卡器。存储卡和电脑是本来就存在...

2018-10-09 20:44:37 144

原创 java设计模式-观察者模式

java设计模式-观察者模式当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。观察者模式又名:发布-订阅(Publish/Subscribe)模式 也是很好理解,首先要记得观察者是表示一对多关系的。可以理解成有很多人在观察着你的一举一动,他们要听你的指令行事,你有新的动作时他们就要做出改...

2018-10-09 20:38:35 122

原创 java设计模式-代理模式.md

java设计模式-代理模式在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。静态代理静态代理其实挺简单的,先说一下结构,首先有一个接口,目标对象和代理对象都实现了这个接口。这样也保证了两个类都会有同名的方法(这里姑且叫做代理方法好了)。既然是代理,那么代理对象首先要和目标对象有联系,所以代理类里面引用了目标对象。当我们要调用目标对象的代理...

2018-10-06 10:12:28 111

原创 java设计模式-原型模式.md

java设计模式-原型模式原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式。在java中,主要就是靠clone来复制对象,所以原型模式还是要先学习一下Cloneable这个接口。浅克隆和深克隆java中用基础类型和引用类型。基础类型就是String,Integer这些类型,引用类型就是对象,数组这些。那简历来说,简历里面...

2018-10-02 20:39:18 236

原创 工厂模式.md

工厂模式工厂模式一般分三类,简单工厂模式,工厂方法模式,抽象工厂模式。下面分别来看一下简单工厂模式工厂模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。所以说白了,工厂就是用来创建各种对象的,简单工厂就是你跟工厂说你想要什么东西,工厂就把你要的东西给你。这里的东西其实就是对象。工厂...

2018-10-02 20:38:32 368

原创 java单例模式.md

java单例模式单例模式(Singleton Pattern)算是一个最简单的设计模式了,单例模式属于创建型模式,提供了一种创建对象的最佳方式。单例,顾名思义就是确保只有一个实例被创建。下面来说说我理解的一些思路。通常我们创建实例对象都是通过new来创建,但是每次调用new都会创建不同的对象。这在单例模式肯定是不允许的,所以第一步,我们要将无参的构造函数私有化,对外断了new的这条路,但是内部...

2018-09-23 14:37:53 128

原创 谈谈写博客的看法.md

谈谈写博客的看法写这篇主要是我们老师的一番话让我很赞同,所以我想先说说我们的老师。当然也可以直接看正文。这学期我们有门课是一位外聘的老师给我们上的,这位老师是属于之前都是在公司上班的,然后现在来给我们上课。这种外聘的老师和学院的老师真的是很不一样,他一直给我们吐槽的是学院的老师都不想敲代码,一起他给学校的老师上过课,叫他们敲点代码都没人愿意,然后说到他去听课的时候那些老师在课上也都不会去敲代码...

2018-09-23 14:36:57 535

空空如也

空空如也

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

TA关注的人

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