【2024秋招】小米中间件后端开发一面2023-9-13-base武汉

1 自我介绍

2 快手实习

2.1 讲讲你写的curd启动器,做了哪些工作呢

答:

2.2 网上也有一些开源的curd代码生成器,你为什么需要自研呢(重要)

答:

(1)这个必须得自研,因为这个里面涉及到一些将快手的自定义环境变量放入到这个启动器中,同时网上的启动器都只涉及到单表的生成,但是我们自己还支持联表的查询;网上的启动器具有一定的通用性,但是并不能完全兼容我们组的实际的环境。

(2)网上的一些curd启动器,比如mp,涉及到的只是dao层的封装方法的编写,但是面对controller层的代码的编写,这是省略不了的,假如说我们在dao层使用了mp,那么我们确实不需要编写所有的普通的单表的查询mapper方法,但是我们在controller类中还是得编写api来处理单表查询的请求,假如现在有10个简单的curd请求,其中前面的select到where的字符串都相同,但是查询的条件分别是10个不同的字段的等值查询,这种查询在DAO层不需要写任何代码,因为MP有这个能力,但是我们的controller层得在这一个类中写上这10个api方法,这样的话,相当于

2.3 你们是如何做联表的呢?

答:

(1)前端会携带一个type字段,如果type为detail,则说明需要联表查询

(2)联表的sql语句需要在DAO层写好,后端的接口会根据前端的detail字段自动去进行联表查询,一般这里的联表sql语句需要在DAO层写好,可以定义为getJoinDataOnXXX,但同时的也需要在查询时指定联表的字段,后端会根据这个联表的字段去调用对应的DAO层方法,一般联表的方法只适用于主表,字段也来自于这个表,这样的话可以天然借助这个字段去DAO层主映射出具体的联表方法,然后在查询条件时,我们一般也会进行过滤,过滤的时候会带上这些条件,后端会解析成对应的queryWrapper,当然我们还需要设置额外的queryWrapper类,一次性全部接收指定的字段。

2.4 架构实例反向同步到架构定义

答: 流量激增的时候,数据中心需要扩容

2.5 多个表的架构实例和流量激增是什么关系呢

答:流量激增->机器实例、接线变化->变更前做快照

2.6 做这个快照有什么用呢?

答:运维人员在对机器变更之前,当前的网络架构拓扑图做一个备份,放入到定义表当中,方便回退

2.7 怎么实现这个备份呢,你的架构是怎么和数据表关联起来呢

答:架构就相当于这一张张表吧

2.8 代码量由3000缩减到1000行,是怎么做到的呢

答:策略模式

3 分布式kv键值对数据库

3.1 这个代码是你自己实现的吗

答:我自己

3.2 你这个raft是怎么实现一致性的

答:leader选举,日志复制和持久化实现的

3.3 持久化讲讲

答:

(1)持久化哪些字段

(2)持久化的时机

3.4 一定要持久化嘛,一致性和持久化有必然关联嘛?

答:因为如果大多数节点中的数据丢失了,必须得先从磁盘中恢复数据,不然的话数据会丢失,造成数据不一致,如果这里的大多数是节点是大多数日志进度跟leader节点匹配的,那么数据会丢失,造成数据不一致。

3.4.1 如果没有持久化日志,会造成哪方面不一致?

如果这里的大多数是节点是大多数日志进度跟leader节点匹配的,并且刚好数据丢失,其他的从节点的日志有缺陷,造成数据不一致。

3.4.2 如果没有持久化votedFor投票字段,会造成哪方面的不一致呢

答:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EQbCQpWU-1686574650549)(images/img_3.png)]

3.5 日志同步是怎么实现的呢

答:leader节点的上层状态机收到了写操作时不会立即执行它,而是将其封装到日志中,下放给raft集群,直至集群中大多数节点都收到了这个日志才会开始执行这条日志。

3.6 复制的过程中包含哪些内容呢?

答:相当于一个OP对象,包括了操作的类型,是get还是put还是putAppend,然后就是key和value了,这三个相当于包括了具体的操作命令,还有一个ClientId和SeqId,这两个id主要用于各个节点的上层状态机保证操作的幂等性

3.7 假如说这是个OP对象,这个同步的量特别大的话,怎么保证日志复制速度这么快呢,怎么保证各个节点之间的日志快速一致呢

答:因为它可以通过快照操作,截断一部分日志,快照会被持久化,如果从节点宕机,会首先读取本地的快照进行快速恢复,然后leader节点只需要传递给快照后面的日志给从节点,从节点执行的日志量很少

4 反问

4.1 是不是两轮技术面和一轮hr

答:对

4.2 面试结果什么时候出来

答:三天之内,反正通没通过会发邮件,大概三天左右吧

4.3 我表现如何呢

答:我觉得还行,但是我们还得再看一下

4.4 二轮是您的上司面嘛?

答:对

4.5 现在得批量面一下,做一个排序对吧

答:对

4.6 小米武汉的hc够吗

答:刚开始面

4.7 除了您刚才讲,还有其他的业务嘛?

答:主要是中间件,微服务相关的,可能是nacos,dubbo之类的,具体做什么不确定。

4.8 您这个部门做的中间件给谁提供服务的呢

答:整个小米集团

相关推荐
freellf8 天前
数据结构及基本算法
1024程序员节
BruceGerGer25 天前
flutter开发实战-flutter web加载html及HtmlElementView的使用
flutter·1024程序员节
牧小七1 个月前
MacOS---IDEA快捷键:生成get/set方法
macos·idea·java后端
坐忘3GQ2 个月前
86.小米相机修改拍照(尺寸,画幅,比例)的方法
数码相机·小米·拍照·分辨率·红米手机·画幅
网络冒险家2 个月前
【软考】系统集成项目管理工程师【第二版】
职场和发展·软考·集成学习·1024程序员节·系统集成项目工程师
BruceGerGer2 个月前
flutter开发实战-AssetBundle读取指定packagename的文件
flutter·1024程序员节
sheng12345678rui2 个月前
最新缺失msvcp140.dll的多种解决方法,有效解决电脑dll问题
windows·microsoft·电脑·dll文件·1024程序员节
a5553338203 个月前
电脑显示mfc140u.dll丢失的修复方法,总结7种有效的方法
java·经验分享·dll·dll文件丢失·1024程序员节
行十万里人生3 个月前
C++ 智能指针
linux·c++·git·阿里云·容器·蓝桥杯·1024程序员节
a5553338203 个月前
启动鸣潮提示错误代码126:加载d3dcompiler_43.dll错误或缺失的7个解决方法
前端·经验分享·dll·dll文件丢失·1024程序员节