首页 简历|笔试面试

小米面经(已完结)

  • 25年9月4日 发布
  • 199.07KB 共4页
小米面经(已完结)小米面经(已完结)小米面经(已完结)小米面经(已完结)

小米面经(已完结)

小米集团是一家以智能手机、智能硬件和 IoT 平台为核心的消费电子及智能制造公司,也

是目前全球领先的智能手机品牌之一。2024 年,小米汽车宣布造车成功,意味着小米从

此也是一家车企了。

秋招薪资

24 届秋招薪资一览表

1712622550418-c63d4fbd-3001-43fa-bc80-b3fc7edeba26.png

同学 E(附答案)

之前有两位球友一起去了小米,这是其中一位球友的面经,面试题问的还是非常经典的,

有球友的参考答案,大部分也都可以从面渣逆袭中找到答案,给大家参考一下。

小米第一个部门

1.一面

●过来的时候面试官让我做了一道算法题,然后让我讲了一下思路,这个算法题我觉得大

家应该都非常熟悉:三数之和为 0

●你了解类的加载机制吗?(双亲委派开始吟唱)

●那你知道类的热更新的?(类的热部署,重写类的加载方式,监听类文件,每次类文件

修改的时候重新加载类)

●你对 redis 了解多少,说说常见的数据结构和应用场景

●你知道 redis 的 zset 底层实现吗(这个我说了一下 zset 是由哈希表和跳表共同实现的,

哈希表单值检索效率高,跳表范围查询效率高)

●为什么 hash 表范围查询效率比跳表低

●你说跳表是基于双向链表实现的,那跳表为什么要用双向链表不用单向呢(这里卡了很

久很久,我一直强调双向链表逆向排序查询的时候更方便,然后修改一个节点的时候也更

方便,但是面试官一直说做范围查询你用单向链表不就行了吗?我说逆序排序查找的时候

更快,但面试官不对就卡在这里了,然后我说不太清楚就下一题了)

●你了解那些集合?(我说主要是 List 和 Map 大类)

●说说 List 里面各种类的对比(LinkedList ArrayList Vector 对比我都说了一遍)

●说说 HashMap 的扩容机制(达到负载阈值的时候会以两倍扩容,然后说了一下 1.7 和

1.8 扩容的对比,1.8 做的优化)

●1.8 扩容具体实现(我说只需要对比你原先 hash 表长度进行位运算,如果为 1 则扩容的

位置+这个长度,如果为 0 则位置不变)

●那你说说扩容的时候每个节点都要进行位运算吗,如果我这个 hashmap 里面有几十万

条数据,都要进行位运算吗?(这里我很懵逼,我记得当时看源码的时候确实会沿着链表

遍历每一个节点然后进行位运算,我就开始犹豫了,但最后还是说会对每一位进行位运

算,然后提了一下 Concurrenthashmap 扩容的时候进行多线程扩容,hashmap 的优化机

制不太清楚)

●你知道 redis 的一致性 hash 吗(当时听的时候有点懵逼,没有听过这个名词,然后就说

了一下分片集群的 hash 曹运算,还有 hash 轮机制)

●那你临时增加一个 redis 节点,数据如何迁移呢(我不太清楚就没有回答了)

详细答案:传送门

2.二面

●前面一直问我项目相关的问题,还有技术选型(我项目中用了 minio 和 protobuf 然后说

了一下它们的特性)

●如何通过 mysql 定位哪条增删改查语句拖慢了整个系统(一开始说了慢日志,被否定

了,我就懵逼了?然后就被成功带偏了,面试在这里卡了很久)

●你的项目并发量高吗(我说数据量比较大,然后说了用 countdown 和线程池完成 mysql

数据向 es 的迁移)

●10 亿个 url 里面找到频率最高的前 100 个

小米第二个部门

1.一面

●前面一直在描述项目的事情

●你封装过 springboot starter 吗(我的项目封装过然后将项目业务)

●看你项目里面用到了 dubbo 和 gateaway 你阅读过源码(没有)

●你平时用到的数据库(mysql)

●说一说 mysql 索引的底层机制(我说了 B 树、B+树、hash 还有三大引擎对比和扩展)

●为什么需要索引(空间换时间,举了个例子就是书本的目录和具体页数的关系)

●什么时候需要索引(where group by order by 经常使用的字段、还有字段属性唯一的字

段,后面还扩展说了一下什么时候不需要索引,比如数据量小的时候、经常更改的数据、

where group by order by 都没用上的字段……)

●spring 的隔离机制(数据库四大隔离级别吟唱)

●默认是哪一种(可重复读,然后我补充说了底层的实现原理,mvcc :readview 还有日

志机制)

●你有没有看过哪些框架的源码(我说看过数据库的,有用 java 实现一个简单的数据

库,这个思路是 mydb 项目带来的,然后说了一点我知道的)

●代码题 链表删除重复元素

详细答案:传送门

2.二面

●看你项目使用的 xxl job 你看过源码吗(这个我说没看过,但是我把 xxl job 的执行流程

说了一遍)

●你看过那些分布式组件的源码比如 dubbo springcloud 组件之类的(看过 nacos 的)

●为什么要看 nacos 的(因为自己项目有使用过就了解一下)

●nacos 的服务注册流程

●nacos 的服务实列是如何实现的(有临时实列和持久化实例)

●nacos 服务实例如何存储的(有缓存机制)

●看你项目用到了 dubbo 为什么不看 dubbo 源码(平时能够真正接触到的分布式业务和

环境很少,看的源码主要是使用的比较多的框架比如 mybatis 和 springboot)

●gateaway 的源码看过吗

●后续就展开了一系列话题但是主要围绕着两个点

●我为什么要录取你

●你为什么选择小米(这里我表达出了非常强烈进入小米的意愿,真情实感,我实验室的

人还有面试官基本都能看出来我很想进小米)

面试过程其实有很多可以拓展回答,不太会的问题你也可以尝试说一些自己会的来拉扯一

下面试官

同学 F

详细答案:https://mp.weixin.qq.com/s/OELA0PVm-nPGOf-CsTWmCg

小米的三面感觉都不太难,实际场景题问的多一些,聊的都很愉快,而且三面感觉是一个

领导大佬,会聊的较深,第三面的表现不是很好。以下是根据回忆的面试题(乱序):

Java

1、HashMap 的八股(底层,链表/红黑树转换原因),

2、HashTable 和 ConcurrentHashMap 的底层实现

3、ArrayList 和 LinkedList 的区别和使用场景(简单的问题反而被提到是亮点回答,所以

说不起眼的知识点也很重要)

4、线程池的参数及创建线程的方式

5、volatile 保证了什么(问了具体的内存屏障),volatile 加在基本类型和对象上的区别

6、synchronized 和 ReentrantLock 区别和场景

7、垃圾回收的算法及详细介绍

8、反射的介绍与使用场景

9、两种动态代理的区别

10、SpringBoot 和 Spring 的区别,自动装配的原理

11、SpringCloudAlibaba 的组件介绍

开通会员 本次下载免费

所有资料全部免费下载! 推荐用户付费下载获取返佣积分! 积分可以兑换商品!
一键复制 下载文档 联系客服