自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 tokio demo chat server

【代码】tokio demo chat server。

2025-11-10 15:37:26 115

原创 serde

Serde: 是 rust 语言用来序列化和反序列化数据的解决方案。

2025-11-05 16:36:24 200

原创 rust表格文件处理

【代码】rust表格文件处理。

2025-11-04 18:38:31 170

原创 mini-bitcask学习笔记

对外提供 API(set/get/delete/scan),内部持有 Log 和 KeyDir。的(新的键值对/删除操作 都往文件末尾加),程序重启后,必须知道哪些键有效、值存在哪里。就是干这个的:通过一次完整的文件扫描,把所有键的最新状态(存在 / 删除)记录到。选择BTreeMap:自动按键排序,支持范围查询。的关联类型,定义了迭代器每次迭代返回的元素类型。keyDir的值:(文件偏移量, 值长度)的核心方法,定义了如何获取下一个元素。,且这些引用的 存活时间被约束在。里的资源,必须用生命周期。

2025-11-04 17:15:45 544

原创 rust笔记

初始化一个文件夹为新的rust项目编译运行一个简单rust程序:猜数游戏在项目中添加rand库,版本为0.8.5编译代码,处理依赖一些概念Rust所有数据的类型在编译时已知,且对数据类型的赋值进行规则约束在编译时进行类型检查, 更早检测出错误,性能更快,但代码灵活度不如在运行期间进行类型检查的语言栈内存非常快,lifo后进先出堆内存较为无序,可存储未知大小的数据所有权是一组规则,用于管理Rust程序如何处理内存。它在没有垃圾回收器的情况下,帮助确保程序的内存安全。Tuple元组长度固定,可含不同类

2025-10-27 19:58:34 800

原创 如何对较长的Stream链进行Debug

点进去就可以看到清晰的流转过程。无法看到流转过程,不便于排查。

2025-10-01 22:37:08 366

原创 mit6.031 2023spring 软件构造 笔记 Specification

当程序失败时,很难确定错误在哪里。代码中的精确规范可以让您将责任分担给代码片段,而不是人。有助于使模块更易于理解,就像黑匣子外部的标签一样。

2025-09-02 21:30:12 873

原创 mit6.031 2023spring 软件构造 笔记 Code Review

Code review是帮助自己提升代码质量的关键一环。

2025-09-01 12:36:05 320

原创 mit6.031 2023spring 软件构造 笔记 Testing

当你编码时,目标是使程序正常工作。但作为测试设计者,你希望让它失败。这是一个微妙但重要的区别。

2025-08-31 15:53:44 1067

原创 mit6.824 2024spring Lab3A Raft

基本状态节点的字段。

2025-08-30 17:43:40 323

原创 RESP协议

2表示两个元素,为字符串foo和bar。简单字符串、错误、整数、批量字符串、数组。

2025-08-20 22:52:15 229

原创 Raft算法

任期领导者心跳信息随机选举超时时间先来先服务的投票原则大多数选票原则。

2025-08-16 18:34:29 522

原创 mit6.824 2024spring Lab2 Key/Value Server

get请求的结果无需缓存,否则会导致内存使用过大每个客户端只存储最后一个请求的信息,无需复杂实现。

2025-08-16 14:23:56 218

原创 mit6.824 2024spring Lab1 MapReduce

【代码】mit6.824 2024spring Lab1 MapReduce。

2025-08-16 14:19:33 180

原创 《亿级流量系统架构设计与实战》通用高并发架构设计 读场景

无论是数据库读/写分离、本地缓存还是分布式缓存,其本质上都是读/写分离,这也是在微服务架构中经常被提及的CQRS模式。CQRS (Command Query Responsibility Segregation,命令查询职责分离)是一种将数据的读取操作与更新操作分离的模式。

2025-07-14 11:17:55 1127

原创 CompletableFuture

CompletableFuture对Future进行了扩展。

2025-07-13 17:08:01 398

原创 SingleFlight

Go语言扩展包提供的同步原语SingleFlight能很好地解决缓存击穿问题。

2025-07-10 20:41:11 967

原创 《亿级流量系统架构设计与实战》Redis高可用架构

一个Master与若干Slave组成主从关系,当Slave与Master时, Master向Slave进行,复制结束后,再根据Master的最新数据变更进行增量数据复制。不论是MySQL主从复制,还是Redis主从复制,大部分存储系统的主从复制原理都基本类似,即;而且,如果Master向过多的Slave 复制数据,则同样会出现“”的问题。

2025-06-30 21:09:10 1200

原创 《亿级流量系统架构设计与实战》MySQL高可用架构

一台MySQL服务器作为Master(主节点), 若干MySQL服务器作为Slave (从节点)。在正常情况下,只有Master处理写数据请求, 同时Master与Slave通过主从复制技术保持数据一致。当Master发生故障宕机时,某个 Slave会被提升为Master继续对外提供服务。

2025-06-23 15:06:51 1110

原创 接口幂等性方案

幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。

2025-06-22 16:10:14 1038

原创 MySQL行转列、列转行

列的形成,使用关键字CASE WHEN。使用UNION ALL关键字。

2025-06-20 22:42:53 784

原创 为什么基于TCP的移动端IM仍然需要心跳保活?

TCP协议自身先天就有KeepAlive机制,为何基于它的通讯链接,仍然需要在应用层实现额外的心跳保活?心跳一般是指某端(绝大多数情况下是客户端)每隔一定时间向对端发送自定义指令,以判断双方是否存活,因其按照一定间隔发送,类似于心跳。

2025-06-20 21:58:11 1520

原创 Java序列化:单例破坏与防护

这就产生了一个问题,如果User是单例的,即它的构造函数被私有化,同时为了防止构造函数通过反射的方式被调用,会在构造函数中抛一个异常。java序列化,不光要存对象属于哪个类、哪一个包下、对象的属性,还。,相当于这个类的身份证,类不一样,就无法反序列化回来。我们加上断点,再次反序列化,发现进到了这个函数中。那么我们如何保护单例的类,不被反序列化破坏呢?java序列化,是有一套规则的,但是你可以。用jdk的序列化,序列化user。这个方法就是一个反序列化协议,我们发现,反序列化的时候。本质:把对象变成字节。

2025-05-21 20:19:35 741

原创 非对称加密

A 想要向 B 分享一个重要文件,他使用 对称加密(Symmetric Encryption) 进行加密。但送达后,B 不知道加密时的密码,无法解密文件(没有钥匙,打不开锁)。此时面临一个关键问题:如何安全传递密钥?➜ 通过邮件发送密码?存在被截获的风险这正是 非对称加密(Asymmetric Encryption) 需要解决的核心问题。

2025-05-11 22:30:27 1011

原创 json unmarshal 到 interface{} 的精度陷阱

要将jsonStr转换成map[string]interface{}:用JSON序列化一下,再反序列化成mapid变长的时候,我们发现此时结果并不正确为什么int变成了float呢?

2025-05-10 22:06:10 998

原创 Go基础学习

很久之前做的笔记.....整理了一下

2025-05-09 15:31:16 1533

原创 AQS简介

Semaphore等等 都与AQS有关。

2025-05-09 15:27:06 1391

原创 jdk21虚拟线程

当一个线程的时间片用完后,操作系统会暂停该线程的执行,保存其当前状态(包括寄存器内容、程序计数器等),然后切换到另一个线程,恢复其之前的状态并继续执行。:每次切换线程时,操作系统需要保存当前线程的状态并恢复下一个线程的状态,这个过程称为上下文切换。因为不同的线程可能访问不同的内存区域,当切换到另一个线程时,新的线程可能需要重新加载数据到缓存中,导致缓存命中率下降,增加了内存访问延迟。线程切换会打破流水线中的指令序列,导致流水线需要重新填充,这会降低CPU的执行效率。,但虚拟线程和线程不是,

2025-05-08 11:33:42 859

原创 Netty组件与编码

把ServerSocketChannel的accept事件注册给selector进行监听accept事件就表示有一个客户端要向服务端进行连接Selector.select()是一个阻塞函数,一直等待他监听的事件,这个函数触发代表着有一个SocketChannel要连接,然后我们把这个SocketChannel的read和write事件注册到selector上,此时selector就监听了三个事件。

2025-05-05 15:50:33 1420

原创 BIO NIO

启动server和client:上面代码存在什么问题呢?socket.accept()只调用了一次,说明我们的服务器只能接收一次客户端的连接服务端加个while(true),客户端让两个线程来连接控制台:我们发现,tom线程在连接服务器的时候,jerry线程是不能向服务器中发送数据的tom断开连接之后,服务器一次性读取了jerry线程里面所有的内容那么如果tom线程不断开连接,服务器就一直在等待。在这种模式下,,这就是传统的BIO模型。

2025-05-03 18:11:52 1043

原创 手写HashMap

主要实现三个函数 put get remove根据jdk对map的定义,put有返回值,是一个value,如果map里已经有了key对应的value,就用新的value覆盖掉旧的value,并且返回旧value;如果map没有key对应的value,返回nullremove也有返回值,如果map中有key对应的value,就返回value,否则返回null关联key和value -> node创建一个容器,把node装起来。

2025-04-25 13:02:49 1213

原创 基于Flink与Kafka实现通用数据处理流程

比如说,上游系统接收到的订单和数据,以什么方式通知给下游系统呢。进行异构系统数据传递和开发的时候。

2025-04-15 20:33:56 1263

原创 缓存一致性

强一致性场景分布式锁 + 事务消息,但需接受性能损耗(如金融核心链路)。高并发最终一致性场景Cache Aside + 延迟双删为主流方案,平衡性能与一致性。可结合版本号或逻辑时间戳进一步规避乱序问题。容错设计监控报警(缓存与数据库差异检测) + 自动修复脚本。通过分层设计(如读写分离、冷热隔离)与异步化手段(如Binlog订阅更新),可系统性降低缓存不一致风险,同时保障高并发性能。

2025-04-14 17:17:38 1065

原创 Redis实现分布式锁解析

在 Redis 主从架构下,分布式锁的实现可能因主节点(master)宕机导致多个客户端同时持有锁,主要原因在于。:实现复杂,性能较低,需部署多个独立 Redis 节点。:性能低于 Redis,适合对一致性要求高的场景。客户端执行业务逻辑(需在锁的过期时间内完成)。客户端通过 Lua 脚本原子性释放锁(校验。:降低主从切换导致的数据不一致风险。Redlock 要求客户端在。命令在主节点设置锁。:无数据不一致问题。

2025-04-11 13:39:36 1231

原创 设计模式-门面/外观模式

通过SLF4J,开发者可以在代码中使用统一的日志记录方式,而无需关心底层具体使用的是哪种日志实现。门面模式(Facade Pattern)是一种结构型设计模式,它通过提供一个统一且简化的高级接口,隐藏复杂子系统的内部细节,从而让客户端能够以更简单、更直观的方式与子系统进行交互,而无需深入了解其复杂的实现逻辑。我们在调用loadPlugin方法的时候要传入路径,但是绝对路径是有url不识别的字符的,所以我们把jar包直接粘到demo的根路径中。在实际应用中,门面模式被广泛用于简化复杂系统的操作。

2025-03-15 17:24:30 1129

原创 以有涯随无涯,殆已!

学任何东西最大的阻碍就是羞耻感代替了成就感,本来你获得了一个新的知识,这是一件相当值得高兴的事情,但是因为某些环境灌输的概念,例如学海无涯苦作舟、学习如逆水行舟不进则退,这种类似的将知识给无限化、神圣化、武器化的说法,加上与这个领域的某些成就者进行的主动或被动的对比,让大脑错误地把获得这个知识的成就感,替换为了一种“这个领域的知识这么庞大我却只学会这么一丁点,真是丢人”的羞耻感。实际上从无到有的这个过程,不论什么时候,都应该是值得让人为自己感到骄傲的,应该为自己的进步感到开心,认可并强化自己的获得感。

2025-03-08 16:33:59 719

原创 MySQL事务 总结

A原子性(Atomicity):一个事务中的所有操作要么全部执行,要么全部不执行,不会有部分成功和部分失败的情况。C一致性(Consistency):事务执行的结果应该符合数据库的约束条件和逻辑。在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。一个合法状态变成另一个合法状态,这个合法状态是和业务有关的。I隔离性(Isolation):并发执行的多个事务相互独立,不会相互干扰,通过锁和MVCC来保证。每个事务应该只能看到其自身提交之前的数据。

2025-03-01 13:02:19 1090

原创 灵神 算法精讲视频题单总结【二分】

A:已知定义蓝色是目标峰顶或其右侧元素 题中说nums[n]可以假设为负无穷 所以nums[n-1]要么是峰顶,要么是峰顶的右侧元素,不可能是峰顶的左侧元素,(nums[n]是负无穷不可能是峰顶)。check函数中初始化sum为piles.length(吃每堆香蕉至少需要一天),后面在计算每堆香蕉需要的天数的时候,循环中累加sum的时候,每次计算出的值为实际值-1。:x在第二段,或者数组只有一段,如果target在第一段||target在第二段,在x左边,满足check。

2025-02-28 17:51:13 1270

原创 MySQL索引 总结

索引是一种可以快速查询数据的,有序的数据结构。

2025-02-28 16:01:47 1462

原创 MySQL的JSON类型和虚拟列索引

此外,在查询时,可以用 JSON_TABLE,他可以将JSON 数据转换成关系型表格形式,从而更容易与其他 SQL 表操作。这是很常见的多对多的实现方式.但有时,可能一张表有很多个多对多字段,就会带来相当数量的中间表,看着很麻烦.,以及更多层的嵌套.同时,MySQL可以自动判断JSON是否合法:如果不合法会产生错误.JSON就是字面意义上的JSON,几乎可以存放任意类型的数据.比如上文提到的列表。包括(2,3)的所有学生,需要先将JSON序列化,再分别查询.(用于从 JSON 数组中提取值)的功能.

2025-02-26 20:28:16 1122

空空如也

空空如也

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

TA关注的人

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