- 自我介绍
- 有了解过低代码平台是做什么的吗?
- golang中假设写了一个函数,我在函数内部声明了很多临时变量,怎么分辨出这些变量是被分配到 go runtime的堆上还是栈上?
func TestFunc() {
var a int
b := "tt"
var c = 0
...
}
- 假设我在函数中申请了一个比较大的slice,是分配到哪?
- 假设我在函数内部声明了一个整形,例如
b := 2,有没有什么情况会导致b变量被挪到了堆区?
- 那你是怎么理解下面这段代码?
func F1() {
b := 2
return func(){
return b+1
}
}
- 你觉得闭包存在的意义,或者典型的应用场景是什么?
- 刚才咱讨论了整形或复杂数据结构的场景,那现在如果是在函数中声明了一个字符串string,你觉得是分配到堆区还是栈区?
- 如果我现在在一个func里头,定义了特别特别多的局部变量(假设1w个 var ...),你觉得会有什么问题?
- 发生这种情况时,go程序会直接崩溃吗?如果不会,你觉得为什么呢?
- GC在这个时候会做什么操作吗?
- 你觉得什么情况/使用场景会发生这样的问题?
- 编程题,字符串模式匹配
给定一个模板映射map
var lt map[string]string{"name1": "alice", "name2": "jack"}
- 输入一个字符串:my name is {{name1}}
- 输出为:my name is alice
- 输入一个字符串:my name is {{name1}}, he is {{name2}}
- 输出为:my name is alice, he is jack
- 输入一个字符串:my name is {{name1{{name2}}}}
- 输出为:my name is {{name1jack}}(最小匹配原则)
注意事项:
1. {{}}中的字符在map中找到了匹配的key,则将其替换为value,找不到则不替换
2. 左右边界必须为双括号包裹才合法,像{name1},{{name1}等均不替换
3. 多余的空格是合法的,像{{ name1 }}也需要替换
4. 需要满足最小匹配原则,即当有嵌套关系时,只替换最里头的key, 例如{{name1{{name2{{name3}}}}}},只替换name3
5. 不能用正则表达式,不能用go中的strings包中方法
6. map中的key是不会存在括号的
7. 时间复杂度控制在O(n)
- 反问
北京三个逗号(hoxigames)一面
- 自我介绍
- 之前了解我们这个岗位的主要工作内容吗?
- 有游戏方面相关的经验吗?平时玩游戏吗?
- 讲一下channel一般用于什么场景?
- 可以再具体展开讲讲你前面提到的项目中数据回写任务处理的MapReduce思路,说说具体是如何实现的?
- 回写订单数量一致性保障这一部分,什么情况下会发生数据丢失吗?
- 你在shopee这边主要做的都是这类数据处理任务的开发吗?有没有在线的业务?
- DB是用的什么?有遇到过什么MySQL的调优场景吗?
- 平时用的运维平台是什么?是怎么部署项目的?
- 本地是怎么运行和自测的?
- 之前有接触过什么长链接编程吗?(shopee这边接触的都是请求响应、定时轮询、数据处理任务)
- 算法题,画布涂色
输入 canvas 是一个仅包含 '0' '1' '\n' 的字符串。
每行的字符数量一定相同,整个字符串末尾没有 '\n'。
长、宽的范围都是 1 ~ 30。
例如:输入 "0000001000\n0000110110\n0000100010\n1110011110\n0001000000"
表示:
0000001000
0000110110
0000100010
1110011110
0001000000
现在需要从画布左上角开始,将相邻的 0 全部改成 1。
涂色只会向上下左右蔓延,不会斜向蔓延。
输出:
1111111111
1111110111
1111100011
1111111111
0001111111
如果画布左上角已经是 1 了,那就直接返回
- 分析一下代码的时间复杂度和空间复杂度
- 反问
2023.12.19 三个逗号二面
- 自我介绍
- 为什么考虑找游戏公司?对游戏有什么特别的兴趣吗?
- 除了游戏,对AIGC有了解吗?
- 工作上除了python和go,还用过其它语言吗?
- go和Java的pkg包管理有什么不同
- 在go中,假设我们写了2个类,想要2个类之间互相引用对方,怎么解决import循环依赖的问题?(游戏业务中经常会有,例如房间类和玩家类,房间需要挂很多个玩家,需要调用他们的一些属性,玩家也可能需要表示出正处于哪个房间,进入/离开房间时也会触发调用一些操作)
- go里头函数入参可以是interface{}类型,可以传入任何类型的参数,但是假设有个场景,我们定义了10种消息(10个不同的struct),我们希望这个参数只针对其中3个消息类型,而不支持其它7类消息时,我们应该怎样去定义这个参数类型呢?
- 你们现在的业务服务是如何部署的?
- 是微服务架构吗?微服务的通信机制/协议是什么?
- 你们的业务场景是不是都是无状态服务?
- 在游戏业务中,有很多是带状态的服务,例如一些对战类的游戏,那么相对传统互联网业务,在架构设计上有什么要注意的?
- 例如像王者荣耀这样的游戏,会有个匹配服务器的过程,那这种就不大适合所有的服务都是平行的拆分,比如说,由于一开始玩家很少,我们希望这些玩家集中匹配到一台服务器上,这个时候相当于要使得一些上游业务的流量都倾斜到一个节点上,而不能均匀的平行分发到不同的节点,在这种case下,假设我们的服务要跑在一个微服务的架构里,如何实现这种非对称的流量倾斜状态?(我理解是想问带权分治?)
- 假设在一个微服务环境下实现一个主备角色的进程关系,比如说这个集群上运行你的代码,会被分到很多个进程去运行(基于同一份代码),其中有的进程作为主节点,然后其它的作为备份节点,我们如果是直接部署是以一种平行的方式去启动的,那会有什么办法让他们变成一种主备关系?
- 什么场景下应该用MySQL,什么场景下应该用Redis呢
- Redis的原子操作该如何实现?
- Redis有哪些持久化的方式?
- Redis的持久化方式和MySQL的持久化方式有什么区别?为什么Redis要提供多种持久化策略?
- MySQL持久化用的数据结构是什么?
- 现在对深度学习的东西还记得多少?比如说想要你实现一个手写数字识别,流程大概是怎么样的?
- 代码题,不调用内置包math.pow()等函数,实现输入一个大于0的浮点数x,计算3次根号x