自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小识的博客

放弃很容易,但坚持一定很酷

  • 博客(620)
  • 资源 (14)
  • 收藏
  • 关注

原创 加密算法有哪些?

加解密算法是信息安全的核心,主要可以分为三大类:对称加密算法、非对称加密算法和哈希算法。

2026-06-17 17:24:39 494

原创 MySQL实战:高可用架构

方案名称数据一致性故障切换速度架构复杂度核心依赖适用场景MHA较好(依赖半同步)10s ~ 30s中等Perl脚本、SSH免密中小型企业、传统一主多从架构极好 (强制要求GTID)秒级 (3s~10s)较高大型互联网公司、大规模MySQL集群管理MGR完美 (强一致性)秒级 (<5s)低 (原生内置)对数据安全性要求极高(如金融、交易)的业务。

2026-06-16 11:04:37 320

原创 注册中心选型

在微服务架构中,注册中心(Service Registry)扮演着“通讯录”的角色,负责服务的注册与发现。没有它,服务之间就无法动态感知对方的存在目前市面上主流的注册中心有 Eureka、Consul、Zookeeper 和 Nacos。如何进行选型,核心取决于你的业务场景、技术栈以及对分布式系统 CAP 定理的取舍。Consul部分了解不多,就不多做介绍了。

2026-06-14 19:22:50 70

原创 多级负载均衡架构

工作原理: 深入到 应用层,可以根据 URL、HTTP 头部、Cookie、POST 参数 等内容来决定转发。工作原理: 只通过报文中的 IP 地址和端口号 决定转发。就像快递员只看包裹上的地址和收件人电话,就把快递转寄出去了。可以实现动静分离(图片请求走图片服务器,API 请求走应用服务器)、根据 Cookie 保持用户登录状态、防 DDoS 攻击等。缺点: 性能比四层低,因为解析应用层协议(如 HTTPS 解密、HTTP 解析)需要消耗大量的 CPU 资源。,以及工作在 OSI 网络模型不同层级的。

2026-06-11 20:37:39 927

原创 如何对微服务进行拆分?

例如,电商系统可以拆分为:用户服务、商品服务、订单服务、库存服务、支付服务、物流服务、购物车服务、评价服务。区分系统中经常变化的部分和不经常变化的部分,将变的部分和不变的部分拆开后,可以避免不变的部分频繁发布。:将访问量大,访问频率高的业务,比如秒杀服务。这样既能保证高性能的要求,又能避免影响其他业务。:拆分应该服务于业务,而不是为了拆分而拆分。将可靠性要求高的核心服务和可靠性要求低的非核心服务拆分开来,重点保证核心服务的高可用。:每个微服务只负责一个单一的业务,这样方便维护,测试和部署。

2026-06-09 21:03:45 311

原创 JVM实战:如何判断哪些对象可以回收?

当灰色对象要删除指向白色对象的引用关系时, 就将这个要删除的引用记录下来, 在并发扫描结束之后, 再将这些记录过的引用关系中的灰色对象为根, 重新扫描一次。, 当黑色对象插入新的指向白色对象的引用关系时, 就将这个新插入的引用记录下来, 等并发扫描结束之后, 再将这些记录过的引用关系中的黑色对象为根, 重新扫描一次。此时的 s,即为 GC Root,当s置空时,localParameter 对象也断掉了与 GC Root 的引用链,将被回收。但是E不会被判断为存活对象,所以就会有问题。

2026-06-09 16:38:28 256

原创 模拟:将规则翻译为代码

主要是要删除元素,所以要获取前继节点。数据结构图示如下举个例子演示一下LRU算法是如何工作的。

2026-06-09 12:07:20 26

原创 微服务网关有哪些作用?

介绍rpm -Uvhyum install epel-release参考博客[1]https://www.cnblogs.com/chuncn/archive/2010/10/17/1853915.html

2026-05-26 22:47:40 457

原创 如何对系统进行监控?

注意: 不要只看平均值,必须监控 P95、P99 分位数(即 95% 或 99% 的请求都在该时间以内),因为平均值会掩盖极端卡顿的问题。: 慢查询数量、活跃连接数、主从同步延迟(Replication Lag)、锁等待时间。: 是否存在内存泄漏(Memory Leak),关注交换区(Swap)是否被频繁使用。: 消息堆积量(Lag,这是衡量消费能力的关键指标)、生产/消费速率。: GC(垃圾回收)暂停时间、GC 频率、堆内存分配。: 缓存命中率(Hit Rate)、内存碎片率、连接数。

2026-05-26 17:13:06 369

原创 并发工具类:AQS有哪些作用?(三)

本篇文章是在看完相关源码之后做的一个总结。在 Java 并发编程中,AQS(AbstractQueuedSynchronizer,抽象队列同步器) 是整个核心,而 ReentrantLock、CountDownLatch 和 Semaphore 则是基于 AQS 实现的具体并发工具类工具类AQS 的 state 含义独占还是共享核心应用场景锁的持有次数(0未持有锁,>0已锁/重入)独占互斥锁计数器值(需要等待完成的事件数)共享等待一组线程完成后再继续Semaphore。

2026-05-25 23:25:40 322

原创 Redis架构

无法自动故障转移: 如果主节点挂了,系统无法自动把从节点升级为新主节点,需要人工干预(修改配置、重启)。: 架构最简单,部署和维护成本极低,性能在单机瓶颈内是最高的(没有网络同步开销)。: 所有客户端都直接连接这一个实例,数据完全存储在该实例的内存中。这是最基础的架构,只有一个 Redis 实例负责所有的读写操作。写瓶颈与容量限制: 写操作和数据存储依然受限于单台主节点的上限。: 包含一个主节点(Master)和多个从节点(Slave)。主节点负责处理写操作,并将数据异步同步给从节点。

2026-05-22 09:58:36 62

原创 如何设计一个聊天系统?

如果客户端发现新收到的消息 msgSeq = 5,而本地最大的还是 3(中间丢了 4),客户端会暂时把 5 放入缓存队列中不展示,同时向服务器发起请求“补发第 4 条消息”,或者直接触发一次离线拉取,等 4 到了之后再按顺序一起渲染。我们将不同的消息类型,转发到不同的消息队列中,如果队列中的消息串行的去处理,肯定不会有顺序的问题,但是性能是不可接收的,所以要用多线程去消费消息,如果要用多线程消费消息,如何保证消息的有序性呢?在架构设计的过程中,我们主要考虑如何保证消息的实时性,有序性,可靠性,幂等性。

2026-05-20 12:32:30 194

原创 如何保证系统的高可用?

如果 100 个请求集中在第一分钟的最后 1 秒,另外 100 个请求集中在第二分钟的开始 1 秒,系统会在短短 2 秒内承受 200 个请求,瞬间并发量翻倍,可能导致系统崩溃。:当触发限流、熔断、网络超时、资源异常(如线程池满)时,代码自动捕捉异常并执行预设的 Fallback 方法(例如:返回内存缓存数据、返回空列表、或者返回友好提示“系统繁忙,请稍后再试”)。如果系统本身有应对突发流量的能力,漏桶算法也会强行让请求排队,导致系统资源利用率不高,无法处理突发的高并发。往桶里放入令牌,桶满时令牌溢出。

2026-05-18 21:40:39 408

原创 MongoDB架构详解

在谈具体的读写前,必须先理解复制集(Replica Set)。它是 MongoDB 保证数据安全和自动容灾的基础。Primary(主节点):接收所有的写操作,并将变更记录到 oplog(操作日志)中。Secondary(从节点):定期从主节点异步复制 oplog 并应用到自身,保持数据同步。默认情况下,从节点不处理读写,但可以配置为只读。Arbiter(仲裁节点,可选):不存储数据,不参与读写,纯粹为了凑足选举票数。心跳机制:节点间每 2 秒发送一次心跳。如果 Primary 挂掉,Secondary 节点

2026-05-18 18:13:12 490

原创 短链系统设计?

原理:这是最常用的方案。系统维护一个全局自增的分布式 ID(如 10001、10002),每来一个长链,就分给他一个 ID,然后把这个 10 进制的 ID 转换成 62 进制字符串。如果算出的短链在 DB 中已存在(且长链不同),就在长链后面拼接一个固定的“随机盐值”,重新计算哈希,直到不冲突为止。原理:使用高性能、低碰撞的 MurmurHash 算法对长链进行哈希,得到一个 32 位的整数,再将其转化为 62 进制的 6 位字符串。短链重定向服务:负责接收短链请求,查询缓存/DB,返回 302 重定向。

2026-05-17 18:14:16 394

原创 如何选择合适的消息队列?

可能你在没学消息中间件之前都已经听过很多概念了,JMS,AMQP,ActiveMQ,RabbitMQ,Kafka,RocketMQ,一个消息中间件怎么能搞出怎么多概念?本文从历史的角度帮你理清这些MQ和协议之间的关系。消息中间件属于分布式系统中的一个子系统,关注于数据的发送和接收,利用高效可靠的消息传递机制对分布式系统中的其余各个子系统经进行集成。

2026-05-16 11:16:11 366

原创 Kafka 如何保证消息的可靠性投递?

如果所有的 ISR(同步副本)都挂了,剩下的只有数据版本非常旧的副本。这个新 Leader 并没有包含之前已经确认的消息,将该参数设为 false(默认值),宁愿牺牲可用性(停止服务)也不要丢失数据。:enable.idempotence=true,即使生产者因为网络原因多次发送同一条消息,Broker 也会通过序列号(Sequence Number)去重(可靠性的一部分,但不解决丢失,解决重复)虽然不是每条消息都立刻调用 fsync(为了性能),但配合副本机制,即使单机断电,数据依然在其他副本中。

2026-05-13 00:00:46 460

原创 agent skill 从原理到实战

Agent skill是给大模型看的说明文档,那agent是从哪个文件夹读取skill文档呢?以cursor为例,cursor会从如下目录中加载skill文档每个skill为一个包含SKILL.md文件的文件夹,文件夹的名字则是skill的名字技能还可以包含脚本、参考文件和资源等可选目录,这个我们后面会介绍skill的执行流程如下图所示我们写一个简单的skill,用来统计一段文本中出现的人物,目录结构如下SKILL.md。

2026-05-11 01:05:51 251

原创 mcp指南

mcp,全称它是一个让大模型能够统一接入外部工具、数据和能力的标准协议有很多mcp广场https://modelscope.cn/mcp(魔搭社区,mcp广场)找了一个操作redis的mcp直接让 claude code 帮我配置重启claude服务,执行/mcp命令,看到mcp服务正常,mcp配置到/Users/li/demo/.mcp.json这个文件中使用一下这个mcp服务。

2026-05-11 00:35:02 273

原创 claude code 使用教程

输入cluade命令即可打开?for shortcuts 代表处于默认模式生成完毕会有如下选项创建,后续的每次创建还需要询问创建,后续的创建操作不需要询问不创建我们选2,创建完毕,注意下面的提示词变了这就不得不提到 Claude code有三种模式,我们可以使用shift +tab在三种模式间循环我们可以输入!,然后再输入命令,就可以直接执行shell命令五子棋游戏我们现在生成好了我们切换到规划模式,修改一下这个游戏如何在claude code输入框中换行?

2026-05-11 00:23:59 1247

原创 Idea插件开发

然后到 /build/distributions 目录下面去找。

2025-02-02 18:25:30 422

原创 MySQL实战:监控

报警阈值:threads_connected / max_connections > 0.8。Innodb_buffer_pool_read_requests:从缓存池中读取的次数。Innodb_buffer_pool_reads:从物理磁盘读取的次数。qps = (queries2- queries1) / 时间间隔。周期性的连接数据库并执行select @@version。使用pt-deadlock-logger工具。查看最近一次死锁信息。

2024-03-17 20:55:42 1037

原创 面试官:如何保证缓存和数据库的一致性?

针对这种不一致的情况,我们可以对更新数据库和缓存的操作加一个分布式锁,这样就能保证数据的一致性。基于内存缓存利用率的角度,我们一般不会采用同步更新的操作,因为有可能更新完的缓存并不一定会马上读取,导致缓存中缓存了大量无用的数据,降低缓存命中率。为了保证缓存和数据库的实时一致,我们不能用定时任务来更新缓存,我们要同时更新数据库和缓存,对应的方案有如下两种。从上图看,还是会存在数据不一致的情况,但是在实际中这个问题出现的概率并不高,因为要满足如下3个条件。除了并发的情况,我们还需要考虑异常的情况。

2024-03-09 21:46:55 556

原创 MySQL实战:问题排查

MySQL在选取索引时,会参考索引的基数,基数是MySQL估算的,反映这个字段有多少种取值,估算的策略为选取几个页算出取值的平均值,再乘以页数,即为基数。count(索引字段):可以使用覆盖索引但依然要取出数据判空。count(1):不需要取出数据,但需要判断1是否为null。count(*):经过专门优化,不需要判空,理论最快。count(非索引字段):无法使用覆盖索引,最慢。使用force index可以强制使用索引。重新统计索引信息,会重新计算索引的基数。

2024-03-08 16:49:24 712

原创 分布式链路追踪

Spring Cloud Sleuth,专为 Spring Boot / Spring Cloud 微服务设计的链路追踪组件,最主流、开箱即用,我们一般只需要引入依赖+简单配置即可。为了看清请求的完整流转路径并快速定位性能瓶颈,分布式链路追踪组件成为了不可或缺的工具。在Spring Cloud Sleuth中使用Zipkin时,是通过HTTP Header来传输链路的。有多种上报方式,目前最主流的是Agent的方式。针对不同的框架,传输链路的方式也有所不同。常用的分布式链路追踪组件如下。

2024-02-17 20:48:05 334 1

原创 Netty基本组件

编码器解码器

2024-02-17 13:23:36 316

原创 Kafka 线上问题

事情的起因是专员在 ze app 上查不到订单了,而订单数据是从 mysql 的 order_search_info 查询的,order_search_info 表的数据是从 oracel 的 BZ_ORDER_INFO 表同步过来的,查不到说明同步有问题。每消费一次订单表的数据,就会新创建一个线程池,核心线程数为10,不断创建线程导致内存和CPU不断飙升,消息不能正常消费,后续消费消息改成使用一个固定的现成池后,消息正常消费。首先看日志,有如下两种情况。而 CPU 持续飙升的容器,消费的是订单表的数据。

2024-01-17 16:02:33 1041

原创 分治法:分而治之

排序算法中的快速排序,归并排序都用了分治思想。题目地址:LeetCode 215。题目地址:LeetCode 50。

2024-01-08 15:02:28 563

原创 前缀和与差分:区间查询和修改

我们先来了解一下前缀和的概念,一个长度为 n 的数组 a[0]~a[n-1],它的前缀和 sum[i] 等于 a[0]~a[i] 的和。利用递推,可以在 O(n) 时间内求得所有前缀和:sum[i] = sum[i-1] + a[i]题目来源:LeetCode 1009。题目来源:LeetCode 209。思路:前缀和 + 二分。

2024-01-08 14:29:03 568

原创 双指针:反向扫描和同向扫描

题目描述:给定一个长度为n的数组arr,返回arr的最长无重复元素子数组的长度,无重复指的是所有数字都不相同。子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1,3,7]不是子数组。把同向扫描的 i, j 指针称为‘快慢指针’,快慢指针主要用来解决链表中的问题,比如判断链表是否有环。同向扫描:i 和 j 方向相同,都从头到尾,速度不同,让 j 跑在 i 前面。反向扫描:i 和 j 方向相反,i 从头到尾,j 从尾到头,在中间相会。

2024-01-07 18:13:24 815

原创 ElasticSearch 性能优化

byte < short < integer < long官网性能优化建议。

2024-01-04 16:37:53 1109

原创 ElasticSearch 聚合统计

按照某个字段的范围进行聚合,from提供区间下界(包括),to提供区间上界(不包括)桶聚合:将文档分成不同的桶,桶的划分可以根据字段的值,范围,日期间隔。管道聚合:把桶聚集统计的结果作为输入来继续做聚集统计。度量聚合:求字段的平均值,最小值,最大值,总和等。聚集被命名为 avg_age。按照某个字段的值进行聚合。

2023-12-26 17:07:45 890

原创 ElasticSearch 原理分析

MySQLIndexTableDocumentRowFieldColumnMappingSchemaQuery DSLSQL去重 distinctreindex数据迁移。

2023-12-26 16:17:29 724

原创 ElasticSearch 文档操作

批量操作对json有严格的要求,每个json串不能换行,只能放在同一行,相邻的json串之间必须要有换行。每个操作必须是一对json串(delete语法除外)

2023-12-26 15:37:50 913

原创 ElasticSearch 文本分析

自定义分析器可以用到的参数如下参数名解释type分析器类型,对于自定义分析器,可以使用custom 或忽略此参数tokenizer内置的或定制的分词器,必须的可选的内置的或定制的字符过滤器数组filter可选的内置的或定制的分词过滤器数组。

2023-12-26 10:37:09 730

原创 ElasticSearch 查询数据

terms query 和 term query 基本一样,terms query 允许在参数中传递多个查询词。Exists query 用于查询某个字段不为空的数据。如下所示,查询 age 不为空的 数据。通过 _id 字段查询数据。

2023-12-25 15:17:20 992

原创 ElasticSearch 索引操作

布尔类型:可选值为 true 或 false。对象类型:一个 json 对象。

2023-12-22 17:57:19 638

原创 ElasticSearch 集群搭建

分发完成后,其他集群节点都需要修改配置文件server.properties中的 broker.id 和listeners 参数。在kafka-server-start.sh中加上export JMX_PORT=“9999”,分发到各个节点,然后重启即可。我在本地mac上启动代码调试时报了如下一个错误,拉取不到元数据,搜了一下是因为本地hosts文件没有配置域名映射的关系。执行 zk.sh start 都正常启动了,但是执行zk.sh status 显示如下。为了方便启动和关闭集群,写一个脚本zk.sh。

2023-12-19 10:18:26 1550

原创 node.js学习笔记

package-lock.json:用来记录node_modules目录下每一个包的下载信息,包括包的名字,版本号,下载地址等。初次安装包完成后,在项目文件夹下多一个叫做node_modules的文件夹和package-lock.json的配置文件。node_modules:用来存放已安装到项目中的包,require()导入第三方包时,就是从这个目录查找并加载包。输入如下内容,输出版本号,说明安装node的时候把npm也安装好了。项目包:项目中node_modules目录中包含的包,都是项目包。

2023-06-05 20:41:03 919

原创 Kafka 性能调优

至少一次(At Least Once)= ack级别设置为-1+分区副本大于等于2+ISR里应答的最小副本数量大于等于2。生产者如何提高吞吐量。

2023-04-29 11:23:01 1028

用Python将Word中的内容写入Excel

用Python将Word中的内容写入Excel

2017-08-28

Qt实现多语言的切换

Qt实现国际化,能切换程序的语言

2017-02-25

Qt实现字体文件的加载和删除

Qt实现字体文件的加载和删除

2017-02-25

将doc文件批量转为docx文件,用python将doc文件批量转为docx文件

用python将doc文件批量转为docx文件,用python将doc文件批量转为docx文件,

2017-12-28

Qt加载字体文件删除字体文件

Qt加载自己的字体,不用系统提供的QFontComboBox

2017-02-25

mybatis-generator-core-1.3.5.jar

支持接口和XML更名的mybatis-generator,具体使用参考 https://blog.csdn.net/zzti_erlie/article/details/99606620

2019-08-15

Qt5串口助手

用Qt5自身的类库开发的串口助手

2016-09-26

MongoDB权威指南第2版(书签,高清).zip

MongoDB权威指南第2版(书签,高清).zip,MongoDB权威指南第2版(书签,高清).zip

2019-05-14

Linux系统命令及Shell脚本实践指南

Linux系统命令及Shell脚本实践指南,书签,清晰,完整版

2019-04-17

Maven实战(高清完整带书签)

Maven实战高清完整带书签,Maven实战高清完整带书签,Maven实战高清完整带书签,Maven实战高清完整带书签

2018-01-09

Spring MVC学习指南

Spring MVC是Spring框架中用于Web应用快速开发的一个模块,其中的MVC是Model-View-Controller的缩写。作为当今业界最主流的Web开发框架,Spring MVC已经成为当前最热门的开发技能,同时也广泛用于桌面开发领域。, 本书重在讲述如何通过Spring MVC来开发基于Java的Web应用。全书共计12章,分别从Spring框架、模型2和MVC模式、Spring MVC介绍、控制器、数据绑定和表单标签库、传唤器和格式化、验证器、表达式语言、JSTL、国际化、上传文件、下载文件多个角度介绍了Spring MVC。除此之外,本书还配有丰富的示例以供读者练习和参考。, 本书是一本Spring MVC的教程,内容细致、讲解清晰,非常适合Web开发者和想要使用Spring MVC开发基于Java的Web应用的读者阅读。

2017-10-13

Qt5串口助手V2.0(能记录上次打开的文件)

Qt5串口助手V2.0(能记录上次打开的文件)

2016-09-27

Qt实现语言切换

Qt实现语言切换

2017-02-23

空空如也

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

TA关注的人

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