意难平!面试小米,一步之遥...

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 在小米的面试中,一位硕士生经历三面后未能成功,显示出今年竞争的激烈。本文分享了近期小米面试的部分真题,涵盖电商系统开发问题(如高并发、库存管理、支付和刷单处理)、Redis应用场景(如秒杀和扫描Key)、Redis性能原因、分布式锁实现、TCP与HTTP区别、HTTPS流程、ThreadLocal原理、HashMap线程不安全原因、synchronized与volatile对比、Thr

1d4e7c154ca0792c7fb8b8e987cb45e.jpg
面试训练营的同学,前几天面试小米,都三面了,本来以为稳了,但没想到最后还是挂了。

按往年的经验来看,小米相比与其他互联网大厂来说,面试的难度比较低,而且薪资也比较低,所以拿到 Offer 的概率还是很大的。

但今年这个情况,这位同学还是硕士身份,最后还是挂在三面了,确实挺可惜的。

那咱们今天来看看,最近小米面试的真题吧,带大家看看小米的面试难度。

1.电商系统开发中都遇到了哪些问题?

电商系统遇到的常见问题:

  1. 高并发 -> 缓存、限流、熔断。
  2. 库存问题
    1. 超卖:限流、分布式锁、Redis Lua(先判断库存 -> 减库存 + 加订单)、使用数据库 update 操作库存。
    2. 少卖:及时对账系统 -> 人工介入处理。
  3. 弱网支付问题:支付平台提供回调方法进行支付状态的刷新、手动触发主动出查询得到支付状态、定时任务进行刷新。
  4. 刷单:添加图形验证码、IP 黑名单。
  5. 重复订单问题:业务实现幂等性判断、数据库的唯一约束。

    2.怎么用Redis实现秒杀业务?

    Redis Lua(先判断库存 -> 减库存 + 加订单)。

    3.为什么Redis单线程执行还这么快?

    原因有以下几个:

  6. 基于内存操作。

  7. Redis 瓶颈是在内存和带宽,而不是在 CPU 操作。
  8. Redis 使用多路复用的 IO。
  9. 避免多线程切换和过度争抢。

    4.Redis如何扫描前缀相同的key?

    Redis 查询前缀相同的 Key 实现方式:

  10. keys -> keys user*。

  11. scan -> scan 0 math user* count 100。

    5.Redis的keys和scan有什么区别?

    keys 查询所有的匹配数据,scan 是可以查询部分数据。

    6.如何使用Redis实现分布式锁?

    分布式锁实现:

  12. 原始方式:setnx key true(死锁)/set key true ex 30 nx(锁误删)-> 锁重入问题。

  13. Redisson 框架实现方式:Redis + Lua 实现。

    7.长连接的好处与坏处?

    长连接优点:

  14. 避免了重复创建和销毁连接。

  15. 提高传输效率。
  16. 实现实时传输。
  17. 节省了系统资源的浪费。

长连接缺点:

  1. 占用了更多的资源。
  2. 增加了服务器的压力。
  3. 对网络环境的要求是比较高。

    8.TCP和HTTP有什么区别?

    TCP VS HTTP:

  4. 层级不同:HTTP 属于应用层协议;TCP 属于传输层的协议。

  5. 数据传输方式不同:HTTP 传输文本或二进制文件;TCP 传输的是数据流。

    9.说说HTTPS的执行流程?

    HTTPS 执行流程:

  6. 客户端(浏览器)发送 HTTPS 请求到服务器端。

  7. 服务器端使用非对称加密,产生一个公钥,将公钥和 CA 证书给到客户端。
  8. 客户端验证 CA 证书真伪,使用对称加密生成一个共享秘钥,使用刚才的公钥将共享秘钥进行加密,将加密信息发送给服务器端。
  9. 服务器端得到信息之后,使用非对称加密私钥进行解密,得到对称加密的共享秘钥进行通讯。

    10.说说ThreadLocal底层实现?

    ThreadLocal 底层是通过 ThreadLocalMap 实现,key -> ThreadLocal;value -> 需要存储的值。

    11.ThreadLocal父线程和子线程的数据传递?

    new InheritableThreadLocal();

    12.为什么HashMap是线程不安全的?

    HashMap 不是线程安全的原因:

  10. JDK 1.8 之前 -> 链表死循环问题、数据覆盖的问题。

  11. JDK 1.8 之后 -> 数据覆盖的问题。

    13.synchronized和volatile有什么区别?

    synchronized VS volatile:

  12. 保证线程安全不同:synchronized 能保证线程安全;volatile 不能保证线程安全。

  13. 底层实现不同

    1. synchronized 底层实现 -> JVM Monitor(监视器)-> C++ ObjectMonitor -> 操作系统 Mutex Lock。
    2. volatile 底层实现 -> 可见性(MESI 协议)、顺序性(内存屏障)。

      14.说说ThreadPoolExecutor的参数?

      ThreadPoolExecutor 参数:
  14. 核心线程数。

  15. 最大线程数(核心线程数+临时线程数)。
  16. 临时线程在空闲时间可以存活的最大时间。
  17. 参数三的单位描述。
  18. 任务队列。
  19. 线程池的创建工厂。
  20. 拒绝策略。

    15.说说ThreadPoolExecutor运行机制?

    运行机制(当任务来了之后的执行流程):

  21. 判断核心线程数是否已满;如果未满创建核心线程执行任务;如果满了执行后续操作。

  22. 判断任务队列是否已满;如果未满将任务添加到队列;如果满了执行后续流程。
  23. 判断最大线程数是否已满;如果未满创建临时线程执行任务;如果满了执行后续流程。
  24. 执行拒绝策略(内置4种拒绝策略+自定义的拒绝策略)。

    16.RocketMQ和Kafka有什么区别?

    RocketMQ VS Kafka 主要区别:

  25. 吐吞量区别:Kafka 吞吐量最高,到达单机百万级的吞吐;RocketMQ 吐吞量是十万到百万级。

  26. 功能上区别:RocketMQ 本身支持死信队列、延迟队列、支持消息推和拉取消息;Kafka 本身不支持死信队列、延迟队列、消息获取方式只能是消费者自己来拉取。

    17.说说RocketMQ的重试机制?

    RocketMQ 重试机制:

  27. 生产者重试:生成者发送消息的类型有同步发送、异步发送、单次发送(oneway),但模式为同步发送、异步发送才有消息重试机制。

  28. 消费者重试:消费者模式有广播模式和集群模式;广播模式不会进行消息重试,它只会记录警告信息;集群模式会进行消息重试(通过延迟任务来实现消息重试,默认情况下如果重试超过 16 次就会将此消息存到死信队列)。

    18.说说MySQL的事务?

    事务特性:

  29. 一致性

  30. 持久化
  31. 原子性
  32. 隔离性

    1. 读未提交:存在脏读、不可重复读和幻读问题。
    2. 读已提交:不存在脏读问题,但依然存在不可重复读和幻读的问题。
    3. 可重复读(MySQL 默认的隔离级别):不存在脏读问题、不可重复读,依旧存在幻读问题。
    4. 串行化:不存在脏读问题、不可重复读、幻读问题,但执行效率不高。

      19.说说MySQL的优化?explain有什么用?

      MySQL 优化措施:
  33. 使用合适的查询语句,不要所有的都使用 select *。

  34. 使用合适的数据类型。
  35. 正确使用索引:
    1. 该创建索引的创建索引。
    2. 查询时一定要正确的触发索引。
  36. 数据量大分库分表。
  37. 使用分布式数据库,例如 TiDB。

    20.SpringCloud有哪些组件?

    Spring Cloud 包含的组件:

  38. 注册中心:Spring Cloud Alibaba Nacos、Spring Cloud Netflix Euruka。

  39. 配置中心:Spring Cloud Alibaba Nacos。
  40. 网关:Spring Cloud Gateway。
  41. 负载均衡器:Spring Cloud LoadBalancer。
  42. Restful 请求:Spring Cloud Openfeign。
  43. 限流、熔断:Spring Cloud Alibaba Sentinel。
  44. 分布式锁事务:Spring Cloud Alibaba Seata。
  45. 分布式链路追踪系统:Skywalking。

    21.Nacos和Euruka的区别?

    Nacos VS Euruka 主要区别:

  46. 功能上不同:Nacos 既提供注册中心又提供配置中心;Euruka 只有注册中心。

  47. 通讯方式不同:Nacos 通讯方式是依靠 Netty 实现的长连接;Euruka 短连接+定时任务。
  48. CAP 理论支持不同:Nacos 默认是 AP 模式,但它支持手动设置 CP 模式;Euruka 只支持 AP 模式。
  49. 健康检查机制不同:Nacos 健康检查机制(默认临时实例),每 5s 上报一次健康状况;15s 未上报任务不健康;30s 会剔除此实例;Euruka 健康检查机制,每 30s 上报一次健康状况;60s 未收到认为不健康;90s 未收到剔除此实例。

    22.Nacos怎么保证数据一致性的

    Nacos 通过 Raft 实现 Leader 节点的选举,由 Leader 节点将数据同步给所有的普通节点,以保证数据的一致性的。

    23.反向代理是什么?

    反向代理定义:用于客户端和服务器端进行通讯,代理服务器端的一种代理,可以隐藏真实的服务器地址。反向代理的经典实现就是 Nginx。
    优点:

  50. 反向代理服务器可以有缓存,增加查询的效率。

  51. 可以实现负载均衡,从而提升服务器的 QPS,实现服务器的水平扩展。
  52. 反向代理通常自带健康检查机制,可以帮你正确的访问健康的服务实例。
  53. 隐藏真实服务器的地址,一定程度的保证了服务器的安全性。

    24.Spring事务是怎么实现的?

    Spring 事务实现方式:

  54. 编程式事务

  55. 声明式事务:动态代理实现 -> 1.拦截目标方法;2.在方法执行前开启事务;3.如果方法执行期间出现异常回滚事务;4.在方法执行完之后没有异常,提交事务。

    25.SpringBoot自动装配的实现流程?

    Spring Boot 实现流程:

  56. 启动 Spring Boot 项目时,执行 @SpringBootApplication 注解类。

  57. 去框架资源文件 spring.factories 读取需要自动装配的类。
  58. 查找自动装配类的 @Configuration + @Condition 条件注解,如果满足自动装配的条件,将此类通过反射机制创建,并放到 IoC 容器,反之则不创建。

    最后

    想要此面试题视频解析的同学,加我微信:GG_Stone【备注:小米】,免费获取小米面试解析视频。

本文已收录到我的面试小站 www.javacn.site,其中包含的内容有:Redis、JVM、并发、并发、MySQL、Spring、Spring MVC、Spring Boot、Spring Cloud、MyBatis、设计模式、消息队列等模块。

相关文章
|
4月前
|
NoSQL Java 关系型数据库
蚂蚁金服+拼多多+抖音+天猫(技术三面)面经合集助你拿大厂offer
很多Java开发者面试之前,可能没有较长的工作时间或者较为丰富的工作经验,所以不知道互联网公司或者一线互联网公司技术面试都会问哪些问题? 再加上可能自己准备也不充分,去面试没几个回合就被面试官几个问题打蒙了,最后以惨败收场。针对这些的读者朋友,小编整理了一些知名大厂的面经,在这分享给读者朋友们参考,让即将面试或是有想法跳槽的读者朋友们了解一下一线大厂面试时都喜欢问那些问题。
|
4月前
|
SQL 算法 安全
面试美团、头条、百度、京东,一名3年Java开发经验的面试总结
毕业转行做开发3年以来, 学到了很多, 加上自己的兴趣爱好, 个人认为已经成为了一个合格的程序员. 与刚开始找工作面试相同的是都会问一些相同的问题, 不同的是现在面试官会更注重为什么, 也就是说注重深度而非广度. 3年, 5年, 10年分别是个人从事技术方面职业规划中的一个坎, 3年大部分时间应对了业务逻辑, 培养良好的规范和思想, 基础知识还是欠缺.
|
5月前
|
NoSQL 网络协议 Linux
|
7月前
|
Linux 程序员 Windows
华为面试心得
华为面试心得
62 0
|
10月前
|
存储 安全 前端开发
C++面试题,阿里、百度、腾讯、华为、小米100道C++面试题目及答案(下)
C++面试题,阿里、百度、腾讯、华为、小米100道C++面试题目及答案
494 0
|
10月前
|
存储 SQL 设计模式
C++面试题,阿里、百度、腾讯、华为、小米100道C++面试题目及答案
C++面试题,阿里、百度、腾讯、华为、小米100道C++面试题目及答案
563 0
|
11月前
|
JavaScript 前端开发
大厂面试-小米
大厂面经-小米
68 0
|
消息中间件 缓存 算法
社招一年半面经分享(含阿里美团头条京东滴滴)
重点放在专业技能和项目经验两块1.你的简历就是你给面试官提供的考点,简历上的东西必须自己Hold住,万一自己写的东西被问住了,会很尴尬,给面试官留下的印象也不好,所以就是会啥写啥2.技术栈最好不要写精通,你敢写面试官就敢问,被问倒了很尴尬的,写熟悉,了解就行怎么投简历我这里强烈建议找人内推,这样简历通过的概率大些,如果找不到,可以试试脉脉,我就是从脉脉投的简历,把状态改成寻找机会就行,会有很多人找你的推荐一个简历制作模版,我一直用的,https://www.polebrief.com/index算法这个该刷还是得刷,别偷懒,我个人感觉刷完下面几个已经够了,大家可以根据自己的基础情况选择剑指Of
|
编解码 缓存 C语言
【数字设计】小米科技_笔试面试题目分享
【数字设计】小米科技_笔试面试题目分享
【数字设计】小米科技_笔试面试题目分享
一道网红面试题(腾讯、百度面试中都出现过)
在腾讯和百度的面试中,出现了这样一道面试题,,被大家亲切的称呼为网红面试题,这道面试题就是。['1', '2', '3'].map(parseInt)的输出结果是什么?['1', '2', '3'].fliter(parseInt)的输出结果是什么? 这个面试题,面试官可能不仅仅需要你说出他的结果,还需要你知道为什么会出现这样的结果。
143 0

热门文章

最新文章