Mermaid 简介 Mermaid 是一个基于 JavaScript 的图表绘制工具,它使用类似 Markdown 的简单语法来编写,并动态地将它们渲染成图表。 Mermaid 支持的图表类型包括: 流程图 (Flowchart) : 用关键词 graph 或 flowchart 表示 顺序图 (Sequence Diagram) : 用关键词 sequenceDiagram 表示 类图 (Class Diagram) : 用关键词 classDiagram 表示 状态图 (State Diagram) : 用关键词 stateDiagram 表示 实体关系图 (Entity Relationship Diagram) : 用关键词 erDiagram 表示 用户旅程图 (User Journey Diagram) : 用关键词 journey 表示 甘特图 (Gantt Diagram) : 用关键词 gantt 表示 饼图 (Pie Chart Diagram) : 用关键词 pie 表示 象限图 (Quadrant Chart) : 用关键词 quadrantChart 表示 ...
学习笔记
未读层次分析法 层次分析法,简称 AHP,是指将与决策总是有关的元素分解成目标、准则、方案等层次,在此基础之上进行定性和定量分析的决策方法。该方法是美国运筹学家匹茨堡大学教授萨蒂于 20 世纪 70 年代初,在为美国国防部研究“根据各个工业部门对国家福利的贡献大小而进行电力分配”课题时,应用网络系统理论和多目标综合评价方法,提出的一种层次权重决策分析方法。 层次分析法一般包括以下几个步骤: 建立层次结构模型 构造判断矩阵 层次单排序及其一致性检验 层次总排序及其一致性检验 建立层次结构模型 将将决策的目标、考虑的因素(决策准则)和决策方案,按它们之间的相互关系分为最高层、中间层和最低层,画出层次结构图。 最高层:目标层。决策的目的、要解决的问题。 中间层:准则层。考虑的因素、决策的准则。 最低层:方案层。决策时可供选择的方案。 构造判断矩阵 在确定各层次各因素之间的权重时,如果只是定性的结果,则常常不容易被别人接受,因而 Saaty 等人提出一致矩阵法,即不把所有因素放在一起比较,而是两两相互比较,对此时采用相对尺度,以尽可能减少性质不同的诸因素相互比较的困难,以提高准确度。如对 ...
学习笔记
未读投资问题 设有一笔资金 10 万,未来 5 年内可以投资 4 个项目: 项目 1:每年初投资,次年年末回收本利 115%; 项目 2:第 3 年初投资,第 5 年末回收本利 125%,投资额不能超过 3 万; 项目 3:第 2 年初投资,第 5 年末回收本利 140%,投资额不能超过 4 万; 项目 4:每年初投资,当年年末回收本利 106%。 要使 5 年后收益最大化,请问 5 年内应如何投资? 模型建立 考虑每个项目的可投资时段,可得到下表: 第 i 年初 1 2 3 4 5 项目 1 ✓\checkmark✓ ✓\checkmark✓ ✓\checkmark✓ ✓\checkmark✓ 项目 2 ✓\checkmark✓ 项目 3 ✓\checkmark✓ 项目 4 ✓\checkmark✓ ✓\checkmark✓ ✓\checkmark✓ ✓\checkmark✓ ✓\checkmark✓ 表中的对号 ✓\checkmark✓ 表示该项目在该年初可以投资,空白表示该项目在该年初不可以投资。 设 xijx_{ij}xij ...
学习笔记
未读程序是算法与数据结构的载体,是计算机用以解决问题的工具。 而在程序设计比赛中,最主流的语言是 C++。 学习编程是学习程序设计最 基础 的部分。 如何开始 环境配置 工欲善其事,必先利其器。 集成开发环境(IDE) IDE 是 Integrated Development Environment 的缩写,即集成开发环境。它包括了代码编辑器、编译器、调试器等程序从编写到运行的一系列工具。配置较为简单,适合入门玩家。 在竞赛中最常见的是 Dev-C++。Dev-C++ 的优点在于界面简洁友好,安装便捷,支持单文件编译,因此成为了许多入门程序设计选手以及 C++ 语言初学者的首选。 Dev-C++ 起源于 Colin Laplace 编写的 Bloodshed Dev-C++。该版本自 2005 年 2 月 22 日停止更新。后续又有 Orwell Dev-C++、Embarcadero Dev-C++ 等衍生版本。 以上的 Dev-C++ 分发都被认为是「官方的」。此外,在 2015 年 Orwell Dev-C++ 停止更新后,因为教学需要,一位来自中国的个人开发者 royqh1979 ...
学习笔记
未读Markdown 扩展语法入门 John Gruber 的原始设计文档中概述的基本语法主要是为了应付大多数情况下的日常所需元素,但对于某些人来说还不够,这就是扩展语法的用武之地。 一些个人和组织开始通过添加其他元素(例如表,代码块,语法突出显示,URL 自动链接和脚注)来扩展基本语法。可以通过使用基于基本 Markdown 语法的轻量级标记语言,或通过向兼容的 Markdown 处理器添加扩展来启用这些元素。 Markdown 扩展语法可用性 并非所有 Markdown 应用程序都支持扩展语法元素。您需要检查您的应用程序所使用的轻量级标记语言是否支持您要使用的扩展语法元素。如果没有,那么仍然有可能在 Markdown 处理器中启用扩展。 轻量标记语言 有几种轻量级标记语言是 Markdown 超集。它们包含 Gruber 的基本语法,并通过添加其他元素(例如表,代码块,语法突出显示,URL 自动链接和脚注)在此基础上构建。许多最受欢迎的 Markdown 应用程序使用以下轻量级标记语言之一: CommonMark GitHub Flavored Markdown (GFM) Mar ...
学习笔记
未读Markdown 基本语法 Markdown 是一种轻量级标记语言,排版语法简洁,让人们更多地关注内容本身而非排版。它使用易读易写的纯文本格式编写文档,可与 HTML 混编,可导出 HTML、PDF 以及本身的 .md 格式的文件。因简洁、高效、易读、易写,Markdown 被大量使用,如 Github、Wikipedia、简书等。 千万不要被「标记」、「语言」吓到,Markdown的语法十分简单,常用的标记符号不超过十个,用于日常写作记录绰绰有余,不到半小时就能完全掌握。 就是这十个不到的标记符号,却能让人优雅地沉浸式记录,专注内容而不是纠结排版,达到「心中无尘,码字入神」的境界。 Markdown 标题语法 要创建标题,请在单词或短语前面添加井号 (#) 。# 的数量代表了标题的级别。例如,添加三个 # 表示创建一个三级标题 (<h3>) (例如:### My Header)。 Markdown语法 HTML 预览效果 # Heading level 1 <h1>Heading level 1</h1> Heading level ...
学习笔记
未读Markdown 是什么? Markdown 是一种轻量级的标记语言,可用于在纯文本文档中添加格式化元素。Markdown 由 John Gruber 于 2004 年创建,如今已成为世界上最受欢迎的标记语言之一。 专注于文字内容; 纯文本,易读易写,可以方便地纳入版本控制; 语法简单,没有什么学习成本,能轻松在码字的同时做出美观大方的排版。 使用 Markdown 与使用 Word 类编辑器不同。在 Word 之类的应用程序中,单击按钮以设置单词和短语的格式,并且,更改立即可见。而 Markdown 与此不同,当你创建 Markdown 格式的文件时,可以在文本中添加 Markdown 语法,以指示哪些单词和短语看起来应该有所不同。 例如,要表示标题,只须在短语前面添加一个井号即可(例如, # Heading One)。或者要加粗一个短语,只须在短语前后各加两个星号即可(例如,**this text is bold**)。可能需要一段时间才能习惯在文本中看到 Markdown 语法,尤其是如果你已习惯了所见即所得的应用程序。下图展示了 Markdown 文件在 Visual St ...
学习笔记
未读核心概念 进程(process):对程序的创建、运行到终止全过程的抽象。 上下文切换(context switch):通过保存和恢复进程在运行过程中的状态(即上下文), 使进程可以暂停、切换和 恢复, 从而实现了 CPU 资源的共享。 线程(thread):针对进程间数据不易共享、通信开销高等问题, 操作系统在进程内部引入了更加轻量级的执行单元。 迁程(fiber):由千上下文切换需要进入内核, 开销较大, 引入了纤程 (fiber)这一抽象, 允许上下文直接在用户态切换。 进程 进程的状态 进程一般可以分为 5 个状态: 新生状态(new):进程刚刚被创建出来,还未完成初始化,不能被调度执行。 预备状态(ready):该状态表示进程可以被调度执行, 但还未被调度器选择。由于 CPU 数量可能少于进程数量, 在某一时刻只有部分进程能被调度到 CPU 上执行。在被调度器选择执行后,进程迁移至运行状态。 运行状态(running):进程正在 CPU 上运行。 当一个进程执行一段时间后,调度器可以选择中断它的执行并重新将其放回调度队列,它就迁移至预备状态。当进程运行结束,它会迁移至 ...
学习笔记
未读核心概念 虚拟内存(virtual memory):应用程序面向虚拟内存编写,而不是物理地址,CPU 负责将虚拟地址翻译成物理地址。 虚拟内存设计的三个目标: 高效性:不能明显降低应用程序性能,不能过多占用物理内存 安全性:保证应用程序隔离 透明性:开发者无需考虑虚拟内存实现细节 虚拟地址与物理地址 物理地址与虚拟地址 物理地址:物理内存的真实地址,CPU 通过总线发送物理地址请求读写内存。 虚拟地址:以应用程序自身的数据和代码为参照形成的地址,应用程序使用虚拟地址访问内存中的数据和代码。 地址翻译:CPU 将虚拟地址转换为物理地址的过程。 使用虚拟地址访问物理内存 MMU:内存管理单元(Memory Management Unit),属于 CPU 中的重要部件,负责将虚拟地址转换为物理地址。 TLB:转址旁路缓存(Translation Lookaside Buffer),属于 MMU 的部件,用于缓存经常访问的页表项。 分段与分页机制 分段机制:操作系统以段(一段连续的物理区域)管理/分配物理内存 相关概念:段表、段号、段内地址、段表基址寄存器 分段机制带来外部 ...
学习笔记
未读操作系统的目标 用户目标:方便使用、容易学习、可靠、不易出错、高效等。 系统目标:易于实现与维护、灵活、可靠、不易出错、高效等。 复杂系统的构建必须考虑内部。 不同目标之间往往存在冲突。 不同需求之间需要进行权衡。 在操作系统的发展历史中,曾多次出现因过于强调各种极致性能而导致设计结构不合理并最终失败的案例(Windows VISTA)。 操作系统的机制与策略 控制复杂度:机制与策略相分离 功能 机制 策略 登录 什么用户、以什么权限登录等 输入处理、策略文件管理、桌面启动加载等 调度 先到先服务、时间片轮转等 调度队列的设计、调度实体的表示、调度的中断处理等 ··· ··· ··· 优点: 不同的策略适应不同的应用需求,而不需要重新实现对应的机制。 通过持续优化具体的机制来不断完善一个策略的实现。 操作系统复杂度管理方法(M.A.L.H) 模块化(modularity) 模块化通过"分而治之"原则,将一个复杂系统分解为一些列通过明确定义的接口进行交互的模块,并严格确保模块间的界限。 模块划分要充分考虑高内聚和低耦合,使 ...