目录
正在加载目录...

Databricks SWE 26NG 面经|VO 三轮 + 加面,不难但细节要对

Databricks SWE 26NG 的终面走完了,整个流程是 BQ 加 Coding,面试官特别好聊,全程没有那种紧绷感。题目难度不算大,但细节要对——coding 那道 300 秒滑动窗口,边界写错就会有 case 过不了;系统设计那道问得很细,CAP 和价格实时性都要说清楚。按顺序把每轮写下来。

Databricks SWE 26NG 面经|VO 三轮 + 加面,不难但细节要对

VO 第一轮:Algorithm——House Robber

题目是经典的 House Robber——给一排房子,每间有若干金额,不能抢相邻两间,求能偷到的最大金额。

DP 解法:dp[i] = max(dp[i-1], dp[i-2] + nums[i]),O(n) 时间 O(1) 空间,比较干净。

Follow-up 是环形版本——首尾房子也算相邻,不能同时抢。拆成两个子问题:一次去掉第一个房子、一次去掉最后一个房子,分别跑 House Robber I,取两者最大值(LC 213)。

写完之后面试官追问了测试用例的设计——空数组、单个房子、两个房子、全是 0 这几个边界,他想看你会不会主动覆盖。这是 Databricks 比较有特点的地方:边界和测试的权重和代码本身差不多。

VO 第二轮:Coding——Tic-Tac-Toe

题目是实现井字棋,然后要写 testing。

逻辑本身不难,DSU 做法顺利过了。但是写测试的时候有点费时间——面试官让我选一个矩阵大小,我选了 3×4,然后发现”一人走一步”的落子顺序没有给定函数,得自己想怎么下棋才能满足那个 test case。

建议提前想好测试用例的设计思路,不要等进了面试才现场想——先想好哪些边界需要覆盖(某人连线、平局、棋盘填满但无人赢),再据此设计测例,比临时凑要从容很多。

加面:System Design

设计一个服务,用户搜一本书,系统整合多个书商的库存和价格,返回最便宜的购买选项。

主要考察点是怎么和不同书商 API 集成(推还是拉、失败重试怎么处理)、搜索功能怎么设计(全文索引)、购买流程怎么走(第三方跳转还是自建购买流)。

面试官用的是 Google Docs 而不是白板工具,这一点比较特别,提前知道能少分心。

追问集中在两个方向:如果某个书商的价格更新有延迟怎么处理(缓存 TTL 和回源策略)、高并发下怎么保证价格的实时性。这两个追问的逻辑是一致的——不能让用户看到的价格和实际购买时的价格出入太大,所以缓存的失效策略要想清楚。

终面:BQ + Coding

BQ

问的是:分享一个你做过的最复杂或最有挑战性的数据项目,过程中遇到了哪些难题,你是怎么解决的。

这道比较开放,把逻辑捋顺、传递正向思路就行。Databricks 的 BQ 不追求完美故事,更在意你能不能清楚地说清楚自己在项目里做了什么、遇到了什么、怎么判断的。

Coding:300 秒内平均访问频率

可以用 Python 的 time 库获取当前秒数。

思路是用双端队列记录每一秒的访问次数。每次有访问请求时,若当前秒已经在队列尾部,就增加对应计数;如果没有,新增一条记录。然后清理超过 300 秒的旧数据,保证窗口范围。计算平均访问率时,用总访问次数除以 300。

Follow-up 两道:

一是时间跨度很大但访问请求很少,怎么优化内存——不用把每一秒都存进队列,只存有访问的那些秒,其他的空秒跳过,查询时再按实际有记录的时间点计算。

二是系统要部署到多台机器上,怎么统计全局访问频率——每台机器本地维护窗口,再用一个聚合层(比如 Redis)做跨机器的合并统计,或者用流处理(Kafka + Flink)做实时聚合。

这道题的边界一定要盯住:超过 300 秒的记录要及时清掉、避免对队列做重复操作、队列空了或时间回退的情况都要处理。这几个细节写漏了就会有隐藏 case 过不了。

Databricks 面试怎么准备?InterviewShow 面试辅助服务

如果你已经拿到 Databricks VO,但对 Coding、System Design 或 BQ 没什么把握,可以提前做一轮针对性的面试辅助准备。InterviewShow 会结合具体岗位和面试轮次,帮助梳理高频题型、追问方向和答题思路,也可以提供面试辅助。尤其是这种题目本身不难、但 follow-up 很细的公司,提前熟悉面试节奏会轻松很多。

END