📜  SDE-1 的 OYO 面试体验(校内)(1)

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

SDE-1 的 OYO 面试体验(校内)

背景

我是一名应聘OYO SDE-1的程序员,经过几轮电话面试后,通过了初步筛选。随后,我被邀请来校内参加了一次面试。

面试环节
第一轮

第一轮面试持续了1个小时,主要是关于数据结构和算法的问题。以下是我被问到的问题:

  • 如何计算一个二叉树的深度?
  • 如何判断一个字符串是否为回文字符串?
  • 如何实现一个哈希表?
  • 如何在一个有序数组中查找某个元素的位置?

我通过运用数据结构和算法的知识,一一回答了这些问题。我的回答准确无误,但是由于些微的紧张,我有些语速过快。

第二轮

第二轮面试则考察了我的编程能力,我需要在一台笔记本电脑上,用Java语言完成3道题目的编程。

  • 判断一个数的二进制位中有多少个1。
  • 将一个字符串中的字母和数字分别排序,数字在前,字母在后。
  • 将一个数组中奇数和偶数分别分到两个不同的数组中。

我在规定时间内顺利完成了这三道题目,代码还能很好地运行。同时,我也可以在屏幕上调试代码,通过一些简单的打印语句来排查错误。

第三轮

第三轮面试则考察了我的软件架构能力。在面试中,我需要根据一些需求,设计出适合的软件架构。

  • 假设我们有一个酒店预订平台,我们需要设计出一个系统,让用户可以在线选择并预订酒店。
  • 假设我们有一个员工管理系统,我们需要设计出一个系统,让管理员可以方便地管理员工信息并进行账务统计。

我用软件架构的知识分析了这两个场景,并设计了满足需求的软件架构。

总结

这次 OYO 校园面试是一次非常有意义的经历。通过经历了这样的挑战和考验,我更加坚定地相信,只要经过不断学习和提升,就一定会成为一名优秀的程序员。

代码片段

以下是第二轮面试的代码片段:

public int countOne(int num) {
    int count = 0;
    while (num != 0) {
        count++;
        num = num & (num - 1);
    }
    return count;
}

public String sortString(String str) {
    if (str == null || str.length() == 0) {
        return str;
    }

    char[] charArray = str.toCharArray();
    Arrays.sort(charArray);
    int numCount = 0;
    for (char c : charArray) {
        if (Character.isDigit(c)) {
            numCount++;
        } else {
            break;
        }
    }
    Arrays.sort(charArray, numCount, charArray.length);
    return new String(charArray);
}

public int[] splitArray(int[] nums) {
    if (nums == null || nums.length == 0) {
        return nums;
    }

    int[] result = new int[nums.length];
    int index1 = 0;
    int index2 = nums.length - 1;
    for (int num : nums) {
        if (num % 2 == 1) {
            result[index1++] = num;
        } else {
            result[index2--] = num;
        }
    }
    return result;
}