2023年秋招,我报了一家金融背景的科技公司数据分析岗,投完简历没几天就收到了小满秋招第一批笔试的链接。说实话,很多人对这个岗位的笔试预期就是“考SQL、考Python、考统计学”,但这批卷子做下来,我发现它更想考察的是你面对一个不清晰问题时的拆解能力。笔试一共分了几个板块,覆盖统计学、SQL、Python、Excel和业务案例分析,时间看着充裕,真要每一道都做得漂亮并不轻松。这篇文章就把我亲身经历的这一批笔试复盘一遍,讲讲题型分布、典型题目、答题思路,以及我踩过的坑。准备秋招数据分析岗的同学,或者想转行做数据分析的人,可以直接拿这份复盘当参考。
1. 这一批笔试到底在考什么
1.1 先搞明白招聘方想要什么样的人
很多同学拿到笔试题的第一反应是“我要把语法背熟,把模型公式都默写出来”。但你要是真的做过几场数据分析岗的笔试,就会发现题目本身并不是为了难倒你,而是为了筛选出符合岗位画像的人。从小满这批笔试的题目反推,这个岗位要的不是取数工具人,而是能独立拉数、能听懂业务需求、能在数据异常时给出排查方向的初级数据分析师。
金融科技公司的数据分析岗有一个特点:业务侧非常关注风险、转化、留存和成本。所以笔试不会只考“会不会用某个函数”,而是会给一个偏业务的场景,比如“某个渠道的注册转化率连续下降,你怎么分析”。这时候光会写SQL不够,你得有业务常识,知道漏斗的每一步埋点在哪里,知道渠道差异和版本迭代都可能影响转化,知道用什么指标去衡量波动的显著性。
理解了这层逻辑,你再看笔试题,就会明白为什么有些题看着简单,但给分点那么多。比如一道SQL题,表面上是查某个时间范围内的订单量,但实际暗含去重、空值处理、日期边界条件、分组维度归类这些细节。每一步都有分,最后拼的是你平时写数仓查询时有没有养成好习惯。
1.2 题型构成和大致分值分布
我回忆了一下,小满秋招第一批笔试的在线测评大概持续两个半小时,题量不算特别大,但每道题都需要动笔推演。整体可以分成四个板块。
| 板块 | 考察内容 | 大致占比 | 我的体感难度 |
|---|---|---|---|
| 综合行测与逻辑 | 资料分析、图形推理、文字理解 | 25% | 中等,关键是速度 |
| 统计学与业务选择题 | 假设检验、置信区间、辛普森悖论、业务指标辨析 | 25% | 中等偏上 |
| SQL与Python编程题 | 数据查询、数据清洗、留存计算、简单统计建模 | 30% | 较难,容易在细节翻车 |
| 业务案例分析题 | 指标异动排查、AB实验设计、用户分层策略 | 20% | 主观题,但拉分最明显 |
综合行测那一块和公务员考试的资料分析很像,但更偏向图表和数据理解。统计学与业务选择题是最容易突击的,因为考点固定,翻来覆去就是那几十个概念。编程题是重头戏,SQL必考,Python大概率考pandas和scipy。案例分析题看着最开放,其实也有套路,后面我会专门展开。
1.3 前期知识准备,我实际用到的工具清单
如果你还有一两周才笔试,建议按这个清单去查漏补缺。首先是Excel,这是保底工具,哪怕你SQL不熟练,用数据透视表也能处理不少问题。笔试环境里如果只给一个csv文件,Excel反而是最稳的。其次是SQL,必考窗口函数、多表join、日期函数、留存计算。再就是Python,重点掌握pandas的数据清洗、groupby聚合、merge关联,以及scipy的统计检验。
我顺手把笔试前用到的一些学习资料列在下面,都是市面上好找的:Python数据分析与可视化的教程、Excel数据分析实战类的书、SQL面试题合集、商业数据分析的案例库。如果时间紧,不用全部啃完,优先刷SQL和pandas的基础题。数学建模与数据分析这一块可以放到后期,笔试里直接考建模的不多,但如果能在案例分析里主动提出用逻辑回归或聚类去做用户分层,会很加分。
2. 核心题型逐项拆解与避坑思路
2.1 统计学与业务选择题:考点集中,拼的是概念清晰
这批笔试题里,统计学选择题大概有十道左右,考得很集中,都是基础概念。比如p值的含义,置信区间和样本量的关系,中心极限定理的适用条件,第一类错误和第二类错误的区别,还有相关关系和因果关系的辨析。这些概念在面试里也常考,笔试里往往换成一个具体的业务场景让你判断。
举个例子,有一道题大概是说某活动页面的点击率从5%提升到了6%,运营想宣布活动有效,问你怎么看。选项里有“需要做显著性检验再下结论”“6%一定大于5%,所以有效”“点击率提升但样本量未知,无法判断”“应该看用户数而非点击率”。正确的思路是先看样本量和波动范围,再决定是否做检验。这道题考的不是计算,而是数据分析思维里最基本的一条:不能只看数值差异,要看差异是否显著。
业务选择题还会考一些常用模型的理解,比如RFM模型怎么划分用户价值,漏斗模型里哪一步流失率最高怎么定位,购物篮分析里的支持度和置信度怎么算。如果之前在商业数据分析项目里实际用过这些概念,答起来会轻松很多。如果没接触过,临时背概念也来得及,但一定要把定义和业务含义结合起来理解,不要死记公式。
2.2 SQL实操题:窗口函数是分水岭
SQL题是数据分析岗笔试的重头戏,小满这批也不例外。基础题无非是select、join、where、group by、order by,但只要涉及留存率、连续活跃、排名分组这类场景,就必须用到窗口函数。窗口函数和普通group by最大的区别是:group by会压缩行数,窗口函数不压缩行,可以在保留明细的同时计算聚合值。这个特性在做“每个用户在首次下单后的第二个月是否复购”这类问题时就特别好用。
我复习时最大的感受是,窗口函数不是背几个语法就行,关键是理解partition by和order by的执行顺序。很多人写rank()或row_number()时经常忘记在partition里指定分组维度,结果算出来的排名是全局排名而不是组内排名,这类错误在笔试里特别容易扣分。另外,sum() over(partition by ... order by ...)可以实现累计求和,这在算某时间点的累计金额时很常用。
窗口函数用多了之后,你会发现很多常规思路里的“子查询加临时表”都可以被更简洁的窗口函数替代。面试官看你的SQL写法,能直接判断你平时是只写业务报表,还是真的研究过复杂查询逻辑。想要突击这部分,可以去找历年数据分析面试题里的SQL部分,把每个题用窗口函数写一遍,再用普通写法写一遍,对比一下两种思路的差异。
2.3 Python编程题:pandas清洗和统计检验经常一起出现
Python题在这批笔试里不算难,但很考察日常使用的熟练程度。有一道题给了一个含有缺失值和重复值的订单表,要求用pandas做数据清洗,然后统计每个渠道的平均客单价。这种题如果平时总用R或Excel处理数据,突然切换到Python环境,可能会卡在“缺失值怎么填、重复值按什么字段去重”这些细节上。
我的建议是,无论题目有没有要求,都要把处理过程拆成四步:第一步读数据,看shape和dtypes;第二步处理缺失值,先判断是删除还是填充,删除要看删除后还剩多少样本,填充要用均值、中位数还是前向填充,必须给出理由;第三步处理重复值,一般按订单ID去重,但要确定日期和用户ID组合是否唯一;第四步分组聚合,计算目标指标。每一步都写清楚,让面试官看到你的分析思路。
如果题目升级到“判断两个渠道的转化率差异是否显著”,就要用scipy的ttest或卡方检验。这里有一个很容易踩的坑:小样本情况下,直接用正态分布近似会出错,应该用t检验。另一个坑是数据不是正态分布时,要先考虑是否取对数或换用非参数检验。笔试时间有限,不要求你写出完整论文式的分析报告,但至少要写出关键判断和对应代码。
2.4 案例分析题:指标异动排查和AB实验是核心
案例分析题是这批笔试里最像真实工作场景的部分。题目大概是“某金融产品的申请转化率连续三天下降,你作为数据分析师,怎么排查原因”。这类题没有标准答案,但面试官心里的参考答案基本是一致的:先确认数据口径,再拆维度,再看业务动作,最后给出建议。
第一步确认数据口径,要问清楚转化率的分子分母分别是什么,是登录到申请的转化,还是申请到审批的转化,有没有把测试用户和内部员工排除。第二步拆维度,按渠道、设备类型、城市等级、版本号、时段拆分,看是全部下降还是某个子群体下降。第三步结合业务动作,近期有没有上线新版本、调整投放策略、或者遇到节假日和外部舆情。第四步给出建议,如果是某个渠道下降,就重点排查渠道流量质量;如果是全量下降,要考虑策略变更或技术事故。
案例分析想拿高分,还有一个技巧:主动设计AB实验。你可以在回答里说“我可以提出一个AB实验方案,把用户随机分流,实验组用新策略,对照组保持原策略,观察核心指标是否显著变化”。这会让面试官觉得你不仅有分析能力,还有验证思维。金融风控数据分析岗尤其看重这种能力,因为很多策略改动都需要在风险可控的前提下做测试。
3. 实操复盘:从SQL到Python再回到Excel的完整推演
3.1 一道完整SQL题的推演过程
笔试编程题里有一道SQL题,我记得很清楚,因为它综合考了日期函数、去重、join和时间区间判断。题目大概是这样的:有两张表,用户表user_info包含user_id、注册日期reg_date、注册渠道channel;订单表order_info包含order_id、user_id、下单日期order_date、订单金额amount。要求计算2023年1月注册的用户中,有多少人在注册后30天内完成了首单,并按渠道统计完成率。
我当时写的思路是这样的:先找出2023年1月注册的用户及其注册渠道,再关联订单表,但关联时要限定订单日期在注册日期和注册日期加30天之间。这一步的关键是日期加法,不同数据库写法不一样,MySQL用date_add,PostgreSQL用interval,笔试环境如果是线上SQL编辑器,要先确认数据库类型。然后用order_id去重,避免同一个用户下多单被重复计算。最后按渠道分组计算。
-- 思路1:先过滤注册用户,再关联订单,计算是否在30天内完成首单 with reg_user as ( select user_id, reg_date, channel from user_info where reg_date >= '2023-01-01' and reg_date < '2023-02-01' ), first_order as ( select user_id, min(order_date) as first_order_date from order_info where user_id in (select user_id from reg_user) group by user_id ) select ru.channel, count(distinct ru.user_id) as reg_cnt, count(distinct fo.user_id) as order_cnt, round(count(distinct fo.user_id) / count(distinct ru.user_id), 4) as order_rate from reg_user ru left join first_order fo on ru.user_id = fo.user_id and fo.first_order_date between ru.reg_date and date_add(ru.reg_date, interval 30 day) group by ru.channel;这道题有几个给分点。第一个是“注册后30天内”,这个条件必须写在join的on里,而不是写在where里,否则left join会退化成inner join,把没有下单的用户过滤掉。第二个是“首单”,必须用min(order_date)聚合,不能直接关联全部订单记录,否则一个用户下三单会变成三行,完成率被虚高。第三个是按渠道分组统计时要用count(distinct)而不是count(*),因为同一个用户可能在订单表里出现多次。
实际做题时,我还联想到另一种更稳妥的写法:先算出每个用户的首单日期,再判断是否在30天窗口内,最后聚合。这种思路更符合业务逻辑,也不容易被日期边界问题干扰。笔试时如果时间充裕,我建议写出两种思路,哪怕只写一种,也要在注释里说明“另一种方法是什么”,这会向面试官传递一个信号:你能够从多个角度验证数据结果。
3.2 Python部分:从数据清洗到可视化
Python题我印象比较深的是一道数据清洗加可视化的题目。题目给了一个csv文件,里面是某产品近三个月的日活跃用户数,但数据质量很差:日期列有重复、部分数值列是字符串类型、还有几行明显缺失。要求是清洗数据,画出日活跃趋势图,并指出是否存在异常波动点。
我当时的处理步骤是这样的。先用pandas读取,打印shape、info、head,快速了解数据。看到日期列有重复后,用drop_duplicates按日期去重。数值列有字符串,比如“1000”和“1,000”混在一起,用astype处理前先替换逗号。缺失值不多,直接dropna。然后为了看趋势,我把日期设成索引,按周重采样,画折线图。
import pandas as pd import matplotlib.pyplot as plt df = pd.read_csv("daily_active_users.csv") print(df.shape) print(df.dtypes) print(df.head()) # 清洗:去重、替换逗号、转数值、去缺失 df = df.drop_duplicates(subset=["date"]) df["dau"] = df["dau"].astype(str).str.replace(",", "", regex=False) df["dau"] = pd.to_numeric(df["dau"], errors="coerce") df = df.dropna(subset=["dau"]) # 日期处理 df["date"] = pd.to_datetime(df["date"]) df = df.sort_values("date") df = df.set_index("date") # 重采样后画趋势 df["dau"].resample("W").mean().plot(figsize=(10, 4)) plt.title("Weekly Average DAU Trend") plt.ylabel("DAU") plt.tight_layout() plt.show()这道题在答完之后,我还在注释里写了一句:如果某个周均值出现明显下跌,需要去核查是否存在埋点漏报、渠道投放暂停或节假日效应。这种注释在真实工作中就是数据分析师会做的事,面试官看代码时能看出你是有业务意识的人,而不是只会调包。
可视化部分,如果笔试环境里可以装库,matplotlib和seaborn最稳妥。如果需要连接数据库做分析,我会用DBeaver查数据,因为它支持常用数据库,写SQL时有语法提示,导出数据方便,还能直接生成一些基础图表。日常工作中我经常在DBeaver里跑数,然后把结果导出成csv,再用Python做深度分析。笔试时如果允许使用这类工具,会节省不少时间。
3.3 用Excel处理同样问题的保底思路
不管笔试环境给不给数据库和Python环境,Excel永远是保底方案。我就见过有人在一道SQL题卡住后,直接用Excel在本地打开数据文件,用数据透视表和vlookup硬生生把结果算出来。虽然步骤笨重一点,但至少能拿分。
Excel处理数据清洗问题的核心操作无非是:删除重复项、查找替换、分列、填充缺失值。比如遇到“1,000”和“1000”混在一起的脏数据,用查找替换把逗号去掉,或者用分列功能把文本转成数字。日期处理上,用text函数统一格式,或者用分列里的日期类型转换。要计算每个渠道的订单数,只需要插入数据透视表,把渠道拖到行标签,把订单ID拖到值区域,改成计数。整个过程不超过两分钟。
Excel的优势在于,它所见即所得,不需要记函数名。很多人觉得Excel不够高级,但在数据分析岗笔试里,Excel其实是最不容易出错的工具。尤其是时间紧张的时候,用数据透视表快速拿结果,再花时间在案例分析题上多写几点,整体收益往往更高。笔试不是秀技能的地方,拿分才是硬道理。
3.4 图表选择思路:不是所有数据都适合用柱状图
笔试里有一道题是给你一组数据,让你选择合适的图表展示。这道题看似送分,但很多人会因为不假思索直接选柱状图而丢分。我用实际业务场景梳理一遍:时间趋势要用折线图,占比结构用饼图或堆叠柱状图,数据分布用直方图或箱线图,两个变量关系用散点图,排名对比用条形图。
比如“某渠道DAU连续30天变化趋势”,正确的首选是折线图,因为它强调时间维度的连续变化。如果画成柱状图,视觉上会把连续变化切成分散的时间点,不容易看出趋势。再比如“不同渠道的客单价对比”,用柱状图就合适,因为渠道是分类变量,重点是横向比较。如果是“各渠道的转化率分布是否集中”,箱线图比柱状图更直观,它能看到中位数、四分位距和异常值。
这些看起来很简单,但恰恰是数据分析笔试里容易被忽略的细节。面试官阅卷时会看你对“为什么选这个图”的解释,如果你能写清楚“因为想看分布”或者“因为要强调趋势”,就已经超过了大多数人。
4. 高频失误、复盘清单和下一步备考方向
4.1 我踩过的三个大坑
第一个坑是SQL里用了count(*)而不是count(distinct)。有一道题统计某段时间内购买用户数,我一开始直接count(order_id),但同一个用户可以下单多次,这样就把用户数算多了。现在回想起来,这个错误在真实工作里也经常出现,统计“用户数”时一定要明确按什么字段去重。
第二个坑是Python清洗时没有先看数据类型就做运算。有一列金额是object类型,里面有“1,200.00”这样的字符串,我直接取均值报错,后来才发现要先用str.replace去逗号再转float。这个坑在笔试里浪费了我五分钟,如果在真实项目里,可能还会导致分析结论错误。
第三个坑是案例分析题里没有先问澄清问题就开始写结论。题目说“转化率下降10%,请分析原因”,我上来就按渠道拆解,但没想过口径是否变化,也没想过“转化率下降”是相对哪个基准。后来复盘时意识到,数据分析师拿到需求第一件事应该是确认口径,而不是动手写SQL。这一点在面试里尤其重要,因为面试官就是看你有没有这种下意识。
4.2 常见问题速查表
我把笔试和面试中比较常见的问题整理成一个速查表,方便你在考前快速过一遍。
| 问题 | 常见错误 | 正确处理思路 |
|---|---|---|
| 统计指标口径不清晰 | 直接按题目字面意思计算 | 先明确分子分母、时间范围、是否去重 |
| 留存率计算 | 用注册用户数做分母,漏看时间窗口 | 按注册时间分组,统计后续窗口期活跃用户数 |
| 缺失值处理 | 一律删除或一律填充 | 先看缺失比例和缺失机制,再决定删除或填充 |
| 窗口函数 | partition by写错或漏写 | 先想清楚“组内汇总”和“全局汇总”的区别 |
| AB实验设计 | 样本量太小、没有做显著性检验 | 先估计样本量,再随机分流,最后用检验判断 |
| 指标异动排查 | 直接给结论 | 按“口径—维度—业务动作—实验验证”顺序走 |
| 图表选择 | 一律柱状图 | 先判断是趋势、分布、对比还是相关关系 |
4.3 不同行业数据分析笔试的侧重点差异
复盘完小满这批笔试,我又翻了一些其他公司的真题,发现不同行业的侧重点差异还挺大。互联网公司更爱考AB实验、用户增长和漏斗分析,题目常常给你一组埋点日志,让你算转化率。银行系和金融科技公司更偏风控、反欺诈和用户分层,SQL题里经常出现历史还款记录和逾期标签。传统零售和制造企业则偏经营分析,比如销售额同比环比、库存周转率、ABC分类。
所以在准备笔试前,先想清楚你投的行业是什么,再决定复习重点。金融风控方向,重点看特征工程、逻辑回归、评分卡的基本概念,还有渠道质量分析。互联网方向,重点看A/B test原理、留存曲线和漏斗归因。如果手头时间充足,可以找几个数据分析案例库,把分析过程完整走一遍,比如拉一份订单明细数据,自己算客单价、复购率、用户价值分层,再输出一份分析报告。这类项目经历写在简历上也很有说服力。
另外,如果你有多余精力,可以了解一点无监督学习在用户分群里的应用,比如聚类算法可以把用户分成高价值、潜力、沉默几类。这类知识不一定直接考,但在案例分析题的加分项里非常好用。R语言和数据挖掘类工具,通常不是笔试的主流,但在后续面试中提一句“我熟悉R或Python”,会显得知识面更广。
4.4 对“小满秋招第一批”这份卷子的整体感受
做完小满第一批笔试,我的最大感受是:它没有刻意刁难人,但每一道题都在筛选“真正做过事的人”。SQL题和Python题都偏业务,如果只是背语法而没有实际处理过脏数据,很容易在细节上卡住。案例分析题更是如此,没有标准答案,一眼就能看出你是只会背框架,还是真的理解业务逻辑。
如果你投的是第二批或后面的批次,我给的建议是:别急着刷新题,先把错题重做一遍。像我这样把SQL窗口函数、留存计算、数据清洗、案例拆解这四类题练到几乎不用思考,笔试时就会从容很多。数据分析这个岗位,考察的本质不是知识量,而是你遇到问题时的反应速度和分析习惯。
最后分享一点个人的备考体会
笔试这东西,准备的时候总觉得内容太多,题目永远刷不完。但真正考完回头看,核心就那几件事:SQL能写好窗口函数,Python能折腾明白pandas,Excel能快速出透视表,业务题能按框架不乱套。小满这批笔试给我最大的教训是,不要相信“考前突击一个月就能上岸”的错觉,数据分析是靠一次次实操喂出来的。每一次用真实数据做清洗、做分析、做图表,都是在给笔试积累手感。如果时间允许,做一个完整的数据分析项目,把数据拿到手、把问题定义清楚、把分析过程写到能给别人看,效果比刷十套题都明显。