经验: 5个月的软件开发经验
大学生的面试也是差不多的,所以如果你也是个大学生,也可以看看这篇文章。
我是通过一位Zomato员工的推荐申请的。
两周之后,人力资源部给我打了个电话,让我去面试。
总共进行了三轮面试。
一轮面试:(约60分钟)一开始,面试官问我之前公司在做的事情。然后,他深入探讨了数据库连接池技术、进程和线程的概念。我对这些问题都做了回答。
- 如果你对连接池不太了解,可以看看这个帖子的第一部分。
然后他给我出了两个SQL问题:
- 给定一个名为“parents”的表,包含以下列:
a) Person:人物
b) Parent:该人父母
c) Status:生死状态(生或死)
表中有两条记录对应的是同一个人,但记录了他们母亲和父亲的名字及其生死状态。
编写一个SQL查询来找出至少有一位父母还活着的人数。 - 对于相同的表,编写一个SQL查询来找出两位父母都还活着的人数。
我搞定了这两个问题,挺顺利。
- 如果你懂 GROUP BY 和 HAVING,那么这些问题就很简单。
之后,会有一个DSA问题让你回答:
他用讲故事的口吻讲了这个问题(就像在Codeforces上那样),但这里我只说问题的简化版本:
你有一个图,请回答下列问题:
- 组件的个数。
- 对于每个查询,你会得到两个节点。确认这两个节点是否在一个组件里。
我也很轻松地解决了这个问题。我的解决方案预处理的时间复杂度为O(N),每个查询的回答只需要O(1)时间。
大约过了四到五天,HR告诉我我通过了这一轮。接下来的一轮几天内就安排上了。
R2 面试环节(75 到 80 分钟的时长)这是一位有着大约6年工作经验的资深工程师拍的。
问了一个系统设计(高层次的系统设计)的问题和一个开放性的问题。
面试官首先问了我关于实习经历的问题。大约5分钟后,我进行了自我介绍和技术交流,之后他给我布置了一个系统设计的任务。
问题:春节期间,许多餐厅都关门了,但在春节过后,它们会重新营业。某家餐厅重新营业后,Zomato想要通知用户这家餐厅现在可以订餐了。在发送通知之前,Zomato还会检查该区域是否有配送伙伴;如果有,才发通知。
我需要设计一个高度可扩展的架构,以应对Zomato这种用户基数的规模。
我们对此问题讨论了大约一个半小时。
- 如果你对系统设计不熟悉,可以阅读这个博客 this blog。读完之后,你就能轻松搞定这类问题了。
在最后十分钟里,面试官问了第二个问题:编写命令行中用来反转搜索的代码。
如果你不知道什么是逆向搜索,当你在终端输入内容后按住 CTRL + R 时,它会建议你之前输入过的匹配命令。如果你使用的是 Ubuntu 或 Mac 的终端,可以试试看。
简单说来,我得写一段代码,检查给定字符串的一部分是否与之前的任何字符串匹配,然后返回匹配的字符串。
我遵循面向对象的原则(OOP)编写了代码,创建了包含公有和私有方法及成员变量的类。
我的天真解决方案很简单,但为了优化,我使用了字典树(Trie)。因为我以前从未在编程竞赛中使用过字典树,所以我并不清楚它的具体实现方式,因此我跳过了有关这部分数据结构的问题。然而,我依然通过了这次面试,因为在整个面试过程中,除了字典树的实现,我都准确回答了所有问题。
R3 的面试,大约30分钟左右这轮不是淘汰赛,通过R1和R2就算过关,也就算是被选上了。
这一回合是由一位副董级的人负责的,他有大约20年的经验。
这一轮里,他主要跟我介绍了Zomato的文化、工作生活平衡等。还跟我说了这个职位的待遇。
结果: 被选中
一些建议:- 参加竞赛编程不是必需的。你可以用基本的 LeetCode 技能通过这家公司的面试。
- 在面试之前,确保你对 SQL 面试题很熟悉。最好的 SQL 准备资源:点击这里。中等难度的问题非常适合。
- 把你的项目、过往经历和简历准备充分。
- 也要准备系统设计。虽然 FAANG 或其他大型科技公司不会在应届生岗位中问到这个问题,但初创公司可能会问。
- 最佳的系统设计资源:点击这里
- 学习我们在 C++ STL(或 Java 集合)中使用的 Map、Set 的内部实现。虽然这个问题在面试中没有被问到我,但我的一个朋友在 Zomato 面试中被问到了这个问题。
- Zomato 的面试非常难以预料,所以不要完全依赖别人的面试经验来准备这家公司。
- 运气也很重要。
共同学习,写下你的评论
评论加载中...
作者其他优质文章