自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(116)
  • 资源 (1)
  • 收藏
  • 关注

原创 kubeadm部署k8s-1.32版本集群(1个master,1个worker)

使用最新版的kubeadm部署一个最小版的k8s集群,只有一个master和1个worker,这种部署方式,不满足高可用,仅限于本地学习使用,不可以放到生产上用,先看一下文章的目录。

2025-03-26 22:21:08 1216

原创 微信支付-商家转账到零钱开发

上一篇介绍了微信支付-现金红包的开发,这一章聊聊商家转账到零钱的开发细节。我当时调研功能的时候,先调研的其实是这个产品。我们产品上的场景是:用户答题,答题正确,然后给发红包。我到微信开放社区上搜了一下这种类型的开发案例,官方给的回复是:这种场景,使用转账到零钱这个产品更合适。那我为啥最后用了现金红包呢?是因为业务上的一些原因,不说了。产品方面,如果是我这种类型的场景,或者其他类型的,比如:抽奖之类的,最好也都是用这个商家转账到零钱。

2025-01-22 22:42:33 723 6

原创 微信支付-现金红包开发

微信支付-现金红包

2025-01-22 22:04:57 1131

原创 mysql死锁了,怎么办

把执行时间长的语句放到业务的最后执行,减少事务持有锁的时间,一定程度上可以降低死锁发生的概率。

2024-11-17 10:30:56 1713

原创 讨论一个mysql事务问题

最近在阅读,文章中提到了一种场景,我们下面来分析一下。

2024-11-09 13:50:03 706 1

原创 apache-seata-2.1.0 AT模式使用篇(配置简单)

最近在研究seata的AT模式,先在本地搭建了一个演示demo,看看seata是如何使用的。在网上搜的demo,配置相对来说都比较多。我最终搭建的版本,配置较少,所以写篇文章分享下,希望能帮到对seata感兴趣的小伙伴。先看下文章目录。

2024-11-04 13:04:44 1136

原创 自定义mybatis插件

import org/*** 类 描 述:字段名,下划线转驼峰插件*/ //拦截的类和方法,除了ResultSetHandler.class,还有另外3个也可以拦截的类,可以自己查查用法 @Intercepts(@Signature(type = ResultSetHandler . class , method = "handleResultSets" , args = {//如果是map类型,就对map的key进行转换 if(object instanceof Map) {

2024-08-14 19:58:49 660

原创 rocketMq-5.2.0双主双从搭建

最近在研究rocketmq5.x的运行机制,研究到高可用章节,看到rocketMq采用了主从机制实现高可用,将broker分成了master和slave。为了更好的理解主从源码,我觉着需要先搭建一个主从的集群,先了解主从集群是怎么使用的。下面的过程,我自己写完文章,又按照文档搭建了一遍,如果你的相关目录和我是一致的,跟着文档搭建,基本1个小时内就能搞定,因为只需要你改动一下配置文件中的ip就行。

2024-08-04 17:23:40 1371

原创 mybatis逆向工程报错:Cannot instantiate object of type org.example.generate.MyCommentGenerator

这次在generatorConfig.xml中多增加了一个自定义的注释生成器,本地包路径:org.example.generate.MyCommentGenerator,然后再执行插件生成逆向代码。注意MybatisGenerator和generatorConfig.xml的位置关系,一定要在同一路径下,本例中,两个文件都在项目的根目录。介绍一种编程方式生成逆向代码的方式,可以很方便的引用我们自定义的注释生成器。使用插件方式生成逆向代码,是不能直接引用我们写的代码的,需要做特殊的处理才能引用。

2024-07-24 11:40:06 706

原创 mac OS matplotlib missing from font(s) DejaVu Sans

原因是:matplotlib使用的字体列表中默认没有中文字体。我们可以在文件中手动指定matplotlib使用的字体。然后清除一下matplotlib的缓存。之后再重新执行,就不会乱码了。

2024-07-24 00:26:54 2048

原创 CountDownLatch内部原理解析

CountDownLatch,是一个同步器,常见的使用场景是:我们在主线程中需要执行一些异步任务,但是在全部的异步任务都执行完成前,主线程需要阻塞等待,等待异步任务全部执行完成后,主线程才能响应客户端。以上就是CountDownLatch核心API的源码解析。我画了一张图,我们从整体上看一下CountDownLatch的操作流程图CountDownLatch本身的API不多,也都很简单。但是因为CountDownLatch是借助AQS框架实现的,所以会涉及到一些AQS的逻辑,稍微复杂一点。

2024-07-07 00:53:07 1054

原创 JDK线程池ThreadPoolExecutor运行原理详解

jdk线程池,是java后端处理异步任务的主要解决方案,使用广泛。这种经常使用的技术,我觉着都有必要了解一下背后的实现原理。今天就借着线程池的那道经典面试题----线程池的工作流程,来了解一下线程池的实现原理。

2024-06-28 14:33:50 721

原创 大模型能力对外提供服务

我们在上一篇介绍了如何在。大模型有了,下一步,很自然的就会想到怎么让模型对外提供服务。毕竟只有用户使用了产品、解决了问题,产品才有价值。

2024-06-21 11:30:18 1175

原创 本地部署大模型chatglm3-6b

chatglm3-6b本地部署

2024-06-18 09:52:37 532

原创 递归入门-针对小白

递归是很多算法实现的基础,写好递归代码非常有必要。另外一点,递归的实现方式大多都非常简洁,简洁就意味着好维护。先按着技巧做,多写多练,慢慢就理解了。主要原因就是:你会不自觉的陷入到大脑递归的过程,基本2层递归就蒙了。人的大脑擅长创造,并不擅长这种大规模、重复性的工作。我不是很理解,为什么写好这两个东西,就能实现递归了呢?不理解,那就先不理解,先按着做。很多框架,你也不理解,但是你用的也很好。今天用递归实现斐波那契数列的时候,感觉摸到了一些门道,分享一下。递归太基础了,大家应该都知道,但是递归代码并不好写。

2024-05-12 11:38:53 347

原创 ElasticSearch报错解决

最近在学习ES的一些东西,遇到了一些问题,整理一下,希望可以帮助到也在学习ES的小伙伴。

2024-02-24 23:19:37 720

原创 <代码整洁之道>精彩片段整理

最近在读这本,感觉里面有很多内容都很有启发。整理下来,大家一起看下,顺便看看作者说的有没有道理。这本书的作者是:罗伯特丶马丁,大家经常叫他鲍勃大叔,斜体样式。

2024-02-15 17:48:35 774

原创 redis高可用-哨兵模式-源码篇

前段时间写过两篇redis哨兵的文章,一篇是。另外一篇是当时写的原理篇,是手动模拟主节点故障,然后查看主从切换的日志推算哨兵主从切换的流程。但是感觉这样搞出来的流程太粗,忽略了很多细节,真正要搞明白原理,还是要看源码才行。所以,找时间学习了一下C语言的语法,然后梳理哨兵模式主从切换的相关源码。研究了一段时间,算是把主流程基本搞懂了,今天把真正的原理篇补上。下面从源码的角度来分析一下主从切换的流程。

2023-12-24 23:52:19 918

原创 springboot应用,cpu高、内存高问题排查

回顾一下整个排查过程,有几个点说一下1)、写方法一定要注意动态的情况,比如此例中,数据后期增长的情况,不能只考虑当时的数据。2)、有个疑问,就算对象不可达了,正常来说也可以从MAT里看到点相关东西才对,但是翻了很久,啥也没看到,MAT的使用还要再看看,感觉是遗漏了细节3)、还有个疑问,虽然对象确实很大,但是可以回收,那rancher上看到的内存为啥还会这么高呢?这也是一个疑问点,需要找时间了解一下rancher。

2023-12-13 15:31:58 5498 1

原创 redis一条set命令的执行过程

set命令,在我们看来很简单,set zhangsan lisi,redis给我们返回一个 ok,就完事了。那redis的服务端是怎么处理这条简单的命令的?是不是像我们看起来的这么简单。今天这篇文章就来聊聊这个问题。在上一篇文章中,我们聊了redis IO多路复用的事件驱动框架。我们大致了解了redis是如何接收连接,如何将客户端的连接行为封装成事件并结合IO多路复用实现了对客户端连接的监听这一篇,我们聊聊当内核监听到客户端连接事件后,具体是如何处理连接事件的,我们用set命令来举例子。

2023-11-12 16:56:22 575

原创 redis源码分析之IO多路复用

这是老八股了,IO多路复用,背后依赖的是多路复用的函数,有select、poll、epoll,linux默认使用的是epoll函数,redis把客户端连接通过epoll函数给到内核,内核监听到连接有可读写的事件,就将该事件返回redis进行处理。返回了结果后,下面的逻辑就是处理这个就绪的事件,这个方法是redis IO多路复用的关键所在,redis不停的接收客户端请求,这个方法是主要逻辑,我给每一行代码都加了注释,可以细看一下。aeCreateFileEvent,是一个非常重要的方法,是用来创建事件的。

2023-11-04 21:10:19 440

原创 github下载源码失败(mac)

既然浏览器能从github下载源代码,那证明你的网络和github是通的,那为什么git不能clone代码呢?注意,你的代理地址并不一定是http://127.0.0.1:9977,你需要自己查看一下你的代理地址。前提,你浏览器可以访问github了,如果不能访问,那你得先解决浏览器访问github失败的问题。4、选择"代理"标签页。在代理标签页中,您可以看到代理服务器IP 地址和端口号。3、选择您使用的wifi,点击"详细信息"2、选择“WI-FI”。1、打开系统偏好设置。

2023-10-09 12:45:50 803

原创 springboot解决multi-statement not allow(已部署生产)

看报错的堆栈,是一个叫做WallFilter的过滤器中报出来的。首先来说,解决思路没有问题,就是将这个属性multiStatementAllow的值设置为true,关键是怎么做是有效的?反正我试了网上的思路,不管用,还是报错,要不然就是不报错了,但是。解决思路很简单,首先将我们已经生成的数据源注入到代码中,然后添加MultiStatementAllow=true的配置。我对druid的源码也不熟悉,碰到了这个问题,也是google,第一:很简单,既然是wall引起的,直接把它去掉不就行了。

2023-10-08 20:14:39 3378 2

原创 经纬度相关计算

java,经纬度计算

2023-09-23 03:19:33 465

原创 一种简单实用的灰度切量方案

最终实现了一版灰度方案,虽然看着简单,但经过生产验证,效果不错,实现了快速切量功能以及部分白名单、黑名单功能,这个涉及支付的需求最终也成功上线。下面把这套方案分享一下。说明一下,上述代码经过生产验证,是可用的,但是每个业务的情况不一样,不要直接粘代码到生产上使用,而是吸收方案的思想,进而改造成适合自己业务的方案。遇到了一个重要的需求,需要在支付场景上做一个大的改动,改动量较大,虽然已经对技术方案做了很多的review,大量的自测,QA测试,但还是觉得应该逐步放量,如果有问题,及时回切,避免造成过大的影响。

2023-09-23 02:37:12 590

原创 docker从零部署jenkins保姆级教程(下)

上一篇文章,我们完成了以下工作。1)、docker部署jenkins2)、建立第一个jenkins job3)、通过jenkins job自动编译构建我们的github项目上面所做的3个工作,都是为了这一篇文章打基础,不管是部署docker还是部署jenkins,我们最终的目的还是部署我们的项目,让项目跑起来,让流量进来,这才是一个项目的真正意义所在。这一篇文章,我们就要让我们的项目部署到docker中,跑起来。

2023-09-06 20:06:48 1116 1

原创 docker从零部署jenkins保姆级教程(上)

jenkins,基本是最常用的持续集成工具。在实际的工作中,后端研发一般没有jenkins的操作权限,只有一些查看权限,但是我们的代码是经过这个工具构建出来部署到服务器的,所以我觉着有必要了解一下这个工具的搭建过程以及简单的一些使用。尽可能多的了解公司中和你开发相关的所有东西,不要只是干CRUD的工作,只有这样,你才会有成长。我本地使用的mac充当宿主机,因为最近一直在看docker相关的东西,docker对于搭建测试环境非常方便,所以这次也选择用docker搭建jenkins。

2023-09-04 22:33:55 5489 2

原创 mac docker 卡住解决

通过监听/var/run/docker.sock(不同的操作系统位置可能不同)这个Unix套接字文件来实现,而在mac上,这个文件的位置是:用户目录/.docker/docker.sock,比如:/Users/zhangsan/.docker/docker.sock。如果我们是通过mac的强杀程序挨个删除docker的进程,.docker/docker.sock文件就会保留,我们重装docker后,老的docker.sock文件就会影响到docker的运行,所以必须要重新生成该文件。

2023-08-27 10:20:49 3333 2

原创 mysql使用flashback恢复数据

常在河边走,哪有不湿鞋。如果我们经常操作数据库,很有可能就会造成误操作,假如我们不幸误删了数据,有没有办法快速恢复呢?这里,我们就以用的最多的mysql举例,聊聊如何快速恢复数据。,或者。但是我看了看,都需要搞一些安装包,并且我发现有些工具已经不维护了,不清楚有没有啥问题,所以我的诉求是:1)、工具要权威,并且持续迭代2)、不要装一些和恢复数据没关系的包基于以上想法,我找到了一篇国外老哥写的文章,,能看懂英文的,尽量看英文,原文写的很清晰。

2023-08-24 19:00:06 1107

原创 mysql死锁分析show engine innodb status

hex 7fffffff,代表16进制的int最大值,要分析为什么是这个数,得先了解计算机的二进制相关的原码、反码和补码的知识,我搜了一篇文章,讲的挺清晰的。innodb这么搞,据说是节省空间,不用专门搞字段识别一个列是否存储的是有符号数。表t中的列如果没有特殊设置,默认是有符号数,意思是这一列,你可以存负数。innodb的规定是:如果表中的列存储有符号数据,此时数据对应的二进制数首位的0和1要互换。这个数是补码,对应的原码就是-1,(大家补完上面原码、反码、补码的知识后,就知道为什么是-1了)

2023-08-09 22:55:50 626

原创 mysql8查看大事务

所以我们要通过mysql的其他表查询这个大事务的详情,尤其是大事务的sql语句,进而知道是在做什么业务。大事务的特点是执行时间长,长期占有锁不释放,导致其他想操作同一行数据的线程阻塞,如果客户端设置了超时时间,超时后,客户端进行重试,又会申请一个mysql线程,然后再阻塞,最终会造成整个mysql库的线程枯竭,整个mysql库不可用,危害极大。至此,我们就得到了大事务的sql语句,接下来,可以根据sql语句对应一下业务模块,进而得出这个大事务能不能kill。很简单,就搞一张表,一个主键,一个业务字段。

2023-06-11 15:16:58 3288

原创 mac m2停止mysql报错:ERROR! MySQL server PID file could not be found!

执行完之后,会输出几个可能的目录,你可以到各个目录下看看有没有my.cnf文件。出现这个问题的原因有很多,我只说下我是怎么解决的,如果你是我这种情况,按照我说的解决,肯定好使。进入/etc目录,可能需要root权限,使用如下命令切换root用户,需要输入你进入mac的密码。datadir一般是/usr/local/mysql/data,根据你自己的目录情况修改即可。然后在etc目录下新建一个my.cnf文件,复制如下内容到my.cnf文件中。首先看一下,你的mysql服务,有没有指定配置文件。

2023-06-10 07:09:10 2645

原创 Mac M2芯片免安装版mysql

每次登录mysql,还得添加/usr/local/mysql/bin前缀,有点麻烦,我们可以配一个环境变量,编辑.bash_profile文件,增加下面的配置。看这个信息的目的是:你在官网下载mysql的时候,不要再下载x86版本,要现在arm版本,因为苹果的M2芯片是基于arm架构。此时重新打开一个终端,进入/usr/local/mysql/bin,免密码登录mysql。此时,可以进入/usr/local/mysql/bin目录,用以下命令登录mysql。注意下载arm版本,下图中,红框框起来的那个。

2023-05-14 21:39:50 2559 4

原创 mac M2安装Homebrew报错unable to access github.com/Homebrew/brew

Homebrew

2023-05-02 22:54:34 1988

原创 redis高可用-哨兵模式原理篇

选择新的主节点、切换主节点这些操作都是哨兵领导者来完成,所以我们根据哨兵领导者的日志,来串一下整个主从切换的流程。

2023-04-06 16:59:01 507

原创 redis高可用-哨兵模式搭建(1主2从3哨兵)

先下载redis单机版安装包,建立一个/opt/redis_sentinel目录,将tar.gz包上传到该目录。然后进入解压目录的src目录,输入如下命令执行编译。

2023-04-06 10:37:16 2442

转载 编译Springboot源码

Springboot源码编译

2023-03-30 20:12:13 209

原创 mysql “可重复读“ 解决了哪些问题,没有解决哪些问题?

在事务A开启事务,未提交事务时,事务B开启了事务,执行了查询操作,此时事务B读取的就是数据库的一个快照。这说明,事务B读到了事务提交的insert语句,然后将其name字段改为了aaaaaa,所以"可重复读"隔离级别并没有解决insert的幻读问题,同理update、delete也是一样的。但是事务B如果执行update、delete、insert,这就不是快照读了,而是当前读,读取的是表最新的数据。1、事务A,执行begin,然后执行update语句,将name由"张三"改成"李四",此时先别提交。

2023-03-30 16:56:46 2285 1

原创 redis集群-机器重启无法自动加入集群

先交代一下背景,如果想直接看解决方案的话,可以直接翻到问题解决。

2023-03-18 19:02:16 1168

原创 linux搭建redis集群

可以看到我们从7001节点上执行的set命令,redis集群给我们重定向到了7003节点上。这个原因是:redis集群是用哈希槽存储数据的,一共16384个哈希槽,分布在6个节点上。每次set数据,redis会使用crc16算法计算key应该被分配到哪个哈希槽上,然后会直接重定向到哈希槽对应的节点上。该报错说明缺少ruby环境,redis集群的安装需要依赖ruby环境。使用阿里云主机搭建,一台阿里云模拟6个节点,3主3从。看到以下输出,即为redis集群开始搭建。看到如下日志,说明redis集群搭建成功。

2023-03-17 23:00:50 897

MemoryAnalyzer.zip

dump日志分析利器

2021-02-02

空空如也

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

TA关注的人

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