小米java开发面经2022(3面offer)

流程

12月14日投简历

12月17日上午9:30,一面原定90分钟实际90分钟

业务和基础

一道中等链表算法题,只给出思路

面试结束后,面试官说给我面试通过,并问我明天是否方便二面

12月18日上午11:00,二面原定60分钟实际75分钟

基础深入

一道中等字符串括号算法题AC

面试结束后,面试官介绍了他自己的名字,问我秋招的时间,以及手里的offer情况(无)

12月20日上午11:00,三面原定60分钟实际55分钟

浅问业务+浅问基础+其他问题

一道简单二叉树层序遍历AC

一道中等合并区间AC

其他问题:业务中遇到的挑战,自己最骄傲的事情,对小米怎么看

业务篇

本人业务使用spring-cloud-alibaba + spring-cloud-gateway + spring-security + reactor + dubbo + redis写的在线商城

实现了购物车,商品下单,商品秒杀,鉴权,oauth2登录,admin管理端

1.向面试官详细介绍项目整体结构,详细介绍了spring-cloud-alibaba组件,以及部分实现原理

2.和面试官探讨了亿级表单如何实现分库分表,面试官说实际使用hash分表,探讨了一致性hash

3.探讨了秒杀接口优化部分,比如使用随机生成路径并且一个用户只能秒杀一次来防止爆破

4.探讨了秒杀时候redis预加载策略,面试官说实际情况下是分批加载库存

5.问我更新库存时redis和mysql双写一致性问题

6.探讨了user和admin权限问题

7.基础部分见下文

基础篇

1.jvm

类加载,介绍了包括类加载过程,双亲委派,问我加载进元空间的类字节码是否会被垃圾回收等

垃圾回收,介绍G1的特性,G1的region被回收之后怎么解决内存碎片的等

性能调优,介绍了我只使用过的-Xms,-Xmx

2.并发的理解

向面试官介绍了 synchronized锁升级,volatile内存语意以及从底层解释如何实现可见性,cas的原理,lock,以及condition队列,并且问我是否自己写过并发代码

使用AB线程以及AB两个锁,手写死锁例子,如何避免死锁

多个线程使用cas竞争失败了怎么办?使用for循环重新竞争

for循环过于消耗cpu怎么办,如何实现公平队列?使用ReentrantLock的condition排队

ConcurrentHashMap如何实现并发的

3.java

Collections集合类,HashMap结构,HashMap为什么使用红黑树而不是二叉平衡树

对三种机制的理解,继承,封装,多态。我拿LinkedHashMap和他的父类HashMap举例讲解

问我java是值传递还是引用传递,以及为什么

AOP实现原理,cglib和动态代理区别

使用过哪些线程池,线程池的实现方式,cpu和io密集分别适合什么线程池

4.mysql

并发控制四个级别以及底层原理,详细到读提交级别在版本控制里哪部分是可见的,于是产生的不可重复读问题

底层使用数据结构,以及为什么高效

5.redis

使用过哪些redis数据结构

redis除了实现缓存功能还有什么功能

redis如何实现分布式锁?三种,set,setnx,lua脚本

redis分布式锁对比zk分布式锁

redis实现分布式锁的弊端?主从切换的时候会产生问题

6.tcp

三次握手四次挥手

为什么不是两次握手而是三次

7.http

从访问baidu到返回数据包的全过程,尽量回答

其他想不起来了

建议

片段的拼凑不会掌握一门技术,如果不想背八股文而是彻底搞清楚这门技术,可以来这里找找你所需要的一切

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值