当前位置: 首页 > news >正文

边界内聚和耦合

内聚

在这里插入图片描述

功能内聚

功能内聚是软件工程中一个重要的概念,它描述了一个模块内部各个元素之间的紧密程度。一个具有高功能内聚的模块意味着其内部的各个组件都共同完成一个具体的、明确的功能,并且这些组件之间的联系不是偶然的,而是因为它们共同服务于同一个功能目标。下面具体分析功能内聚的含义、场景、如何评估软件模块的功能内聚程度和实现功能内聚的挑战:

  1. 含义:功能内聚指的是模块内的所有元素都共同完成一个单一的功能。这种内聚类型是最理想的,因为它确保模块高度集中于执行单一任务,易于理解和维护[1][5]。
  2. 场景:功能内聚适用于那些需要集中完成一项具体任务的模块。例如,一个简单的计算器程序,其中所有的功能都围绕着进行数学计算这一核心任务设计[1][5]。
  3. 评估方式:评估软件模块的功能内聚程度可以通过检查模块内部各组件是否都直接贡献于完成一个明确的功能来实现。如果模块中的每个元素都是完成该功能不可或缺的部分,那么可以认为该模块具有较高的功能内聚性[1][5]。
  4. 挑战:实现功能内聚的主要挑战在于确保模块专注于单一功能而不被其他不相关的功能干扰。这要求开发者在设计模块时进行细致的规划,避免将不相关的功能错误地组合在一起,从而保持模块的清晰和专注[1][5]。

此外,为了进一步理解功能内聚的应用与重要性,可以考虑以下几个方面:

  1. 设计原则:在软件设计中,应遵循“高内聚低耦合”的原则。这意味着除了追求高内聚外,还应努力减少模块间的依赖,使每个模块尽可能独立[3]。
  2. 重构意义:对现有代码进行重构以提高功能内聚度,有助于提升软件的可维护性和可扩展性。通过识别并分离出不相关的功能,可以使模块更加专注于其主要任务[1][5]。
  3. 团队协作:在团队开发环境中,鼓励团队成员理解和实践功能内聚的概念,可以促进更清晰、更高效的协作和沟通[1][5]。

总的来说,功能内聚是软件设计中一种理想的模块状态,它体现了模块内部各元素为了同一功能目标而紧密合作的状态。在软件开发中,达到功能内聚的模块更有利于提高软件的可维护性和扩展性。因此,开发者在设计模块时,应努力实现功能内聚,从而提升整个软件系统的质量和性能[1][5]。

顺序内聚

顺序内聚是软件工程中模块设计的一种类型,它指的是一个模块中的处理元素必须按特定顺序执行,且前一个元素的输出成为后一个元素的输入。以下是对顺序内聚的详细介绍:

  • 含义:顺序内聚发生在模块中的各组成部分都密切相关于同一功能,并且这些部分必须按照特定的顺序执行。在这种内聚类型中,一个组件的输出数据将直接作为下一个组件的输入数据[2][5]。
  • 场景:顺序内聚适用于那些操作步骤具有明确先后顺序的场景。例如,在汽车制造线上,一个工位负责安装轮胎,紧接着下一个工位进行轮胎检验,这两个工位的任务都是顺序进行的。在这种情况下,每个任务的完成都是下一任务开始的前提[2]。
  • 评估方式:评估顺序内聚程度可以通过检查模块内部各组件是否都紧密关联同一功能,并且是否存在明确的数据流,即前一组件的输出是否是下一组件的必需输入来实现。如果模块的设计确保了这种数据流和顺序性,那么可以认为该模块具有较高的顺序内聚性[1][3]。
  • 挑战:实现顺序内聚的挑战在于确保模块内的各个组件之间的交互既有序又高效。这要求开发者在设计模块时仔细规划数据流和处理逻辑,以确保每个组件都能接收到正确的输入并产生预期的输出。同时,还需要确保这种顺序执行不会影响模块的性能或可维护性[4]。

通信内聚

通信内聚是软件工程中模块设计的一种类型,它指的是一个模块中的各组成部分都通过全局数据结构进行交云通信。以下是对通信内聚的详细介绍:

  • 含义:在通信内聚的模块中,所有处理元素都访问同一个全局数据结构,它们通过这个共享的数据结构来交换信息[2]。这种类型的内聚通常出现在使用共享内存或数据库的应用中,其中各个模块或组件需要频繁地读取和写入同一块内存区域或数据库表。
  • 场景:通信内聚适用于那些需要多模块共同协作完成任务的场景。例如,多个模块可能需要访问同一个配置文件,或者多个模块共同维护一份数据。在这种场景下,一个模块的输出数据可能成为其他模块的输入数据[1][3]。
  • 挑战:实现通信内聚的挑战在于确保模块间的数据共享不会导致数据不一致性和同步问题。这要求开发者在设计模块时仔细规划全局数据结构的访问方式,以确保所有模块都能正确地读写数据,同时避免竞态条件和死锁等问题[4]。

过程内聚

过程内聚,是指在一个模块内部,所有操作都与一个单一的目的或过程相关联,但这些操作并不直接相互关联。以下是对过程内聚的详细介绍:

  • 含义:过程内聚通常出现在那些包含一系列执行步骤的模块中,其中每个步骤都是为完成同一过程而设计的,但这些步骤可能并不共享数据或不需要直接通信[2]。
  • 场景:过程内聚适用于那些具有明确处理流程的场景,例如,一个模块负责处理用户注册,包括验证电子邮件、检查用户名是否唯一、设置密码等步骤。这些步骤都是为了完成用户注册这一目的,但它们各自独立,不依赖于其他步骤的输出[1][3]。
  • 挑战:实现过程内聚的挑战在于确保模块内的每个操作都紧密地围绕核心过程设计,同时保持操作之间的独立性。这要求开发者在设计模块时仔细规划每个步骤的职责,以确保它们虽然独立但又能共同完成整体目标[4]。

时间内聚

时间内聚,是指在一个模块内部,所有操作都在同一时间段内执行,通常与特定的时间触发事件或条件相关联。以下是对时间内聚的详细介绍:

  • 含义:时间内聚强调的是模块内部各个操作的执行时机。这些操作可能在功能上并不直接相关,但它们都需要在特定的时间点或时间段内被触发或执行。例如,一个定时任务可能包括清理缓存、备份数据和更新系统状态等多个操作,这些操作都被安排在夜间低峰时段执行,以减少对系统性能的影响[2]。
  • 场景:时间内聚适用于那些需要基于时间执行任务的场景。例如,日报生成模块会在每天结束时运行,或者一个监控模块可能在每5分钟检查一次系统状态。在这些场景中,任务的执行时间比任务之间的直接关系更为重要[1][3]。
  • 挑战:实现时间内聚的挑战在于确保模块能够准确地在预定的时间点执行操作。这要求开发者在设计模块时考虑时间管理,使用诸如定时器、调度器或外部时间触发信号等机制来确保操作按时执行。同时,还需要考虑时间同步和时区差异等问题,以确保在不同环境下都能正确执行[4]。

逻辑内聚

逻辑内聚,通常指的是模块内部的操作在逻辑上属于同一类别,或者模块内部的各个组成部分都针对同一种数据或抽象概念进行操作。以下是对逻辑内聚的详细介绍:

  • 含义:逻辑内聚强调的是模块内部操作的逻辑关联性。这些操作可能处理相同的数据类型,或者执行相同类别的任务。例如,一个模块负责所有与用户权限管理相关的操作,如添加、删除和更新用户权限,这些操作在逻辑上都是关于“用户权限”的管理[2]。
  • 场景:逻辑内聚适用于那些涉及特定领域或业务规则的场景。例如,一个金融软件中可能有一个模块专门处理所有与贷款申请相关的操作,如审核、批准和拒绝贷款。在这些场景中,模块的操作都围绕着同一业务概念或数据实体展开[1][3]。
  • 挑战:实现逻辑内聚的挑战在于确保模块内部的所有操作都紧密地围绕核心逻辑或数据实体设计。这要求开发者在设计模块时深入理解业务需求和数据模型,以确保所有操作都属于同一逻辑类别。同时,还需要避免将不相关的操作错误地组合在一起,这可能会导致模块的功能过于复杂,难以维护和扩展[4]。

偶然内聚

偶然内聚,通常指的是模块内部的各个组成部分之间没有直接的关系,它们的组合更多是基于巧合或便于开发和维护的考虑,而不是因为它们在功能上密切相关。以下是对偶然内聚的详细介绍:

  • 含义:偶然内聚是一种相对较弱的内聚形式,它发生在模块内部的各个操作或功能之间没有实质性的联系,仅仅是因为外部因素(如开发历史、程序员的个人喜好或技术限制)而被放在一起[2]。
  • 场景:偶然内聚通常不是设计之初的目标,而是随着时间推移,由于不断添加新功能或修改现有代码而逐渐形成的。例如,一个最初只包含文件读写操作的模块,可能随着时间的推移,加入了与数据处理和用户界面交互无关的功能,仅仅因为这些功能的实现恰好由同一位开发者负责[1][3]。
  • 挑战:实现偶然内聚的挑战在于,随着模块功能的增加,模块的职责可能会变得模糊,导致代码难以理解和维护。这种内聚类型可能会削弱模块的可重用性和可测试性,因为它将不相关的功能捆绑在一起,使得模块难以适应变化[4]。

耦合

在这里插入图片描述

非直接耦合

非直接耦合,也称为间接耦合,是指两个模块之间不是直接发生数据交换,而是通过第三方模块或接口进行交互。以下是对非直接耦合的详细介绍:

  • 含义:在非直接耦合中,模块A与模块B之间的依赖关系被解耦,它们不直接通信,而是通过一个中间层(如服务总线、事件队列或共享数据库)来传递信息。这种设计可以减少模块间的直接依赖,提高系统的灵活性和可维护性。
  • 场景:非直接耦合适用于需要降低模块间紧密联系的复杂系统。例如,在微服务架构中,不同的服务之间通过API网关进行通信,而不是直接调用彼此的服务。这种设计允许各个服务独立部署和扩展,而不会影响到其他服务[1][3]。
  • 挑战:实现非直接耦合的挑战在于确保中间层的稳定性和性能。如果中间层出现故障或性能瓶颈,可能会影响到整个系统的运行。因此,开发者需要仔细设计中间层,确保其可靠性和效率[4]。

数据耦合

数据耦合是模块间通过简单数据参数进行交互的一种形式,它传递的是基本数据类型而非复杂的对象或控制信息。以下是对数据耦合的详细介绍:

  • 含义:数据耦合指的是两个模块之间仅通过数据参数进行交互,而不共享复杂的数据结构或控制信息。这种耦合方式使得模块间的联系相对简单,耦合度低,有助于提高模块的独立性和系统的可维护性[1][2]。
  • 场景:数据耦合适用于需要模块间通信但又想保持模块独立性的情况。例如,一个模块计算税额并返回结果给另一个模块,它们之间通过简单的数值传递信息,而不是通过复杂对象或控制结构[2]。
  • 挑战:实现数据耦合的挑战在于确保模块间传递的数据足够简单,不会增加不必要的依赖。同时,需要注意数据的安全性和完整性,避免在传递过程中被错误地修改或滥用[4]。

标记耦合

标记耦合在软件开发中是指两个模块之间通过传递数据结构进行交互,其中传递的通常是如数组名、记录名、文件名等高级语言中的复合数据类型[2]。其功能包括提高数据传输效率,模块化设计以及灵活性,面临的挑战有维护难度增加、模块间依赖性强和潜在的性能问题

  1. 标记耦合的概念与定义

    • 标记耦合是计算机领域中的一个术语,它描述了当两个模块之间传递的是数据结构时发生的关系[2]。在这种类型的耦合中,传递的实际上是数据结构的地址,这可能包括高级语言中的数组名、记录名、文件名等。
  2. 标记耦合的功能

    • 提高数据传输效率:通过传递数据结构的地址而非实际数据,减少了数据传输量,提高了传输效率[8]。
    • 模块化设计:允许开发者将复杂的数据结构封装在单独的模块中,其他模块通过标记(即数据结构的地址)来访问这些数据[7]。
    • 灵活性:模块间的交互更加灵活,一个模块可以仅使用数据结构中的部分信息,而不必关心其他无关数据[6]。
  3. 标记耦合的挑战

    • 维护难度增加:由于模块间共享了复合数据结构,一旦数据结构发生变化,所有依赖该结构的模块都可能受到影响,增加了维护的难度[10]。
    • 模块间依赖性强:标记耦合可能导致模块间高度依赖,一个模块的变动可能直接影响到另一个模块的正常运行[11]。
    • 潜在的性能问题:虽然标记耦合可以提高某些情况下的数据传输效率,但如果不当使用,也可能导致不必要的性能负担,特别是在处理大型数据结构时[14]。

针对标记耦合所面临的挑战,开发者在设计软件系统时应当采取适当措施以优化模块间的耦合关系:

  • 明确模块职责:确保每个模块的职责单一且明确,避免因过度耦合导致的维护困难。
  • 合理设计数据结构:在设计共享的数据结构时,应充分考虑其稳定性和未来可能的变化,尽量减少因数据结构变化带来的影响。
  • 限制数据结构的复杂度:避免设计过于复杂的数据结构,以减少理解和使用上的难度,同时减轻性能负担。

控制耦合

控制耦合是指一个模块调用另一个模块时,传递的是控制变量,被调模块通过该控制变量的值选择性地执行块内某一功能。控制耦合的功能在于提高模块间的通信效率和执行选择性功能。面临的挑战包括模块间依赖性增强、系统修改难度增加以及不利于系统可维护性

  1. 控制耦合的定义与概念

    • 定义:控制耦合是指模块之间在交互时,传递的是控制变量如开关或标志等,接收模块依据这些控制变量的值来选择执行特定的功能[1]。
    • 概念:这种耦合形式允许一个模块通过传递的控制信息影响另一个模块内部的执行路径[2]。
  2. 控制耦合的功能

    • 提高通信效率:通过传递控制标志,减少了模块间交互所需的数据量,从而提升了数据处理速度。
    • 执行选择性功能:使得被调用的模块能够根据传入的控制参数有选择地执行特定功能,增加了代码的灵活性和可重用性。
  3. 控制耦合的挑战

    • 模块间依赖性增强:控制耦合可能导致模块间依赖关系增加,修改一个模块的控制逻辑可能需要同时调整多个相关模块。
    • 系统修改难度增加:控制信息的改动往往需要深入了解影响的每一个模块的内部逻辑,增加了系统升级和维护的复杂度。
    • 不利于系统可维护性:高度的控制耦合可能导致系统难以维护,特别是在大型的软件开发项目中,跟踪和理解控制流变得更加困难。
  4. 控制耦合在软件设计中的应用策略

    • 减少不必要的控制信息传递:通过精简控制变量的数量和类型,尽量降低模块间的控制耦合程度。
    • 明确模块责任:每个模块应尽可能独立,避免因控制耦合导致的功能重叠,每个模块的职责应清晰界定。
    • 采用设计模式:适当使用设计模式如命令模式或策略模式,可以有效管理控制流,并降低模块间的直接控制耦合。
  5. 控制耦合的替代方案

    • 事件驱动架构:通过事件而非直接的控制变量来进行模块间的交互,可以进一步降低耦合度。
    • 服务导向架构(SOA):通过定义清晰的服务接口,使得模块间依赖性基于服务契约而不是控制流。

外部耦合

外部耦合是模块之间共享一个外部环境,如全局变量或外部设备,而产生的依赖关系。这种耦合形式在软件系统中较为常见,尤其是在多个模块需要访问同一资源时。下面将从多个角度对外部耦合进行深入分析:

  1. 定义与概念
    • 定义:外部耦合指的是两个或多个模块依赖于程序的外部环境或系统结构的耦合方式,例如通过全局变量或外部文件系统[2]。
    • 概念:这种耦合形式意味着模块间的交互不是直接进行的,而是通过一个外部媒介,这可能包括任何能被多模块访问的公共资源[4]。
  2. 功能与作用
    • 资源共享:外部耦合允许不同的模块访问和使用相同的资源,如数据库连接或配置文件,从而减少资源的重复创建和管理成本[1]。
    • 状态同步:通过共享外部环境,不同模块可以在一定程度上实现状态同步和数据共享,这对于某些应用来说是必要的[5]。
  3. 挑战与问题
    • 维护难度增加:当外部环境变化时,所有依赖于此环境的模块都可能受到影响,导致维护和修改工作复杂化[2]。
    • 模块间依赖性强:高度的外部耦合使得模块之间的独立性降低,一旦外部环境出现问题,可能影响整个系统的稳定运行[4]。
    • 可移植性差:依赖于特定外部环境的模块可能在迁移到其他平台或环境时遇到困难,影响软件的可移植性和灵活性[3]。
  4. 解决策略与替代方案
    • 模块化设计:尽量减少外部环境的依赖,将相关功能封装在独立模块内部,通过抽象接口与外部环境交互,以降低耦合度[1]。
    • 依赖注入:使用依赖注入等技术,将外部环境的依赖通过参数或配置的方式注入到模块中,提高模块的独立性和可测试性[2]。
    • 中间件隔离:引入中间件来管理和隔离外部资源的访问,模块通过中间件间接与外部环境交互,减少直接依赖[5]。

公共耦合

公共耦合是多个模块共享同一个全局数据环境时发生的耦合,这种全局数据环境可以是全程变量、共享的数据结构、内存的公共覆盖区以及任何存储介质上的文件等[2]。下面是对公共耦合的详细介绍:

  1. 公共耦合的定义与概念:公共耦合发生在两个或多个模块通过一个公共的数据环境进行交互时,这些模块间的依赖关系构成了公共耦合[1]。公共数据环境允许模块之间共享信息和数据,但同时也引入了较高的耦合度。
  2. 公共耦合的功能与作用:公共耦合使得不同模块能够访问和操作同一份数据,这在某些情况下可以减少数据的冗余存储,提高资源的利用率。同时,这也为不同模块之间的数据同步提供了便利。
  3. 公共耦合的挑战与问题:由于多个模块依赖同一公共数据环境,一旦该数据环境发生变化,所有相关的模块都可能受到影响,这增加了系统维护的难度。公共耦合可能导致模块间的高度依赖,降低系统的独立性和模块化程度。
  4. 解决策略与替代方案
    • 模块化设计:尽量将功能封装在独立的模块内部,减少对公共数据的直接依赖。
    • 抽象接口:通过定义清晰的接口来与公共数据环境交互,而非直接操作数据。
    • 依赖注入:使用依赖注入技术,将公共数据的访问和管理逻辑注入到需要的模块中。

内容耦合

内容耦合是最高级别的耦合,通常被认为是不良的设计实践。以下是对内容耦合的详细介绍:

  1. 内容耦合的定义与概念:内容耦合发生在一个模块直接访问或修改另一个模块的内部数据或程序代码时。这种情况下,被修改的模块依赖于修改它的模块,任何在后者的变动都可能直接影响到前者的行为和稳定性[1]。
  2. 内容耦合的功能与作用:尽管内容耦合通常被视为设计上的弊端,它在某些情况下可以快速实现模块间的紧密协作,特别是在原型制作或快速开发环境中。然而,这种便利性远远被其带来的风险和代价所超过。
  3. 内容耦合的挑战与问题:由于模块间的直接依赖性太强,任何微小的改动都可能导致系统出现预想不到的错误。同时,这种耦合方式极大地增加了代码的维护难度和出错概率,使得问题难以追踪和修复[1]。
  4. 内容耦合的解决策略与替代方案
    • 模块化设计:通过封装和抽象化,减少模块间直接的数据访问和代码共享。
    • 接口定义:使用清晰的接口定义模块间的交互,避免直接访问内部数据。
    • 依赖反转:高层模块不应当依赖于低层模块,而是依赖于抽象。
  5. 内容耦合的内聚性对比:内聚性是衡量一个模块内部各元素关联程度的指标,而内容耦合则关注模块间的依赖关系。高内聚性意味着模块独立性强,易于管理和维护;相反,内容耦合表明模块间界限模糊,导致系统脆弱和维护成本增加[2]。

相关文章:

边界内聚和耦合

内聚 功能内聚 功能内聚是软件工程中一个重要的概念,它描述了一个模块内部各个元素之间的紧密程度。一个具有高功能内聚的模块意味着其内部的各个组件都共同完成一个具体的、明确的功能,并且这些组件之间的联系不是偶然的,而是因为它们共同服…...

单调栈——AcWing.830单调栈

单调栈 定义 单调栈是一种特殊的数据结构,栈内元素保持某种单调性(通常是单调递增或单调递减)。 运用情况 求解下一个更大元素或下一个更小元素。计算每个元素左边或右边第一个比它大或小的元素。 注意事项 要明确单调栈是递增还是递减…...

手机上安装AI模型是一种什么体验?

昨天参加微软的AI DAY活动,看到微软的技术大佬分享了一个场景,就是坐飞机从上海到北京,机长广播因为天气原因,飞机需要盲降,他说当时听到盲降第一反应感觉有点恐慌,但是因为飞机上受限于网络环境&#xff0…...

【MySQL】主从复制

https://www.bilibili.com/video/BV1Kr4y1i7ru/?p161​ https://blog.csdn.net/qq_47959003/article/details/126058710 主从复制是指将数据库的DDL和DML操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做)&…...

vscode插件开发之 - menu配置

上一遍博客介绍了如何从0到1搭建vscode插件开发的base code,这遍博客将重点介绍如何配置menu。通常,开发一款插件,会将插件显示在VSCode 左侧的活动栏(Activity Bar),那么如何配置让插件显示在Activity Bar…...

自学C语言-9

** 第9章 函数 ** 大型程序一般会被分为若干个程序模块,每个模块实现一个特定功能 。C语言中,由函数实现子程序,由子程序实现模块功能。本章致力于使读者了解函数的概念,掌握函数的定义及调用方式;了解内部函数和外部…...

NVIDIA Triton系列01-应用概论

NVIDIA Triton系列01-应用概论 推理识别是人工智能最重要的落地应用,其他与深度学习相关的数据收集、标注、模型训练等工作,都是为了得到更好的最终推理性能与效果。 几乎每一种深度学习框架都能执行个别的推理工作,包括 Tensorflow、Pytorc…...

LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码

LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码 LIMS实验室信息管理系统,是一种基于计算机硬件和数据库技术,集多个功能模块为一体的信息管理系统。该系统主…...

Web前端进国企:挑战与机遇并存

Web前端进国企:挑战与机遇并存 随着互联网的飞速发展,Web前端技术已经成为企业信息化建设的重要组成部分。对于许多热衷于前端技术的年轻人来说,进入国企工作既是一种挑战,也是一种机遇。本文将从四个方面、五个方面、六个方面和…...

快速上手SpringBoot

黑马程序员Spring Boot2 文章目录 1、SpringBoot 入门程序开发1.1 创建一个新的项目 2、浅谈入门程序工作原理2.1 parent2.2 starter2.3 引导类2.4 内嵌tomcat 1、SpringBoot 入门程序开发 1.1 创建一个新的项目 file > new > project > empty Project 创建新模块&a…...

SQL 快速参考

SQL 快速参考 SQL(Structured Query Language)是一种用于管理关系数据库管理系统(RDBMS)的标准编程语言。它用于执行各种操作,如查询、更新、插入和删除数据库中的数据。本快速参考将提供SQL的基本语法和常用命令&…...

Cask ‘oraclexxx‘ is unavailable: No Cask with this name exists.

brew search oracle-jdk或brew search --cask oracle-jdk 原因:Homebrew官方仓库不再维护多个旧版本的OracleJDK 不推荐使用Homebrew环境安装JDK //指定版本安装 brew install --cask temurin17 //设置 JAVA_HOME 环境变量 //找到安装的JDK 版本的路径 /usr/lib…...

2024年武汉市中级、高级职称水测考试开卷方法分享

2024年武汉市(除开东湖高新区外)职称首次组织全员水测,先考水测后报名,水测报名在5月16号截止。 武汉市水测组织形式: 武汉市2024年专业技术职务水平能力测试分为笔试和面试,面试答辩有关事项另行通知&…...

计算机网络(6) ICMP协议

ICMP(Internet Control Message Protocol,互联网控制消息协议)是一种用于在IP网络中传递控制消息和错误报告的协议。ICMP是IP协议族的一部分,尽管它并不用于传输用户数据,但它在网络诊断和管理中起着关键作用。以下是关…...

FuTalk设计周刊-Vol.036

🔥AI漫谈 热点捕手 1、Stable Zero123:从单张图像生成高质量 3D 对象 Stable Zero123 可以生成物体的新颖视图,展示从各个角度对物体外观的 3D 理解,由于训练数据集和高程条件的改进,其质量比 Zero1-to-3 或 Zero123-XL 显著提高…...

Java——面向对象进阶(三)

前言: 抽象类,接口,内部类 文章目录 一、抽象类1.1 抽象方法1.2 抽象类1.3 抽象类的使用 二、 接口2.1 接口的定义和实现2.2 default 关键字2.3 实现接口时遇到的问题 三、内部类3.1 成员内部类3.2 静态内部类3.3 成员内部类3.4 匿名内部类&a…...

鸿蒙开发电话服务:【@ohos.telephony.observer (observer)】

observer 说明: 本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 import observer from ohos.telephony.observerobserver.on(‘networkStateChange’) on(type: ‘networkStateChange’, ca…...

希亦、追觅、云鲸洗地机:究竟有何不同?选择哪款更合适

最近收到很多私信里,要求洗地机测评的呼声特别高,作为宠粉的测评博主,当然是马上安排起来,满足大家对想看洗地机的愿望。这次洗地机测评,我挑选了三款热门的品牌型号,并从多个维度对它们进行使用测评&#…...

代码随想录算法训练营第二十六天

题目:455. 分发饼干 贪心第一题 这里的局部最优就是大饼干喂给胃口大的,充分利用饼干尺寸喂饱一个,全局最优就是喂饱尽可能多的小孩。或者小饼干先喂饱小胃口 首先要对 g 和 s进行排序这样才能知道最大的胃口和最大的饼干然后进行遍历即可…...

[面试题]Java【并发】

[面试题]Java【基础】[面试题]Java【虚拟机】[面试题]Java【并发】[面试题]Java【集合】[面试题]MySQL 因为 Java 并发涉及到的内容会非常多,本面试题可能很难覆盖到所有的知识点,所以推荐 《Java并发编程的艺术》 。 Java 线程 线程 通知 等待 线…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...