原标题:面试题 | 腾讯数据分析面试题分享

annatx | 作者

高级农民工 | 来源

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

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

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

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

之所以把硬性技能考察紧跟自我介绍后面,是因为不管简历包装的有多好, 招来的小伙伴始终要能get hands dirty,如果一些必须的技能不ok,那就没啥给机会的必要了。

我们团队这边比较关注的还是 SQL和Python技能,所以但凡学生声称自己熟练掌握SQL和Python的,都会详细考察一下实际能力。所以两道题目,一道是SQL题,一道是Python题。

1

SQL题目

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

1.题目

有一张用户签到表【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题目

1.题目

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

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

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

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

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

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

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

3

参考解答

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

1.SQL题目答案

问题1答案:

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

createtablet_user_consecutive_days as

selectfuser_id

, datediff( '20200322',fdate_max) fconsecutive_days

from

( selectfuser_id

, max(fdate) fdate_max

fromt_user_attendence

wherefis_sign_in = 0

groupbyfuser_id

) t1

;

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

createtablet_user_max_days as

selectfuser_id

, max( length(cut_fsign_record)) asfmax_days

( selectfuser_id

,fsign_record

,cut_fsign_record

from

( selectfuser_id

,wm_concat(fis_sign_in) fsign_record

fromt_user_attendence

groupbyfuser_id

) t1

lateral viewexplode( split(fsign_record, '0')) t ascut_fsign_record

) t2

wherecut_fsign_record<> ''

groupbyfuser_id

;

2.Python题目

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

基础实现版本:

defmax_drawdown(accnavArr):

mdd = 0

fori inrange( 0, len(accnavArr)):

forj inrange(i + 1, len(accnavArr)):

drawdown = accnavArr[i] / accnavArr[j] - 1

ifdrawdown < mdd:

mdd = drawdown

returnmdd

空间换时间实现版本:

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

defmaxDrawdownGainCal(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]

fori inrange(arr_len -2, -1, -1):

ifaccnavArr[i] > maxList[i+ 1]:

maxList[i] = accnavArr[i]

else:

maxList[i] = maxList[i+ 1]

ifaccnavArr[i] < minList[i+ 1]:

minList[i] = accnavArr[i]

else:

minList[i] = minList[i+ 1]

fori inrange( 0,arr_len):

mdd = (accnavArr[i]/maxList[i] -1)

mg = (accnavArr[i]/minList[i] -1)

ifmdd < maxDrawdown : maxDrawdown = mdd

ifmg > maxGain : maxGain = mg

returnmaxDrawdown,maxGain

当前最优版本:

defmaxDrawdownGainCal(accnavArr):# 默认accnavArr按日期降序排列

maxDrawdown = 10000

maxGain = 0

arrLen = len(accnavArr)

startMdd = accnavArr[arrLen -1]

startGain = accnavArr[arrLen -1]

fori inrange(arrLen -2, -1, -1):

ifaccnavArr[i] > startMdd:

startMdd = accnavArr[i]

mdd = (accnavArr[i]/startMdd -1)

ifaccnavArr[i] < startGain:

startGain = accnavArr[i]

mg = (accnavArr[i]/startGain -1)

ifmdd < maxDrawdown : maxDrawdown = mdd

ifmg > maxGain : maxGain = mg

returnmaxDrawdown,maxGain

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

责任编辑:

腾讯python面试题_面试题 | 腾讯数据分析面试题分享相关推荐

  1. 腾讯视频下载格式_怎么下载腾讯视频

    不管这个腾讯视频好用与否,都有一大批用户,本文播放器家园网小编分享腾讯视频下载格式_怎么下载腾讯视频.腾讯视频时刻为您推荐最新最火的视频,精彩不断随时观看.支持各种画质的下载,没网也能享受高视觉的享受 ...

  2. 腾讯视频视频下载_如何下载腾讯视频

    今天继续给大家分享腾讯视频方面的内容.一般来说vip会员可以提前点播热播剧,对于追剧党来说是非常好的,不过是否开通也要根据自己需求,毕竟价格也不低啊,而且还是有一些用户能够通过一些简单但不值得提倡的方 ...

  3. php 腾讯云 文字识别_有奖征文 | 腾讯云加社区联合腾讯优图发起玩转腾讯云产品体验活动...

    导语 | 为活跃腾讯云+社区[1]的技术氛围,同时鼓励广大程序员们更好的学习和分享腾讯云技术,云+社区联合腾讯云免费体验馆及各产品团队举办[玩转腾讯云]征文活动.只要是与「腾讯云」产品相关的原创干货技 ...

  4. python招聘笔试题_滴滴2020年春招笔试题分析(Python)

    数据背景来自:优梨:滴滴2020年春招Sql笔试题分析​zhuanlan.zhihu.com 这里就不再重复了,主要描述如何使用python数据清洗 问题: 1.订单的平均应答率是多少?完单率是多少? ...

  5. python正则表达式面试_【剑指offer】面试题19. 正则表达式匹配

    面试题19. 正则表达式匹配 请实现一个函数用来匹配包含'. '和''的正则表达式.模式中的字符'.'表示任意一个字符,而''表示它前面的字符可以出现任意次(含0次).在本题中,匹配是指字符串的所有字 ...

  6. 乐飞天下python笔试题_滴滴2020年春招笔试题分析(Python)

    数据背景来自:优梨:滴滴2020年春招Sql笔试题分析​zhuanlan.zhihu.com 这里就不再重复了,主要描述如何使用python数据清洗 问题: 1.订单的平均应答率是多少?完单率是多少? ...

  7. 中软国际python机试题_中软国际入职机试题.doc

    中软国际入职机试题 1 邮箱地址合法性验证,合法输出字符"1",不合法输出字符"0" 合法条件: A 仅包含一个"@". B 最后三位必须是 ...

  8. 久谦咨询python笔试题目_【久谦咨询面试|面试题】-看准网

    领导超棒 到了终面,算是见过传说中的大牛了,知道面试官身份之后是有些小紧张的.但老板完全没有领导架子,非常随和,态度也超级好,关键是笑起来超级超级好看啊!网上良莠不齐的评价不攻自破,也对公司非常有信心 ...

  9. 中软国际python机试题_【中软国际员工笔试试题及答案】 - 面试网

    中软国际员工笔试试题及答案: 一.选择题 1.IP地址126.168.0.1属于哪一类IP地址( ) A.D类 B.C类型 C.B类 D.A类 2.以下哪一个设置不是上互联网所必须的( ) A.IP地 ...

  10. 中软国际python机试题_中软国际入职机试题[优质资料]

    资料 - 参考 1 1 邮箱地址合法性验证,合法输出字符" 1 ",不合法输出字符" 0 " 合法条件: A 仅包含一个" @ ". B 最 ...

最新文章

  1. 眼见为实?其实是“脑补”!华人数学家解开视觉奥秘:一切都是大脑假装让人看见...
  2. 一个Linux下C线程池的实现
  3. python ord()与chr()用法以及区别
  4. 《OpenSSL3.0学习之一 加密库简介|CSDN创作打卡》
  5. 城联数据TSM技术方案起底
  6. java 方法的拆分_java – 字符串拆分和比较 – 最快的方法
  7. c语言topk函数并获取下标,C语言函数语法大全(一)
  8. 后台管理系统好用的UI框架
  9. 固定旋转_扶手也要用大理石!石材旋转楼梯扶手的设计与安装
  10. Node-webpack基本使用和详细案例
  11. 【python简洁之道】-----1. 注释规则
  12. 微信小程序学习资料[转]
  13. vue框架对接手机app
  14. php 豆瓣抓取,PHP抓取豆瓣读书爬虫代码
  15. 定义类Parents,Father, Mother, 其中Parents为父类,Father, Mother为子类, 测试其特性。
  16. 12行代码拿下所有lol皮肤!!Python超简单爬虫【内附详细教学 】
  17. FREERTOS打印错误prvTaskExitError,找原因是如下:
  18. elementUI中el-upload上传文件时附带额外参数传递
  19. 一行命令 Ping 网段所有 IP
  20. FutureTask源码解析二

热门文章

  1. 大屏监控系统实战(15)-打包上线及总结
  2. GCC:使用图对比编码的图神经网络预训练模型 KDD2020
  3. 异质图神经网络及其在电商领域中的应用
  4. 在Linux中快速找到文件的几种方法
  5. Spark+Python+Pycharm在Windows下的配置
  6. 《精通自动化测试框架设计》—第2章 2.6节使用数据库
  7. 3月8日云栖精选夜读:《云栖精选阿里巴巴技术实战2016年刊》重磅发布
  8. puppet3.5源码包安装和配置
  9. yum安装php f,yum安装LNMP
  10. Java 8 为什么要使用Lambda表达式