字节后端一面挂
1:拷打实习
2:ES监听binlog怎么做到的,即Canal工作原理,只知道是伪装成从节点获取binlog日志,正解如下
1)canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议
2)MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )
3)canal 解析 binary log 对象(原始为 byte 流);
3:rpc实现原理,不会,只知道咋用,正解如下:
rpc通过动态代理技术在方法执行前后对数据进行封装和解码等,让用于感觉就像是直接调用本地方法一样。
4:进程间通信方式
5:对于微博成千上万的评论,一个评论可能还会有很多回复,你会如何设计这个评论系统?后面问到如何分库,我想着根据评论时间或者地区分库,这些都被提出了缺陷。害,是不是根据评论id分库就行了,求大佬帮忙分析一下。
6:mysql有哪些锁,答得表锁、行锁、全局锁,又问行锁有哪些,答得记录锁、临键锁、间隙锁,后面问到什么时候会设置临键锁、间隙锁,不会,我太菜了 。大家感兴趣可以看看这个https://www.cnblogs.com/Terry-Wu/p/12219019.html
7:联合索引(name、age),name like c% && age = 10,索引会怎么走,理解不深,答得不好。chatgpt解释如下:
(1)范围扫描 name LIKE 'c%':数据库首先使用 name 字段的索引来查找以 'c' 开头的所有记录。这会使用索引的范围扫描,找到所有符合 name LIKE 'c%' 的记录。
(2)过滤 age = 10:对于符合 name LIKE 'c%' 的所有记录,数据库接着使用索引中的 age 字段来过滤符合 age = 10 的记录。因为联合索引已经包含 name 和 age,在扫描 name 字段的同时,age 字段的值也会被同时读取。这意味着在使用索引扫描时,可以直接过滤掉那些 age 不等于 10 的记录,从而避免全表扫描。
8:mysql有哪三个日志。这个还算会
9:六大设计原则,只记得迪米特和开闭
- 单一职责原则(Single Responsibility Principle);
- 开闭原则(Open Closed Principle);
- 里氏替换原则(Liskov Substitution Principle);
- 迪米特法则(Law of Demeter),又叫"最少知道法则";
- 接口隔离原则(Interface Segregation Principle);
- 依赖倒置原则(Dependence Inversion Principle)
10:Redis的String用的什么数据结构,sds的特点,怎么实现扩容的。不知道具体怎么实现扩容的,感觉这里问的有点深。
面完10分钟后挂。