小米-Java后端-一面面经
Java
- 讲讲 G1 的内存模型?——分区域,每个区域单独都可以是 ESO(估计漏了 H 所以追问)-大对象怎么分配的?——单独一片区域(应该叫Humongous)-多大是大对象?——超过 region 大小的 50%(超过 region 大小的话会放在连续的 H区)
- Java 基本数据类型?——多说了 String,漏了 byte 和 short(面试官提醒了,这没答好感觉怪尴尬,short 感觉是真不常用)
- 讲讲你常用的 Java 集合类有哪些?——随便说了几个老生常谈的名字,没追问
项目-黑马点评
- 用Redis 添加商户信息缓存,怎么实现的?——感觉好善良,照着简历原话问;就凭课的印象答就行-Value 是商户信息,具体是什么样的结构?——商户信息是 MySQL 中一行信息,相当于一个对象,Value 就是对象的 JSON 字符串(面试官补充问获取之后再序列化反序列化吗我说嗯)
- 主动更新和超时剔除是怎么做的?——先写 MySQL 再写 Redis;写 Redis 时设置 TTL,再次访问缓存会重置 TTL 保障热点数据不被剔除
- 怎么设计的用逻辑过期来避免缓存击穿?——黑马讲得很好了,凭印象讲了讲,没啥问题-锁是怎么加的?第二个线程是怎么等待第一个线程执行完之后拿到新数据?——setnx-这么做相当于第一个线程获取时后面线程都阻塞,或者等一个轮询时间再访问?——可以这么设计-那你是怎么设计的?——(按黑马讲的说)直接先返回过期旧数据,然后异步新开线程获取锁再去获取新数据再更新,其它线程拿不到锁也直接返回过期旧数据,用户体验好,但牺牲了一点短时间的一致性
- 缓存 null 值解决缓存穿透是什么意思?——未命中缓存也未命中数据库,缓存这个空 id 为 key,value 为 null,返回空值-(面试官总结复述了一遍自己的理解)对吗?——是。然后没动静,想了下补充说了会设置 TTL,不能一直返回空,尽量减少数据不一致的问题;又没动静,再补充了下也可以加布隆过滤器来解决可能更合适(想引导问布隆,不过没搭理我)
- Redis 使用 Stream 流实现异步秒杀是怎么做的?——还好面试前刚看了这里黑马课复习了,主要就是讲把判断购买资格(没超卖+一人一单)先做,符合资格直接返回购买成功;再把生成订单信息和具体数据库扣减库存等操作放入消息队列异步后台去慢慢消费执行
算法
- 自己创建链表,然后只给其中一个节点,不知道头结点,要求在链表中删除这个节点——误会题意了以为自己创建头结点知道头结点想双指针删,正写着面试官提醒我了,我想了下没有思路,说需要换到题吗我说行(其实思路巨简单,反问结束是面试官还问我算法第一题需要说一下吗,然后给我讲了下,好简单,面试官大哥人好好)【后续补充,刷题发现是LC 237原题,乐,不过类似脑筋急转弯,以及408题里面的尾删?】
- 换成 LC 2 两数相加了,典。昨晚美团开场就是这道,美团前一天第一次做也没啥问题,结果美团面的时候 carry 赋值位置一直没放对,大体思路有,但是 carry 位置问题导致一直有小 bug,到半个点了放弃了开始八股拷打(美团挂了);面完美团去力扣做了一遍明白为啥了,结果今天小米还是这道,高兴坏了,这次没啥问题一遍秒了,没留遗憾。然后让讲讲思路,从头讲了一遍,感觉讲的也挺顺畅
反问
先问我到岗时间,可实习时间情况
- 如果能加入,负责的业务主要是什么?——架构升级(部门业务细节省略)
- 面试结果多久?——不好说
- 后面如果有的话还有几轮面试?——一轮技术面,HR 面不清楚,暑期实习都是两轮技术面
总结
2024-04-18
感觉面试官很善良,按简历问,问的也不难,没怎么追问,答完能听懂我在说什么的直接就下一个问题;15 min 八股+项目,30 分钟算法,总共45 min 结束,开始反问答疑环节,最后53 min 再见~
当天下午晚上没动静,第二天上午有点小焦虑,刷牛客看看,等中午十二点多终于来了电话约二面!一面 OK!很舒服的一场面试!
---
牛友们觉得有用的话,收藏同时顺便点点赞呗~谢谢!
#小米##软件开发2024笔面经#Kiro面经 文章被收录于专栏
Java后端,自己的面经整理总结