自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 IM即时通讯系统开发-消息可靠性和幂等性设计

本文介绍了基于RedisStream的可靠消息处理方案。系统采用前端生成tempId,后端持久化处理后生成msgId并写入RedisStream,通过顺序写保证可靠性。消费者监听RedisStream处理消息,通过事务保证ACID特性,并使用WebSocket推送消息。方案包含多重健壮性处理:1)Redis写入失败时通知前端重发;2)业务异常直接ACK避免性能浪费;3)设置3次重试上限;4)超过重试次数的消息转入死信队列。系统还实现了消息补偿机制,定期检查处理超时消息,确保消息最终一致性。

2025-11-20 20:53:42 231

原创 计算机网络-网络层

要理解 IGMP,必须先理解组播。单播 (Unicast) (1-to-1): 你给朋友单独发一封邮件。广播 (Broadcast) (1-to-All): 你在小区里用大喇叭喊话,所有人(无论想不想听)都听到了。非常浪费资源。组播 (Multicast) (1-to-Many):你(服务器)向一个特殊的“组地址”(一个 D 类 IP,如239.1.1.1)发送数据流。互联网上只有那些“订阅”(加入)了239.1.1.1这个组的用户才能收到这份数据流。最经典应用:IPTV(网络电视)。

2025-10-31 21:55:59 1085

原创 计算机网络-数据链路层

成帧是数据链路层最基本的功能。物理层(第 1 层)只关心传输原始的。

2025-10-31 21:52:06 692 1

原创 计算机网络-物理层

物理层设备是那些只关心电子信号(电压、光脉冲)本身,而完全不理解数据内容(如 MAC 地址或 IP 地址)的设备。“调制”是将数字数据 (0/1) “搭载”到模拟信号(载波) 上,以便在模拟信道(如无线电波、光纤)中进行远距离传输。你可以把它想象成一种在空中传播的“涟漪”,它以光速(每秒约 30 万公里)前进,并且能够携带信息。无线电波就是一种我们肉眼看不见的电磁波,它在电磁波谱中波长最长、频率最低。我们日常生活中的所有无线技术,几乎都是靠它实现的。我们俗称的“猫”(光猫、ADSL猫)。

2025-10-29 21:36:44 704

原创 计算机网络-体系结构与基础

计算机网络的定义计算机网络是指将地理位置不同的、具有独立功能的多台计算机系统,通过通信设备和传输介质连接起来,在网络软件(如网络协议)的管理和协调下,实现数据通信和资源共享的系统。目的: 实现数据通信和资源共享。主体: 独立功能的计算机(包括服务器、个人电脑、智能设备等)。连接方式: 通过通信设备(如交换机、路由器)和传输介质(如网线、光纤、无线电波)。规则: 必须遵循统一的网络协议(如 TCP/IP)。计算机网络的功能数据通信 (Data Communication)

2025-10-29 21:33:30 993

原创 项目开发手册-常见系统设计之点赞系统

目录一 需求分析1.1 业务需求1.2.实现思路2.数据结构2.1.ER图2.2.表结构3.实现点赞功能3.1.点赞或取消点赞3.1.1.接口信息3.1.2.代码实现3.1.3.业务流程3.1.4.实现完整业务3.2.批量查询点赞状态3.2.1.接口信息3.2.2.代码3.2.3.暴露Feign接口3.3.监听点赞变更的消息4.点赞功能改进4.1.改进思路分析4.1.1.点赞数据缓存4.1.1.1.用户是否点赞4.1.1.2.点赞次数4.1.2.点赞数据入库4.1.3.流程图4.2.改造点赞逻辑4.2.1.

2025-10-21 20:42:44 400

原创 项目开发手册-开发流程

看页面渲染、其它服务需要哪些数据,而我们要查询这些数据需要哪些参数,最终确定接口的参数和返回值格式。在这里要填写的是某个接口的基本信息,例如接口名字、分类(或者叫分组)、状态等。由于这里是查询用户集合,请求方式是GET,因此查询参数就是普通的QUERY参数,也就是路径后的。因此,我们将遵循企业开发的流程,先分析原型、设计接口,再设计数据库结构,最后再开发接口功能。注意,上述过程不是一蹴而就的,很有可能会经过多次调整,这是非常正常的现象,核心思想就是。这样以来,我们就需要修改PO对象,用枚举类型替代原本的。

2025-10-21 20:41:09 389

原创 HTML-CSS项目练习

本文摘要介绍了网页开发中的关键技术和设计思路,主要包括:1. SEO优化方法,包括三大标签(title、description、keywords)的设置;2. 网页布局技巧,如从整体到局部的设计流程、Flex布局应用、Banner区域实现等;3. 移动端适配方案,使用vw单位实现响应式设计;4. 具体示例项目(小兔鲜儿电商、学成在线教育平台、酷我音乐移动端)的代码实现;5. 常见UI组件开发,如轮播图、产品卡片、新闻列表等。

2025-10-21 20:33:47 902

原创 CSS学习从入门到精通(两万字收藏篇)

本文系统介绍了CSS的核心知识与实用技巧,涵盖CSS基础使用、选择器、常用属性、特性、布局模型、响应式设计等关键内容。重点讲解了盒模型、浮动与Flex布局、定位技术、动画实现、移动适配方案(rem/vw)、Less预处理器,以及Bootstrap框架应用。通过大量案例演示了双开门效果、走马灯动画、响应式网页等实战技巧,并详细解析了CSS精灵图、字体图标、平面/空间转换等高级技术。最后系统介绍了媒体查询、移动端适配方案和响应式网页开发流程,为前端开发者提供了全面的CSS技术指南。

2025-10-21 18:18:30 1770

原创 一篇文章带你掌握前端框架 Vue

Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面,本文全面介绍了 Vue 的核心概念和使用方法。

2025-10-21 18:06:16 1512

原创 一篇文章带你搞懂Oauth2.0

本文介绍了OAuth2.0授权框架及其在第三方登录系统中的应用。OAuth2.0允许用户授权第三方应用访问其资源而无需共享密码,包含资源所有者、客户端、授权服务器和资源服务器四个核心角色。重点解析了最安全的授权码许可流程,涉及授权、令牌交换和资源访问等步骤。文章还详细展示了整合7个主流平台(GitHub、GitLab、Gitee、Google、QQ、微信、支付宝)的登录实现方案,采用策略模式设计统一接口,标准化用户信息处理,并实现CSRF防护、分布式锁等安全机制。

2025-10-15 20:31:44 1146

原创 一次由Flowable定时器引发的“401”悬案:深入解析异步线程中的Token传递

通过这次复盘,我们不仅解决了一个棘手的401问题,更深入理解了工作流引擎中同步与异步执行的本质区别。在设计复杂的、包含异步或定时逻辑的流程时,我们必须时刻关注执行上下文的传递问题,尤其是用户身份和安全凭证。无论是通过流程变量手动传递关键信息,还是设计专门的内部免鉴权接口,确保后台线程拥有正确的执行权限,都是保证系统稳定运行的关键。

2025-09-30 16:37:02 661

原创 一文带你搞懂文件编程

channel 必须关闭,不过调用了 FileInputStream、FileOutputStream 或者 RandomAccessFile 的 close 方法会间接地调用 channel 的 close 方法。在 while 中调用 channel.write 是因为 write 方法并不能保证一次将 buffer 中的内容全部写入 channel。会从 channel 读取数据填充 ByteBuffer,返回值表示读到了多少字节,-1 表示到达了文件的末尾。设置当前位置时,如果设置为文件的末尾。

2025-09-25 20:59:11 648

原创 一文带你了解 NIO

文章系统介绍了Java NIO编程的核心概念与组件。首先解释了用户态/内核态及其在I/O中的切换过程,然后重点讲解NIO三大组件:Channel(双向数据通道)、Buffer(数据缓冲区)和Selector(多路复用器)。详细剖析了ByteBuffer的结构、使用方法和常见操作(flip/clear/compact等),包括直接内存与堆内存缓冲区的区别。最后通过ScatteringReads分散读取、GatheringWrites集中写入的示例,以及黏包半包处理的实际练习,展示了NIO的高效数据处理能力。

2025-09-25 20:54:40 928

原创 ConcurrentHashMap

它没有采用单一的全局锁,而是实现了一套分层、精细的并发控制方案。的并发控制策略一致:优先无锁,必要时锁住单个桶,遇到扩容时也能正确处理(通过检查。,就意味着它“来晚了”,这个地方正在搬家。此时,它不会等待,而是会被强制调用。的内部结构是其所有行为的基础,它是一个动态的、可优化的哈希表。这种设计将潜在的线程冲突和阻塞,巧妙地转化为了加速扩容的动力。任何写线程在操作时如果遇到。操作的逻辑相对简单,其核心实现在。为了避免高并发下所有线程争抢一个。等方法最终都调用核心的。

2025-07-16 20:49:36 983

原创 《Java HashMap底层原理全解析(源码+性能+面试)》

注意:在 & 操作中,相同为0,不同为1,而table.length的长度一般不会太大,比如table.length=32时,对应二进制位100000,在32bit中前26位均为0,在&运算时,不管hash值前26位是否为1,结果前26为一定是0,那么index值最终取决于hash值的后6位 & 100000(补充:很多数据(特别是短字符串、递增数字)在低位变化非常小或不变 ),分析可以得出,为了避免哈希冲突,哈希算法计算出的hash值低位应尽量避免重复。这是HashMap最主要的优势。

2025-07-12 11:39:33 977

原创 ArrayList深度分析核心文档

ArrayList是Java中List接口的可变数组实现,具有非线程安全、动态扩容等特性。其采用1.5倍扩容机制,默认容量为10,支持快速随机访问(O(1))。迭代器采用fail-fast机制检测并发修改。使用时建议指定初始容量,通过ensureCapacity()预扩容,使用addAll()批量添加。线程不安全场景可采用Collections.synchronizedList或CopyOnWriteArrayList。注意remove方法易混淆索引与对象值,trimToSize()可释放多余内存。

2025-07-08 16:29:47 729

原创 前端三件套之html详解

它是一种建立网页文件的语言,通过标记式的指令(Tg),将影像、声音、图片、文字等链接显示出来。不建议在页面中大量使用h1标签,h1标签可以被搜索引擎(如百度)获取到,如果有多个,可能会进入搜索引擎的黑名单。像素值或百分比(如果是百分比,参考的是上一级元素的宽度,如果上一级元素未设置,则参考屏幕 宽度)元素宽度在不设置的情况下,是它本身父容器的100%(和父元素的宽度一致)HTML中标签元素三种不同类型:块状元素,行内元素,行内块状元素。和其他元素都在一行上,元素的高度、宽度及顶部和底部边距不可设置;

2025-05-22 10:26:39 1481

原创 一文带你搞懂MySQL的Change Buffer

Change Buffer 是 InnoDB 的一个特殊区域, 是 InnoDB 存储引擎为了**优化对非唯一二级索引页的修改操作**而设计的一个机制。它的核心目标是:**延迟并合并对非唯一二级索引页的磁盘写入,以减少磁盘 I/O,提高性能。在数据库中,当我们执行 `INSERT、UPDATE、DELETE`操作时,除了更新主键(聚簇索引)对应的行数据外,**还必须更新所有相关的二级索引**(普通索引)**1 满足条件:修改的是非唯一索引**| **参数** | **含义** |

2025-04-22 10:03:09 1004

原创 一文带你搞懂MySQL的Buffer Pool

Buffer Pool 是 InnoDB 的核心组件,其工作原理围绕以下关键点:采用 LRU 算法管理页,热点数据优先保留。支持延迟写回,通过脏页标记和后台刷盘提升写性能。与磁盘上的数据页同步,实现数据的持久化和一致性。通过合理配置 Buffer Pool,可以显著提高数据库性能,尤其是在高并发和大数据量的场景中。

2025-04-22 10:00:55 697

原创 Flowable工作流详解(基础篇)

接下来我们结合上面演示的第一个审批流程来详细的介绍下Flowable中的相关表结构的含义和作用。支持的数据库有:Activiti数据库类型示例JDBC URL备注h2默认配置的数据库mysql已使用mysql-connector-java数据库驱动测试oraclepostgresdb2mssqlOR已使用Microsoft JDBC Driver 4.0 (sqljdb。

2025-04-21 10:54:21 5316 1

原创 代理模式深度解析

Proxy.newProxyInstance()是JDK动态代理的核心方法,它会动态生成一个代理类,并返回该代理类的实例(即代理对象)。代理类的生成和加载涉及以下核心步骤。的第三方库,用于在运行时动态生成Java类的子类,从而实现对目标类的代理。它主要用于代理没有实现接口的类,解决了JDK动态代理只能基于接口的局限性。,在编译期就确定代理关系,并让代理类和目标类实现相同的接口。代理类通过调用目标类的方法来完成任务,同时可以在调用前后添加一些额外的操作。JDK动态代理的实现基于反射和类加载器, 通过。

2025-04-16 15:56:11 1271

原创 数据结构与算法--图论

Floyd-Warshall算法可以在有向图或无向图中寻找所有顶点对之间的最短路径。它不仅能够处理正权边,还能处理负权边,但图中不能包含负权循环。该算法的时间复杂度为O(V2)。

2025-04-03 11:11:33 1457

原创 ThreadLocal源码分析

在Java中,一个线程可以有多个实例。每个实例会存储在Thread类里包含的变量中,每个是通过Entry对象数组来存储信息的。

2025-04-03 11:01:46 787 1

原创 分库分表策略

分库分表方式适用场景优势典型例子。

2025-03-28 11:45:42 1759

原创 算法--滑动窗口

洛谷 P1638、LeetCode 76.最小覆盖子串。每个元素最多被左右指针各访问一次,总体操作次数为2n。LeetCode 3.无重复字符的最长子串。LeetCode 239.滑动窗口最大值。要求窗口内元素满足特定条件(如无重复)窗口长度动态变化,根据条件调整左右边界。需要覆盖所有目标元素,且区间尽可能短。窗口长度固定,每次移动时整体右移一位。窗口大小固定,快速计算窗口内属性。3.1 固定大小的窗口。3.2 可变大小的窗口。时间复杂度:O(n)

2025-03-27 09:18:14 1005

原创 并发编程——累加器

例如,在多线程计算之间的 static points 期间,此方法可能适用。如果存在与此方法并发的更新, 则不能保证 返回的值是重置之前出现的最终值。此方法可能是创建新 adder 的有用替代方法,但仅在没有并发更新时有效。由于此方法本质上是 racy,因此仅当已知没有线程同时更新时,才应使用它。包,专为高并发场景下的累加操作优化。它的核心目标是解决AtomicLong 在及极高并发下的性能瓶颈——通过分散压力来减少线程间的CAS冲突。类实现高效的原子更新,解决传统。的原子类,用于在多线程环境下对。

2025-03-07 20:01:27 960

原创 算法--前缀和、差分、离散化

离散化是指将连续的数据或范围转化为有限个离散点或区间的操作。在计算机科学中,尤其是在处理线段,区间覆盖等问题时,通过将连续的线段合并为互不重叠的最大线段,能够简化数据处理并提高效率。在实际应用中,如果我们遇到逆序的情景,应该首先将其转换为正常顺序(确保L<=R)后再进行差分数组的操作。差分数组要求在操作区间中起点L必须小于等于R,否则会导致错误的结果。4.完成合并:处理完所有线段,确保最后一个线段也被加入到结果列表中。2.初始化变量:创建一个空的结果列表,并记录当前合并后的线段。

2025-03-06 16:05:58 1104

原创 算法-数论

题中: ABC的1e9+6次方mod(1e9+6)与1mod(1e9+6)相等,为1。=((an-2*bn-2*cn-2)2)2=((a1*b1*c1)2)的n次方。

2025-03-06 16:02:54 546

原创 算法1-7 搜索

在赋值步数时,也可以使用层次的方式赋值,每次统计该层添加的个数,下次循环该个数即可拿到每层的元素。

2025-02-17 08:58:12 791

原创 洛谷算法1-6 二分和二分答案

二分答案介绍:用二分查找的方法枚举答案,枚举时判断这个答案是否可行。使用二分需要满足两个条件:有界性,单调性。二分答案适用场景:二分一般用来解决最优解问题,如果题目规定了有“最大值最小”或者“最小值最大”的东西,那么这个东西应该就满足二分答案的有界性和单调性。

2025-02-11 16:12:04 399

原创 洛谷算法1-4 递推与递归

【代码】洛谷算法1-4 递推与递归。

2025-02-09 16:29:53 366

原创 洛谷算法1-3 暴力枚举

细节:背包容量设置为sumTime / 2 + 1,这样可以避免0容量。细节:运算的优先顺序。

2025-02-09 16:04:14 785

原创 洛谷算法1-1 模拟与高精度

注:在赋值元素时,如果直接替换容易元素覆盖,可以使用一个临时数组存储原来的元素,然后将对应元素赋值。5 6 7 顺时针旋转90° -> 9 6 2 逆时针旋转90° -> 2 6 9。顺时针旋转:将某一列的值放到对应的行上(例如将第一列赋值到第一行),从下到上。使用高精度计算,BigInteger可以表示任意大的数,仅受到内存的限制。使用高精度计算,BigInteger可以表示任意大的数,仅受到内存的限制。求一个数的位数,我们可以根据数学公式直接计算,不需要知道该数具体的值。数码就是一个数0-9。

2025-01-27 17:23:07 487

原创 MySQL--视图

视图是一个 SQL 查询的命名结果集,可以像表一样进行查询。视图可以简化复杂的查询,使得数据访问更为方便。

2024-11-30 11:52:48 1258

原创 MySQL--SQL优化

id为50的数据要插入,它应该存储在47以后的位置,但是该页已经不够存储这行数据了,它会开辟一个新页page3,id为50的数据不会直接放在page3中,而是将page1中后50%的数据一起放在page3中。当我们的order排序条件为age升序,phone倒序时,age走索引,phone不走索引,因为创建索引默认是按照升序排序的,age为前缀索引,此时就无法倒着扫描phone索引。原因:二级索引结构下挂的是id,如果二级索引较多,id较长,会加大需要的数据库存储空间。

2024-11-30 11:30:58 1040

原创 MySQL--事务

MySQL的事务是默认是自动提交的,也就是说,当执行一条DML语句,MySQL会立即隐式的提交事务。

2024-11-26 11:39:17 1120

原创 数据结构--数组

1 2 3 5 6给数组添加元素时,应将原来添加位置的元素和之后的元素进行复制System.copy(要复制的数组,开始的位置,复制到哪个数组中去,加到数组中的哪个位置,复制的长度)

2024-11-26 11:30:36 905

原创 MySQL--存储引擎

存储引擎就是存储数据,建立索引,更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。在创建表时指定存储引擎InnoDB是一种兼顾高可靠性和高性能的通用存储引擎,在MySQL5.5之后,InnoDB是默认的MySQl存储引擎MyISAM时MySQL早期的默认存储引擎Memory存储的表数据是存储在内存中的,由于收到硬件问题,或断电问题的影响,只能将这些表作为临时表或缓存使用。

2024-11-24 12:37:43 806

原创 数据库--深度剖析索引

索引(index)是帮助MySQL的。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。

2024-11-24 12:32:30 1473

空空如也

空空如也

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

TA关注的人

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