- 博客(12)
- 收藏
- 关注
原创 SSE(Server-Sent Events,服务端推送事件),为什么大模型使用SSE进行消息推送
SSE(Server-Sent Events)是一种基于HTTP协议的服务端推送技术,允许服务器向客户端持续发送数据流,适用于单向通信场景。其特点包括实现简单、自动重连和轻量级,主要用于文本数据传输。SSE通过HTTP长连接实现,服务器返回特定头部信息,客户端使用EventSource监听数据流。SSE在文件下载、大模型流式文本生成等场景中表现优异,因其低实现成本、单向数据流需求和内置断线重连机制。然而,SSE不适用于双向实时通信、二进制流传输、超低延迟要求和移动端弱网环境。技术选型应根据具体需求,选择最适
2025-05-21 16:02:29
1185
原创 golang实习/秋招自学笔记
我的github :luminescenceJ ref :面向对象编程(OOP)的三大核心特性1.封装 :将数据(属性)和行为(方法)绑定在一个类中,并对外隐藏内部实现细节,仅通过公共接口与外界交互。2.继承(Inheritance):子类继承父类的属性和方法,并可以扩展或重写这些行为,实现代码复用和分层抽象。3.多态(Polymorphism):同一操作在不同对象上表现出不同行为,通常通过继承(方法重写)或接口实现如果一个 struct 嵌套了另一个匿名结构体,那么这个结构可以直接访问匿名结构体的属
2025-05-20 19:17:14
1403
原创 golang协程池库ants的分析和拆解
自旋锁是指当一个线程(在 Go 中是 Goroutine)在获取锁的时候,如果锁已经被其他线程获取,那么该线程将循环等待(自旋),不断判断锁是否已经被释放,而不是进入睡眠状态。下次取就直接从 stack 中再获取了。在初始化 pool 的时候,就初始化了 capacity 长度的循环队列,取的时候从队头取,插入的时候往队列尾部插入,整体 queue 保持在 capacity 长度。条件变量配合互斥锁使用,是为了确保“检查条件 + 挂起等待”这一步是原子操作,避免竞态和虚假唤醒,确保被唤醒后的逻辑是正确的。
2025-05-20 18:59:07
1338
原创 golang中的各种锁,应用和原理浅析【互斥、自选、读写】,CAS和条件变量
golang中的锁和控制同步的常见方法,以ants为例的条件变量源码解析。
2025-05-16 16:57:23
824
原创 鹅厂一面golang凉经
为什么使用redis作为消息队列优点:缺点:消息队列是全局的还是局部队列在etcd里面是怎么来做的?消息越来越多怎么进行水平扩展?消息队列层?缓存一致性是怎么处理的? 写db写成功了删缓存删失败了怎么处理库存和高并发情况下抢资源的问题预扣库存:下单时先扣减 Redis 中的库存( 原子操作),支付完成后再同步到 DB。分布式锁:使用 Redis 或 etcd 实现互斥锁,避免超卖。队列削峰:将请求放入队列(如 Kafka),异步处理避免瞬时压力。限流降级:通过令牌桶或漏桶算法限制并发请求。nginx如
2025-03-23 15:07:09
787
原创 Redis介绍,原理,数据结构,应用场景和一致性问题
锁在程序中的作用就是同步工具,保证共享资源在同一时刻只能被一个线程访问,Java中的锁我们都很熟悉了,像synchronized 、Lock都是我们经常使用的,但是Java的锁只能保证单机的时候有效,分布式集群环境就无能为力了,这个时候我们就需要用到分布式锁。分布式锁,顾名思义,就是分布式项目开发中用到的锁,可以用来控制分布式系统之间同步访问共享资源。思路是:在整个系统提供一个全局、唯一的获取锁的“东西”,然后每个系统在需要加锁时,都去问这个“东西”拿到一把锁,这样不同的系统拿到的就可以认为是同一把锁。
2025-03-19 09:36:36
1795
原创 etcd的实现和原理
存储 Key-Value 数据,每个 Key 都有多个版本(revision)。,当租约过期,Key 会自动删除,适用于。(类似 SQL 事务),避免并发冲突。的分布式 KV 存储,常用于。etcd 内部是一个。,避免并发修改冲突。
2025-03-19 09:34:53
1701
原创 leetcode hot100,三数之和,最长连续序列的golang解法
给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i!= k ,同时还满足 nums[i] + nums[j] + nums[k] == 0。输入:nums = [0,3,7,2,5,8,4,6,0,1]不同的三元组是 [-1,0,1] 和 [-1,-1,2]。输入:nums = [100,4,200,1,3,2]输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]时间复杂度: O(N^2)
2025-03-17 20:27:41
815
原创 golang 官方排序包 sort 解析和使用
它调用一次 data.Len 来确定 n,并调用 O(n*log(n)) 次 data.Less 和 data.Swap。,因此,官方也实现了Int,float64,string类型的sort.inferface接口实现。函数是 sort 包实现的二分下界查找,用于在排序的整数切片中搜索大于等于给定元素。,arr是int类型的切片,将会原地进行升序排序。分别对float64和string类型的切片进行升序排序。Sort 按 Less 方法确定的升序对数据进行排序。注意:传入的数组需要是有序的!
2025-03-10 16:38:39
468
原创 线段树维护区间最大值的思路和实现 golang
用线段树维护 baskets 的区间最大值。对于 x=fruits[i],在线段树上二分找第一个 ≥x 的数。从左到右枚举原序列的值,再枚举目标序列,使用bool数组记录是否选取过。这种方法会导致超时。其中,[0,N)表示区间内部维护的最大值,[N,2N-1]维护叶子节点的最大值。以数组[3,1,4,1,5,9,2,6]为例,线段树如图所示。从左到右依次寻找大于目标值序列的最小值,不可重复选取。数组总长度N=8,需要维护的线段树长度为2N-1=15。否则,把对应的位置改成 −1,表示不能放水果。
2025-03-10 14:04:24
501
原创 最长有效括号、二叉树转累加树、合并升序链表思路解析与实现 Leetcode hot100
但是无法解决最后栈中仍然剩余的 不一定完全闭合的括号对,因此,遍历完成之后,还要对栈中的数据再次遍历。下一个位置时 ‘)’ 时,考虑curBracket的数量(不能直接出栈,因为要记录最大连续数量,出栈之后无法判断是否连续).当curBracket ==0 时,表示 ) 是多余的括号,在这里连续条件不满足了,直接栈清空。当curBracket > 0,表示有 ( 可以匹配,直接放入,这时候的栈大小就是最新的答案。考虑用栈模拟闭合的有效括号,使用curBracket记录栈内多余的 '('数量。
2025-03-06 10:55:17
4070
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1