- 博客(103)
- 收藏
- 关注
原创 分布式入门
电商系统可集群部署订单服务(应对高并发),同时分布式部署订单、支付、库存等服务。• 通信协议:REST(HTTP+JSON)、gRPC(ProtoBuf)• 无状态设计(Session共享方案:Redis/JWT)• 模式:断路器模式(Hystrix/Sentinel)• 接口版本控制(URL路径/Header版本号)✓ 服务注册/发现(Eureka/Nacos)• 分布式:不同机器运行不同服务(功能拆分)• 数据分片策略(一致性Hash/范围分片)• 集群:多台机器运行相同服务(水平扩展)
2025-04-20 11:00:00
1578
原创 JVM调优:从预防到实战的OOM解决指南
铁三角,你就是JVM世界的超级英雄🦸♂️!遇到问题欢迎在评论区抛出你的"异常堆栈",我们一起解码!🌟 终极秘诀:调优不是玄学!
2025-03-12 06:13:11
405
原创 miqiu的分布式锁(五):MySQL乐观锁
乐观锁像精巧的瑞士军刀,在正确场景下能创造奇迹,但需要精心设计重试策略和监控体系。建议配合熔断降级策略使用,当冲突率超过阈值时自动切换为悲观锁,打造弹性并发控制系统!
2025-03-02 17:31:20
1084
原创 miqiu的分布式锁(四):MySQL悲观锁解析
悲观锁是解决并发问题的重型武器,使用时需精准把控索引条件和事务范围。在高并发场景下,建议结合Redis分布式锁或乐观锁方案,根据业务特点选择最优解!
2025-03-02 16:32:34
895
原创 《每天读一个JDK源码》之HashMap解读
截自某平台的的评论区对比维度JDK1.7JDK1.8数据结构数组+链表数组+链表/红黑树哈希计算9次位扰动2次位扰动节点插入头插法尾插法扩容后索引计算全部重新计算hash利用高位bit判断最大容量1<<301<<30(但实际受VM限制)
2025-03-01 23:51:15
951
原创 《每天搞懂一道Hard》之数独终结者(LeetCode 37)
🔗原题链接:https://leetcode.com/problems/sudoku-solver/今天我们来解剖一个经典回溯算法问题——数独求解器!这道题在算法面试中出现频率高达35%(数据来源:LeetCode高频榜单),是检验回溯功力的试金石。准备好迎接烧脑之旅了吗?🚀。
2025-03-01 23:38:39
441
原创 Ubuntu 20.04 安装 Node.js 20.x、npm、cnpm 和 pnpm 完整指南
现在已经成功在上安装了以下工具啦!:通过 NodeSource 仓库安装。npm:安装并升级到最新版本。cnpm:通过淘宝镜像加速 npm 包的下载。pnpm:高效的包管理器,快速处理 Node.js 依赖。以上工具组合能显著提高开发效率,尤其在国内使用cnpm和pnpm时,能够更快速地下载和管理依赖。💨如果你有任何问题或需要进一步的帮助,随时在评论区留言或者直接联系我。祝你在 Node.js 世界中愉快开发!🚀。
2025-02-27 23:58:44
2176
1
原创 miqiu的分布式(三):JVM本地锁失效的三大典型场景
在单机环境下,synchronized和ReentrantLock能有效控制并发。但当系统复杂度升级时,JVM本地锁会面临失效风险。本文通过三个实战案例,揭示本地锁失效的深层原因。
2025-02-26 01:43:12
550
原创 miqiu的分布式锁(二):实战——用JMeter验证JVM锁能否解决MySQL超卖问题
在秒杀场景中,超卖问题是典型的并发编程挑战。本文通过JMeter压测工具,验证基于JVM的两种锁机制(synchronized/ReentrantLock)对MySQL库存操作的防护效果。
2025-02-26 00:59:57
581
原创 miqiu的分布式锁(一):初识主流实现方式
在分布式系统中,多个服务实例可能同时竞争同一资源(如修改数据库某一行)。分布式锁用于确保在任意时刻,只有一个实例能访问该资源,避免数据不一致。场景核心要求✅互斥性:同一时间仅一个客户端持有锁。✅防死锁:持有锁的客户端崩溃后,锁能自动释放。✅高可用:锁服务需具备容灾能力。✅高性能:加锁/释放锁操作需低延迟。分布式锁没有高下之分!选择时需权衡性能一致性和运维成本。优先使用成熟框架(如 Redisson)。定期监控锁状态,避免死锁。在非关键路径可尝试无锁设计(如 CAS 操作)。
2025-02-25 21:05:41
1177
原创 CountDownLatch——高并发场景的并发控制器
并发控制如同交响乐团的指挥,CountDownLatch就是那根精准的指挥棒” —— 来自一位凌晨三点debug的程序员 🎻💻。
2025-02-24 08:45:00
1017
原创 Spring 源码解读(二)——BeanDefinition
翻译自源码文档: 描述了一个 Bean 实例,包含属性值、构造函数参数值以及由具体实现提供的更多信息。最终转换为 RootDefinition例如,(Spring 2.5 引入)是通过 XML 配置读取的,最终会转换为 。抽象类 其中定义了通用的成员变量,子类会继承这些变量。 的特殊性在 中, 方法返回 。以下是一个简单的测试代码,演示如何创建和配置 :从xml中获取bean的过程1. 整体流程概述从 XML 中获取 Bean 的过程可以分为以下几个步骤:Spring 通过 类加载 XML
2025-02-23 18:34:25
1000
原创 备忘录模式:快速恢复原始数据
备忘录模式是一种行为设计模式,它允许在不破坏封装性的前提下,捕获一个对象的内部状态,并在对象之外保存这个状态。这样,我们可以在需要时方便地恢复对象的状态。备忘录模式是一种非常实用的设计模式,特别适合需要频繁保存和恢复对象状态的场景。通过合理使用备忘录模式,我们可以有效提升代码的可维护性和灵活性,尤其是在前端开发中,能够帮助我们快速恢复原始数据,优化用户体验。希望这篇博客笔记对你有所帮助!🚀。
2025-02-21 16:57:01
359
原创 位图(BitMap)实现
位图(BitMap)是一种高效的数据结构,用于存储和操作位(bit)数据。每个位可以表示一个布尔值(),常用于去重、排序、快速查找等场景。以下是位图操作的流程图,使用。
2025-02-19 10:00:00
303
原创 使用 Mammoth.js 渲染 Word 文档为 HTML:详细教程
Mammoth.js 是一个轻量级的 JavaScript 库,专门用于将.docx文件转换为 HTML。简单易用:只需几行代码即可完成转换。保留基本格式:支持段落、标题、列表、图片等基本格式。高度可定制:可以通过自定义样式和处理器来扩展功能。通过 Mammoth.js,我们可以轻松地将 Word 文档渲染为 HTML,并在网页中展示。本文提供了一个完整的代码示例,涵盖了从加载文档到渲染内容的全部流程。希望这篇教程能帮助你快速上手 Mammoth.js,并在项目中实现 Word 文档的渲染功能!🎉。
2025-02-19 07:03:08
2433
原创 java面试题:多线程交替打印数字
这个Java程序使用了三个线程(t1t2t3)和三个信号量(firstsecondthird)来实现交替打印数字1、2、3的功能。每个线程负责打印一个数字,并通过信号量来控制线程的执行顺序。通过使用信号量,我们可以精确控制多个线程的执行顺序,实现复杂的线程同步逻辑。这个例子展示了如何使用信号量来实现三个线程的交替执行。
2025-02-18 01:41:13
648
原创 Java 运行时常量池笔记(详细版
Java 运行时常量池是 JVM 的重要组成部分,提供了动态性和共享性,适合在运行时管理常量。Go 语言虽然没有直接的运行时常量池,但可以通过map等数据结构模拟类似的功能。两者的实现机制不同,但核心思想一致:通过共享常量减少内存开销,提高性能。通过本文的学习,你可以深入理解 Java 运行时常量池的原理,并掌握如何在 Go 中模拟类似的功能。希望这篇笔记对你有帮助!🚀。
2025-02-17 23:58:29
882
原创 动手实现自己的 JVM——Go!(ch03)
ClassFileminorVersion uint16 // 次版本号majorVersion uint16 // 主版本号constantPool ConstantPool // 常量池accessFlags uint16 // 访问标志thisClass uint16 // 当前类的索引superClass uint16 // 父类的索引interfaces []uint16 // 接口索引表fields []*MemberInfo // 字段表。
2025-02-17 10:30:00
1493
原创 rabbitmq五种模式的实现——springboot
Spring Boot 提供了对 RabbitMQ 的自动配置支持,通过和可以方便地实现消息的生产和消费。以下是基于 Spring Boot 的 RabbitMQ 集成示例。Pub/Sub(发布/订阅)模式是一种消息传递模式,生产者将消息发送到一个交换机(Exchange),而不是直接发送到队列。消费者通过绑定交换机来接收消息。这种模式允许多个消费者订阅同一个消息源,实现消息的广播。Routing 模式是一种基于路由键(Routing Key)的消息路由模式。生产者将消息发送到direct。
2025-02-16 12:40:20
1130
原创 rabbitmq五种模式的总结——附java-se实现(详细)
生产者:负责发送消息到队列。消费者:负责从队列中接收并处理消息。在简单模式中,消息的传递是单向的,生产者将消息发送到队列,消费者从队列中接收消息。简单模式:适用于一对一的简单消息传递场景。生产者:负责创建队列并发送消息。消费者:负责从队列中接收并处理消息。注意事项队列名称需保持一致,不然一定会报错!消息确认机制需根据业务需求选择自动或手动确认。使用完资源后需显式关闭Channel和Connection。工作模式是 RabbitMQ 的一种常见模式,用于将任务分发给多个消费者。
2025-02-16 08:01:49
961
原创 [特殊字符] Mark.js 的使用指南
Mark.js 是一个轻量级且功能强大的 JavaScript 库,专为在网页文本中高亮显示关键词而设计。它支持多种匹配方式,包括字符串、正则表达式和自定义过滤器,能够灵活地满足不同场景的需求。通过简单的 API,开发者可以轻松地将关键词高亮功能集成到项目中,提升用户体验。Mark.js 还支持动态高亮,即使在内容加载后也能实时更新高亮效果。此外,它的性能优化和可扩展性使其成为处理大规模文本数据的理想选择。无论是用于搜索结果的突出显示,还是用于文档中的重点标注,Mark.js 都能提供高效且美观的解决方案。
2025-02-15 16:00:19
1399
原创 JVM内存区域相关理论
JVM在运行Java程序时,会将内存划分为不同的区域,每个区域有各自的职责和特点。这些区域共同构成了JVM的运行时数据区。以下是JVM运行时数据区的结构图(参考紫皮书):1. 方法区(Method Area)2. 堆(Heap)3. 程序计数器(Program Counter Register)4. 虚拟机栈(VM Stack)5. 本地方法栈(Native Method Stack)其中,方法区和堆是所有线程共享的内存区域,而程序计数器虚拟机栈和本地方法栈是线程私有的。
2025-02-15 14:17:05
1262
原创 设计模式——职责链模式
职责链模式非常适合用于多个对象可以处理同一请求的场景。它使得系统可以灵活地调整请求的处理顺序和流程,而不需要修改客户端代码,从而降低了系统的耦合度和维护成本。
2025-02-14 19:51:17
1009
原创 动手实现自己的 JVM——Go!(ch02)
Go 语言的接口实现是隐式的,这意味着我们不需要显式地声明一个类型实现了某个接口,只要该类型实现了接口中的所有方法,Go 会自动认为它实现了该接口。
2025-02-13 13:53:29
1144
原创 动手实现自己的 JVM——Go!(ch01)
本章通过 Go 语言实现了一个简单的 JVM 命令行工具,模拟了如何解析命令行参数来启动 Java 类的执行。flag:用于解析命令行参数。通过它,我们能够定义布尔、字符串类型的命令行选项,并根据用户输入的参数调整程序的行为。fmt:用于格式化输出信息,是 Go 标准库中用于打印信息的核心工具。通过这个例子,我们了解了如何通过命令行与程序进行交互,为后续的 JVM 模拟打下了基础。
2025-02-13 09:30:00
534
原创 几种用户鉴权的方式对比
它通过访问令牌和授权流程实现了用户资源的安全授权,避免了直接暴露用户名和密码的风险。OAuth 是一种授权协议,它允许第三方应用在不暴露用户凭据(如用户名和密码)的情况下,访问用户在服务提供者上的资源。:当用户登录时,服务器验证用户的身份,并生成一个 JWT 令牌返回给客户端(通常是浏览器或移动应用)。认证是验证用户的身份,而授权是允许用户的某些资源被第三方应用访问。签名是为了验证 JWT 的数据是否被篡改,并且确保消息的发送者是可信的。,例如,如果密钥管理不当,JWT 会容易受到攻击(如签名泄露)。
2025-02-03 17:19:39
785
原创 MongoDB快速上手(包会用)
MongoDB 是一个开源的,它使用类似 JSON 的(二进制 JSON)格式来存储数据,具有高性能、可扩展性和灵活性。它适用于各种应用程序,特别是在需要处理大量数据和快速发展的应用场景下。
2025-02-01 21:30:16
1500
1
原创 微服务入门(go)
上面的命令执行后,我们会发现同级目录多了两个go文件,这就是自动生成好的编译之后的文件。是对分布式系统的高度抽象,提供分布式系统开发的核心库,属于可插拔按需使用的架构。是一种轻便高效的结构化数据的协议,通常用于存储数据和需要远程数据通信的程序上。远程过程调用,包含了传输协议和编码协议,不同计算机之间的程序可以进行调用。领域服务四层架构主要分为接口层,应用层,领域层,基础层四个部分。◆Docker生命周期管理:run,start,stop,rm。ps:要边界清晰,而不是很小的单体,也不能过度拆分。
2025-01-29 13:54:09
1351
1
原创 go理论知识——Go Channel 笔记 [特殊字符]
Channel是 Go 语言中非常重要的并发编程工具。无缓冲 Channel 是同步的,带缓冲 Channel 是异步的。使用close关闭 Channel,使用select处理多个 Channel 操作。
2025-01-27 23:27:15
1517
1
原创 go理论知识记录(入门2)
使用type关键字可以为现有类型定义别名。type 新类型名 原类型myInt是int类型的别名,但它是一个全新的类型,不能直接与int类型混用。定义别名后,可以像使用原类型一样使用新类型。fmt.Printf("%d\n", a) // 输出: 10结构体是一种复合数据类型,用于将多个字段组合在一起。type 结构体名 struct {字段1 类型1字段2 类型2...Sleep()GetColor() string // 获取动物颜色。
2025-01-27 18:07:02
1459
原创 go理论知识记录(入门)
varvar 变量名 类型 = 值如果未初始化,变量会被赋予其类型的零值:var score int // 默认值为 0var isPass bool // 默认值为 falsevar greeting string // 默认值为 ""可以一次性定义多个变量,用逗号分隔。var 变量1, 变量2, 变量3 = 值1, 值2, 值3使用const关键字定义常量,常量的值在程序运行期间不可修改。const 常量名 = 值。
2025-01-23 10:00:00
995
原创 springSecurity入门(一)
是一个功能强大且高度可定制的安全框架,专门为基于 Spring 的应用程序提供身份验证(Authentication)和授权(Authorization)支持。它是 Spring 生态系统的一部分,广泛应用于保护 Java 应用程序,尤其是 Web 应用程序。访问受保护的资源(如/login2),Spring Security 会跳转到登录页面。用户名admin密码123456。
2025-01-13 01:07:20
456
原创 后端程序员好上手的前端框架——layui
如果需要支持大规模的管理和开发,还需要跨平台多端使用,需要实现的功能是更多的情况下,这个时候适合选用vue;如果是需要快速搭建一个网站,使用layui。
2025-01-08 03:33:04
958
2
原创 Spring 源码阅读前置工作——构建源码
由于 Spring 框架是通过 Gradle 来进行构建的,因此你需要在本地环境中安装并配置好 Gradle。如果在过程中遇到其他问题,我们还可以参考 Gradle 或 Spring 的官方文档,或查看开发者社区的相关讨论滴!在构建过程中,可能会看到很多日志输出,部分依赖的下载可能会因为网络问题而中断,这时候只需手动刷新或重新尝试即可。此时,项目就已经成功构建,你可以开始进行源码的阅读与调试了。具体的安装方法可以参考一些开发者社区或者博客资源,很多大佬的博客会有详细的安装教程。进入到项目根目录下的。
2024-12-09 07:54:16
881
原创 Netty 框架——TCP 粘包和拆包
在这个协议中,我们使用一个len字段来存储消息的长度,content字段来存储消息的内容。// 消息的长度// 消息内容return len;
2024-12-07 20:13:34
1622
原创 Netty 框架——入站与出站
双向数据传输是指客户端和服务端能够在同一连接中实现数据的双向流动,既可以从客户端发送数据到服务端,也可以从服务端发送数据到客户端。框架中,通过管道(Pipeline)中的入站(Inbound)和出站(Outbound)处理器,您可以轻松实现双向通信。操作是处理数据流向的重要概念,它们决定了数据如何从客户端到服务端(出站)以及如何从服务端返回客户端(入站)。客户端也需要进行相应的初始化,加入编码器(出站)和解码器(入站),同时加入自定义的业务处理器。,它们各自处理自己的任务,不会互相冲突。
2024-12-07 12:01:10
822
原创 Netty 框架——protobuf的使用
Netty 默认使用 Java 序列化,但其性能和跨语言支持存在一定问题,特别是 Java 序列化性能较低且无法在不同编程语言间互通。因此,使用 Protobuf(Protocol Buffers)替代 Java 原生序列化能够提高效率并支持跨语言通信。成功实现客户端与服务器间基于 Protobuf 的高效通信,服务器接收到客户端消息后打印其 ID 和 Name,客户端接收到服务器的响应消息。Netty 是一个高性能、异步事件驱动的网络通信框架,它提供了丰富的编码解码器(codec),如。
2024-12-07 03:55:53
1116
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人