- 博客(27)
- 收藏
- 关注
原创 Webhook
Webhook 看起来就是一个接收 POST 请求的接口,实际上它是一个分布式系统的入口。你要面对网络延迟、重复投递、乱序、伪造请求、超时这些分布式系统里的经典问题。写代码的时候觉得这些都是细节,上线之后每一个都会变成事故。
2026-10-24 00:07:08
146
原创 HLS视频
HLS(HTTP Live Streaming)通过将视频切分为小片段(如.ts或.m4s文件),并用.m3u8播放列表管理分片顺序与信息,实现流畅播放。点播时列表包含全部分片,直播则动态更新,仅保留近期内容。播放器根据网络状况自动切换清晰度,保障播放不卡顿。依托标准HTTP协议,HLS兼容性强、部署简便,广泛用于在线视频与直播,虽有延迟问题,但可通过低延迟版LL-HLS优化。核心在于:清单(m3u8)、分片、自适应码率。
2026-09-12 02:07:02
161
原创 力扣84. 柱状图中最大的矩形
个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,宽度为 1。如果有不了解单调栈这个数据结构的同学,可以在B站上看几分钟的视频了解一下!栈顶柱子高度,说明找到了栈顶元素的右边界。重复弹出过程,直到当前柱子高度不再小于栈顶高度,然后将当前索引入栈。栈顶柱子高度,直接将当前索进入栈(保持单调递增特性)。求在该柱状图中,能够勾勒出来的矩形的最大面积。最大的矩形为图中红色区域,面积为 10。初始化一个空栈,用于存柱子的索引。(这是要计算面积的柱子)。弹出后新的栈顶索引即为。
2026-05-29 20:21:31
269
原创 力扣239. 滑动窗口最大值
这篇文章讨论了滑动窗口最大值问题的解法。初始暴力解法时间复杂度为O(n*k),会导致超时。优化方案采用双端队列维护单调递减序列:1)移除窗口外的元素;2)弹出队尾小于新元素的元素;3)新元素入队;4)窗口形成后队首即为当前最大值。该算法时间复杂度优化至O(n),空间复杂度O(k)。文章提供了Go语言实现,使用切片模拟双端队列操作,通过维护队列单调性高效获取每个窗口的最大值。
2026-05-21 09:36:10
1227
原创 Harness工程
摘要:AI工程经历了Prompt工程、Context工程和Harness工程三次演进。Prompt工程通过指令优化、示例引导和思维链解决大模型理解问题;Context工程引入RAG知识库、上下文管理和工具调用增强模型认知;Harness工程则通过约束管理、任务编排、状态监控等机制处理复杂任务流程。这三个层级相互包含,最终形成以LLM为核心思考、Harness为执行框架的智能系统架构,逐步解决了从基础理解到复杂任务处理的全链条问题。
2026-05-14 20:11:27
480
原创 IO多路复用详解
IO多路复用是一种通过单线程监听多个文件描述符(FD)就绪状态的机制,核心特点是事件驱动。传统IO模型BIO和NIO存在线程开销大或轮询效率低的问题。三种主流IO多路复用模型中,select和poll需要频繁的内核态切换和遍历所有FD,效率较低;而epoll采用红黑树存储FD和就绪链表,通过回调机制实现事件驱动,避免了遍历开销,支持零拷贝和无连接数限制,是最高效的实现。epoll完美体现了IO多路复用的核心思想:复用系统调用来高效管理多个IO连接。
2026-05-14 09:10:29
248
原创 Go与MySQL锁:索引失效陷阱
本文深入解析了Go语言开发中MySQL行锁机制的原理与索引失效陷阱。首先介绍了MySQL InnoDB行锁的基础特性,包括排他锁的生命周期及其与索引的关联关系。重点剖析了三种导致行锁升级为表锁的核心场景:隐式类型转换、字段运算/函数处理以及不匹配的模糊查询,并详细解释了其底层逻辑。同时指出即使存在索引,查询范围过大也可能触发全表锁定。最后给出实践建议:保持WHERE条件字段原始性、严格类型对齐、优先使用主键/唯一索引以及优化事务控制策略,以确保系统在高并发下的数据一致性与性能。
2026-04-04 14:55:20
656
原创 Go与MySQL锁:高并发开发实战指南
本文深入解析了Go语言中MySQL锁的实现细节。首先介绍了MySQL的行级锁机制,包括共享锁、排他锁以及三种锁定算法(RecordLock、GapLock和Next-KeyLock)。重点探讨了悲观锁和乐观锁在Go中的实现方式:悲观锁通过SELECT...FOR UPDATE在事务中实现,而乐观锁则通过版本号控制。文章还揭示了Go连接池可能引发的锁陷阱,强调锁操作必须在同一事务中完成。最后给出了选型建议:高并发写场景用悲观锁,读多写少用乐观锁,并提醒注意索引使用、事务精简和超时控制等关键点。
2026-04-04 11:06:30
544
原创 Reids缓存穿透、击穿、雪崩
Redis缓存异常深度解析:穿透、击穿、雪崩 摘要:Redis缓存异常主要分为三种类型:缓存穿透(查询不存在数据导致数据库压力)、缓存击穿(热点Key失效引发高并发请求)、缓存雪崩(大量Key同时失效或Redis宕机)。解决方案包括:针对穿透使用布隆过滤器或缓存空值;应对击穿采用互斥锁或singleflight机制;预防雪崩通过随机化过期时间和多级缓存。实践建议将防护策略封装在中间件层,并采用随机偏移量设置缓存过期时间。这三种异常的核心区别在于:穿透针对不存在数据,击穿针对单个热点Key,雪崩则涉及大规模数
2026-04-03 22:15:50
410
原创 golang定时器
Go语言定时器使用指南 Go语言通过time包实现了两种定时器:Timer(一次性定时器)和Ticker(周期性定时器)。Timer适合延迟执行或超时控制场景,Ticker适合周期性任务。内部实现基于最小堆结构,由runtime统一管理,效率高。 Timer使用NewTimer创建,通过channel阻塞等待触发,可用Stop()取消或Reset()重置。Ticker会周期性发送时间到channel,必须手动Stop()避免内存泄漏。典型案例包括闹钟模拟和心跳检测。 关键区别: Timer一次性触发,Tic
2025-10-19 15:59:31
864
原创 Go语言爬虫:爬虫入门
本文介绍了使用Go语言爬取豆瓣Top250电影信息并存入数据库的全过程。主要内容包括:1)构造HTTP请求,设置请求头模拟浏览器行为;2)使用goquery解析网页DOM树;3)通过CSS选择器定位信息节点,提取电影标题、评分等关键信息;4)使用正则表达式拆分复杂信息;5)定义Movie结构体并通过GORM将数据存入MySQL数据库。文章提供了完整的代码实现,包括数据库连接、爬虫逻辑和数据存储等关键步骤,为Go语言爬虫开发提供了实用参考。
2025-09-15 15:09:47
2026
1
原创 技术分享:跨域问题的由来与解决
跨域问题源于浏览器的同源策略,该策略限制不同源(协议、域名、端口)间的资源访问以确保安全。主流解决方案包括CORS(跨域资源共享),通过HTTP头实现安全跨域请求;Nginx反向代理,将跨域请求转为同源请求;以及JSONP(仅限GET请求)。其中CORS是推荐方案,需后端配置响应头。开发中应根据项目需求选择合适方案,CORS适用于前后端分离项目,Nginx适合生产环境,JSONP仅建议用于兼容老旧系统。理解这些方案有助于开发者高效解决跨域问题。
2025-08-19 11:18:40
1076
6
原创 Go 语言垃圾回收机制:从入门到理解
本文介绍了Go语言垃圾回收(GC)机制的基本原理和使用方法。GC自动回收不再使用的内存对象,减轻开发者负担。Go采用三色标记法进行垃圾回收:白色表示潜在垃圾,灰色表示待处理,黑色表示存活对象。从Go 1.5开始实现并发GC,大幅减少STW(Stop-The-World)暂停时间。文中提供了观察GC行为的方法,并给出优化建议:减少内存分配、使用sync.Pool复用对象、合理设置GOGC环境变量等。
2025-08-09 20:43:44
1091
9
原创 context包的由来及使用
Go语言context包为goroutine协作提供了标准化的解决方案,解决了传统并发编程中的取消信号传递、超时控制和数据共享难题。它通过树状结构管理Context,支持自动继承和级联取消,并提供了WithCancel、WithTimeout、WithDeadline和WithValue等方法。在实际项目中,context广泛应用于HTTP服务器、RPC调用、数据库操作等场景,实现了请求生命周期的统一管理、资源释放和链路追踪,极大提升了Go并发程序的可维护性和可靠性。其设计源自Google分布式系统实践,现
2025-07-25 20:26:18
947
6
原创 三分算法(求峰值)
小明在二维平面上放置了n门激光炮,第i门激光炮位于坐标 (−10e5,ai),射向靶点 (10e5,bi),形成n条线段。他想使用一条垂直于x轴且其中一个端点在x轴上的线段挡住所有激光炮的发射路线,这条线段的长度最短为多少?输入共n+1 行。第一行为一个正整数n。后面n行,每行 2 个由空格分开的非负整数表示aibi。输出共 1 行,一个浮点数表示答案(输出四舍五入到 2 位小数)。133333.33。
2025-06-21 21:51:16
368
原创 操作系统的结构设计
当操作系统执行进程管理、存储器管理、设备管理等操作时,由于大内核中这些都属于内核程序,所以执行时切换两次状态,切换为内核态时执行完这三个操作,再切换为用户态,但是如果是微内核,那么执行进程管理时,也需要获取内核程序的支持,此时在用户态,需要获取系统调用,切换状态,之后再回复用户态,再执行存储器管理再切换状态需要六次切换状态,比较影响系统性能。我们可以看见大内核和微内核的唯一区别有没有包含进程管理,存储管理,设备管理等与硬件无关的功能,所以内核的大和微就是内核包含东西的多少。
2025-06-08 17:32:01
206
5
原创 操作系统的系统调用
系统调用是操作系统提供给程序的接口,用于管理共享资源和服务请求。它涉及设备管理、文件操作、进程控制、通信和内存分配等功能。执行时,程序将参数存入寄存器,通过陷入指令进入内核态处理请求,完成后返回用户态继续执行。系统调用保证了资源互斥访问,关键操作都在内核态完成,而请求发起在用户态。
2025-06-08 17:11:47
445
原创 中断与异常
中断的作用是让出cpu的使用权给内核程序,中断包括内中断和外中断,不同的中断信号需要不同的中断处理程序,系统处理中断需要查询中断向量表来找到对应的中断出来程序。
2025-05-31 22:02:26
266
原创 操作系统的特性
这个同时可能是微观上交替的,比如两个进程访问磁盘,会交替访问,但是在宏观上是同时的,这个同时可能是微观上同时的,比如扬声器会同时播放游戏进程和音乐进程的声音。注意:并发性和共享性互为存在条件,有并发性才有共享性,有共享性才有并发性。即对内存空间的分时复用,比如把一个程序所需内存较大,先运行一部分程序,多个程序并发执行,但是**由于资源有限,**进程的执行不是一贯到底的,概述:共享指的是资源的共享,系统的资源可以供多个并发的进程共同使用,如果失去了并发性,系统只能串行的运行各个程序,每个程序都会一贯到底,
2025-05-31 21:16:34
352
原创 蓝桥杯——路径之谜
思路:箭靶上的数字代表的是经过的次数,我们用深度搜索每搜索一个点就标记这个点,并且 把对应列和行的次数减一,出口用一个方法判断,当到达(N,N)并且次数完全用尽时返回true。注意:下一个可以走的点一定是未被走过的,剩余次数大于0的,因为最后要输出路径,所以把路 径记录到一个集合中去,在回溯的时候,不仅要取消标记,还要把用过的次数加回来,最重 要的是记录的路径也要删除。
2024-04-15 20:37:37
464
2
原创 洛谷-入门[4] 数组-校门外的树(java题解)
这道题的解题关键是标记每一个位置树存在的状态比如说可以创建一个数组分别对应路上的每一颗树的位置,把每一个位置都标记有一棵树,再对要修地铁的位置标记为0棵树,最后遍历数组统计树的棵树即可
2023-12-22 20:47:32
719
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅