二 欧洲艾盛集团ISV公司
2.结构化思维考题:
三、闪****车新能源科技公司
2. 一个箱子中有10个不同颜色的球,在里面随机取2~9个球,取出的球可能的组合有______种(填数字)
3.一个人做一件事出错的概率是0.3,如果做两件事,他都做对的概率为_______
3. 抛一个硬币出现正面的概率为0.3,出现反面的概率为0.5,还有0.2的概率会立起来,抛2个硬币,出现一正一反的概率为______
4. 如果在A发生的情况下B发生的概率为0.6,B发生的情况下C发生的概率为0.8,B不发生的情况下C发生的概率为0.7,则在A发生的情况下B、C至少有一个发生的概率为______
5. 在新冠肺炎疫情防控期间,某超市开通网上销售业务,每天能完成2300份订单配货,由于订单量大幅增加,导致订单积压,为解决困难,许多志愿者踊跃报名参加配货工作。已知该超市某日积压850份订单未配货,预计第二天的新订单超过3700份的概率为0.05,志愿者每人每天能完成50份订单的配货,为使第二天完成积压订单及当日订单的配货的概率不小于0.95,则至少需要志愿者______名 (很经典)
四、雷*科技公司 (算法)
一面
linux基本命令,是否会用git相关命令
K-Means算法的缺点,对异常值是否敏感
随机森林哪个模型支持回归?
一般常用二分类评价指标有哪些?
对于缺失值、异常值、空值怎么处理的?
项目整体流程如何落地的?
可视化库一般常用的是哪个?
numpy库一般用来做什么?
二面 技术面
Python底层清理机制
协程、进程、线程的区别 GIL锁
运算符重载
Python新版本特征
统计异常值数值
Python去重
迭代器、生成器的区别 分别编写一个迭代器和一个生成器
Python数据类型及其特点
Python如何优化代码,提升时间和空间复杂度
装饰器的特点,编写一个
时间序列模型
深拷贝和浅拷贝的区别和联系
其他公司
指标下跌如何归因?
(1) 确认数据是否准确及异常,判断这个下降是否合理(数据质量)
(2) 维度拆分
(3) 做出假设
(4) 细分假设,确立原因
A/B型指标下跌怎么归?除了拆维度还用过什么方法?为什么选择现在的方法
(1)A/B型顾名思义就是比重,在应用的时候有两种情况,一种是直接求比重,或者倍数,另外一种就是求整体或者部分的数值
比如说,2010年,某省地区生产总值达到A亿元,其中,第一产业增加值达到B亿元,那么第一产业增加值占该省地区生产总值的比重就是B/A;
如果说,2010年,某省地区生产总值达到A亿元,其中第一产业增加值所占比重为a,那么第一产业增加值为Aa亿元;
再比如说,2010年,某省第一产业增加值达到B亿元,占地区生产总值的比重为a,则该省地区生产总值为B/a亿元。所以先确定A/B型的计算方式,在进行拆分
其他方法:有业务经验直接分析。拆维度是比较标准的,对于熟练的分析师来说可根据实际经验来进行原因分析。
项目经历(特征值如何处理?为什么用这个方法等?
特征值:对于缺失值:删除 数值型类型:均值 中值 插值填充 对于类别 可用众数或者单独作为一个类别
对于异常值: 检验用箱线图 3c原则 和 describe函数查看 处理:对数处理 边界值插入 分箱离散化
主要围绕项目经历展开:目的?方法?怎么落地的?是独立完成的吗?
好的指标体系是怎样的
一个好的指标体系能表现出公司或产品的表现现状,及时反映出问题,同时能提前预测或规避将要发生的问题。
如何确保指标体系是有序的?如何划分指标体系的层级?
在我们搭建数据指标体系时一定要按照某种关系来搭建指标,后续将我们能更加有效率的分析,例如在设计指标的体系的时候可以自上而下有业务域->需求域->实现域 以此来进行指标设计,或者自下而上由系统的功能模块逆推功能指标 功能域->需求域->实现域。再者可以根据场景拆分成多个子指标的和(DAU=日新增用户+留存用户+回流用户),或者按照一定的关系(逻辑关系和时间关系)。
用什么衡量用户xx行为的深度?
例举互联网产品来说,1.网龄(日均上网时间) 2.使用过的服务和产品数(广度) 3.对经常使用的服务和产品的了解(深度) 4.是否对某些产品或服务提供过建议5.对新鲜上线的服务和产品的敏感度 6.常用社交网络服务个数及活跃度,好友度 被关注数
如何进行异动分析?
确定数据源是否正确,是机器发生故障还是就是数据本身出现了问题
确定数据异动的类型,偶发性 周期性 和趋势性 (一般偶发和周期不考虑 只考虑趋势性)
维度拆解 业务维度和技术维度 业务维度有产品(产品线 产品类别 价格 功能 )和用户维度(用户属性 画像 地区 支付渠道),技术维度: PV,UV等功能模块是否出现异常,支付界面是否无法进行支付等
指标拆解 如果发现维度都在跌 可进行指标拆解
归因分析 确定了维度和指标后,进行归因分析.归因分析可分为内部(产品 运营 其他 )和外部(PEST 政治 经济 社会 技术)
A*B = C类型的指标,如果C下降了,如何归因?
先知道数据量,检验数据是否正确,其次确定下降的类型是否为偶发性?
如果是周期性,分别找出 C的维度进行拆分(A和B),将将确定的维度和指标确定下来,按照内外部归因,分别找出原因.
讲一个项目,涉及聚类:
• 用的什么聚类方法?为什么用这个?
• 用了什么特征?如何做的特征处理?
• 如何确定要聚成这几类?
• 数据量的大小?
还有什么涉及模型的项目?XGB相关的
• XGB都有什么参数?
• 为什么用这个模型?和其它决策树相比有什么差异?
SQL的执行顺序?
FROM JOIN ON WHERE GROUP BY SUM AVG HAVING SELECT DISTINCT ORDER BY LIMIT
pandas用什么包?缺失值怎么处理?
对于缺失值可以划分为两个维度重要性和缺失率,那么将产生四个区域,分别根据这四个区域做出不同策略,
重要性高,缺失率高:其他渠道补全;其他字段计算,删除
重要性高,缺失率低:计算填充;根据业务经验填充
重要性低,缺失率高:删除
重要性低,缺失率低:不做处理或者简单处理
1.以下机器学习中,在数据预处理时,不需要考虑归一化处理的是:树型模型
2.数值特征归一化方法有:线性函数归一化和零均值归一化
3.需要通过梯度下降法求解的模型需要数值特征归一化:如线性回归、逻辑回归、支持向量机、神经网络模型。
(原因:随机梯度下降时,特征值相差大,会导致更新速度慢,需要兼顾特征值小的特征)
4.不需要特征归一化:决策树模型,决策树模型分裂根据信息增益,信息增益与特征归一化无关。
其他相关题目
1.字符匹配:
列名 [NOT ] LIKE
匹配串中可包含如下四种通配符:
_:匹配任意一个字符;
%:匹配0个或多个字符;
[ ]:匹配[ ]中的任意一个字符(若要比较的字符是连续的,则可以用连字符“-”表 达 );
[^ ]:不匹配[ ]中的任意一个字符
SUBSTRING_INDEX(str, delimiter, number) 截取字符串
SUBSTR(str, start, length) 长度必须一致
SUBSTRING(str, start, length) 长度必须一致
一 次日留存率
-- 方法一
-- 1.先查询第一天登录的用户数:
-- 2.在查询第二题继续登录的用户
-- 3.最后汇总求 留存率
select round(count(distinct user_id)/
(select count( distinct user_id) from login),3)
from login
where (user_id date) in
(select user_id,date_add(min(date),interval 1 day)
from login
group by user_id)
-- 方法二 窗口函数
-- 1. 先利用窗口函数计算每一行用户对应首次登录时间 设为a表
-- 2. 查找a表中登入时间和首次登入时间之差为1的数据,统计id出现的次数
-- 3. 算出第二日留存率:
select
round(count(distinct a.user_id)
/(select count(distinct user_id ) from login),3)
from
(select *,min(date) over(partition by user_id) as firstday
from login)a
where datediff(date,firstday)=1
---------------------------------------------------------------------
二 事物的四大特性 ACID
1.原子性(Atomicity) 事务包含的操作要么全部成功,要么全部失败回滚
2.一致性(Consistency) 事务必须使数据库从一个一致性状态变换到另一个一致性状态,
也就是说一个事务执行之前和执行之后都必须处于一致性状态
3.隔离性(Isolation) 多个用户并发访问数据库时,多个并发事务之间,应当相互隔离.
4.持久性(Durability) 事务的操作,一旦提交,对于数据库中数据的改变是永久的
三 数据库的三大范式
第一范式(1NF):确保数据库表的中所有的字段值都是不可分解的原子值
第二范式(2NF): 首先满足第一范式,另外,就是,一是表必须有一个主键,
二是非主键列必须完全依赖主键,而不能只依赖主键的一部分.
第三范式(3NF): 首先要满足第二范式,另外非主键列必须直接依赖主键,不能存在传递依赖,
即非主键列A依赖非主键列B,
非主键列B依赖主键的情况.
四 SQL 执行顺序和书写顺序
1.执行顺序
FROM
JOIN ON
WHERE
GROUP BY
AVG SUM
HAVING
SELECT
DISTINCT
ORDER BY
LIMIT
2.书写顺序
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
LIMIT
五 SQL的排序窗口函数
row_number() 按顺序来,无重复 1,2,3
rank() 占位 1,1,3 其中的2已被rank函数占用
dense_rank() 不占位 1,1,2 有重复可并列排序,序号继续使用
六 视图和游标
1.视图是一个或多个基本表或视图导出的表,是一个虚表,数据库中只存放视图的定义,
不存放视图对应的数据,对视图的操作最终都转化为基本表的操作。
2.游标是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果,
每个游标区都有一个名字。用户可以通过游标逐一获取记录并赋给主变量,
交由主语言进一步处理。
七 标识列 主键 索引
标识列:identity(int,1,1)。标识列可做为主键,只能为整型,针对一列而言。
主键:数值类型不限,只要不重复就行。可由多列组合而成,主键是关联中的主体,
是区别行数据的标识。
索引:为了提高查询效率,我们会对列建立索引,相当于建立一个列的排序。
(副作用:对系统造成极大的开销负担,不能滥用)。
主键:不能重复 非空 唯一
标识列:非空自增长 不可自行修改 主键和标识列相同点:非空 唯一
八 floor ceiling round sign trunc函数
1.floor() 向下取整,函数产生小于或等于指定值的最小整数
floor(3.145) ----> 3
2. ceil()或ceiling() 向上取整,产生大于或等于指定值的最小整数.
ceil(2.34)----> 3
ceiling(-3.13)-----> -3
3.round(value,precision) 根据指定精度输入数值
4.trunc(value,precision) 按精度截取某个数字,不进行舍入操作
5.sign() 与绝对值函数ABS()相反,ABS()给出的是值的量而不是其符号,sign()则给出
值的符号而不是量.
九 case when 函数 两种方式都支持else
1. 简单case函数 若比较的条件相同可放在case后面,只进行比较以确定结果,不进行计算.
case input_expression
when when_expression then result
else else_result_expression
end
2. case搜索函数 条件不同,则放在when后面,计算一组布尔表达式以确定结果.
case
when boolenan_expression then result
else else_result_expression
end
十 right()和left()函数
right('ABCDEF',2)------>EF
left('ABCDEF',2)------->AB
类似于sql中的substr()函数 substr(字符串,start,length)
十一 datediff()函数和timestampdiff()函数
datediff(startdate,end_date)函数返回两个日期之间的天数
timestampdiff(单位,start_date,end_date)
单位:day hour minute second 天 小时 分钟 秒
-----------------------------------------------------------------------
Hive SQL 相关知识
一 Hadoop 是一套开源软件平台 其功能:利用服务器集群对海量数据进行分布式处理.
二 Hadoop的核心组件:
1.HDFS:块级别的分布式文件存储系统
2.MapReduce:分布式计算框架 (分而治之的思想) 两个阶段 Map阶段:切分任务,
Reduce阶段:汇总任务
3.YARN:作业调度和资源管理器
4.Hadoop基础功能库
三 Hive 基于Hadoop的开源的数据仓库工具,用于处理海量的结构化数据.
Hive把HDFS中的结构化的数据文件映射成数据表,通过HiveSQL进行解析和转换,最终
生成一系列在Hadoop上运行的mapreduce任务,通过执行这些任务完成数据分析与处理.
四 HiveSQL 常用函数
1. show functions 查看hive中函数
2. desc function 函数名 查看函数的具体用法
3. from_unixtime(bigint unixtime,string format) 将时间戳转换为日期函数
五 HiveSQL核心技能--窗口函数
1. 累计计算窗口函数:
sum() over()
avg() over()
2.分区排序窗口函数:
row_number() over(partition by order by asc) 1,2,3 asc默认是升序,desc是降序
rank() over(partition by order by asc) 1,1,3
dense_rank() over(partition by order by asc) 1,1,2
3.切片排序窗口函数:
ntile(n) over(partition by order by)
4.偏移分析窗口函数
lag(字段名,offset,defval) over(partition by order by) 取前n行数据
lead(字段名,offset,defval) over(partition by order by ) 后n行数据
注意 没有默认值时,默认返回为NULL
六 HiveSQL表连接
1.inner join (inner可以省略不写) 表连接时必须必须进行重命名,先去重在进行表连接
2.left join 和 right join 效果几乎差不多,已某一个表为基础,进行左边拼接或者右边
拼接,没有对应的则显示NULL
3. full join 是将 left join 和 right join 的一种组合 不管哪一个表只要有的就都显示
3.union 和 union all
注意:字段名称必须一致,字段顺序必须一致,没有连接条件!没有连接条件!
区别:union all 不去重不排序 快
union 去重且排序 慢
七 HiveSQL 常用优化技巧
1.技巧一 列裁剪和分区裁剪 只读需要的列和分区
配置项:hive.optimize.cp 和 hive.optimize.pruner 默认为true
2.技巧二 排序技巧 sort by 代替 order by
order by 会按照某个字段进行全局排序,会统一放到一个reduce中,使用sort by 会启动多个
reduce 为控制map段分配到reduce中的key,使用distribute by
distribute by a sort by a
3.技巧三 去重技巧 使用group by 代替distinct 在极大的数据量时,使用group by可提高效率
4.技巧四 聚合技巧 grouping sets/cube/rollup
(1).grouping sets 指定分组的维度
查看性别城市等级分布 (多个分布需要些多次sql语句)
select sex,city,level,count(distinct user_id)
from user_info
group by sex,city,level
grouping sets(sex,city,level); grouping sets 指定分组的维度
(2).cube 根据group by 维度的所有组合进行聚合
性别城市等级的各种组合的用户分布
select sex,city,level,count(distinct user_id)
from user_info
group by sex,city,level
with cube;
(3). rollup 以最左侧的维度为主,进行层级聚合,是cube的子集
计算每个月的支付金额和每年的支付总金额
select year(dt) as `year`,month(dt) as `month`,sum(pay_amount)
from user_trade
where dt >'0'
group by year(dt),month(dt)
with rollup;
5. 技巧五 换个思路解题 条条大路通罗马
6. 技巧六 union all 时可以开启并发执行,hive中互相没有依赖关系的job间是可以并发执行额
参数设置: set hive.exec.parallel=true;
7. 技巧七 表连接优化
(1).小表在前,大表在后
(2).使用相同的连接键
(3).尽早的过滤数据 减少每个阶段的数据量,分区表要加分区,只选择需要使用的字段
8. 技巧八 遵循严格模式
严格模式:强制不允许用户执行3中有风险的HiveSQL语句,一但执行就会报错
(1).查询分区表时不限定分区列的语句
(2).两表join产生了笛卡尔积的语句
(3).要order by 来排序但没有指定limit的语句
开启严格模式 将参数 hive.mapred.mode = strict
建议:技术面一定要多做题,多去牛客刷刷大厂的题,才会有机会过。