自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Pinpoint】安装

文章目录一. 下载1. 版本(2.3.3)2. [下载地址](https://github.com/pinpoint-apm/pinpoint/releases/tag/v2.3.3)3. 下载内容4. [hbase](http://archive.apache.org/dist/hbase/1.2.6/)二. 安装1. 安装JDK82. 安装hbase1.2.61. 解压文件2. 修改sh文件3. 修改hbase-site.xml4. 启动hbase3. 启动 pinpoint-collector4. 启

2022-03-08 07:54:15 1057 2

原创 【MySQL】count统计哪种更快

文章目录一. MySQL 的逻辑架构图二. 对比各种count方法(以Innodb为例)1.count(*)2. count(1)3.count(主键)4. count(字段)三. 结论1. 【不取值】可以理解为:返回了一行,但是只有0个字段2. count统计不一定会走主键索引,而是根据查询条件选择最小的索引树3. 按照效率排序,==count(字段) < count(主键 id) < count(1) ≈ count(*)==,所以尽量使用 count(*)一. MySQL 的逻辑架构图

2022-01-10 19:40:19 806

原创 git长时间未清理无法拉取代码( git Auto packing the repository in background for optimum performance)

解决方法:1.输入命令:git fsck --lost-found,可以看到好多“dangling commit”2.清空他们:git gc --prune=now

2022-01-05 11:40:46 380

原创 【Redis】单线程理解及可能影响性能的操作

文章目录一. Redis的单线程二. 可能影响单线程性能的操作1. bigKey操作2. 复杂命令3. 大量key集中过期4. 淘汰策略5. 主从全量同步生成RDB6. AOF刷盘开启always机制三. 使用规范一. Redis的单线程说明:Redis单线程主要是指【网络IO】和【键值对读写】操作是由一个线程来完成的原因:避免多线程的并发控制问题及线程间的上下文切换QPS:10w级别QPS处理能力,因为大部分操作都在内存上,且采用了高效的数据结构基于多路复用的Redis高性能IO模型

2021-12-28 12:12:05 619

原创 【RocketMQ】重试

文章目录一. 消息发送重试二. 消息消费重试三. 重试队列一. 消息发送重试生产者在发送消息时,同步消息失败会重投,异步消息有重试,oneway没有任何保证。消息重投保证消息尽可能发送成功、不丢失,但可能会造成消息重复发送。消息重复发送在一般情况下不会发生,当出现消息量大、网络抖动,就会大概率出现。另外,生产者主动重发、consumer负载变化也会导致重复消息。如下方法可以设置消息重试策略:retryTimesWhenSendFailed: 同步发送失败重投次数,默认为2,因此生产者最多会尝试发送r

2021-11-29 18:05:08 1423

原创 【Java】finally用法

文章目录一.概述二. finally会执行的情况1.有catch(无异常)3.有catch(try异常)4.有catch(catch异常)5.有catch(try/catch都异常)(会抛出异常)6. 没有catch(无异常)7. 没有catch(try异常)(会抛出异常)8. 有返回值(try)(程序返回"try return")9. 有返回值(catch)(程序返回"catch return")三. finally不会执行的情况1. 调用 System.exit 函数2. 调用 halt 函数四. 常见

2021-11-05 12:07:52 1228 1

原创 【Redis】数据结构及应用

文章目录一. 说明二. 数据结构1. String2. List3. Hash4. Set1. 说明2. 应用(扑克牌)3. 集合操作5. Sorted Set1. 说明2. 应用(排行版)6. Bitmap1. 说明2. 应用(打卡/签到)7. Stream一. 说明二. 数据结构1. String二进制安全(能保存任意格式的数据)2. List链表结构快速的列头、列尾操作,时间复杂度O(1)列表查询时间复杂度O(N),考虑用Sorted List替代应用:朋友圈点赞列表lpu

2021-10-22 14:46:53 121

原创 【MySQL】常用语句

文章目录一. 修改自增长字段值二. 事务1. 隔离级别三. 数据统计1. 数据库表信息2. 列信息3. 索引信息4. 事务一. 修改自增长字段值自增长起始值修改只能比原来更大,不能更小alter table testid auto_increment=100;二. 事务1. 隔离级别查看事务隔离级别:show variables like 'transaction_isolation';默认值:('transaction_isolation', 'REPEATABLE-READ');

2021-10-15 10:36:55 84

原创 【Java】命令

文章目录jar一. 参数类型说明1. 标准参数(-)2. 非标准参数(-X)3. 非Stable参数(-XX)4. 程序参数(--)5. 环境变量(-D)二. 使用示例1. 启动程序2. 设置启动端口jar一. 参数类型说明1. 标准参数(-)所有类型JVM都必须实现这些参数的功能2. 非标准参数(-X)默认jvm实现这些参数的功能,不保证所有类型JVM都实现-Xms512m -Xmx512m3. 非Stable参数(-XX)各个jvm实现会有所不同,将来可能会随时取消,需要慎

2021-10-11 19:46:51 85

原创 【MySQL】选错索引的原因分析

文章目录一. 背景1. MySQL怎样选择索引?2. Candinality3. 采样统计二. 原因1. Explain显示的rows值和表中数据的实际行数相差较大,导致索引选错。2. 为什么二级索引扫描行数少,MySQL却选择了全表扫描?2. 是否排序3. 是否存在临时表三. 解决思路1. explain和预估的行数相差较大,可以通过analyze table 来重新统计索引信息2. 通过【force index】强制指定需要使用的索引,不让优化器进行判断3. 通过改写SQL语句引导MySQL使用指定索引

2021-09-29 12:36:18 503

原创 【MySQL】为什么重复值高的字段不能建索引(比如性别字段等)

结论(以innodb为例)非聚簇索引存储了对主键的引用,如果select字段不在非聚簇索引内,就需要跳到主键索引(上图中从右边的索引树跳到左边的索引树),再获取select字段值如果非聚簇索引值重复率高,那么查询时就会大量出现上图中从右边跳到左边的情况,导致整个流程很慢如果where值重复率高的字段,select用了limit,只查较少数据,也就是跳的次数很少的情况下,还是可以建索引的(后来想想也没必要,limit限制了数量,全表扫描也很快,除非字段值是排序的,必须扫描完前面的所有值).

2021-09-24 10:47:01 2355 2

原创 【RocketMQ】消息积压判断及解决

文章目录一. 定位问题1. Console入口2. 延迟数量(Delay)3. 最后消费时间(LastConsumeTime)二. 分析问题1. 查看rocketmq_client.log日志2. 消费端业务逻辑三. 解决问题1. 消费端解决一. 定位问题1. Console入口主题-->Topic-->Consumer管理-->订阅组2. 延迟数量(Delay)消息积压数量,即当前Topic还剩下多少消息未处理,该值越大,表示积压的消息越多3. 最后消费时间(LastC

2021-09-23 19:59:30 769

原创 【RocketMQ】msgId与offsetMsgId

文章目录一. 概念1. msgId(uniqId)2. offsetMsgId二. 消息发送三. 消息消费4. Dashboard根据ID查询一. 概念1. msgId(uniqId)由 producer客户端 生成,调用方法MessageClientIDSetter.createUniqID()生成全局唯一的Id private static final int LEN; private static final String FIX_STRING; private s

2021-09-14 18:16:44 316

原创 【Java】Cron表达式

文章目录一. 域说明二. 特殊字符说明三. 常用例子四. 注意事项1. 有些表达式能包含范围或列表2. “/”字符用来指定数值的增量3. “?”字符仅被用于每月第几天和星期几两个表达式,表示不指定值4. “L” 字符仅被用于 每月第几天 和 星期几 两个表达式,它是单词“last”的缩写5. 报错:Cron expression must consist of 6 fields五. Java解析Cron表达式一. 域说明cron表达式由6或7个域组成顺序(从左到右)域允许值允许的特殊

2021-09-07 14:26:53 375

原创 【Centos】查询命令

文章目录一. grep1. grep 命令2. 搜索字符串二. find1. 根据文件名查询2. 根据目录查询3. 根据内容查询4. 通配符5. 时间范围三. 端口/进程1. 根据端口获取进程2. 查看开启的端口 | 端口被哪个进程占用4. 根据进程号查进程四. jps1. 常用一. grep1. grep 命令global search regular expression(RE) and print out the linegrep --h 命令说明grep -i 不区分大小写g

2021-08-26 12:15:10 649

原创 【RocketMQ】读写队列

文章目录一. 读写队列,是在路由时使用二. 在物理文件层面,只有写队列才会创建文件三. 只有readQueueNums>=writeQueueNums,程序才能正常进行四. 一个问题五. Perm(Topic的读写模式)一. 读写队列,是在路由时使用在消息发送时,根据写队列个数返回路由信息,而消息消费时按照读队列个数返回路由信息。二. 在物理文件层面,只有写队列才会创建文件举个例子:写队列个数是8,设置的读队列个数是4. 这个时候,会创建8个文件夹,代表0 1 2 3 4 5 6 7,但

2021-08-24 14:36:28 521

原创 【Centos】命令自定义

文章目录一. ll1. 步骤2. 选项3. 显示容量单位4. 按时间排序5. 显示所有文件(包括隐藏文件)一. ll1. 步骤vim /root/.bashrcalias ll=‘ls -lh’source /root/.bashrc2. 选项-l 显示详细信息-a 显示所有文件,包括隐藏文件-i 显示inode-t 依时间排序,而不是用档名-r 将排序结果反向输出,例如:原本档名由小到大,反向则为由大到小3. 显示容量单位ls -lh4. 按时间排序ls -lh

2021-08-20 10:50:38 426

原创 【Linux】查看硬盘占用情况

一. 获取硬盘容量信息df -h二. 获取目录占用硬盘容量大小max-depth:目录深度/root/ :目录路径–max-depth=1 /root/:获取指定目录下一级文件夹/文件占用硬盘的容量大小du -h --max-depth=1 /root/...

2021-08-17 10:43:19 203

原创 【Java】select for upate 引起的问题

一. 代码说明二. 问题三. 原因分析四. 解决方案一. 代码说明M2方法的预期作用是根据id值(主键)加行锁,整个方法放在事务中执行 M1方法调用M2方法public class C{ public void M1() { this.M2(); } @Transactional public void M2() { String sql="select * from t1 wh...

2021-05-26 12:08:26 388 1

原创 【Redis】缓存穿透、缓存击穿、缓存雪崩产生原因及解决方案

文章目录一. 本文对Redis中[缓存穿透]、[缓存击穿]、[缓存雪崩]三种现象产生原因、解决方法进行说明二. 缓存穿透1. 原因2. 解决方法三. 缓存击穿1. 原因2. 解决方法四. 缓存雪崩1. 原因2. 解决方法五. 公共解决方法1. 限流:检测到接口延时较大或异常较多时,进行限流2. 熔断:检测到接口延时较大或异常较多时,使用降级数据返回或提示用户稍后再试3. 多级缓存:应将流量尽量分流或过滤,比如从网关、CDN、反向代理层等读取缓存直接返回一. 本文对Redis中[缓存穿透]、[缓存击穿]、[

2021-05-20 19:43:42 143

转载 【转】高并发,我把握不住啊!

什么是高并发高并发指的是系统同时处理很多请求。高并发是一个结果导向的东西,例如,常见的高并发场景有:淘宝的双11、春运时的抢票、微博大V的热点新闻等,这些典型场景并不是陡然出世,而是随着业务发展的发展而逐渐出现。像2020年淘宝双11全球狂欢季,订单创建峰值达到了惊人的58.3万笔/秒,4年前的2016年,这个数字大概是四分之一,再往前四年,这个数据不可考,但是肯定就没这么夸张了。高并发的业务场景出现了,随之而来的就是要支持这个高并发业务场景的架构——技术要为业务服务,业务倒逼技术发展。高并发的

2021-05-20 15:36:18 235

原创 【MySQL】truncate抛异常System Lock

文章目录一. 背景二. 现象三. 分析四. 解决思路五. 结论一. 背景表数据大概几十万,不到五十万每隔10几分钟使用truncate清空数据,然后再写入等量数据数据库主从结构数据库版本5.7二. 现象执行truncate时从库偶发抛异常【System Lock】,非必现。占用线程资源,导致后续SQL语句全部阻塞从库不可用,进而导致路由到该从库的请求全部阻塞,从而导致应用雪崩三. 分析网上搜了很多资料,都说是truncate在MySQL5.7及以下版本的bug,drop命令可以

2021-05-06 14:24:01 346

转载 【MySQL】update A set num=num+ ? where id=?是否存在并发的问题

在我们的实际开发中,往往会遇到更新数据字段的问题。如投票时,如果多人同时投票,是否存在在取数据并更新的时候,原始值是相同的,而后续的update操作会造成错误的数据? 比如,表名A,字段名为 number,如下的SQL语句: 语句1:update A set number=number+ 5 where id=1; 语句2:update A set number=number+ 7 where id=1;

2021-04-26 17:00:17 475

原创 【MySQL】长事务

文章目录一. 长事务原因1. set autocommit=02. 事务方法业务复杂,执行时间长二. 长事务危害1. 占用大量的存储空间2. 占用锁资源,甚至拖垮整个库三. 查看长事务四. 解决长事务1. 程序端2. 数据库端五. 参考资料1. mysql 之general_log日志开启详解以及清空一. 长事务原因1. set autocommit=0这个命令会关闭当前线程的事务自动提交功能意味着如果只执行一个 select 语句,这个事务就启动了,而且并不会自动提交。这个事务持续存

2021-04-23 17:20:12 345

转载 【MySQL】【转】关于mysql的参数autocommit

背景知识:mysql事务支持的引擎是InnoDB默认情况下autocommit的值为11.首先准备一张innodb引擎的测试表:CREATE TABLE `test` ( `id` int(11) NOT NULL) ENGINE=InnoDB;INSERT INTO `test` VALUES ('1');INSERT INTO `test` VALUES ('3');INSERT INTO `test` VALUES ('5');2.执行如下命令可以发现mysql的aut.

2021-04-22 16:56:05 227

转载 【MySQL】【转】MySQL Explain详解

在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通过explain命令来查看。所以我们深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时哪种策略预计会被优化器采用。-- 实际SQL,查找用户名为Jefabc的员工select * from emp

2021-04-20 17:42:28 80

转载 【MySQL】【转】一个诡异的MySQL查询超时问题,居然隐藏着存在了两年的BUG

原文地址:https://www.cnblogs.com/coderw/p/14676343.html这一周线上碰到一个诡异的BUG。线上有个定时任务,这个任务需要查询一个表几天范围内的一些数据做一些处理,每隔十分钟执行一次,直至成功。通过日志发现,从凌晨5:26分开始到5:56任务执行了三次,三次都因为SQL查询超时而执行失败,而诡异的是,任务到凌晨6:00多就执行成功了。每天都是凌晨五点多失败,凌晨六点执行成功。点开异常日志一看是这样的:总结来说就是MySQL查询超.

2021-04-20 14:20:56 112

原创 【Java】调用代理对象的原始方法

文章目录一. 说明二. 原始类三. 系统启动时生成代理对象四. 代理工具类五. 测试一. 说明Java Spring中使用AOP可以很方便的生成代理对象,从而添加自定义逻辑。本文介绍如何调用代理对象的原始方法,而非代理后的方法二. 原始类@Componentpublic class AopTestClass { public void method1() { System.out.println("method1 execute"); }}三

2021-03-23 11:48:26 741

转载 【转】《吃透MQ系列》核心基础全在这里了

这是《吃透XXX》技术系列的开篇,这个系列的思路是:先找到每个技术栈最本质的东西,然后以此为出发点,逐渐延伸出其他核心知识。所以,整个系列侧重于思考力的训练,不仅仅是讲清楚 What,而是更关注 Why 和 How,以帮助大家构建出牢固的知识体系。回到正文,这是《吃透 MQ》的第一篇文章。本文主要讲解 MQ 的通用知识,让大家先弄明白:如果让你来设计一个 MQ,该如何下手?需要考虑哪些问题?又有哪些技术挑战?有了这个基础后,我相信后面几篇文章再讲 Kafka 和 RocketMQ 这两种具体的消息中

2021-03-18 11:32:44 99

原创 【Java】CGLIB动态代理

文章目录一. CGLIB动态代理示例1. 被代理对象2. 代理工具类3. 使用代理类5. 执行结果二. CGLIB动态代理说明1. 获取代理对象:CGProxy.getProxyObject2. 调用代理方法:CGProxy.intercept3. 原理4. 参考资料一. CGLIB动态代理示例1. 被代理对象public class UserServiceImpl { public void addUser(String name) { System.out.println

2021-03-17 12:14:55 95

原创 【Java】JDK动态代理

文章目录一. JDK动态代理示例1. 接口2. 被代理对象3. 代理工具类4. 使用代理类5. 执行结果二. JDK动态代理说明1. 获取代理对象:ProxyUtil.getProxy2. 调用代理方法:ProxyUtil.invoke一. JDK动态代理示例1. 接口public interface UserService { void addUser(String name); String getUser(String name);}2. 被代理对象public cla

2021-03-16 19:54:29 84

原创 【Java】使用动态代理输出RedisTemplate命令执行日志

文章目录一. 说明二. 源码一. 说明功能:在 redisTemplate 命令执行前后 输出日志原理作用是输出 RedisTemplate 命令执行日志。包括:命令名称、参数、返回值等原理是使用动态代理拦截类 redisConnectionFactory 的 getConnection() 方法,监控Redis命令目前主要输出 get/set/pExpire/pSetEx 等命令日志,可根据需要扩展示例单元测试@Testpublic void RedisTe

2021-03-11 12:10:24 886 3

原创 【MongoDB】使用MongoTemplate实现runCommand命令

文章目录一. 背景二. 使用一. 背景MongoTemplate提供了很多内置命令用于增删改查。比如:executeQuery/find/findAndModify等同时还提供了执行动态命令的语句executeCommand(对应MongoDB命令:runCommand)二. 使用MongoDB原生命令:runCommanddb.runCommand({"find":"tablename","filter":{"fieldName":{$exists:true}},"limit" :

2021-03-08 12:12:47 2889

原创 【架构】同步异步阻塞非阻塞概念

文章目录一. 阻塞/非阻塞二. 同步/异步三. 组合四. 示例五. 参考资料一. 阻塞/非阻塞阻塞非阻塞说的是线程的状态阻塞: 线程调用IO接口后,一直等待,不能做其它事非阻塞:线程调用IO接口时,可以做其它事,不用一直等待二. 同步/异步同步和异步说的是消息的通知机制同步:线程调用IO接口后,不停询问IO接口是否完成异步:线程调用IO接口后,不用一直询问,由IO接口告知结果三. 组合同步阻塞: 调用IO接口后,线程一直等待并不停询问IO接口调用结果同步非阻塞:

2021-03-03 12:13:18 122

原创 【Java】Mybatis-Plus解决多数据源无法输出SQL语句的问题

文章目录一. Mybatis-Plus配置输出SQL语句1. 原理2. 步骤二. 多数据源无法输出SQL语句解决方法三. 输出SQL部分源码一. Mybatis-Plus配置输出SQL语句1. 原理使用PerformanceInterceptor拦截器的intercept()方法输出SQL语句2. 步骤2.1 配置文件新增mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

2021-03-02 12:17:24 962

原创 【Arthas】单元测试使用Arthas输出动态代理增强类

文章目录1. 单元测试方法新增代码,阻止程序终止2. 启动Arthas3. 查询指定类的增强类4. 代码输出到文件中5. 增强类源码1. 单元测试方法新增代码,阻止程序终止System.in.read();2. 启动Arthas选择项目 com.intellij.rt.junit.JUnitStarter 代表是单元测试进程3. 查询指定类的增强类sc *ControllerName*输出com.controller.ControllerNamecom.controller.Con

2021-02-25 12:06:43 550

原创 【Dubbo】Monitor层实现简述

文章目录一. 概述1. 版本:2.7.82. 说明二. MonitorFactory工厂实现1. 结构图2. MonitorFactory接口3. AbstractMonitorFactory抽象类4. DubboMonitorFactory实现类三. Monitor实现1. 结构图2. MonitorService接口3. Monitor接口4. DubboMonitor实现类四. 过滤器统计监控数据1. 结构图2. Filter接口3. MonitorFilter实现类一. 概述1. 版本:2.7.

2021-02-20 17:00:07 479

原创 【Java】日志输出自定义变量值

背景Java打印日志时,输出自定义变量值(以logback为例)步骤1. 删除引入的基础配置类(如无则忽略)<include resource="org/springframework/boot/logging/logback/base.xml"/>2. 添加配置信息traceId为自定义变量名,%X{traceId}必须都包含<appender name="Console" class="ch.qos.logback.core.ConsoleAppe.

2021-02-07 10:51:40 1113 1

原创 【Dubbo】2.7.x新增内容说明

文章目录Dubbo版本2.7.x新增内容说明1. 包名从 com.alibaba.dubbo 改为 org.apache.dubbo2. 使用JDK83. 异步编程4. 注册中心5. 新增路由规则:标签路由6. 使用YAML作为配置语言7. 元数据中心8. 配置中心9. Zookeeper10. HTTP/211. 服务鉴权认证12. 协议Dubbo版本2.7.x新增内容说明1. 包名从 com.alibaba.dubbo 改为 org.apache.dubbo2. 使用JDK83. 异步编程使

2021-02-06 14:43:15 155

原创 【Dubbo】架构各层及实现

Dubbo版本:2.7.8

2021-02-05 16:32:39 116 1

空空如也

空空如也

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

TA关注的人

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