美团测开面经

5.10一面
1、介绍项目
2、那里使用了redis,怎么使用redis,redis对于这种大量请求的话。
3、rabbitMQ怎么保证消息的可靠性
4、为什么做这个项目以及参考了什么
5、从事测开岗位的优势,给你一个全新的APP该怎么测试
6、怎么利用大语言模型怎么做测试
7、输入一个url到页面展示的全过程
8、Restful API
9、Spring bean 是线程安全的吗
10、数组怎么快速拷贝
11、说一下你熟悉的Linux、maven命令
12、动态sql的优点
13、数据库锁
14、手撕:最长回文子串
全部评论
Spring中的Bean线程安全性取决于Bean的作用域(Scope)和Bean内部的状态管理。具体分析如下: 1. **Singleton Scope(单例)**:这是Spring默认的作用域。当Bean被定义为Singleton时,Spring IoC容器仅创建该Bean的一个实例,并在每次请求该Bean时返回相同的实例。对于Singleton Bean来说,线程安全问题取决于Bean本身的实现: - **无状态Bean**:如果Singleton Bean是一个无状态的,即它不包含可变的实例变量,或者它的状态不会在方法调用间改变,那么这个Bean通常是线程安全的。因为所有操作都不依赖于特定实例的状态。 - **有状态Bean**:如果Singleton Bean维护了可变状态(即实例变量可以在方法调用间改变),那么它就可能存在线程安全问题。多个线程同时访问和修改同一份可变状态可能会导致数据不一致、脏读等问题,这时就需要开发者手动添加同步机制(如synchronized关键字、Locks或其他并发控制工具)来确保线程安全。 2. **Prototype Scope(原型)**:对于Prototype作用域的Bean,每次请求都会创建一个新的实例,因此不存在多个线程共享同一实例的问题,从而默认情况下是线程安全的。但需要注意的是,每个实例的管理(如生命周期、并发访问控制)需由开发者自行处理。 3. **其他作用域**:如Web应用中的Request、Session作用域的Bean,由于它们的生命周期与特定的HTTP请求或会话绑定,通常也是线程安全的,因为每个请求或会话都有独立的Bean实例。 总之,Spring框架本身并不直接提供Bean的线程安全保证,Bean的线程安全性更多依赖于开发者如何设计和实现Bean。对于Singleton Bean,特别是那些含有可变状态的,开发者必须谨慎处理并发访问,以确保线程安全。
3 回复 分享
发布于 2024-05-17 12:27 广东
要确保 RabbitMQ 中消息的可靠性,可以采取以下一些方法和策略: 1. **持久化消息**:在发布消息时,将消息标记为持久化(persistent)。这样即使在RabbitMQ服务器重启或崩溃时,消息也不会丢失。 2. **持久化队***保消息被发送到持久化队列,以防止在RabbitMQ服务器重启时丢失队列中的消息。可以在声明队列时指定队列为持久化的。 3. **事务机制**:使用事务机制确保消息的可靠性。通过启用事务,可以在将消息发布到队列之前开启事务,在消息发送后再提交事务。如果提交事务成功,则消息将被发送到队列中;如果提交失败,消息将不会被发送。 4. **确认机制**:使用确认机制来确保消息被正确地发送到队列中。生产者发送消息后,可以等待 RabbitMQ 服务器返回一个确认信息,以确保消息已经被正确接收并处理。 5. **消息发布确认**:使用消息发布确认机制,生产者可以在消息被正确投递到交换器后,RabbitMQ 服务器发送一个确认给生产者。这种方式可以确保消息成功到达交换器。 6. **消息消费确认**:在消费者从队列中接收消息并成功处理后,可以向 RabbitMQ 发送确认信息,告知 RabbitMQ 可以删除该消息。 7. **备份队列**:设置备份队列,以确保即使主要队列发生故障,消息也能够被安全地存储和传递到备份队列中。 通过结合以上方法,可以有效地提高 RabbitMQ 中消息的可靠性,确保消息在生产者和消费者之间的可靠传递和处理。
1 回复 分享
发布于 2024-05-17 12:30 广东
佬哪个部门呀
点赞 回复 分享
发布于 2024-05-13 21:12 江苏
佬是哪个部门
点赞 回复 分享
发布于 2024-05-13 19:41 湖南

相关推荐

总结:面了一个小时,前半段问项目,后半段问八股,两道编程题。面试官很热情,介绍了半天他们的业务,像是在汇报哈哈哈哈。八股部分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,    rankFROM RankedScoresWHERE rank IN (2, 3)ORDER BY course_id, rank;2.LeetCode梦的开始:两数之和反问环节1.你们的业务内容回答:主要负责搜索功能和营销功能,搜索就是饿了么的搜索框部分,营销主要负责爆红包等等。日常还要做一些系统的压力测试,以及与其他团队一起做集成测试。年度还会做测试平台开发,质量和效率提升的OKR。2.工作节奏回答:9点半上班,周一到周四可能下班晚一点,周五正常6点下班,周末双休。3.开发技术栈回答:主要是Java
饿了么一面136人在聊 查看11道真题和解析
点赞 评论 收藏
分享
评论
8
72
分享

创作者周榜

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