前端工程化-node/npm/babel/polyfill/webpack 一文速通
文章主要介绍了前端工程化的相关内容,包括 Node 环境、npm 包管理器及其命令、配置和镜像,package.json 文件,babel 和 polyfill 用于解决 JavaScript 兼容性问题,以及 webpack 这一前端构建工具的作用、核心概念、构建流程、安装使用等。
00、前端搬砖框架 🔥
开发 ⇨ 构建 ⇨ 部署上线 ⇨ 摸鱼:
01、Node.js/npm ☘️
Node.JS 是一个基于 Chrome V8 引擎 的 JavaScript 运行时环境,不是JS库(是C++开发的),是用来解释执行JavaScript 代码的。我们开发Web应用中的JavaScript 代码都是运行在浏览器上,有了Node.JS,就可以用JavaScript 来开发中间件、后端服务了。
我们在VSCode中用到的很多组件都是基于Node.JS来开发运行的,如构建工具webpack、vue-cli。
1.1、什么是npm?
npm(Node Package Manager)为Node.JS的包管理器,用来管理JS组件模块的,包括安装、卸载、管理依赖等。很多语言都有自己的包管理器,如Java
的maven
、.Net
的Nuget
等。
npm仓库(registry):官方的 npm仓库 存放了大量的、几乎所有的 JS组件(轮子)。在这里,你会发现你不是一个人在战斗!大家开源的各种前端组件库都是发布到这个集中式的大仓库里,使用npm工具就可以从仓库里学习(copy)、安装使用各种组件了。
1.2、什么是yarn/pnpm?
yarn、pnpm的作用同npm一样,都是包管理工具,使用方式都比较相似。
- npm:这是Node.js官方自带的包管理工具,
- yarn:由于早期npm存在一些不完善的问题,于是一些大公司推出了yarn。
- npm完善:受yarn的反向推动,后来npm逐步升级完善。
- pnpm:一个比较新包管理工具,相比npm、yarn,有更好的下载速度、磁盘管理、依赖管理。
1.3、npm命令/配置
NodeJS官网 下载安装包,安装Node.JS的时候就自带npm了,可以直接使用。npm是一个命令行工具,指令都是在cmd命令行工具中执行的,常用指令如下:
常用指令 | 说明 |
---|---|
node -v | 查看nodeJS版本,也用来验证node是否安装 |
node | 进入node命令环境,可运行任何JavaScript代码了 |
console.log('hello world') | 在node环境中执行JS代码 |
npm -v | 查看npm版本 |
npm install -g <包名称@版本号> | 安装一个模块,@可指定版本号,-g 表示全局安装。npm install -g vuex@3 |
npm uninstall <包名称> | 卸载一个模块 |
npm update <包名称> | 更新模块 |
npm list -g | 查看所有全局安装的模块 |
npm list <包名称> | 查看模块的版本信息,npm list vuex |
npm init | npm初始化,会生成一个 package.json 文件 |
npm install | 自动安装 package.json 文件中的模块 |
npm install -save <包名称> | 在package 文件的dependencies 写入依赖,用于生产环境。简写 npm i -S |
npm install -save-dev <包名称> | 在package 文件的devDependencies 写入依赖,开发环境。简写:npm i -D |
npm cache clean -f | 清除缓存 |
🔸配置本地的包存储目录:新建npm包的文件夹用于存放包的资源。
- 全局npm包存储路径
node_global
:npm config set prefix "D:\Project_Files\npm\node_global"
- npm包的缓存路径
node_cache
:npm config set cache "D:\Project_Files\npm\node_cache"
🔸环境配置:修改环境变量:系统属性 ➤ 环境变量。重启一下VSCode、命令行工具才生效。
- ❶ 添加一个系统变量:系统变量 ➤ 新建:变量名=
NODE_PATH
,变量值= 上面准备好的全局npm
包的路径下的模块路径D:\Project_Files\npm\node_global\node_modules
。 - ❷ 添加Path路径:打开系统变量列表中的
Path
变量,新建一个值=全局npm路径D:\Project_Files\npm\node_global
到这里就完成了基础配置了,可以通过命令安装组件了。
🔸npm仓库镜像:默认的npm仓库在国外,下载可能不稳定、比较慢,可以改为国内的淘宝镜像(每10分钟更新一次)。
- 查看包的仓库地址:
npm config get registry
- 设置仓库地址为淘宝镜像:
npm config set registry https://registry.npmmirror.com/
- 或者安装
cnmp
插件:npm install -g cnpm --registry=https://registry.npmmirror.com
🔸在VSCode中使用:
设置
>> Terminal › Integrated › Default Profile: Windows
的选项值为一个命令行工具,推荐“Git Bash”,重启VS!就可以VSCode中的终端使用npm指令了。
1.4、package.json
每个项目都有一个 package.json 文件,内容是一个json对象。用于定义项目依赖的各种模块,及项目配置信息、模块的配置信息。命令 npm init -y
可创建一个初始package.json文件。
{"name": "vuep3", //*项目/模块名称"version": "0.1.0", //*项目版本,格式为:「主版本号. 次版本号. 修订号」"private": true, //是否私有"scripts": { //npm 脚本命令,通过 npm run 执行命令"serve": "vue-cli-service serve", //启动vue-cli-server服务"build": "vue-cli-service build", //编译"test:unit": "vue-cli-service test:unit", //执行单元测试"lint": "vue-cli-service lint" //执行代码检查?},"dependencies": { //生产环境项目依赖,通过"npm install -save <包名称>"安装组件,或"npm i -S""core-js": "^3.8.3", //key为模块名,value为模块版本号"vue": "^2.6.14" //},"devDependencies": { //开发环境项目依赖,开发、编译中使用,不会输出到生产环境,安装指令:npm i -D"@babel/core": "^7.12.16","@babel/eslint-parser": "^7.12.16","@vue/cli-plugin-babel": "~5.0.0","@vue/cli-plugin-eslint": "~5.0.0","@vue/cli-service": "~5.0.0","@vue/eslint-config-airbnb": "^6.0.0","eslint": "^7.32.0","eslint-plugin-import": "^2.25.3","eslint-plugin-vue": "^8.0.3","eslint-plugin-vuejs-accessibility": "^1.1.0","vue-template-compiler": "^2.6.14"},"eslintConfig": { //检查文件配置"root": true,"env": {"node": true},"extends": [ "plugin:vue/essential", "@vue/airbnb" ],"parserOptions": {"parser": "@babel/eslint-parser" },"rules": {}},"browserslist": [ //项目需要兼容的浏览器配置,处理js、css兼容性是会用到"> 1%","last 2 versions","not dead"]
}
🔸package.json文件中版本号的说明,版本号格式:「主版本号. 次版本号. 修订号」
。
~
:匹配最新的修改的版本号,"~1.2.3
" 匹配1.2.x
中最新的版本。^
:匹配最新的此版本+修订版本号,^1.2.3
会匹配1.x.x
中最新的版本。*
:匹配最新的x.x.x
版本。
02、babel/polyfill 为何物❓
babel 是用来编译JavaScript代码的,解决JavaScript兼容性问题的。
2.1、什么是polyfill?
polyfill 意为 腻子 /垫片,目的是解决JavaScript代码的兼容性问题,解决方式就是用浏览器支持的方式模拟实现一遍。如ES2015+ 的很多不错的特性在一些古老的浏览器下存在兼容性问题,如异步promise
、map、新API方法等。于是就有了替代方案,如下示例代码,判断如果不支持promise
则模拟实现一个,这就称之为 polyfill
(polyfill/ˈpɒli fɪl/ 腻子脚本)。
window.Promise = (function(window){if(window.Promise){return window.Promise}else{window.Promise = function(){ } // 兼容代码,模拟实现}
})(window)
于是各种各样的polyfill
就出现了,为了统一规范和管理,于是出现了 babel
!
2.2、什么是babel?
babel 是一个针对ECMScript语言兼容性处理的工具链,(babel /ˈbeɪbl/ 巴别塔,一座通往天堂的高塔,来自圣经的故事),将ES2015+的代码转译为向后兼容的JavaScript代码。其核心功能就是转译代码,转译过程简单来说,先对JS代码进行词法、语法分析抽象为语法树,然后对语法树进行变换和代码生成。第二步就有很多babel的工具链插件参与了,用于不同类型代码的转换生成。
❓babel能干什么?
- 语法转换,如let、const、箭头函数等新的语法。
polyfill
代码,如异步promise
、map、新API方法等。需引入插件,如@babel/polyfill
,由于存在全局污染+重复代码问题,被废弃;@babel/plugin-transform-runtime
代替- 其他代码转换,如TypeScript、JSX。
❓大量的冗余代码怎么办?
使用babel,可以在代码编译的时候就解决所有的JS兼容性问题。但问题是冗余JS代码会比较多,有些客户的浏览器比较先进,并不需要polyfill
(或只需要少量即可),也要加载这么多JS。于是有两个解决方法:
- 静态按需引入:在编译时指定需要兼容的浏览器及版本,按需引入
polyfill
,如@babel/preset-env
插件,useBuiltIns
参数设置需兼容的浏览器。 - 动态按需引入:把
polyfill
代码放到服务器上,客户端动态的判断浏览器的情况再请求polyfill
代码,如@polyfill.io
方案。
❓怎么使用? 简单了解下
- 安装babel核心库,@babel/core
- 安装插件babel的工具链插件/预设(preset预设的插件集合)
- 通过
@babel/cli
指令,或者webpack、vue-cli来执行babel
编译转换。
2.3、Vue-cli中的babel
vue-cli中使用了@vue/babel-preset-app
预设,包含了babel-preset-env、JSX 支持以及为最小化包体积优化过的配置,可以通过 babel.config.js
进行配置。
03、webpack速览 📢
vue-cli
是建立在webpack基础之上的,简化了繁琐的webpack配置和使用,先初步了解下webpack基本原理和流程。
3.1、webpack是干什么的?
webpack 是一个强大的前端构建工具,也是基于Node.js开发和运行,作用就是把开发态的各种代码编译(构建、打包)为浏览器可(更好)运行的代码。webpack配置灵活,包含丰富的扩展插件,webpack的各项能力也都是通过这些插件来完成的。
✔️核心作用:提高开发效率!
- ✅代码编译:提高写Bug效率,可以愉快的利用模块化、现代的ES6语法,及高级的CSS。
- CSS代码编译:less、sass的转换,CSS兼容性补全等。
- JS代码编译:ES6语法的兼容性转,利用
babel/polyfill
相关插件 - 代码校验:对CSS、JS代码的规范性校验检查,
ESLint
插件 - 热更新:开发态修改代码动态更新页面,实时预览,方便开发调试。
- ✅代码优化:
- 模块依赖,处理各种第三方组件的依赖,避免重复加载、冲突。
- 代码模块打包:代码合并、压缩,减少体积、网络请求次数。
- 代码混淆:提高代码安全性。
- 资源优化,不限于JS、CSS,支持处理各种资源,如小图优化内嵌到代码中。
📢 在webpack中,每个文件都是模块,webpack 按照一定规则来加载、编译这些模块。
🟢webpack 核心概念:
- 🔸entry 入口 : 从哪里开始?从一个根文件入口,如“
./src/main.js
”。 - 🔸output 出口 : 到哪里去?文件编译输出位置,如“
./dist
”。 - 🔸loader 加载器 : 对源码进行转换,不同类型模块(文件)采用不同的加载器来编译转换。
- css代码:css-loader、less-loader、sass-loader、postcss-loader ... 。
- 图片资源:url-loader、file-loader ... 。
- HTML:html-minify-loader 压缩。
- Javscript:
babel-loader
转换ES6文件到ES5,babel是webpack内置的JS编译器组件。 - ...等等。
- 🔸plugin 插件 : 处理加载器完成不了的功能,通过webpack暴露的API和生命周期钩子来执行各种处理,所以插件可以在打包的不同阶段参与。
- 打包输出文件处理:拆分chunk以控制输出的文件,如提取css到一个单独文件。
vue
中复制public
到输出目录的copy-webpack-plugin
。- 每次打包前清空
dist
目录的clean-webpack-plugin
。
3.2、构建流程
webpack的构建是一个串行过程,这个过程就是把各个插件(loader、plugin)串联起来执行。✏️画图图吧,大概这样子的:
① 初始化👍
- 读取并组装配置信息进行初始化,配置信息来源包括配置文件、
cli
参数、默认配置。 - 初始化插件、配置插件的参数。
② 编译👍
- 从
entry
入口文件开始(vue中入口文件默认为“./src/main.js
”),递归找到所有的依赖模块,调用相应的loader
编译处理文件内容。 - 产生chunk:chunk(/tʃʌŋk/ 块)是webpack构建过程中的块,一个chunk包括等多个模块,为某个入口文件找到的所有依赖模块。然后webpack根据配置为chunk 生成资源列表(chunk assets),最终输出到文件。
③ 输出👍
根据配置确定输出的路径、文件名,输出到文件系统。
3.3、安装使用
npm安装webpack
、webpack-cli
两个组件。
//1.全局环境安装webpack
npm install webpack -g
//2.进入项目目录
npm init -y //初始化npm,-y忽略询问
npm install webpack webpack-cli --save-dev //安装webpack、webpack-cli 到开发环境
webpack.config.js文件简介:
var path = require('path');module.exports = {//模式 开发模式打包的是未压缩文件mode:"development",// 入口文件,是模块构建的起点,同时每一个入口文件对应最后生成的一个 chunk。entry: './src/main.js',// 生成文件,是模块构建的终点,包括输出文件与输出路径。
output: {path: path.resolve(__dirname, 'dist'),filename: '[name].js'
},
// 这里配置了处理各模块的 loader ,包括 css 预处理 loader ,es6 编译 loader,图片处理 loader。
module: {rules: [{test: /\.m?js$/,exclude: /(node_modules|bower_components)/,use: {loader: 'babel-loader',options: { presets: ['@babel/preset-env'] }}}{ test: /\.css$/, use: 'css-loader' },{ test: /\.ts$/, use: 'ts-loader' }]},
// webpack 各插件对象,在 webpack 的事件流中执行对应的方法。
plugins: [new webpack.HotModuleReplacementPlugin()
]
};
package.json中添加构建指令,就可以运行了:npm run build
来编译代码了。
"scripts": {"build":"webpack"
},
04、express搭建简易服务器 ✅
express 是一个基于Node.js 的组件,用于搭建一个WEB服务器,使用非常简便、灵活,(express /ɪkˈspres/ 快速、快递)。有必要了解一下,就可以自己开发服务端API了。
express 是 Node.js 官方推荐的Web开发框架,使用广泛,除了核心http服务,还有很多功能。如静态资源服务、模板解析(可用于服务端渲染)、丰富的插件支持等。如果要创建一个完整的后端项目,可以借助express
的脚手架组件搭建一个更完整的web框架。
①、准备环境:先创建一个项目文件夹 server-express
//1、创建一个项目文件夹 server-express
//2、进入项目目录
cd ../server-express
//3、初始化npm
npm init -f
//4、安装express
npm install express -D
②、编写服务端程序:创建一个index.js
//引入express模块,注意该代码是要基于Node.js运行,需要用Node的模块写法
let express = require('express');
let path = require('path');
//创建express实例
let server = new express();
//设置静态资源访问,就可以直接访问./static 目录的静态资源了
server.use('/static',express.static(path.resolve(__dirname, './static')));
//启用json解析支持,用于解析body的json数据
server.use(express.json());
//添加监听端口
server.listen(3000, err => {if (!err)console.log('服务器端启动成功!地址:http://localhost:3000');
})//配置API路由:get
server.get('/user/:userId', (req, res) => {//req.params 获取路由动态参数,req.query获取url上的get参数,同vue-routerconsole.log(req.params, req.query);//返回响应数据res.json({ id: req.params.userId, name: 'sam', age: 30 });
})
//配置API路由:post
server.post('/user/add', (req, res) => {//req.body 获取post数据console.log(req.body);//返回响应数据res.send({ status: 'OK', message: "更新成功" });
})
③、运行:node index.js
//启动服务端
$ node index.js
服务器端启动成功!地址:http://localhost:3000//测试
http://localhost:3000/static/img01.jpg
http://localhost:3000/user/100?type=vip
http://localhost:3000/user/add // post: {"name": "张三", "age": 40}
#参考资料
- 带你入门前端工程
- 面试官:Webpack系列
- Webpack5.0学习总结-基础篇
- 链接:https://juejin.cn/post/7181628057877217340
相关文章:
前端工程化-node/npm/babel/polyfill/webpack 一文速通
文章主要介绍了前端工程化的相关内容,包括 Node 环境、npm 包管理器及其命令、配置和镜像,package.json 文件,babel 和 polyfill 用于解决 JavaScript 兼容性问题,以及 webpack 这一前端构建工具的作用、核心概念、构建流程、安装…...
Spring Security PasswordEncoder接口(密码编码)
密码编码(通常称为哈希)是一种安全措施,它将明文密码转换为独特的字符字符串。 主要目的是确保即使数据存储遭到破坏,存储的密码也不会轻易被破解。 与加密不同,哈希是一个单向过程——这意味着无法从哈希值中恢复原…...
C# 数据结构之【树】C#树
以二叉树为例进行演示。二叉树每个节点最多有两个子节点。 1. 新建二叉树节点模型 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace DataStructure {class TreeNode{public int Data { get;…...
树莓派2装FreeBSD14.1 Raspberry Pi2 install FreeBSD14.1 00000121:error:0A000086:SSL
树莓派2代的Model B采用Broadcom BCM2836 900MHz的四核SoC,1GB内存,是新一代开拓者,兼容1代B。相比之下,树莓派2的性能比1代提升6倍,内存翻了一番。Raspberry Pi 2不仅能跑全系列ARM GNU/Linux发行版,而且支…...
探索C/C++的奥秘之stack和queue
1. stack的介绍和使用 1.1 stack的介绍 1. stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。具体什么是适配器呢?其实就是由现有的东西进行转换,转化出我要的东…...
[开源]1.2K star!中后台方向的低代码可视化平台,超赞!
大家好,我是JavaCodexPro! “时间就是金钱,效率就是生命”,快速搭建高质量中后台的低代码可视化搭建平台尤为重要! 今天JavaCodexPro给大家分享一款超赞的低代码可视化搭建平台 - Marsview ,旨在简化开发…...
算法编程题-排序
算法编程题-排序 比较型排序算法冒泡排序选择排序插入排序希尔排序堆排序快速排序归并排序 非比较型排序算法计数排序基数排序 本文将对七中经典比较型排序算法进行介绍,并且给出golang语言的实现,还包括基数排序、计数排序等非比较型的算法的介绍和实现…...
【AIGC】如何准确引导ChatGPT,实现精细化GPTs指令生成
博客主页: [小ᶻZ࿆] 本文专栏: AIGC | 提示词Prompt应用实例 文章目录 💯前言💯准确引导ChatGPT创建爆款小红书文案GPTs指令案例💯 高效开发GPTs应用的核心原则明确应用场景和目标受众构建多样化风格模板提问与引导技巧持续优…...
【Axure高保真原型】或和且条件
今天和大家分享或和且条件案例的原型模板,效果包括: 可以选择指标、等式和填写对应值构成条件等式; 点击添加条件按钮,可以增加一行新的条件; 点击所在行的号按钮,可以在该行下方添加一行新的条件&#x…...
KubeVirt下gpu operator实践(GPU直通)
KubeVirt下gpu operator实践(GPU直通) 参考《在 KubeVirt 中使用 GPU Operator》,记录gpu operator在KubeVirt下实践的过程,包括虚拟机配置GPU直通,容器挂载GPU设备等。 KubeVirt 提供了一种将主机设备分配给虚拟机的机制。该机制具有通用性…...
Vue通过file控件上传文件到Node服务器
功能: 1.多文件同时上传、2.拖动上传、3.实时上传进度条、4.中断上传和删除文件、5.原生file控件的美化 搁置的功能: 上传文件夹、大文件切片上传、以及其他限制条件未处理 Node服务器的前置准备: 新建文件夹: file_upload_serve初始化npm: npm …...
如何在 SQL Server 中新增账户并指定数据库权限
在日常的数据库维护与开发中,管理用户的权限是必不可少的一环。本文将指导你如何在 SQL Server 中为新用户创建账户,并为其指定相应的数据库权限,使其只能查看有权访问的数据。我们将以步骤和代码示例的方式展示整个流程。用户权限分配包括:读取权限、写入权限、执行权限。…...
c#编码技巧(十九):各种集合特点汇总
.NET 常用集合对比: .NET 常见的线程安全集合 .NET 只读集合...
汽车软件DevOps解决方案
汽车软件DevOps解决方案是专为现代汽车行业设计的一套集成化需求、开发、测试、部署、OTA与监控,旨在加速软件开发流程,提高软件质量和安全性,同时确保整个生命周期的高效性和灵活性。以下是经纬恒润汽车软件DevOps解决方案的关键组成部分和优…...
同步的意义以及机制
一、同步的意义 同步(Synchronization)的意义在于确保在多线程环境中,多个线程对共享资源的访问是安全的,避免竞争条件(race conditions)和数据不一致的情况。 具体来说,同步的核心目标是&…...
leetcode 面试150之 156.LUR 缓存
请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -…...
启发式搜索算法复现
🏡作者主页:点击! 🤖编程探索专栏:点击! ⏰️创作时间:2024年11月21日19点05分 神秘男子影, 秘而不宣藏。 泣意深不见, 男子自持重, 子夜独自沉。 论文链接 点击开启你的论文编程之旅…...
【IDE】使用指南
定期更新实用技能,建议关注收藏点赞。 友情链接: 点击跳转常见代码编辑器的报错解决方案 目录 常用快捷键pycharm右下角边栏脚本头安装IDE的插件git配置TODO 代码编辑器里有许多小技巧,便于办公。本篇主要以pycharm,vscode等主流常用IDE为…...
设计编程网站集:简述可扩展性系统设计(笔记)
视频连接:简述可扩展性系统设计 三个关键原则 无状态 松散耦合 异步处理 扩展 负载均衡 缓存 分片...
「Mac玩转仓颉内测版25」基础篇5 - 布尔类型详解
本篇将介绍 Cangjie 中的布尔类型,包括布尔值的定义、运算操作符、逻辑运算、布尔类型的常见应用场景及其在条件判断中的应用,帮助开发者理解和使用布尔类型。 关键词 布尔类型定义布尔运算逻辑运算符条件判断常见应用场景 一、布尔类型概述 布尔类型&…...
Fashion-VDM:引领视频虚拟试穿技术的新篇章
引言 随着虚拟现实和增强现实技术的飞速发展,视频虚拟试穿(VVT)已成为时尚产业的一大创新领域。然而,现有的VVT方法在服装细节和时间一致性方面仍存在诸多不足。为了解决这些问题,Johanna Karras等人提出了Fashion-VDM,一种基于视频扩散模型(VDM)的新型视频虚拟试穿技…...
Scala中的集合复习(1)
Map、Set、Array、List 一、集合的三大类 1.序列Seq表示有先后顺序的集合。(Array、List) 2.集Set:表示无序且不重复的集合。 3.映射Map:表示键值对。 Stack:栈,特点是:后进先出。 packag…...
Java依赖包漏洞检测命令
1、漏洞扫描工具 maven插件方式:Dependency-Check 2、命令 检查单个 Maven 工程的安全漏洞 mvn dependency-check:check 这个命令会在 target 目录下生成一个 dependency-check-report.html 文件,其中包含了依赖项的安全漏洞分析报告。 检查多个 M…...
【Java】强制类型转换
int a23; short b(short) a; 小的接受大的接受不了,强制类型转换. 带有Buffer的,带有流的,都是数组。 网络流,文件流都是数组. 这种就是流。 操作系统底层就是C. 没有直系关系的,不让转换 语法不报错,运行…...
RabbitMQ消息可靠性保证机制4--消费端限流
7.7 消费端限流 在类似如秒杀活动中,一开始会有大量并发写请求到达服务端,城机对消息进行削峰处理,如何做? 当消息投递的速度远快于消费的速度时,随着时间积累就会出现“消息积压”。消息中间件本身是具备一定的缓冲…...
查找萤石云IOS Sdk中的编解码接口
2021/1/20 以前的时候,碰到的问题,想把萤石云视频介入到TRTC,但是... 萤石云的IOS接口中没有相应的解码播放库,也就是找不到PlayerSDK对应部分,怎么做呢? 一个是坐等萤石云开放这部分接口,可能…...
erchas
#include <iostream> #include <vector> https://gitee.com/tongchaowei/front-native-page-template/tree/main/image-display/template-01 using namespace std; class BinaryTree { private: vector<char> tree; // 存储二叉树的数组 int size;…...
【网络安全】SSL(一):为什么需要 Keyless SSL?
未经许可,不得转载。 文章目录 背景正文背景 随着网站和应用程序向云端迁移,使用 HTTPS(SSL/TLS)加密流量已成为行业标准。然而,传统的 HTTPS 配置要求服务器持有网站的私钥,这在云计算环境中引发了一系列安全性和合规性问题。一旦云服务器遭到攻击,私钥泄露可能带来不…...
ggplot2 分面图等添加注释文字,相加哪里加哪里: 自定义函数 AddText()
如果分面图上还想再添加文字,只能使用底层的grid包了。 函数定义 # Add text to ggplot2 figures # # param label text you want to put on figure # param x position x, left is 0, right 1 # param y position y, bottom is 0, up 1 # param color text color…...
解读缓存问题的技术旅程
目录 前言1. 问题的突发与初步猜测2. 缓存的“隐身术”3. 缓存策略的深层优化4. 反思与感悟结语 前言 那是一个普通的工作日,团队例行的早会刚刚结束,我正准备继续优化手头的模块时,突然收到了用户反馈。反馈的内容是部分数据显示异常&#…...
无锡做网站哪家公司好/目前好的推广平台
python列出指定目录"c:\"所有的后缀名为*.txt 的文并输出每个文件的创建日期和大小下载文件:python列出指定目录.rarpython提取文件夹中所有子文件夹下所有文件的某一行每当看见这个软弱的自己,就想到自己曾经不堪回首的往事,和那个怀念至今&a…...
使用动易模版制作网站/重庆镇海seo整站优化价格
在监控大量服务器时,如果将所有的请求都发送到一个zabbix server上,将会对我们的zabbix server造成很大的压力,我们在规划多个区域或机房进行监控的时候,会考虑到使用zabbix proxy 来代理zabbix server 的部分功能。zabbix server…...
男女做那个全面视频网站/互联网广告推广好做吗
实验三用Excel软件进行绘图一、实验目的使学生较熟练地掌握资料整理和统计图表的绘制方法。要求会使用EXCEL绘制的图表、图形,以及公式的编辑和计算。二、实验器具计算机三、实验要求每位同学一台计算机独立完成操作,并结合习题按照操作情况写出。四、实…...
wordpress去除顶部导航/手机网站seo免费软件
HTML5 中工作线程(Web Worker)简介 至 2008 年 W3C 制定出第一个 HTML5 草案开始,HTML5 承载了越来越多崭新的特性和功能。它不但强化了 Web 系统或网页的表现性能,而且还增加了对本地数据库等 Web 应用功能的支持。其中ÿ…...
安居客房产官方网站/重庆森林电影高清在线观看
昨天有学员咨询这个SolidWorks艺术立方体怎么绘制,他在自己绘制的过程中出现一点小问题,今天就给大家分享一下SolidWorks练习题,比较的简单,都是SolidWorks常规的命令练习,一起来看一下怎么建模吧。SolidWorks艺术立方…...
怎么建设网站空间和备案/关键词林俊杰在线听免费
Excel作为常用数据处理软件,非常适合做一些数据统计类的工作,比如求一组数据的标准差,中位数,均值:假设A列有若干随机数据,我们用函数ARAND()*1000来表示函数功能rand函数用于返回大于等于0及小于1的均匀分…...