2023.12.5(两场)

610 阅读7分钟

北京ILLA(www.illacloud.com/zh-CN )一面

  1. 自我介绍
  2. 有了解过低代码平台是做什么的吗?
  3. golang中假设写了一个函数,我在函数内部声明了很多临时变量,怎么分辨出这些变量是被分配到 go runtime的堆上还是栈上?
func TestFunc() {
    var a int
    b := "tt"
    var c = 0
    ...
}
  1. 假设我在函数中申请了一个比较大的slice,是分配到哪?
  2. 假设我在函数内部声明了一个整形,例如b := 2,有没有什么情况会导致b变量被挪到了堆区?
  3. 那你是怎么理解下面这段代码?
func F1() {
    b := 2
    return func(){
        return b+1
    }
}
  1. 你觉得闭包存在的意义,或者典型的应用场景是什么?
  2. 刚才咱讨论了整形或复杂数据结构的场景,那现在如果是在函数中声明了一个字符串string,你觉得是分配到堆区还是栈区?
  3. 如果我现在在一个func里头,定义了特别特别多的局部变量(假设1w个 var ...),你觉得会有什么问题?
  4. 发生这种情况时,go程序会直接崩溃吗?如果不会,你觉得为什么呢?
  5. GC在这个时候会做什么操作吗?
  6. 你觉得什么情况/使用场景会发生这样的问题?
  7. 编程题,字符串模式匹配
给定一个模板映射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)
  1. 反问

北京三个逗号(hoxigames)一面

  1. 自我介绍
  2. 之前了解我们这个岗位的主要工作内容吗?
  3. 有游戏方面相关的经验吗?平时玩游戏吗?
  4. 讲一下channel一般用于什么场景?
  5. 可以再具体展开讲讲你前面提到的项目中数据回写任务处理的MapReduce思路,说说具体是如何实现的?
  6. 回写订单数量一致性保障这一部分,什么情况下会发生数据丢失吗?
  7. 你在shopee这边主要做的都是这类数据处理任务的开发吗?有没有在线的业务?
  8. DB是用的什么?有遇到过什么MySQL的调优场景吗?
  9. 平时用的运维平台是什么?是怎么部署项目的?
  10. 本地是怎么运行和自测的?
  11. 之前有接触过什么长链接编程吗?(shopee这边接触的都是请求响应、定时轮询、数据处理任务)
  12. 算法题,画布涂色
输入 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 了,那就直接返回
  1. 分析一下代码的时间复杂度和空间复杂度
  2. 反问

2023.12.19 三个逗号二面

  1. 自我介绍
  2. 为什么考虑找游戏公司?对游戏有什么特别的兴趣吗?
  3. 除了游戏,对AIGC有了解吗?
  4. 工作上除了python和go,还用过其它语言吗?
  5. go和Java的pkg包管理有什么不同
  6. 在go中,假设我们写了2个类,想要2个类之间互相引用对方,怎么解决import循环依赖的问题?(游戏业务中经常会有,例如房间类和玩家类,房间需要挂很多个玩家,需要调用他们的一些属性,玩家也可能需要表示出正处于哪个房间,进入/离开房间时也会触发调用一些操作)
  7. go里头函数入参可以是interface{}类型,可以传入任何类型的参数,但是假设有个场景,我们定义了10种消息(10个不同的struct),我们希望这个参数只针对其中3个消息类型,而不支持其它7类消息时,我们应该怎样去定义这个参数类型呢?
  8. 你们现在的业务服务是如何部署的?
  9. 是微服务架构吗?微服务的通信机制/协议是什么?
  10. 你们的业务场景是不是都是无状态服务?
  11. 在游戏业务中,有很多是带状态的服务,例如一些对战类的游戏,那么相对传统互联网业务,在架构设计上有什么要注意的?
  12. 例如像王者荣耀这样的游戏,会有个匹配服务器的过程,那这种就不大适合所有的服务都是平行的拆分,比如说,由于一开始玩家很少,我们希望这些玩家集中匹配到一台服务器上,这个时候相当于要使得一些上游业务的流量都倾斜到一个节点上,而不能均匀的平行分发到不同的节点,在这种case下,假设我们的服务要跑在一个微服务的架构里,如何实现这种非对称的流量倾斜状态?(我理解是想问带权分治?)
  13. 假设在一个微服务环境下实现一个主备角色的进程关系,比如说这个集群上运行你的代码,会被分到很多个进程去运行(基于同一份代码),其中有的进程作为主节点,然后其它的作为备份节点,我们如果是直接部署是以一种平行的方式去启动的,那会有什么办法让他们变成一种主备关系?
  14. 什么场景下应该用MySQL,什么场景下应该用Redis呢
  15. Redis的原子操作该如何实现?
  16. Redis有哪些持久化的方式?
  17. Redis的持久化方式和MySQL的持久化方式有什么区别?为什么Redis要提供多种持久化策略?
  18. MySQL持久化用的数据结构是什么?
  19. 现在对深度学习的东西还记得多少?比如说想要你实现一个手写数字识别,流程大概是怎么样的?
  20. 代码题,不调用内置包math.pow()等函数,实现输入一个大于0的浮点数x,计算3次根号x