松鼠 AI 25 Java 开发 一面
松鼠 AI 25 Java 开发 一面
本文作者:程序员小白条
1)自我介绍
2)接口调用平台需求分析、业务流程介绍
3)邀请码设计
4)Map、List、Set 区别
5)中奖名单用什么结构,统计人昵称和名次以及频率
6)HashTable 和 HashMap 的区别
7)JVM 垃圾回收,对象死亡判断、垃圾回收算法、垃圾回收器
8)进程和线程的区别
9)线程池的作用
10)内存泄漏的场景和解决方案
11)OSI 七层模型
12)TCP 和 UDP 的区别
13)TCP 可靠性怎么保证的?
14)数据库深度分页优化
15)联合索引场景和注意事项
16)算法:中序遍历 + 合并两个有序数组
反问:技术栈和业务,模块划分等。
2)接口调用平台需求分析、业务流程介绍
需求分析:
- 目标:统一管理外部接口调用,保障安全性和可观测性。
- 功能:
- 权限控制:API密钥+IP白名单。
- 限流熔断:防止滥用(如令牌桶算法)。
- 监控报警:记录调用日志+失败告警。
业务流程:
- 用户申请API密钥并配置权限。
- 调用时携带密钥,网关校验权限和限流。
- 请求转发至后端服务,结果返回并记录日志。
3)邀请码设计
- 生成规则:
- 前缀(标识业务)+ 时间戳 + 随机码(如UUID部分字符)。
- 示例:
INV_20230801_3xY7。
- 存储:Redis(过期时间)+ MySQL(持久化)。
- 校验:Redis查重+业务规则(如用户绑定防刷)。
4)Map、List、Set 区别
| 特性 | Map | List | Set |
|---|---|---|---|
| 存储 | Key-Value对 | 有序可重复元素 | 无序唯一元素 |
| 实现类 | HashMap, TreeMap | ArrayList, LinkedList | HashSet, TreeSet |
| 用途 | 快速查找(O(1)) | 顺序访问/插入 | 去重/集合运算 |
5)中奖名单结构设计
-
需求:统计昵称、名次、中奖频率。
-
数据结构:
java
// 使用Map嵌套List Map<String, List<Record>> // Record包含:rank(名次)、frequency(频率) -
Redis实现:
- ZSet(Sorted Set):存储昵称和分数(名次)。
- Hash:记录昵称和频率(
HINCRBY user:frequency 昵称 1)。
6)HashTable 和 HashMap 的区别
| 对比项 | HashTable | HashMap |
|---|---|---|
| 线程安全 | 同步方法(性能低) | 非同步(需手动加锁) |
| Null键值 | 不允许 | 允许 |
| 迭代器 | En |
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
大学四年面经(学院本) 文章被收录于专栏
大学全部面经从大一到大四,从实习、秋招、春招等等,各种岗位,中小厂,乃至大厂面经! 公粽号:程序员落叶,里面分享全部文章详情。

