迅雷笔试 迅雷笔试题 迅雷秋招 0917

笔试时间:2025年9月17日

往年笔试合集:

2023春招秋招笔试合集

2024春招秋招笔试合集

第一题

在P2P网络传输中,节点的处理能力和链路的可用带宽直接影响数据传输的可行性。每个节点有最大可用带宽,每条链路有剩余带宽和传输延迟。当需要传输大小为D的数据包时,路径上的"所有节点"必须满足剩余带宽≥D,且路径上的"所有链路"剩余带宽也≥D。请设计算法,找到满足条件的最小总延迟路径。输出满足条件的最小总延迟。若不存在合法路径,输出-1。

输入描述

  • n: 节点数(节点编号从0开始)
  • s: 源节点
  • t: 目标节点
  • node_bandwidths: 节点i的可用带宽
  • edges: 每条边的属性为(起点)、(终点)、(链路剩余带宽)、(传输延迟)
  • d: 需传输的数据量
  • 输出描述

    输出满足条件的最小总延迟。若不存在合法路径,输出-1。

    样例输入

    4,0,3,[10,5,8,7],[[0,1,4,2],[0,2,5,3],[1,2,3,1],[1,3,2,5],[2,3,4,5]],3

    样例输出

    8

    样例说明1

    所有节点的带宽都需要≥3:

    • 节点0: 10≥3 ✓
    • 节点1: 5≥3 ✓
    • 节点2: 8≥3 ✓
    • 节点3: 7≥3 ✓

    链路带宽都需要≥3:

    • [0,1,4,2]: 带宽4≥3 ✓, 延迟2
    • [0,2,5,3]: 带宽5≥3 ✓, 延迟3
    • [1,2,3,1]: 带宽3≥3 ✓, 延迟1
    • [1,3,2,5]: 带宽2<3 ✗, 不满足约束
    • [2,3,4,5]: 带宽4≥3 ✓, 延迟5

    可能的路径:

    1. 0→2→3: 总延迟=3+5=8
    2. 0→1→2→3: 总延迟=2+1+5=8

    参考题解

    解题思路:

    1. 过滤图结构:根据数据传输量d的要求,对原始的图进行筛选,只保留节点可用带宽和链路剩余带宽都大于等于d的部分
    2. 最短路径搜索:在筛选后的新图上,使用Dijkstra算法寻找从源节点s到目标节点t的延迟最小的路径
    3. 返回结果:如果能找到路径,返回最小总延迟;否则返回-1

    C++:

    #include <iostream>
    #include <vector>
    #include <queue>
    #include <climits>
    using namespace std;
    
    class Solution {
    public:
        int find_min_delay_path(int n, int s, int t, vector<int>& node_bandwidths, 
                               vector<vector<int>>& edges, int d) {
            if (node_bandwidths[s] < d || node_bandwidths[t] < d) {
                return -1;
            }
            
            vector<vector<pair<int, int>>> adj(n);
            
            for (auto& edge : edges) {
                int u = edge[0];
                int v = edge[1];
                int bandwidth = edge[2];
                int delay = edge[3];
                
                if (node_bandwidths[u] >= d && node_bandwidths[v] >= d && bandwidth >= d) {
                    adj[u].push_back({v, delay});
                }
            }
            
            vector<int> dist(n, INT_MAX);
            dist[s] = 0;
            
            priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
            pq.push({0, s});
            
            while (!pq.empty()) {
                auto [currentDelay, u] = pq.top();
                pq.pop();
                
                if (currentDelay > dist[u]) {
                    continue;
                }
                
                if (u == t) {
                    return dist[t];
                }
                
                for (auto& [v, delay] : adj[u]) {
                    if (dist[u] + delay < dist[v]) {
                        dist[v] = dist[u] + delay;
                        pq.push({dist[v], v});
                    }
                }
            }
            
            return dist[t] == INT_MAX ? -1 : dist[t];
        }
    };
    

    Java:

    import java.util.*;
    
    public class Solution {
        public int find_min_delay_path(int n, int s, int t, int[] node_bandwidths, 
                                      int[][] edges, int d) {
            if (node_bandwidths[s] < d || node_bandwidths[t] < d) {
                return -1;
            }
            
            List<int[]>[] adj = new ArrayList[n];
            for (int i = 0; i < n; i++) {
                adj[i] = new ArrayList<>();
            }
            
            for (int[] edge : edges) {
                int u = edge[0];
                int v = edge[1];
                int bandwidth = edge[2];
                int delay = edge[3];
                
                if (node_bandwidths[u] >= d && node_bandwidths[v] >= d && bandwidth >= d) {
                    adj[u].add(new int[]{v, delay});
                }
            }
            
            int[] dist = new int[n];
            Arrays.fill(dist, Integer.MAX_VALUE);
            dist[s] = 0;
            
            PriorityQueue<int[]> pq = new PriorityQueue<>(Comparator.comparingInt(a -> a[1]));
            pq.offer(new int[]{s, 0});
            
            while (!pq.isEmpty()) {
                int[] current = pq.poll();
                int u = current[0];
                int currentDelay = current[1];
                
                if (currentDelay > dist[u]) {
                    continue;
                }
                
                if (u == t) {
                    return dist[t];
                }
                
                for (int[] neighbor : adj[u]) {
                    int v = neighbor[0];
                    int delay = neighbor[1];
                    
                    if (dist[u] + delay < dist[v]) {
                        dist[v] = dist[u] + delay;
                        pq.offer(new int[]{v, dist[v]});
                    }
                }
            }
            
            return dist[t] == Integer.MAX_VALUE ? -1 : dist[t];
        }
    }
    

    Python:

    import heapq
    
    class Solution:
        def find_min_delay_path(self, n, s, t, node_bandwidths, edges, d):
            if node_bandwidths[s] < d or node_bandwidths[t] < d:
                return -1
            
            adj = [[] for _ in range(n)]
            
            for edge in edges:
                u, v, bandwidth, delay = edge
                
                if node_bandwidths[u] >= d and node_bandwidths[v] >= d and bandwidth >= d:
                    adj[u].append((v, delay))
            
            dist = [float('inf')] * n
            dist[s] = 0
            
            pq = [(0, s)]
            
            while pq:
                current_delay, u = heapq.heappop(pq)
                
                if current_delay > dist[u]:
     

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

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

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

    全部评论

    相关推荐

    09-26 18:47
    已编辑
    西安邮电大学 Java
    自我介绍2分钟,直接开始八股拷打40min:1.java对比其他语言的优势和劣势2.深拷贝和浅拷贝(没答上来)3.面向对象编程的设计原则(没答上来)4.spring有哪些配置(没听懂没答上来)5.接口和抽象类的区别6.mysql索引的好处7.为什么默认使用innodb&nbsp;优势在哪8.事务的特性9.一条updata语句是原子性的吗(没听懂啥意思)10.int(1)和int(10)的区别&nbsp;(被坑了&nbsp;完全不知道这两个是一样的11.http响应状态码12.如果访问一个网页一直转圈不显示内容怎么排查13.堆内存和栈的一些问题14七层模型&nbsp;每一层干嘛的(答了一半)15.icmp是在哪一层16.三次握手17.一个6层的完全二叉树叶子结点有8个&nbsp;那么树的节点最多最少分别有多少(不知道是埋坑还是题目错了)怎么都画不出来&nbsp;应该是没法形成一个完全二叉树18.各个排序算法稳定性和时间复杂度,一个一个问&nbsp;有些记不清了就是懵19.如果要从上千万条的文本中找出出现次数前十的单词你的思路是什么?20.linux文件相关指令有哪些?进程相关的指令(没想起来)21.从一个文件中找出某些字段&nbsp;用什么指令?22.mysql有哪些常用函数?23.mysql使用自增主键还有uuid&nbsp;好处和坏处24.in和exist的区别和性能其他问题:为什么选择超聚变对测试装备开发岗位的了解你认为你在科研中印象最深的一次解决问题的经历是什么&nbsp;有什么感受?应该还有一些问题记不清了反问:您觉得我回答的好吗?基础可以吗面试官:你自己感觉呢?反问2:大概多久出结果?面试官:我现在就写面评&nbsp;很快就有结果&nbsp;不知道后续流程怎么样总结:难度没有互联网厂那么大&nbsp;但是鼠鼠拼尽全力无法战胜&nbsp;八股还需加强
    查看27道真题和解析
    点赞 评论 收藏
    分享
    先简述下时间,楼主八月底投的超聚变,九月中给楼主感谢信,进人才库了,之后九月二十多号突然发笔试???做完后两天就约面了。。问题不分先后,主要是围绕着项目来问的。1.jvm内存模型是什么样的。(jvm虚拟机内存模型,程序计数器,栈,堆,元空间巴拉巴拉)2.springbean生命周期,其中比较重要的阶段?(实例化,依赖注入,初始化,这阶段比较重要,可以对其进行加工,比如各种aware接口,获取bean的name啊巴拉巴拉)3.幂等性是什么,你在项目中怎么实现的。(多次操作的结果和一次操作结果一致,通过控制记录的全局唯一id,状态机)4.设计个秒杀系统。(前端。。网关。。后端消息队列。。Redis。。数据库。。)5.对于堆和栈的溢出,你有什么看法?(堆中存储对象过多,通过垃圾回收机制巴拉巴拉。栈中递归过深?楼主对栈这块没准备太好)6.我看你项目,前后端都是自己写的对吗?前端用的什么框架?(前期用的vue2,后期用的vue3)你用的时候觉得这俩有啥区别?(vue2加载太慢了,学校电脑本来就不好。。vue2比较臃肿,因为vue3可以模块复用,比如一个下载按钮ps:这块楼主不知道说的对不对,确实对前端了解不多,只是用过)7.那前端的那些组件使用的啥?(element&nbsp;UI)8.MySQL数据过多,比如几亿条,该怎么办?(分库分表?垂直水平巴拉巴拉,还提了一嘴数据库中最好不要那么多数据,两千万就差不多了)9.后端如果有异常,日志方面如何设计排查?(真不会,楼主直接说项目中用的ruoyi框架自带的日志)10.项目中那些权限你是怎么划分的?(提了一嘴用jwt登录令牌,然后不知道了,说框架中可以选择用户权限)11.MySQL和Redis数据一致性怎么处理?(楼主紧张的不行,脑子放空,一直在扯Redis和MySQL中要有同一记录号,后面说了双写策略和淘汰策略)12.分布式事务怎么处理?(紧张到脑子空白+1,就说了分布式锁。可能应该说CAP理论,2pc,3pc,tcc那些东西的)13.你写前端的时候有遇到过页面加载过慢的情况吗,怎么处理的。(有次设计功能的时候,把一条记录挂载的其他记录全部树状渲染了,巨卡。后来把他做成了分页,直接带原纪录id号路由跳转就好了)14.你有用过多线程吗?怎么实现的?(线程池)线程池自己配的还是直接用的(自己配)咋配的(根据CPU还是io密集型,因为项目中有个电商项目,所以说了下io密集型,直接按CPU线程数×2)15.那线程池如果线程拒绝了,你是怎么处理的?(没怎么听清,反问是不是说的拒绝策略,回答是,就说了四种拒绝策略,然后我说用的直接返回异常,不给开线程。)16.你项目中有用到哪些设计模式?(干懵了,就说了下spring的工厂模式,消息队列的发布订阅模式,然后提了一嘴项目中肯定用过其他模式,比如桥接模式,但是一时对应不起来)17.你觉得ai在工厂生产中能有什么帮助?(内心:我面的不是软开岗么,怎么问这个ai做文档,然后ai安排日期做排产规划啥的。)18.假如现在有个服务器,服务器需要各个组件,如何让ai知道服务器的各组件已经不缺失?(没太听明白,说了ai可以多模态,比如拍照,但是现在ai图像处理这块不太靠谱,要是我的话,应该会把各组件的详细记录数据喂给ai。不知道自己在说啥)19.MySQL如果有些记录查询慢怎么办?(慢查询日志定位,explain命令看这些语句是否走索引,没走的话确定原因,没有索引就加,走了但是在range等级之下就排查原因巴拉巴拉)20.MySQL默认存储引擎的事务级别(可重复读)再提一嘴,主要是扣着你项目来的,然后面试官很好,很有耐心(ps:楼主语速比较快,属于那种想到什么说什么的类型,有几次面试官话还没说完楼主就开始说话了pps:楼主以为面试官问题说完了,绝对不是故意打断面试官说话的[牛泪楼主道歉,然后面试官就说你说吧没事)最后反问:有几轮面试?(三轮,这次技术面,后面还有综合面,还有问题吗?)楼主说没了,因为这是楼主秋招的第一次面试,有点紧张,不好意思。(没事,已经很好了。)
    查看20道真题和解析
    点赞 评论 收藏
    分享
    评论
    点赞
    收藏
    分享

    创作者周榜

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