📜  高盛面试经历 |第 11 组(Strats Division 校内)(1)

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

高盛面试经历 |第 11 组(Strats Division 校内)

简介

本篇面试经历是关于高盛(Strats Division)校内面试的经历分享。这是一场针对程序员的面试,主要考察了程序员的编程能力和算法思维等方面。

面试流程
  1. 自我介绍
    • 面试官会让你自我介绍一下,介绍时要注意简洁明了,突出重点。
  2. 算法题
    • 程序员必修课,表现好的话可给面试加分哦。
  3. 编程题
    • 面试官会提供一些需求,要求你用编程语言实现出来。
  4. 技术问题
    • 针对你的编程技术深度和宽度提问。
算法题

在面试中,会被要求解决一个经典的题目:二分查找。具体要求是:给定一个有序数组和一个目标值,要求找出目标值在数组中对应的下标。

# 在有序列表中二分查找目标值
def binary_search(arr, target):
    # 确定左右边界
    left, right = 0, len(arr) - 1
    while left <= right:
        # 计算中间值
        mid = left + (right - left) // 2
        if arr[mid] == target:
            # 找到目标值
            return mid
        elif arr[mid] < target:
            # 目标值在右边,调整左边界
            left = mid + 1
        else:
            # 目标值在左边,调整右边界
            right = mid - 1
    # 没有找到目标值
    return -1

运行时间: 时间复杂度:$O(logn)$ 空间复杂度:$O(1)$

编程题

编写一个程序,在给出的数组序列中,找出包含给定字符集合的最短连续子序列

def shortest_subsequence(arr, char_set):
    # 定义哈希表,记录每个字符出现的个数
    char_dict = {}
    for c in char_set:
        char_dict[c] = 0
    
    # 记录每个位置为结束位置的最短子序列长度
    dp = [0] * len(arr)
    min_len = float('inf')
    start, end = 0, 0
    count = 0
    
    # 遍历数组,更新哈希表和dp数组
    for i in range(len(arr)):
        if arr[i] in char_dict:
            # 当前字符在字符集中
            if char_dict[arr[i]] == 0:
                count += 1
            char_dict[arr[i]] += 1
        if count == len(char_set):
            # 找到了包含给定字符集合的子序列
            while start < i and (arr[start] not in char_set or char_dict[arr[start]] > 1):
                # 缩小子序列的起始位置
                if arr[start] in char_set:
                    char_dict[arr[start]] -= 1
                start += 1
            # 更新最短子序列的长度及起始、结束位置
            if i - start < min_len:
                min_len = i - start + 1
                end = i
        dp[i] = min_len
    
    if min_len == float('inf'):
        return ''
    else:
        return arr[end - min_len + 1:end + 1]

复杂度分析:

  • 时间复杂度:$O(N)$
  • 空间复杂度:$O(1)$
技术问题
  • 如何理解 OOP(面向对象编程)?
  • 你对多线程的理解是什么?
  • 如何用 Python 实现一个简单的 Web 服务器?
  • 讲一下 Redis 的应用场景及实现原理?
  • Python 中最好的数据库操作库是什么?
  • Python 中的迭代器和生成器有什么区别?
结语

以上就是我参加高盛(Strats Division)的校内面试的一些经历,希望能对大家有所帮助。在实际的面试中,一定要注意编程思路的清晰,代码的可读性和可维护性,同时也要保持良好的沟通能力和合作精神。