[凉经] 希音存储岗位面试复盘

185 天前
 liangkang1436

面试时常一个小时,没有做算法题

问题清单(只展示核心问题,简单八股就不列出来了):

  1. 你们公司的数据传输平台中,如何做 mysql 到 mysql 的传输?传输链路是如何设计的?
  2. 如何采集 Mysql 集群的 binlog 日志?有哪些方案?如果我要将 Mysql 的日志同步到其他数据库,有哪些方案?
  3. 假设 Mysql 里有一张 student 表,表里面有一个 name 字段,student 配置的是 utf-8 编码,但是 student 配置的是 GB2312 的编码,然后用 canal 去订阅,会有什么问题?
  4. 做 mysql 的数据同步的时候,全量的备份怎么做?比现在表里面已经一亿行的数据了,这个表的数据还在增加,现在我们要把这个数据往外进行全量的同步,应该怎么设计?
  5. kafka 的一条消息是有大小限制的,当我把 kafka 的消息大小限制调到很大的时候,比如一条消息 10m ,如何避免消费消息的时候撑爆内存出现内存溢出?
  6. 将一个 Mysql 数据库集群的 binlog 发送到 kafka 中,日志分区路由如何设计?
  7. 消费主题中的 binlog 的时候,有哪些办法可以加快 binlog 的消费速度?
  8. 两个 Mysql 集群进行双向同步,如何避免出现消息循环?

总结 面试官问的问题大多都是从业务出发,非常集中,主要问的场景就是问从 Mysql 到 Mysql 的如何进行数据传输,以及使用 Kafka 作为消息中间件的时候的一些生产和消费的问题。 好多问题没答上来不是面试官出题刁钻,存粹是我自己菜,最后也问了一下他们做业务的过程中的一些问题和进展,也算是有收获。

PS:面试官会引导面试者进行回答,非常 Nice

3453 次点击
所在节点    酷工作
23 条回复
v2exgo
185 天前
有点刁钻,很多都不是常见的
v2exgo
185 天前
可能你这个面试的是基础中间件岗位
coderonlee
185 天前
这是一面?
liangkang1436
184 天前
@coderonlee 是的
einvince
184 天前
复盘不把正确答案复盘下吗 😂
EMMMMMMMMM
184 天前
业务不是你自己菜, 也许他问的都是他的业务场景的问题, 你没遇到过没处理过,自然就答不上来了
zizon
184 天前
好奇第四个问题的背景.
直接 binlog 有什么问题?
v2exgo
184 天前
@zizon 要考虑线上同时运行的时候,如何做大表迁移,这个你的历史 binlog 肯定不在了,得先同步,保证从库跟主库某一时间节点的数据是一致的,然后才能接入 binlog 消费
v2exgo
184 天前
@zizon 还有一个思路就是 mysqldump 去导出,然后记录这个时间点开始的 binlog ,最后用 binlog 去重放保证最终一致性
v2exgo
184 天前
@zizon 估计面试也是要问你具体的因素的,像你大表,不可能用 limit offset 这个超过一定数量的时候有性能问题,所以你要考虑用主键,那用主键就要考虑步长的问题,mysql 主键自增也是可能有空隙的,如果主键不是自增的,你又要怎么处理,反正屁事很多,具体的业务场景你没做过,肯定都要想办法上网去查方案
v2exgo
184 天前
假设 Mysql 里有一张 student 表,表里面有一个 name 字段,student 配置的是 utf-8 编码,但是 student 配置的是 GB2312 的编码,然后用 canal 去订阅,会有什么问题?

这个问题估计编码可能有问题,因为 binlog 本质上内容还是 SQL ,如果 SQL 存在编码问题,那么从库的数据肯定就对不上了
v2exgo
184 天前
@zizon 然后 binlog 不是有几种模式,有 statement 跟 row mixed 模式,一般做这种同步,最好使用 row 模式,肯定也会问到的,八股文的东西太多了,我以前也看过,刚才才想起来,还有 binlog 的 row 格式
v2exgo
184 天前
@v2exgo #11

2. Binlog 事件中的字符集信息缺失
原因:

在 ROW 格式的 Binlog 中,字段的字符集信息通过 Table Map Event 传递。

若 Canal 未正确读取字段的 gb2312 字符集元数据,可能直接使用表默认的 utf8 解码。
liangkang1436
184 天前
@einvince 很多问题答案不唯一,而且大部分问题只是一个引子而已,答出来了面试官会根据你的回答问第二个第三个问题。所以就懒得放答案了。
liangkang1436
184 天前
@v2exgo 其实老哥已经答得差不多了,实际方案就是,确定一个时间为历史数据和增量数据的分割点,然后开启可重复读得事务,保证读取历史数据的时候,不被后续的更改干扰,然后用多线程得方式去读取历史数据(记得记录消费进度),或者其他的方式比如 mysqldump 把历史数据拉下来,然后到目的端恢复,恢复得时候也可以并发写入,历史数据发送完之后,再开始指定时间点之后得 binlog 日志,大概就是这个思路
zizon
184 天前
@v2exgo flink cdc 的方式有什么问题么?
coefu
184 天前
这些问题讲真用来面试,只能说面试的人水平确实不行,因为很多问题都是需要时间慢慢磨的。高明的面试只需要一个问题,不断的盘对于问题的认知和解决思路。解决问题的思路比具体问题更有价值。
liangkang1436
184 天前
@coefuqin 我这段时间面试,碰到的都是这些问题:笑哭:,现在用人单位要求高,也不缺简历,可能问问题就刁一些了。
v2exgo
183 天前
@coefuqin 没办法,很多时候 用人单位就是这样设计场景题的,首先是筛选外包那些菜的,另外就是筛选八股文不熟悉的,同步数据说到底就是那几个思路,先你得有一个快照,这个快照不能受到干扰吧,然后可重复读不是有 gap lock 么,这个你事务时间太长 gap-lock 是不是耽误别的数据进行一个写入呢?那是不是能采用小范围的读数据,把 gap-lock 的范围缩小,然后是不是能考虑用索引,这个时候是不是又要考虑 非唯一索引 跟唯一索引的 gap-lock 范围 以及位置,这些里面组合的情况很多的,你要根据实际情况 去做方案,做了方案还要做实施
v2exgo
183 天前
@coefuqin 很多时候,这些方案我也没实际做过,只是结合自己的经验来做判断,关键还是讲出自己的思路来

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1117045

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX