自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 AOI算法学习

Area of Interest,感兴趣区域,决定"服务器不把所有消息广播给所有人,而是按 AOI 算出"视野关系",只把相关实体的状态同步给相关玩家。

2026-06-27 16:06:03 168

原创 总算搞清skynet常见的数据流

socket 线程 epoll_wait收到数据→ socket_server_poll()(skynet_socket.c)→ 识别是 DATA / ACCEPT / CLOSE…打包成 skynet_socket_message,通过 forward_message()发回 Lua 世界→ 调 skynet_context_push(),塞进"这个 fd 绑定的那个 Lua 服务"的私有队列worker 线程从全局队列捞到这个服务的队列。

2026-06-24 23:16:32 205

原创 skynet源码学习

面试回答:关键代码全局队列:只存"非空且有待处理消息的私有队列"的引用私有队列:环形数组 + spinlock入队时"顺带把自己推进全局队列"的逻辑(核心中的核心)

2026-06-23 14:13:00 179

原创 工作中如何使用claude code帮助自己精准开发(进阶)

虽然他们有多个层级,但是和skill不一样,优先级高的层级里定义的 hook 不会被低层级的覆盖掉,而是各层的同名事件 hooks 数组合并,然后整体按来源优先级+定义顺序排列执行。实际使用中,如果你同时打开太多 MCP,主对话的可用上下文会被明显挤占,表现为更容易“健忘/跑偏”。所以只要我们自己手动配置好mcp的json配置,就不要敲指令一个个注册。,我的理解就是执行的脚本是确定的,比如我写好了一个shell脚本,它不会推断我发送的语义是否和这个shell有关,只要matcher匹配,就执行脚本。

2026-06-21 17:17:57 265

原创 工作中如何使用claude code帮助自己精准开发(入门)

由于国内很难使用到国外的ai agent,所以日常工作中都是用trae开发,虽然他生成的代码可以运行,我也会审核,没问题就放上线上运行。不过由于现在离职后,发现求职过程中,大部分岗位都是要会用claude code,我不得不学习如何使用。而使用各种ai协助开发也经常遇到一个问题,就是经常改代码会改把原有的代码改坏或ai新增的代码频繁改坏。这个导致我工作效率下降。所以通过学习claude code 官方文档补充claude code的使用技巧。

2026-06-16 00:30:00 270

原创 vscode安装claude code并加载deepseek模型记录

配置好模型和token,但是无法生成结果。

2026-06-08 17:21:12 214

原创 面试场景题——全服聊天

如果几万人同时发言,服务器怎么扛住?

2026-05-26 00:14:51 335

原创 skynet——服务发现学习

这里service表维护了名字到句柄的映射。当服务启动时,它会被注册到这个表中,后续其他服务可以通过名字查询到对应的句柄。

2026-05-25 16:17:05 146

原创 面试题——全局邮件的设计

普通邮件(读扩散 / Fan-in)逻辑:邮件存储在发送者的发件箱中。收件人需要查看邮件时,系统去所有发件人的发件箱里“拉取”属于自己的邮件。类比:像去邮局取信。信都堆在邮局(发送方),你需要自己去查有没有你的信。面试关键词:收件人主动拉取、按需聚合、读时计算。全局邮件(写扩散 / Fan-out)逻辑:发送邮件时,立即将邮件复制到每个收件人的收件箱中。收件人查看时,直接读取自己的收件箱即可。类比:像快递送货上门。快递员(系统)在发货时直接把信送到你家门口(收件人收件箱)。

2026-05-24 16:22:11 45

原创 skynet_fly开源框架学习

当手动触发热更新的时候,会调用到load_modules,此时就会他会退出旧服务,那么热更之后,其他服务要访问热更的服务时,就找不到最新的地址。所以服务创建之后,container_mgr会通过g_watch_map获取更新模块监听的名单,然后回复这些。所以对于已经被函数引用的变量,是不会有影响,对于模块级的会有影响。load_mods,配置各个服务的启动的配置,例如第几个开启、启动的实例数量。容器根据load_mods配置,分成立即启动和延迟启动的服务列表。在服务创建的时候,就会监听每一个服务。

2026-05-17 18:11:18 329

原创 基于Skynet的分布式游戏场景题:大型MMO的跨服战场系统设计

该文章只是为了练习场景题的分析框架,可能存在漏洞,欢迎交流。

2026-05-14 15:13:52 507

原创 MMO游戏中的“跨服团队副本”匹配与状态同步系统

在一个大型多人在线(MMO)游戏中,策划希望推出一个高难度的“世界级团队副本”。该副本需要20名玩家共同挑战。由于单服玩家数量有限,系统需要支持跨服匹配。副本内有复杂的机制,如多个阶段BOSS、团队资源(如团队怒气值)、可被玩家交互的环境物件。玩家共同挑战后,根据各自的贡献给予奖励。

2026-05-11 17:39:24 469

原创 Top K 问题终极指南:从游戏排行榜到算法面试

"""游戏排行榜简化实现"""self.k = k # 榜单长度self.heap = [] # 最小堆维护TOP Kself.player_data = {} # 玩家ID -> 分数"""更新玩家分数,并维护榜单"""# 简单的实现:每次更新都重新计算(实际会用更优方法)# 这里演示核心逻辑"""获取当前榜单"""temp = list(self.heap) # 复制一份return result[::-1] # 从高到低# 使用示例。

2026-05-08 17:25:20 308

原创 lua——哈希表详细学习

由上面的逻辑,我们可以看出其是通过获取上一次查询的键,提高遍历的效率,不需要每次都从头查找某个只在哪。其中最重要的接口就是find_next_hash_entry。其中find_next_key是其关键,本质就是next完成寻找下一个key的工作,接下来就详细讲解下next的工作机制。遍历字典通常是使用pairs,用一段伪代码讲述一下其运行的大概逻辑。返回桶0的第一个节点:x=1。结果:y=2 被完全跳过了!找到第一个非空桶:桶0。遍历器记住:当前是x。输出变成了:x, z。

2026-05-07 10:07:01 261

原创 通用后端面试题收集(持续中)

B+树索引就是mysql结合B树和索引顺序升级开发的一种平衡搜索树。实际底层实现跟B树没有关系。特点是非叶子节点只存储索引,而叶子结点存储实际的数据。所有叶子结点都是由一个双向链表管理和连接的,数据都是排好序的。因为这些特点,索引B+树适合进行范围查询。答:回表就是使用非聚簇索引搜索时,索引字段不包含搜索所需的字段,那么就要通过主键去查找完整数据的过程。往往会带来随机I/O操作,使得查询慢。

2026-05-01 22:09:10 384

原创 自己实现自定义协议的思考

对于聊天消息(假设Command ID=0x0001,私聊),其结构就是我们需要设计的“聊天消息体”。您需要将{sender_uid, content, timestamp}这三个字段(以及可能的其他字段,如target_uid)序列化成二进制。根据包头的 Command ID,知道这是一个聊天消息,调用对应的Protobuf解析函数,将包体数据反序列化成 ChatMessage对象。包头 (Header):用于描述包本身,与具体业务(聊天)无关。包体 (Body):承载具体的业务数据(如聊天消息)。

2026-05-01 21:52:44 253

原创 彻底理解HTTP、WebSocket与TCP的“爱恨情仇”

TCP 是地基:负责最底层的“把数据准确无误地送到”,不关心送的是什么内容。HTTP 是标准服务:建立在 TCP 之上,负责网页浏览、API 调用。( )WebSocket 是升级服务:也建立在 TCP 之上,但借用了 HTTP 的“入场券”(握手),然后升级为更高效的协议。

2026-05-01 19:39:54 227

原创 广播风暴架构优化方案思考

现在,假设“国战军情”需要向全服数千玩家广播时触发的场景。而当前的架构是“一对一”推送模型,其在广播场景下存在设计瓶颈。如果是你,你会怎么优化这个架构。

2026-04-27 16:12:43 191

原创 面试必问:Redis 数据结构实战选型指南

在游戏里设计排行榜,首先要明确几个核心需求:一是需要按分数实时排序;二是要能快速查询单个玩家的排名和分数;三是通常要能查询Top N的玩家列表。基于这三点,我会优先选择 Redis 的 Sorted Set(有序集合)。因为它底层是跳表实现,插入、删除、按分数范围查询的复杂度都是 O(log N),非常适合实时排序场景。它能直接满足我们‘按分数排序’和‘查询Top N’的核心需求。

2026-04-26 00:25:08 226

原创 Mysql——MVCC学习

MVCC,即多版本并发控制,是InnoDB实现高并发事务的核心机制。它的核心思想是:不通过加锁阻塞读写,而是为每一行数据维护多个历史版本,让读写事务可以无冲突地并发进行。这是InnoDB在“可重复读”和“读已提交”隔离级别下实现的关键。

2026-04-24 11:58:40 409

原创 数据结构学习——跳表

学习redis中sorted set的跳表原理

2026-04-19 16:51:16 35

原创 lua面试题收集

回答重点 :覆盖所有基本类型,突出 table 的特殊性,说明 number 的统一表示。回答范文 :Lua 共有 8 种基本数据类型:nil、boolean、number、string、function、userdata、thread、table。其中最核心的是 table,它是 Lua 唯一的复合数据结构,既是数组又是哈希表,底层通过哈希表和数组结合实现,整数键存储在数组部分,其他类型键存储在哈希部分。number 类型统一使用双精度浮点数表示,无需区分整数和小数,简化了类型系统。

2026-03-05 12:10:52 616

原创 聊天系统构思

真正的状态(频道消息、在线列表)需要下沉到共享存储(如Redis集群)或通过一致性哈希在节点间分布。WebSocket(全双工,实时)是首选,gRPC(基于HTTP/2,高效)也是好选择。需定义一套自己的消息信封(Envelope)协议,包含消息类型、发送者、目标频道、序列号、消息体等。需设计一个过滤器链,例如:先“强过滤”(替换为***),再“全词匹配”(记录日志),不同频道可以应用不同链。这里涉及系统消息的类型设计。安全:防止刷屏(频率限制)、防止超大消息、消息内容加密(TLS必须)、防重放攻击。

2026-02-10 22:32:42 629

原创 mongo权威指南(第三版)学习笔记

等值字段优先:尽快缩小扫描范围,提升索引选择性。例如,city等值过滤直接定位城市子集。排序字段次之:利用索引有序性避免内存排序。例如,username在索引中维护顺序。范围字段最后:防止范围查询中断索引连续性。例如,age范围过滤在匹配子集内进行。通用性:该原则适用于大多数多条件查询,尤其是结合过滤和排序的场景。实践过程中,建议使用explain验证查询语句执行情况。

2026-01-02 13:48:31 991

原创 RPC原理学习

允许一台计算机上的程序通过网络调用另一台计算机上程序中的子程序(即远程过程),并获取返回值,从而实现分布式计算。

2025-12-08 09:36:52 599 1

原创 GIt使用记录

git clone:克隆远程仓库git pull:拉取分支最新代码,等同于git fetch+git fetch:git add:提交本地修改文件到暂存区,该区域暂未提交到远程仓库,可回撤修改git commit:将暂存区文件提交到本地仓库git push:将本地仓库修改的代码推送到远程仓库git branch:查看当前所在分支或者查看仓库内所有分支git checkout:创建或切换分支git status:查看当前分支和远程分支的差异git reset:回退到指令版本。

2025-07-28 15:49:43 923

原创 Skynet入门(二)

在配置文件的luaservice配置项中增加service的路径。

2025-04-12 17:02:12 356

原创 lua学习(三)

确保某些数据是符合预期的,避免影响最终结果。:assert(条件语句,报错信息)当条件语句为true时,assert语句不会有任何行为,但是当为false时,assert会将报错信息弹出,并中断程序的执行。:由于断言只在调试模式下有效,因此在生产环境中通常会被禁用,以避免影响程序性能‌。

2025-03-15 16:30:36 942

原创 Skynet入门(一)

skynet 是一个为网络游戏服务器设计的轻量框架。但它本身并没有任何为网络游戏业务而特别设计的部分,所以尽可以把它用于其它领域。

2025-03-01 15:37:12 1858

原创 lua学习(二)

该参数是可选的指定函数是全局函数还是局部函数,未设置该参数默认为全局函数,如果你需要设置函数为局部函数需要使用关键字。指定函数名称。函数参数,多个参数以逗号隔开,函数也可以不带参数。函数体,函数中需要执行的代码语句块。函数返回值,Lua语言函数可以返回多个值,每个值以逗号隔开。

2025-03-01 10:05:04 665

原创 lua学习(一)

Lua 是一种轻量级、可扩展的脚本语言,设计目标是为了嵌入到其他应用程序中,以提供灵活的脚本功能。

2025-02-26 12:14:19 1276

原创 Django——安全机制学习

允许攻击者在受害者浏览器上执行未经授权的脚本,从而窃取 cookie、会话令牌或破坏页面内容。

2025-02-13 15:26:59 447

原创 go--并发学习

指当一个goroutine尝试获取一个已经被其他goroutine持有的锁时,它会进入一种持续检查锁状态的状态,而不是立即进入阻塞状态。这种机制被称为自旋锁(Spinlock)工作原理当一个goroutine请求自旋锁时,如果锁已被其他goroutine占用,那么当前goroutine会不断检查锁的状态,直到锁被释放,而非立即休眠。优点自旋线程数量上限为GOMAXPROCS(P的数量),避免CPU空转浪费。自旋锁避免了阻塞和上下文切换,从而减少了系统开销‌。

2025-02-04 17:29:16 957 1

原创 go——panic学习

panic一般跟recover、defer结合使用。当panic触发异常,当前函数会停止执行,然后执行当前函数中所有的defer。如果没有捕获panic的报错,程序会崩溃并输出堆栈信息。

2025-02-02 09:52:13 595

原创 GO——垃圾回收机制学习

白色:未被访问的对象(待回收)。灰色:已访问但子对象未检查。黑色:已访问且子对象已检查。

2025-01-31 11:16:24 1050

原创 python垃圾回收机制学习

python自动回收内存中的不再使用的对象,它的目的是避免常见的内存泄漏问题。

2025-01-28 23:50:35 893

原创 python面试题收集(持续更新)

本篇精简为python相关面试,通用的面试题移至《通用后端面试题收集(持续中)》

2025-01-23 11:56:39 1225

原创 JMeter学习记录

从使用上,该控制器其实就是自动帮你拼接引用字段,例如数据库输出变量是mobilephone,然后ForEach中填写的开始字段startidx代表从startidx+1开始拼接,获得mobilephone_1,mobilephone_2…如何获取返回的token,并在后续请求中使用,在获取token的http请求后面添加一个后置处理器——正则表达式提取器。匹配数字:代表获取返回数组中第几个数据,-1代表全部,0代表随机,1代表第一个。模板:$$对应提取器类型,-1代表全部,0代表随机,1代表第一个。

2025-01-21 10:49:57 1122

原创 python并发编程学习——asyncio

Python在处理I/O密集型任务时遇到的问题。传统的多线程编程模型在处理大量I/O操作时,由于线程创建和管理的开销,效率较低。为了解决这个问题,Python从3.4版本开始引入了asyncio库,它能够在单个线程内实现并发,避免了多线程带来的开销,从而提升了性能并降低了复杂度。

2025-01-15 20:08:44 785

原创 python——元类学习

super(Mymeta, self).__init__(class_name, class_bases, class_dic) # 重用父类的功能raise TypeError('类名%s请修改为首字母大写' %class_name)raise TypeError('类中必须有文档注释,并且文档注释不能为空')pass。

2025-01-11 18:12:30 337

空空如也

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

TA关注的人

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