深圳市益普科技JAVA实习一面面经
面试题目
- 项目经历:请介绍你参与的项目;追问私有空间和团队空间在功能实现上的差异、项目涉及的数据库表结构设计,爬虫抓取自动化功能的实现细节。
- 权限控制:项目如何实现RBAC(基于角色的访问控制)权限模型;追问为什么选择用JSON配置文件实现RBAC,而非传统数据库表结构。
- 缓存技术:项目中如何使用Redis;追问多级缓存的架构和工作原理,以及该方案带来的性能提升。
- 数据库与索引:谈谈对MySQL索引的理解;追问B+树索引的介绍、InnoDB和MyISAM存储引擎的核心差异、是否有通过索引优化查询性能的实际经验。
- Java基础:解释Java中基本类型和包装类的区别;追问以Integer为例,“==”和“equals()”比较结果不一致的情况及背后原因。
- 编程思想:解释面向对象和面向过程编程的区别;追问结合项目实例说明如何应用这两种思想。
- 协作工具:谈谈Git协作经验。
参考解析
-
RBAC权限模型:RBAC通过用户、角色、权限三者关联实现。使用JSON配置通常是为了降低系统耦合度、支持动态配置或脱离数据库实现轻量级权限控制,适合小型项目或配置变更不频繁的场景。
-
多级缓存架构:通常指“本地缓存(如Caffeine) + 分布式缓存(Redis)”。通过本地缓存减少Redis的网络IO延迟,缓解高并发下的Redis读压力,极大提升系统响应速度。
-
MySQL索引与存储引擎:B+树叶子节点存储完整数据(InnoDB)或地址(MyISAM),且通过双向链表相连支持范围查找。InnoDB支持事务、行级锁及外键,MyISAM则不支持事务且锁粒度大,适合读多写少场景。
-
Integer比较:
==比较的是对象内存地址,对于[-128, 127]范围内的Integer,由于Java缓存机制,使用==可能返回true;超过该范围会创建新对象导致地址不同。equals()比较的是对象存储的数值内容,开发中应统一使用equals()。