网易Java服务端一面面经
《面试题目》
- 自我介绍
- 算法题:LeetCode 322 零钱兑换(一维 DP)
- AI 项目中团队智能问答知识库的短期记忆和长期记忆机制是怎样的?
- AI 项目中相似度召回具体是怎么做的?
- AI 开发中主要使用什么工具?
- AI 项目里是否只做 AI Code Review,还是也涉及自动化测试?
- 如果需要测试,是直接说明需求 agent 就能完成一系列自动化测试,还是需要用户手动设置?
- 如何遍历一个 Map,拿到所有的 key 和 value 对应关系?
String a = "abc"、String b = new String("abc")、String c = new String("abc")、String d = "abc",四者之间的==关系?- 对一个对象重写
equals()方法需要注意什么?
《参考解析》
- 零钱兑换(LC322):定义
dp[i]为凑齐金额i所需最少硬币数,初始化dp[0]=0,其余为最大值;状态转移为dp[i] = min(dp[i], dp[i-coin]+1),对每个金额遍历所有硬币面值取最优解,最终dp[amount]若仍为初始最大值说明无法凑齐。 - Map 遍历取 key/value:可以用
entrySet()遍历(一次拿到 key 和 value,效率最高,推荐方式),也可以用keySet()遍历后再get(key)(多一次查找开销),或用 Java 8 的forEach((k, v) -> ...)。 - String 的
==关系:字符串常量"abc"存于字符串常量池,a和d指向同一个常量池对象,a == d为true;new String("abc")会在堆上新建对象,b、c各自指向不同的堆对象,a == b、b == c均为false。 - 重写 equals() 的注意事项:需要满足自反性、对称性、传递性、一致性和对 null 返回 false;通常同时重写
hashCode(),保证相等的对象 hashCode 一致,否则会破坏 HashMap/HashSet 等基于哈希的集合的正确性。