📜  Crest Data Systems SDE 面试经验(校内)(1)

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

Crest Data Systems SDE 面试经验(校内)

背景

Crest Data Systems 是一家总部位于美国的软件开发公司,在印度、日本和中国都设有分公司。该公司主要致力于提供数据分析、人工智能、物联网、区块链等领域的解决方案和服务。本次面试是Crest Data Systems面试的一部分,主要考察应聘者在数据结构、算法、Java面向对象编程、数据库等方面的掌握程度和实际应用能力。

面试流程

本次面试分为一轮在线编程测试和一轮现场面试。

在线编程测试

在线编程测试主要考察应聘者的编程能力和基本算法和数据结构的掌握程度。测试时,应聘者需要使用Java语言完成三道编程题。测试题目大致如下:

Question 1

实现一个“两数之和”的函数,使其能够返回数组中和为目标值的两个整数的下标。

示例: 给定nums = [2, 7, 11, 15], target = 9,

因为nums[0] + nums[1] = 2 + 7 = 9, 所以返回[0, 1]。

public int[] twoSum(int[] nums, int target) {
    int[] res = new int[2];
    Map<Integer, Integer> map = new HashMap<>();
    for (int i = 0; i < nums.length; i++) {
        if (map.containsKey(target - nums[i])) {
            res[0] = map.get(target - nums[i]);
            res[1] = i;
            return res;
        }
        map.put(nums[i], i);
    }
    return res;
}

Question 2

实现一个冒泡排序算法。

public void bubbleSort(int[] nums) {
    for (int i = nums.length - 1; i > 0; i--) {
        for (int j = 0; j < i; j++) {
            if (nums[j] > nums[j + 1]) {
                int temp = nums[j];
                nums[j] = nums[j + 1];
                nums[j + 1] = temp;
            }
        }
    }
}

Question 3

实现一个字符串反转函数。

public String reverseString(String s) {
    char[] arr = s.toCharArray();
    int left = 0, right = s.length() - 1;
    while (left < right) {
        char temp = arr[left];
        arr[left++] = arr[right];
        arr[right--] = temp;
    }
    return new String(arr);
}
现场面试

现场面试是本次面试的主体环节,主要分为三个部分:数据结构和算法、Java面向对象编程和数据库。

数据结构和算法

应聘者需要在面试官的要求下,手写算法代码,主要考察应聘者解题思路和现场编程能力。下面是面试题目的大致要求:

  • 请实现一个快速排序算法。
  • 请解决一个二叉树遍历问题。
  • 请实现一个二叉树的深度优先搜索。

快速排序算法示例代码:

public void quickSort(int[] nums, int low, int high) {
    if (low < high) {
        int pivot = nums[low];
        int i = low, j = high;
        while (i < j) {
            while (i < j && nums[j] >= pivot) {
                j--;
            }
            nums[i] = nums[j];
            while (i < j && nums[i] < pivot) {
                i++;
            }
            nums[j] = nums[i];
        }
        nums[i] = pivot;
        quickSort(nums, low, i - 1);
        quickSort(nums, i + 1, high);
    }
}

Java面向对象编程

应聘者需要手写代码,主要考察应聘者对面向对象编程的掌握程度和现场编程能力。下面是面试题目大致要求:

  • 请创建一个类,实现人员信息管理的增删改查功能。
  • 请简述Java中的多态性和继承原理。
  • 请简述Java中的异常处理机制。

人员信息管理类示例代码:

public class PersonnelManagement {
    private List<Person> list;

    public PersonnelManagement() {
        list = new ArrayList<>();
    }

    public void addPerson(Person person) {
        list.add(person);
    }

    public void deletePerson(String name) {
        for (Person person : list) {
            if (person.getName().equals(name)) {
                list.remove(person);
                break;
            }
        }
    }

    public void updatePerson(Person person) {
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).getName().equals(person.getName())) {
                list.set(i, person);
                break;
            }
        }
    }

    public Person getPerson(String name) {
        for (Person person : list) {
            if (person.getName().equals(name)) {
                return person;
            }
        }
        return null;
    }
}

class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

数据库

应聘者需要手写代码,主要考察应聘者对数据库的基本概念和SQL语言的掌握程度。下面是面试题目大致要求:

  • 请简述数据库中的事务和索引原理。
  • 请编写一条SQL语句,用于查询某个用户的订单信息。
  • 请编写一条SQL语句,用于创建一个表,并定义各字段数据类型以及约束条件。

查询语句示例代码:

SELECT * FROM orders WHERE user_name='John';

表创建语句示例代码:

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    user_name VARCHAR(20) UNIQUE NOT NULL,
    password VARCHAR(20) NOT NULL,
    email VARCHAR(30),
    gender CHAR(1),
    birthday DATE
);
总结

该面试主要考察应聘者对基本算法、数据结构、Java面向对象编程和数据库的掌握程度和实际应用能力。应聘者需要具备较强的编程能力和实际项目经验。建议应聘者在准备面试前,先熟悉面试流程和常见面试题,并进行针对性的练习,同时注意实际项目经验的积累和沟通能力的提升。