暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【数据分析岗】大厂笔试真题系列(一)

数据攻略 2022-03-31
887

点击上方蓝色【数据攻略】关注+星标~

第一时间获取最新内容


哈喽大家好,我是六哥。
最近春招各厂的笔试已陆续开始了
前几篇已对笔面试各种题型做了系统梳理
但俗话说:百看不如一练 

于是本篇,换个玩法

我为大家挑选了一套相对完整的
——『携程』笔试真题

我希望你,掐好时间,模拟自测
作为一个模拟上战场” 的机会
看看自己备战笔试的效果如何
也作为一个查漏补缺的手段
看看自己的知识体系哪个模块是短版

对了,以前总是我写题目 + 答案解析
本次,为了真正检验你的吸收效果
我仅附上了简单答案 可作为分数计算

相关的思路/答案解析 是你们的主场

我很期待你的答案解析与我分享、交流
(另,若需携程内推可后台联系我


------正文手动分割线------

本文结构速览:

一、选择题

    ① 概率论&机器学习

    ② 大数据技术

    ③ SQL技能

    ④ 逻辑推理

二、编程题

(ps.题目来源于网络,如有缺失欢迎补充。)



 选择题 



 ① 概率论&机器学习  


1,携程的用户,40%PC端登陆,60%来自APP端登陆,PC端登陆的用户被A实验抽取的概率为1%,APP端被A实验抽取的概率为2%,现在一个进入A实验的人,来自PC端的概率为( )
【A】25%
【B】35%
【C】20%
【D】30%

答案:A

2,甲乙两人抛一枚分布均匀的骰子,规定先抛出大于4的人可以获得一张五星级酒店的免费入住券。假设由A先抛,那么A获得该券的概率是多少( )
【A】1/2
【B】2/3
【C】3/5
【D】3/4

答案:C

3, 一家飞机零件制造商经营A、B和C三家工厂。A、B、C三厂的日产量占比分别为2:3:5,产出次品的概率分别为2%、3%、1%。在今日生产的零件中发现了一件次品,次品来自A厂的概率是多少( )
【A】3/8
【B】2/7
【C】1/3
【D】2/9

答案:D

4, 关于随机森林和GBDT的说法正确的是( )

【A】随机森林可以是分类树也可以是回归树,GBDT的树只由回归树组成

【B】都是boosting方法

【C】随机森林的扰动属于属性扰动,不属于样本扰动

【D】随机森林对异常值敏感,GBDT对异常值不敏感

答案:A

5,如下图所示二叉树,其中序遍历结果是()




【A】 ABDECF

【B】ABCDEF

【C】DBEAFC 

【D】DEBFCA

答案:C
6, 【多选题】以下关于卡方检验说法正确的是( )

【A】四格表的卡方检验计算时,卡方值=(ad-bc)2n/(a+b)(c+d)(a+c)(b+d),此时用于进行配对四格表的相关分析,如考察两种检验方法的检出率有无差别。

【B】卡方检验最常见的用途就是考察某无序分类变量各水平在两组或多组间的分布是否一致实际上。

【C】卡方检验是离散分布。

【D】根据χ2分布及自由度可以确定在H0假设成立的情况下更极端情况的概率P,如果P值很小,说明观察值与理论值偏离程度太大,应当拒绝无效假设。

答案:BD


② 大数据技术 


1, 以下哪个不属于大数据流式数据处理框架( )

【A】Hive

【B】Spark Streaming

【C】Storm

【D】Flink

答案:A
2,以下哪个不是HDFS的特性?()

【A】可靠性

【B】分布式

【C】低延迟数据访问

【D】高吞吐量

答案:C
3,入栈序列是a1,a6,a5,a3,a4,a2,出栈序列是a5,a6,a3,a4,a2,a1,则栈的容量最小是()

【A】2

【B】3

【C】4

【D】5

答案:B

4,Hive中的sort by是在mapreduce的哪个组件进行排序的?()

【A】Partitioner

【B】RecordReader

【C】Mapper

【D】Reducer

答案:D

5,有一个数组array(0.1,0.3,0.7,0.9,1.1,1.2),在Hive中计算其上四分位数可以用哪个函数?()

【A】avg

【B】percentile_approx

【C】ntile

【D】percentile

答案:D

6,关于数据库模型设计中的范式描述下列错误的是()

【A】第二范式中不能有多个主键

【B】第三范式是指属性可以有传递依赖

【C】第一范式是指一个字段只存储一项信息

【D】第二范式是指属性完全依赖于主键

答案:B

7,以下关于数据仓库说法错误的是()

【A】需具备可更新性

【B】反映历史变化

【C】数据是可冗余的

【D】是面向主题的

答案:A

8,以下关于聚集索引和非聚集索引的区别说法错误的是()

【A】两者都可以频繁修改索引列

【B】聚集索引不一定会比非聚集索引性能更优

【C】聚集索引的叶节点就是最终的数据节点,而非聚集索引有一个指向最终数据的指针

【D】聚集索引一个表只能有一个,而非聚集索引一个表可以存在多个

答案:A
9,(多选题)以下关于主键说法正确的是()

A:一个表中必须有主键

B:主键的值不可重复

C:一个表中只能有一个主键

D:主键的值可以为空

答案:BC



 ③ SQL技能 


1,以下哪条SQL语句可以返回table_A中的全部的key()

【A】

    select tabel1.key 
    from table1
    left semi join tabel2
    on table1.key=table2.key

    【B】

      select tabel_A.key 
      from table_A
      join tabel_B
      on table_A.key=tabel_B.key

      【C】

        select tabel_A.key 
        from table_A
        right semi join tabel_B
        on table_A.key=tabel_B.key

        【D】

          select tabel_A.key 
          from table_A
          left outer join tabel_B
          on table_A.key=tabel_B.key
          答案:D
          2,现有订单表orders,若查询既订购了产品p01,又订购了产品p02的用户编号,可以执行以下哪段sql语句()

          【A】

            select 
            distinct(userid)
            from orders o1
            where o1.pid = 'p01'
            and exists (select 1 from orders o2 where o1.userid= o2.userid and o2.pid='p02')

            【B】

              select 
              distinct (o1.userid)
              from orders o1
              left join orders o2
              on o1.userid= o2.userid
              and o2.pid='p02'
              where o1.pid='p01'

              【C】

                select distinct (userid) 
                from orders ol
                where ol.pid in ('p01','p02')
                【D】
                  select distinct (userid) 
                  from orders ol
                  where ol.pid = 'p01'
                  and ol.pid = 'p02'
                  答案:A

                  3, 有如下一段json字符串信息info:

                    [
                    {
                    "type":"Promo fund",
                    "currency":"AUD",
                    "amount":15,
                    "actualAmount":15,
                    "rebatePolicyIDs":[
                    214,
                    215
                    ]
                    },
                    {
                    "type":"AirlineRebate",
                    "currency":"AUD",
                    "amount":7,
                    "actualAmount":7,
                    "rebatePolicyIDs":[
                    450283,
                    450284
                    ]
                    }
                    ]


                    我们想拿到type为Promo fund对应的currency、amount及对应rebatePolicyIDs的第一个活动ID promoid,结果如下:

                    • type

                    • promoid

                    • currency

                    • amount

                    可以执行以下哪段sql语句()

                    【A】

                      select 
                      get_json_object(default.json_array(info)[0],'$.type') as type
                      ,get_json_object(default.json_array(info)[0],'$.rebatePolicyIDs') as promoid
                      ,get_json_object(default.json_array(info)[0],'$.currency') as currency
                      ,get_json_object(default.json_array(info)[0],'$.amount') as amount

                      【B】

                        select 
                        get_json_object(default.json_array(info)[0],'$.type') as type
                        ,default.json_array(get_json_object(default.json_array(info)[0],'$.rebatePolicyIDs'))[0] as promoid
                        ,get_json_object(default.json_array(info)[0],'$.currency') as currency
                        ,get_json_object(default.json_array(info)[0],'$.amount') as amount

                        【C】

                          select 
                          get_json_object(info,'$.type') as type
                          ,default.json_array(get_json_object(info,'$.rebatePolicyIDs'))[0] as promoid
                          ,get_json_object(info,'$.currency') as currency
                          ,get_json_object(info,'$.amount') as amount

                          【D】

                            select 
                            get_json_object(info,'$.type') as type
                            ,get_json_object(info,'$.rebatePolicyIDs') as promoid
                            ,get_json_object(info,'$.currency') as currency
                            ,get_json_object(info,'$.amount') as amount
                            答案:B

                            4,有一张表test:CREATE TABLE test(a INT )。表中共有4行数据,字段a的值分别为:1、2、3、NULL,下面运行结果为()

                              SELECT 
                              SUM(a)
                              ,COUNT(DISTINCT a)
                              ,COUNT(1)
                              ,AVG(a) 
                              FROM test

                              【A】6、4、4、1.5

                              【B】NULL、3、4、2

                              【C】NULL、4、4、1.5

                              【D】6、3、4、2

                              答案:D


                               ④ 逻辑推理 


                              1,下图中,对应的图形为()



                              【A】A

                              【B】B

                              【C】C

                              【D】D

                              答案:D


                               编程题 

                               


                              问题
                                


                              假设参与携程某个项目的酒店有100W个,用户订购酒店房间会产生一条或多条订单记录。

                              记录的表为ctrip_hotel_order,其中:

                              • order_id:订单id

                              • hotel_id:被访问的酒店id

                              另有酒店信息表:ctrip_hotel_info,其中:
                              • hotel_id:酒店ID

                              • hotel_name:酒店名称

                              请统计:订单量top2的酒店信息,输出:
                              • hotel_id:酒店id

                              • hotel_name:酒店名称

                              • order_num:订单量

                              注意:当订单量重复时,请按照 hotel_id 升序排列,最终输出至多两条数据

                              ▼ 参考答案:
                                select 
                                hotel_id
                                ,hotel_name
                                ,order_num
                                from
                                (
                                select
                                b.hotel_id
                                ,b.hotel_name
                                ,count(distinct a.orderid) as order_num
                                from ctrip_hotel_order a
                                join ctrip_hotel_info b
                                on a.hotel_id = b.hotel_id
                                group by
                                b.hotel_id
                                ,b.hotel_name
                                )t
                                order by order_num desc,hotel_id asc
                                limit 2;




                                问题
                                  


                                携程酒店有两张数据表。

                                用户表(user1)存放所有用户信息,包含

                                • uid:用户id

                                • name:姓名

                                订单表(order1)包含
                                • orderid:订单id

                                • uid:用户id

                                • cost:用户该单付款金额

                                • hotelid:入住酒店ID


                                现在需要写一段sql,来计算用户表中每个用户在历史上的订单单均价。
                                请输出以下字段:
                                • uid: 用户id

                                • name: 姓名

                                • avg_cost: 单均价。

                                请注意:
                                • 单均价用数学平均,结果四舍五入保留一位小数即可
                                • 如果用户在历史上没有下过任何订单,则记为0

                                • 最后结果按照用户单均价由大到小降序排列

                                • 如果单均价相同,则按照用户id升序排列

                                ▼ 参考答案:
                                  select 
                                  a.uid
                                  ,a.name
                                  ,round(sum(a.cost)/count(distinct a.orderid),1) as avg_cost
                                  from
                                  (
                                  select
                                  a.uid
                                  ,a.name
                                  ,ifnull(b.orderid,1) as orderid
                                  ,ifnull(b.cost,0) as cost
                                  from user1 as a
                                  left join order1 as b
                                  on a.uid = b.uid
                                  )a
                                  group by
                                  a.uid
                                  ,a.name
                                  order by
                                  round(sum(a.cost)/count(distinct a.orderid),1) desc
                                  ,a.uid asc
                                  ;



                                   问题 ③ 


                                  携程人力资源系统中,部门表为department,包括字段:

                                  • bu_id:部门id

                                  • bu_name:部门名称

                                  员工表为employee,包括字段:
                                  • emp_id:员工id

                                  • emp_name:员工姓名

                                  • bu_id:部门ID

                                  • salary:员工薪资

                                  • level:职级(范围:1-10)。

                                  现请帮忙hr统计:5级以上(含5级)员工的平均工资超过9000(包含9000)的部门名称,以及其对应的5级以上员工的平均工资数值,平均工资保留2位小数,并按照平均工资降序排序。请输出以下字段:
                                  • bu_name:部门ID
                                  • salary_avg:平均工资

                                  ▼ 参考答案

                                    select bu_name,salary_avg
                                    from (
                                    select bu_name,round(avg(salary),2) as salary_avg
                                    from department a
                                    inner join employee b on a.bu_id = b.bu_id
                                    where b.level >= 5
                                    group by bu_name
                                    having round(avg(salary),2)>= 9000
                                    ) t
                                    order by salary_avg desc;


                                    以上就是相对完整的携程笔试真题~

                                    后续六哥会继续收集整理更多大厂笔试真题

                                    如果你有相关资料,也欢迎联系我一起共享+共建


                                    如若盼 追更 求职类干货系列 

                                    欢迎大家转发,点亮在看
                                    你的鼓励,也是六哥的原创更新动力~
                                    也欢迎在公众号后台找到我,拉你进交流群 ~


                                    Ps. 微信推文改了规则

                                    看完记得设置为 “ 星标 ” 

                                    不然我会消失的



                                    更多 『求职干货』 & 『日常学习』 系列好文,等你发现~

                                    往期好文推荐 
                                    求职类
                                    【数据分析岗】面试该如何做准备
                                    【数据分析岗】面试必备的数据分析方法(一)
                                     教你写出会说话的【数据分析岗】简历
                                    【数据分析岗】面试框架梳理(含高频题型)
                                    【数据分析岗】常见笔试题型梳理(附case)
                                    【数据分析岗】字节面试真题(含答案)+送100道面试题库
                                    日常学习类
                                    警惕数据分析中的『幸存者偏差』陷阱
                                    业务指标异常分析(含真实案例)
                                    讲懂高频Hive:窗口函数(一)

                                    文章转载自数据攻略,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                    评论