毫末智行自动驾驶数据平台面试经历:数据闭环+标注平台+仿真系统全考察
3年数据平台经验,详细复盘毫末智行三轮技术面试:一面数据工程与Spark/Flink、二面数据闭环与标注平台、三面仿真系统与项目深挖,含真题汇总与心得建议
背景介绍
我是在一家自动驾驶公司做了3年数据平台工程师,主要做数据闭环、标注平台和仿真系统。毫末智行一直是我特别想去的公司,他们在自动驾驶数据平台方面的技术积累非常深厚,尤其是数据闭环和自动化标注这块,在业内是公认的领先。今年6月看到他们在招数据平台工程师,我马上就投了。
说实话准备这个面试我压力挺大的,因为数据平台涉及的技术栈非常广——大数据、机器学习、仿真、工程化,每个方向都能问得很深。我花了差不多三周时间,把Spark/Flink、数据闭环、标注平台、仿真系统这些知识点全部过了一遍,尤其是数据质量保障和仿真真实性这些重点内容。
面试流程是三轮技术面,下面详细复盘每一轮。
面试流程复盘
一面:数据工程+Spark/Flink
一面是个看起来很干练的工程师,是数据平台组的。开场先让我自我介绍,然后直接开始问数据工程。
1. Spark和Flink的区别?分别适合什么场景?
我说Spark是批处理框架,核心抽象是RDD/DataFrame,适合大规模离线数据处理;Flink是流处理框架,核心抽象是DataStream,适合实时数据处理。在自动驾驶数据平台中,我们用Spark做离线数据分析(比如挖掘长尾场景、统计数据分布),用Flink做实时数据流处理(比如实时数据质量监控、在线触发数据采集)。
2. Spark的shuffle过程是怎样的?怎么优化?
我说Spark的shuffle分为SortShuffle和HashShuffle两种。SortShuffle会对数据排序后写磁盘,适合大数据量;HashShuffle直接按hash分区写磁盘,适合小数据量。优化方法主要有:调整shuffle分区数、使用Kryo序列化器、开启map端预聚合(combineByKey)、避免不必要的shuffle操作(如用broadcast join替代shuffle join)。
3. 你们的数据存储架构是怎样的?
我说我们用的是分层存储架构:热数据存Alluxio(内存缓存),温数据存HDFS(磁盘),冷数据存S3(对象存储)。元数据存在Hive Metastore中,用Hive/Trino做SQL查询。点云数据用Parquet格式存储,图像数据用TFRecord格式存储。另外我们还有一套数据版本管理系统,类似DVC,可以追踪每次数据集的变更。
4. 数据质量怎么保障?
我说数据质量保障是数据平台最核心的工作之一。我们主要从四个维度做质量保障:完整性(数据是否缺失)、一致性(多传感器数据是否对齐)、准确性(标注是否正确)、时效性(数据是否及时到达)。具体措施包括:数据采集时做实时校验(传感器状态检查、时间戳对齐检查);数据入库时做批量校验(格式检查、范围检查、逻辑检查);标注数据做质检(双人标注+仲裁机制);定期做数据质量报告。
5. 数据血缘怎么管理?
我说我们用Apache Atlas做数据血缘管理,可以追踪每个数据集的来源、处理过程和下游消费。比如一个标注数据集,可以追溯到原始采集数据、经过哪些预处理、用了哪个标注项目的标注结果、被哪些训练任务消费。数据血缘对于问题排查和数据合规都非常重要。
6. 你们的数据规模有多大?怎么处理数据倾斜?
我说我们目前管理的数据量大概是10PB级别,包括点云、图像、视频、标注等。数据倾斜主要发生在shuffle阶段,处理方法包括:增加分区数、使用salting技术打散热点key、使用广播变量避免shuffle、对倾斜分区单独处理等。
一面大概1小时,面试官对Spark/Flink问得很细,幸好我之前做过不少大数据项目,答得还算流畅。
二面:数据闭环+标注平台
二面是个资深工程师,一上来就问数据闭环和标注平台。
1. 数据闭环是什么?你们怎么做的?
我说数据闭环是指从数据采集到模型部署的完整循环:车端采集数据→数据上传→数据筛选→数据标注→模型训练→模型验证→模型部署→车端运行→发现新问题→触发新数据采集。我们做的数据闭环核心是"主动学习"——模型在运行中发现自己的弱点,自动触发对应场景的数据采集,形成持续改进的闭环。
2. 主动学习具体怎么实现?
我说我们用了两种主动学习策略:一是基于不确定性的采样,模型对某些样本的预测不确定度高时,把这些样本加入标注队列;二是基于场景覆盖度的采样,当某些场景在训练数据中占比过低时,主动采集该场景的数据。具体实现上,我们在车端部署了一个轻量级的监控模块,实时计算模型的预测不确定度和场景特征,当超过阈值时触发数据上传。
3. 标注平台的架构是怎样的?
我说我们的标注平台包含几个核心模块:任务管理(创建标注任务、分配标注员)、标注工具(2D/3D标注、语义分割、关键点标注等)、质检模块(双人标注+仲裁、自动质检)、数据管理(标注数据版本管理、统计分析)。标注工具是自研的,支持点云3D标注和多相机联合标注,底层用Three.js做3D渲染。
4. 自动标注是怎么做的?准确率怎么样?
我说自动标注分两种:预标注和全自动标注。预标注是用模型先标注一遍,标注员在预标注基础上修改,可以提升3-5倍的标注效率;全自动标注是模型直接标注,不需要人工介入。目前预标注的修改率大概在20-30%(即70-80%的标注是正确的),全自动标注只在简单场景下使用(比如高速场景的车辆检测),准确率大概90%左右。复杂场景(城区、恶劣天气)还是需要人工标注。
5. 标注数据的一致性怎么保证?
我说标注一致性是标注平台的核心难题。我们主要做三件事:一是制定详细的标注规范,每个类别都有明确的标注规则和示例;二是双人标注+仲裁机制,两个标注员独立标注同一数据,不一致的地方由仲裁员裁决;三是定期做标注员培训和质量考核,标注准确率低于95%的标注员需要重新培训。
6. 标注成本怎么控制?
我说标注成本控制主要靠三个方面:一是自动标注减少人工量(预标注可以减少60-70%的标注工作量);二是主动学习只标注有价值的样本(避免标注大量冗余数据);三是标注流程优化(批量操作、快捷键、智能推荐等提升标注效率)。我们目前的标注成本大概比传统方式降低了50%左右。
二面大概1小时10分钟,面试官对数据闭环和标注平台问得很深入,尤其是主动学习和标注一致性,我答得还行但有些细节不太确定。
三面:仿真系统+项目深挖
三面是数据平台的负责人,很有经验,面试更像技术交流。
他先让我讲了一个最复杂的项目,我讲了我们的数据闭环系统从0到1的搭建过程。然后他开始深挖:
1. 仿真系统在数据闭环中扮演什么角色?
我说仿真系统是数据闭环的关键环节,主要有三个作用:一是模型验证,在仿真环境中验证训练好的模型是否满足要求,避免直接上实车测试的风险;二是场景泛化,通过仿真生成大量变体场景,弥补真实数据的不足;三是回归测试,每次模型更新后,在仿真中跑回归测试,确保新模型不会在旧场景上退化。
2. 仿真的真实性怎么保证?
我说仿真的真实性是最大的挑战。我们主要从三个方面提升真实性:一是传感器仿真,用物理渲染引擎模拟LiDAR和Camera的成像过程,包括噪声模型、运动模糊、镜头畸变等;二是交通流仿真,用IDM/MOBIL等交通流模型模拟周围车辆的行为,尽量接近真实驾驶行为;三是场景重建,从真实数据中提取场景要素(道路、车辆、行人),在仿真中重建真实场景。目前我们的仿真和实车的一致性大概在70%左右,主要差距在行人和非机动车行为的模拟。
3. 仿真场景库怎么管理?
我说我们的仿真场景库分三类:法规场景(根据法规要求定义的测试场景)、真实场景(从实车数据中提取的场景)、生成场景(通过参数化生成的大量变体场景)。场景用OpenSCENARIO格式描述,支持场景参数化和随机化。场景库有版本管理,每次模型更新都会跑全量场景回归。
4. 仿真的并行化怎么做的?
我说仿真并行化是提升效率的关键。我们用Kubernetes调度仿真任务,每个仿真实例运行在一个Pod中。一次回归测试可能需要跑几千个场景,如果串行跑需要几天,并行跑可以缩短到几小时。我们目前可以同时跑500个仿真实例,资源利用率和成本都控制得不错。
5. 数据闭环的ROI怎么衡量?
我说数据闭环的ROI衡量确实是个难题。我们主要看几个指标:一是模型迭代速度,有数据闭环后模型迭代周期从月级缩短到周级;二是标注效率,主动学习+自动标注让标注效率提升了3-5倍;三是模型性能,每次数据闭环迭代后模型在关键指标上的提升幅度;四是实车接管率,数据闭环运行后实车接管率的下降趋势。虽然很难精确计算ROI,但从这些指标来看,数据闭环的价值是显而易见的。
6. 你觉得数据平台最大的挑战是什么?
我说我觉得最大的挑战是数据的长尾问题。自动驾驶场景的长尾分布决定了,不管采集多少数据,总有没见过的场景。数据平台需要高效地发现和覆盖这些长尾场景,而不是盲目地采集更多数据。主动学习和场景挖掘是解决长尾问题的关键,但目前的主动学习策略还不够智能,很多长尾场景还是靠人工发现的。
三面聊了1个多小时,面试官对仿真系统和数据闭环的ROI特别感兴趣。最后他问我有什么问题,我问了毫末智行在数据闭环方面的最新进展,他提到了一些关于大模型辅助标注和生成式仿真场景的工作,很有意思。
真题汇总
数据工程部分:
1. Spark和Flink的区别和适用场景?
2. Spark的shuffle过程和优化方法?
3. 数据存储架构设计?
4. 数据质量保障体系?
5. 数据血缘管理?
6. 数据规模和数据倾斜处理?
数据闭环部分:
7. 数据闭环的概念和实现?
8. 主动学习的具体实现?
标注平台部分:
9. 标注平台的架构设计?
10. 自动标注的实现和准确率?
11. 标注数据一致性保证?
12. 标注成本控制?
仿真系统部分:
13. 仿真系统在数据闭环中的角色?
14. 仿真的真实性保证?
15. 仿真场景库管理?
16. 仿真并行化方案?
17. 数据闭环的ROI衡量?
18. 数据平台的最大挑战?
心得建议
1. 大数据基础必须扎实:Spark/Flink的核心原理、shuffle机制、数据倾斜处理这些是高频考点,面试官会问得很细。
2. 数据闭环是重点:主动学习、场景挖掘、数据飞轮这些概念必须清楚,面试官非常关注数据闭环的具体实现。
3. 标注平台是加分项:如果你能讲清楚标注平台的架构、自动标注、标注一致性等,面试官会非常感兴趣。
4. 仿真系统要了解:仿真的真实性、场景管理、并行化这些是常考方向,尤其是仿真实车一致性的讨论。
5. 关注行业趋势:大模型辅助标注、生成式仿真、数据合规等前沿方向要有自己的思考。
6. 准备时间建议3周:如果你有2-3年的数据平台经验,3周的集中准备应该够了。重点复习数据工程、数据闭环、标注平台、仿真系统四个方向。
FAQ
Q:毫末智行的数据平台面试难度怎么样?
A:整体中等偏上。一面偏数据工程基础,二面偏数据闭环和标注平台,三面偏仿真系统和项目经验。因为涉及的技术栈很广,需要准备的内容比较多。
Q:面试官风格怎么样?
A:三个面试官都很专业,一面比较务实,二面比较深入,三面更像技术讨论。整体氛围不错,不会故意刁难。
Q:需要写代码吗?
A:没有让我写代码,但会问代码实现细节,比如Spark的RDD操作、Flink的窗口函数等。建议把关键API和常见模式练一遍。
Q:薪资大概什么水平?
A:数据平台工程师的base大概在35-55k之间,具体看级别和谈的情况。
Q:面试结果多久出来?
A:我是一面后4天收到二面通知,二面后3天收到三面通知,三面后1周多收到offer。