面试进门

填写东西

写试题

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就可以了

解答:

  1. CREATE TABLE t_user_consecutive_days AS SELECT
  2. fuser_id,
  3. datediff( '20200322', fdate_max ) fconsecutive_days
  4. FROM
  5. ( 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

面聊

项目、项目里面问题

方差和偏差的概念

参数模型和非参数模型的区别和优缺点

模型和判别模型地概念

解决样本类别不均衡的问题

第一类和第二类错误

你是如何处理缺少数据的?你推荐使用什么样的处理技术?

人事聊

薪资、公司看法等