两道腾讯最爱考的数据分析面试题 | 附解题思路

hive sql实战案例-最高连续签到天数 求每个用户的最高连续签到天数 阅读详情

作者:腾讯数据分析师 annatx

来源:高级农民工

大家好,我是小z~

下午在群里看到不少旁友讨论数据面试相关问题,于是乎,今天分享这篇文章,内容既相关,又很干(有题目,又有解答):

主要是关于两道数据分析试题,这是腾讯数据分析面试官在面试时考察候选人喜欢出的题,属于硬性技能考察题目,特别好用。

如果你想投鹅厂的数据分析师岗位,强烈建议看看,就算不投也可以借鉴。刷题做实战题目是王道,刷一道顶得上在网上刷百道。

以下是面试官在面试候选人时的思考。

面试都有固定的流程,通常是自我介绍,硬性技能考察,项目经历追问和Q&A环节。

之所以把硬性技能考察紧跟自我介绍后面,是因为不管简历包装的有多好,招来的小伙伴始终要能get hands dirty,如果一些必须的技能不ok,那就没啥给机会的必要了。我们团队这边比较关注的还是SQL和Python技能,所以但凡学生声称自己熟练掌握SQL和Python的,都会详细考察一下实际能力。所以两道题目,一道是SQL题,一道是Python题。

1. SQL题目

这道题目还挺舍不得分享出来的,不过我自己用下来是真的觉得堪称SQL试金石。不仅是校招生,就算是写了好多年SQL的人,也不一定真的能快速想出来答案,但被告知答案了又会觉得真的其实蛮简单的。因为题目都是我工作时候遇到觉得很有趣记录下来的case,所以可能是百度orGoogle也搜不出来的珍藏私货。

题目:有一张用户签到表【t_user_attendence】,标记每天用户是否签到(说明:该表包含所有用户所有工作日的出勤记录) ,包含三个字段:日期【fdate】,用户id【fuser_id】,用户当天是否签到【fis_sign_in:0否1是】;

问题1:请计算截至当前每个用户已经连续签到的天数(输出表仅包含当天签到的所有用户,计算其连续签到天数)

输出表【t_user_consecutive_days】:用户id【fuser_id】,用户联系签到天数【fconsecutive_days】

解答逻辑非常简单,只需要用max和datediff。实际答案就留在文末好了。

问题2:请计算每个用户历史以来最大的连续签到天数(输出表为用户签到表中所有出现过的用户,计算其历史最大连续签到天数)

输出表【t_user_max_days】:用户id【fuser_id】,用户最大连续签到天数【fmax_days】

这个乍看不太是SQL能解决的问题,但仔细想想就有思路。我的答案可能也不是最佳答案,但暂时还没问到过别的答案吧。

2. Python题目

题目:针对股票的最大回撤率指标定义,给出代码实现思路。给定的是产品所有交易日的净值序列,且其净值序列已按照日期排序。

最大回撤率:在选定周期内任一历史时点往后推,产品净值走到最低点时的收益率回撤幅度的最大值。

追问:如何在提升计算效率?

这道题类似的题目其实在leecode也有,这个大概是变化但类似版本(可以搜leecode股票最大回报);因为团队里处理比较多金融资产数据,这个指标是策略中最常见的指标之一,所以也是一道工作中攒下来的题目。这个指标的计算优化问题真的非常值得问,我后面会列几个版本的代码思路和实现代码。

通常最简单的计算实现,会需要O(n2)的计算复杂度;可以针对如何降低计算复杂度,专门追问。

漫谈

其实这俩题目,核心考察的都不是语言能力,因为语言永远都在更新,始终可以通过写得多来提升熟悉度;核心考察的其实都是逻辑和算法能力,就算忘记核心函数或者语法,回归到问题本身,有逻辑的candidate还是能给出思路和步骤,那当然如果语法和函数都非常熟悉,那就更完美了,可以马上写出来答案。

其他经验

很多硬性技能考察题,核心一样,题面可以一直换,比如:签到可以变成用户活跃,用户充值次数之类的,可以换成候选人项目经历里熟悉的context,有些候选人比较紧张,换点熟悉的场景,似乎就脑子转的快一点。如果候选人最简单的版本能快速给出思路,可以一层层追问,了解ta的思考过程,更全面考察逻辑能力。

3. 参考解答

感觉要是不给参考答案的话,分享题目还是有点耍流氓的意思,就还是给几个答案参考参考。

SQL题目:

问题1答案:

思路:先找用户最近一次未签到日期,再用今天减那个日期

create table t_user_consecutive_days as 
select fuser_id
,datediff('20200322',fdate_max) fconsecutive_days
from
    (select fuser_id
    ,max(fdate) fdate_max
    from t_user_attendence
    where fis_sign_in = 0
    group by fuser_id
    ) t1
;

问题2答案:把用户所有签到记录转化成一条0-1字符串序列,用0做split切割,计算切出来的1序列组中的最大长度

create table t_user_max_days as
select fuser_id
,max(length(cut_fsign_record)) as fmax_days
(select fuser_id
,fsign_record
,cut_fsign_record
from
    (select fuser_id
    ,wm_concat(fis_sign_in) fsign_record
    from t_user_attendence
    group by fuser_id
    ) t1
lateral view explode(split(fsign_record,'0')) t as cut_fsign_record
) t2
where cut_fsign_record<>''
group by fuser_id
;

Python题目:

最大回撤率:输入参数都是按照日期降序排列的净值序列

基础实现版本:

def max_drawdown(accnavArr):
mdd = 0
for i in range(0, len(accnavArr)):
for j in range(i + 1, len(accnavArr)):
drawdown = accnavArr[i] / accnavArr[j] - 1
if drawdown < mdd:
mdd = drawdown
return mdd

空间换时间实现版本:

把每个时间点计算的最大值都存到一个列表结构中,最大回撤的计算只需要再依赖这个列表进行多一次循环计算。

def maxDrawdownGainCal(accnavArr):      # 默认accnavArr按日期降序排列
maxDrawdown = 10000
maxGain =0
arr_len = len(accnavArr)
maxList = [0.0] * arr_len
minList = [0.0] * arr_len
maxList[arr_len-1] = accnavArr[arr_len-1]
minList[arr_len-1] = accnavArr[arr_len-1]
for i in range(arr_len-2,-1,-1):
if accnavArr[i] > maxList[i+1]:
maxList[i] = accnavArr[i]
else:
maxList[i] = maxList[i+1]
if accnavArr[i] < minList[i+1]:
minList[i] = accnavArr[i]
else:
minList[i] = minList[i+1]
for i in range(0,arr_len):
mdd = (accnavArr[i]/maxList[i]-1)
mg = (accnavArr[i]/minList[i]-1)
if mdd < maxDrawdown : maxDrawdown = mdd
if mg > maxGain : maxGain = mg
return maxDrawdown,maxGain

当前最优版本:

每个时间点同时更新最大值和最大回撤,两个指标,不需要额外空间,且只做一次列表循环计算。

def maxDrawdownGainCal(accnavArr):      # 默认accnavArr按日期降序排列
    maxDrawdown = 10000
    maxGain =0
    arrLen = len(accnavArr)
    startMdd = accnavArr[arrLen-1]
    startGain = accnavArr[arrLen-1]
    for i in range(arrLen-2,-1,-1):
        if accnavArr[i] > startMdd:
            startMdd = accnavArr[i]
        mdd = (accnavArr[i]/startMdd-1)
        if accnavArr[i] < startGain:
            startGain = accnavArr[i]
        mg = (accnavArr[i]/startGain-1)
        if mdd < maxDrawdown : maxDrawdown = mdd
        if mg > maxGain : maxGain = mg
    return maxDrawdown,maxGain
欢迎扫码关注:                      
TME2024校招笔试复盘:算法与数据岗考点全解析 校招笔试是进入大厂算法与数据岗位的关键门槛,其考察内容往往围绕机器学习、数据结构、SQL等核心技术展开。理解这些技术的底层原理,如梯度下降的优化逻辑、动态规划的状态转移、窗口函数的应用场景,是提升解题能力的基础。在技术价值层面,扎实掌握这些知识不仅能应对笔试中的编程题与案例分析题,更能为后续工程实践中的模型调优和数据处理提供支撑。从应用场景来看,无论是推荐系统的点击率分析,还是业务指标异常排查,都离不开对这些核心概念的灵活运用。本文以TME2024校园招聘笔试为样本,系统梳理了技术研究类与数据类岗位的考点差 阅读详情

相关推荐

Python数据分析常见面试题和答案01-10

Python数据分析常见面试题和答案01-10

qlxsxiaofeifei的博客 4005

我拿到了腾讯最爱考的数据分析面试题

作者:腾讯数据分析师 annatx今天给各位分享两道数据分析试题,这是腾讯数据分析面试官在面试时考察候选人喜欢出的题,属于硬性技能考察题目,特别好用。如...

苏克的博客 6789

【数据分析岗】关于数据分析岗面试python的金典问题+解答,包含数据读取、数据清洗、数据分析、机器学习等内容

大家好,我是摇光~最近整理了一些关于python的面试题和解答,希望对大家面试的时候有用。包含数据读取、数据清洗、数据分析、机器学习等面试题。

摇光是颗星 6419

用sql解决最近连续签到与最大连续签到

最近在做大厂的sql题目,碰到了连续签到天数的问题,结合LeetCode答主对连续问题的解答,对连续签到问题的解法进行了优化,让自己更容易理解。 题目是从公众号“ 数据管道”上来的,公众号也有解法,贴上原文链接(https://mp.weixin.qq.com/s/vTmOB0b6GG8moKJNhd_oWA)。 题目:有一张用户签到表【t_user_attendence】,标记每天用户是否签到(说明:该表包含所有用户所有工作日的出勤记录) ,包含三个字段:日期【fdate】,用户id【fuser.

Lotus1995的博客 4406

基于Codex平台构建AI技能:抖音爆款分析与带货视频生成实战

这次我们来看一个基于 Codex 平台构建 AI 技能(Skill)的实战项目。核心目标很直接:利用 AI 能力,自动化分析抖音平台的爆款内容,并生成可用于带货的视频。这听起来像是内容创作领域的“自动化流水线”,它解决的核心痛点是:人工分析爆款、撰写脚本、制作视频的效率瓶颈。 对于技术开发者和内容创作者而言,这个项目的价值在于将“内容策略分析”和“视频内容生成”两个环节通过 Codex 的 Skill 机制串联起来,形成一个可定制、可批量执行的自动化工作流。我们最关心的几个问题包括:这个方案的技术门槛高不高

weixin_29054399的博客 487

华为OD机试_2025 B卷_模拟消息队列(Python,100分)(附详细解题思路)

时间排序:确保事件处理顺序正确消费者管理:集合操作高效维护状态优先级实现:利用消费者ID自然排序边界处理:正确处理空消费者情况。

测试工程师的成长之路 1121

2024Python最新大厂面试真题,终于来了!!Pyston v2,字节跳动面试必问

Pyston 和 PyPy的一个巨大区别就是它们的向后兼容性,由于Pyston是CPython的分支,因此我们认为它是当今可用的最兼容的替代Python实现之一。书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

2401_84122826的博客 540

SRAM vs RRAM:存算一体芯片选型指南(含最新技术对比)

本文深入对比了SRAM与RRAM在存算一体芯片设计中的核心差异,为硬件工程师和架构师提供实战选型指南。文章从技术本质、性能、功耗、成本及设计风险等多维度剖析,指出SRAM基于成熟CMOS工艺,适合高精度、低延迟场景;而RRAM凭借非易失性和高密度潜力,在超低功耗、固定模型应用中优势明显。决策需综合项目预算、上市时间及技术储备。

e4f5g6h的博客 942

SQL计算用户连续签到问题

有一张用户签到表【t_user_attendence】,标记每天用户是否签到(说明:该表包含所有用户所有工作日的出勤记录) ,包含三个字段: 日期【fdate】 用户id【fuser_id】 用户当天是否签到【fis_sign_in:0否1是】 fdate fuser_id fis_sign_in 2021/6/1 1 1 2021/6/1 2 0 2021/6/1 3 0 2021/6/2 1 1 2021/6/2 2 1 2021/6/2 3 0 2021/6/3 1 1 2021/6/3 2 0 20

roar_633的博客 5351

CSI Tools 工具的安装 Intel 5300 + Ubuntu14.04

在 ubuntu14 系统上面安装 CSI Tools,2020最新教程,亲测可用,只要保证和我做法一致绝对可以安装好。

WS的小屋 1万+

STM32N6低功耗模式详解:从Sleep到VBAT的工程实践

低功耗模式是嵌入式系统能效设计的核心机制,其本质是通过动态调控CPU时钟、外设供电与电压域状态,在唤醒延迟、功能保留与静态电流之间实现最优平衡。基于Arm Cortex-M55内核的STM32N6采用多电压域架构(核心域/保持域/备份域/模拟域),支持Sleep、Stop、Standby及VBAT四级功耗分级,并深度融合DVFS(动态电压频率缩放)与外设时钟门控等关键技术。该设计不仅显著降低待机电流至亚微安级,更保障RTC持续计时、TCM内容可选保留、WKUP快速唤醒等关键能力,广泛应用于电池供电的AIoT

weixin_36369848的博客 245

【数据分析与挖掘(二)】面试题汇总(附答案)

在求职的道路上,当你过了笔试的第一道坎,紧接着尤为重要的就是面试,它将直面公司技术主管与HR。现整理python数据分析与挖掘相关面试题如下(代码已亲试),供自己与有需要的同仁共同学习提高。 活到老,学到老!终身学习! 面试题 python数据分析 1 列举几个常用的python分析数据包及其作用 数据处理和分析:NumPy, SciPy, Pandas 机器学习:SciKit 可视化: M...

qq_35778860的博客 7891

matlab 质心重合法实现点云配准【2026最新版】

质心重合法是将源点云和目标点云的质心重合,以此缩小两点云集之间的平移误差,从而为下一步粗配准提供更好的初始位置姿态。

点云侠的博客 510

Python——腾讯在线编程题(2018)

题目描述: 给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。输入值小于1000。 如,输入为10, 程序应该输出结果为2。(共有两对质数的和为10,分别为(5,5),(3,7)) [2,3,5,7] 输入描述:输入包括一个整数n,(3 ≤ n < 1000) 输出描述:输出对数 示例1 : 输入: 10 输出: 2 代码块: num = int(inpu...

weixin_42566251的博客 412

Mac安装Typescript报错

根本原因是系统级目录的权限限制。推荐通过修改目录权限或使用nvm彻底解决问题。

江拥羡橙的博客 210

点云从入门到精通技术详解100篇-基于 CBCT 与口内扫描数据的牙齿点云配准

口扫生成的三维牙模型只包含牙冠结构,容易受到唾液、食物残留等杂质的干扰。像精度,但其扫描成本较高,在公立医院的普及率较低。此外,口扫探入式的体。完整、精确的牙齿信息,有助于医生更好地进行数字化辅助诊疗,提高手术的预。可以表示上颌骨、下颌骨、牙冠以及牙根的位置和形状,但其扫描分辨率较低,精配准前实现粗略的预配准来确定点云间的初始位置,为精配准提供良好的配准。该算法通过计算点对间的距离确定源点云中的某一点在目标点云中的对应。算两点之间的欧氏距离,运算量较大,而且由于算法只考虑点集间的距离而忽略。

getusushu的博客 1642

16道Python经典面试题及答案

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取哈)

m0_59235245的博客 2万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

python编程实例100篇-315道Python面试题,欢迎挑战

From:数据分析1480第一部分 Python基础篇(80题)1、为什么学习Python?2、通过什么途径学习的Python?3、Python和Java、PHP、C、C#、C++等其他语言的对比?4、简述解释型和编译型编程语言?5、Python解释器种类以及特点?6、位和字节的关系?7、b、B、KB、MB、GB 的关系?8、请至少列举5个 PEP8 规范(越多越好)。9、通过代码实现如下转换:二...

weixin_37988176的博客 963

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

python数据分析-面试题

# 设逾期表为df,格式为pandas.DataFrame,详细数据如下所示,其中order_no为非 # 重复订单号,overdue_days为逾期天数,info_tabel为逾期标签,其中1表示逾期, # 0表示未逾期

呵呵哒!的博客 4165

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

纯干货!39 道 Python 数据分析面试题

你好,我是坚持分享干货的 EarlGrey,翻译出版过《Python编程无师自通》、《Python并行计算手册》等技术书籍。如果我的分享对你有帮助,请关注我,一起向上进击。创作不易,希望大家给一点鼓励,把公众号设置为“星标”,给文章点个“赞”和“在看”,谢谢大家啦~在这个充满挑战和机遇的时代,掌握Python数据分析技能无疑是将是你的一个有利加分项。无论你是刚刚踏入职场的新手,还是已经在数据领域深...

codingpy的博客 7667

【Python面经】数据分析岗_面试题整理总结(持续更新中…)

聚类分析是一种无监督的学习方法,根据一定条件将相对同质的样本归到一个类总。聚类方法主要有:a. 层次聚类b. 划分聚类:kmeansc. 密度聚类d. 网格聚类e. 模型聚类:高斯混合模型k-means比较好介绍,选k个点开始作为聚类中心,然后剩下的点根据距离划分到类中;找到新的类中心;重新分配点;迭代直到达到收敛条件或者迭代次数。优点是快;缺点是要先指定k,同时对异常值很敏感。

m0_59236602的博客 2997

数据分析师必会!20个高频Python面试题(Numpy&Pandas篇)

摘要:掌握Numpy和Pandas是数据分析师的核心竞争力!本文精选20道企业高频面试题,覆盖数组操作、数据清洗、性能优化等核心场景,提供代码解析+避坑指南,助力面试冲刺!

weixin_44228413的博客 4438

腾讯2017秋招笔试编程题:geohash [python]

''' [编程题] geohash编码 时间限制:1秒 空间限制:32768K geohash编码:geohash常用于将二维的经纬度转换为字符串,分为两步:第一步是经纬度的二进制编码,第二步是base32转码。 此题考察纬度的二进制编码:算法对纬度[-90, 90]通过二分法进行无限逼近(取决于所需精度,本题精度为6)。 注意,本题进行二分法逼近过程中只采用向下取整来进行二分,针对二

ChrisMinions小站 990
上一篇: 带答案面经分享-面试中最常考的树模型!
下一篇: 降噪效果给力的AirPods Pro真香,包邮送一个
机器学习算法那些事
博客等级 码龄9年 1633粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值