蚂蚁集团Agent后端开发一面凉经
面试题目
一、项目与Agent相关
- 介绍一下Agent项目;
- 业务场景是什么;
- 底层调用了什么模型;
- 怎么调用的;
- 数据从哪里来;
- 数据隐私性问题有没有考虑过;
- 提及部门隐私数据处理逻辑;
- 属于自己学习项目还是真实落地;
- 负责项目哪一块中哪一块开发;
- Mybatis plus怎么用的;
- 会话记忆MySQL如何存储的;
- 回答过程有没有优化过再返回给用户;
- 实习技术难点;
- 未来想往哪个方向走;
二、Java基础 15. 接口和抽象的区别; 16. java比较两个对象相等有哪些; 17. ==和equals区别; 18. 重写equals要注意什么; 19. 为什么一定要重写hashcode; 20. 金融相关的计算金额用什么承载,double行不行;
三、并发编程 21. 什么是死锁; 22. 怎么解决死锁; 23. 给你一个代码,怎么判断他是否是线程安全的; 24. 你觉得他一定会有竞争吗; 25. 传入两个int值a和b,return a+b,这段代码是不是线程安全的呢; 26. 什么样是竞争资源;
四、数据库与系统设计 27. 熟悉哪些RPC框架; 28. MySQL事务机制; 29. 幻读和不可重复读; 30. 事务隔离级别;
参考解析
1. ==与equals的区别: ==在基本数据类型比较数值,引用数据类型比较内存地址;equals默认比较地址,重写后通常比较内容。
2. 为什么一定要重写hashCode: 在HashMap等散列表中,若两个对象equals相等但hashCode不等,会被放在不同桶中,导致无法识别为同一对象,破坏散列表逻辑。
3. 金额计算: 不能用double,因为存在精度丢失。应使用BigDecimal,或者用Long存储“分”作为单位。
4. 线程安全:
判断标准是是否存在共享变量的并发写操作。return a+b是线程安全的,因为a和b是局部变量,存储在栈中,线程私有。
5. 幻读与不可重复读: 不可重复读侧重于更新(同一事务读取两次数据不一致);幻读侧重于插入/删除(同一事务读取两次,结果集新增或减少了行记录)。