广州联奕科技Java后端实习一面面经
《面试题目》
笔试环节
- 选择题:Java基础、集合、并发。
- 填空题:Linux命令和Docker命令。
- 大题:两个SQL语句。
面试环节
- 自我介绍。
- 对集合的了解。
- HashMap和HashTable的区别。
- HashMap的key值可以为null吗?
- 如果存在哈希冲突,如何通过key找到对应位置?
- 对Java中锁的了解。
- 什么是轻量级锁?
- 在业务中如何实现一个轻量级锁?
- 锁的升级过程。
- 业务中出现循环依赖如何解决?
- 创建一个类如何交给Spring管理?
- @Resource和@Autowired的区别。
- 静态代理和动态代理。
- 了解哪些设计模式?
- 联合索引有了解吗?
- 联合索引(a, b, c),查询 a=1 and b=2 and c=3,哪些字段用到索引?
- 查询 a=1 and b>1 and c=3,索引使用情况?
- B树和B+树的区别。
- 说一下AQS。
- 对向量数据库的了解。
- 解决过数据库命中率的问题吗?
- 对目前AI的了解。
- OpenClaw执行流程。
- MCP和Function Calling的区别。
《参考解析》
- HashMap与HashTable区别:HashMap线程不安全,支持null键值;HashTable线程安全,key和value均不允许为null,目前基本被ConcurrentHashMap替代。
- HashMap处理哈希冲突:通过key的hashCode方法计算哈希值,定位到数组下标。若冲突,则通过equals方法在链表或红黑树中查找对应Entry。
- 锁的升级过程:无锁 -> 偏向锁 -> 轻量级锁 -> 重量级锁。升级是为了减少锁带来的开销,是根据竞争激烈程度自动演变的。
- Spring循环依赖:Spring通过“三级缓存”机制解决单例模式下的Setter注入循环依赖问题。
- @Resource与@Autowired:@Autowired是Spring提供的,默认按类型(byType)注入;@Resource是JDK提供的,默认按名称(byName)注入。
- 联合索引失效:遵循最左前缀原则。a=1 and b>1 and c=3中,a和b会用到索引,c无法使用,因为b的范围查询导致后续列索引失效。