- 博客(55)
- 收藏
- 关注
原创 go高性能单机缓存项目
其中的refreshTickerMap, expireTickerMap存放的是每个特定的刷新时间/过期时间对应的sharedTicker。每个sharedTicker负责多个相同刷新时间/过期时间的缓存池的更新/过期操作。NewAsyncCache 初始化 AsyncCache 实例。如果在缓存池中就刷新键值对过期时间。singleflight 处理请求。返回 AsyncCache 实例。GetOrSet 获取或设置缓存。为给定的键值对中的值设定默认值。Range 遍历缓存。Range 遍历缓存。
2024-12-12 21:03:36 1084
原创 多人聊天室 NIO模型实现
使用Channel代替Stream使用Selector监控多条Channel可以在一个线程里处理多个Channel I/O。
2024-12-04 20:46:44 633
原创 DIY-Tomcat part 2 实现Processor和Connector以及测试所用TestClient
实现Processor和Connector以及测试所用TestClient成功返回File not found的网页内容。成功返回对应的网页内容。
2024-11-29 15:48:40 499
原创 DIY-Tomcat项目 part 1 实现和测试Request以及Response
手搓一个Tomcat的简化模型 处理HTTP的请求和响应以及支持HTTP协议
2024-11-28 20:55:54 669
原创 贪心算法-Huffman树 不等式 推公式
算法(贪心,哈夫曼树,堆,优先队列) O(nlogn)𝑂(𝑛𝑙𝑜𝑔𝑛)经典哈夫曼树的模型,每次合并重量最小的两堆果子即可。时间复杂度使用小根堆维护所有果子,每次弹出堆顶的两堆果子,并将其合并,合并之后将两堆重量之和再次插入小根堆中。每次操作会将果子的堆数减一,一共操作 n−1次即可将所有果子合并成1堆。每次操作涉及到2次堆的删除操作和1次堆的插入操作,计算量是 O(logn)。因此总时间复杂度是 O(nlogn)
2024-11-25 17:10:09 551
原创 状态压缩DP 树形DP 以及记忆化搜索
原题解链接:https://www.acwing.com/solution/content/15616/解释一下st[j | k] :已经知道st[]数组表示的是这一列没有连续奇数个0的情况,我们要考虑的是第i-1列(第i-1列是这里的主体)中从第i-2列横插过来的,还要考虑自己这一列(i-1列)横插到第i列的 比如 第i-2列插过来的是k=10101,第i-1列插出去到第i列的是 j =01000,那么合在第i-1列,到底有多少个1呢?自然想到的就是这两个操作共同的结果:两个状态或。
2024-11-23 19:27:39 421
原创 极客时间 《Redis核心技术与实战》01 | 基本架构:一个键值数据库包含什么?知识总结
极客时间 《Redis核心技术与实战》01 | 基本架构:一个键值数据库包含什么?知识总结
2024-11-21 20:16:32 394
原创 线性DP 区间DP C++
三角形内的某个点,可以从这个点的左上方或右上方来到这个点,因此有状态转移方程:f[i, j] = max(f[i - 1, j - 1] + a[i][j], f[i - 1][j] + a[i][j])题二 最长上升子序列假设题目给出了n个数,这n个数存在了a[N]中:其中f[i] 表示以a[i]为结尾的最长上升子序列的长度(位置也是独特的,假设a[N]中有多个相同的数,他们的f值也不一定相同!!),则如果现在在计算第i个数的f[i]值,且遍历到了第j个数(j <= i) 并且 a[i] > a[
2024-11-14 21:09:01 401
原创 golang分布式缓存项目 Day6 防止缓存击穿
singleflight 是一个非常有用的包,它提供了一种机制来抑制对某个函数的多次重复调用。这个包特别适用于避免在高并发场景下对同一资源的重复请求,比如在缓存击穿问题中,多个请求同时访问同一个资源时,singleflight 可以确保这些请求中只有一个实际执行,其他请求则等待这个结果,从而减少对后端服务的压力核心概念singleflight 包中定义了一个名为 Group 的结构体类型,它表示一类工作,并形成一个命名空间,在这个命名空间中,可以使用重复抑制来执行工作单元。
2024-11-13 21:27:26 1515
原创 golang分布式缓存项目 Day5 分布式节点
概括性流程:fill:#333;color:#333;color:#333;fill:none;开始将多个服务器节点绑定到本地服务器gee上peers 监听8001, 8002, 8003端口并将端口监听到的请求交由peers绑定的ServeHTTP处理创建与用户面对的api客户端http.ListenAndServe 监听9999端口http.Handle处理路径为/api的请求发出http://localhost:9999/api?key=Tom的HTTP请求。
2024-11-13 20:23:02 1954
原创 golang HTTP基础
http.ListenAndServe 是 Go 语言标准库 net/http 包中的一个函数,用于启动一个 HTTP 服务器并监听指定的端口,以便接收和处理来自客户端的 HTTP 请求。这个函数是构建 Web 服务器和 Web 服务的基础。:一个字符串,指定服务器监听的网络地址和端口。通常格式为 “host:port”,例如 “:8080” 表示监听所有可用网络接口上的 8080 端口。如果省略 host 部分,默认监听所有网络接口**(即 0.0.0.0)。
2024-11-13 12:00:16 1108
原创 golang分布式缓存项目 Day2 单机并发缓存
var (mu.Lock()return gmu.RLock()return g一个 Group 可以认为是一个缓存的命名空间,每个 Group 拥有一个唯一的名称 name。比如可以创建三个Group,缓存学生的成绩命名为 scores,缓存学生信息的命名为 info,缓存学生课程的命名为 courses。第二个属性是 getter Getter,即缓存未命中时获取源数据的回调(callback)。第三个属性是 mainCache cache,即一开始实现的并发缓存。
2024-11-10 16:37:10 767
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人