欢聚笔试题求助帖

news2024/11/19 3:44:35

事情是这样的,这段时间一直在求职投简历,期望在暑假之前接到一份大数据开发的实习工作。投了很多公司,然后就收到了欢聚的笔试邀约,HR说要我一天之内做出来,恰巧第二天还有组会要汇报,我就先放下了,打算开完组会,下午再做,也没有超时。
09D16BF9.jpg
拿到的笔试题是一份pdf的建表语句什么的需要自己手动输入,而且建表语句中存在一些小坑。
这是需要使用hive sql回答的一份笔试题。
建表语句如下:
1、班级课后统计表–ls表
表定义的最后不应该有逗号(原表中一个最大的错误,困扰了我很久,没有发现)

CREATE TABLE IF NOT EXISTS tb_class_lesson_stat
(
class_id BIGINT COMMENT '大班ID',
class_name STRING COMMENT '大班名称',
uid BIGINT COMMENT '学生uid',
be_attend BIGINT COMMENT '10-到课;20-未到课',
attend_duration BIGINT COMMENT '到课总时长',
be_complete BIGINT COMMENT '10-完课;20-未完课',
term STRING COMMENT '平台类型:1-android;2-ios;3-web',
be_late BIGINT COMMENT '10-正常;20-迟到',
late_duration BIGINT COMMENT '迟到时长',
be_leave_early BIGINT COMMENT '10-未早退;20-早退',
leave_early_duration BIGINT COMMENT '早退时长'
)COMMENT '班级课后统计表'
PARTITIONED BY(dt STRING);

2、班级信息表–ci表

CREATE TABLE IF NOT EXISTS tb_class_info
(
class_id BIGINT COMMENT '⼤班ID',
class_name STRING COMMENT '⼤班名称',
class_no STRING COMMENT '课程期号',
class_type STRING COMMENT '业务类型:10-体验;20-正式;30-测试;40-其他',
class_start_time STRING COMMENT '开课时间,格式2020-01-01 :13:00:00'
)
COMMENT '班级信息表';

3、作业统计表–hs表

CREATE TABLE IF NOT EXISTS tb_homework_stu_stat
(
	id BIGINT,
	class_id BIGINT COMMENT '大班id',
	uid BIGINT COMMENT '学生uid',
	status BIGINT COMMENT '作业状态0,未提交,20-已提交,10-已批改',
	score BIGINT COMMENT '作业得分,每题批改都更新分数,默认0',
	comment STRING COMMENT '作业总评,json方式存储',
	push_status BIGINT COMMENT '推送状态,0未推送(默认),1-作业已推送,2-报告已推送',
	submit_time STRING COMMENT '作业提交时间时间',
	deadline STRING COMMENT '作业提交截止时间',
	create_time STRING COMMENT '创建时间',
	updateby BIGINT,
	update_time STRING COMMENT '更新时间',
	type BIGINT COMMENT '作业类型:0课后作业,10摸底测,20周测',
	comment_status BIGINT COMMENT '批改状态,0未批改(默认),10暂存,20已批改,30出门测')
	COMMENT '作业统计表';

4、作业报告查看记录表–re表

CREATE TABLE IF NOT EXISTS tb_report_expo
(
	class_id BIGINT COMMENT '大班id',
	uid BIGINT COMMENT '用户id',
	report_type BIGINT COMMENT '报告类型,1作业报告曝光'
) 
COMMENT '作业报告查看记录表'

第一题,求所有已开课的正式课班级的学生到课数据统计

解释:已开课:开课时间小于当前时间则为已开课;
正式课:class_type=20
需求列表:
具体字段如下:
image.png
我的答案:

SELECT 
    ci.class_id,
    ci.class_no,
    ci.class_name,
    COUNT(DISTINCT ls.uid) AS `应到学生总数`,
    SUM(IF(ls.be_attend = 10,1,0)) AS `到课学生数`,
    AVG(IF(ls.be_attend = 10,ls.attend_duration,0)) `人均到课时长`
FROM 
    tb_class_info ci
JOIN 
    tb_class_lesson_stat ls 
ON  
    ci.class_id = ls.class_id
WHERE 
    ci.class_type = 20 AND
    ci.class_start_time < CURRENT_TIMESTAMP()
GROUP BY 
    ci.class_id, ci.class_no, ci.class_name;

我的思路:
求所有已开课的正式课班的学生到课数据统计,
主要是聚焦两张表,班级课后统计表–ls表和班级信息表–ci表,关联条件就是“大班ID”。这道题要说难的话,我认为有两点:
一是,字段比较难把握,但是这个其实还好,题目中已经给了需求字段,前三个字段直接写上。“应到学生数”,就是课程id关联上的,ls表中学生id,去重计数就是应到学生数了;“到课学生数”,在ls表中有个字段“be_attend”为“10”时,对满足条件的行求和就是“应到学生数”了;“人均到课时长”,是用到avg函数,当“be_attend”为“10”时,加上“ls.attend_duration”字段数值,也就是到课时长,否则就加0。
二是,已开课如何表示?题目中已经提示了,时间小于现在时间,如何表示现在的时间了,sql中与时间相关的函数是date,timestamp类似的单词,在这里我用到的是current_timestamp。
至此,拼接上述思路,我的答案就出来了,对了记得group by一下班级,为了准确度,同时分组一下班级id、班级no和班级名。

第二题, 求到课用户的课后作业完成情况

需求字段如下:
image.png
我的答案:

SELECT 
    ci.class_id,
    ci.class_no,
    ci.class_name,
    COUNT(DISTINCT ls.uid) AS `到课学生数`,
    COUNT(DISTINCT CASE WHEN (hs.push_status = 1 OR hs.push_status = 2) THEN hs.uid ELSE NULL END) AS `下发作业学生数`,
    COUNT(DISTINCT CASE WHEN (hs.status = 20 OR hs.status = 10)  THEN hs.uid ELSE NULL END) AS `完成作业学生数`,
    COUNT(DISTINCT CASE WHEN hs.push_status = 2 THEN hs.uid ELSE NULL END) AS `下发报告学生数`,
    COUNT(DISTINCT CASE WHEN re.report_type = 1 THEN re.uid ELSE NULL END) AS `查看报告学生数`
FROM 
    tb_class_info ci
JOIN 
    tb_class_lesson_stat ls ON ci.class_id = ls.class_id AND ls.be_attend = 10
LEFT JOIN 
    tb_homework_stu_stat hs ON ci.class_id = hs.class_id AND hs.type = 0
LEFT JOIN 
    tb_report_expo re ON ci.class_id = re.class_id
GROUP BY 
    ci.class_id, ci.class_no, ci.class_name;

求到课(ls.be_attend = 10)用户的课后作业(hs.type=0)完成情况。
我的思路:
这一题虽然看起来很复杂,应该是要连接四张表,才可以知道用户的课后作业的各种情况,而且需求字段看起来也好复杂的。别急慢慢来,一个一个看,而且需求字段中,其实已经提示我们字段所在位置,以及属性值。
(上个题目说过的字段就不在重复说了)
“下发作业学生数”:hs.push_status字段的值为1和0,在这里,我用到了一个case when函数,如果满足条件,就输出hs.uid,否则输出NULL,然后对所有的uid去重求和就可以了。
其实剩余所有的字段都可以有相同的方法求出来,我的方法就是这么做的。

第三题, 求每个学生首个上课的正式课信息

即每个学⽣第⼀次上的正式课,根据上课时间排序,取第⼀个。例如⼀个学⽣2023801,2023802,
2023803分别上了课,只需保留2023801那节课的class_id、class_no等信息。
需求字段如下:
image.png

SELECT 
    uid,
    first_lesson_month,
    class_id,
    class_no,
    class_name
FROM (
    SELECT 
        ls.uid,
        DATE_FORMAT(ci.class_start_time, 'yyyy-MM') AS first_lesson_month,
        ci.class_id,
        ci.class_no,
        ci.class_name,
        ROW_NUMBER() OVER(PARTITION BY ls.uid ORDER BY ci.class_start_time) as rn
    FROM 
        tb_class_lesson_stat ls
    JOIN 
        tb_class_info ci 
    ON ls.class_id = ci.class_id AND ci.class_type = 20          
) t
WHERE 
    t.rn = 1;

求每个学生首个上课的正式课信息
我的思路:
“首个”上课信息,我一开始并不知道如何解决,百度了一下知道可以用min函数或者排序函数就行了,还有开课的月份,对于时间如何转变为年月呢。首先对于uid使用row_number开窗函数,按开课时间排序,然后排序为1的这一行就可以了。然后select出需求字段的值就行。

ps:后记

发这篇求助帖,第一个原因是因为笔试没有通过,我也不知道正确的答案是什么,希望有大神看到可以告诉我一下我错在哪里了,好让我可以改正一下(球球了🥺)。虽然我问了HR可否发一下正确答案,但是HR可能怕答案泄漏并没有发我。
第二个原因是想记录一下我第一次参加笔试,虽然是凉了。没事继续刷题吧,主要是自己的功夫还没有到家。
小刘,要继续加油呀
060C1F27.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1683555.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用TensorFlow Lite Micro流程记录(带源码)

文章目录 0 关于tflite micro1 克隆仓库2 编译静态库3 模型转换4 编写工程5 编写demo5.1 进行算子注册 5.2 推理过程6 debug记录6.1 缺少算子 6.2 注册表太小6.3 段错误6.4 进一步减小库体积 7 实际部署 0 关于tflite micro 关于tflite micro在这里接不做过多介绍了&#xff0c…

闲话 .NET(4):为什么要跨平台?

前言 .NET Core 有一个关键词就是跨平台&#xff0c;为什么要跨平台呢&#xff1f;Windows 操作系统不香吗&#xff1f;今天我们来聊聊这个 原因一&#xff1a;安全考虑 Windows OS 是闭源的&#xff0c;而 Linux 是开源的&#xff0c;因此有些公司的技术负责人就认为 Linux…

关于解决Qt在安装的时候没有勾选sources组件的方法

关于解决Qt在安装的时候没有勾选sources组件的方法 一、引言 在安装数据库连接到qt的时候发现没有sources文件夹&#xff0c;原来是安装的时候没有勾选sources组件&#xff0c;发现问题后找到了维护qt组件的安装方式&#xff0c;特此记下来 二、分析原因 首先在安装的时候就…

专访联影智能联席CEO沈定刚:探索脑影像 AI 的无限可能

如何理解联影智能的全栈全谱、临床导向&#xff1f; 作者 &#xff5c;吴彤 编辑 &#xff5c;麦广炜 若要细数沈定刚的过往身份&#xff0c;那么堪可谈论的绝不只有一种。 国内医疗AI龙头企业联影智能联席CEO、上海科技大学生物医学工程学院创始院长&#xff0c;两大重要任职…

CAD2023 2024 2025以上版本出现无法运行 AutoCAD,原因可能如下1) 此版本的 AutoCAD 安装不正确

错误提示如下 此版本的 AutoCAD 安装不正确 缺少依赖组件Microsoft Edge webview2 Runtime 缺少依赖组件 Microsoft.NET跟You must install .NET Desktop Runtime 打开autoremove&#xff0c;点击扩展&#xff0c;输入 无法运行&#xff0c;点击搜索 你的软件属于什么版本…

嵌入式学习——3——TCP-UDP 数据交互,握手,挥手

1、更新源 cd /etc/apt/ sudo cp sources.list sources.list.save 将原镜像备份 sudo vim sources.list 将原镜像修改成阿里源/清华源&#xff0c;如所述 阿里源 deb http://mirrors.aliyun.com/ubuntu/ bionic main …

解锁产品迭代新速度:A/B测试在AI大模型时代的应用

本文作者为火山引擎A/B测试平台DataTester的资深研发工程师刘明瑶。作为火山引擎数智平台VeDI旗下的核心产品&#xff0c;DataTester源于字节跳动长期的技术和业务沉淀&#xff0c;目前已经服务了数百家企业&#xff0c;助力企业在业务增长、用户转化、产品迭代、策略优化以及运…

CCF20220901——如此编码

CCF20220901——如此编码 代码如下&#xff1a; #include<bits/stdc.h> using namespace std; int main() {int n,m,cnt1,a[1000],c[1000]{1};cin>>n>>m;for(int i1;i<n;i){cin>>a[i];cnt*a[i];c[i]cnt;}int b[1000]{0};for(int i1;i<n;i)b[i](…

2种方法将集合数据List构建成树形结构

文章目录 递归循环构建树结构hutool.TreeUtil.build构建树结构 递归循环构建树结构 先查最外层树节点数据&#xff0c;再递归遍历每一层子节点数据 public ApiResultDto<List<LocationDto>> getTreeByParams(LocationSearchDto searchDto, SecurityUser user) {// …

成都爱尔胡建斌院长提醒近视超过600度,记得每年检查眼底!

高度近视是指近视度数在600度及以上的一种屈光不正的状态。 近视的眼睛必定是变形的。在正常情况下&#xff0c;人的眼球类似球体&#xff0c;但随着近视加深&#xff0c;眼轴变长&#xff0c;眼球体积逐渐增大&#xff0c;整个眼球从圆球型向椭圆球形发展&#xff0c;而眼球壁…

【详细讲解】二叉树的层序遍历

广度优先搜索 总结一下&#xff0c;思路就是&#xff1a; 加入元素&#xff0c;记录size&#xff0c;size就是当前这一层的元素个数。不断弹出元素&#xff0c;size - 1&#xff0c; 同时加入弹出元素的左右孩子&#xff0c;直到size0&#xff0c;说明当前层已经完全遍历完&am…

Linux安装刻录软件

在工作场景经常使用光盘和刻录机&#xff0c;在windows系统下有nero软件&#xff0c;在linux下有k3b,但是原始的k3b只能一次刻录&#xff0c;十分浪费光盘&#xff0c;这里我们使用经优麒麟优化过的刻录软件&#xff0c;实现多次追加刻录。 进入优麒麟软件仓库&#xff0c;需要…

二叉树求解大小操作详解

目录 一、求所有结点个数 1.1 递归思路 1.2 递归分支图 1.3 递归栈帧图 1.4 C语言实现 二、求叶子结点个数 2.1 递归思路 2.2 递归分支图 2.3 递归栈帧图 2.4 C语言实现 三、求第K层的结点个数 3.1 递归思路 3.2 递归分支图 3.3 递归栈帧图 3.4 C语言实现 四、求…

智能进化:让AI大模型变得更聪明的路径探索

前言 随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;大模型在多个领域展现出了前所未有的能力。然而&#xff0c;它们仍然面临着理解力、泛化能力和适应性等方面的挑战。如何让大模型变得更聪明&#xff0c;是当前AI研究和应用的一个重要课题。本文将探讨…

奇瑞控股携手契约锁推动客户、供应商及内部业务全程数字化

奇瑞控股集团是安徽省排名第一的制造业企业&#xff0c;同时入选中国企业家协会发布的中国500强、《财富》中国500强&#xff0c;连续21年位居中国品牌乘用车出口第一。 面对汽车行业“新四化”主题及“数字化”时代变革&#xff0c;奇瑞控股持续创新求变&#xff0c;率先引入电…

Qt笔记:动态处理多个按钮点击事件以更新UI

问题描述 在开发Qt应用程序时&#xff0c;经常需要处理多个按钮的点击事件&#xff0c;并根据点击的按钮来更新用户界面&#xff08;UI&#xff09;&#xff0c;如下图。例如&#xff0c;你可能有一个包含多个按钮的界面&#xff0c;每个按钮都与一个文本框和一个复选框相关联…

《微服务王国的守护者:Spring Cloud Dubbo的奇幻冒险》

5. 经典问题与解决方案 5.3 服务追踪与链路监控 在微服务架构的广袤宇宙中&#xff0c;服务间的调用关系错综复杂&#xff0c;如同一张庞大的星系网络。当一个请求穿越这个星系&#xff0c;经过多个服务节点时&#xff0c;如何追踪它的路径&#xff0c;如何监控整个链路的健康…

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(十)

课程地址&#xff1a; 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程&#xff0c;一套精通鸿蒙应用开发 &#xff08;本篇笔记对应课程第 17 节&#xff09; P17《16.Ark-状态管理Prop Link Provide Consume》 将上一节写出的代码进行功能模块封装&#xff1a;1、任务…

计算机毕业设计 | node.js(Express)+vue影院售票商城 电影放映购物系统(附源码+论文)

1&#xff0c;绪论 1.1 项目背景 最近几年&#xff0c;我国影院企业发展迅猛&#xff0c;各大电影院不断建设新的院线&#xff0c;每年新投入使用的荧幕数目逐年显著上升。这离不开人们的观影需求及对观影的过程要求的不断进步。广大观影消费者需要知道自己的空闲时间&#x…

STM32自己从零开始实操02:输入部分原理图

一、触摸按键 1.1指路 项目需求&#xff1a; 4个触摸按键&#xff0c;主控芯片 TTP224N-BSBN&#xff08;嘉立创&#xff0c;封装 TSSOP-16&#xff09;&#xff0c;接入到 STM32 的 PE0&#xff0c;PE1&#xff0c;PE2&#xff0c;PE3。 1.2走路 1.2.1数据手册重要信息提…