首汽约车 Java
本文最后更新于:2025年10月14日 晚上
首汽约车-Java实习生面试
面试信息:
- 时间:2025年7月15日 14:00
- 形式:线下面试
- 时长:40分钟
Redis的常用数据结构?每种数据结构常用的情况
- String: 缓存对象,常规计数
- Hash: 购物车
- List:消息队列
- Set:点赞,共同关注
- Zset:排行榜,电话排序
MySQL分页语句如何写
LIMIT offset, size
offset = (pageNumber - 1) × size
你提到你用了策略模式,你能讲一下吗。你还了解哪些设计模式。挑一个介绍一下
在演唱会系统中,不同时间段在票务计算和定价策略上有差异:
- 正常票价
- 早鸟票价
- 临期票价
使用策略模式,将定价策略抽象为接口,各种不同的票价作为策略实现类,方便后期拓展和转换,避免if-else嵌套,拓展性强。
单例模式,工厂模式,观察者模式,装饰器模式,代理模式
单例模式
Spring中的Bean默认是单例的
订单表中索引是如何设计的
默认使用主键索引。订单号作为唯一索引,是业务的唯一标识。用户id也是索引,方便用户查询自己的订单。
项目是如何部署上线的,讲一讲
首先后端部署:使用Maven打包,上传服务器后,使用nohub+Java-jar
方式后台运行
前端部署:npm run build
部署vue项目
Nginx配置转发
如何保持Redis和MySQL数据库的一致性
延迟双删
- 先删除缓存
- 更新数据库
- 延迟500ms,删除缓存
第一次删缓存:防止读到旧值;避免缓存穿插
你完成了哪个模块。详细介绍一个
订单模块 + 权限模块
订单模块: 支持的用户下单,订单状态管理,超时自动取消,订单查询与分页。
关键点:使用MyBatis操作订单表,实现分页查询接口;利用Resid缓存订单状态提升接口响应速度,引入SpringTask实现定时任务,自动处理未支付订单的超时取消。
为了应对缓存一致性问题,采用延迟双删策略,避免出现脏读或缓存击穿。
权限模块: 基于Spring Security + JWT实现用户登录、注册、角色控制及接口防护。
关键点:用户注册登录后,生成JWT令牌返回前端。在认证过滤器中解析token并识别用户信息,针对不同的用户角色,配置不同的访问权限。
讲一讲JVM?你们远程的服务器内存是多少
JVM是java虚拟机,用来解释自己的指令集并映射到本地CPU指令集和OS的系统调用。
JVM屏蔽与操作系统平台相关的信息,使得Java程序只需要生成在Java虚拟机上运行的目标代码,就可以在不同平台不加修改的运行。即一次编译,到处运行
如何解决超卖问题
Redis + Lua脚本 + 分布式锁 + 异步下单
商品库存预先缓存在Redis;用户下单时,使用Lua脚本做库存查询和库存预减;若扣减成果,则发消息到MQ,异步创建订单。
消费者收到订单创建消息后,异步将订单写入数据库;如果写入失败,系统可以做订单回滚。