[架构之路-254]:目标系统 - 设计方法 - 软件工程 - 软件设计 - 架构设计 - 全程概述
目录
一、软件架构概述
1.1 什么是软件架构
1.2 为什么需要软件架构设计
1.3 软件架构设计在软件设计中位置
(1)软件架构设计(层次划分、模块划分、职责分工):
(2)软件高层设计、概要设计(功能模块的接口与协作细节):
(3)软件详细设计(模块内具体实现方式):
1.4 软件架构设计与概要设计、详细设计的区别
1.5 软件架构发展历程与类型
二、软件架构设计包含的内容*****(重点)
三、软件架构的评估标准:好的软件架构的特点
四、对架构设计的常见误解
五、架构设计的步骤
六、典型的软件架构描述:面向对象的UML 4+1视图
一、软件架构概述
1.1 什么是软件架构
软件架构是指在软件系统中,定义系统的整体结构和组织的过程以及所定义的结构本身。它描述了软件系统中各个组件之间的关系、模块的功能和相互作用方式。
软件架构旨在解决软件系统的复杂性和可维护性问题,它提供了一个抽象层次的视图,使开发人员和利益相关者能够更好地理解和沟通软件系统的设计和特性。
软件架构对于软件开发过程至关重要,它提供了一个稳定的基础,为系统的各个阶段,包括需求分析、设计、编码、测试和部署提供了指导。一个良好的软件架构不仅能够提高软件系统的质量和可维护性,也能够降低开发和维护的风险。
1.2 为什么需要软件架构设计
件架构设计是软件开发过程中至关重要的一部分,它涉及到软件系统的核心结构、组成部分、互相之间的相互关系、以及如何满足系统的需求和性能指标等方面。软件架构设计是为了提高软件系统的可维护性、可扩展性、可重构性、可重用性、安全性和可靠性等方面。
具体来说,软件架构设计的重要性体现在以下方面:
-
避免代码腐化。代码腐化是指由于过多的修改、增加和删除操作,导致软件系统代码结构变得松散、难以理解和维护的情况。软件架构设计可以帮助开发团队在最初的开发阶段就规划好软件系统的整体结构和组成,从而确保软件系统后续的代码开发更具有可靠性和稳定性,并最大程度地避免代码腐化。
-
降低维护成本。软件架构设计可以帮助开发团队更好地组织系统结构和代码实现,使得系统模块化、可重用、可维护的特性更加突出,从而降低了维护所需要的成本和难度,并提高了系统的可靠性。
-
改变开发模式。软件架构设计可以使开发过程变得系统化和规范化。在此基础上,技术团队可以更好地分工合作,降低沟通成本,提高开发效率。
-
改善软件质量。软件架构设计可以有助于在设计阶段发现和避免一些常见的软件设计问题。通过使用最佳实践和经典的软件架构模式,可以最大程度地提高软件的可重用性、可维护性和可扩展性,从而改善软件的整体质量。
-
提高安全性。软件架构设计对于提高软件系统的安全性也起到了关键作用。通过设计可靠的安全架构,开发团队可以在整个开发周期中对软件系统进行安全审查,以保护软件系统免受黑客和其他安全威胁的侵害。
综上所述,软件架构设计是软件开发过程中必不可少的一环,对于确保软件系统质量和功能完整性至关重要。
1.3 软件架构设计在软件设计中位置
软件架构设计、软件高层设计和软件详细设计是软件开发中三个重要的设计层次,它们各自关注不同的设计方面,如下所述:
(1)软件架构设计(层次划分、模块划分、职责分工):
软件架构是软件需求确定后的软件开发的起点!!!!
软件架构设计确定软件系统的整体结构和组织方式,包括系统的分层、模块划分、框架选择等。系统架构设计关注系统的稳定性、可靠性和可扩展性,以及系统各个组成部分之间的交互和接口。软件架构设计是从系统整体级别出发,通过对系统的组成部分、各部分之间的关系及其所承担的功能等进行梳理和设计,确定系统总体的结构风格、包括框架和组件的分配、接口、数据流动等。软件架构设计的目的是为整个系统提供一个坚实、可靠、高效、稳定和可维护的基础,需要考虑因素包括系统的可用性、可伸缩性、可维护性、可安全性等。关注整体的非功能性需求!!!
(2)软件高层设计、概要设计(功能模块的接口与协作细节):
软件高层设计是在软件架构设计的基础上进行的,它关注的是系统中各个模块和组件的功能细节和交互方式,确定系统各个模块之间的接口方式和合理的协作关系,从而实现系统的预期功能。由于高层设计服务于架构设计,其需要考虑到诸如结构合理、功能完备,以及后期的扩展和调整等目标。关注接口定义,与编程语言无关!!!
(3)软件详细设计(模块内具体实现方式):
软件详细设计是在软件高层设计的基础上进一步细化,关注的是每个模块和组件的实现和具体实现方式,包括数据结构、算法、代码实现等方面的细节问题,其目的是为软件开发的人员提供具有可行性和可实现性的详细设计方案。详细设计涉及到诸如如何编写代码、如何测试代码、如何实现功能等具体实现问题,其层次较为具体化,详细设计直接指导编码实现!与具体的编程语言相关!!!
因此,软件架构设计、软件高层设计和软件详细设计在软件开发的不同阶段发挥着至关重要的作用。一个好的设计方案可以有效地解决软件开发中的复杂性和不确定性,并提高软件的可靠性、可维护性和可扩展性。
1.4 软件架构设计与概要设计、详细设计的区别
软件架构设计、概要设计和详细设计是软件开发过程中的三个不同层次的设计活动。
它们分别关注系统的整体结构、模块之间的关系和具体的实现细节,有不同的目标和范围。
软件架构设计是最高层次的设计活动,它关注的是系统的整体结构和组织,定义系统的主要组件、它们之间的关系和相互作用方式。软件架构设计主要包括选择适当的架构风格和模式,划分模块和组件,定义系统的接口和交互规范等。它的目标是在满足系统需求的同时,实现可扩展性、可维护性、可靠性等质量属性。功能模块的划分和非功能特征是软件架构设计关注的重点!!!
概要设计则更为详细,着重于定义软件系统的模块和子系统,在软件架构的基础上,进一步划分和定义各个模块的功能和职责。概要设计通常会提供模块之间的接口定义,描述各模块的输入输出和交互逻辑。它的目标是使开发人员能够更好地理解系统的模块结构和相互关系,为详细设计提供一个基础。模块之间的接口定义是概要设计关注的重点!!!
详细设计是最底层的设计活动,它关注的是每个模块的具体实现细节。在详细设计中,开发人员会根据概要设计,定义模块的算法、数据结构、函数接口、内部逻辑等。详细设计通常会针对每个模块提供详细的设计文档或代码实现,以实现系统的具体功能。模块内部的算法+数据结构是详细设计的关注重点!!!
总结起来:
- 软件架构设计关注整体结构和组织,定义系统的主要组件、接口和相互作用方式。
- 概要设计则进一步定义了模块和子系统的功能和职责,提供模块之间的接口定义。
- 详细设计则更深入地定义每个模块的具体实现细节,包括算法、数据结构和函数接口等。
这三个设计活动相互关联且逐层细化,为软件开发提供了清晰的指导和结构。
1.5 软件架构发展历程与类型
软件架构的发展历程可以追溯到计算机科学的早期发展。
下面是软件架构的主要发展里程碑:
-
五架构阶段 - 早期软件-汇编式编程:20世纪50年代和60年代,软件开发主要集中在机器语言和汇编语言上。此时并没有明确的软件架构概念,程序员主要关注的是算法和数据的功能实现。所以才有软件=算法+数据结构的说法。
-
萌芽阶段 - 过程式编程-函数式编程:20世纪60年代和70年代,随着高级编程语言(如FORTRAN、COBOL、ALGOL)的出现,开发人员开始更关注程序的结构和模块化。这一时期的主要软件架构风格是过程式编程,将程序组织为子程序的层次结构。
-
初级阶段 - 模块化和信息隐藏-结构化编程:20世纪70年代和80年代,软件架构开始引入模块化和信息隐藏的概念。这种风格将软件系统分解为更小的、独立的模块,每个模块具有明确定义的接口和功能。它提供了更好的代码重用性和可维护性,且模块之间的细节被隐藏起来。
-
高级阶段 - 面向对象编程-面向对象编程:20世纪80年代和90年代,面向对象编程(OOP)开始流行起来。OOP将数据和操作封装为对象,并通过继承、封装和多态等机制实现代码的可重用性和灵活性。这一时期兴起了一些经典的架构模式,如MVC(Model-View-Controller),4+1视图就是这个阶段的成果。
-
分布式和客户端/服务器架构-分布式编程:20世纪90年代以后,随着互联网的迅速发展,分布式系统和基于客户端/服务器的架构变得流行起来。这种架构允许系统的各个组件运行在不同的机器上,并通过网络进行通信和协调。
-
服务导向架构(SOA)- 组件式编程:21世纪初期,服务导向架构的概念出现。SOA将软件系统划分为独立的、可重用的服务组件,这些组件通过松散的耦合方式相互交互。SOA强调系统的可组装性和灵活性。
-
微服务架构:近年来,随着云计算和容器技术的发展,微服务架构成为热门话题。微服务架构将应用程序划分为小型、自治的服务,每个服务都具有自己的数据库和业务逻辑。它提倡松耦合、可独立开发和部署的服务组件。
总的来说,软件架构的发展历程不断演变,从过程式编程到模块化、面向对象编程、分布式架构,再到服务导向架构和微服务架构等。每个阶段都为软件系统的高效开发和演化提供了重要的思想和技术基础。
二、软件架构设计包含的内容*****(重点)
软件架构设计是指在软件开发过程中,对系统整体结构和组织进行规划和设计的过程。
它关注的是系统的高层次结构,包括系统的组成部分、它们之间的关系和相互作用。
软件架构设计包括以下内容:
-
架构风格和模式 -:选择适合系统的架构风格和模式,如分层架构、客户端-服务器模式、微服务架构等。不同的架构风格和模式有不同的特点和适用场景。
-
架构目标和要求 - 非功能性需求:明确软件系统的目标和要求,包括性能、可靠性、可扩展性、可维护性、安全性等方面的非功能性需求!!!
-
系统组成和模块划分 - 功能性需求:确定系统的组成部分和模块划分,将系统功能分解成独立的模块或组件,确立模块之间的关系和依赖。
-
接口设计:定义模块之间的接口和通信方式,明确模块之间的交互规范和约定,包括数据格式、消息传递方式等。
-
数据管理和存储:设计系统的数据管理和存储策略,包括数据库设计、数据缓存、数据传输等。
-
部署和扩展:规划系统的部署架构,包括硬件设施、服务器集群、负载均衡等,并考虑如何扩展系统以满足将来的需求。
-
安全和隐私保护:考虑系统的安全性和隐私保护,设计合适的安全策略和机制,保护系统中的数据和功能免受恶意攻击和滥用。
-
性能和可扩展性:关注系统的性能和可扩展性,设计合理的架构和算法,以满足系统的性能需求,并确保系统能够在面对增加的负载时进行扩展。
-
错误处理和容错机制:设计系统的错误处理和容错机制,包括异常处理、错误日志、事务回滚等,确保系统能够在异常情况下保持稳定和可恢复性。
-
可维护性和演化性:考虑系统的可维护性和演化性,设计模块化和松耦合的架构,使系统易于修改和维护,并能够适应需求的变化。
综上所述,软件架构设计是一个综合性的任务,需要综合考虑多个因素来确定系统的整体结构和组织,以实现系统目标和满足用户需求。
三、软件架构的评估标准:好的软件架构的特点
一个好的软件架构应该具备以下特点:
-
模块化:将系统分解为相互关联且独立的模块(高内聚、低耦合),每个模块负责特定的功能或服务,以便于开发和维护。
-
可扩展性:系统的架构应该支持系统的扩展,能够容纳新的功能需求和适应不断变化的环境。
-
可靠性:通过合理的设计和结构,减少系统中的故障点,提高系统的可靠性和稳定性。
-
可维护性:良好的软件架构能够使系统易于理解、修改和维护,降低开发和维护的成本和风险。
-
性能:架构应该能够满足系统的性能需求,包括响应时间、吞吐量、并发性和资源利用率等。
-
安全性:在架构设计中应该考虑系统的安全需求,确保系统的数据和功能免受恶意攻击和未经授权的访问。
-
可移植性:良好的软件架构应该能够方便地迁移到不同的平台和环境中,提高软件的可移植性。
备注:
软件架构,除了业务功能的模块化之外,其他的都是满足系统的非功能性需求!!!
也就是说,软件架构本身重点不是关注在系统的功能性实现上,而是关注软件系统能够满足系统的非功能性需求上!!!软件的功能性需求由概要设计和详细设计完成!!!!
四、对架构设计的常见误解
在架构设计中,存在一些常见的误解,以下是其中几个:
-
误解一:架构设计只是关于技术。事实是,技术只是架构设计的一部分。架构设计不仅涉及技术决策和选择,还涉及到业务需求、系统可扩展性、安全性、可维护性、可测试性等方面的考虑。架构设计需要综合考虑技术与业务之间的平衡,以实现系统的整体目标。
-
误解二:架构设计是一次性的。很多人错误地认为架构设计只需要在项目开始时进行一次,然后就可以一劳永逸。实际上,架构设计是一个持续的过程,需要随着项目的发展进行不断地演进和调整。随着需求的变化和技术的进步,架构需要灵活适应新的挑战和要求。
-
误解三:架构设计是一项孤立的任务。架构设计应该是一个团队的协作过程,需要与业务人员、开发人员、测试人员以及其他利益相关者进行密切的沟通和合作。架构设计需要考虑各个角色的需求和意见,以达到系统的整体目标。
-
误解四:架构设计只是关于技术堆栈的选择。尽管技术堆栈是架构设计中的一部分,但架构设计更加注重解决业务问题和实现业务目标。架构设计需要考虑系统的可伸缩性、可靠性、安全性、性能等方面,以满足业务的需求。
-
误解五:架构设计是唯一的正确答案。每个项目都有其独特的需求和限制条件,因此不存在一种通用的“正确”架构设计。架构设计应该基于特定的上下文和目标进行定制,需要权衡各种因素并做出适当的决策。
总之,架构设计是一项综合性的任务,需要考虑技术、业务和利益相关者的需求。了解这些常见的误解可以帮助人们更好地理解和实践架构设计工作。
五、架构设计的步骤
架构设计的步骤可以简化为以下几个阶段:
-
确定业务需求:首先需要明确业务需求,了解系统要解决哪些问题,以及要达成的业务目标。需要和业务人员充分交流,明确所需功能和非功能需求,以及系统面临的挑战和风险。
-
制定架构方案:在了解业务需求的基础上,制定适合系统的架构方案。这个阶段需要考虑数据模型、应用程序架构、技术堆栈、服务端和客户端架构、安全性、可伸缩性、可靠性等因素。也需要根据系统的规模和实现的具体目标,权衡不同架构方案之间的优缺点。
-
评估和优化方案:制定架构方案后,需要评估其可行性和实际效果,并对方案进行优化。评估的方法可以是对架构进行客观的指标评估和模拟分析,比如性能和可扩展性方面的测试,或者进行具体的实验和原型制作。
-
详细设计和实施:在确定并评估好架构方案之后,需要进一步进行详细设计和实施。这个阶段需要对方案进行详细说明和文档化,并且依据需求进行输出。这个阶段也包括开发和测试等工作,以及数据库、服务器和客户端代码的编写。
-
维护和演进:系统架构不是一次性的设计,而是随着时间和业务需求不断变化和演进的过程。需要对系统进行维护和持续改进,不断优化架构和技术。
总之,一个合理的系统架构需要通过对业务需求的深入理解,采用系统的思考方式来实现的。这个过程涉及多个阶段,包括需求确定、架构方案制定、方案评估和优化、详细设计和实施以及维护和演进。
六、典型的软件架构描述:面向对象的UML 4+1视图
逻辑视图:功能性需求描述
进程视图:非功能性需求描述
开发视图:程序员视图
物理视图:目标系统视图
相关文章:

[架构之路-254]:目标系统 - 设计方法 - 软件工程 - 软件设计 - 架构设计 - 全程概述
目录 一、软件架构概述 1.1 什么是软件架构 1.2 为什么需要软件架构设计 1.3 软件架构设计在软件设计中位置 (1)软件架构设计(层次划分、模块划分、职责分工): (2)软件高层设计、概要设计…...
centos7上源码安装mysql--运维高级
第一步,安装必要的依赖: yum install -y cmake ncurses-devel bison gcc gcc-c make unzip libaio numactl 第二步,创建mysql用户和组: wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.18.tar.gz tar zxvf mysql-5.7.18.tar.gz 第三步,下载MySQL 5.7.18 源码…...

Linux小程序之进度条
> 作者简介:დ旧言~,目前大二,现在学习Java,c,c,Python等 > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:自己能实现进度条 > 毒鸡汤: > …...

Grafana采用Nginx反向代理
一、场景介绍 在常规操作中,一般情况下不会放开许多端口给外部访问,特别是直接 ip:port 的方式开放访问。但是 Grafana 的请求方式在默认情况下是没有任何规律可寻的。 为了满足业务需求(后续通过 Nginx 统一一个接口暴露 N 个服务…...

Python接口自动化测试如何设计接口测试用例(详解)
简介 上篇我们已经介绍了什么是接口测试和接口测试的意义。在开始接口测试之前,我们来想一下,如何进行接口测试的准备工作。或者说,接口测试的流程是什么?有些人就很好奇,接口测试要流程干嘛?不就是拿着接口…...

Spring不再支持Java8了
在今天新建模块的时候发现了没有java8的选项了,结果一查发现在11月24日,Spring不再支持8了,这可怎么办呢?我们可以设置来源为阿里云https://start.aliyun.com/ 。 java8没了 设置URL为阿里云的地址...
Android 实现APP可切换多语言
如果是单独给app加上国际化,其实很容易,创建对应的国家资源文件夹即可,如values-en,values-pt,app会根据当前系统语言去使用对应语言资源文件,如果找不到,则使用values文件夹里的资源 但本文讲得是另外一种情况,就是app内置一个切换多语言的页面,可以给用户切换 步骤 1.添加服务…...

Redis大key与热Key
什么是 bigkey? 简单来说,如果一个 key 对应的 value 所占用的内存比较大,那这个 key 就可以看作是 bigkey。具体多大才算大呢?有一个不是特别精确的参考标准: bigkey 是怎么产生的?有什么危害?…...
SQL通配符字符
SQL通配符字符 通配符字符用于替代字符串中的一个或多个字符。通配符字符与LIKE运算符一起使用。LIKE运算符用于在WHERE子句中搜索列中的指定模式。 示例 返回所有以字母 a 开头的客户: SELECT * FROM Customers WHERE CustomerName LIKE a%; 通配符字符 符号…...
力扣 144.二叉树的前序遍历
目录 1.解题思路2.代码实现2.1获得节点数接口:2.2递归接口:2.3最终实现 1.解题思路 该题要利用前序遍历,将树的值存到数组中,所以在申请空间的时候,我们需要知道要申请多少空间,也就是要知道树到底有多少个结点,因此第…...
Ubuntu网络问题的解决
这里写目录标题 ubuntu 显示网络已连接,但是打不开浏览器:imagemagickimagemagick的安装imagick查看版本号imagemagick的命令介绍 ceres solver 介绍 ubuntu 显示网络已连接,但是打不开浏览器: sudo service network-manager sto…...
Git 本地服务器搭建 Windows
git 安装参考:Git的安装、配置、使用01【Git Bash Here命令行操作】-CSDN博客 gitLab 服务端安装及配置参考:Windows环境搭建 Gitlab 服务器_gitlab windows_测试工程师成长之路的博客-CSDN博客...

【数值计算方法(黄明游)】常微分方程初值问题的数值积分法:欧拉方法(向后Euler)【理论到程序】
文章目录 一、数值积分法1. 一般步骤2. 数值方法 二、欧拉方法(Euler Method)1. 向前欧拉法(前向欧拉法)2. 向后欧拉法(后向欧拉法)a. 基本理论b. 算法实现 常微分方程初值问题的数值积分法是一种通过数值方…...

mac安装homebrew/brew遇到443
文章目录 问题描述解决方法方法一方法二 参考文献 问题描述 brew 全称Homebrew 是Mac OSX上的软件包管理工具 想在mac终端安装,运行网上提供的指令 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)&quo…...

VSCODE 在新窗口中打开
使用VS习惯了,经常在新窗口中打开查看 但是VSCODE,无法拖动标签到一个新窗口中,一直以为没这个功能 后来发现 使用快捷健 ctlk,o 可以将标签页在新窗口中打开,虽然不如vsstudio方便,不过也可实现在新窗口打开的功能…...
Python与设计模式--解释器模式
23种计模式之 前言 (5)单例模式、工厂模式、简单工厂模式、抽象工厂模式、建造者模式、原型模式、(7)代理模式、装饰器模式、适配器模式、门面模式、组合模式、享元模式、桥梁模式、(11)策略模式、责任链模式、命令模式、中介者模…...

代码随想录算法训练营第36天| 435. 无重叠区间 763.划分字母区间 56. 合并区间
JAVA代码编写 435. 无重叠区间 给定一个区间的集合 intervals ,其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。 示例 1: 输入: intervals [[1,2],[2,3],[3,4],[1,3]] 输出: 1 解释: 移除 [1,3] 后&#x…...

1990-2021年上市公司排污费和环境保护税数据
1990-2021年上市公司排污费和环境保护税数据 1、时间:1990-2021年 2、指标: 证券代码、会计期间、year、month、行业、应缴排污费/环境保护税、其中:大气污染物、其中:水污染物、其中:固体废物、其中:噪…...

MySQL主从复制架构
MySQL主从复制架构 一、MySQL集群概述 ##1、集群的主要类型 高可用集群(High Available Cluster,HA Cluster) 高可用集群是指通过特殊的软件把独立的服务器连接起来,组成一个能够提供故障切换(Fail Over)…...

制作心理咨询小程序的详细指南
随着科技的的发展,小程序已经成为了人们日常生活中不可或缺的一部分。特别是在心理咨询这个领域,小程序可以提供一个更为便捷、高效的服务平台。本文将通过乔拓云平台为例,详细介绍如何制作一个心理咨询小程序。 首先,我们需要注册…...

IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...

macOS 终端智能代理检测
🧠 终端智能代理检测:自动判断是否需要设置代理访问 GitHub 在开发中,使用 GitHub 是非常常见的需求。但有时候我们会发现某些命令失败、插件无法更新,例如: fatal: unable to access https://github.com/ohmyzsh/oh…...

医疗AI模型可解释性编程研究:基于SHAP、LIME与Anchor
1 医疗树模型与可解释人工智能基础 医疗领域的人工智能应用正迅速从理论研究转向临床实践,在这一过程中,模型可解释性已成为确保AI系统被医疗专业人员接受和信任的关键因素。基于树模型的集成算法(如RandomForest、XGBoost、LightGBM)因其卓越的预测性能和相对良好的解释性…...
【java】【服务器】线程上下文丢失 是指什么
目录 ■前言 ■正文开始 线程上下文的核心组成部分 为什么会出现上下文丢失? 直观示例说明 为什么上下文如此重要? 解决上下文丢失的关键 总结 ■如果我想在servlet中使用线程,代码应该如何实现 推荐方案:使用 ManagedE…...

Yolo11改进策略:Block改进|FCM,特征互补映射模块|AAAI 2025|即插即用
1 论文信息 FBRT-YOLO(Faster and Better for Real-Time Aerial Image Detection)是由北京理工大学团队提出的专用于航拍图像实时目标检测的创新框架,发表于AAAI 2025。论文针对航拍场景中小目标检测的核心难题展开研究,重点解决…...

vue3 手动封装城市三级联动
要做的功能 示意图是这样的,因为后端给的数据结构 不足以使用ant-design组件 的联动查询组件 所以只能自己分装 组件 当然 这个数据后端给的不一样的情况下 可能组件内对应的 逻辑方式就不一样 毕竟是 三个 数组 省份 城市 区域 我直接粘贴组件代码了 <temp…...

论文笔记:Large Language Models for Next Point-of-Interest Recommendation
SIGIR 2024 1 intro 传统的基于数值的POI推荐方法在处理上下文信息时存在两个主要限制 需要将异构的LBSN数据转换为数字,这可能导致上下文信息的固有含义丢失仅依赖于统计和人为设计来理解上下文信息,缺乏对上下文信息提供的语义概念的理解 ——>使用…...