菜鸟网络笔试 阿里菜鸟笔试 0822

笔试时间:2025年8月22日

往年笔试合集:

2023春招秋招笔试合集

2024春招秋招笔试合集

第一题

【背景】菜鸟需要评估不同物流线路在不同季节的运输效率以及不同包裹类型的丢失率,以优化物流运营和服务质量。

【原始表】*  route_id(线路ID):线路的唯一标识符,INT(主键)*  route_name(线路名称):物流线路的名称,VARCHAR(50)*  package_id(包裹ID):包裹的唯一标识符,INT(主键)*  route_id(线路ID):关联物流线路表的线路ID,INT*  package_type(包裹类型):包裹的类型('大型'或'小型'),VARCHAR(20)*  start_time(开始配送时间):包裹开始配送的时间,DATETIME*  delivery_time(送达时间):包裹送达的时间,DATETIME*  lost_id(丢失ID):丢失记录的唯一标识符,INT(主键)*  package_id(包裹ID):关联包裹信息表的包裹ID,INT

【要求】查询出每条物流线路在每个季节的平均送达时间(单位:小时,分钟部分以小数展示,保留两位小数),以及每条物流线路全年包裹的丢失率、每条物流线路运输包裹类型占比。结果按照线路ID升序排列。

【结果字段】查询结果必须包含以下字段:*  route_id:线路ID*  route_name:线路名称*  spring_average_delivery_time:春季(3月、4月、5月)该线路的平均送达时间(round保留2位小数)*  summer_average_delivery_time:夏季(6月、7月、8月)该线路的平均送达时间(round保留2位小数)*  autumn_average_delivery_time:秋季(9月、10月、11月)该线路的平均送达时间(round保留2位小数)*  winter_average_delivery_time:冬季(12月、1月、2月)该线路的平均送达时间(round保留2位小数)*  lost_count:该路线全年包裹丢失总数量*  lost_rate:该路线全年包裹丢失率(丢失包裹数量/总包裹数量,round保留2位小数)*  small_packages:该路线运输“小型”包裹类型占比(“小型”包裹数量/总包裹数量,round保留2位小数)*  big_packages:该路线运输“大型”包裹类型占比(“大型”包裹数量/总包裹数量,round保留2位小数)

【计算说明】*  每个包裹的送达时间计算:delivery_time - start_time(结果转换为小时,分钟转换为小数部分)。*  季节划分:春季(3月、4月、5月),夏季(6月、7月、8月),秋季(9月、10月、11月),冬季(12月、1月、2月)。*  占比和丢失率计算需使用 ROUND 函数保留两位小数。lost_package(丢失包裹)表package_info(包裹信息)表logistics_route(物流线路)表

输入描述

输入是一个sql建表函数。

输出描述

包含9列的表格:route_id, route_name, spring_average_delivery_time, summer_average_delivery_time, autumn_average_delivery_time, winter_average_delivery_time, lost_count, lost_rate, small_packages, big_packages

样例输入

下面输入移除了外键约束,方便在oj网站上自测。

-- 删除表(如果存在)

DROP TABLE IF EXISTS logistics_route;

DROP TABLE IF EXISTS package_info;

DROP TABLE IF EXISTS lost_package;

-- 创建表(移除外键约束)

CREATE TABLE logistics_route (

  route_id INT PRIMARY KEY,

  route_name VARCHAR(50)

);

CREATE TABLE package_info (

  package_id INT PRIMARY KEY,

  route_id INT,

  package_type VARCHAR(20),

  start_time DATETIME,

  delivery_time DATETIME

  -- 移除了外键约束: FOREIGN KEY (route_id) REFERENCES logistics_route(route_id)

);

CREATE TABLE lost_package (

  lost_id INT PRIMARY KEY,

  package_id INT

  -- 移除了外键约束: FOREIGN KEY (package_id) REFERENCES package_info(package_id)

);

-- 插入数据

INSERT INTO logistics_route (route_id, route_name)

VALUES (1, '线路A'), (2, '线路B'), (3, '线路C'), (4, '线路D');

INSERT INTO package_info (package_id, route_id, package_type, start_time, delivery_time)

VALUES 

(1, 1, '小型', '2024-01-04 09:10:00', '2024-01-05 10:00:00'), 

(2, 2, '大型', '2024-01-09 11:05:00', '2024-01-10 12:00:00'), 

(3, 3, '小型', '2024-02-09 11:30:00', '2024-02-10 12:00:00'), 

(4, 4, '大型', '2024-03-09 11:15:00', '2024-03-10 12:00:00'), 

(5, 1, '小型', '2024-04-09 10:50:00', '2024-04-10 12:00:00'), 

(6, 2, '小型', '2024-05-09 11:20:00', '2024-05-10 12:00:00'), 

(7, 3, '大型', '2024-06-09 14:30:00', '2024-06-10 15:00:00'), 

(8, 4, '小型', '2024-07-09 11:06:00', '2024-07-10 12:00:00');

INSERT INTO lost_package (lost_id, package_id)

VALUES (1, 1), (2, 6);

样例输出

route_id|route_name|spring_average_delivery_time|summer_average_delivery_time|autumn_average_delivery_time|winter_average_delivery_time|lost_count|lost_rate|small_packages|big_packages

1|线路 A|25.17|0.00|0.00|24.83|1|0.50|1.00|0.00

2|线路 B|24.67|0.00|0.00|24.92|1|0.50|0.50|0.50

3|线路 C|0.00|24.50|0.00|24.50|0|0.00|0.50|0.50

4|线路 D|24.75|24.90|0.00|0.00|0|0.00|0.50|0.50

参考题解

SQL:

SELECT 
    lr.route_id,
    lr.route_name,
    COALESCE(ROUND(AVG(CASE WHEN MONTH(pi.start_time) BETWEEN 3 AND 5 
              THEN TIMESTAMPDIFF(MINUTE, pi.start_time, pi.delivery_time)/60.0 END), 2), 0.00) 
        AS spring_average_delivery_time,

    COALESCE(ROUND(AVG(CASE WHEN MONTH(pi.start_time) BETWEEN 6 AND 8 
              THEN TIMESTAMPDIFF(MINUTE, pi.start_time, pi.delivery_time)/60.0 END), 2), 0.00) 
        AS summer_average_delivery_time,

    COALESCE(ROUND(AVG(CASE WHEN MONTH(pi.start_time) BETWEEN 9 AND 11 
              THEN TIMESTAMPDIFF(MINUTE, pi.start_time, pi.delivery_time)/60.0 END), 2), 0.00) 
        AS autumn_average_delivery_time,

    COALESCE(ROUND(AVG(CASE WHEN MONTH(pi.start_time) IN (12, 1, 2) 
              THEN TIMESTAMPDIFF(MINUTE, pi.start_time, pi.delivery_time)/60.0 END), 2), 0.00) 
        AS winter_average_delivery_time,

    COUNT(DISTINCT lp.package_id) AS lost_count,

    COALESCE(ROUND(COUNT(DISTINCT lp.package_id) / NULLIF(COUNT(DISTINCT pi.package_id), 0), 2), 0.00) AS lost_rate,

    COALESCE(ROUND(SUM(CASE WHEN pi.package_type = '小型' THEN 1 ELSE 0 END) / NULLIF(COUNT(pi.package_id), 0), 2), 0.00) 
        AS small_packages,

    COALESCE(ROUND(SUM(CASE WHEN pi.package_type = '大型' THEN 1 ELSE 0 END) / NULLIF(COUNT(pi.package_id), 0), 2), 0.00) 
        AS big_packages

FROM logistics_route lr
LEFT JOIN package_info pi ON lr.route_id = pi.route_id
LEFT JOIN lost_package lp ON pi.package_id = lp.package_id
GROUP BY lr.route_id, lr.route_name
ORDER BY lr.route_id;

第二题:最大池化操作实现

某医疗诊断公司在进行医疗图像识别的过程中,使用了基于卷积神经网络(CNN)的机器学习模型。其中,卷积层后的最大池化操作是关键步骤之一,它有助于减少模型的计算负担并提取特征的最重要部分。请编程实现CNN中的最大池化操作子功能。最大池化定义:最大池化是一种子采样方法,它在卷积操作后进行,用于减少模型的计算负担并提取特征的最重要部分。最大池化操作的步骤是:在卷积后的特征图中,选取一个固定大小的窗口,以固定的步长滑动窗口,并在每个窗口中选取最大的值作为该窗口的输出。

输入描述

第一行:一个2维的list,表示卷积后的特征图(方阵)

第二行:一个1维的list参数,长度固定为2,表示池化窗口的宽度和高度

输出描述

返回值:一个2维的list,表示经过最大池化操作后的特征图

样例输入

[[1, 2, 1, 2], [3, 4, 3, 4], [1, 2, 1, 2], [3, 4, 3, 4]]

[2, 2]

样例输出

[[4, 4], [4, 4]]

参考题解

问题分析:最大池化操作需要处理一个二维的输入特征图和一个指定池化窗口大小的一维列表。窗口会在特征图上以等于其大小的步长滑动,确保每次移动都能覆盖新的区域而不重叠。关键点:正确计算输出特征图的尺寸,确保窗口在滑动时不会超出输入特征图的边界。输出尺寸由输入尺寸和窗口大小决定,公式为 (输入尺寸 - 窗口大小) / 步长 + 1,其中步长等于窗口大小。算法选择:遍历每个可能的窗口起始位置,提取窗口内的所有元素,计算其最大值,并将这些最大值组合成输出特征图。

C++:

#include <bits/stdc++.h>
using namespace std;

int main() {
    string feature_map_str, pool_window_str;
    getline(cin, feature_map_str);
    getline(cin, pool_window_str);

    // 解析输入(假设输入格式正确,比如 [[1,2],[3,4]])
    // 使用简单的手工解析
    vector<vector<int>> feature_map;
    vector<int> pool_window;

    // 解析 feature_map
    {
        vector<int> row;
        string num;
        for (char c : feature_map_str) {
            if (isdigit(c) || c == '-') {
                num.push_back(c);
            } else {
                if (!num.empty()) {
       

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2025 春招笔试合集 文章被收录于专栏

2025打怪升级记录,大厂笔试合集 C++, Java, Python等多种语言做法集合指南

全部评论

相关推荐

敢逐云霄志:你打招呼语怎么能这么长,hr都没看下去的欲望,简明扼要说重点,就读于某某学校某某专业,26届应届毕业生,学信网可查,先后在某某公司实习过(如有),然后做过什么项目,想找一份什么样的工作,可实习几个月以上,期待您的回复。
点赞 评论 收藏
分享
迷茫的大四🐶:那你问他上班之后老实了没
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务