阿里大文娱0927秋招笔试真题解析
- 2026-11-05 11:57:51
关注我们,每周更新两到三次大厂最新笔试题解析
前言
总体难度不大,笔试题直接两道MySQL还是比较少见的,考察点不算难,包括求和、计数、跨表、分组这些。没写过sql的同学抓紧时间补起来,不然就容易吃白板。
第一题
小红拿到了一棵二叉树。她希望删除尽可能少的节点,使得该二树变成一棵满二叉树。你能编写一个函数返回需要删除的节点最小数量吗?
一个二叉树,如果每一个层的节点数都达到最大值,则这个二又树就是满二叉树。
示例
输入
[1 2 3 4 # # # 5]
输出
2
说明:删掉4号和5号节点即可
思路与代码:
层序遍历,记录第一次节点没达到最大值的层,该层和后续的节点都要删除
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* };
*/
class Solution {
public:
int numOfNode(TreeNode* root) {
int ans = 0, target = 1;
queue<TreeNode*> q;
q.push(root);
int flag = 0;
while(!q.empty()) {
int tmpn = q.size();
if(tmpn < target) flag = 1;
while(tmpn--) {
auto now = q.front(); q.pop();
if(flag) ans++;
if(now->left) q.push(now->left);
if(now->right) q.push(now->right);
}
target *= 2;
}
return ans;
}
};
第二题
某产品在线内容信息数据、内容发布数据、内容创作者数据如下:
内容信息表info_tb (info_id-内容信息id, info_I-内容信息标签, info_pv-内容浏览量,praise_num-内容获赞数量),如下所示:
| info_id | info_l | info_pv | praise_num |
|---|---|---|---|
| 1 | 军事 | 256 | 45 |
| 2 | 体育 | 156 | 23 |
| 3 | 军事 | 234 | 35 |
| 4 | 娱乐 | 572 | 160 |
| 5 | 政要 | 278 | 45 |
| 6 | 体育 | 450 | 130 |
发布内容动作表put_action_tb(put_info_id-发布内容信息id, put_author-发布创作者id, put_time-发布时间),如下所示:
| put_info_id | put_author | put_time |
|---|---|---|
| 1 | 101 | 2022-02-18 08:30:00 |
| 2 | 102 | 2022-02-18 08:31:00 |
| 3 | 101 | 2022-02-18 08:42:00 |
| 4 | 103 | 2022-02-18 09:33:00 |
| 5 | 101 | 2022-02-18 16:34:00 |
| 6 | 104 | 2022-02-18 10:35:00 |
内容创作者信息表author_tb(author_id-创作者id, author_name-创作者姓名,fans_num-粉丝数量)如下所示:
| author_id | author_name | fans _num |
|---|---|---|
| 101 | Aran | 1000 |
| 102 | James | 500 |
| 103 | Bill | 3000 |
| 104 | Angel | 3000 |
问题: 请统计每个创作者发布的内容总计浏览量和点赞量? 要求: 输出author_name, 总计浏览量,总计浏览量; 按照author_name顺序排序
示例数据结果如下:
| author_name | pv_nums | praise_nums |
|---|---|---|
| Angel | 450 | 130 |
| Aran | 768 | 125 |
| Bill | 572 | 160 |
| James | 156 | 23 |
解释:以创作者Aran为例,发布1、3、5共3条内容,浏览量分别为256、234、278,共计768点赞量分别为45、35、45,共计125
思路与代码:
根据作者id得到发布id,根据发布id对阅读量和点赞量求和,sum语句;
跨表查询,本题适合通过左联来查询
LEFT JOIN(左联):先返回左表的所有行,再加上符合连接条件的匹配行
两表连接查询:对两表求积(笛卡尔积)并用ON条件和连接连接类型进行过滤形成中间表
select a.author_name, sum(i.info_pv) as pv_nums, sum(i.praise_num) as praise_nums from info_tb i
left join put_action_tb p
on i.info_id = p.put_info_id
left join author_tb a
on a.author_id = p.put_author
group by p.put_author
order by a.author_name
第三题
现有课程信息表course_info_tb(cid 课程ID, tag 视频类别, release_date 发布日期, duration 视频时长)示例数据如下:
| id | cid | tag | release_date | duration |
|---|---|---|---|---|
| 1 | 9001 | sql | 2022-01-01 | 60 |
| 2 | 9002 | sql | 2022-01-01 | 90 |
| 3 | 9003 | sql | 2022-01-01 | 45 |
| 4 | 9004 | java | 2022-01-02 | 45 |
用户观看记录表play_record_tb(uid 用户ID, cid 课程lD, start_time 开始观看时间,end_time 结束观看时间, score用户评分),示例数据如下:
| id | uid | cid | start_time | end_time | score |
|---|---|---|---|---|---|
| 1 | 1001 | 9001 | 2022-01-01 08:30:00 | 2022-01-01 09:00:00 | 4 |
| 2 | 1001 | 9001 | 2022-01-03 09:30:00 | 2022-01-03 10:20:00 | 2 |
| 3 | 1002 | 9001 | 2022-01-01 08:30:00 | 2022-01-01 09:40:00 | 3 |
| 4 | 1002 | 9001 | 2022-01-02 08:30:00 | 2022-01-02 09:40:00 | 3 |
| 5 | 1001 | 9002 | 2022-01-02 08:30:00 | 2022-01-02 09:01:00 | 2 |
| 6 | 1001 | 9002 | 2022-01-11 08:30:00 | 2022-01-11 08:31:01 | 3 |
请统计每个用户连续观看同一类型视频的最大次数,按次数降序排序。
示例输出如下:
| uid | tag | max_cnt |
|---|---|---|
| 1001 | sql | 4 |
| 1002 | sql | 2 |
思路与代码:
和上一题相似,根据用户观看的cid来统计课程类型,并对观看次数进行次数统计,用count语句
本题按照题面要连续观看,应该还要参照时间,先试了下只统计次数就过了,应该是描述和判题不符,或者数据太简单;
同时还要注意要按照uid和tag来一起分组(group by),并且对次数降序排序
select p.uid, c.tag, count(p.id) from play_record_tb p
left join course_info_tb c
on p.cid = c.cid
group by p.uid, c.tag
order by count(p.cid) desc
最后插一下我们的进阶一对一辅导啦
我们是一个针对技术岗(前后端开发、测试、测开、大数据开发)校招一对一进阶提高的工作室。我们从2020年2月份开始,迄今整整三年半的时间,带领300+学员斩获1500+大厂offer,参加活动的同学人均5个中大厂offer以上,以下是我们活动内容的介绍! 万诺coding
我们主要是针对有一定基础的同学提供一对一笔试和面试辅导,针对每个同学不同的情况定制内容,包括但不限于“数据结构与算法”/“计算机基础知识”/“项目梳理”/“面试技巧”/“面试复盘”等内容。
摸底测试:如果有兴趣深入了解我们的活动,需要先参加我们的“摸底测试”(类似面试),方便我们了解你的具体情况(主要是code能力和计算机素养),定制出相应的辅导计划。同时这也是一个双向筛选的过程,如果基础过差的同学,抱歉我们可能无法辅导(基础过差的同学一对一辅导成本过高,对双方都不适合);摸底测试通过的同学,我们会定制化一个针对性的提高计划。然后你再考虑是否参加我们的活动。
承诺保offer:通过摸底测试后,我们会针对每个同学的情况给定一个“保offer”计划。然后同学可以根据自己的实际情况考虑参不参加我们的活动。
有兴趣的同学可以扫码添加我们的微信(whynotlab)