并查集
建立具有联通关系的集合的数据结构;什么是连通性:A->B, B->C, 则A->C。ABC就可以划在一个具有联通关系的集合中。 基础结构是father数组 int father[MAXN]; void init(int n) { for(int i = 0; i < n; i++) { father[i] = i; } } vo...
建立具有联通关系的集合的数据结构;什么是连通性:A->B, B->C, 则A->C。ABC就可以划在一个具有联通关系的集合中。 基础结构是father数组 int father[MAXN]; void init(int n) { for(int i = 0; i < n; i++) { father[i] = i; } } vo...
前言 本人本科阶段的第一段实习在月初结束,最近需要准备简历去投递秋招,在这里对实习经历中的工作内容介绍、技术点介绍、困难点介绍进行总结,方便后续简历的编写。 实习内容 职务:服务器开发(go) 工作时间:2025年3月-2025年7月 负责两款游戏服务器开发,全程参与游戏需求的抽象、protobuf协议设计、游戏逻辑开发、测试验收至上线部署全过程; 部分游戏采用快照同步的模式,能...
长达五个月的实习告一段落,从三月份到七月份的实习经历,需要写篇比较长的文章来进行系统的总结,方便后续复盘掌握的知识 笔者是在一家小型游戏公司实习的,从事的岗位是游戏服务端的开发,主要开发语言是go。下面我将从几个方面进行这段经历的 总结: 认识点 技术点 解决的线上问题 困难点 认识点 这次游戏公司的实习之旅算是打开笔者的游戏开发的大门,游戏服务器开发和传统的互联网...
别名算法 go 版本 package main import ( "errors" "math/rand" "time" ) type WeightedRandom struct { values []interface{} weights []float64 aliases []aliasEntry count int } type aliasEntry st...
Go 语言基础 包管理相关 Go 如何进行依赖管理 向mod文件中添加依赖,使用 go get go get -u modpath Go 内存管理 / 数据结构 go的内存管理由语言内部的垃圾回收机制实现,无需开发者自己操心。但是我们需要知道定义什么数据类型会将向什么区域申请内存,什么时候会发生内存歉意。所以Go内存管理会和Go的常用数据结构放在一起讲。 类型零值 逃逸分析...
func Map[T any, R any](slice []T, fn func(T) R) []R { result := make([]R, len(slice)) for i, v := range slice { result[i] = fn(v) } return result }
玩家量少时,场景数据的同步可以简单的选择广播的方式,但是,当玩家数量超过一定数量级,广播可能会导致同步延迟增大。既然广播不行,那么我们选择组播。场景数据或玩家数据的自定义组播被称为AOI(Area Of Interest)技术。在服务端有单独的AOI系统来指导玩家数据的同步。 首先我们来思考下多个玩家同时存在在同一场景中,当前玩家如何实时看到视野内其他玩家的状态变化?场景内玩家数量比较少时...
笔者接触分布式系统后,经常遇到需求需要配合其他进程的服务才能完成,跨进程通信是多进程配合的基础,也是分布式系统实现的核心。最常用的跨进程通行的方式有两种:RPC(Remote Procedure Call)和MQ(Message Queue)。笔者也是经常疑惑面对何种需求时使用何种跨进程通信方式,这篇文章做出一些自己的心得。 先简单介绍一下RPC和MQ的区别点: 耦合关系:RPC中...
为什么Actor模型在高并发下的并发效率远高于传统锁同步模型?在高并发的环境下,大量请求访问共享资源,为保证一致性,共享资源的访问需要是同步访问,当大量请求到来时,会有大量的锁竞争,如果只是自旋锁,锁阻塞不会释放CPU资源,就导致大量的线程积压。线程积压会导致系统调度的复杂度增加,进而导致整个系统的运行效率下降。 为什么Actor下高并发不会带来这个问题呢?首先我们要知道Actor模型的核...
如何在编写代码时就发现结构体是否实现某个接口呢?为了方便我们在编写代码时就能发现错误,Go语言提供了编译期间的类型检查。我们可以通过一个简单的技巧来实现这一点。 type MyInterface interface { MyMethod() } type MyStruct struct{} var _ MyInterface = (*MyStruct)(nil) 在上面的代...