首汽约车 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数据库的一致性

延迟双删

  1. 先删除缓存
  2. 更新数据库
  3. 延迟500ms,删除缓存

第一次删缓存:防止读到旧值;避免缓存穿插

你完成了哪个模块。详细介绍一个

订单模块 + 权限模块

订单模块: 支持的用户下单,订单状态管理,超时自动取消,订单查询与分页。

关键点:使用MyBatis操作订单表,实现分页查询接口;利用Resid缓存订单状态提升接口响应速度,引入SpringTask实现定时任务,自动处理未支付订单的超时取消。

为了应对缓存一致性问题,采用延迟双删策略,避免出现脏读或缓存击穿。

权限模块: 基于Spring Security + JWT实现用户登录、注册、角色控制及接口防护。

关键点:用户注册登录后,生成JWT令牌返回前端。在认证过滤器中解析token并识别用户信息,针对不同的用户角色,配置不同的访问权限。

讲一讲JVM?你们远程的服务器内存是多少

JVM是java虚拟机,用来解释自己的指令集并映射到本地CPU指令集和OS的系统调用。

JVM屏蔽与操作系统平台相关的信息,使得Java程序只需要生成在Java虚拟机上运行的目标代码,就可以在不同平台不加修改的运行。即一次编译,到处运行

如何解决超卖问题

Redis + Lua脚本 + 分布式锁 + 异步下单

商品库存预先缓存在Redis;用户下单时,使用Lua脚本做库存查询和库存预减;若扣减成果,则发消息到MQ,异步创建订单。

消费者收到订单创建消息后,异步将订单写入数据库;如果写入失败,系统可以做订单回滚。