📍面试公司:卓望信息科技

👜面试岗位:Java 后端开发工程师(社招)

🕐面试时长:约 50 分钟

🔄面试轮次:第 1 轮技术面

✨面试整体节奏:

这场卓望的一面非常“上强度”,整体偏后端核心技术+系统设计+安全性考察,涉及 JWT、接口设计、并发编程、缓存方案、文件安全、幂等处理等多个维度,属于典型的中高级面试题型,广度和深度兼备。

✅ 面试题目逐题整理与解析:

1. JWT 取代 Session 的优缺点是什么

考察点:用户认证机制理解与系统扩展能力

面试公司:卓望科技

答案:

优点:

无状态认证,后端无需保存用户状态,易于扩展;支持跨服务调用(如微服务体系);数据可在客户端验证,减少数据库查询压力;支持多终端认证。

缺点:

Token 一旦泄露,难以撤销;存在体积大、携带敏感信息的风险;无法主动过期,只能等 Token 到期;频繁变更权限需等 Token 更新才生效。

总结:适用于分布式、无状态服务场景,但要结合黑名单、短 Token+刷新机制加强安全。

2. 一个类实现了两个接口,接口中方法名一样,会发生什么?怎么解决?

考察点:Java 接口冲突与多态理解

面试公司:卓望科技

答案:

如果两个接口方法签名完全一致(方法名+参数列表+返回值),不会报错,类中只需实现一次。如果返回值不同,编译报错。解决方式:

保证接口方法签名一致;如果冲突不可避免,可选择使用适配器模式做转化。

3. Spring Boot 中如何为第三方 Bean 添加初始化逻辑(不能修改源码)

考察点:Spring 生命周期和扩展机制

面试公司:卓望科技

答案:

可以通过以下几种方式为第三方 Bean 添加初始化逻辑:

使用 BeanPostProcessor:在初始化前后对 Bean 进行增强。使用 @Bean + initMethod:适用于你自己声明的 Bean。自定义 SmartInitializingSingleton 或 ApplicationListener:监听容器事件。

4. 扩展第三方 Bean 会带来哪些风险?

考察点:系统设计与组件隔离思维

面试公司:卓望科技

答案:

风险点:

和第三方版本强绑定,升级难;初始化顺序问题,可能导致依赖 Bean 未就绪;如果误操作,可能破坏原有逻辑,引发 bug;容器重启时行为不一致,难排查问题。

5. ConcurrentHashMap#size() 返回近似值的原因?

考察点:并发容器设计原理

面试公司:卓望科技

答案:

ConcurrentHashMap 是分段锁设计(JDK8 后使用 CAS+链表/红黑树);size() 是遍历每个 Segment/桶进行累加的快照值;在高并发下,统计过程中可能有 put/remove 操作,导致返回的 size 是近似值。

解决方式:如需准确计数,可使用 LongAdder 或额外维护一个计数器。

6. 缓存穿透、雪崩、击穿的区别及应对策略

考察点:高并发下缓存策略设计

面试公司:卓望科技

答案:

类型场景解决方案缓存穿透请求的是不存在的数据,缓存不命中,每次都打到 DB缓存空对象;BloomFilter 过滤非法请求缓存击穿某个热点 key 过期的瞬间,大量请求落到 DB设置互斥锁;热点数据提前续约缓存雪崩大量缓存同时过期,导致 DB 瞬时压力剧增设置随机过期时间;分批预热;限流降级

7. 如何确保用户上传文件的安全性?

考察点:Web 安全实践

面试公司:卓望科技

答案:

校验文件类型、大小、MIME 类型;白名单校验后缀,拒绝可执行脚本上传(如 .php, .exe);上传后改名存储,避免路径穿越;文件隔离存储,不与应用代码部署目录混合;引入病毒扫描、沙箱检查机制。

8. Java 如何安全地存储用户密码?

考察点:安全编码实践

面试公司:卓望科技

答案:

绝不能明文存储;使用 bcrypt、PBKDF2、scrypt 等带盐哈希算法加密;每个用户单独生成 salt,防止彩虹表攻击;加密过程应迭代足够次数(增加破解成本);不要使用 MD5、SHA1 这些过时算法。

9. 什么是 CSRF 攻击?如何防御?

考察点:前后端安全性理解

面试公司:卓望科技

答案:

CSRF(跨站请求伪造):攻击者诱导用户在已登录状态下,发送伪造请求(如转账)。防御措施:

验证 Referer;使用 CSRF Token;将重要接口设置为 POST;设置 SameSite Cookie 属性。

10. Nginx 如何监听端口?如何检测配置文件是否正确?

考察点:运维基础与部署实战

面试公司:卓望科技

答案:

监听端口:在 nginx.conf 中配置 listen 80;,即表示监听 80 端口;检测配置:

使用命令 nginx -t 检查语法是否正确;修改后 reload 配置:nginx -s reload。

11. 如何设计接口的幂等性?如何处理重复订单?

考察点:后端接口设计+业务防抖

面试公司:卓望科技

答案:

使用唯一请求标识(如订单号、UUID),在服务端做幂等判断;数据库设置唯一索引;使用 Redis 实现短期唯一标记(防止重复提交);MQ 场景下使用消息幂等 ID。

重复订单处理方式:

拦截重复请求;校验业务主键是否已存在;拒绝或返回上一次处理结果。

12. 工厂模式 vs 抽象工厂模式

考察点:设计模式理解与应用

面试公司:卓望科技

答案:

项目工厂模式抽象工厂模式定义创建一个产品创建多个产品族层次一层工厂接口,负责创建单一对象多层接口,多个工厂,创建多个产品族示例创建一个 Logger 实例创建 UI 控件(按钮、文本框)对应不同操作系统风格应用场景简单对象创建产品族复杂,需统一创建风格时

💡总结 & 面试复盘:

这场卓望的一面属于“硬核基础+安全+系统设计”的综合考察,题目并不偏,都是 Java 工程师在实战中绕不开的知识点:

我的收获如下:

JWT/Session 背后的“状态管理”思维,是高并发系统的关键点。Spring Bean 生命周期 + 并发容器使用,属于实际项目中高频踩坑点。接口幂等、文件上传安全、CSRF 等是项目上线前必须落实的底线。

✊写在最后:

这次卓望的一面难度不低,但也让我更清楚了当前面试的重点:不仅仅是会用技术,更要能理解背后的原理、掌控系统设计的边界。加油,稳住,后面也会越来越顺!

如果你也在准备 Java 社招,欢迎交流讨论,祝我们早日上岸!