📜  DE Shaw实习面试体验(校内)(1)

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

DE Shaw实习面试体验(校内)

简介

DE Shaw是一家领先的量化投资公司,以其在数学模型和计算机科学领域的卓越能力而闻名。该公司在全球范围内拥有超过1000名员工,并在美国、英国、印度和中国设有办事处。作为一名程序员,有机会进入DE Shaw实习可能是一个重要的里程碑,因为它可以让你深入了解复杂计算系统和金融市场。本文将分享一位面试者校内实习的体验,为广大程序员提供参考。

笔试

笔试主要测试了考生的编程能力和算法知识。在笔试中,考生需要完成一系列的编程题目,最终的成绩将极大影响进入面试环节的机会。

以下是一些已经出现过的笔试题目:

题目1:二叉树的镜像

请完成一个函数,输入一个二叉树,该函数输出它的镜像。

# 示例
#      8
#   /     \
#  6      10
# / \    / \
# 5  7  9   11

# ==> 8
#       /     \
#      10      6
#     / \    / \
#    11 9   7  5


class Node:
    def __init__(self, data=None, left=None, right=None):
        self.data = data
        self.left = left
        self.right = right


def mirror(root):
    if root is None:
        return None
    left = mirror(root.left)
    right = mirror(root.right)
    root.left, root.right = right, left
    return root
题目2:打印矩阵

请编写一个函数,输入一个矩阵(恰好有4行4列),该函数将矩阵逆时针旋转90度后输出。

# 示例
# 1  2  3  4
# 5  6  7  8
# 9  10 11 12
# 13 14 15 16

# ==> 4  8  12 16
#      3  7  11 15
#      2  6  10 14
#      1  5  9  13

def rotate(matrix):
    """
    :type matrix: List[List[int]]
    :rtype: void Do not return anything, modify matrix in-place instead.
    """
    size = len(matrix)
    for i in range(size // 2):
        for j in range(i, size - i - 1):
            matrix[i][j], matrix[j][size - i - 1], matrix[size - i - 1][size - j - 1], matrix[j][i] = \
                matrix[j][size - i - 1], matrix[size - i - 1][size - j - 1], matrix[i][j], matrix[size - j - 1][i]
面试

虽然我们把面试的内容按几个点来分开,但事实上,面试并不是非常形式化的。面试主要测试的是候选人是否有足够的经验和智慧来解决复杂的技术问题。以下是一些可能出现的问题:

问题1:对闭包和生成器是否有了解?

闭包和生成器是Python中非常重要的概念。虽然有些程序员可能花费大量的时间使用这些功能,但其他程序员可能还不了解这些特性。

闭包是指一个函数对象,它引用的函数值是不同的。这意味着一个函数可以在其定义中访问其体外定义的值,即使这些外部值在函数调用时不再可用。

生成器是指通过yield语句定义的函数,它可以每次生成一个值并在下一次调用时保持其状态。

例如,下面是一个产生斐波那契数列的生成器。

def fib():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b
问题2:如何并行处理大数据集?

当数据集非常大时,单个计算机可能无法处理数据。为了解决该问题,可以使用多机和并行处理。

使用多机处理需要将数据分布到多个节点上,并使用通信协议来协调节点之间的工作。通常情况下,这种方法需要使用分布式文件系统来管理数据。例如,Hadoop和Spark就是两种常用的分布式计算框架。

并行处理是指将数据分成多个部分,并使用多个CPU核心或计算机同时处理这些部分。

例如,如果我们想要计算一些顾客在不同天数内的访问量,我们可以将数据分割成多个时间段,并在不同的CPU核心上并行计算每个时间段内的访问量。然后,我们可以将这些结果整合成一个总的结果。

问题3:你有没有经验与不同的数据库系统进行交互?

如果你已经具有一些数据库系统的经验,那么面试官可能会问你如何与多种不同的数据库系统进行交互。

这可能涉及到使用SQL编写查询和修改命令,或使用Python等编程语言来操作数据库。在这种情况下,面试官可能会问你如何处理错误和异常,以及如何编写所有与数据库交互的代码。