专栏名称: 沉默王二
技术文通俗易懂,吹水文风趣幽默。学 Java,认准二哥的网站 javabetter.cn
目录
相关文章推荐
李楠或kkk  ·  it 行业有一个方法论叫 ... ·  昨天  
烂板套利  ·  国产AI算力数据中心全景解析 ·  2 天前  
烂板套利  ·  国产AI算力数据中心全景解析 ·  2 天前  
连州点点网  ·  清远公布一批典型案例 ·  2 天前  
连州点点网  ·  清远公布一批典型案例 ·  2 天前  
通用技术集团  ·  通用技术集团:冲刺一季度 奋战“开门红”① ·  3 天前  
通用技术集团  ·  通用技术集团:冲刺一季度 奋战“开门红”① ·  3 天前  
51好读  ›  专栏  ›  沉默王二

饿了么开奖,竟然很心动。

沉默王二  · 公众号  · 科技自媒体  · 2024-11-25 14:04

主要观点总结

文章主要介绍了饿了么的发展历程、技术变革以及面试指南等相关内容。

关键观点总结

关键观点1: 阿里巴巴联合蚂蚁金服全资收购饿了么

2018年4月,阿里巴巴联合蚂蚁金服完成对饿了么的全资收购。饿了么被划分到本地生活集团,开启了新的发展篇章。

关键观点2: 阿里巴巴集团的组织变革和饿了么的划分

2023年3月,阿里巴巴集团迎来史上最大组织变革,设立六大业务集团,饿了么被划分到本地生活集团。虽然阿里的发展不再如日中天,但对于饿了么来说,这次变革带来了新的发展机遇。

关键观点3: 饿了么的面试和技术栈

文章提到了以Java面试指南中收录的阿里系面经同学为例,介绍了饿了么的面试知识点和技术栈。同时包括Redis实现分布式锁的本质和MQ异步秒杀下单的实现等关键技术问题。

关键观点4: Redis的内存淘汰机制和LRU、LFU的区别

当Redis的内存使用达到最大值时,会根据配置的内存淘汰策略来决定如何处理新的请求。文章介绍了常见的策略如noeviction、allkeys-lru、allkeys-lfu等,并解释了LRU和LFU的区别。

关键观点5: 数据库存储引擎和索引的选择

文章讨论了MySQL支持的存储引擎,以及为什么索引选择使用B+树而不是B树。此外,还涉及了SQL优化的方法和步骤。


正文

大家好,我是二哥呀。

2018年4月,阿里巴巴联合蚂蚁金服对饿了么完成全资收购;2023年3月,阿里巴巴集团迎来史上最大组织变革,开启“1+6+N”改革,设立六大业务集团。饿了么被划分到本地生活集团。

阿里拆分后,不再如日中天,但好处就是可以多并发投递简历(🥲),不用等一个挂了再投另外一个。最近,饿了么也开奖了,星球里也有球友的定薪还不错。

我这里也整理了一些百度的薪资情况放在了《 Java 面试指南 》专栏中。

  • 双非硕,Java 岗,开到了 24k*16,还有 6k 的搬家费,公积金按照 7 缴纳,是转正后的白菜
  • 硕士 985,给到了 25k,后端开发岗,感觉有点拉,base 上海
  • 硕士双非,aigc 算法,base 杭州,给了 28k,对于算法岗来说,真不多,不过有 5w 的签字费
  • 硕士 985,后端开发,给了 24k,直接拒了
  • 后端岗,给了 26k,算是 sp 吧,在杭州地区,比较心动的,很想去,因为听说饿了么比较 wlb

饿了么在 3 月份更换了新的 CEO,88 年的少壮派韩鎏,主打新三年“1+2”战略计划,1 就是外卖餐饮(核心业务),2 是即时零售(生鲜、日用百货、药品等)和即时物流(蜂鸟物流)。

我个人还是非常希望整个阿里系重振雄风的,因为阿里曾经是 Java 岗的集大成者,阿里发展的越好,学 Java 的小伙伴就会有更多的选择(😄)。

那接下来,我们就以 Java 面试指南中收录的阿里系面经同学 19  饿了么面试为例,来看看饿了么的面试都喜欢问哪些知识点和技术栈,好做到心中有数。冲冲冲。

背八股就认准三分恶的面渣逆袭

阿里系面经同学 19 饿了么面试

分布式锁用redis实现思路

Redis 实现分布式锁的本质,就是在 Redis 里面占一个“茅坑”,当别的客户端也来占坑时,发现已经有客户端蹲在那里了,就只好放弃或者稍后再试。

可以使用 Redis 的 SET 命令实现分布式锁 。同时添加过期时间,以防止死锁的发生。

三分恶面渣逆袭:set原子命令
SET key value NX PX 30000
  • key 是锁名。
  • value 是锁的持有者标识,可以使用 UUID 作为 value。
  • NX 只在键不存在时设置。
  • PX 30000 :设置键的过期时间为 30 秒(防止死锁)。

MQ异步秒杀下单怎么实现的

秒杀可以分为两个阶段,库存预扣减和异步处理下单。具体来说,党用户发起秒杀请求时,可以通过 lua 脚本+Redis 来完成第一阶段,MQ 主要负责第二阶段。

下单请求通过生产者写入消息队列,避免瞬时流量直接打到数据库,消费者从 MQ 拉取消息,再次校验库存,防止 Redis 和 MySQL 库存不一致,然后使用乐观锁进行库存扣减,最后写入订单表,记录用户秒杀成功的状态。

截图来自博客园:Yrion

redis内存淘汰机制  延伸到LRU   LFU

当 Redis 的内存使用达到最大值时,它会根据配置的内存淘汰策略来决定如何处理新的请求。

三分恶面渣逆袭:Redis六种内存溢出控制策略

常见的策略有:

  1. noeviction:默认策略,不进行任何数据淘汰,直接返回错误信息。
  2. allkeys-lru:从所有键中,使用 LRU 算法淘汰最近最少使用的键。
  3. allkeys-lfu:从所有键中,使用 LFU 算法淘汰最少使用的键。
  4. volatile-lru:从设置了过期时间的键中淘汰最近最少使用的键。
  5. volatile-ttl:从设置了过期时间的键中淘汰即将过期的键。

LRU 和 LFU 的区别是什么?

LRU(Least Recently Used):基于时间维度,淘汰最近最少访问的键。适合访问具有时间特性的场景。

LFU(Least Frequently Used):基于次数维度,淘汰访问频率最低的键。更适合长期热点数据场景。

存储引擎介绍

MySQL 支持多种存储引擎,常见的有 MyISAM、InnoDB、MEMORY 等。

存储引擎

索引为什么用B+树不用B树

B+ 树相比 B 树有 2 个显著优势:

首先,B+ 树的非叶子节点不存储数据,能包含更多的键值指针,因此在相同节点容量下,B+ 树的层级更少,树的高度更低。较少的树层级意味着查找路径更短,磁盘 I/O 次数更少。

极客时间:B 树

其次,B+ 树的叶子节点通过链表相连,非常适合范围查询,如 ORDER BY 和 BETWEEN。

极客时间:B+树

只需要找到符合条件的第一个叶子节点,顺序扫描后续的叶子节点就可以了。相比之下,B 树的每次范围查询都需要回溯到父节点,查询效率较低。

时间复杂度深究  b+树 快速排序...

树的高度 h 为:

其中 N 是数据总量,m 是阶数。每层需要做一次二分查找,复杂度为

总复杂度为:

了解快排吗?

快速排序是一种基于分治法的高效排序算法。其核心思想是:

  1. 选择一个基准值。
  2. 将数组分为两部分,左边小于基准值,右边大于或等于基准值。
  3. 对左右两部分递归排序,最终合并。

跳表了解吗 为什么不用跳表

跳表是一种有序的数据结构,它通过在每个节点中维持多个指向其它节点的指针,从而达到快速访问节点的目的。

三分恶面渣逆袭:跳表

为什么用 B+树不用跳表呢?

  • 跳表基于链表,节点分布不连续,会频繁触发随机磁盘访问,性能较差。
  • 跳表需要逐节点遍历链表,范围查询性能不如 B+ 树。

MySQL锁

三分恶面渣逆袭:MySQL 中的锁

按锁粒度划分的话,MySQL 的锁有:

  • 表锁:开销小,加锁快;锁定力度大,发生锁冲突概率高,并发度最低;不会出现死锁。
  • 行锁:开销大,加锁慢;会出现死锁;锁定粒度小,发生锁冲突的概率低,并发度高。
  • 页锁:开销和加锁速度介于表锁和行锁之间;会出现死锁;锁定粒度介于表锁和行锁之间,并发度一般。







请到「今天看啥」查看全文