06.05饿了么测开岗一面面经

总结:面了一个小时,前半段问项目,后半段问八股,两道编程题。面试官很热情,介绍了半天他们的业务,像是在汇报哈哈哈哈。#牛客AI配图神器#

八股部分
1.单例模式有用过吗,怎么实现的(不知道怎么实现)
回答:用得比较多的地方是数据库连接池,全局只能有一个连接池,并且提供全局访问。
以下是搜索结果:有五种经典的实现方式。

第一种是饿汉式(线程安全)他在类加载的时候就立即初始化实例,使用场景是实例占用资源少,且频繁使用。
第二种是懒汉式(非线程安全)延迟初始化,在使用的时候,如果没有这个实例才初始化,在多线程环境下会创建多个实例。
第三种是线程安全懒汉式,通过synchronized保证线程安全,但性能差。(因为锁的粒度很粗)不建议高频调用。
第四种是双重检查锁(DCL)。特点是延迟初始化,并且线程安全
第五种是静态内部类(推荐)。特点是利用类加载机制保证线程安全,延迟初始化且无锁。

2.JVM运行时数据区
回答:有堆,栈,方法区。堆存储对象实例,数组;栈存储线程的调用栈帧;方法去存储对象信息和方法信息。

3.事务ACID了解吗
回答:原子性,持久性,一致性,隔离性。
        1.原子性由undolog实现
        2.隔离性由锁或者MVCC实现(吟唱一下隔离性的四个级别)
        3.持久性由redolog实现
        4.一致性由前三者一起保证实现。

场景业务题
1.在一个发优惠券的场景,我有一个10w行的用户数据表,要取出里面的用户信息放入模型中,返回优惠券的结果,(模拟用户领券的过程)。我需要做的是,验证这些数据是否满足一定的断言(例如面额超过50块,补贴力度过大)。由于一台机器的内存不足以存放这些数据,你有四台机器,请你设计一个批量请求的工具,以分布式的方式去跑这些数据,你会做那些设计?
回答:我也没听太懂这些问题。以下是搜索结果。

我将设计一个分布式批量处理工具来解决发券场景中的大数据验证问题,核心目标是实现高效分片处理、动态负载均衡、分布式断言校验和结果聚合。以下是详细设计方案:
整体架构设计

核心组件设计
 1.分布式协调器(Coordinator)部署在Master节点,负责全局调度
 2.工作节点(Worker)部署在4台工作机器,负责实际处理
 3.断言验证引擎

该设计可实现10w用户数据的分布式处理,核心优势:
1. 横向扩展 :通过增加Worker节点可线性提升处理能力
2. 故障容忍 :自动重试和检查点机制保证可靠性
3. 资源优化 :流式处理避免内存溢出
4. 实时监控 :全过程可视化跟踪

2.饿了么的搜索功能,请你针对这个搜索功能写一些功能点。比如输入奶茶关键词,返回一些结果。
回答:我只回答了搜索框不能为空,对返回结果进行排序等等。以下是搜索结果。

1.搜索前引导功能
a.热词推荐
i.功能描述:搜索框下方动态展示当前商圈热门关键词(如奶茶,果茶)
ii.奶茶示例:用户点击奶茶热词,直接跳转到相关商品列表页
b.历史搜索
i.功能描述 :根据用户过往搜索记录(如“芋泥奶茶”)生成个性化推荐。
ii.数据支撑 :历史搜索订单转化率仅次于商家直达
c.场景化引导
i.功能描述​:分时段(早餐/下午茶)推送关联词(如下午茶时段优先显示“奶茶+甜品”组合)。
d.语音/图像搜索
i.​功能描述​:支持语音输入“奶茶”或拍摄奶茶图片触发搜索,系统自动转文字并匹配商品。
2.关键词处理功能
a.​智能纠错与联想​
i.功能描述​:自动纠正拼写错误(如“奶车→奶茶”),并联想高频词(如“奶茶→珍珠奶茶”“芝士奶盖”)。
ii.技术实现​:基于搜索日志构建纠错词库与拼音转换模型
b.​同义词与品类扩展​
i.​功能描述​:搜索“奶茶”时同步召回“果茶”“乳茶”等同品类商品。
c.​意图识别​
d.​功能描述​:
i.若用户多次搜索“低卡奶茶”,优先展示低糖商品;
ii.若搜索“奶茶+外卖速度”,则突出配送时效快的商家。
3.搜索结果展示功能
a.​多维度排序​
i.​排序逻辑​:综合销量(70%)、评分(20%)、配送速度(10%)等权重生成列表。
ii.​奶茶示例​:高销量“喜茶”排列在低销量小众品牌前。
b.​分层筛选器​
i.​筛选条件​:
ii.价格区间(如“10-20元”);
iii.口味(“芋泥”“黑糖”);
iv.商家服务(“免配送费”“会员折扣”)。
c.​商家直达与商品级搜索​
i.​功能描述​:
ii.输入“奈雪の茶”直接进入店铺页;
iii.搜索“霸气葡萄”显示该单品而非全店商品。
d.​商业化融合​
i.​功能描述​:在结果页插入“奶茶排行榜”或限时优惠活动(如“第二杯半价”)。
4.搜索后优化功能
a.​个性化结果缓存​
i.​功能描述​:用户多次搜索“奶茶”后,首页历史搜索栏固定显示该关键词。
b.​搜索分析看板​
c.​后台功能​:统计“奶茶”搜索量、点击率、转化率,指导商家优化菜品命名(如将“红茶拿铁”改为“鸳鸯奶茶”)。

3.测试人员除了写测试用例之外,还要做那些事情?
1.会参与需求的分析与测试策略制定
a. 参与需求评审会议,分析需求的可测试性
b. 指定测试计划
2.测试设计和用例开发
a.测试场景建模
b.测试用例编写
3.测试执行与缺陷管理
a.分层测试实施(单元,集成,系统测试)
b.缺陷全生命周期管理
4.质量评估与报告输出
a.质量指标分析
b.测试报告编制
5.自动化测试实施
a.接口自动化
b.UI自动化
6.跨团队协作
a.开发写作
b.产品沟通
7.测试过程改进
8.技术研究与创新

笔试题
1.SQL题目:用sql找出不同课程的成绩的第二名和第三名
WITH RankedScores AS (
    SELECT 
        student_id,
        course_id,
        score,
        RANK() OVER (PARTITION BY course_id ORDER BY score DESC) AS rank
    FROM scores
)
SELECT
    course_id,
    student_id,
    score,
    rank
FROM RankedScores
WHERE rank IN (2, 3)
ORDER BY course_id, rank;

2.LeetCode梦的开始:两数之和

反问环节
1.你们的业务内容
回答:主要负责搜索功能和营销功能,搜索就是饿了么的搜索框部分,营销主要负责爆红包等等。日常还要做一些系统的压力测试,以及与其他团队一起做集成测试。年度还会做测试平台开发,质量和效率提升的OKR。

2.工作节奏
回答:9点半上班,周一到周四可能下班晚一点,周五正常6点下班,周末双休。

3.开发技术栈
回答:主要是Java
全部评论
1. 单例模式定义与常见写法:单例模式要求一个类仅有一个对象实例,并提供全局访问点。常见写法有饿汉式、懒汉式、双重加锁验证、静态内部类、枚举等方式。 2. 重点实现方式剖析 - 双重加锁验证(DCL):先判断实例是否为空,为空时加锁,加锁后再次判断为空才创建对象,减少锁竞争以提升效率。不过存在指令重排问题,可能获取到未初始化完全的对象,在Java 5及后续版本,通过将实例变量声明为volatile可解决 。 - 静态内部类方式:借助JVM保证创建单例对象的线程安全与唯一性。外部类加载时,内部类不会立即加载,调用获取实例方法时才会加载并初始化单例对象,实现延迟加载,是较好的实现方法。 - 枚举方式:Effective Java作者推荐,是目前单例模式最佳实现。枚举初始化依靠static代码块,类加载时由JVM调度,线程安全。它还能防止反射和序列化破坏单例,反序列化通过Value方法查找枚举,而非新建对象。其他单例实现可在类上添加readResolve方法防止序列化破坏单例。
1 回复 分享
发布于 06-07 20:17 广东
哇 真好啊
点赞 回复 分享
发布于 06-05 21:41 北京

相关推荐

点赞 评论 收藏
分享
评论
3
5
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务