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

【成为架构师课程系列】怎样进行概念架构(Conceptual Architecture)?

目录

前言

什么是概念架构

概念架构阶段的3个步骤

 初步设计

高层分割

分层式概念服务架构

Layer:逻辑层 

Tier: 物理层

按通用性分层

技术堆叠

考虑非功能需求

【禅与计算机程序设计艺术:更多阅读】


前言

胜兵先胜而后求战,败兵先站而后求胜。 -- 孙子,《孙子兵法 . 形篇》

人们常常使用战术,而忽略了战略。战略要求从大局上把握整个架构与设计......架构错误的代价非常高。 -- Stephane Faroult, 《SQL语言艺术》

架构新手和有经验的架构师的区别之一,在于是否懂得,并能有效的进行概念架构设计作为架构新手,尤其害怕碰到自己没有做过的系统:系统较大时,一点祭出“架构 = 模块 + 接口”的发布却不太奏效,架构新手就往往乱了阵脚。

有经验的架构师不会一上来就关注与如何定义“接口”,他们在大型架构设计的早期,比较注重识别重大需求特色需求高风险需求(抓重点关键问题),据此来设计概念架构。

另外,概念架构设计还是投标及售后工作的有力武器。金牌售前和普通售前的一个重要区别是,能否清晰的讲解概念架构,并借此说明 “客户关系的价值如何实现、担心的问题如何解决”

”Use Case驱动“的观点既有积极意义,也有不利影响。从积极的方面看,Use Case这种需求描述方式确实有助于分析模型,设计模型,实现模型和测试模型的建立.....但是从另一方面看,OOSE对Use Case的依赖程度超出了它的实际能力。 -- 邵伟忠, 《面向对象的系统设计》

顶级设计者在设计中并不是按部就班地采用自顶向下(或自底向上)的方法,而是着眼于权重更大的目标。这些目标通常是难点问题,设计者不能轻易地看出这些问题的解决方案。为了得到整个的设计方案,设计者必须先致力于难点的设计并消除其中的疑惑。 -- Robert L. Glass, 《软件工程的事实与谬误》

概念架构是大型系统架构设计成败的关键。

什么是概念架构

下面是宏伟的金门大桥,这么复杂的架构,桥梁架构师是怎么“开始设计”的呢?

 

答案是:概念架构(Conceptual Architecture)。下图展示了斜拉桥的概念架构示意图。由此图可以看出,概念架构高屋建瓴的给出高层解决方案:索塔负责承重,斜拉索吊起刚性梁。

 

下面,来看看软件行业(来自Dana Bredemeyer等专家)中概念架构的定义:

概念性架构界定系统的高层组件,以及它们之间的关系。概念性架构意在对系统进行适当分解,而不陷入细节。借此,可以与管理人员、市场人员、用户等非技术人员交流架构。概念性架构规定了每个组件的非正规约及架构图,但不涉及接口细节。(The Conceptual Architecture identifies the high-level components of the system, and the relatiooonships among them. Its purpose is to direct attention at an appropriate decomposition of the system without delving into details. Moreover, it proovides a useful vehicle for coommunicating the architecture to non-technical audiences, such as management, marketing, and users. It consists oof the Architecutre Diagram (without interface detail) and an informal component specification for each component.)

根据定义,我们注意到如下几点:

  • 概念架构满足“架构 = 组件 + 交互”的基本定义,只不过概念架构仅关注高层组件(high-level components)。
  • 概念架构对高层组件的“职责”进行笼统的界定(informal specification),并给出了高层组件之间的相互关系(Architecture Diagram)。
  • 概念架构不应涉及接口细节(withouot iinterface detaiil)。

概念架构阶段的3个步骤

概念架构设计分为3个步骤:

  1. 初步设计:基于关键功能,借助鲁棒图进行以发现职责为目的的初步设计。这一步并不总是需要,但对于架构师而言,是“新系统”就必须重视这一步。
  2. 高层分割:对系统这个黑盒子进行高层切分,例如切分复杂系统为多个二级系统,或者直接切分系统为具体子系统。
  3. 考虑非功能需求概念架构 ≠ 理想化架构,所以不仅要考虑功能,也必须考虑非功能。

 初步设计

好的开始是成功的一半。 -- 谚语

所谓鲁棒性分析时这样一种方法: 通过分析用例规约中的事件流,识别出实现用例规定的功能所需要的主要对象及其职责,形成以职责模型为主的初步设计 -- 温昱,《软件架构设计》

Conceptual Architecture阶段包含3个步骤:

  • 第1步,初步设计。
  • 第2步,高层分割。
  • 第3步,考虑非功能需求。

 

高层分割

复杂性是层次化的。 -- Frederick.P.Brooks,《人月神话》

分析与综合是思维方向相反的过程。一部是先分析后综合,没有分析就不能综合;没有综合的分析,也只有片面的分析。 -- 肖纪美,《梳理人、事、物的纠纷:问题分析方法》

“架构 = 模块 + 接口”的做法,其不足可概括为两点。

第一,忽视了多视图。“模块 + 接口”仅是逻辑架构设计视图的核心内容,而软件系统的架构设计还可能涉及开发视图、运行视图、物理视图、数据视图等多方面的考虑。

第二,忽略了概念架构设计。对规模较大的系统而言,都必须先根据重大风险(包含功能方面、质量方面、约束方面),有针对性的制定包括“高层分割”在内的设计决策,然后才是“模块 + 接口”一级的设计。

那么,如何对软件系统进行“高层分割”呢?这属于Conceptual Architecture阶段第2步的工作。

例子:PM系统的高层分割,采用了经典的4层架构方式。

 

分层式概念服务架构

人们常说,“分层式最流行的架构模式”。从字面上理解,这似乎意味着大家所进行的“分层”在思想层面上是一致的。但事实并非如此。在实践中,分层有不同的角度,并且互不矛盾。通常会总结为“3 + 1”流派。

  • Layer:逻辑层
  • Tier:物理层
  • 按通用性分层
  • 技术堆叠

Layer:逻辑层 

逻辑层(Layer)重视职责的划分,职责之间常常是上层使用下层的关系--但是根本不关心上层和下层是否“能分布”在不同机器上。

 

图片来源:Layered Business Architectures: Logical Structures

  • 图中的Services层对下层Domain Model部分的访问,是一种跨机器的远程访问吗?

答案是:不知道,也不关心。整个架构图中的箭头表示的是逻辑上服务使用关系,而对物理角度是否是跨机器的访问方式并不关心。

Layer分层 ≠ 按Tier分层。

  • 图中的User InterfaceServicesDomain ModelPersistent Data是通用性逐渐增加吗?(”通用性越大,所处层次就越靠下“是按通用性分层的常见方式。)

答案是:无法确定那一层更通用。例如,作为最下层的Persistent Data层本来支持硬盘,但后来要支持磁盘阵列,再后来要支持SAN(存储区域网络),这都要求存Persistent Data层要有针对性的进行改变。

Layer分层 ≠ 按通用性分层。

Tier: 物理层

物理层(Tier)指”能分布“在不同机器上的软件单元,不同的物理层之间必须有跨机器访问的能力--可以通过远程调用、或通讯协议等方式。

 

图片来源:Oracle Application Server Containers for J2EE

关于Tier这种分层方式, 最需要强调的是,几层(Tier)架构是看”能分布“的能力,不是看”实际部署情况“。

我们常说的Java EE应该是N-Layer的,因为从逻辑上来看,Java EE里面有表现层、业务逻辑层和数据持久层。从物理上而言,这3层可以在不同的Tier上(表现层在PC上,业务逻辑层在应用服务器上,数据持久层在数据库服务器上),也可以在一个Tier上,比如Martin说过,如果把数据库、应用服务器和浏览器都装在一台电脑上,那么3-layer就在1-tier上了。

这段话问题不小。

毕竟,”N-Tiers架构“的一大好处是可伸缩性--业务量小的时候将NTier都部署在同一台机器上 ,等业务量大的时候再为每个Tier单独安排一台或一组机器,这恰恰是"N-Tiers架构"的目标!所以,一个系统如果架构设计时是”4-Tiers架构“的,并且开发时也实现了这一点,那么把它们部署在同一台机器上并没有改变”4-Tiers架构“。最终,工程师的实际部署方案觉得了系统是几层(Tier)架构,这未免荒唐。

其实,总结出”3级“映射关系(而不是”两级“)就清楚了:

逻辑层Layer -> 物理层Tier -> 一台或一组计算机

关于按Tier分层 ,再看一例:微软的Azure虚拟网络系统,很明确的进行了不同的tier的划分,各层之间必然是能以进行跨机器方式的协议互相通讯的(只不过每个Tier的部署规模比较大罢了)。

图片来源:Azure中具有Apache Cassandra的Linux多層式架構 (N-tier) 應用程式

按通用性分层

严格来讲,按通用性分层是另一种Layer,但是,绝对有必要让它”独立门户“以引起实践者的足够重视。

按通用性分层式只:将通用性不同的部分划归不同的层,以此作为系统的总体切分方式。

一般而言,通用程度越大,所处层次就越靠下。

 

不同,嵌入式系统的分层架构有所不同:通用性最强的层位于中间,硬件相关的部分,以及应用特点部分分布位于下层和上层。

 

这种“中间通用、上下专用”的分层方式对可移植性关键的通信系统、控制系统、软件平台等情况都非常重要。

技术堆叠

技术堆叠不是独立的架构,而是基于分层架构(或其他架构模式)提供的进一步说明。

下面这个两个架构模式都是按Tier分层,并明确了各个技术点。

图片来源:I Love the Java Jive: J2EE for Oracle Technologists

图片来源:Category Archives: Day 15. Understanding J2EE Architecture

另一个例子,基本架构模式是基于通用性分层的,也加入技术堆叠的描述。

图片来源:Java SpringMVC

考虑非功能需求

架构不仅仅是系统功能需求的结果 -- Len Bass, 《软件架构实践(第二版)》

在我们当中,有不少人一厢情愿的认为:只要所开发出的系统完成了用户期待的功能,项目就算成功了,但这并不符合实际。 -- 温昱,《软件架构设计》

《软件架构设计》一书中指出,“其实任何作为复合整体的复杂事物,都有可能有架构,比如一本书”。“非功能目标的考虑”在ADMEMS方法中不是一个阶段,而是一个贯穿环节。

我们接下来讨论的重点是贯穿案例 -- PASS系统概念架构设计的第3步,考虑非功能需求。

概念架构 ≠ 理想化架构

  • 重大需求塑造概念架构。这里的 “重大需求”应涵盖功能需求、质量及约束3类需求中的关键部分
  • 概念架构是一个“架构设计阶段”,必须在细化架构设计阶段之前,针对重大需求、特色需求、高风险需求,形成稳定的高层架构设计成果
  • 如果只考虑“功能需求”来设计概念架构,将导致概念架构沦为“理想化架构”,这个脆弱的架构不久就会面临“大改”的压力,甚至直接导致投标等工作失败。


【禅与计算机程序设计艺术:更多阅读】

  1. 2023,程序员的出路在哪里?_禅与计算机程序设计艺术的博客-CSDN博客_程序员出路
  2. 写给新手程序员的一封信_禅与计算机程序设计艺术的博客-CSDN博客 
  3. 程序员职业生涯系列:关于技术能力的思考与总结_禅与计算机程序设计艺术的博客-CSDN博客
  4. 【思维模型】概率思维的价值:找到你的人生算法,实现阶级跃迁!_禅与计算机程序设计艺术的博客-CSDN博客
  5. 【企业架构设计实战】业务架构设计_禅与计算机程序设计艺术的博客-CSDN博客
  6. 【企业架构设计实战】技术架构设计指南_禅与计算机程序设计艺术的博客-CSDN博客
  7. 【企业架构设计实战】应用架构设计_禅与计算机程序设计艺术的博客-CSDN博客 
  8. 【企业架构设计实战】大数据架构最佳实践_禅与计算机程序设计艺术的博客-CSDN博客
  9. 软件架构师的10项重要技能_禅与计算机程序设计艺术的博客-CSDN博客
  10. 【计算机程序设计思想与方法】1 什么是计算?_禅与计算机程序设计艺术的博客-CSDN博客
  11. 【计算机程序设计思想与方法】2 什么是计算思维?_禅与计算机程序设计艺术的博客-CSDN博客
  12. 【架构师必知必会系列】系统架构设计需要知道的5大精要(5 System Design fundamentals)..._禅与计算机程序设计艺术的博客-CSDN博客
  13. 【成为架构师课程系列】架构师的核心能力地图_禅与计算机程序设计艺术的博客-CSDN博客
  14. 【成为架构师课程系列】一线架构师:6个经典困惑及其解法_禅与计算机程序设计艺术的博客-CSDN博客
  15.  【成为架构师课程系列】怎样进行高性能高可用的高并发系统的设计?_禅与计算机程序设计艺术的博客-CSDN博客
  16.  【成为架构师课程系列】高并发系统设计的三大目标:高性能、高可用、可扩展_禅与计算机程序设计艺术的博客-CSDN博客
  17.  【成为架构师课程系列】消息队列:秒杀时如何处理每秒上万次的下单请求?_禅与计算机程序设计艺术的博客-CSDN博客【成为架构师课程系列】架构分层:我们为什么一定要这么做?_禅与计算机程序设计艺术的博客-CSDN博客
  18.  【成为架构师课程系列】架构设计中的核心思维方法_禅与计算机程序设计艺术的博客-CSDN博客
  19. 【成为架构师课程系列】数据库优化方案 1:查询请求增加时,如何做主从分离?_禅与计算机程序设计艺术的博客-CSDN博客 
  20. 【成为架构师课程系列】数据库性能优化:写入数据量增加时,如何实现分库分表?如何保证分库分表后 ID 的全局唯一性?_禅与计算机程序设计艺术的博客-CSDN博客 【成为架构师课程系列】性能优化技术之“池化技术”:如何减少频繁创建数据库连接的性能损耗?_禅与计算机程序设计艺术的博客-CSDN博客
  21.  【成为架构师课程系列】高性能系统设计之分布式缓存_禅与计算机程序设计艺术的博客-CSDN博客
  22. 【成为架构师课程系列】NoSQL:在高并发场景下,数据库和NoSQL如何做到互补?_禅与计算机程序设计艺术的博客-CSDN博客 
  23. 【成为架构师课程系列】大数据技术体系精华总结【值得收藏!】_禅与计算机程序设计艺术的博客-CSDN博客 
  24. 【软件架构思想系列】模块化与抽象_禅与计算机程序设计艺术的博客-CSDN博客 
  25. 【软件架构思想系列】从伟人《矛盾论》中悟到的软件架构思想真谛:“对象”即事物,“函数”即运动变化..._禅与计算机程序设计艺术的博客-CSDN博客 
  26.  【软件架构思想系列】分层架构_禅与计算机程序设计艺术的博客-CSDN博客
  27. 软件架构图和模式_禅与计算机程序设计艺术的博客-CSDN博客 
  28. 一切系统都是分布式的:Everything is distributed_禅与计算机程序设计艺术的博客-CSDN博客 
  29. 《人月神话》(The Mythical Man-Month)看清问题的本质:如果我们想解决问题,就必须试图先去理解它..._禅与计算机程序设计艺术的博客-CSDN博客 
  30. 【模型↔关系思考法】如何在一个全新的、陌生的领域快速成为专家?模仿 + 一万小时定律 + 创新..._禅与计算机程序设计艺术的博客-CSDN博客 
  31. BloomFilter 布隆过滤器思想原理和代码实现_禅与计算机程序设计艺术的博客-CSDN博客 
  32.  每个程序员都需要掌握的 7 项基本技能_禅与计算机程序设计艺术的博客-CSDN博客
  33. 我问 ChatGPT:怎样成为优秀的架构师?看它怎么回答的……_禅与计算机程序设计艺术的博客-CSDN博客 
  34. 彻底搞懂分布式系统服务注册与发现原理_禅与计算机程序设计艺术的博客-CSDN博客 
  35. Elasticsearch 架构设计及说明_禅与计算机程序设计艺术的博客-CSDN博客_elasticsearch 架构设计
  36. Elasticsearch 数据的读写流程,掌握到这个程度就够用了_禅与计算机程序设计艺术的博客-CSDN博客
  37. 【成为架构师课程系列】作为一名大数据架构师该掌握的技能清单:_禅与计算机程序设计艺术的博客-CSDN博客 ​​​​​​数据思维:开启数据认知素养之旅_禅与计算机程序设计艺术的博客-CSDN博客
  38. MySQL 体系架构简介_禅与计算机程序设计艺术的博客-CSDN博客
  39. 通用大数据架构体系介绍_禅与计算机程序设计艺术的博客-CSDN博客 
  40. HBase系统架构及数据结构_禅与计算机程序设计艺术的博客-CSDN博客
  41. HBase 架构原理-数据读取流程解析_禅与计算机程序设计艺术的博客-CSDN博客 
  42. HBase 架构详解及数据读写流程_禅与计算机程序设计艺术的博客-CSDN博客 
  43. HBase架构详解及读写流程_禅与计算机程序设计艺术的博客-CSDN博客 
  44. 【图文详解】HDFS 系统架构与文件数据读写流程_禅与计算机程序设计艺术的博客-CSDN博客 
  45. Apache Flink 实现原理:容错机制_禅与计算机程序设计艺术的博客-CSDN博客 
  46. Elasticsearch 索引原理_禅与计算机程序设计艺术的博客-CSDN博客
  47. Spark / Hive / ClickHouse 向量化查询执行原理分析(Vectorization Query Execution)_禅与计算机程序设计艺术的博客-CSDN博客 
  48. Hive常用DDL(数据定义语言)操作_禅与计算机程序设计艺术的博客-CSDN博客 
  49. MySQL 的执行计划 explain 详解_禅与计算机程序设计艺术的博客-CSDN博客
  50. MySQL 存储引擎 - InnoDB 实现原理介绍_禅与计算机程序设计艺术的博客-CSDN博客 
  51. 【史上最全】MySQL各种锁详解:一文搞懂MySQL的各种锁_禅与计算机程序设计艺术的博客-CSDN博客 
  52. 大数据存储引擎 NoSQL极简教程 An Introduction to Big Data: NoSQL_禅与计算机程序设计艺术的博客-CSDN博客 
  53. Redis 作者 Antirez 讲如何实现分布式锁?Redis 实现分布式锁天然的缺陷分析&Redis分布式锁的正确使用姿势!..._禅与计算机程序设计艺术的博客-CSDN博客 【架构师必知必会】常见的NoSQL数据库种类以及使用场景_禅与计算机程序设计艺术的博客-CSDN博客
  54. 【极简教程】Linux Shell 脚本编程_禅与计算机程序设计艺术的博客-CSDN博客 
  55. 业务驱动的企业级数据架构设计_禅与计算机程序设计艺术的博客-CSDN博客
  56. Hive 系统架构_禅与计算机程序设计艺术的博客-CSDN博客 
  57. 读多写少业务场景的缓存设计重构实战_禅与计算机程序设计艺术的博客-CSDN博客 
  58. 神奇的 Go 语言:Go 极简教程_禅与计算机程序设计艺术的博客-CSDN博客 
  59. 【精华文章】深入理解 Java 内存模型_禅与计算机程序设计艺术的博客-CSDN博客 
  60. 简洁代码的艺术【The Art of Clean Code】_禅与计算机程序设计艺术的博客-CSDN博客 
  61. 干净的代码——一种实用的方法_禅与计算机程序设计艺术的博客-CSDN博客 
  62. 清洁代码之道:一份实用关于如何编写和维护干净整洁的好代码的的方法 The Art Of Clean Code..._禅与计算机程序设计艺术的博客-CSDN博客 
  63. 更快地编写更好的代码:5 分钟阅读_禅与计算机程序设计艺术的博客-CSDN博客 
  64. ClickHouse 合并树表引擎 MergeTree 原理分析_禅与计算机程序设计艺术的博客-CSDN博客
  65. 【精华收藏】ClickHouse 系统架构、存储引擎、 查询引擎原理分析_禅与计算机程序设计艺术的博客-CSDN博客 ClickHouse 合并树表引擎 MergeTree 索引与数据存储方式_禅与计算机程序设计艺术的博客-CSDN博客
  66. 成为软件架构师需要什么?_禅与计算机程序设计艺术的博客-CSDN博客
  67. 产品经理(Product Manager)工作主要是做什么的?没想到产品经理也分这么多种类型!_禅与计算机程序设计艺术的博客-CSDN博客 
  68. 十年技术进阶路:让我明白了三件要事。关于如何做好技术 Team Leader?如何提升管理业务技术水平?(10000字长文)..._禅与计算机程序设计艺术的博客-CSDN博客
  69. 程序员技术练级攻略:Build Your Programming Technical Skills_禅与计算机程序设计艺术的博客-CSDN博客

相关文章:

【成为架构师课程系列】怎样进行概念架构(Conceptual Architecture)?

目录 前言 什么是概念架构 概念架构阶段的3个步骤 初步设计 高层分割 分层式概念服务架构 Layer:逻辑层 Tier: 物理层 按通用性分层 技术堆叠 考虑非功能需求 【禅与计算机程序设计艺术:更多阅读】 前言 胜兵先胜而后求战,败兵先站而后求胜。…...

PostgreSQL的下载安装教程(macOS、Windows)

postgresql是GIS服务端几乎不可避免要打交道的数据库。因为mysql的空间扩展真是不尽人意。所以想要学会GIS服务端知识,postgresql(下文简称pg)你是必须要会的。 首先要知道,pg是一个空间数据库,和普通数据库不同的是pg支持空间数据的存储与操作。这里所谓的空间数据一般指…...

98年的确实卷,公司新来的卷王,我们这帮老油条真干不过.....

都说00后躺平了,但是有一说一,该卷的还是卷。这不,前段时间我们公司来了个00后,工作没两年,跳槽到我们公司起薪18K,都快接近我了。后来才知道人家是个卷王,从早干到晚就差搬张床到工位睡觉了。 …...

软件架构知识2-系统复杂度

架构设计的真正目的:是为了解决软件系统复杂度带来的问题,一个解决方案。 系统复杂度,如何入手: 1、通过熟悉和理解需求,识别系统复杂性所在的地方,然后针对这些复杂点进行架构设计。 2、架构设计并不是要…...

JavaSE学习day4_02 数组(超级重点)

3.数组 3.1什么是数组 数组就是存储数据长度固定的容器,存储多个数据的数据类型要一致。 3.2数组定义格式 3.2.1第一种(常用) 数据类型[] 数组名 示例: int[] arr; double[] arr; char[] arr; 3.2.2第二种(在…...

Theano教程:Python的内存管理

在写大型程序时候的一大挑战是如何保证最少的内存使用率。但是在Python中的内存管理是比较简单的。Python显示分配内存,使用引用计数系统管理对象,当指向某一个对象的引用数变为 0 的时候,该对象所占的内存就会被释放。理论上听起来很不错&am…...

Linux | Liunx安装Tomcat(Ubuntu版)

目录 一、下载并上传Tomcat压缩包到Ubuntu 1.1 下载并解压 1.2 执行 startup.sh 文件 二、验证Tomcat启动是否成功 2.1 查看启动日志 2.2 查看启动进程 三、Windows访问 Tomcat 服务 四、停止 Tomcat 服务 Tomcat是一款Web服务器,开发Web项目基本上都会用到…...

缓冲区浅析

缓冲区 程序运行输入数据时,从键盘的输入先存储到缓冲区,只有当缓冲区满或者输入回车时程序才会真正地从缓冲区读入数据 int main() {int a, b;cin >> a >> b;return 0; }in: 1 2\n 例如这里输入空格时程序没有输出,而是将空格…...

Day888.MySQL是怎么保证主备一致的 -MySQL实战

MySQL是怎么保证主备一致的 Hi,我是阿昌,今天学习记录的是关于MySQL是怎么保证主备一致的内容。 MySQL 能够成为现下最流行的开源数据库,binlog 功不可没。 在最开始,MySQL 是以容易学习和方便的高可用架构,被开发人…...

互联网舆情监测系统的发展阶段,TOOM互联网舆情监测系统有哪些?

互联网舆情监测系统是一种利用计算机技术对互联网上的大量信息进行实时监测、分析和评估的工具,旨在了解公众对某一事件、话题或品牌等的态度、情感倾向和影响力等。通过对社交媒体、论坛、新闻媒体等多个渠道的数据采集和处理,系统能够实现舆情事件的追…...

GIT命令操作大全

文章目录一、前言二、工作模块2.1 Workspace:工作区2.2 Index / Stage:暂存区2.3 Repository:本地仓库2.4Remote:远程仓库三、GIT基本配置四、GIT项目代码管理4.1 初始化git仓库4.2 提交到暂存区(stage)4.3 将暂存区的文件恢复到工…...

突破传统开发模式,亚马逊云科技助力中科院加速推动合成生物学

当数字技术成为整个社会运行的底座,生物科学也能借力云计算从诸多繁琐重复的工作中解放出来,专注于生物设计与创新。来看看亚马逊云科技如何与TIBCAS合作,推动合成生物学的发展。 明确核心需求,选择合作伙伴 TIBCAS选择与亚马逊…...

分享开放通达信l2接口的过程,开发之后怎么使用?

随着互联网的不断进步,信息技术的不断发展,通达信l2接口技术逐步成熟。那么,这些开放通达信l2接口开发的过程是怎么样的呢?期间又会遇到什么问题,开放之后又会怎么使用呢?这篇文章带你深入了解。 通达信l2接口不像一…...

33、基于51单片机老人防跌倒蜂鸣器报警系统加速度检测

背景技术 老年人出门由于身体不灵活、视力较差,容易发生跌倒,现用的老年人跌倒报警装置是通过无线对讲系统研发的,它外观精美,自动化程度高,有很强的专业性,但是,设计者忽略了一个问题&#xf…...

【项目】基于SpringBoot+Freemarker+Mybatis+MySQL+LayUI实现CRM智能办公系统

这里写目录标题CRM基本概念CRM分类模块功能描述项目代码application-dev.yml部分页面代码CRM基本概念 圈内存在这么一句话:“世上本来没有 CRM,大家的生意越来越难做了,才有了 CRM。” 在同质化竞争时代,顾客资产尤为重要&#x…...

手写识别字体的步骤是什么?怎么识别图片中的文字?

手写识别字体的步骤是什么?怎么识别图片中的文字? 1. 打开信风工具网,点击拍照按钮,选择拍图识字模式,对准需要识别的文件进行拍摄。在线工具地址: https://ocr.bytedance.zj.cn/image/ImageT…...

Mysql 存储过程

什么是存储过程? 存储过程是事先经过编译并存储在数据库的一段sql语句的集合 如何创建一个存储过程? create procedure 存储过程名称([参数列表]) beginsql语句; end#例 create procedure p1() beginselect * from t_goods;select * from t_user; end如…...

【LeetCode】每日一题(3)

目录 题目:1234. 替换子串得到平衡字符串 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过啦!!! 写在最后: 题目:1234. 替换子串得到平衡…...

websocket学习

1.什么是websocket 1)首先websocket和http一样,是一种网络通信协议,来自HTML5的特性; 2)他可以使客户端和服务端进行双工通信,简单来说,就是双向通信:比如我们熟悉的http协议&…...

Java面试题及答案整理汇总(2023最新版)

前言 面试前还是很有必要针对性的刷一些题,很多朋友的实战能力很强,但是理论比较薄弱,面试前不做准备是很吃亏的。这里整理了很多面试常考的一些面试题,希望能帮助到你面试前的复习并且找到一个好的工作,也节省你在网…...

公司来了个卷王,我愿称之为王中王,让人崩溃

前几天我们公司一下子也来了几个新人,这些年前人是真能熬啊,本来我们几个老油子都是每天稍微加会班就打算走了,这几个新人一直不走,搞得我们也不好走。2023年春招就要开始了,最近内卷严重,各种跳槽裁员&…...

波奇学c语言:代码的编译和链接

test.c(源文件)->编译->test.obj(目标文件)->链接->test.exe(可执行文件)编译1.预编译(预处理):text.c->text.i使用gcc -E test.c 进行停止预处理指令&am…...

计算机网络原理--传输层协议(TCP协议十大特性)

目录 1.认识TCP协议 TCP的协议段格式 2. 确认应答机制 3.超时重传 4.连接管理 <...

nvm控制node版本

安装 nvm 1、下载 nvm 官网安装包&#xff1a; github 选择 nvm-setup.exe 下载 2、安装 1、选择 nvm 安装目录&#xff08;可自定义&#xff09; 2、选择 node 安装目录&#xff08;如有安装过&#xff0c;可以选择以前安装目录&#xff0c;可 cdm 输入 where node 查看原nod…...

从0到1一步一步玩转openEuler--13 openEuler用户组管理

文章目录13.1 创建用户组13.1.1 groupadd命令13.1.2 用户组信息文件13.1.3 创建用户组实例13.2 修改用户组13.2.1 修改GID13.2.2 修改用户组名13.3 删除用户组13.4 将用户加入用户组或从用户组中移除13.5 切换用户组在Linux中&#xff0c;每个普通用户都有一个账户&#xff0c;…...

知不知道什么叫米筐量化?怎么来的?

现在量化市场范围越来越大&#xff0c;各种量化系统也是普遍性的了&#xff0c;不过米匡量化这个开发系统通常是由交易接口的专业开发团队开发的的结果&#xff0c;那么米匡量化的终端又是是怎么开发成功的呢&#xff1f;首先&#xff0c;我们可以从api接口的调用来了解&#x…...

Urho3D 事件Events

在脚本中&#xff0c;子系统通过以下全局财产可用&#xff1a;时间、文件系统、日志、缓存、网络、输入、ui、音频、引擎、图形、渲染器、脚本、控制台、debugHud、数据库。请注意&#xff0c;由于WorkQueue和Profiler的低级性质&#xff0c;它们不可用于脚本。 事件本身不需要…...

Rust学习入门--【8】复合类型

复合类型&#xff08;compound type&#xff09; 可以将多个不同类型的值组合为一个类型。 Rust中提供了两种内置的复合数据类型&#xff1a;元组&#xff08;tuple&#xff09;和数组&#xff08;array&#xff09;。 元组类型 元组是一个具有 固定长度 的数据集合 —— 无…...

【整理六】

1、props和state相同点和不同点&#xff1f;render方法在哪些情况下会执行&#xff1f; props是一个从外部传进组件的参数&#xff0c;由于React具有单向数据流的特性&#xff0c;所以他的主要作用是从父组件向子组件中传递数据&#xff0c;它是不可改变的&#xff0c;如果想要…...

Ubuntu20.04安装MySQL5.7与远程连接

一、安装MySQL5.7 1.更换镜像源 sudo cp /etc/apt/sources.list /etc/apt/sources.list.old #备份原来的文件 sudo vim /etc/apt/sources.list #修改sources.list文件配置文件内容如下所示&#xff1a; # 清华镜像源 deb https://mirrors.tuna.tsinghua.edu.cn/ubu…...

深圳企业100强/seo整站优化

php本身提供了一个邮件发送函数mail&#xff0c;可以在程序中直接发送电子邮件&#xff0c;不过该函数要求服务器支持sendmail或者必须设置一台不需要中继的邮件发送服务器&#xff0c;但现在要找到一台不需要身份验证的邮件发送中继几乎不可能&#xff0e;所以使用mail函数往往…...

欧美男女做黄色网站/源码之家

在Oracle 10g中&#xff0c;Flash back家族分为以下成员&#xff1a;Flashback Database | Flashback Drop | Flashback Table | Flashback Query(Flashback Query,Flashback Version Query&#xff0c;Flashback Transaction Query)。 闪回删除表(dropped tabl…...

打字做任务赚钱的网站/河南网站推广优化

Welcome to My Book Store.please choose your favorite book, clickhere.Enjoy!...

平面设计找图网站/查域名注册详细信息查询

简介&#xff1a; 烟雨图床程序这是我目前为止看到的唯一一款开源的既可爱又简洁的图床程序了&#xff0c;它基于烟雨写的QAQ_CORE开发&#xff0c;采用MVC架构编写而成&#xff0c;使用Github进行文件储存&#xff0c;由JSDelivr提供全球CDN加速服务&#xff0c;它很可爱。 她…...

南阳网站建设价格/谷歌搜索引擎入口363

集成运放的主要技术参数 评价集成运放好坏的参数很多&#xff0c;它们是描述一个实际运放与理想放大器件接近程度的数据&#xff0c;这里仅介绍其中主要的几种。一、输入参数1&#xff0e;输入失调电压UO 及其温漂在室温及标准电源电压下&#xff0c;为了使静态UO 0&#xff0…...

太原工程建设招投标信息网站/推广优化网站排名

1.Entity位于类名前&#xff1b;指出该Java类为实体类&#xff0c;并且将映射到指定的数据库表&#xff1b;比如&#xff1a;Emp类前名加上该注解后&#xff0c;就可以和配置的数据库中的emp表相互映射了&#xff1b;2.Table位于类名前当实体类名和映射的表名不一致时&#xff…...