北京疯狂游戏一面
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.反问