问了个人情况和最近有哪些实习面试介绍部门情况,疯狂拷打项目。以为大公司看不上玩具项目,只会问八股,没怎么准备,被问的汗流浃背,一问细节就懵逼项目问题:1.讲一个秒杀优惠卷的一个流程?2.如何保证秒杀业务的超卖问题? 乐观锁3.rua脚本能解决业务的多线程安全问题么? 保证了业务的原子性(多条redis命令一次性执行完),不能保证多线程的安全问题,多线程安全是通过setnx完成的4.首页的随机blog是按排序规则去显示的? 根据点赞数排序(select * from tb_blog order by liked)5.feed流推送原理,普通人和网红大v会一样么? 推拉结合,普通人直接推流,网红大v对于普通粉丝采取主动拉取的方式,对于死粉采用推的方式。6.feed流数据保存在哪里? 保存在redis中,每个用户都有自己一个信箱feed:user_id,当关注者发布新推文时候,会把blog_id推送到粉丝信箱里7.blog的评论是怎么展示,万一有上万条评论怎么办?8.blog在数据库是怎么保存的? 发布人id,关联商铺id, 标题,图片地址(探店的照片最多9张,多张以","隔开),内容,点赞数9.blog点赞接口,如何避免一个重复点赞? 在redis维护了一个set,key为blog:liked:id,保存了点赞该博客的用户id。10.项目哪些地方用到互斥锁? 避免在长时间的缓存重建商铺,高并发请求导致缓存击穿;11.看你存在点赞排行blog的功能,点赞排行如何实现,排行数据在哪里维护和更新,假如点赞更新,会立马更新么? 当时回答是在redis中维护了点赞的排行,实际黑马点评中是直接查数据排序的,没认真看源码,给自己挖坑。如果是根据sortedset保存blog_id,然后score是点赞数的话。可以通过异步线程去更新数据库。或者是点赞完以后主动更新redis和mysql。12.商铺缓存更新策略是什么? 先修改数据库,后删除缓存。如果直接更新缓存,如果该数据没有用户查询都是无效数据。其此先数据库后缓存删除比先缓存删除后数据库更新更能避免脏数据出现13. 为什么用redisson?提供了分布式锁(分布式系统多进程可见的锁,实现了一人一单,锁住userID),最后一道算法题炸裂面试官我想做数据结构和算法,我说算法刷的比较多点,他说这道比较简单。力扣16题,上来就没有思路,太菜了很常规一道题,面试官又给思路,又帮忙改bug,到最后都没a出了,估计是真把面试官整无语了总结:面试官人很好,感觉一开始回答问题已经漏洞百出,还愿意给我面了将近2h思考:1. 热门博客实现(按照点赞数排行)黑马点评实现是直接查数据库(order by liked)。gpt分析 - Redis有序集合:可以利用Redis的Sorted Set数据结构,将博客的ID作为成员,点赞数作为分数(score)。 - 使用缓存与数据库结合的方式:将前10名的博客数据缓存到Redis中,定期或在数据更新时刷新缓存。(感觉不适合点赞频繁场景) - 使用消息队列异步更新:用户点赞时,将点赞事件写入消息队列(如Kafka、RabbitMQ)。消费者从消息队列中读取点赞事件,更新Redis和数据库中的数据。定期同步: 定期将Redis中的数据同步回数据库,以确保持久化。