2024年4月四川鸿学金联13-20K高级java社招面经
1. Token 详解
Token(通常指JWT)是一种用于身份验证和授权的令牌机制,包含三部分:
-
Header:算法和类型
-
Payload:携带的用户信息(如用户ID、权限)
-
Signature:签名验证完整性
特点:
-
无状态,服务端无需存储会话
-
可包含过期时间,支持跨域
2. Refresh Token 的作用
-
用途:当Access Token过期时,通过Refresh Token重新获取新的Access Token,无需用户重新登录
-
流程:
-
客户端使用过期的Access Token请求资源
-
服务端返回Token过期错误
-
客户端使用Refresh Token申请新Access Token
-
服务端验证Refresh Token并返回新Token
-
-
优势:提升安全性,减少用户频繁登录
3. Cookie 和 Session 的区别
| 特性 | Cookie | Session |
|---|---|---|
| 存储位置 | 客户端浏览器 | 服务端内存或数据库 |
| 安全性 | 较低(可能被篡改) | 较高(服务端控制) |
| 存储容量 | 较小(约4KB) | 较大(受服务端资源限制) |
| 跨域支持 | 可配置域名限制 | 默认不支持 |
| 性能影响 | 无服务端存储开销 | 需服务端存储和查询 |
4. 文件上传实现与 Spring 解析
前端实现:
html
<form method="POST" enctype="multipart/form-data"> <input type="file" name="file"> <button type="submit">上传</button> </form>
Spring 解析:
-
使用
MultipartFile接口处理上传文件:
java
@PostMapping("/upload")
public String upload(@RequestParam("file") MultipartFile file) {
String fileName = file.getOriginalFilename();
file.transferTo(new File("/path/" + fileName));
return "上传成功";
}
-
配置
MultipartResolver(如StandardServletMultipartResolver)解析 multipart/form-data 请求
5. 常见安全漏洞
-
SQL 注入
防护:使用预编译语句(MyBatis#{})、ORM 框架 -
XSS(跨站脚本)
防护:转义用户输入(如HtmlUtils.htmlEscape()) -
CSRF(跨站请求伪造)
防护:Spring Security 的 CSRF Token -
越权访问
防护:方法级注解(如@PreAuthorize) -
文件上传漏洞
防护:校验文件类型、限制上传目录执行权限
6. 秒传实现原理
-
核心:通过文件哈希值(如 MD5、SHA-1)判断是否已存在相同文件
-
步骤:
-
前端计算文件哈希并发送到服务端
-
服务端查询哈希值是否存在:
-
存在 → 直接关联用户与现有文件(秒传成功)
-
不存在 → 执行完整上传流程
-
-
-
优势:节省存储空间与上传时间
7. 项目架构图示例
text
[客户端]
↓ (HTTP/HTTPS)
[负载均衡器 (Nginx)]
↓
[网关 (Spring Cloud Gateway)]
↓
[微服务集群]
├── 用户服务
├── 订单服务
└── 文件服务
↓
[公共组件]
├── 认证中心 (JWT)
├── 配置中心 (Nacos)
└── 消息队列 (RabbitMQ)
↓
[数据存储]
├── MySQL (业务数据)
├── Redis (缓存)
└── OSS (文件存储)
8. 家庭服务外部访问方案
-
动态DNS服务(如花生壳):
-
解决家庭宽带无固定公网IP问题
-
-
路由器端口转发:
-
将公网IP的端口映射到内网服务器
-
-
内网穿透工具(如 frp、ngrok):
-
通过第三方服务器中转流量
-
-
云服务器反向代理:
-
通过云服务器将请求转发到家庭网络
-
9. DSL(领域特定语言)了解
-
定义:针对特定领域设计的专用计算机语言
-
分类:
-
内部DSL:基于宿主语言(如Java Stream API)
-
外部DSL:独立语法(如SQL、正则表达式)
-
-
应用场景:
-
Spring Integration 的集成流程配置
-
Elasticsearch 的查询语法
-
Gradle 构建脚本
-
更多推荐




所有评论(0)