appendChildappend 在 JavaScript 中都是用来向 DOM 中添加元素的方法,但它们之间存在一些差异:

appendChild

appendChild 方法是 DOM API 的一部分,用于将一个节点作为最后一个子节点添加到指定父节点中。
appendChild 只能接收一个节点作为参数,如果尝试传入非节点(如字符串),将会抛出错误。
appendChild 方法将返回被添加的节点。
使用示例:

const parentElement = document.getElementById('parent');
const newElement = document.createElement('div');
parentElement.appendChild(newElement); // 在parent元素中添加一个新的div作为子节点

append

append 方法是一个较新的 DOM API,它允许你同时向父节点添加多个子节点或字符串。
append 可以接受任意数量的参数,参数可以是 DOM 节点或者是文本。这使得它比 appendChild 更灵活。
append 不会返回任何值。
使用示例(与你提供的代码类似)

const parentElement = document.getElementById('parent');
const newElement = document.createElement('div');
const textContent = 'Hello, World!';
parentElement.append(newElement, textContent); // 在parent元素中添加一个新的div和文本'Hello, World!'作为子节点

可以安装MinGW或Cygwin来获取GCC编译器。MinGW是一个较为推荐的选择

安装VSCode的C/C++扩展
打开VSCode,前往扩展市场(快捷键Ctrl+Shift+X或Cmd+Shift+X),搜索并安装“C/C++”扩展(作者为Microsoft)。

使用Chocolatey安装MinGW

choco install mingw

Chocolatey是一款为Windows设计的软件管理解决方案,它允许用户通过命令行界面或PowerShell脚本来安装、升级、配置和删除程序。Chocolatey是建立在NuGet和PowerShell技术之上的,它利用这些技术来简化Windows上的软件管理过程。它为Windows提供了类似Linux中apt-get或yum等包管理器的功能。
主要特点
快速安装软件: 可以快速安装单个程序或批量安装多个程序。
易于维护: 方便更新和维护已安装的软件包。
自动化: 支持自动化安装和配置,适用于开发、测试和生产环境。
社区驱动: 拥有庞大的社区支持,提供了数以千计的软件包。
安装Chocolatey
在安装Chocolatey之前,需要确保你的Windows版本至少是7+(包括Windows Server 2003+)并且安装了.NET Framework 4+。使用管理员权限打开命令行界面(CMD)或PowerShell,然后运行以下命令:

Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

常用命令

  • 安装软件包
    choco install <包名>
    ```
    例如,安装Google Chrome:</code></pre>
    <p>choco install googlechrome</p>
    <pre><code>升级软件包:
    choco upgrade <包名>
    升级所有已安装的包:</code></pre>
    <p>choco upgrade all</p>
    <pre><code></code></pre></li>
    <li>卸载软件包:
    <pre><code>choco uninstall <包名></code></pre></li>
    <li>列出已安装的包
    <pre><code>choco list --localonly
    ```
    搜索可用的包:

    choco search <包名>

    获取软件包信息:

    choco info <包名>

  • 检查是否有更新的包:
    choco outdated

    注意事项
    在使用Chocolatey安装或管理软件时,建议使用管理员权限运行CMD或PowerShell,以确保软件可以正确安装和配置。

编译C程序

  • 编译程序
    gcc hello.c -o hello

    这条命令告诉GCC编译器(gcc)去编译源文件hello.c,并将编译后的可执行文件命名为hello。如果不使用-o选项,GCC默认生成的可执行文件名为a.out(在Unix和Linux系统上)。

  • 指定编译标准
    gcc -std=c99 hello.c -o hello

    这条命令通过-std=c99选项指定使用C99标净来编译程序。你也可以根据需要选择其他标准,如c89、c11等。

  • 开启所有警告
    gcc -Wall hello.c -o hello

    使用-Wall选项让GCC显示所有警告信息,这对于发现和修正潜在的错误非常有帮助。

  • 运行C程序

运行程序

  • 在Windows上:

    ./hello

    其他有用的GCC选项

  • 生成调试信息

    gcc -g hello.c -o hello

    使用-O2选项来让GCC对代码进行优化,以提高程序运行的效率。GCC提供了不同级别的优化选项,从-O0(无优化)到-O3(尽可能强的优化),以及-Os(优化程序大小)。

  • 定义宏

    gcc -DNAME=VALUE hello.c -o hello

在使用npm(Node Package Manager)时,有一些常用命令是每个开发者都应该熟悉的,这些建立了在Node.js和前端项目中管理依赖项的基础。下面是一些常用的npm命令:

  1. 初始化一个新项目
    npm init: 交互式创建一个package.json文件。
    npm init -y: 快速创建一个package.json文件,跳过询问步骤,使用默认值。
  2. 安装依赖
    npm install : 安装一个包,并将其添加到package.json文件的dependencies中。
    npm install --save-dev: 安装一个包,并将其添加到package.json文件的devDependencies中。
    npm install: 根据当前目录下的package.json文件安装所有依赖。
  3. 卸载依赖
    npm uninstall : 从项目中移除一个包,并更新package.json和package-lock.json文件。
  4. 更新依赖
    npm update: 更新所有模块到package.json中指定的最新版本。
    npm update : 更新指定的包到最新版本。
  5. 查看安装的包
    npm list: 查看当前项目安装的所有npm包。
    npm list --global: 查看全局安装的所有npm包。
    npm list : 查看特定包的版本和依赖信息。
  6. 运行脚本
    npm run : 运行package.json中scripts对象下的指定脚本。
  7. 发布和管理包
    npm login: 登录到npm账户。
    npm publish: 发布一个包到npm仓库。
    npm version : 更新你的包的版本号(update_type可以是major、minor或patch)。
    npm deprecate @ "": 弃用一个特定版本的包,并提供一个理由。
  8. 管理缓存
    npm cache clean --force: 清除npm缓存。在某些情况下有助于解决与缓存相关的问题。
  9. 查看包信息
    npm view : 查看一个包的详细信息,比如版本号、依赖关系等。

在CloudWatch控制台中,选择“Alarms”。
点击“Create alarm”按钮。
在“Select metric”中,选择“EC2” -> “Per-Instance Metrics” -> 选择你的实例 -> 选择“StatusCheckFailed”。
点击“Select metric”。
配置警报条件:
统计数据(Statistic):选择最小值(Minimum)。
周期(Period):选择5分钟。
条件(Conditions):大于(>)
阈值(Threshold):0
点击“Next”。
在“Configure actions”中,选择“Create new topic”或选择一个已有的SNS topic。
配置通知的接收邮箱。
点击“Next”并完成配置。

Response.blob()方法和Blob()构造函数都可以用来创建Blob对象,但它们的使用场景和目的有所不同。

Response.blob()

Response.blob()是Fetch API的一部分,它是在处理Fetch请求的响应时使用的。当您向一个服务器发送请求并接收到响应时,如果响应数据是二进制数据,您可以使用Response.blob()来获取这些数据的Blob对象。
例如,如果您请求一个图片或视频文件,服务器的响应可以通过Response.blob()转换为Blob对象。转换后的Blob对象可以用于多种用途,比如使用URL.createObjectURL()创建一个URL来显示这个图片或视频。
这个方法是异步的,返回一个Promise对象,这意味着您需要使用.then()方法或async/await语法来处理结果。

fetch('image.png')
  .then(response => response.blob())
  .then(blob => {
    // 使用获取到的blob对象
    const imageUrl = URL.createObjectURL(blob);
    document.querySelector('img').src = imageUrl;
  });

Blob()构造函数

Blob()构造函数用于直接在JavaScript中创建一个新的Blob对象。您可以提供一个数组作为第一个参数,数组中的每个元素都会成为Blob对象的一部分。这些元素可以是字符串、ArrayBuffer或者另一个Blob对象等。第二个参数是一个可选的对象,指定了Blob对象的属性,比如type属性来指定MIME类型。
这个构造函数主要用于在程序中动态创建二进制数据。您可以使用它来创建文件、处理文本或生成媒体内容等。

const blobParts = ['<q id="a"><span id="b">hey!</span></q>']; // 一个包含单个字符串的数组
const blob = new Blob(blobParts, { type: "text/html" }); // 得到blob
// 使用创建的blob对象
const url = URL.createObjectURL(blob);
document.querySelector('iframe').src = url;

Blob(Binary Large Object)对象表示了一个不可变的、原始数据的类文件对象。Blob对象可以表示存储在内存中的大量数据,比如图片、视频、音频或其他二进制格式的文件。通过JavaScript,我们可以用Blob来处理这些数据,实现多种功能,比如文件下载、上传、处理和转换等。

Blob的应用场景

1. 创建和下载文件

您可以使用Blob来动态创建文件内容,并允许用户下载这些文件。例如,您可以将一个文本数组转换成Blob对象,然后通过创建一个指向该Blob的URL,并将其设置为标签的href属性,实现文件的下载功能。

2. 上传文件

在前端,Blob可以用于上传文件。Blob对象可以通过AJAX或Fetch API上传到服务器。这对于上传图片或视频文件等大型文件特别有用,因为Blob可以将文件作为二进制数据传输,提高效率。

3. 从Blob对象创建URL

可以使用URL.createObjectURL()方法从Blob对象创建一个URL。这个URL可以用于在网页上显示Blob数据,例如显示图片或视频。

const blob = new Blob([document.querySelector('textarea').value], { type: 'text/plain' });
const url = URL.createObjectURL(blob);
document.querySelector('img').src = url;

4. 处理媒体文件

Blob非常适合于处理媒体文件,比如图片,MP4视频等。例如,您可以读取用户选择的图片文件,并使用Blob来预览图片;或者,您可以通过JavaScript处理视频文件,比如截取视频的一部分或更改视频的编码格式。

5. 缓存数据

Blob也可以用于前端的数据缓存。对于从服务器获取的大型数据(如JSON数据、图片或视频文件),您可以将其存储为Blob,然后在本地缓存。当需要这些数据时,可以直接从Blob读取,避免重复从服务器加载数据,提高应用性能。