Flexport SDE I OA 笔试题目详解 | 真题合集与解题思路

2025-09-02
Flexport SDE I OA 笔试题目详解 | 真题合集与解题思路 封面

系统公告:本文整理了 Flexport SDE I 岗位的 Online Assessment 真题合集,包含 SQL、REST API、算法题等多种题型。涵盖经典的 Election、Counting Pairs、Increasing Array、BFS Traversal、Time Complexity 等题目。

考试概况

Flexport 作为全球领先的物流科技公司,其 SDE I 岗位的 OA 笔试题目覆盖面广,考察候选人的:

  • 数据库操作能力:SQL 查询与数据分析
  • API 设计理解:REST API 的使用和数据处理
  • 算法思维:数据结构、算法复杂度分析
  • 编程基础:代码实现和逻辑思考

题目详解

1. Election(选举统计)

题目描述:给定一个选举结果数据库,找出每个政党赢得的席位数。

核心逻辑:

  • 多个选区,每个选区有多个候选人
  • 每个候选人属于一个政党
  • 每个选区得票最多的候选人获胜
  • 按席位数降序排列输出

SQL 解法思路:


-- 1. 找出每个选区的获胜者
WITH winners AS (
    SELECT constituency, candidate_id, party,
           ROW_NUMBER() OVER (PARTITION BY constituency ORDER BY votes DESC) as rank
    FROM election_results
)
-- 2. 统计每个政党的席位数
SELECT party, COUNT(*) as seats_won
FROM winners 
WHERE rank = 1
GROUP BY party
ORDER BY seats_won DESC;
            

2. REST API: City Weather Station

题目描述:通过 HTTP GET 请求从数据库检索城市天气信息。

输入输出格式:

  • 输入:城市名称(或 "all" 获取所有城市)
  • 输出:City,Temperature,Wind,Humidity

实现思路:


def get_weather_data(city_name):
    if city_name.lower() == "all":
        # 返回所有城市数据
        return query_all_cities()
    else:
        # 返回指定城市数据
        return query_city_weather(city_name)

def format_response(weather_data):
    result = []
    for city in weather_data:
        line = f"{city.name},{city.temperature},{city.wind},{city.humidity}"
        result.append(line)
    return "\n".join(result)
            

3. Counting Pairs(计数配对)

题目描述:给定整数 k 和整数列表,找出满足 a + k = b 的唯一配对数量。

关键点:

  • 配对必须是唯一的(至少有一个元素不同)
  • 当 k = 0 时,配对可以包含相同元素

解法:


def count_pairs(numbers, k):
    from collections import Counter
    count = Counter(numbers)
    pairs = 0
    
    for num in count:
        target = num + k
        if target in count:
            if k == 0:
                # 特殊情况:k=0 时计算同一数字的配对
                pairs += count[num] * (count[num] - 1) // 2
            else:
                # 一般情况:不同数字间的配对
                pairs += count[num] * count[target]
    
    return pairs if k == 0 else pairs // 2
            

4. Increasing Array(递增数组)

题目描述:将数组转换为非递减数组,只能从两端删除元素。

示例分析:

数组 [4,3,3,8,4,5,2],可选方案:

  • 从开头删除 4,3,3,8
  • 从结尾删除 8,4,5,2
  • 从开头删除 4,从结尾删除 4,5,2 ✅

解法思路:


def min_operations_to_non_decreasing(arr):
    n = len(arr)
    min_operations = n  # 最坏情况:删除所有元素
    
    # 尝试所有可能的左右边界组合
    for left in range(n + 1):  # 从左删除 left 个元素
        for right in range(n - left + 1):  # 从右删除 right 个元素
            subarray = arr[left:n-right] if right > 0 else arr[left:]
            
            if is_non_decreasing(subarray):
                operations = left + right
                min_operations = min(min_operations, operations)
    
    return min_operations

def is_non_decreasing(arr):
    return all(arr[i] <= arr[i+1] for i in range(len(arr)-1))
            

5. BFS Traversal(广度优先遍历)

题目描述:给定树结构:1 的子节点是 2 和 3,2 的子节点是 4 和 5。求从节点 1 开始的 BFS 遍历顺序。

答案:1 → 2 → 3 → 4 → 5

BFS 实现:


from collections import deque

def bfs_traversal(root):
    if not root:
        return []
    
    result = []
    queue = deque([root])
    
    while queue:
        node = queue.popleft()
        result.append(node.val)
        
        # 按顺序添加子节点
        for child in node.children:
            queue.append(child)
    
    return result
            

6. Time Complexity Analysis(时间复杂度分析)

代码分析:


int temp = 0;
for(int i = 1; i <= n; i++) {           // O(n)
    for(int j = 1; j <= n; j += i) {    // O(n/i) 次迭代
        for(int k = 1; k <= n; k += 2) { // O(n/2) = O(n)
            temp++;
        }
    }
}
            

复杂度分析:

  • 外层循环:O(n)
  • 中层循环:对于每个 i,执行 n/i 次
  • 内层循环:每次执行 O(n)
  • 总复杂度:∑(i=1 to n) (n/i) × n = n² × ∑(1/i) = n² × ln(n) = O(n² log n)

备考建议

  1. SQL 基础:熟练掌握 GROUP BY、ORDER BY、窗口函数
  2. 算法基础:数组操作、BFS/DFS、时间复杂度分析
  3. API 理解:REST API 设计原则和数据格式
  4. 编程实践:多做 LeetCode 中等难度题目
  5. 时间管理:OA 通常有时间限制,要提高解题速度

总结

Flexport 的 OA 笔试题目设计全面,既考察技术基础,也注重实际应用能力。通过系统准备这些题型,不仅能顺利通过 Flexport 的笔试,对其他科技公司的 OA 也有很大帮助。

我们长期稳定承接各大科技公司如 Flexport、TikTok、Google、Amazon 等的 OA 笔试辅助服务,确保高分通过。专业团队提供实时指导,帮助你在面试中脱颖而出。如有需求,请随时联系我们。