意难平!面试小米,一步之遥...
面试训练营的同学,前几天面试小米,都三面了,本来以为稳了,但没想到最后还是挂了。按往年的经验来看,小米相比与其他互联网大厂来说,面试的难度比较低,而且薪资也比较低,所以拿到 Offer 的概率还是很大的。但今年这个情况,这位同学还是硕士身份,最后还是挂在三面了,确实挺可惜的。那咱们今天来看看,最近小米面试的真题吧,带大家看看小米的面试难度。1.电商系统开发中都遇到了哪些问题?电商系统遇到的常见问题
面试训练营的同学,前几天面试小米,都三面了,本来以为稳了,但没想到最后还是挂了。
按往年的经验来看,小米相比与其他互联网大厂来说,面试的难度比较低,而且薪资也比较低,所以拿到 Offer 的概率还是很大的。
但今年这个情况,这位同学还是硕士身份,最后还是挂在三面了,确实挺可惜的。
那咱们今天来看看,最近小米面试的真题吧,带大家看看小米的面试难度。
1.电商系统开发中都遇到了哪些问题?
电商系统遇到的常见问题:
高并发 -> 缓存、限流、熔断。
库存问题:
超卖:限流、分布式锁、Redis Lua(先判断库存 -> 减库存 + 加订单)、使用数据库 update 操作库存。
少卖:及时对账系统 -> 人工介入处理。
弱网支付问题:支付平台提供回调方法进行支付状态的刷新、手动触发主动出查询得到支付状态、定时任务进行刷新。
刷单:添加图形验证码、IP 黑名单。
重复订单问题:业务实现幂等性判断、数据库的唯一约束。
2.怎么用Redis实现秒杀业务?
Redis Lua(先判断库存 -> 减库存 + 加订单)。
3.为什么Redis单线程执行还这么快?
原因有以下几个:
基于内存操作。
Redis 瓶颈是在内存和带宽,而不是在 CPU 操作。
Redis 使用多路复用的 IO。
避免多线程切换和过度争抢。
4.Redis如何扫描前缀相同的key?
Redis 查询前缀相同的 Key 实现方式:
keys -> keys user。
scan -> scan 0 math user count 100。
5.Redis的keys和scan有什么区别?
keys 查询所有的匹配数据,scan 是可以查询部分数据。
6.如何使用Redis实现分布式锁?
分布式锁实现:
原始方式:setnx key true(死锁)/set key true ex 30 nx(锁误删)-> 锁重入问题。
Redisson 框架实现方式:Redis + Lua 实现。
7.长连接的好处与坏处?
长连接优点:
避免了重复创建和销毁连接。
提高传输效率。
实现实时传输。
节省了系统资源的浪费。
长连接缺点:
占用了更多的资源。
增加了服务器的压力。
对网络环境的要求是比较高。
8.TCP和HTTP有什么区别?
TCP VS HTTP:
层级不同:HTTP 属于应用层协议;TCP 属于传输层的协议。
数据传输方式不同:HTTP 传输文本或二进制文件;TCP 传输的是数据流。
9.说说HTTPS的执行流程?
HTTPS 执行流程:
客户端(浏览器)发送 HTTPS 请求到服务器端。
服务器端使用非对称加密,产生一个公钥,将公钥和 CA 证书给到客户端。
客户端验证 CA 证书真伪,使用对称加密生成一个共享秘钥,使用刚才的公钥将共享秘钥进行加密,将加密信息发送给服务器端。
服务器端得到信息之后,使用非对称加密私钥进行解密,得到对称加密的共享秘钥进行通讯。
10.说说ThreadLocal底层实现?
ThreadLocal 底层是通过 ThreadLocalMap 实现,key -> ThreadLocal;value -> 需要存储的值。
11.ThreadLocal父线程和子线程的数据传递?
new InheritableThreadLocal();
12.为什么HashMap是线程不安全的?
HashMap 不是线程安全的原因:
JDK 1.8 之前 -> 链表死循环问题、数据覆盖的问题。
JDK 1.8 之后 -> 数据覆盖的问题。
13.synchronized和volatile有什么区别?
synchronized VS volatile:
保证线程安全不同:synchronized 能保证线程安全;volatile 不能保证线程安全。
底层实现不同:
synchronized 底层实现 -> JVM Monitor(监视器)-> C++ ObjectMonitor -> 操作系统 Mutex Lock。
volatile 底层实现 -> 可见性(MESI 协议)、顺序性(内存屏障)。
14.说说ThreadPoolExecutor的参数?
ThreadPoolExecutor 参数:
核心线程数。
最大线程数(核心线程数+临时线程数)。
临时线程在空闲时间可以存活的最大时间。
参数三的单位描述。
任务队列。
线程池的创建工厂。
拒绝策略。
15.说说ThreadPoolExecutor运行机制?
运行机制(当任务来了之后的执行流程):
判断核心线程数是否已满;如果未满创建核心线程执行任务;如果满了执行后续操作。
判断任务队列是否已满;如果未满将任务添加到队列;如果满了执行后续流程。
判断最大线程数是否已满;如果未满创建临时线程执行任务;如果满了执行后续流程。
执行拒绝策略(内置4种拒绝策略+自定义的拒绝策略)。
16.RocketMQ和Kafka有什么区别?
RocketMQ VS Kafka 主要区别:
吐吞量区别:Kafka 吞吐量最高,到达单机百万级的吞吐;RocketMQ 吐吞量是十万到百万级。
功能上区别:RocketMQ 本身支持死信队列、延迟队列、支持消息推和拉取消息;Kafka 本身不支持死信队列、延迟队列、消息获取方式只能是消费者自己来拉取。
17.说说RocketMQ的重试机制?
RocketMQ 重试机制:
生产者重试:生成者发送消息的类型有同步发送、异步发送、单次发送(oneway),但模式为同步发送、异步发送才有消息重试机制。
消费者重试:消费者模式有广播模式和集群模式;广播模式不会进行消息重试,它只会记录警告信息;集群模式会进行消息重试(通过延迟任务来实现消息重试,默认情况下如果重试超过 16 次就会将此消息存到死信队列)。
18.说说MySQL的事务?
事务特性:
一致性
持久化
原子性
隔离性
读未提交:存在脏读、不可重复读和幻读问题。
读已提交:不存在脏读问题,但依然存在不可重复读和幻读的问题。
可重复读(MySQL 默认的隔离级别):不存在脏读问题、不可重复读,依旧存在幻读问题。
串行化:不存在脏读问题、不可重复读、幻读问题,但执行效率不高。
19.说说MySQL的优化?explain有什么用?
MySQL 优化措施:
使用合适的查询语句,不要所有的都使用 select *。
使用合适的数据类型。
正确使用索引:
该创建索引的创建索引。
查询时一定要正确的触发索引。
数据量大分库分表。
使用分布式数据库,例如 TiDB。
20.SpringCloud有哪些组件?
Spring Cloud 包含的组件:
注册中心:Spring Cloud Alibaba Nacos、Spring Cloud Netflix Euruka。
配置中心:Spring Cloud Alibaba Nacos。
网关:Spring Cloud Gateway。
负载均衡器:Spring Cloud LoadBalancer。
Restful 请求:Spring Cloud Openfeign。
限流、熔断:Spring Cloud Alibaba Sentinel。
分布式锁事务:Spring Cloud Alibaba Seata。
分布式链路追踪系统:Skywalking。
21.Nacos和Euruka的区别?
Nacos VS Euruka 主要区别:
功能上不同:Nacos 既提供注册中心又提供配置中心;Euruka 只有注册中心。
通讯方式不同:Nacos 通讯方式是依靠 Netty 实现的长连接;Euruka 短连接+定时任务。
CAP 理论支持不同:Nacos 默认是 AP 模式,但它支持手动设置 CP 模式;Euruka 只支持 AP 模式。
健康检查机制不同:Nacos 健康检查机制(默认临时实例),每 5s 上报一次健康状况;15s 未上报任务不健康;30s 会剔除此实例;Euruka 健康检查机制,每 30s 上报一次健康状况;60s 未收到认为不健康;90s 未收到剔除此实例。
22.Nacos怎么保证数据一致性的?
Nacos 通过 Raft 实现 Leader 节点的选举,由 Leader 节点将数据同步给所有的普通节点,以保证数据的一致性的。
23.反向代理是什么?
反向代理定义:用于客户端和服务器端进行通讯,代理服务器端的一种代理,可以隐藏真实的服务器地址。反向代理的经典实现就是 Nginx。优点:
反向代理服务器可以有缓存,增加查询的效率。
可以实现负载均衡,从而提升服务器的 QPS,实现服务器的水平扩展。
反向代理通常自带健康检查机制,可以帮你正确的访问健康的服务实例。
隐藏真实服务器的地址,一定程度的保证了服务器的安全性。
24.Spring事务是怎么实现的?
Spring 事务实现方式:
编程式事务
声明式事务:动态代理实现 -> 1.拦截目标方法;2.在方法执行前开启事务;3.如果方法执行期间出现异常回滚事务;4.在方法执行完之后没有异常,提交事务。
25.SpringBoot自动装配的实现流程?
Spring Boot 实现流程:
启动 Spring Boot 项目时,执行 @SpringBootApplication 注解类。
去框架资源文件 spring.factories 读取需要自动装配的类。
查找自动装配类的 @Configuration + @Condition 条件注解,如果满足自动装配的条件,将此类通过反射机制创建,并放到 IoC 容器,反之则不创建。
最后
想要小米面试真题视频解析的同学,加我微信:GG_Stone【备注:小米】,免费获取小米面试解析视频。
特殊说明
以上内容来自我的《Java 面试突击训练营》,这门课程是有着 14 年工作经验(前 360 开发工程师),9 年面试官经验的我,花费 4 年时间打磨完成的一门视频面试课。
整个课程从 Java 基础到微服务 Spring Cloud、从实际开发问题到场景题应有尽有,包含模块如下:
训练营系统的带领大家把 Java 常见的面试题过一遍,遇到一个问题,把这个问题相关的内容都给大家讲明白,并且视频支持永久观看和一直更新。并且面试训练营还提供 10 大就业服务。
上完训练营的课程之后,基本可以应对目前市面上绝大部分公司的面试了,想要了解详情,加我微信:GG_Stone【备注:训练营】
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)