数据开发笔试备考指南:从SQL到数仓建模的实战要点 浩鲸科技2020届数据开发A卷这个名字估计不少准备秋招的朋友都搜过。作为当年参加过笔试、后来也帮着部门出过几套数据开发笔试题的老兵我想结合这份流传较广的试卷聊聊数据开发笔试到底在考什么、怎么准备才不算白费功夫。先说个很多人容易误解的地方数据开发笔试题表面上考的是知识点实际上考的是“你拿到一堆杂乱数据时脑子里的第一反应是什么”。这份试卷的题型分布和考察重点非常典型地反映了这一点。它不是让你背概念而是看你在限定时间内能否用工程化的思路拆解一个数据需求。1. 浩鲸科技与数据开发岗位的真实画风浩鲸科技前身是中兴软创在电信行业的数据系统建设上积累很深后来和阿里云合作紧密整体技术栈偏向阿里系。这一点对备考非常关键因为它的笔试风格和出题偏好会明显受到阿里系大数据技术体系的影响。数据开发在浩鲸这类公司里不是单纯写SQL的。电信运营商的数据量级、实时性要求、口径复杂性决定了这个岗位需要你同时具备三类能力批量数据处理能力Hive/Spark为主、实时计算能力Flink为主、数据治理与调度能力调度平台、元数据管理、数据质量监控。笔试不可能全考但一定会从这三类里挑代表。还有一个隐性考察点很多题目会给出一个业务场景问你“怎么设计才能满足需求”。这种题目没有唯一标准答案但阅卷人一眼就能看出你是真做过数据开发还是只刷过面试题。真做过的人会考虑数据回溯、分区策略、脏数据容忍度、任务失败重跑机制而只会刷题的人只会写一条SELECT。所以备考这份试卷千万不要抱着“记住答案就行”的心态。它考察的是你在真实数据项目里踩坑后积累的直觉。2. 笔试中的SQL题看似基础实则暗藏三层递进SQL题在数据开发笔试里占比永远最大这份试卷也不例外。但同样考SQL不同公司考法不同浩鲸的SQL题呈现出明显的三层递进。第一层是常规的聚合统计类比如分组求TopN、计算累计值、行转列列转行。这类题很多人觉得简单但失分点往往在细节上。举个例子求每个部门薪资Top3的员工你写ROW_NUMBER() OVER(PARTITION BY dept_no ORDER BY salary DESC)大多数人都知道。但如果题目要求“并列第3名也算”你就要考虑RANK()和DENSE_RANK()的区别了。笔试题目不会明说“要用哪个窗口函数”它只会描述业务需求你能不能识别出隐含的排序要求这就是分水岭。第二层是业务口径类比如新增用户数、留存率、复购率这类经典指标。这类题考察的是你对业务定义的理解而不仅仅是SQL语法。以留存率为例你要先明确是“自然日留存”还是“自然周留存”分母是“当日新增用户”还是“当日活跃用户”要不要排除因结算延迟导致的数据波动。很多人在笔试时直接把公式写出来却忽略了口径说明结果丢了一半分。阅卷人想看你有没有那种“先把口径讲清楚再动手写代码”的习惯这在数据开发里是保命的素质。第三层是性能优化类通常以“表数据量大、查询很慢你怎么处理”的形式出现。这里要区分套路答案和实战答案。套路答案是“加索引”“用分区”但真正做过数据开发的人会先问这个查询是临时分析还是周期性任务如果是周期性任务能不能通过预聚合的方式解决能不能改变粒度的分层设计能不能利用分桶来规避数据倾斜这些判断才是这类题目的核心。我建议备考时用“一题多写”的方式训练同一道SQL题分别写出“功能正确版”“性能优化版”“可维护性优先版”三个版本。笔试时先给功能正确版如果时间充裕再补充一句“在数据量大的场景下可通过参数调优或改写为XX方式提升性能”这会让阅卷人对你印象深刻。3. 数据仓库设计与建模为什么这种题没有“标准答案”这份试卷里数据仓库设计类的题目往往是拉开分差的关键。典型出题方式是给一个业务场景比如电信客户话单、电商订单流转要求设计分层架构、表结构、调度依赖。这种题没有标准答案但有高分答案的共性。高分答案一定包含分层设计的完整思考。大多数人只写“ODS层、DWD层、DWS层、ADS层”这只能拿基础分。加分项是你能说清楚每一层的职责边界ODS层就是原封不动地把源系统数据同步过来保留最细粒度用于数据回溯和审计。DWD层做清洗、去重、脱敏、维度退化统一数据类型和编码规范形成标准化的明细事实表。DWS层按主题做轻度汇总比如按用户、按日期、按地域服务通用的多维分析需求。ADS层面向具体业务应用指标口径已经固化表的数据量较小查询效率最高。如果你能在设计过程中补充说明“权限控制应该在哪一层做”“数据生命周期管理怎么设计”那就更好了。这会让阅卷人觉得你有真实项目的操作经验而不仅仅是看过几篇理论文章。维度建模的选择也是高分密码。最常见的是星型模型和雪花模型但数据开发笔试里你最好说明白为什么选这个。如果是查询灵活度优先、数据量可控星型模型最合适如果维度表需要被多个事实表复用、且维度层级固定雪花模型能减少数据冗余。但如果是指标计算频繁的场景我一般会推荐宽表设计虽然牺牲了一些灵活性却能极大地降低下游查询开发成本。4. 大数据组件原理别被“原理题”吓住它考的是应用判断数据开发笔试必然会涉及大数据组件原理但考法通常很务实不会让你默写源码。这份试卷的组件题几乎都是从“选型与场景匹配”的角度设计的。比如Hive和Spark的对比看似送分题但你能说清楚“什么时候用Hive什么时候用Spark”才有深度。如果是海量数据的批量离线加工且数据量极大、稳定性要求极高Hive的MapReduce执行引擎虽然慢但内存压力小运维简单完全够用。如果是迭代计算复杂、中间结果反复复用Spark的DAG计算和内存计算优势就体现出来了。如果你还能补充一句“在当前行业里很多团队直接用Spark SQL替代Hive但底层血缘和调度依然保留Hive的规范”那就更显经验了。Flink相关的题目也是重点因为它涉及实时数据开发。不少求职者的痛点是简历上写了Flink但实际只在Demo里跑过WordCount。笔试题目通常不会直接问API语法而是问“Event Time和Processing Time的区别”“如何保证Flink任务的精确一次语义”。回答这类题的关键是结合业务场景把数据延迟、乱序、检查点机制讲清楚而不是背概念。还有一类组件题容易被忽略就是调度与元数据。比如问你“每天凌晨跑的数据任务上游失败了下游怎么办”这种题考察你对调度依赖、任务重跑、数据补偿机制的理解。记得在回答中提及“幂等性设计”也就是同一份数据无论跑多少次结果都应该一样这是数据开发工作中最容易被忽视也最致命的细节。大数据的组件体系很庞杂但笔试并不会每个组件都考它会挑那些在工作中真正高频使用、且影响数据产出质量的组件。所以备考时不要追求“我什么都学过”而要追求“我学过的都能说清楚适用场景和常见坑”。5. 编程题与算法题拿到题先别写代码先画逻辑草图数据开发的编程题通常不会是LeetCode那种纯算法题而是偏向数据处理逻辑的实现题。比如写一个MR任务、实现一个自定义UDF、用Python或Java处理某类日志格式。但偶尔也会有一两道算法题以考察基本编程能力比如链表反转、二叉树遍历。这里有一个非常实用的应试策略拿到题先把输入输出分析清楚画出数据流图再动手写代码。很多人在笔试时着急上手结果写到一半发现逻辑分支没考虑全白白浪费了时间。举个实际例子如果题目要求“实现一个函数从用户访问日志中统计每个IP在每小时的访问次数”。如果你直接开写容易忽略IP缺失、时间格式不对、多个IP重复记录等边界情况。但如果你先画图把输入数据可能的形态、中间处理的步骤、输出结果的格式一步步列出来就会发现“先清洗再聚合”这个最稳的路径。这种思路阅卷人隔着卷面就能感受到。另外如果笔试允许选择语言选你最熟练的那种不要因为“面试官好像更认可Java”就临时换。笔试拼的是正确率和完成度不是语言炫技。Python在写脚本和数据处理时的优势是明显的Java在企业级实践中更普遍但你自己不会用就等于零。6. 备考策略三周时间怎么分配最合理拿到这份试卷的备考任务如果时间只剩三周——这是很多应届生的真实处境——我会建议按如下节奏安排。第一周重点放在SQL和数仓设计。SQL没捷径把行转列列转行、窗口函数各个家族、JOIN的各种类型和陷阱都刷一遍确保手写不卡壳。数仓设计要理解分层模型并总结出一套自己的话术能在十分钟内画出一张标准的分层架构图。第二周专攻大数据组件原理。不要泛泛地看所有组件的文档而是把Hive、Spark、Flink的“应用场景、核心机制、常见问题”三点整理成自己的笔记配套看一些真实案例比如“数据倾斜怎么处理”“小文件问题怎么解决”。第三周做整套模拟练习和复盘。找几套数据开发笔试题严格执行笔试时间做完之后不看答案先自查。重点检查SQL能否运行成功逻辑是否完整设计题是否画了图是否写清楚口径说明编程题是否考虑了边界条件。说一下数据倾斜这是大数据组件高频考题。笔试中通常以“某个Reduce任务运行特别慢怎么优化”的形式出现。回答时你要分清楚是group by导致的倾斜、join key分布不均导致的倾斜还是参数设置不当导致的倾斜。对症下药才能得分。我曾经在笔试时看到不少人在回答里说“加salting”但如果说不清楚saltkey如何生成、如何不影响结果这个答案只能算半对。7. 敲黑板这份试卷的阅卷人最看重什么站在出题人和阅卷人的角度我透露几个这份试卷的真实关注点希望对你有用。第一书写规范。SQL关键字、字段别名、表别名是否规范统一代码缩进是否清晰注释是否必要且到位这些细节在阅卷时会被放大看。一个代码整洁的考生通常也更容易被认为在团队协作中靠谱。第二步骤完整度。设计题如果只写了文字方案没有画图分数会打折扣。数据开发中的设计图包括架构图、流程图、调度依赖图是日常工作沟通的通用语言。笔试中的手绘草图能给阅卷人强烈的信号——“这个人能干活”。第三结果导向。编程题如果只写了思路没写完整的可运行代码在阅卷时通常只能拿到一半左右的分数。所以备考时一定要养成“写完整代码”的习惯不要眼高手低。函数名、变量名也要起得有意义别用a、b、c代替。第四职业素养。有些题会故意留坑比如时间字段的格式不统一日志里混入了异常字符。发现了这些坑并处理掉比把主流程跑通更能证明你的数据思维。出题人如果看到考生在回答中写了“需要先对时间字段做清洗和格式统一”通常会给出很高的评价。我还想单独提一下“幂等性”这个词。数据开发里最怕的就是重跑一遍结果变了这在金融、电信等严格审计场景里是事故级别的问题。笔试如果提到“数据重跑、结果一致性、回溯口径”你主动提幂等设计绝对是加分项。8. 笔试现场的时间分配和策略试卷大概会在有限时间内要求完成多种类型的题目时间分配是一个被很多人忽略的实战问题。据我经验SQL题加上设计题往往花掉的总时间会远超预期所以你需要一个明确的优先级排序。我习惯的分配策略是先花2到3分钟总览全部题目按分值比例和自身熟练度标记优先级。熟练的SQL题、概念清晰的组件题先做拿稳基础分设计题、编程题这类耗时大户留出相对充足的时间但也要设定一个时间上限比如设计题最多不超过20分钟超过就先写核心框架和关键说明不追求完美。留出最后的5到8分钟检查也很必要重点检查SQL题的分号是否补全、字段是否匹配设计题是否画了图编程题是否考虑了基本边界条件。这5分钟往往能捡回好几分的粗心分。另外如果笔试允许使用本地开发环境或在线编辑器一定要提前熟悉好快捷键不要在考试时才开始适应。如果考试环境是纯记事本书写那就提前练手写SQL以及手绘设计图的能力尤其要把常用函数名、参数名和语法结构记到肌肉记忆里。9. 笔试结束后还有一道“隐形题”很多人不知道数据开发笔试的最后一题往往不是写在卷面上的。笔试结束后面试官会拿着你的答卷结合你简历上的项目经历和笔试作答情况追问几个“你怎么看”的问题。这份试卷的考察思路通常也会延续到面试环节。最经典的追问是“你简历里的项目如果数据量扩大十倍你觉得会遇到什么问题你会怎么优化”这个问题你很难在笔试前死记硬背靠的是真实项目的思考积累。所以准备笔试时不要忘了把自己的项目经验从头到尾复盘一遍理清楚数据量级、处理流程、遇到过什么坑、怎么解决的。还有一个小细节笔试中你把某类题的解法写得很有深度面试官会顺着这个话题深挖确认你是真懂还是背的。所以备考时不要只追求“写出正确答案”而要确保每个写出的知识点都能在面试时被追问两三层后依然站得住脚。浩鲸科技的笔试只是数据开发求职路上的一道关卡考卷再变考察的内核是不变的你是不是一个具有数据直觉和工程素养的人。把这份试卷当成一次能力体检认真对待每一个暴露出来的薄弱点比单纯拿到一个分数更有价值。我当时备考时总结了一句话数据开发笔试不是为了筛选“知道最多的人”而是为了筛选“能把数据变成可靠资产的人”。你不需要答得完美但要让阅卷人看到你具备在真实数据环境里解决问题的能力。祝备考顺利。最后再分享一个小技巧。准备笔试时准备一张白纸和一支笔每当你发现一个高频考点或者容易出错的知识点就把它用图画或一句话记在白纸上临考前最后看一遍。比如我当年白纸上写的是“JOIN前先过滤、聚合前先去重、每次重算都要幂等”。这几个字考试时真的救了我。