目录
正在加载目录...

人类学 Anthropic OA + 面经总结

Anthropic OA 和面试的形式跟其他大厂不太一样,不仅关注技术能力,也重视候选人对技术与社会交叉问题的思考。 尤其是OA部分,90分钟的时间很紧迫,大家真的要提前练习OA,提升自己的写代码速度!

Anthropic OA

Level 1: 实现一个简化版的任务管理系统(Task Management System)。系统分为 4 个逐级解锁的 Level,每完成一层会增加新的功能要求;基础功能包括创建任务、更新任务和查询任务。任务具有 唯一 ID(task_id_N)、名称、优先级 priority 和时间戳 timestamp 等属性,其中 priority 为非负整数,timestamp 表示系统启动后的秒数且始终递增。随着 Level 提升,系统需要逐步支持 任务的搜索与排序(按优先级和创建顺序)、用户和时间相关的任务分配以及配额控制等功能。实现不要求最优复杂度,只要代码能 通过提供的 unit tests 即可。

思路:用Dict[str, Task] 按 task_id 存所有任务,再维护一个自增计数器 next_id 生成 “task_id_1″、”task_id_2″。这样 Level 1 的新增、更新、查询都很好做,而且后面加字段也不需要推翻重写。

Level 2: 任务搜索、按优先级和创建顺序排序,以及后续与时间或用户相关的任务管理功能。题目不要求最优复杂度,只要实现能够 通过给定的 unit tests 即可。

思路:Level 2 在已有任务集合上通过 过滤 + 排序(priority + 创建顺序) 实现搜索和排序功能;后续 Level 在 Task 对象中增加更多字段(如时间或用户信息),通过 列表筛选和排序组合逻辑 完成功能扩展。

Level 3:任务搜索、按优先级与创建顺序排序,以及与时间或用户相关的任务管理能力(如时间戳控制、任务分配等)。题目不要求最优复杂度,只要实现能 通过提供的 unit tests 即可。 

思路:利用 timestamp 等时间字段处理任务状态或分配逻辑。整体实现采用 字典存储 + 列表筛选排序 的方式,保证结构简单且易于扩展的功能。

Anthropic 面试

Code

Q1: 要求设计一个算法控制机器人清扫所有可到达的区域,机器人只能通过 move()、turnLeft()、turnRight() 和 clean() 四个 API 与环境交互。

解题思路是使用DFS + 回溯:用一个哈希集合记录已经访问过的坐标,从起点 (0,0) 开始,先清扫当前格子,然后按照固定方向顺序尝试前进;如果 move() 成功,则递归进入新的位置继续探索。递归返回时,通过两次转向和一次 move() 让机器人回到上一个位置并恢复原来的朝向,从而保证可以完整遍历所有可达区域。

Follow-up:如果房间规模很大如何优化已访问坐标的存储;如果要减少机器人的移动次数如何改进策略;以及当机器人电量有限时如何优先清扫更重要的区域。

Q2: 给一个数组,数组中存储的是每个人的高度

给一个数组,问数组中的每一个人往左看,能看到多少个人?

input: list[int]
output: list[int] 里面每一个元素代表一个人往左看能看到人的个数

思路:找规律:1,10,6,7,9,8,2,4,3,5,8 就是 5 的左边第一个大于自己的

每一个人可以看到:左边第一个比自己高的人 和 自己之间的这些人,因为这些人,身高都小于等于自己

[2,4,3],第一个比自己高的人左边能看到,只能越来越高才可以被看到,是一个递增的序列

[10,9,8] xxxx 7,所以能看到的总人数 =左边递增序列的长度 + 与第一个比自己大之间的人的个数 = 6

算法:stack 单调栈

  1. 因为每一个人都需要往左看,所以从左往右遍历
  2. 从左往右遍历的时候,把每个人的身高都放入 stack 中
  3. 放入的过程中,要实时把那些再也不会被看到的人删除掉

10 6 7 9 8,其中的 7 就不会被看到了,因为他们被 9 挡住了,只有 10 9 8 每个人才会被看到,就可以发现,从右往左看,stack 是递增的

  1. 每当一个数要去计算能看到多少人的时候,
    1. 不断和 stack 最后一个元素进行比较,如果小于自己,肯定不能看到,就删除
    2. 当 stack 为空,或者 stack 的 top 元素大于自己就停止
      (因为身高都不同,没有等于)

    如果 stack 为空,那么当前这个元素左边没有比自己高的,
    那么左边的所有元素都可以看到 如果 stack 不为空,那么当前 stack 的 top 元素是左边第一个比自己高的 那么当前元素能看到人的个数 =
    len(stack) + top 元素的 index 和 当前元素之间的距离

Time: O(n) 每个元素会被遍历一次,最多入 stack 一次,出 stack 一次。Space: O(n) 因为用了一个 stack

系统设计

考试的ad click aggregator,题目:“An Ad click Aggregator is a system that collects and aggregates data on ad clicks. It is used by advertisers to track the performance of their ads and optimize their campaigns. For our purposes, we will assume these are ads displayed on a website or app, like Facebook.”

面试卡壳怎么办?

很多同学其实不是不会,而是现场思路卡住 或者follow up 没准备到

比如:算法题 follow up 推不下去,System design 不知道怎么展开,coding 写到一半思路断掉。这种情况下,如果咨询过Interview Aid,其实很多题是可以当场救回来的。像一些面试辅助服务会在关键节点给出提示,帮你把设计或算法继续推下去。

如果你也在准备 Anthropic / FAANG / Quant / Big Tech 面试,需要模拟面试或面试辅助,可以了解下Interview Aid的求职辅助服务,熟悉面试节奏,很多高强度 VO 其实是可以稳住的。

正文完