昨天还在纠结中午吃什么,今天手机里的饿了么 APP 就变了个样。
11 月 3 日饿了么 APP 内测版本(12.0.1)直接换马甲更名为“淘宝闪购”,新标语“外卖放心点,美食准时达”也安排上了。表面看是换个马甲,但深究一下,这信号可不一般:饿了么,正在被彻底“淘宝化”。
不知道现在手里攥着饿了么 OC 等开奖的同学,此刻会是什么感受。这算不算无痛进入淘天大家庭了?

不过待遇应该还是会沿用饿了么原有的薪酬体系。毕竟,名字是新的,但发工资的钱包可能还是旧的。
给大家整理了去年饿了么开奖情况:
-
java 开发
24k * 16
26k * 16 + 2w 签字费(部分同学有)
-
算法
28k*16+ 5w 签字费(部分同学有)
31k*16 + 5w 签字费(部分同学有)
平心而论,这个数字对比阿里系和美团都不算高,去年不少同学反馈,觉得开奖不及预期。
不过今年饿了么变成“淘宝闪购”,只要对比美团、京东,开奖能稍微高一些,那就是一个很香的 offer 了。
……
今天分享 JAVA 阿里饿了么一面(45min) 面经。

篇幅有限,完整答案可以进入 面试鸭 - 程序员求职面试刷题神器,高频编程题目免费刷 进行查阅。
线程池的原理是什么?
线程池是一种池化技术,用于预先创建并管理一组线程,避免频繁创建和销毁线程的开销,提高性能和响应速度。
它几个关键的配置包括:核心线程数、最大线程数、空闲存活时间、工作队列、拒绝策略。

主要工作原理如下:
- 默认情况下线程不会预创建,任务提交之后才会创建线程(不过设置 prestartAllCoreThreads 可以预创建核心线程)。
- 当核心线程满了之后不会新建线程,而是把任务堆积到工作队列中。
- 如果工作队列放不下了,然后才会新增线程,直至达到最大线程数。
- 如果工作队列满了,然后也已经达到最大线程数了,这时候来任务会执行拒绝策略。
- 如果线程空闲时间超过空闲存活时间,并且当前线程数大于核心线程数的则会销毁线程,直到线程数等于核心线程数(设置 allowCoreThreadTimeOut 为 true 可以回收核心线程,默认为 false)。
什么是自旋锁和可重入锁?
锁自适应自旋是 Java 锁优化中的一种机制,用于减少线程在竞争锁时频繁挂起和恢复的开销。
自适应自旋的核心思想是,在锁争用较少的情况下,线程在进入等待状态前,先执行一段自旋操作(即短暂忙等),而不是立刻挂起线程。
在 Java 中 Syncronized 在争抢重量级锁时候会自旋。具体指的是在重量级锁时,一个线程如果竞争锁失败会进行自旋操作,说白了就是执行一些无意义的执行,空转 CPU 等着锁的释放。
原理:
- 自旋:当一个线程尝试获取锁失败时,它会先忙等一段时间,即自旋,而不是立刻进入阻塞状态。自旋指的是线程反复检查锁是否释放的操作。
- 自适应性:自适应自旋锁通过动态调整自旋的次数来提高性能。自适应的策略基于之前的自旋结果,假如上一次自旋很快获得了锁,下次可能会增加自旋次数;如果自旋失败,则减少自旋时间甚至直接放弃自旋。
可重入锁是一种允许同一线程多次获取的锁。简单来说,线程在已经持有锁的情况下,可以再次获得该锁而不会造成死锁。
set 和 list 有什么区别?
Java 中的集合类主要分为两大类:Collection 接口和 Map 接口。前者是存储对象的集合类,后者存储的是键值对(key-value)。
Collection 接口下又分为 List、Set 和 Queue 接口。每个接口有其具体实现类。以下是主要的集合类:
List 接口:
- ArrayList:基于动态数组,查询速度快,插入、删除慢。
- LinkedList:基于双向链表,插入、删除快,查询速度慢。
- Vector:线程安全的动态数组,类似于 ArrayList,但开销较大。
Set 接口:
- HashSet:基于哈希表,元素无序,不允许重复。
- LinkedHashSet:基于链表和哈希表,维护插入顺序,不允许重复。
- TreeSet:基于红黑树,元素有序,不允许重复。
所以网上有些说 Set 是无序集合非常不准确,因为需要看具体的实现类。
篇幅有限,完整答案可以点击下方小程序进行查阅:
1030

被折叠的 条评论
为什么被折叠?



