广告
返回顶部
首页 > 资讯 > 前端开发 > html >如何解决spring检测循环依赖
  • 346
分享到

如何解决spring检测循环依赖

2024-04-02 19:04:59 346人浏览 泡泡鱼
摘要

今天就跟大家聊聊有关检测循环怎么用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。今天为CodeTop补充的题目是检测循环依赖。循环依赖检测。如,[[

今天就跟大家聊聊有关检测循环怎么用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

今天为CodeTop补充的题目是检测循环依赖。

  • 循环依赖检测。如,[['A', 'B'], ['B', 'C'], ['C', 'D'], ['B', 'D']] => false,[['A',  'B'], ['B', 'C'], ['C', 'A']] => true(2021.4 字节跳动-幸福里-后端)[2]

  • 手撕代码:小王写了一个makefile,其中有n个编译项编号为0~n-1,他们互相之间有依赖关系。请写一个程序解析依赖,给出一个可行的编译顺序。(2021.03  字节跳动-系统部-后端)[3]

有的面试官要求判断是否有循环依赖;有的则要求给出一个可行的顺序。

解决这类问题的利器就是——拓扑排序

只要你会BFS,会层次遍历二叉树

你很快就能掌握拓扑排序的写法。

题目描述

现有n个编译项,编号为0 ~ n-1。给定一个二维数组,表示编译项之间有依赖关系。如[0, 1]表示1依赖于0。

若存在循环依赖则返回空;不存在依赖则返回可行的编译顺序。

题目分析

若给定一个依赖关系是[[0,2],[1,2],[2,3],[2,4]],如图所示

如何解决spring检测循环依赖

可以看出,它们之间不存在循环依赖。

可行的编译序列是[0,1,2,3,4],也可以是[1,0,2,4,3]等。

拓扑排序可以求这样的一个序列。可以看出,这个序列结果可能不唯一。

拓扑排序算法过程:

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2. 选择图中一个入度为0的点,记录下来

  3. 在图中删除该点和所有以它为起点的边

  4. 重复1和2,直到图为空或没有入度为0的点。

用下图举个例子,看看拓扑排序算法的过程。res用于存储结果序列。

如何解决spring检测循环依赖

图片入度为0的点有两个,我们任选一个。比如选择点0,记录至res;删除点0及以它为起点的边。

如何解决spring检测循环依赖

然后选择点1,同样记录下来;删除点1及以它为起点的边。

如何解决spring检测循环依赖

入度为0的点现在只有点2,把它记录下来;删除点2及以它为起点的边。

如何解决spring检测循环依赖

同理。选择点3,记录下来;删除点3及以它为起点的边。

如何解决spring检测循环依赖

选择点4,记录下来;删除点4及以它为起点的边。

如何解决spring检测循环依赖

图为空,算法结束。

最终,res存储的就是拓扑排序的结果,即题目中的可行编译顺序。

如果图中存在循环依赖呢?

例如依赖关系是[[0,1],[1,2],[2,1],如图所示。

如何解决spring检测循环依赖

按照拓扑排序的算法,找到入度为0的点0存下来,然后删除。

如何解决spring检测循环依赖

然后就没有入度为0的点了,算法结束!

我们发现,可以使用res.size() == n 来判断图中是否有环。其中,n为点的个数。

这就是拓扑排序算法。

代码实现应该就很好理解了~我们借助BFS来实现拓扑排序,队列中存储入度为0的点。

下面我提供c++python两个版本的代码。推荐大家背下来,背一些模板代码是很有必要的。

如果你感觉拓扑排序没问题了,去尝试做LeetCode210. 课程表 II吧~

PS:之前没接触过图的同学,可能不太理解参考代码中存储图结构的g。其实很简单,对于下图来说。

如何解决spring检测循环依赖

g = [[2]     #表示0->2      [2]     #表示1->2      [3, 4]  #表示2->3,2->4      []      #表示没有以3为起点的边      []]     #表示没有以4为起点的边

参考代码

C++ 版本

vector<int> haveCircularDependency(int n, vector<vector<int>> &prerequisites) {     vector<vector<int>> g(n); //邻接表存储图结构     vector<int> indeg(n); //每个点的入度     vector<int> res; //存储结果序列     for(int i = 0; i < prerequisites.size(); i ++) {         int a = prerequisites[i][0], b = prerequisites[i][1];          g[a].push_back(b);         indeg[b] ++;     }     queue<int> q;     //一次性将入度为0的点全部入队     for(int i = 0; i < n; i ++) {         if(indeg[i] == 0) q.push(i);     }     while(q.size()) {         int t = q.front();         q.pop();         res.push_back(t);         //删除边时,将终点的入度-1。若入度为0,果断入队         for(int i = 0; i < g[t].size(); i ++) {             int j = g[t][i];             indeg[j] --;             if(indeg[j] == 0) {                 q.push(j);             }         }     }     if(res.size() == n) return res;     else return {}; }

Python 版本

def haveCircularDependency(self, n: int, prerequisites):     g = [[]for i in range(n)] #邻接表存储图结构     indeg = [0 for i in range(n)] #每个点的入度     res = [] #存储结果序列     q = deque()     #将依赖关系加入邻接表中g,并各个点入度     for pre in prerequisites:         a, b = pre[0], pre[1]         g[a].append(b)         indeg[b] += 1     #一次性将入度为0的点全部入队     for i in range(n):         if indeg[i] == 0:             q.append(i)     while q:         t = q.popleft()         res.append(t)         #删除边时,将终点的入度-1。若入度为0,果断入队         for j in g[t]:             indeg[j] -= 1             if indeg[j] == 0:                 q.append(j)     if len(res) == n:         return res     else:         return []

看完上述内容,你们对检测循环怎么用有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网html频道,感谢大家的支持。

--结束END--

本文标题: 如何解决spring检测循环依赖

本文链接: https://www.lsjlt.com/news/81618.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何解决spring检测循环依赖
    今天就跟大家聊聊有关检测循环怎么用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。今天为CodeTop补充的题目是检测循环依赖。循环依赖检测。如,[[...
    99+
    2022-10-19
  • spring中如何解决循环依赖
    这期内容当中小编将会给大家带来有关spring中如何解决循环依赖,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.由同事抛的一个问题开始我们先看看当时出问题的代码片段:@...
    99+
    2022-10-19
  • Spring怎么解决循环依赖
    本篇内容介绍了“Spring怎么解决循环依赖”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!写在前面最近,在...
    99+
    2022-10-19
  • Spring轻松解决循环依赖
    目录解决循环依赖的原理源码解析总结Spring 框架是一个流行的Java应用程序框架,它提供了许多强大的功能,如依赖注入和面向切面编程。然而在使用 Spring 框架时,我们可能会遇...
    99+
    2023-05-16
    Spring循环依赖怎么解决 Spring循环依赖
  • 如何解决Spring循环依赖问题
    本文小编为大家详细介绍“如何解决Spring循环依赖问题”,内容详细,步骤清晰,细节处理妥当,希望这篇“如何解决Spring循环依赖问题”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。公共代码package&nbs...
    99+
    2023-07-02
  • spring循环依赖问题如何解决
    本篇内容介绍了“spring循环依赖问题如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、三种循环依赖的情况①构造器的循环依赖:这种...
    99+
    2023-07-02
  • Spring循环依赖产生与解决
    目录循环依赖产生情景Spring如何解决循环依赖循环依赖产生情景 探讨如何解决循环依赖之前,更应该思考清楚什么情况下会发生这种问题? 1、模拟Prototype Bean的循环依赖 ...
    99+
    2022-12-20
    Spring如何解决循环依赖 Spring循环依赖
  • Spring循环依赖的解决方法
    这篇文章主要介绍Spring循环依赖的解决方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!循环依赖其实就是循环引用,很多地方都说需要两个或则两个以上的bean互相持有对方最终形成闭环才是循环依赖,比如A依赖于B,B...
    99+
    2023-06-06
  • Spring Boot循环依赖怎么解决
    本文小编为大家详细介绍“Spring Boot循环依赖怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“Spring Boot循环依赖怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧...
    99+
    2023-07-05
  • Java Spring 循环依赖解析
    目录1、常见问题2、什么是循环依赖?3、循环依赖说明4、BeanCurrentlyInCreationException5、依赖注入的两种方式方式一:构造器方式注入依赖方式二:以 s...
    99+
    2022-11-13
  • 怎么解决Spring循环依赖问题
    本篇内容介绍了“怎么解决Spring循环依赖问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言循环依赖...
    99+
    2022-10-19
  • Spring三级缓存解决循环依赖
    目录一级缓存为什么不能在实例化A之后就放入Map?二级缓存 二级缓存已然解决了循环依赖问题,为什么还需要三级缓存?三级缓存 源码 我们都知道Spring中的BeanFactory是一...
    99+
    2022-11-12
  • Spring循环依赖问题怎么解决
    在Spring中,循环依赖问题是指两个或多个bean之间出现相互依赖的情况。由于Spring容器默认使用单例模式管理bean,因此循...
    99+
    2023-08-31
    Spring
  • Spring循环依赖的解决方案详解
    目录简介方案1. Feild注入单例(@AutoWired)方案2. 构造器注入+@Lazy方案3. Setter/Field注入单例方案4. @PostConstruct方案5. ...
    99+
    2022-11-13
  • java循环依赖如何解决
    在Java中,循环依赖是指两个或多个类之间存在相互依赖关系,导致无法编译或运行的情况。解决循环依赖的方法可以有以下几种: 重构代...
    99+
    2023-10-23
    java
  • Spring解决循环依赖的示例分析
    这篇文章主要介绍Spring解决循环依赖的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!  这里我们先借用一张图来通过视觉感受一下,看图:    其实,通过上面图片我想你应该能看图说话了,所谓的循环依赖其实就...
    99+
    2023-06-25
  • spring循环依赖策略解析
    循环依赖所谓循环依赖就是多个Bean之间依赖关系形成一个闭环,例如A->B->C->...->A 这种情况,当然,最简单的循环依赖就是2个Bean之间互相依赖:A->B(A依赖B), B->A(B依赖A)...
    99+
    2023-05-31
    spring 循环 依赖策略
  • 怎么理解Spring循环依赖
    本篇内容介绍了“怎么理解Spring循环依赖”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!通常来说,如果问Spring内部如何解决循环依赖,...
    99+
    2023-06-16
  • Spring解决循环依赖的方式有哪些
    小编给大家分享一下Spring解决循环依赖的方式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!循环依赖就是N个类中循环嵌套引用,如果在日常开发中我们用new...
    99+
    2023-06-16
  • spring循环依赖解决的方法是什么
    Spring循环依赖是指两个或多个Bean之间存在相互依赖的情况。在Spring容器启动时,如果存在循环依赖,会抛出BeanCurr...
    99+
    2023-09-27
    spring
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作