📜  Zomato 面试经验(4 年以上经验)

📅  最后修改于: 2021-09-23 05:30:31             🧑  作者: Mango

一共进行了三轮,其中两轮基于系统设计,第三轮是工程经理轮。

第1轮:

第一轮提问如下:

  1. 解释当前项目的完整架构
  2. 解释您在开发任何功能时遇到的一个挑战,以及您是如何解决该问题的。
  3. SQL 和 NoSQL 数据库之间的区别。
  4. 什么是分片。
  5. 因为我从事过弹性搜索,所以设计弹性搜索集群,给定活动分片的数量,实例的数量和副本的数量。
  6. 数据实际上是如何存储在弹性搜索中的?
  7. 设计特定于客户端的速率限制器。鉴于在 T 秒内从客户端收到的最大 R 请求,如何设计您的系统。当收到更多请求时如何处理失败场景?我在队列的帮助下解释了这一点,并根据时间戳进行二分搜索,以在收到新传入请求时获取请求数。

第二轮:

第二轮问的问题和第一轮有些相似,列举如下:

  1. 再次解释当前项目和最近使用的功能。
  2. 与 DB 相比,在弹性搜索中存储数据的优势。
  3. 什么是索引以及它是如何在内部实现的。
  4. 给定两个数据库 A 和 B 以及两个数据库中的一个表 T(列 C1、C2),C1 是其中的主键,C2 是数据库 B 中的另一个索引列。选择查询将在两个数据库上运行,即 Select C2 from T where C1 =X。哪个数据库将提供更快的数据?
  5. 一个后续问题,给出了另一个选择查询,例如 Select * from T where C1=X and C2=Y。哪个数据库将提供更快的数据?
  6. 给定两个云 Azure 和 AWS,我们需要将数据存储在 AWS 上作为备份。读取和写入操作将仅在 Azure 上完成。您将如何管理这种数据同步?
    a)第一个解决方案,asnyc 更新 AWS 备份并为所有写入请求维护一个队列。当工作线程空闲时,开始在 AWS 上写入数据。
    b) 如果队列无法处理同时出现多个请求怎么办?然后编写一个 cron 作业调度程序,它将每小时触发一次 lambda 来同步这两个云之间的数据。
  7. 给定一个由一天收到的所有请求日志组成的日志文件,您将如何计算最大请求数/秒和最大活动并发用户数。
    a) 我提供的第一个问题的解决方案:从日志文件中读取数据并根据 timstamp 对数据进行排序。排序后,根据第二个间隔对数据进行分组,比如 12:00-12:01,然后计算这些组的最大大小。
    b) 对于第二个问题,我们将再次对数据进行排序,然后对每次登录进行计数++,对于每次注销进行计数–。如果count> max,则更新max_Concurrent_users。

第 3 轮:

第三轮主要围绕当前项目进行讨论。