工欲善其事,必先利其器,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 的生命周期…...

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:PluginComponent)
提供外部应用组件嵌入式显示功能,即外部应用提供的UI可在本应用内显示。 说明: 该组件从API Version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。本组件为系统接口。 子组件 无 接口 PluginComponent(value:…...

mysql笔记:15. 事务和锁
文章目录 一、事务概述二、事务基本操作三、事务保存点四、事务的隔离级别1. READ UNCOMMITTED设置事务的隔离级别 2. READ COMMITTED3. REPEATABLE READ4. SERIALIZABLE 五、MySQL的锁InnoDB的锁类型1. InnoDB的行级锁2. InnoDB的表级锁 死锁 在开发过程中,我们经常…...

Learn OpenGL 15 面剔除
面剔除 尝试在脑子中想象一个3D立方体,数数你从任意方向最多能同时看到几个面。如果你的想象力不是过于丰富了,你应该能得出最大的面数是3。你可以从任意位置和任意方向看向这个球体,但你永远不能看到3个以上的面。所以我们为什么要浪费时间…...

EndeavourOs(arch系)安装sunpinyin输入法(ibus) + 迅雷(xunlei-bin)
输入法 yay -S ibus yay -S ibus-libpinyin yay -S ibus-sunpinyin yay -Q ibus ibus-libpinyin ibus-sunpinyin #验证 # 注销然后打开ibus config... # 在Input Method 添加Chinese->SunPinYin # 使用Ctrl Space, 默认Super Space, 请自行修改 # 再次注销,开…...

Spring Cache框架的介绍和使用
Spring Cache spring cache是一个框架,实现类基于注解的缓存功能,只需要简单的加一个注解,就能实现缓存功能,大大简化我们在业务中操作缓存的代码。 spring cache只是提供了一层抽象,底层可以切换不同的cache实现&am…...

perl 用 XML::Parser 解析 XML文件,访问哈希
本篇我们会看到 Perl 成为知名编程语言的关键特色--哈希 hash(2000年以前叫:关联数组)。 在Perl 中,可以使用各种模块和函数来解析 XML元素和属性。其中,最古老的模块是 XML::Parser,它提供了一组完整的X…...

MATLAB中的矩阵和数组,它们之间有什么区别?
MATLAB中的矩阵和数组:概念、区别与联系 MATLAB(Matrix Laboratory,矩阵实验室)作为一款强大的数学软件,广泛应用于工程、科学、数学、计算机科学等领域。在MATLAB中,矩阵和数组是两个核心概念,…...

python爬虫实战——抖音
目录 1、分析主页作品列表标签结构 2、进入作品页前 判断作品是视频作品还是图文作品 3、进入视频作品页面,获取视频 4、进入图文作品页面,获取图片 5、完整参考代码 6、获取全部作品的一种方法 本文主要使用 selenium.webdriver(Firef…...

Day1-力扣刷题学习打卡
1、两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以…...

C语言的位操作与位字段
C语言中的位操作允许程序员直接在整型变量的单个位或位组上进行操作。这种操作在许多低级编程任务中非常有用,尤其是在嵌入式系统编程中,如硬件操作、设备驱动及性能优化等场景。位操作主要使用以下几种位操作符: & (按位与&a…...