软考高级架构师——6、软件架构设计
像学写文章一样,在学会字、词、句之后,就应上升到段落,就应追求文章的“布局谋
篇”,这就是架构。通俗地讲,软件架构设计就是软件系统的“布局谋篇”。
人们在软件工程实践中,逐步认识到了软件架构的重要性,从而开辟了一个崭新的研究
领域。软件架构的研究内容主要涉及软件架构描述、软件架构设计、软件架构风格、软件架
构评价和软件架构的形成方法等。
软件设计人员学习软件架构知识旨在站在较高的层面上整体地解决好软件的设计、复用、
质量和维护等方面的实际问题。
1、软件架构概述
1.1、软件架构的定义
(1)架构是对系统的抽象(2)架构由多个结构组成(3)任何软件都存在架构(4)元素及其行为的集合构成架构的内容(5)架构具有“基础”性(6)架构隐含有“决策”
1.2、软件架构的重要性
(1)项目关系人之间交流的平台(2)早期设计决策(3)在较高层面上实现软件复用(4)架构对开发的指导与规范意义不容忽略
从软件开发过程来看,如果采用传统的软件开发模型(生命周期模型),则软件架构的建
立应位于概要设计之前,需求分析之后。
基于架构的软件开发模型则明确地把整个软件过程划分为架构需求、设计、文档化、评
审(评估)、实现、演化等 6 个子过程。
1.3、 架构的模型
结构模型 | 这是一个最直观、最普遍的建模方法。这种方法以架构的构件、连接 件和其他概念来刻画结构,并力图通过结构来反映系统的重要语义内容,包括系统的配置、 约束、隐含的假设条件、风格、性质。研究结构模型的核心是架构描述语言。 |
框架模型 | 框架模型与结构模型类似,但它不太侧重描述结构的细节而更侧重于 整体的结构。框架模型主要以一些特殊的问题为目标建立只针对和适应该问题的结构 |
动态模型 | 动态模型是对结构或框架模型的补充,研究系统“大颗粒”的行为性 质。例如,描述系统的重新配置或演化。动态可能指系统总体结构的配置、建立或拆除通信 通道或计算的过程 |
过程模型 | 过程模型研究构造系统的步骤和过程。因而结构是遵循某些过程脚本 的结果 |
功能模型 | 该模型认为架构由一组功能构件按层次组成,且下层向上层提供服务。 它可以看作是一种特殊的框架模型 |
“4+1”视图模型
逻辑视图 | 主要支持系统的功能需求,即系统提供给最终用户的服务。 在面向对象技术中,通过抽象、封装和继承,可以用对象模型来代表逻辑视图, 用类图来描述逻辑视图。 |
开发视图 | 也称为模块视图,主要侧重于软件模块的组织和管理。
|
进程视图 | 侧重于系统的运行特性,主要关注一些非功能性的需求,例如系统的性能和可用性。 进程视图强调并发性、分布性、系统集成性和容错能力,以及逻辑视图中的 主要抽象的进程结构。 |
物理视图 | 主要考虑如何把软件映射到硬件上,它通常要考虑到解决系统拓扑结
|
场景 | 可以看作是那些重要系统活动的抽象,它使四个视图有机地联系起来,从 确定架构的构件和它们之间的作用关系,分析一个特定的视图,或描述不同视图构 场景可以用文本表示,也可以用图形表示 |
逻辑视图和开发视图描述系统的静态结构,而进程视图和物理视图描述系统的动态结构。对于不同的软件系统来说,侧重的角度也有所不同。例如,对于管理信息系统来说,比较侧重于从逻辑视图和开发视图来描述系统,而对于实时控制系统来说,则比较注重于从进程视图和物理视图来描述系统。
2、架构需求与软件质量属性
软件属性包括功能属性和质量属性,但是,软件架构(及软件架构设计师)重点关注的
是质量属性。因为,在大量的可能结构中,可以使用不同的结构来实现同样的功能性,即功能性在很大程度上是独立于结构的,架构设计师面临着决策(对结构的选择),而功能性所关心的是它如何与其他质量属性进行交互,以及它如何限制其他质量属性。
2.1 软件质量属性
运行期质量属性 | 性能、安全性、易用性、可伸缩性、互操作性、可靠性、持续可用性、鲁棒性 |
开发期质量属性 | 易理解性、可扩展性、可重用性、可测试性、可维护性、可移植性 |
2.2 6 个质量属性及实现
本节从架构关注点来研究质量属性实现,将质量属性分为 6 种:可用性、可修改性、
性能、安全性、可测试性、易用性。其他的质量属性一般可纳入这几个属性中(在其他文献
中为了强调常单列出来),例如,可扩充性可归入可修改性中(修改系统容量),可移植性也
可以作为平台的可修改性来获得。对于未能纳入的其他质量属性,可以用本章的方法进行研
究。
可用性 | 目标是阻止错误发展成故障,至少能够把错误的影响限制在一定范围内,从而使修复成为可能 战术分为:错误检测、错误恢复、错误预防。 |
可修改性 | ①局部化修改。在设计期间为模块分配责任,以便把预期的变更限制在一定的范围内, ②防止连锁反应。由于模块之间有各种依赖性,因此,修改会产生连锁反应 |
性能 | 性能与时间相关,影响事件的响应时间有两个基本因素:资源消耗、闭锁时间 ① 资源需求:减少处理事件流所需的资源、减少所处理事件的数量、控制资源的使用 ② 资源管理:引入并发、维持数据或计算的多个副本、增加可用资源 |
安全性 | 战术: |
可测试性 | 战术: ① 输入/输出 |
易用性 | 战术: ① 运行时战术 |
3、软件架构风格
软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式( idiomaticparadigm)
数据流风格 | 批处理序列 | 顺序执行,只有当前一步处理完,后一步处理才能开始 |
管道/过滤器 | 每个构件都有一组输入和输出 | |
调用/返回风格 | 主程序/子程序 | 采用单线程控制,调用关系具有层次性 |
面向对象风格 | 对象负责维护其表示的完整性,对象的表示对其他对象而言是隐蔽的 | |
层次结构 | 每一层为上层服务,并作为下层客户 | |
独立构件风格 | 进程通信 | 构件是独立的过程,连接件是消息传递 消息传递的方式可以是点到点、异步和同步方式及远过程调用 |
事件系统 (隐式调用) | 触发或广播一个或多个事件 如:程序语法高亮、语法错误提示 | |
虚拟机风格 | 解释器 | 自定义流程,按流程执行,规则随时改变,灵活定义,业务灵活组合。 解释器:解释引擎、存储区、工作状态的数据结构、执行进度的数据结构四部分组成。 如:DDS和人工智能、专家系统、机器人系统 |
基于规则的系统 | ||
仓库风格 | 数据库系统 | 数据库构成:一个是中央共享数据源,保存当前系统的数据状态; 另一个是多个独立处理元素,处理元素对数据元素进行操作 超文本系统:早期的静态网页。 黑板(共享数据):选取各种黑板、知识源和控制模块的构件来设计 多用于语音识别,知识推理等复杂问题,解空间很大,求解过程不确定的这一类软件系统。 |
超文本系统 | ||
黑板系统 |
4、层次系统架构风格
C/S 架构 | ![]() |
B/S 架构 | ![]() |
MVC 架构风格 | ![]() |
MVP 架构风格 | 在 MVP 中 View 并不直接使用 Model,它们之间的通信是通过 Presenter ( MVC 中的 Controller)来进行的, 所有的交互都发生在 Presenter 内部,而在 MVC 中 View 会直接从 Model 中读取数据而不是通过 Controller。 |
5、面向服务的架构
(1) W3C 的定义: SOA 是一种应用程序架构,在这种架构中,所有功能都定义为独
立的服务,这些服务带有定义明确的可调用接口,能够以定义好的顺序调用这些服务来形成
业务流程。
(2) Service-architecture.com 的定义:服务是精确定义、封装完善、独立于其他服务
所处环境和状态的函数。 SOA 本质上是服务的集合,服务之间彼此通信,这种通信可能是
简单的数据传送,也可能是两个或更多的服务协调进行某些活动。服务之间需要某些方法进
行连接。
( 3) Gartner 的定义: SOA 是一种 C/S 架构的软件设计方法,应用由服务和服务使用
者组成, SOA 与大多数通用的 C/S 架构模型不同之处,在于它着重强调构件的松散耦合,
并使用独立的标准接口。
5.1、SOA 设计原则:
(1)明确定义的接口(2)自包含和模块化(3)粗粒度(4)松耦合(5)互操作性、兼容和策略声明
5.2、SOA 的关键技术
UDDI | Universal Description Discovery and Integration,统一描述、发现和集成 UDDI 规范描述了服务的概念,同时也定义了一种编程接口。通过 UDDI 提供的 标准接口,企业可以发布自己的服务供其他企业查询和调用,也可以查询特定服务的描述信 息,并动态绑定到该服务上。 (1)数据模型(2) API(3)注册服务 |
WSDL | Web Service Description Language, Web 服务描述语言 它包含服务实现定义和服务接口定义 |
SOAP | Simple ObjectAccess Protocol,简单对象访问协议 SOAP 用 XML 来格式化消息,用 HTTP 来承载消息。通过 SOAP, 应用程序可以在网络中进行数据交换和远程过程调用(Remote Procedure Call, RPC) (1)封装(2)编码规则(3) RPC 表示(4)绑定 |
REST | Representational State Transfer,表述性状态转移 设计概念和准则: (1) 网络上的所有事物都被抽象为资源。 |
5.3、SOA 的实现方法
Web Service | ![]() |
企业服务总线 | 服务注册表(service registry)虽然也具有运行时的功能,但主要在 SOA 设计时使用。 它提供一个策略执行点(Policy Enforcement Point, PEP),在这个点上,服务可以在 SOA 中 注册,从而可以被发现和使用。 |
服务注册表 | ESB 的概念是从 SOA 发展而来的,它是一种为进行连接服务提供的标准化的通信基础 结构,基于开放的标准,为应用提供了一个可靠的、可度量的和高度安全的环境,并可帮助 企业对业务流程进行设计和模拟,对每个业务流程实施控制和跟踪、分析并改进流程和性能。 |
5.4、微服务
将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于 HTTP 协议的 RESTfulAPI)。每个服务都围绕着具体业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。
微服务的优势
(1)技术异构性(2)弹性(3)扩展(4)简化部署(5)与结织结构相匹配(6)可组合性(7)对可替代性的优化
微服务面临的挑战
(1)分布式系统的复杂度(2)运维成本(3)部署自动化(4) DevOps 与组织结构(5)服务间依赖测试(6)服务间依赖管理
微服务与 SOA
6、架构设计
通过架构模式,架构设计师可以借鉴和复用他人的经验,看看类似的问题别人是如何解
决的。但不要把模式看成是一个硬性的解决方法,它只是一种解决问题的思路。 Martin Fowler
曾说:“模式和业务构件的区别就在于模式会引发你的思考。”
6.1、演变交付生命周期

6.2.属性驱动设计法
属性驱动设计法(Attribute-Driven Design, ADD)就是一种定义软件架构的方法,该方法将分解过程建立在软件必须满足的质量属性之上。 ADD 的输入为:功能需求(一般表示为用例)、限制条件和质量需求(一组特定于系统的质量场景)。
6.3.按架构组织开发团队
在架构的模块分解结构的最初几个层次相对稳定之后,就可以把这些模块分配给开发小组,其结果就是工作视图。
6.4.开发骨架系统
演变交付生命周期模型中有两个循环,第一个循环是通过迭代的方式开发出软件架构,第二个循环是在架构的基础上通过迭代的方式开发出交付的最终版本。开发骨架系统就是第二个循环的第一步。
6.5.利用商用构件进行开发
模式本来就是针对特定问题的解,因此,针对需求的特点,也可以选用相应的模式来设
计架构,并利用对应于该模式的商用构件进行软件开发。例如可以使用 J2EE/EJB 进行开发
面向对象的分布式系统。
7、软件架构文档化
记录软件架构的活动就是架构编档过程,也就是架构的文档化。它包含两个方面:一是过程,编档过程能促使架构设计师进一步思考,使得架构更加完善;二是结果,描述架构的文档将作为架构开发的成果,供项目关系人使用。
7.1.架构文档的使用者
架构文档的使用者是架构的项目关系人。编写技术文档(尤其是软件架构文档)最基本
的原则之一是要从读者的角度来编写,易于编写但很难阅读的文档是不受欢迎的。
7.2.软件编档(包括软件架构编档) 的规则
(1)从读者的角度编写文档。
(2)避免出现不必要的重复。
(3)避免歧义。
(4)使用标准结构。
(5)记录基本原理。
(6)使文档保持更新,但更新频率不要过高。
(7)针对目标的适宜性对文档进行评审。
7.3.视图编档
(1)视图概述:对系统进行概括性的描述,包含视图的主要元素和元素间的关系(但并不包含所有元素和元素间的关系。
(2)元素目录:对主要表示中所描述的元素及其关系进行详细描述,包括:元素及其 属性、关系及其属性、元素接口、元素行为。
(3)上下文图:用图形展示系统如何与其环境相关。
(4)可变性指南:描述架构的可变化点,如在软件产品线中,产品线架构通过变化,适用于多个系统,因此,文档中应包含这些变化点,如各系统要做出选择的选项、做出选择的时间。
(5)架构背景:为架构的合理性提供足够的、令人信服的论据。包括:基本原理、分析结果及设计中所反映的假定。
(6)术语表:对文档中每个术语进行简要说明。
(7)其他信息:描述不属于架构方面的必要信息,如管理信息(创作者、配置控制数
据及变更历史)。
7.4.跨视图文档
软件架构由多个视图文档来反映,按前面所述的要求完成每个视图的文档后,需要对这
些文档进行一个整体的“打包”工作,这就是跨视图文档。它包括如下内容:
(1)文档有哪些内容,它们是如何组织的:视图目录(含哪些视图);视图模板(即前
面描述的视图文档,企业可以通过规范化来定义统一的、公共的视图模板)。
(2)架构概述:它描述系统的目的、视图之间的关联、元素表及索引、项目词汇。
(3)为什么架构是这样的(基本原理):跨视图基本原理解释了整体架构实际上是其需
求的一个解决方案。即解释了做出决策的原因、方案的限制、改变决策时的影响及意义。
7.5.使用 UML
UML 已经成为对软件架构进行文档化的事实上的标准表示法。在视图文档的组织结构
中, UML 主要用于表示元素或元素组的行为。
7.6.软件架构重构
1)信息提取(View Extraction)。可以使用各种工具进行信息提取,如解析器、语法
分析器等;可以利用 build 和 makefile 文件中关于模块的依赖关系;可以从源代码、编译
时制品和设计制品中提取静态信息;可以使用分析工具提取动态信息。
(2)数据库构造(Database Construction):将提取的信息转化为标准的形式,并置于
数据库中。
(3)视图融合(View Fusion):将数据库中的信息组合在一起,生成该架构的一个内聚
的视图。
(4)重构(Reconstruction):构建数据抽象和各种表示以生成架构表示,主要由两个
活动组成:可视化和交互、模式定义和识别。最后生成需要的架构文档(Documentation)。
8、软件架构评估
软件架构评估是在对架构分析、评估的基础上,对架构策略的选取进行决策。它也可以
灵活地运用于对软件架构进行评审等工作中。
8.1 软件架构评估的方法
(1)基于调查问卷或检查表的方式:该方式的关键是要设计好问卷或检查表,它充分
利用系统相关人员的经验和知识,获得对架构的评估。其缺点是在很大程度上依赖于评估人
员的主观推断。
( 2)基于场景的方式:基于场景的方式由 SEI 首先提出并应用在架构权衡分析法
(Architecture Tradeoff Analysis Method, ATAM)和软件架构分析方法(Software Architecture
Analysis Method, SAAM)中。它是通过分析软件架构对场景(也就是对系统的使用或修改
活动)的支持程度,从而判断该架构对这一场景所代表的质量需求的满足程度。下节将对
ATAM 进行重点介绍。
(3) 基于度量的方式:它是建立在软件架构度量的基础上的,涉及三个基本活动,首
先需要建立质量属性和度量之间的映射原则,即确定怎样从度量结果推出系统具有什么样的
质量属性;然后从软件架构文档中获取度量信息;最后根据映射原则分析推导出系统的质量
属性。它能提供更为客观和量化的质量评估,但它对评估人员及其使用的技术有较高
的要求。 ATAM 中也使用了度量的思想(度量效用)。
8.2 架构的权衡分析法
从技术角度对软件架构进行评估,旨在通过分析来预见软件的质量;通过分析来创建、
选择、评估与比较不同的架构。例如, Kazman 等人在 2000 年提出的架构的 ATAM 方法。
ATAM 方法不但能够揭示架构如何满足特定的质量需求(例如,性能和可修改性),而且还
提供了分析这些质量需求之间交互作用的方法。使用 ATAM 方法评价一个软件架构的目的
是理解架构设计满足系统质量需求的结果。
ATAM 的 9 个步骤:
(1)ATAM 方法的表述
(2)商业动机的表述
(3)架构的表述
(4)对架构方法进行分类
(5)生成质量属性效用树
(6)分析架构方法
(7)集体讨论并确定场景的优先级
(8)分析架构方法
(9)结果的表述
8.3 成本效益分析法
在大型复杂系统中最大的权衡通常必须考虑经济性,因此,需要从经济角度建立成本、
收益、风险和进度等方面软件的“经济”模型。成本效益分析法(the Cost Benefit Analysis
Method, CBAM)是在 ATAM 上构建,用来对架构设计决策的成本和收益进行建模,是优
化此类决策的一种手段。
CBAM 的步骤:
(1)整理场景
(2)对场景进行求精
(3)确定场景的优先级
(4)分配效用
(5)架构策略涉及哪些质量属性及响应级别
(6)使用内插法确定“期望的”质量属性响应级别的效用
(7)计算各架构策略的总收益
( 8)根据受成本限制影响的 ROI( Return On Investment,投资报酬率)选择架构策略
9、构件及其复用
定义 1:构件是指软件系统中可以明确辨识的构成成分。而可复用构件( reusablecomponent)是指具有相对独立的功能和可复用价值的构件。
定义 2:构件是一个组装单元,它具有约定式规范的接口及明确的依赖环境。
定义 3:构件是软件系统中具有相对独立功能、可以明确辨识、接口由契约指定、和语境有明显依赖关系、可独立部署的可组装软件实体。
对构件更广义的理解是把所有种类的工作成品(例如,各类文档、方案、计划、测试案例、代码)都看成是可复用的构件。
相关文章:

软考高级架构师——6、软件架构设计
像学写文章一样,在学会字、词、句之后,就应上升到段落,就应追求文章的“布局谋 篇”,这就是架构。通俗地讲,软件架构设计就是软件系统的“布局谋篇”。 人们在软件工程实践中,逐步认识到了软件架构的重要性…...

虚拟内存相关笔记
虚拟内存是计算机系统内存管理的一个功能,它允许程序认为它们有比实际物理内存更多的可用内存。它使用硬盘来模拟额外的RAM。当物理内存不足时,操作系统将利用磁盘空间作为虚拟内存来存储数据。这种机制提高了资源的利用率并允许更大、更复杂的应用程序的…...
【linux】定时任务讲解
文章目录 一. 在某时刻只执行一次:at1. 设置定时任务2. 查看和删除定时任务 二. 周期性执行任务:cron1. 启动crond进程2. 编辑定时任务3. 查看和删除4. 用户权限4.1. 黑名单4.2指定用户 三. /etc/crontab的管理 一. 在某时刻只执行一次:at 1…...

安卓10创建文件夹失败
最近在做拍照录像功能,已经有了文件读写权限,却发现在9.0手机上正常使用,但是在安卓12系统上根本没有创建文件夹。经过研究发现,创建名称为“DCIM”的文件夹可以,别的又都不行。而且是getExternalStorageDirectory和ge…...
文件操作(c/c++)
文件操作可以概括为几步: 打开文件,写入文件,读取文件,关闭文件 FILE FILE 是一个在C语言中用于文件操作的库函数,它提供了一系列函数来实现文件的创建、打开、读取、写入、关闭等操作。FILE 库函数可以帮助开发者处理…...

设计模式-适配器
文章目录 一、简介二、适配器模式基础1. 适配器模式定义与分类2. 适配器模式的作用与优势3.UML图 三、适配器模式实现方式1. 类适配器模式2. 对象适配器模式3.类适配器模式和对象适配器模式对比 四、适配器模式应用场景1. 继承与接口的适配2. 跨平台适配 五、适配器模式与其他设…...

C. Queries for the Array - 思维
分析: 分析出现矛盾的地方,也就是可能遇到0,并且已有字符串的长度小于等于1,另一种情况就是,遇到了1并且已有字符串不是排好序的,或者遇到了0已有字符串是排好序的,那么可以遍历字符串ÿ…...

音频——硬件拓扑
文章目录 硬件拓扑I2S 数据通路五线模式四线模式两线 TX两线 RX 典型应用硬件连接数据流 硬件拓扑 控制路径:UART/I2C/SPI数据路径:I2S 简略图如下 I2S 数据通路 五线模式 四线模式 两线 TX 两线 RX 典型应用 硬件连接 控制信号:SPI 用…...
Oracle表索引查看方法总结(查看oracle表索引)
Oracle表索引查看方法总结 Oracle是当前应用最广泛的关系数据库,也是多数大型企业使用的数据库。Oracle表索引在提高查询效率方面起着至关重要的作用,掌握该方法也是技术人员必备技能之一。本文总结了几种常见的查看Oracle表索引信息的方法,…...

react css 污染解决方法
上代码 .m-nav-bar {background: #171a21;.content {height: 104px;margin: 0px auto;} }import React from "react"; import styles from ./css.module.scssexport default class NavBar extends React.Component<any, any> {constructor (props: any) {supe…...

volatile 关键字 与 CPU cache line 的效率问题
分析&回答 Cache Line可以简单的理解为CPU Cache中的最小缓存单位。目前主流的CPU Cache的Cache Line大小都是64Bytes。假设我们有一个512字节的一级缓存,那么按照64B的缓存单位大小来算,这个一级缓存所能存放的缓存个数就是512/64 8个。具体参见下…...

又一关键系统上线,理想车云和自动驾驶系统登陆OceanBase
8 月 1 日,理想汽车公布 7 月交付数据,理想汽车 2023 年 7 月共交付新车 34,134 辆,同比增长 227.5%,并已连续两个月交付量突破三万。至此,理想汽车 2023 年累计交付量已经达到 173,251 辆,远超 2022 年全年…...

SIEM(安全信息和事件管理)解决方案
什么是SIEM 安全信息和事件管理(SIEM)是一种可帮助组织在安全威胁危害到业务运营之前检测、分析和响应安全威胁的解决方案,将安全信息管理 (SIM) 和安全事件管理 (SEM) 结合到一个安全管理系统中。SIEM 技术从广泛来源收集事件日志数据&…...
Go 自学:map关联数组
以下代码展示了如何建立一个map。 我们可以使用delete删除map中的元素。 我们还可以使用loop遍历map中的所有元素。 package mainimport ("fmt" )func main() {languages : make(map[string]string)languages["JS"] "Javascript"languages[&qu…...
c#多态(override)的使用
方法重写(override):多态,通过父类类型对象,调用子类当中对应方法的实现。 细节:子类当中的override方法会“抹杀”父类当中对应virtual方法 不使用多态时,父类调用子类方法时,会调用父类的方法…...
kafka 动态扩容现有 topic 的分区数和副本数
文章目录 [toc]创建一个演示 topic生产一些数据使用消费者组消费数据增加分区无新数据产生,有旧数据未消费有新数据产生,有旧数据未消费 增加副本创建 json 文件使用指定的 json 文件增加 topic 的副本数使用指定的 json 文件查看 topic 的副本数增加的进…...
【数据结构】Golang 实现单链表
概念 通过指针将一组零散的内存块串联在一起 , 把内存块称为链表的“结点”。 记录下个结点地址的指针叫作后继指针 next ,第一个结点叫作头结点,把最后一个结点叫作尾结点 。 代码实现 定义单链表 在 golang 中可以通过结构体定义单链表…...

云服务器利用Docker搭建sqli-labs靶场环境
一、安装宝塔面板 使用xshell、electerm、SecureCRT等远程终端连接登陆上云服务器,在Linux宝塔面板使用脚本安装 安装后,如下图:按照提示,在云服务器防火墙/安全组放行Linux宝塔面板的端口 在浏览器打开上述网址,登…...
jQuery成功之路——jQuery介绍和jQuery选择器概述
一、jQuery介绍 1.1 jQuery概述 jQuery的概述 jQuery是一个快速、简洁的JavaScript框架。jQuery设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。JQuery封装了JavaScript常用的功能代码,提供了一套易于使…...

极限五分钟,在宝塔中用 Docker 部署升讯威在线客服系统
最近客服系统成功经受住了客户现场组织的压力测试,获得了客户的认可。 客户组织多名客服上线后,所有员工同一时间打开访客页面疯狂不停的给在线客服发消息,系统稳定无异常无掉线,客服回复消息正常。消息实时到达无任何延迟。 本文…...

css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...

AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...