当前位置: 首页 > 面试经验 >

腾讯音乐-全民K歌国际版面经-Go社招-超硬-7.19

优质
小牛编辑
58浏览
2024-07-29

腾讯音乐-全民K歌国际版面经-Go社招-超硬-7.19

  1. 面试官先做一个简单的介绍:面的岗位是 腾讯音乐-全民k歌-国际版-直播歌房后台研发工程师的一个岗位;你应聘的这个岗位主要是做直播相关的一些功能;开发语言go和c++
  2. 5分钟以内的自我介绍
  3. 你们公司为社么技术团队裁撤之后会留下你一个人
  4. 这个岗位是base深圳你能接受吗
  5. 项目-系统重构-数据迁移
    1. 你是怎么理解微服务的
    2. 为什么会提升系统的可拓展性
    3. 那他相比于单体的服务有什么缺点么
    4. 服务之间还要通信,这也需要成本,这里的成本指的是什么成本,它的成本体现在哪
    5. 你做了一个系统重构的事情,把数据库从MongoDB迁移到mysql。为什么要做这个事情?
    6. 你做的这个选择并不是从0到1的一个技术选型,你们项目原来用的MongoDB然后你们改成了mysql嘛。那你怎么评估你去迁移一个异构的DB的这个成本的问题呢。因为你的迁移过程也会提升的一些工作量,你要把原来Mongo的数据同步到mysql里面,那你这个同步也是需要很大的工作量的。 就是你考虑的就只是他的一个成熟度(mysql比mongo成熟)或者说mysql被其他开发同学更容易接受的程度来做的迁移吗
    7. mysql支持事务,mongo不行,那如果是选用那种最终一致性的方案呢?有什么原因导致你们不使用这种方案呢?
    8. 你在迁移的过程中,数据的同步是怎么做的?(我的回答:新的数据库写到mysql,然后写脚本将老的mongo数据迁移到myql)
    9. 在你迁移的过程中,一个业务既要读新的数据又要读老的数据怎么办
    10. 你这样迁移有点暴力,如果你迁移过程中有一些数据异常的话你怎么发现呢?还有一个问题是你这个是异构的数据库迁移,他们两个不是一种类型的数据库,那你这个中间怎么办保证每一条数据正常的迁移到了每一个mysql的数据库中
    11. 一个场景:假如有一个唯一键,他在mongo里面已经有这条数据了,你切到写新的mysql 的时候,因为没有这条数据,那他又被重复写了一次是么?
  6. 项目- 优化服务器
    1. 优化服务器引入了一个分布式缓存的技术,这个具体是怎么实现的
    2. 那你是怎么保证redis缓存和数据库的数据一致性的 (脑瘫了我:我回答的是缓存先写数据库后写。。。)
    3. 那你如果写缓存成功,数据库失败,那你缓存读到的就是一个脏数据吗
    4. 先写数据库成功后再写redis,那如果缓存更新失败了呢?你怎么知道什么时候该将数据库的数据同步到缓存?同步是怎么做的?
    5. 缓存有那种过期时间的极致吗?还有不会过期一直生效的?
    6. 有过期的话多久过期
    7. 那如果缓存同时过期会有什么问题?怎么解决这个问题
  7. 项目-数据抓取业务
    1. kafka在这里面扮演的什么角色
    2. 这个业务为什么要经过kafka这一层
    3. 你们的账号的量有多大
    4. 像你说的为了避免同一时间压力过大的话,也可以把定时任务的执行时间分散的呀,kafka没有体现出他的一个价值。因为你的触发是定时任务控制的,并不是一个不可控的事情。并不是像有用户请求有高峰期这种情况嘛,那用kafka来做这个削峰就没有太大意义了。那还有其他考虑导致你们用kafka吗
    5. 防止账号丢失问题,但是你本来就有一个确认机制嘛,如果丢失了的话,当作下游处理失败的一个方式重新触发不就行了
  8. 项目-抖音微信小游戏归因业务
    1. 微信小游戏的token怎么存的?存在sync.map里面。是服务内存吗?为社么会使用服务内存?
    2. 为什么没有使用redis或者其他的外部的缓存方案
    3. 你的用户量多少?
    4. 你使用这种方案的话,假如现在有一百个这样的实例,你的用户量有两万的话,那每个实例都会存两万的用户的token,那这种方案有没有什么缺陷?(当时脑子懵了,我被面试官带进去了,我们这个sync.map存的不是用户的token,存的是游戏的token,就归因2个游戏,100个实例最多也就缓存200个token到内存,而不是2万个用户x100,按照用户来存的话肯定就得用redis了,哭死。°(°¯᷄◠¯᷅°)°。)
  9. mysql
    1. mysql中索引是怎么实现的
    2. 那为什么可以使用b树来实现?为什么mysql里面不使用b树
  10. go
    1. 切片是怎么实现的
    2. 如果在go里面并发的去读写一个map的话会出现什么问题?可能会导致panic,为什么要做这种拦截呢?
    3. 那如果要并发的去读写一个map的话要怎么解决
    4. go里面的sort排序是怎么实现的?
    5. 快排是什么?是稳定的吗?
    6. 协程和线程有什么区别?线程开销大的原因是什么?协程里面也是有上下文切换的,为什么线程会消耗更多的cpu资源?
  11. 算法手撕
  12. 反问
    1. 做app的后台,团队主要负责商业化的一些功能,包括直播,歌房,游戏等都是我们团队负责的

=======================总结=======================

  • 这场面试的质量很不错,顶级大厂的面试官很有实力
  • 一直在忙于交接和工作,完全没准备,裸面,项目这块被拷打了,通过这场面试算是知道自己项目上准备的不充分和薄弱点(项目的每一步设计要多想想为什么这么做,出于什么考虑)
    • 缓存和数据库一致性这块没讲好
    • kafka当时的理解不够深入,这一块也没讲好
    • token缓存这块被带进去了,讲错了这样设计的真正原因
  • 这场面试全程被面试官牵着鼻子走,以后得学着将面试官往自己会的方向引了
  • 今天复盘的时候感觉很可惜,当时项目这块答的漏洞百出,如果现在面的话也许会是一个新的结果了
  • 有点可惜,以面促学吧
#腾讯音乐##Golang社招##项目##腾讯##一面#
 类似资料: