掌阅数据分析笔试复盘:SQL窗口函数与AB实验实战解析

掌阅数据分析笔试复盘:SQL窗口函数与AB实验实战解析 先说结论这套题不算难但题量不小很考验基础功和业务思维的结合。我复盘完整个笔试过程最大的感受是——掌阅这批题出的挺有水平既有硬核的SQL和统计题又有紧扣阅读产品场景的业务分析题不是那种背背八股就能过的场子。如果你正在准备春招的数据分析岗无论目标是不是掌阅这篇复盘应该都能帮你在复习方向上少走不少弯路。1. 整体盘点这套笔试试卷到底在考什么1.1 题型分布与考察目标整套卷子我做完大概用了90分钟时间刚好够但几乎没有余量去反复检查。题型大致可以分为四块SQL查询题、Python数据处理题、统计学与概率题、业务分析题。其中SQL和业务分析的占比最高各占了大概30%Python和统计概率各占20%左右。有意思的是卷子里没有纯粹的概念填空题所有题目都包装在具体场景里这其实反映了现在数据分析岗笔试的一个大趋势——从考察“你知不知道”变成考察“你会不会用”。比如SQL题不是让你写个简单的SELECT就完事而是给你一张用户阅读行为表让你算出连续7天都有阅读行为的活跃用户这就把窗口函数、去重逻辑、日期处理全考进去了。考察目标其实很明确第一是硬技能是否扎实第二是能否把数据和具体业务问题结合起来。掌阅做的是数字阅读平台用户规模大、内容品类多、付费场景丰富所以数据岗要处理的问题往往集中在用户增长、内容推荐、付费转化这几个方向。笔试题目也确实是围绕这些场景展开的。1.2 卷面之外的隐藏信息我觉得这份笔试卷子还透露了一个重要信息这个岗位进去之后大概率是要直接对接业务线的而不是纯做数据报表的。因为业务分析题占了很大比重而且题目描述里给的背景信息非常详细包括产品功能、用户行为路径、业务指标定义如果你不了解阅读类App的运营逻辑看到这些题是会有点懵的。还有一点值得注意题目里出现了不少关于AB实验的考察点包括实验分组、显著性判断、指标波动评估。这说明团队对数据驱动决策比较看重不是那种“数据部门自己玩”的团队而是真的希望数据分析师能参与到产品决策中来。这一点在我后面跟面试官的交流中也得到了印证。2. 硬技能关SQL、Python和统计的实战拆解2.1 SQL窗口函数和复杂查询是分水岭先说SQL部分这是整张卷子里最硬核的模块。有一道题我印象很深题目给了一张用户每日阅读记录表包含字段user_id、book_id、chapter_id、read_date、read_duration_seconds要统计出连续30天每天都产生阅读行为的VIP用户。这个题看起来不复杂但真正动手写的时候有几个坑。连续天数的统计在SQL里有固定的解法套路先用窗口函数给每个用户的阅读日期排个序然后用read_date减去序号如果日期是连续的差值就会相同再按这个差值分组统计天数。我当时写的思路大概是这样WITH daily AS ( SELECT DISTINCT user_id, read_date FROM user_reading_log WHERE read_date BETWEEN DATE(2025-01-01) AND DATE(2025-02-28) ), seq AS ( SELECT user_id, read_date, DENSE_RANK() OVER (PARTITION BY user_id ORDER BY read_date) AS rn FROM daily ), grp AS ( SELECT user_id, read_date, DATE_SUB(read_date, INTERVAL rn DAY) AS grp_date FROM seq ) SELECT user_id FROM grp GROUP BY user_id, grp_date HAVING COUNT(*) 30这里有几个细节值得说明。第一用DISTINCT去重很重要因为同一用户一天可能读很多章会产生多条记录如果不先去重连续天数的判断就失真了。第二DENSE_RANK()在这里比ROW_NUMBER()更合适因为如果有重复日期ROW_NUMBER()会给不同的序号导致连续判断出错而DENSE_RANK()在并列日期时会给出相同序号。第三DATE_SUB计算差值那一步要特别注意日期格式如果原始数据里时间部分不是精确到天要先DATE()转换一下。另外卷子里还考了一道留存计算相关的SQL让用一条SQL计算次日、3日、7日留存率。这题核心是自关联把用户首次活跃日期作为基准然后关联后续每天的活跃记录计算每个日期段的留存。用LEFT JOIN的方式会比子查询高效很多而且逻辑更清晰。2.2 Python数据清洗和AB实验模拟是主力Python部分的题不算难但很有代表性。一道题是给了一份书籍评论数据包含评论内容、评分、点赞数、评论日期等字段要求做清洗并分析不同评分区间的评论点赞均值。这题其实就是考察Pandas的基础操作包括空值处理、类型转换、分组聚合。我当时用的思路是空值处理要分情况评分空值直接删掉因为评分是核心分析字段缺失情况下无法归入区间评论内容空值可以填充为“未知”不影响统计分析点赞字段如果是字符串类型要强制转成int转换失败的用0填充。分组时用pd.cut()按评分区间切分分别计算点赞均值和评论数。代码框架大概是这样的import pandas as pd df pd.read_csv(book_comments.csv) df df.dropna(subset[score]) df[like_count] pd.to_numeric(df[like_count], errorscoerce).fillna(0).astype(int) bins [0, 2, 4, 5] labels [低分(0-2), 中分(2-4), 高分(4-5)] df[score_group] pd.cut(df[score], binsbins, labelslabels) result df.groupby(score_group)[like_count].agg([mean, count])还有一道题比较有意思是模拟一个AB实验的检验过程。题目背景是为了提升用户阅读时长产品团队改了推荐策略实验组看了新策略的推荐结果对照组看旧的。给了两组用户的日均阅读时长数据让用Python做显著性检验并给出结论。这种题本质上是把统计知识和Python实操结合起来只懂理论写不出代码不行只懂代码不懂统计原理也不行。写这题的时候我用了scipy的ttest_ind函数但要注意一个前提你要先判断两组数据的方差是否齐性不然直接用Student t检验可能出问题。稳妥的做法是先跑Levene检验如果方差不齐就改用Welch t检验。实际代码差别不大参数里设置equal_varFalse就行但思路上的严谨性能让面试官看到你的统计功底。2.3 统计概率要理解原理而不是背公式统计概率题出的也比较活。有一道题问某功能的点击率为10%现在随机抽取200个用户进行曝光测试问至少25人点击的概率是多少。这题如果按正态近似来做均值为20标准差是sqrt(2000.10.9)4.2425人对应的Z值是(24.5-20)/4.24约等于1.06算出来概率大约0.14。但有一半的人可能会在这里踩坑连续型校正那个0.5很容易忘不校正的话Z值是(25-20)/4.241.18结果会有偏差。另一道统计题是关于置信区间的给了一个样本的均值和标准差让算95%置信区间。这种题看起来基础实际上考察的是对t分布和正态分布适用条件的理解。样本量大于30时根据中心极限定理可以用正态分布近似但严格来说这个场景是用t分布更合适特别是样本量没那么大的时候。统计部分我的建议是复习的时候不要只记公式要理解每个假设条件知道什么场景用参数检验、什么时候用非参数检验。掌阅这种体量的公司用户数据量很大但业务场景中常常需要分析小样本的实验结果这时候对统计原理的掌握程度就体现出来了。3. 业务题破局站在阅读产品视角拆解数据问题3.1 业务题考察的是逻辑链条而非标准答案业务分析题是整张卷子的重头戏也是最需要提前准备的部分。有一道题我记得很清楚运营发现近期“玄幻小说”分类的次日留存率下降了5个百分点需要分析原因并给出解决方案。这个题的难点在于——它没有一个标准答案考察的是你的分析框架是否完整逻辑链条是否严密。我的回答思路是分层的。先确认数据本身的准确性包括统计口径是否调整过、是否有异常数据上报、是否涉及版本更新导致埋点变化。确认数据没问题之后再从外部环境、内部产品、用户结构三个维度去拆解。外部环境要看是不是有竞品做了大促活动或者暑期档内容竞争加剧内部产品要看推荐策略是否有调整、首页入口是否有变化、该分类下的头部书籍是否出现断更用户结构要看新增用户和存量用户的留存变化是否一致是不是新用户质量下降导致的整体数据被拉低。这种题答得好不好关键在于能不能体现出“数据分析师”和“取数工具人”的区别。单纯说“查一下数据看看”是不够的要有进一步的分析动作。比如说到用户结构变化你可以补充说“按新老用户拆分同时按用户注册渠道维度交叉分析”说到内容影响可以说“对比该分类头部书籍的更新频率和完读率变化结合书评情感分析来看用户对内容质量的态度”。每个建议都要落到具体可执行的分析方案上。3.2 指标体系和拆解框架的实战用法还有一道题是设计指标体系阅读类App要评估付费会员业务的发展状况需要建立一套指标体系要求包括指标定义、计算口径、数据来源和分析价值。这题考察的是指标体系设计的结构化能力而不是单个指标的记忆。我给出的框架分成了三个层级。第一层是规模指标涵盖付费会员总数、新增付费会员数、会员付费率、ARPPU每付费用户平均收入。第二层是转化效率指标涵盖免费用户到付费会员的转化漏斗包括试读章节完成率、充值页到达率、支付成功率、付费引导页面的点击率。第三层是健康度指标涵盖会籍续费率、会员月均阅读时长、会员内容的完读率、会员退费率和投诉率。拆解指标的时候特别要注意“计算口径”的清晰性这是面试官考察的点。比如“续费率”就有好几种口径按金额算还是按人数算计算周期是月还是季度是否排除赠送会籍的用户这些不定义清楚指标就是废的。我在写答案时把每个指标的计算公式、数据来源表、异常判定阈值都列了出来让面试官知道我不是只会堆指标名称而是真考虑过落地。掌阅这种内容平台还有一个比较特殊的分析视角是内容生命周期。书和实体商品不一样它的价值会随着时间衰减新书上线有流量红利期之后会经历爬坡、稳定、衰退的过程。围绕内容生命周期来做分析可以看到哪些书有长尾价值哪些书是高开低走这对于理解留存数据和付费数据的波动非常有帮助。3.3 阅读场景特有的用户行为分析卷子里有一道关于用户阅读行为的分析题提到在线阅读时长上涨但评论互动量下降让我分析是否正常。这种题其实很考察对行业场景的理解深度。我当时从内容消费结构的变化入手是不是用户看了更多网文这种沉浸式阅读内容而这类内容的读者本来互动意愿就低或者是推荐策略变了更多新用户进来而新用户本身就处于“先看书、后互动”的成长路径上。做内容平台的数据分析一定要对业务指标之间的“联动关系”敏感。阅读时长上升可能是好事但如果伴随的是评论量下降、分享量下滑、社区活跃度走低那很可能意味着平台正在从一个“互动型社区”退化成一个“纯内容消费工具”。这种判断能力是数据分析师从执行层向决策层跃迁的关键。关于这种题我自己的一个心得是分析用户行为数据的时候一定要多做“分层”不要只看整体平均数。我之前在工作中踩过坑整体阅读时长是上涨的但拆开一看其实是头部书粉贡献了大量时长中等活跃用户反而在流失光看总体数据完全发现不了这个问题。当时的正确做法是给用户按阅读时长分成几个层级看每个层级的留存和活跃变化这样才能找到真正的增长引擎和流失重灾区。4. 备考方法论如何高效准备这类数据岗笔试4.1 分阶段复习的计划框架我是从2月中旬开始集中准备的到笔试大概用了三周时间。我大概把复习分成三个阶段第一个阶段是一周时间快速补齐硬技能短板主要刷SQL题和Python题把窗口函数、自关联、留存计算、Pandas清洗这些高频考点练熟第二个阶段是一周时间集中攻业务分析每天看两三道业务场景题训练指标拆解和归因分析的能力第三个阶段就是考前三天做模拟题和整套真题把手速和答题节奏练出来。这里特别想说一下刷题资料的选择。市面上的数据分析笔试题库很多但质量参差不齐有的题目和实际工作场景严重脱节刷了价值不大。我自己的经验是优先选择大厂近一两年的真题尤其是互联网内容平台方向的数据分析岗真题因为出题风格和考察重点高度接近。另外多看看行业社区的面试经验帖很多热心人会把笔试复盘写出来信息量很大。4.2 业务题怎么准备日常积累是核心业务分析题很难临时抱佛脚因为它的核心不是知识点而是你的“题目感觉”——看到一个业务现象能快速形成分析框架。这种能力的养成需要日常积累。我在准备期间做了个练习每天找一个产品或者是内容社区、电商平台、工具类App都行观察它的功能变化和数据表现然后自己出题自己答比如“如果次留下降3个点我会怎么分析”。坚持了两周之后看到任何业务问题都能条件反射地拆出好几个分析方向。AB实验是业务题里比较高频的考点我强烈建议大家把AA实验的原理搞清楚。很多公司做实验都会先跑AA实验验证分流均匀性如果AA实验就出现显著差异说明分流系统可能有问题这时候不能急着看实验结果。这类考点的回答可以体现出你真正做过实验而不是只懂统计理论。4.3 SQL是拿分底线建议刷到“条件反射”的程度如果说业务题决定你能不能拿高分那SQL题就是决定你能不能拿及格分。很多公司笔试的第一轮筛选就是看SQL题的正确率SQL没写对后面全白搭。我的建议是每天至少手写6到8道SQL题而且要限定时间模拟笔试环境。连续天数、留存率、TopN、同比环比、窗口函数求移动平均这些高频题型要刷到不用思考就能写出来的程度。有的同学习惯在本地数据库环境里练习可以跑通验证结果这是很好的方式。但笔试现场不一定有验证环境所以训练的时候可以先用纸笔或编辑器手写再放到环境里验证这样更接近真实考试状态。我练习时用的是本地MySQL加上一个自建的练习数据库数据量不用很大重点是把语法和逻辑跑通。5. 经验复盘与重要避坑提醒5.1 笔试过程中的几个坑我替你们踩过了第一个坑是时间分配。我前面在做SQL题的时候过于追求完美有一道题反复优化了两遍结果后面业务题时间有点紧有些分析只写了大纲没展开。后来复盘发现这套卷子的评分重点其实在业务题上因为业务题能看出候选人的思维深度和行业理解而SQL题只要逻辑对、能跑出结果优化不优化在评分上差别不大。我建议按分数占比分配时间业务题至少要留40分钟。第二个坑是没看清题目的数据口径。有一道SQL题的表结构里日期字段是datetime类型而我在做DISTINCT的时候没有先转成date结果出现了同一用户同一天被算成多天的错误还是后来自查发现的。笔试的时候一定要先仔细看字段类型和示例数据不要想当然。第三个坑是业务题写太少。要知道笔试阅卷的时候面试官一天要看很多份卷子如果两份答案的思路框架差不多那个写得详细、有数据支撑的肯定印象更好。我后来总结业务题的答案至少要把“拆解框架、具体数据字段、分析动作、决策建议”四个层次写全缺一个都会显得单薄。5.2 关于面试衔接笔试复盘是很好的面试素材笔试结束之后千万别把题目忘了面试前把所有笔试题目重新梳理一遍特别是不太确定答案的题。掌阅的面试官大概率会让你复盘笔试思路我当时就被问到了一道业务分析题的延伸“如果让你针对刚才那道留存下降的问题设计一个数据监控看板你会选哪些指标、用什么样的图表形式呈现”。这时候如果笔试时做过深入思考就能很快给出有价值的答案。我当时说了三个维度实时监控类指标用折线图展示趋势异常预警类指标设置阈值并配合红黄绿灯提示归因分析类指标用堆叠图看构成变化。面试官明显比较满意还追问了看板的刷新频率和数据量级设计的问题。5.3 这套题型的预测未来笔试的新趋势复盘掌阅这套题我想到未来数据分析岗笔试的几个趋势。第一是工具型题目会越来越重尤其是SQL窗口函数和Python数据处理它们已经成为标配第二是业务题的场景会越来越具体要求你对目标行业有一定了解想靠“万能分析框架”打天下的日子在慢慢变少第三是统计概率和业务结合的题目会增多比如AB实验设计、样本量计算这类体现数据驱动决策的能力。另外我注意到一个变化一些公司开始考察数据敏感度给你一组数据让你快速说出异常或值得关注的点。这种能力靠刷题刷不出来需要靠平时多看数据、多分析数据养成。我自己平时看数据报表的时候就会刻意训练——“这个数比上周涨了8%可能是什么原因”长此以往这种“数据直觉”就会内化。最后再分享一个切身感受。准备笔试的过程会比想象中更痛苦尤其是业务分析题一开始可能连框架都搭不出来。但坚持过了那个门槛之后你会发现自己看任何产品问题都在不自觉地用数据思维去拆解了——这是一种比拿到offer更宝贵的收获。这篇文章里的方法和复盘如果你能实操起来相信也一定能帮你冲刺顺利。