面试进门
填写东西
写试题
SQL
题目
有一张用户签到表【t_user_attendence】,标记每天用户是否签到(说明:该表包含所有用户所有工作日的出勤记录) ,包含三个字段:
日期【fdate】
用户id【fuser_id】
用户当天是否签到【fis_sign_in:0否1是】
问题1: 请计算截至当前每个用户已经连续签到的天数(输出表仅包含当天签到的所有用户,计算其连续签到天数)
输出表【t_user_consecutive_days】:
用户id【fuser_id】
用户连续签到天数【fconsecutive_days】
问题2: 请计算每个用户历史以来最大的连续签到天数(输出表为用户签到表中所有出现过的用户,计算其历史最大连续签到天数)
输出表【t_user_max_days】:
用户id【fuser_id】
用户最大连续签到天数【fmax_days】
Python题目
针对股票的最大回撤率指标定义,给出代码实现思路。给定的是产品所有交易日的净值序列,且其净值序列已按照日期排序。
最大回撤率: 在选定周期内任一历史时点往后推,产品净值走到最低点时的收益率回撤幅度的最大值。 如何在提升计算效率?
解答
sql 第一题
逻辑:只需要用max和datediff就可以了
解答:
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
sql:第二题
思路:把用户所有签到记录转化成一条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
面聊
项目、项目里面问题
方差和偏差的概念
参数模型和非参数模型的区别和优缺点
模型和判别模型地概念
解决样本类别不均衡的问题
第一类和第二类错误
你是如何处理缺少数据的?你推荐使用什么样的处理技术?
人事聊
薪资、公司看法等