2023.10.30 游戏中台

206 阅读2分钟

北京疯狂游戏一面

1.自我介绍

2.财务业务中,你做了哪些设计来保证金额数据的准确性?(例如,业务涉及多步骤,某一步出了问题怎么解决)

3.如何解决单个业务直接报错的数据准确性问题

4.分布式场景下,多个服务的数据一致性如何保证?

5.有一个表,取其中的3列做了一个联合索引,这时的索引匹配规则是怎么样?

6.索引为(a,b,c) where条件是where a=…. and c=…. 会走索引吗

7.索引的数据结构是怎样的

8.B树和B+树的区别

9.有没有遇到过mysql 在线上的性能问题吗(例如并发请求数过多)

10.不确定的情况如何排查,找到哪个具体的SQL是瓶颈,能说说一般你的排查思路吗

11.redis 支持事务吗?

12.为什么mysql 采用行式存储结构,而hive 采用列式存储的,它们之间的区别是什么?

13.golang 的赋值和传参是值传递还是引用传递?

14.map 是线程安全的吗?为什么?

15.sync.map内部是如何实现并发安全的?

16.你自己是怎么实现一个并发安全的map呢?

17.分桶的目的是什么?

18.共享屏幕,代码题:扁平数组转tree 

给定一个扁平数组,数组内每个对象的id属性是唯一的。每个对象具有pid属性,pid属性为0表示为根节点(根节点只有一个),其它表示自己的父节点id。

编写一段程序,输入为给定的扁平数组,输出要求为一个树结构,为其中每个对象增加children数组属性(里面存放child对象)。

解法有很多种,性能最优的方案最佳。可以不用处理输入输出,专注实现核心逻辑即可

输入:

[

  {"id": 1, "name": "部门1", "pid": 0},

  {"id": 2, "name": "部门2", "pid": 1},

  {"id": 3, "name": "部门3", "pid": 1},

  {"id": 4, "name": "部门4", "pid": 3},

  {"id": 5, "name": "部门5", "pid": 4},

  {"id": 6, "name": "部门6", "pid": 3}

]

  


输出:

{

  "id": 1,

  "name": "部门1",

  "pid": 0,

  "children": [

    {

      "id": 2,

      "name": "部门2",

      "pid": 1,

      "children": []

    },

    {

      "id": 3,

      "name": "部门3",

      "pid": 1,

      "children": [

        {

          "id": 4,

          "name": "部门4",

          "pid": 3,

          "children": [

            {

              "id": 5,

              "name": "部门5",

              "pid": 4,

              "children": []

            }

          ]

        },

        {

          "id": 6,

          "name": "部门6",

          "pid": 3,

          "children": []

        }

      ]

    }

  ]

}

19.(写代码过程中被提问)你定义这个node 结构体的时候,如果字段id 和name两个不同类型的顺序调整一下,有什么区别?

20.用户金币数实时排行榜,如果让你在内存中实现,你将如何设计数据结构?

21.反问