📜  SDE-1 的 Zomato 面试经历 |校园 2021(1)

📅  最后修改于: 2023-12-03 15:05:07.451000             🧑  作者: Mango

SDE-1 的 Zomato 面试经历 |校园 2021

概述

本次面试是Zomato的SDE-1职位,主要考察候选人在数据结构、算法、系统设计和编程思想方面的能力。

面试过程
第一轮:在线编程测试

首先需要通过在线编程测试,测试时间为90分钟,主要包含以下题目:

  1. 给定一个字符串,判断它是否是回文字符串。
  2. 有一个n*m的网格,每个格子都有一个数字,找出一条从左上角到右下角的路径,使得路径上的数字和最小。
  3. 按照特定方式旋转一个矩阵。
第二轮:技术面试

这一轮是语音面试,时间约45分钟。主要考察的是对面试官提出的问题的回答。

问题主要包括:

  1. 讲述一个项目或问题,涉及到的技术、设计、实现方法等等。
  2. 根据一个生产问题进行调试。
  3. 对于某个算法进行分析。
第三轮:面试官与团队成员面试

这一轮主要是群面,面试官和一位团队成员一起参加,时间约为45分钟。主要讨论一些设计和案例问题。

问题主要包括:

  1. 请设计一个Web应用程序。
  2. 请说明如何处理大量请求和检测错误。
  3. 请描述REST规范中GET和POST之间的区别。
面试总结

整个面试过程非常严格和有趣。通过这次面试,我收获了很多,不仅仅是技术上的收获,还有面对面试过程的经验和技巧。如果您想要在技术方面有所突破并开展一份职业生涯,Zomato必将是你优秀训练的好去处。

代码片段
#include <iostream>
#include <vector>
using namespace std;

bool isPalindrome(string s) {
    int i = 0, j = s.size() - 1;
    while (i < j) {
        while (!isalnum(s[i]) && i < j)
            i++;
        while (!isalnum(s[j]) && i < j)
            j--;
        if (tolower(s[i]) != tolower(s[j]))
            return false;
        i++, j--;
    }
    return true;
}

int minPathSum(vector<vector<int>>& grid) {
    int m = grid.size(), n = grid[0].size();
    vector<vector<int>> f(m, vector<int>(n));
    f[0][0] = grid[0][0];
    for (int i = 1; i < m; i++)
        f[i][0] = f[i - 1][0] + grid[i][0];
    for (int j = 1; j < n; j++)
        f[0][j] = f[0][j - 1] + grid[0][j];
    for (int i = 1; i < m; i++) {
        for (int j = 1; j < n; j++)
            f[i][j] = min(f[i - 1][j], f[i][j - 1]) + grid[i][j];
    }
    return f[m - 1][n - 1];
}

void rotate(vector<vector<int>>& matrix) {
    int n = matrix.size();
    for (int i = 0; i < n / 2; i++) {
        for (int j = i; j < n - 1 - i; j++) {
            int tmp = matrix[i][j];
            matrix[i][j] = matrix[n - 1 - j][i];
            matrix[n - 1 - j][i] = matrix[n - 1 - i][n - 1 - j];
            matrix[n - 1 - i][n - 1 - j] = matrix[j][n - 1 - i];
            matrix[j][n - 1 - i] = tmp;
        }
    }
}

int main() {
    // 测试代码
    string s = "A man, a plan, a canal: Panama";
    cout << isPalindrome(s) << endl;

    vector<vector<int>> grid = {
        {1, 3, 1},
        {1, 5, 1},
        {4, 2, 1}
    };
    cout << minPathSum(grid) << endl;

    vector<vector<int>> matrix = {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };
    rotate(matrix);

    for (const auto& row : matrix) {
        for (int num : row)
            cout << num << ' ';
        cout << endl;
    }
    return 0;
}