第1轮:
- 目前公司项目深入。我们已经使用 Kafka 来实现一些功能。关于卡夫卡的讨论。
- 不可变类。
- 关于hashmap的讨论。为什么 hashmap 的默认大小是 16,为什么不是 14 或 15。
- 关于Java 8 特性的讨论。为什么我们应该使用流,有什么好处。
- 打印二叉树的左视图。我给出了保持水平的递归方法。面试官对方法和实施感到满意。
第二轮:
- 当前项目讨论。我在项目中的角色。
- 关于微服务的讨论。
- 实现哈希映射。我首先开始实施“put”方法。执行’put’后,他让我展示我做了什么。他讨论了我在实施这种方法时考虑的各种因素。 equals、hashcode、bucket查找、碰撞处理等。他对代码很满意,并要求我使这个方法线程安全。我没有在我的任何项目中研究多线程,所以在这里有点摸不着头脑。我在几个地方使用了同步块,并预先告诉他我以前从未研究过多线程,只知道理论概念。
- 设计AB测试软件。假设您在 UI 中有一个按钮。根据传入的请求,此按钮可以是红色、绿色或蓝色。每种颜色都有与之相关的权重,比如红色 (50%) 绿色 (30%) 蓝色 (20%)。现在您有传入的 Web 请求,因此您的请求分布应该是 50% 的 Web 请求按钮颜色应该是红色,30% 的 Web 请求按钮颜色应该是绿色,20% 应该是蓝色。您不知道 Web 请求的总数。我给了面试官2-3个方法,但他看起来不太满意。
这一轮大约持续 2-2.5 小时。好消息是面试官给了我适当的时间来思考和编码这两个问题。
第 3 轮:
本轮由工程总监负责。
最初的几个问题集中在当前项目以及您在项目中贡献了多少。
- 他问我在当前项目中的角色。
- 你在项目中给出的所有创新想法。
- 您在项目中建议的任何架构更改。
- 您在项目中解决的最大问题,然后讨论我在使用 Redis 和 Kafka 的当前组织中用于解决延迟问题的方法。
尽管这些问题看起来很正常,但他们的回答充分说明了您对当前项目的了解、您对技术的创新性和灵活性以及您接受新挑战的意愿。不要忽视这些问题并做好准备。
然后他要求设计url shortner (bitly links)
他的期望是它应该是生产就绪的设计,所以我必须考虑每一个细节。
我告诉他我将公开的方法和 API。
他告诉我用我将使用的签名和返回类型编写方法。 (从 spring 控制器开始,我将调用所有方法以完成流程。)
我们讨论了方法和他们的签名,他似乎很满意。
然后他让我设计相同的数据库模式。
讨论了我设计的模式、在这个用例中使用 sql 或 nosql 数据库、缓存和负载平衡。
这一轮进行了 1.5 小时
在这一轮之后,HR 通知我,我被选中了。 🙂