V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 外包信息请发到 /go/outsourcing 节点。
• 不要把相同的信息发到不同的节点
liangkang1436
V2EX  ›  酷工作

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

  •  1
     
  •   liangkang1436 · 3 天前 · 2013 次点击

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

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

    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

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

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

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

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

    若 Canal 未正确读取字段的 gb2312 字符集元数据,可能直接使用表默认的 utf8 解码。
    liangkang1436
        14
    liangkang1436  
    OP
       2 天前 via Android
    @einvince 很多问题答案不唯一,而且大部分问题只是一个引子而已,答出来了面试官会根据你的回答问第二个第三个问题。所以就懒得放答案了。
    liangkang1436
        15
    liangkang1436  
    OP
       2 天前
    @v2exgo 其实老哥已经答得差不多了,实际方案就是,确定一个时间为历史数据和增量数据的分割点,然后开启可重复读得事务,保证读取历史数据的时候,不被后续的更改干扰,然后用多线程得方式去读取历史数据(记得记录消费进度),或者其他的方式比如 mysqldump 把历史数据拉下来,然后到目的端恢复,恢复得时候也可以并发写入,历史数据发送完之后,再开始指定时间点之后得 binlog 日志,大概就是这个思路
    zizon
        16
    zizon  
       2 天前
    @v2exgo flink cdc 的方式有什么问题么?
    coefuqin
        17
    coefuqin  
       2 天前
    这些问题讲真用来面试,只能说面试的人水平确实不行,因为很多问题都是需要时间慢慢磨的。高明的面试只需要一个问题,不断的盘对于问题的认知和解决思路。解决问题的思路比具体问题更有价值。
    liangkang1436
        18
    liangkang1436  
    OP
       2 天前 via Android
    @coefuqin 我这段时间面试,碰到的都是这些问题:笑哭:,现在用人单位要求高,也不缺简历,可能问问题就刁一些了。
    v2exgo
        19
    v2exgo  
       2 天前
    @coefuqin 没办法,很多时候 用人单位就是这样设计场景题的,首先是筛选外包那些菜的,另外就是筛选八股文不熟悉的,同步数据说到底就是那几个思路,先你得有一个快照,这个快照不能受到干扰吧,然后可重复读不是有 gap lock 么,这个你事务时间太长 gap-lock 是不是耽误别的数据进行一个写入呢?那是不是能采用小范围的读数据,把 gap-lock 的范围缩小,然后是不是能考虑用索引,这个时候是不是又要考虑 非唯一索引 跟唯一索引的 gap-lock 范围 以及位置,这些里面组合的情况很多的,你要根据实际情况 去做方案,做了方案还要做实施
    v2exgo
        20
    v2exgo  
       2 天前
    @coefuqin 很多时候,这些方案我也没实际做过,只是结合自己的经验来做判断,关键还是讲出自己的思路来
    qingyingwan
        21
    qingyingwan  
       2 天前
    @v2exgo 这不算核心问题,九成靠经验吧。真实业务场景极少遇到的不算核心,只能说刁钻。反正我大厂高并发后端深入技术干过,创业公司全能后端也做过,没遇到过一次。各种成熟的三方工具,比如想的方案厉害多了。深究细节的话,比如你去研究下 mysql 的架构和源码,即使只读懂一百行 C++,也可以直接问倒任何考八股文的面试官。再比如,内存屏障,原子操作,在各种 CPU 架构上如何实现,这种细节随便都可以问倒一批人,我马上查一下就知道了,但我知道这些,也并不比不了解的答主厉害,因为他也会搜索会问 ai 。
    v2exgo
        22
    v2exgo  
       2 天前
    @qingyingwan 我知道,这个时候,其实你也是要去表达的,你有哪些思路 有哪些地方可以考量的,很多面试官的意思就是看你工作中处理的经验多不多而已,真实的案例中,可能网上已经有成熟的方案跟工具了,而且很有可能你根本就没做过这块,但是不妨碍你表达你可能在这个方案中 你会思考哪些东西,可能哪些点需要你去做抉择
    v2exgo
        23
    v2exgo  
       2 天前
    @qingyingwan 是的,一个细节可以问死很多人,像原子变量 x86 可以用 lock 汇编命令,底层有 MESI 缓存一致性协议,这里面又有很多细节,以及队列的实现,具体到底层 有大量的细节,很容易问死人
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5823 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 02:04 · PVG 10:04 · LAX 19:04 · JFK 22:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.