工欲善其事,必先利其器,Markdown和Mermaid的梦幻联动(2)
该文章Github地址:https://github.com/AntonyCheng/typora-notes/tree/master/chapter03-mermaid
在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址:https://blog.csdn.net/AntonyCheng/article/details/136555245),该模板集成了最常见的开发组件,同时基于修改配置文件实现组件的装载,除了这些,模板中还有非常丰富的整合示例,同时单体架构也非常适合SpringBoot框架入门,如果觉得有意义或者有帮助,欢迎Star & Issues & PR!
上一章:工欲善其事,必先利其器,Markdown和Mermaid的梦幻联动(1)
5.类图(ClassDiagram)
- 在软件工程中,统一建模语言(UML)中的类图是一种静态结构图,它通过显示系统的类,属性,操作方法以及对象之间的关系来描述系统的结构。
- 类图是面向对象建模的主要构建块,它用于应用程序结构的一般概念建模,以及将模型转换为编程代码的详细建模,类图也可用于数据建模,类图中的类代表主要元素,应用程序中的交互以及要编程的类。
- 例如下:
classDiagram
animal <|-- duck
animal <|-- fish
animal <|-- zebra
animal : +int age
animal : +String gender
animal : +isMammal()
animal : +mate()
class duck{
+String beakColor
+swim()
+quack()
}
class fish{
-int sizeInFeet
-canEat()
}
class zebra{
+bool is_wild
+run()
}
5.1.句法
- UML提供了表示类成员的机制,例如属性和方法,以及关于它们的附加信息,图中类的单个实例包含三个元素。
-
- 顶部:它是类的名称,它以粗体居中打印,第一个字母大写,他还可能包含描述类性质的可选注释文本。
- 中部:它是类的属性,它们是左对齐,第一个字母是小写的(String写法本就如此)。
- 底部:它是类的操作,它们是左对齐,第一个字母是小写的(String写法本就如此)。
classDiagram
class BankAccount{
+String owner
+Bigdecimal balance
+deposit(amount)
+withdraw(amount)
}
5.2.定义一个类
- 定义一个类有两种方式,一种是
class ClassName,另一种是ClassName <|-- SubClassName,前者是通过关键字class显式定义,后者是通过两类的关系隐式定义:
classDiagram
class 1900sharehome
1900ShareHome <|-- Typora
- 命名要求:类名是由字母,数字(允许使用unicode)和下划线字符组成。
5.3.定义类的成员
- UML提供了表示类成员的机制,例如属性和方法,以及关于它们的附加信息。
- Mermaid根据括号
()是否存在来区分属性和函数/方法。那些()被视为函数/方法,而其他被视为属性。 - 定义类成员的方法也有两种:
classDiagram
class bankaccount{
+String owner
+BigDecimal balance
+deposit(amount)
+withdrawal(amount)
}
classDiagram
class BankAccount
BankAccount : +String owner
BankAccount : +BigDecimal balance
BankAccount : +deposit(amount)
BankAccount : +withdrawal(amount)
-
返回类型:可以用返回的数据类型来定义:
classDiagram class BankAccount{ +String owner +BigDecimal balance +deposit(amount)int +withdrawal(amount)bool } -
通用类型:可以用通用类型来进行成员的定义,例如
List<int>,用于字段,参数和返回类型,方法是将类型包含在~内,且该方法不支持嵌套:classDiagram class Class~Shape~{ int id List~int~ position setPoints(List~int~ points) getPoints() List~int~ } Class : -List~String~ messages Class : +setMessages(-List~String~messages) Class : +getMessages() List~Sring~ -
可视度:对于一些有特殊可视性的类成员,一般把以下元素放置在成员名字之前:
字符 意义 +公开 -私人 #受保护 ~内部 classDiagram class ClassName{ +Public -Private #Protected ~Package/Internal }
5.4.定义关系
- 它是一种建立在类和项目图之上,包括特殊的逻辑链接的总称:
[ClassA][Arrow][ClassB]
- 以下是目前在UML下所支持的关系定义:
| 样式 | 描述 |
|---|---|
| <|– | 实心三角箭头 |
| *– | 菱形箭头 |
| o– | 空心菱形箭头 |
| –> | 向量箭头 |
| – | 实线 |
| …> | 虚线向量箭头 |
| …|> | 虚线三角箭头 |
| … | 虚线 |
classDiagram
classA <|-- classB
classC *-- classD
classE o-- classF
classG <-- classH
classI -- classJ
classK <.. classL
classM <|.. classN
classO .. classP
- 我们还可以在两个关系之间使用描述性的标签:
[ClassA][Arrow][ClassB]:LabelText
classDiagram
classA --|> classB : Inheritance
classC --* classD : Composition
classE --o classF : Aggregation
classG --> classH : Association
classI -- classJ : Link(Solid)
classK ..> classL : Dependency
classM ..|> classN : Realization
classO .. classP : Link(Dashed)
- 双向箭头:
| 样式 | 意义 |
|---|---|
| <|-- | 左实心三角箭头实线 |
| <-- | 左向量箭头实线 |
| --* | 实心菱形箭头实线 |
| --o | 空心菱形箭头实线 |
| --|> | 右实心箭头实线 |
| --> | 右向量箭头实线 |
| 样式 | 意义 |
| <|.. | 左实心三角箭头虚线 |
| <.. | 左向量箭头虚线 |
| ..* | 实心菱形箭头虚线 |
| ..o | 空心菱形箭头虚线 |
| ..|> | 右实心箭头虚线 |
| ..> | 右向量箭头虚线 |
5.5.基数/关系的多重性
- 类图中的多重性或基数表示一个类的实例链接到另一类的一个实体的数量,例如:
一家公司将有一名或多名员工,但每一位员工只为一家公司工作。 - 多重符号放置在定义关系的末端:
| 基数选项 | 意义 |
|---|---|
| 1 | 只有一个 |
| 0…1 | 零或一 |
| 1…* | 一个或多个 |
| ***** | 许多 |
| n | n个 |
| 0…n | 零到n个 |
| 1…n | 一到n个 |
- 我们将多重符号定义在
**中:
[ClassA]"Number"[Arrow]"Number"[ClassB]:LabelText
classDiagram
A"1"--|>"n"B
5.6.类的注释
- 可以用特定的标记文本来注释类,就像类的元数据一样,清楚地表明其性质。一些常见的注释实例如下:
<<Interface>>表示一个接口类<<abstract>>表示抽象类<<Service>>表示一个服务器<<enumeration>>表示一个举例类
- 用法如下例:
classDiagram
class ClassName
<<interface>> ClassName
ClassName : Element!
ClassName : Element!()
这是一个比较复杂的用法,下面来一个简单的:
classDiagram
class ClassName{
<<interface>>
element!
element!()
}
- 代码的注释:用
%%进行注释,例如下:
classDiagram
%% class Classname{
%%red
%%blue()
%%}
class ClassName{
red
blue()
}
5.7.设置图表的方向
- 我们可以很清楚的看出,类图中是包含有方向的,所以我们可以设置类图的方向:
classDiagram
class Student{
-idCard:IdCard
+id()
}
class IdCard{
-id : int
-name : string
+id()
}
class Bike{
-id : int
-name : String
+id()
}
Student --o IdCard : comment
Bike --o IdCard : comment
6.状态图
- 状态图是一种在计算机科学和相关领域中用于描述系统行为的图。状态图要求所描述的系统由有限数量的状态组成;有时情况确实如此,而在其他情况下有时这是一个合理的抽象。
- Mermaid 可以渲染状态图。语法大体与plantUml 中使用的语法保持一致,因为这将使用户更容易在mermaid 和plantUml 之间共享图表。
例如下:
stateDiagram-v2
[*] --> Still
Still --> [*]
Still --> Moving
Moving --> Still
Moving --> Crash
Crash --> [*]
比较旧的渲染器:
stateDiagram
[*] --> Still
Still --> [*]
Still --> Moving
Moving --> Still
Moving --> Crash
Crash --> [*]
- 幸运的是,
Typora能够兼容两者的渲染
6.1.状态
- 一个状态能够以多种方式去声明,最简单的一种声明方式就是单独作为一个
id描述:
stateDiagram-v2
s1
- 另外一种方式就是用一个描述来简化
id:
stateDiagram-v2
state "This is a state description" as s2
- 再或者我们可以用
:来引出id:
stateDiagram-v2
s2:This is a state description
6.2.状态转换
- 我们通常用
-->来作为状态转换的语法,当我们要定义两个状态之间的转换时:
stateDiagram-v2
s1-->s2
- 我们也可以在状态转换的同时添加一个描述:
stateDiagram-v2
s1-->s2:This is a transition
6.3.开始和结束
- 在
Mermaid里面有两个特殊的状态——开始和结束,我们通常用[*]来表示它们:
stateDiagram-v2
[*]-->A
A-->[*]
6.4.嵌套状态
- 在实际生活中,我们经常运用多维的状态图来描述一个系统内部的状态关系,为了定义复合状态,我们需要使用到一个
state关键字,后面跟一个id和{},例如下:
stateDiagram-v2
[*]-->A
state A{[*]-->S1S1-->S2S2-->[*]
}
- 我们在来一个多层嵌套:
stateDiagram-v2
[*]-->A
state A {[*]-->Bstate B {[*]-->Cstate C {[*]-->Dstate D {[*]-->EE-->[*]}}}
}
- 我么还可以对其进行分支描述:
stateDiagram-v2
[*]-->First
state First {[*]-->FF-->[*]
}
First-->Second
state Second {[*]-->SS-->[*]
}
First-->Third
state Third {[*]-->TT-->[*]
}
Second-->[*]
Third-->[*]
6.5.选择分支
- 实际生活当中我们经常运用状态图中的选择分支来描述问题,例如下:
stateDiagram-v2
[*] --> IsPositive
IsPositive --> if_else
if_else --> False: if n<0
if_else --> True: if n>=0
6.6.叉
- 可以使用
<<fork>><<join>>在图中指定一个叉:
stateDiagram-v2state fork_state <<fork>>[*] --> fork_statefork_state --> State2fork_state --> State3state join_state <<join>>State2 --> join_stateState3 --> join_statejoin_state --> State4State4 --> [*]
6.7.添加笔记
stateDiagram-v2State1: The state with a note%%第一种方法note right of State1Important information! You can write notes.end note%%第一种方法State1 --> State2%%第二种方法note left of State2 : This is the note to the left.%%第二种方法
6.8.并发
stateDiagram-v2[*] --> Activestate Active {[*] --> AA --> B : 123B --> A : 123--[*] --> CC --> D : 456D --> C : 456--[*] --> EE --> F : 789F --> E : 789}
6.9.注释
- 和以前介绍的一样,我们在
Mermaid里面用%%来进行语句的注释。
7.实体关系图
- ER 建模的从业者几乎总是将实体类型简称为实体。例如,
CUSTOMER实体类型将简称为CUSTOMER实体。但从技术上讲,实体是实体类型的抽象实例,这就是 ER 图所显示的 - 抽象实例,以及它们之间的关系。 - 例如下:
erDiagram
customer ||--o{ order : places
order ||--|{ line-item : contains
customer }|..|{ delivery-adderss : uses
- 箭头样式:
| 左箭头 | 右箭头 | 意义 |
|---|---|---|
| ` | o` | `o |
| ` | ` | |
}o | o{ | 零个或者多个(无上限) |
| `} | ` | ` |
8.生活备忘录
- 生活备忘录在
Mermaid中算是最简单的图了,没有过多的语法,就下面这一个实例就能实现这样一个有趣的图像:
journey
title My working day
%% section表示选择要做的事情大体方向,其下是事情的各个细节
section Go to work
%% Doing : number : poeple (number代表心情,5为满分,0为最低分)(poeple代表人物)
Make tea:5:Me
Go upstairs:3:Me
Do work:1:Me,Cat
section Go home
Go downstairs:5:Me
Sit down:5:Me
9.甘特图
- 甘特图是一种条形图,由 Karol Adamiecki 于 1896 年首次开发,1910 年代由 Henry Gantt 独立开发,用于说明项目进度和完成任何项目所需的时间。 甘特图说明项目的终端元素和摘要元素的开始日期和完成日期之间的天数。
9.1.简述
- 甘特图将每个计划任务记录为一个从左向右延伸的连续条。 x 轴代表时间,y 轴记录不同的任务及其完成的顺序。
- **重要的是要记住,当特定于任务的日期、天数或时间集合被“排除”时,甘特图将通过向右扩展相同的天数来适应这些更改,而不是通过在内部创建间隙任务。 **
- 然而,如果排除的日期在两个设置为连续开始的任务之间,则排除的日期将被图形跳过并留空,并且在排除的日期结束后将开始下一个任务。
- 甘特图可用于跟踪项目完成前所需的时间,但它也可用于以图形方式表示“非工作日”,只需稍作调整。
gantt
title A Gantt Diagram
dateFormat YYYY-MM-DD
section A
A task : a1,2021-01-01,30d
Another task : after a1,20d
section B
B task : 2021-03-21,40d
Another task : 40d
9.2.句法
ganttdateFormat YYYY-MM-DDtitle Adding GANTT diagram functionality to mermaidexcludes weekends%% (`excludes` accepts specific dates in YYYY-MM-DD format, days of the week ("sunday") or "weekends", but not the word "weekdays".)section A sectionCompleted task :done, des1, 2014-01-06,2014-01-08Active task :active, des2, 2014-01-09, 3dFuture task : des3, after des2, 5dFuture task2 : des4, after des3, 5dsection Critical tasksCompleted task in the critical line :crit, done, 2014-01-06,24hImplement parser and jison :crit, done, after des1, 2dCreate tests for parser :crit, active, 3dFuture task in critical line :crit, 5dCreate tests for renderer :2dAdd to mermaid :1dFunctionality added :milestone, 2014-01-25, 0dsection DocumentationDescribe gantt syntax :active, a1, after des1, 3dAdd gantt diagram to demo page :after a1 , 20hAdd another diagram to demo page :doc1, after a1 , 48hsection Last sectionDescribe gantt syntax :after doc1, 3dAdd gantt diagram to demo page :20hAdd another diagram to demo page :48h
- 我们也可以在已经有计划的项目过程中加入其他的项目:
gantt
apple : a,2021-01-01,30d
banana : crit,b,2021-01-04,4d
cherry : active,c,after a,7d
dog : d,after b,3d
- 标题:关键字——
title - 您可以将图表分成不同的部分,例如将项目的不同部分(如开发和文档)分开。为此,请以
section关键字开始一行并为其命名。(请注意,与整个图表的标题)不同,此名称是必需的。 - 关键节点:我们还可以在图表里添加关键节点,类似于里程碑,他们表示单一的时刻,用关键字
milestone来表示:
milestone_name milestone : milestone, m, BeginTime, KeepingTime
- 如上例,关键节点的确切时间就是:
T I M E = B e g i n T i m e + K e e p i n g T i m e 2 TIME=\frac{BeginTime+KeepingTime}{2} TIME=2BeginTime+KeepingTime
- 实例如下:
gantt
dateFormat HH:mm
axisFormat %H:%M
Initial milestone : milestone, m1, 17:49,2min
taska2 : 10min
taska3 : 5min
Final milestone : milestone, m2, 18:14, 2min
9.3.设置时间
- 默认格式:
dateFormat YYYY-MM-DD - 其他
Mermaid支持的格式如下:
| 输入 | 样例 | 描述 |
|---|---|---|
| YYYY | 2021 | 四位数年份 |
| YY | 21 | 两位数年份 |
| Q | 1……4 | 季度 |
| M MM | 1……12 | 月份(数字) |
| MMM MMMM | January……Dec | 月份(英文) |
| D DD | 1……31 | 日(月中) |
| Do | 1st……31st | 日(英文缩写排序) |
| DDD DDDD | 1……365 | 日(年中) |
| X | 1410715640.579 | Unix 时间戳 |
| x | 1410715640579 | Unix ms 时间戳 |
| H HH | 0……23 | 小时(24时制) |
| h hh | 1……12 | 小时(12时制,和a、A搭配使用) |
| a A | am pm | 上、下午 |
| m mm | 0……59 | 分钟 |
| s ss | 0……59 | 秒 |
| S | 0……9 | 分秒 |
| SS | 0……99 | 厘秒 |
| SSS | 0……999 | 毫秒 |
| Z ZZ | +12:00 | 时差 |
- 时间的格式化输出:
axisFormat %Y-%m-%d
- 其他
Mermaid所支持的格式化输出:
%a - 缩写的工作日名称。
%A - 完整的工作日名称。
%b - 缩写的月份名称。
%B - 完整的月份名称。
%c - 日期和时间,如“%a %b %e %H:%M:%S %Y”。
%d - 十进制数 [01,31] 月份的零填充日期。
%e - 十进制数 [1,31] 的月份中以空格填充的日期;相当于 %_d。
%H - 小时(24 小时制),十进制数 [00,23]。
%I - 小时(12 小时制)作为十进制数 [01,12]。
%j - 以十进制数表示的一年中的第几天 [001,366]。
%m - 十进制数的月份 [01,12]。
%M - 十进制数 [00,59] 的分钟。
%L - 十进制数的毫秒数 [000, 999]。
%p - 上午或下午。
%S - 秒为十进制数 [00,61]。
%U - 一年中的周数(星期日作为一周的第一天)作为十进制数 [00,53]。
%w - 工作日为十进制数 [0(Sunday),6]。
%W - 一年中的周数(星期一作为一周的第一天)作为十进制数 [00,53]。
%x - 日期,如“%m/%d/%Y”。
%X - 时间,如“%H:%M:%S”。
%y - 没有世纪的年份,十进制数 [00,99]。
%Y - 以世纪为十进制数的年份。
%Z - 时区偏移量,例如“-0700”。
%% - 文字“%”字符。
10.饼状图(Pie)
- 饼图(或圆图)是一种圆形统计图形,它被分成多个切片来说明数字比例。 在饼图中,每个切片的弧长(及其中心角和面积)与其代表的数量成正比。 虽然它因其类似于切片的馅饼而得名,但它的呈现方式有多种变化。
- 如下例:
pie title pie_title
"A":50
"B":40
"C":10
10.1.句法
- 在
Mermaid中画一个饼图是非常容易的:
关键字以pie开始,随后设置标题title,然后将每个标签Label用引号" "括起来,随后跟上冒号:,最后写上该标签所占比例即可。
pie
titie TitleName
"ElementA":numberA
"ElementB":numberB
···
10.2.例子
pie
title Mobile Phone
"Sumsung":18.4
"Apple":13.6
"Xiaomi":9.9
"Vivo":7.4
"OPPO":8.0
"Others":42.6
相关文章:
工欲善其事,必先利其器,Markdown和Mermaid的梦幻联动(2)
该文章Github地址:https://github.com/AntonyCheng/typora-notes/tree/master/chapter03-mermaid 在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template & CSDN文…...
STM32基础--使用寄存器点亮流水灯
GPIO 简介 GPIO 是通用输入输出端口的简称,简单来说就是 STM32 可控制的引脚,STM32 芯片的 GPIO 引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。STM32 芯片的 GPIO被分成很多组,每组有 16 个引脚…...
代码随想录训练营Day25:● 216.组合总和III ● 17.电话号码的字母组合
216.组合总和III 题目链接 https://leetcode.cn/problems/combination-sum-iii/description/ 题目描述 思路 自己写的效率会慢一些,而且没有用到剪枝 class Solution {List<List<Integer>> list new ArrayList<>();List<Integer> lis…...
SwiftUI的 特性 - ViewModify
SwiftUI的 特性 - ViewModify 记录一下SwiftUI的 特性 - ViewModify的使用方式 可以通过viewModify来管理视图的样式,结合extension来完成封装达到解偶效果 import SwiftUI/// 我们可以通过viewModify来管理视图的样式,来达到解偶效果 struct DefaultB…...
中间件 | RPC - [Dubbo]
INDEX 1 Dubbo 与 web 容器的关系2 注册发现流程3 服务配置3.1 注册方式 & 订阅方式3.2 服务导出3.3 配置参数 4 底层技术4.1 Dubbo 的 spi 机制4.2 Dubbo 的线程池4.3 Dubbo 的负载均衡策略4.3 Dubbo 的协议 1 Dubbo 与 web 容器的关系 dubbo 本质上是一个 RPC 框架&…...
【中等】保研/考研408机试-二叉树相关
目录 一、基本二叉树 1.1结构 1.2前序遍历(注意三种遍历中Visit所在的位置) 1.2中序遍历 1.3后序遍历 二、真题实战 2.1KY11 二叉树遍历(清华大学复试上机题)【较难】 2.2KY212 二叉树遍历二叉树遍历(华中科技大…...
自动驾驶---Motion Planning之构建SLT Driving Corridor
1 背景 在上篇博客《自动驾驶---Motion Planning之Speed Boundary》中,主要介绍了Apollo中Speed Boundary的一些内容,可以构造ST图得到边界信息,最后结合粗糙的速度曲线和路径曲线,即可使用优化的方法求解得到最终的轨迹信息(s,s,s,l,l,l)。 本篇博客笔者主要介绍近…...
本地文件包含漏洞利用
目录 前期信息收集获取网站权限获取服务器权限纵向提权 前期信息收集 拿到目标的资产,先试一下IP能不能访问 探测一下目标的端口运行的是什么服务 nmap -sC -sV xx.xx9.95.185 -Pn获取网站权限 我们可以知道目标的80端口上运行着http服务,服务器是u…...
【docker】docker的常用命令
📝个人主页:五敷有你 🔥系列专栏:中间件 ⛺️稳中求进,晒太阳 常规命令 docker version #查看docker 版本信息docker info #显示docker 的系统信息,包括镜像和容器数量docker --help #查看所有的命…...
jmeter实战
jmeter学习 1,接口在定义时,post请求参数尽量放在body里面,get请求参数尽量放在parameters里面,否则会导致jmeter请求接口报错的问题(jmeter底层有较为严格的请求格式) 2,定义全局变量使用:Config Elemen…...
面试官常问问题
1、请你简单的自我介绍一下? 【Tips】① 口述内容不可与简历内容冲突;②阐述方式避免过度官方 且语速较快;③言简意赅,直击要害,抓重点突出项;④面试前应自己模拟练习几次,避免过度紧张导致的口…...
外包就干了2个月,技术退步明显....
先说情况,大专毕业,18年通过校招进入湖南某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…...
面向对象 汇总(详细内容见Day12—16)
面向对象 汇总(详细内容见Day12—16) 文章目录 面向对象 汇总(详细内容见Day12—16)一、概念二、类三、对象四、成员属性/成员变量五、成员方法六、构造方法七、private - 私有化八、封装九、this - 本对象十、分包十一、static -…...
结构体联合体枚举和位段
文章目录 结构体结构体类型的声明特殊的声明 结构的自引用结构体变量的定义和初始化结构体内存对齐为什么要内存对齐结构体传参结构体实现位段(位段的填充&可移植性)位段位段的内存分配空间如何开辟位段的跨平台问题位段的应用 枚举枚举类型的定义枚…...
人类程序员真要失业?首位“AI软件工程师”亮相引爆科技圈
初创公司Cognition成立不到两个月,但已经拥有十名天才工程师。他们推出了一款名为Devin的人工智能(AI)助手,可以协助人类软件工程师完成各种开发任务。Devin与现有的其他AI编码者不同,它能够从头开始构建网站、自动部署…...
redis的过期策略以及内存淘汰机制
redis采用的是定期删除惰性删除策略。 为什么不用定时删除策略? 定时删除,用一个定时器来负责监视key,过期则自动删除。虽然内存及时释放,但是十分消耗CPU资源。在大并发请求下,CPU要 将时间应用在处理请求,而不是删除key,因此没有采用这一策…...
华为数通方向HCIP-DataCom H12-821题库(多选题:161-180)
第161题 以下关于IPv6优势的描述,正确的是哪些项? A、底层自身携带安全特性 B、加入了对自动配置地址的支持,能够无状态自动配置地址 C、路由表相比IPv4会更大,寻址更加精确 D、头部格式灵活,具有多个扩展头 【参考答案】ABD 【答案解析】 第162题 在OSPF视图下使用Filt…...
网络通信与网络协议
网络编程是指利用计算机网络实现程序之间通信的一种编程方式。在网络编程中,程序需要通过网络协议(如 TCP/IP)来进行通信,以实现不同计算机之间的数据传输和共享。在网络编程中,通常有三个基本要素 IP 地址:定位网络中某台计算机端口号port:定…...
【矩阵】240. 搜索二维矩阵 II【中等】
搜索二维矩阵 II 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1: 输入:matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22…...
详解uniapp的生命周期
这篇文章主要介绍了 uniapp 的生命周期, 应用生命周期是指应用程序从启动到关闭的整个过程,包括应用程序的启动、前后台切换、退出等, 需要的朋友可以参考下 Uniapp 作为一款跨平台应用开发框架,具有丰富的生命周期,以下是 Uniapp 的生命周期…...
JavaScript注释的艺术:gh_mirrors/js/js教你写出自解释代码
JavaScript注释的艺术:gh_mirrors/js/js教你写出自解释代码 【免费下载链接】js :art: A JavaScript Quality Guide 项目地址: https://gitcode.com/gh_mirrors/js/js 在JavaScript开发中,注释是代码质量的重要组成部分,但很多开发者误…...
为什么要使用幂等防重复提交,它的逻辑是什么对比其他的来说有什么优势
好,这个问题非常关键,尤其是在金融、支付、电商、表单提交流水线等场景,理解“为什么用幂等 防重复提交”和“它和其他方案比的优势”是做高可靠系统的核心。一、为什么要做幂等防重复提交?1️⃣ 重复请求是现实世界里的必然在真…...
AI能力已经成为2026年的分水岭:2026年企业如何选对人力资源管理平台
HR SaaS系统是基于云端部署的人力资源管理软件,帮助企业实现招聘、人事、绩效、薪酬等HR业务的数字化管理。2026年的HR SaaS已经从传统的流程工具进化为AI驱动的智能管理平台,能够自动处理简历筛选、智能推荐人才、生成绩效面谈纪要等复杂任务࿰…...
为什么传统绩效考核正在被OKR取代?2026年企业目标管理的智能化选择
OKR绩效管理系统是帮助企业实施目标与关键成果法(Objectives and Key Results)的数字化工具,通过可视化目标设定、进度追踪和结果评估,让团队目标对齐更清晰、执行更高效。2026年的主流系统已集成AI能力,能自动生成目标…...
“证死你,证伟我”——波普尔“证伪主义”是逻辑诈骗,1+1=2才是真正的科学
“证死你,证伟我”——波普尔“证伪主义”是逻辑诈骗,112才是真正的科学摘要本文作者以技术专家立场,将波普尔证伪主义定性为“逻辑原罪”与“学术诈骗”。核心指控为六个字:“证死你”——用“不可证伪”剥夺完美理论(…...
微生物网络分析参数配置与结果验证:microeco中SpiecEasi的进阶应用指南
微生物网络分析参数配置与结果验证:microeco中SpiecEasi的进阶应用指南 【免费下载链接】microeco An R package for data analysis in microbial community ecology 项目地址: https://gitcode.com/gh_mirrors/mi/microeco 在微生物生态学研究中,…...
如何一次删除iPad上的多个应用程序? - 5 种有效方法
随着时间的推移,您的 iPad 可能会积累许多不必要的应用程序,导致存储空间不足并影响设备性能。因此,最好的方法是删除这些应用程序。然而,逐个删除它们可能很耗时;一次性删除多个应用程序可以更有效地释放空间并提高设…...
用STM32F4做个PWM信号发生器:按键调参+OLED显示,示波器实测验证
用STM32F4打造高精度PWM信号发生器:从原理到实战 在电子开发与测试中,PWM信号发生器是不可或缺的工具。专业信号源价格昂贵,而基于STM32F4的开发板却能以极低成本实现类似功能。本文将带你从零构建一个带OLED显示和按键控制的PWM信号发生器&…...
GB28181国标协议实战:用WVP+ZLMediaKit搭建一个支持级联的轻量级视频中台
GB28181国标协议实战:构建轻量级视频中台的架构设计与实现 在安防监控与视频管理领域,GB28181协议已经成为设备互联互通的事实标准。对于需要整合多品牌设备、实现统一管理的技术团队而言,如何快速搭建一个稳定可靠的视频中台是项目落地的关键…...
如何通过系统性抗体研发服务加速创新药物开发?
一、为何现代抗体药物研发需要系统性技术支撑?抗体药物作为生物制药领域的核心组成部分,在肿瘤、自身免疫疾病、神经系统疾病等重大疾病治疗中展现出革命性潜力。然而,从靶点验证到临床候选分子确立的研发过程充满复杂挑战:抗体分…...
