一面
- 阐述项目平台的功能?
- 商家端(苍穹外卖的商家端)的话有什么功能呢?
- 用户端(苍穹外卖的用户端和商家端)又有什么功能?
- rabbitmq 通过延时消息加死信交换机如何实现的订单 30 分钟未支付自动取消呢?
- 跟传统的相比,这个优势是什么?除了能够降低定时任务的轮询对数据库的压力。传统定时任务轮询有什么问题?
- 旁路缓存的工作模式是什么?
- 那你是把什么数据缓存到了 redis 中呢?
- 如果把全部店铺信息和热门数据放到 redis,压力也不小吧?你是怎么区分数据该不该放缓存呢?
- 解释一下对于写操作,先更新 DB 再删缓存?
- 你说对于删除缓存失败引入了 MQ 重试的机制,你来讲一下你是如何重试的?那你如果重试多次依然失败了,有什么应对策略吗?
- 解释一下你这个 redis 使用 bitMap 实现签到的功能?
- 解释一下分布式锁和 lua 脚本在秒杀场景里扮演的角色?
- java 的==与 equals 的区别?说说对于基本数据类型和对象类型的区别,举个例子?
- 重载跟重写的区别是什么?
- 深拷贝和浅拷贝的区别是什么?
- 静态变量和实例变量的区别是什么?
- ArrayList 的优缺点是什么?(这里感觉面试官是照着某八股网站念的)
- 手撕有效的括号
总体来说不是特别难,但是问的很细致,而且重在广度。如果你的项目用某个技术实现了对应功能,请好好思考使用当前技术的原因、传统技术的问题、当前技术带来的优化、以及当前技术带来的新的问题和应对策略。
二面
- 项目做过自测吗?
- 了解过 Agent 开发吗?
简单介绍了下 agent 开发
- 手撕合并 K 个升序链表(不可以用 list,需要自定义链表结构)
- 如果不用优先队列,你还有别的方法吗?
这里只答出了顺序合并,还可以优化为分治合并
- 针对这个题写个测试用例,比如说你可以认为这是对外提供的接口,你会怎么设计呢?
套模板,必有的四个方面:
功能测试、性能测试、兼容性测试、安全性测试,其他可以自己想到啥,说一下。
功能测试:测试传入链表,功能是否成功执行。边界值测试,如果传入空链表,是否会提示请输入有效数据。
性能测试:
- 对接口进行压力测试(jmeter),查看接口的 qps、tps 是否在可接受的范围内
- 对接口进行长时间的持续访问测试,观察系统 cpu 是否飙高、是否有出现性能下降、内存泄漏的问题。
兼容性测试:
- 输入参数的兼容性:对各种参数,包括正常、异常参数,是否有正确处理
- 环境兼容性:接口在不同的环境中要表现一致:开发环境、测试环境、生产环境
安全性测试:
- 如果接口涉及到隐私性参数,是否以加密形式存在,被抓包后是否容易被破解。
- 检验 SQL 注入、XXS 攻击
- 你在测接口时,跑了大概 100 条,90%成功,返回 200,但是有 10%的 case 返回的是 502,你怎么去排查这个问题?
通常是 Nginx(网关)无法连接到上游 Java 服务,可能挂了
- 如果 Nginx 日志正常呢,没有发现特别异常的日志,还可能是什么问题?
- 假设所有问题线下都测试完了,这个接口没问题,准备上线。你认为从质量保障的角度来看,还需要做哪些工作?
- 如果系统在某天突然崩溃了,你怎么及时知道这个情况呢?
监控告警。
- 你的项目中用 mq 做订单超时支付的判断,怎么做的?
定时任务轮询、轮询带来的问题、引入 mq 的延时消息和死信交换机、带来的新的问题、怎么解决新的问题、效果
- 大模型日常有使用吗,你认为大模型对平常测试有什么帮助?