【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类,一次性全部接收指定的字段。

[外链图片转存中...(img-zZdQYXsd-1698109623019)]

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 您这个部门做的中间件给谁提供服务的呢

答:整个小米集团

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/117659.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3检测是手机还是pc端,监测视图窗口变化

1.超小屏幕&#xff08;手机&#xff09; 768px以下 2.小屏设备&#xff08;平板&#xff09; 768px-992px 3.中等屏幕&#xff08;旧式电脑&#xff09; 992px-1200px 4.大屏设备&#xff08;现代电脑&#xff09; 1200px以上 <script setup name"welcome"> i…

最新校园说明会日程安排-ABeam(德硕)旗下艾宾信息技术开发(上海) 德硕管理咨询(深圳)

艾宾信息技术开发&#xff08;上海&#xff09; 2024校园招聘 招聘岗位 公司介绍 福利待遇 联系我们 行程一览 华东理工大学校园宣讲会 日期&#xff1a;2023年10月23日&#xff08;周一&#xff09; 时间&#xff1a;14:00-16:00 地点&#xff1a;上海市徐汇区梅陇…

用桥接模式(Bridge)实现开放接口系统

桥接模式是设计模式中比较难的一种&#xff0c;其原文叙述是&#xff1a;“将抽象部分与它的具体实现部分分离&#xff0c;使它们都可以独立地变化&#xff0c;属于结构型模式。”表述也很抽象&#xff0c;其本质是通过一个抽象类A的构造函数传入一个Interface类B作为参数&…

Docker | docker常用命令

Docker | docker常用命令 帮助命令 docker version # 显示docker版本信息 docker info # 显示docker系统系统信息&#xff0c;镜像以及容器数量等信息 docker 命令 --help # 帮助命令启动docker服务 service docker start 或者停止docker服务 service docker stop检查do…

思维导图软件 ConceptDraw MINDMAP mac中文特色介绍

ConceptDraw MINDMAP mac是一款思维导图绘制软件&#xff0c;它可以帮助用户快速创建各种类型的思维导图&#xff0c;如组织结构图、流程图、概念图和UML图等。该软件具有直观的界面和简单易用的操作方式&#xff0c;使得用户能够轻松地创建复杂的思维导图。此外&#xff0c;它…

Android Studio新功能-设备镜像Device mirroring-在电脑侧显示手机实时画面并可控制

下载最新的灰测版本-蜥蜴 成功运行到真机后&#xff0c;点击右侧Running Devices选项卡&#xff0c;再点击号 选中当前设备&#xff1b; 非常丝滑同步&#xff0c;在电脑侧也可以顺畅控制真机 该功能大大方便了我们视线保持在显示器上专注开发&#xff0c;并且便于与UI视觉进行…

尾递归,还是递推?

关于斐波那契数的计算&#xff0c;写成递归式就是 func fib(n) {if(n0||n1) return 1;return fib(n-1)fib(n-2); }改成尾递归格式变为&#xff1a; func fib(n, propose, next) {if(n0) return propose;return fib(n-1, next, proposenext); }参数变复杂了。因为尾递归不允许…

搜维尔科技:伦敦艺术家利用Varjo头显捕捉盲人隐藏的梦想

在伦敦举行的弗里泽艺术博览会上,与专业级虚拟现实/XR硬件和软件领域的全球领先者Varjo合作,展示一个突破性的混合现实艺术装置, 皇家国家盲人学会 (rnib),英国领先的视力丧失慈善机构。 这个名为"公共交通的私人生活"的装置是一个互动的声音和图像雕塑,旨在让有眼光…

KNN-水仙花的分类

题目&#xff1a; 思路&#xff1a; 1、处理数据集&#xff0c;这里用的是题目已知的数据集&#xff0c;所以说需要提前将写好的数据放到excel表格里&#xff0c;再进行读取。 2、将数据集划分为训练集和测试集 3、定义K-NN模型。 4、训练模型 5、预测模型 6、计算分类精…

通过VScode连接远程 Linux 服务器修改vue代码

1先在Linux环境安装node&#xff0c;官网下载的node安装包放在自己新建文件夹 2解压 tar -zxvf node-v18.18.0-linux-x64.tar.xz 3新建代码路径&#xff0c; 下载代码 4安装 OpenSSH OpenSSH 可以让你在终端使用 ssh 命令&#xff0c;Windows10 一般自带。 可以通过以下方式…

git中如何在父仓库提交子仓库的修改

子仓库在父仓库中进行了修改&#xff0c;你需要按照以下步骤提交子仓库的修改&#xff1a; 切换到子仓库目录&#xff1a;使用cd命令进入子仓库所在的目录。拉取子仓库的最新更改&#xff1a;使用git pull命令拉取子仓库的最新更改&#xff0c;确保你的本地是最新的版本。提交…

大数据技术学习笔记(二)—— Hadoop 运行环境的搭建

目录 1 准备模版虚拟机hadoop1001.1 修改主机名1.2 修改hosts文件1.3 修改IP地址1.3.1 查看网络IP和网关1.3.2 修改IP地址 1.4 关闭防火墙1.5 创建普通用户1.6 创建所需目录1.7 卸载虚拟机自带的open JDK1.8 重启虚拟机 2 克隆虚拟机3 在hadoop101上安装JDK3.1 传输安装包并解压…

Webpack 基础以及常用插件使用方法

目录 一、前言二、修改打包入/出口配置步骤 三、常用插件使用html-webpack-plugin打包 CSS 代码提取 CSS 代码优化压缩过程打包 less 代码打包图片文件 一、前言 本质上&#xff0c;Webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具。当 webpack 处理应用程序时…

[Unity]PostProcessing导入新场景报 NullReferenceException

问题描述 NullReferenceException: Object reference not set to an instance of an object NullReferenceException: Object reference not set to an instance of an object UnityEngine.Rendering.PostProcessing.AmbientOcclusion.IsEnabledAndSupported (UnityEngine.Re…

【接口测试】Jmeter接口实战-Dubbo接口+造10W数据测试(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、Windows环境通…

深入了解JavaScript中的AJAX和HTTP请求

在现代Web开发中&#xff0c;AJAX&#xff08;Asynchronous JavaScript and XML&#xff09;和HTTP请求被广泛应用于实现动态交互式网页。本文将深入探讨AJAX的概念、工作原理以及使用方法。 什么是AJAX&#xff1f; AJAX是一种利用JavaScript和HTTP请求与服务器进行异步通信的…

关系型数据库的问题和NoSQL数据库的应用

1.关系型数据库的问题 系统使用通用的商用关系型数据库&#xff0c;系统内部数据采用中央集中方式存储。系统投入使用后&#xff0c;初期用户数量少&#xff0c;系统运行平稳。一段时间后&#xff0c;用户数出现了爆炸式增长&#xff0c;系统暴露出诸多问题&#xff0c;集中表…

66 跳跃游戏

跳跃游戏 题解1 贪心题解2 DP&#xff08;超时, 但思路应该对&#xff09; 给你一个非负整数数组 nums&#xff0c;你最初位于数组的 第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 …

c语言进制转换表

c语言进制转换表 c语言进制转换表 c语言进制转换表 END

制造业中的微小缺陷检测——应用场景分析与算法选择(YoloV8/CANet)

一、缺陷检测任务 缺陷检测的任务通常可以分为三个主要阶段&#xff0c;包括缺陷分类、缺陷定位和缺陷分割。 1.缺陷分类 缺陷分类是检测过程的第一步&#xff0c;目的是将检测到的缺陷区域分类为不同的类别&#xff0c;通常是根据缺陷的性质或类型进行分类。分类的类别包括…