TypeScript笔记-进行中

news2024/11/15 4:53:58

学习来源:

本笔记由尚硅谷教学视频整理而来

文章目录

  • 学习来源:
  • 一.TS简介
    • TypeScript是什么
    • TypeScript增加了什么
  • 二环境搭建
    • 安装nvm
    • 环境搭建
  • 二.TypeScript中的基本类型
    • 类型声明
    • 类型
    • 类型示例代码
  • 三.编译配置
    • 自动编译文件
    • 自动编译整个项目
  • 四.使用webpack打包
    • 初始化项目
    • 下载构建工具
    • 配置使用webpack
    • Babel

一.TS简介

TypeScript是什么

TS文档

  • 以JavaScript为基础构建的语言
  • 是JavaScript的超集(扩展)
  • 可以在任何支持JavaScript的平台中执行
  • TS不能被JS解析器直接执行,TS需要编译成JS然后执行
    在这里插入图片描述

TypeScript增加了什么

  • 类型
  • 支持ES的新特性
  • 添加ES不具备的新特性
  • 丰富的配置选项,可以配置编译成不同版本的JS,兼容老版本
    在这里插入图片描述

二环境搭建

  • 需要安装js解析器,依赖于node环境,所以需要安装node.js

  • 如果本地有多个版本的node.js,可以安装nvm(node版本管理工具)

安装nvm

官方下载地址
选择安装包下载安装
在这里插入图片描述
nvm下载后,推荐配置下载镜像,找到安装的目录
在这里插入图片描述

node_mirror: https://npm.taobao.org/mirrors/node/
npm_mirror: https://npm.taobao.org/mirrors/npm/

在这里插入图片描述

nvm常用命令
nvm ls available 查看可以安装的版本
nvm install 版本号
nvm ls /nvm list 查看有的版本号
nvm use 版本号 切换版本在这里插入图片描述
使用nvm install 版本号,安装自己需要的node.js版本

环境搭建

1.安装node.js
2.使用npm全局安装typescript,在命令行用npm i -g typescript命令
3.编写一个ts文件
4.在命令行使用tsc对ts文件进行编译 tsc xxx.ts

二.TypeScript中的基本类型

类型声明

  • 类型声明是TS非常重要的一个特点;

  • 通过类型声明可以指定TS中变量(参数、形参)的类型;

  • 指定类型后,当为变量赋值时,TS编译器会自动检查值是否符合类型声明,符合则赋值,否则报错;

  • 简而言之,类型声明给变量设置了类型,使得变量只能存储某种类型的值;

  • 语法:

      let 变量: 类型;
      
      let 变量: 类型 =;
      
      function fn(参数: 类型, 参数: 类型): 类型{
          ...
      }
    
  • 自动类型判断

    • TS拥有自动的类型判断机制
    • 当对变量的声明和赋值是同时进行的,TS编译器会自动判断变量的类型
    • 所以如果你的变量的声明和赋值时同时进行的,可以省略掉类型声明

类型

类型例子描述
number1, -33, 2.5任意数字
string‘hi’, “hi”, hi任意字符串
booleantrue、false布尔值true或false
字面量其本身限制变量的值就是该字面量的值
any*任意类型
unknown*类型安全的any
void空值(undefined)没有值(或undefined)
never没有值不能是任何值
object{name:‘孙悟空’}任意的JS对象
array[1,2,3]任意JS数组
tuple[4,5]元素,TS新增类型,固定长度数组
enumenum{A, B}枚举,TS中新增类型
  • number

      let decimal: number = 6;
      let hex: number = 0xf00d;
      let binary: number = 0b1010;
      let octal: number = 0o744;
      let big: bigint = 100n;
    
  • boolean

     let isDone: boolean = false;
    
  • string

     let color: string = "blue";
     color = 'red';
     
     let fullName: string = `Bob Bobbington`;
     let age: number = 37;
     let sentence: string = `Hello, my name is ${fullName}.
     
     I'll be ${age + 1} years old next month.`;
    
  • 字面量

    也可以使用字面量去指定变量的类型,通过字面量可以确定变量的取值范围

     let color: 'red' | 'blue' | 'black';
     let num: 1 | 2 | 3 | 4 | 5;
    
  • any

      let d: any = 4;
      d = 'hello';
      d = true;
    
  • unknown

      let notSure: unknown = 4;
      notSure = 'hello';
    
  • void

     let unusable: void = undefined;
    
  • never

      function error(message: string): never {
        throw new Error(message);
      }
    
  • object

     let obj: object = {};
    
  • array

      let list: number[] = [1, 2, 3];
      let list: Array<number> = [1, 2, 3];
    
  • tuple

      let x: [string, number];
      x = ["hello", 10]; 
    
  • enum

     enum Color {
       Red,
       Green,
       Blue,
     }
     let c: Color = Color.Green;
     
     enum Color {
       Red = 1,
       Green,
       Blue,
     }
     let c: Color = Color.Green;
     
     enum Color {
       Red = 1,
       Green = 2,
       Blue = 4,
     }
     let c: Color = Color.Green;
    
  • 类型断言

    有些情况下,变量的类型对于我们来说是很明确,但是TS编译器却并不清楚,此时,可以通过类型断言来告诉编译器变量的类型,断言有两种形式:

    • 第一种

       let someValue: unknown = "this is a string";
       let strLength: number = (someValue as string).length;
      
    • 第二种

        let someValue: unknown = "this is a string";
        let strLength: number = (<string>someValue).length;
      

类型示例代码

 
 //基础类型

 let a:10;
 a=10;

 //可以使用|来连接多个类型(联合类型)

 let b:"male"|"female";
 b="male";
 b="female"

 let c:boolean|string;
 c=true;
 c="yes";


 //any表示任意类型,设置了any相当于关闭了TS的类型检测,不建议使用any
 //如果不指定类型,则TS会自动判断类型为any

 let d:any;
 d=10;
 d="hello";
 d=true

 console.log(d)

 //unknown 表示位置的类型
let e:unknown;
e=10;
e="hello";

let s:string;

s=d; //d的类型为any,可以赋值给s
//s=e;  //e的类型为unknown,不可以赋值给s

//unknown其实就是一个类型安全的any,不能进行赋值

if(typeof e==="string"){
    s=e;
}

//类型断言,可以用来告诉解析器变量的实际类型
// 语法
// 变量 as 类型
// <类型>变量
s=e as string
s=<string>e;


function haveReturn():boolean{
    return true
}

function haveAnyReturn(num:number){
    if(num>10){
        return 123;
    }
    console.log("返回多个类型")
    return true;
}
function haveVoid():void{
    console.log("没有返回值")
    return;
}

function haveNever():never{
    console.log("表示什么都没有,用来报错")
    throw new Error('报错了')
   
}

//object表示一个对象
let aa:object;
aa={};
aa=function(){};

//{}用来指定对象可以包含哪些属性
//语法:{属性名:属性值,属性名:属性值}
//在属性名称后面加一个?,表示属性是可选的
let bb:{name:string,age?:number};

bb={name:"zyp",age:18};

console.log(bb)

//[propName:string]:any 表示任意类型的属性
let cc:{name:string,[propName:string]:any}
cc={name:'zs',age:18,sex:true}


//设置函数结构的类型
//语法:(形参:类型...)=>返回值
let dd:(a:number,b:number)=>number;
dd=function(a,b){
    return a+b;
}

//数组的类型声明
//类型[]
//类型Array[类型]
let ee:string[]
e=['a',"b",'c']
console.log(e)

let ff:number[]
ff=[1,2,3];

let gg:Array<number>;
gg=ff
gg=[1,2,3];
console.log(gg)

//元组,就是固定长度的数组

let hh:[string,string,number]
hh=['zs','ls',123]

//enum 枚举
enum Gender{
    Male=0,
    Female=1
}

let ii:{name:string,gender:number}
ii={
    name:'zs',
    gender:Gender.Female
}

console.log(ii.gender===Gender.Male)

//&表示同时满足
let jj:{name:string}&{age:number};
jj={name:'朱雨鹏',age:12}

//类型的别名

//给1|2|3|4|5起一个别名
type myType=1|2|3|4|5;
let kk:myType
let ll:myType

三.编译配置

自动编译文件

编译文件时,使用 -w 指令后,TS编译器会自动监视文件的变化,并在文件发生变化时对文件进行重新编译。

示例:

  tsc xxx.ts -w

自动编译整个项目

如果直接使用tsc指令,则可以自动将当前项目下的所有ts文件编译为js文件。

但是能直接使用tsc命令的前提时,要先在项目根目录下创建一个ts的配置文件 tsconfig.json

tsconfig.json是一个JSON文件,添加配置文件后,只需只需 tsc 命令即可完成对整个项目的编译

配置选项:

include

  • 定义希望被编译文件所在的目录
  • 默认值:[“**/*”]

示例:

  "include":["src/**/*", "tests/**/*"]

上述示例中,所有src目录和tests目录下的文件都会被编译

exclude

  • 定义需要排除在外的目录
  • 默认值:[“node_modules”, “bower_components”, “jspm_packages”]

示例:

  "exclude": ["./src/hello/**/*"]

上述示例中,src下hello目录下的文件都不会被编译

extends

  • 定义被继承的配置文件

示例:

"extends": "./configs/base"

上述示例中,当前配置文件中会自动包含config目录下base.json中的所有配置信息

files

  • 指定被编译文件的列表,只有需要编译的文件少时才会用到

示例:

"files": [
    "core.ts",
    "sys.ts",
    "types.ts",
    "scanner.ts",
    "parser.ts",
    "utilities.ts",
    "binder.ts",
    "checker.ts",
    "tsc.ts"
  ]
  • 列表中的文件都会被TS编译器所编译

compilerOptions

  • 编译选项是配置文件中非常重要也比较复杂的配置选项
  • 在compilerOptions中包含多个子选项,用来完成对编译的配置

项目选项:

  • target

    • 设置ts代码编译的目标版本

    • 可选值:

      ES3(默认)、ES5、ES6/ES2015、ES7/ES2016、ES2017、ES2018、ES2019、ES2020、ESNext

    示例:

     "compilerOptions": {
         "target": "ES6"
     }
     ```
    
    - 如上设置,我们所编写的ts代码将会被编译为ES6版本的js代码
    
    
  • lib

    • 指定代码运行时所包含的库(宿主环境)

    • 可选值:

      ES5、ES6/ES2015、ES7/ES2016、ES2017、ES2018、ES2019、ES2020、ESNext、DOM、WebWorker、ScriptHost …

    示例:

     "compilerOptions": {
         "target": "ES6",
         "lib": ["ES6", "DOM"],
         "outDir": "dist",
         "outFile": "dist/aa.js"
     }
     ```
    
    
  • module

    • 设置编译后代码使用的模块化系统

    • 可选值:

      CommonJS、UMD、AMD、System、ES2020、ESNext、None

    示例:

     "compilerOptions": {
         "module": "CommonJS"
     }
     ```
    
    
  • outDir

    • 编译后文件的所在目录

    • 默认情况下,编译后的js文件会和ts文件位于相同的目录,设置outDir后可以改变编译后文件的位置

    -示例:

    • "compilerOptions": {
          "outDir": "dist"
      }
      
    • 设置后编译后的js文件将会生成到dist目录

  • outFile

    • 将所有的文件编译为一个js文件

    • 默认会将所有的编写在全局作用域中的代码合并为一个js文件,如果module制定了None、System或AMD则会将模块一起合并到文件之中

    示例:

     "compilerOptions": {
         "outFile": "dist/app.js"
     }
     ```
    
    
  • rootDir

    • 指定代码的根目录,默认情况下编译后文件的目录结构会以最长的公共目录为根目录,通过rootDir可以手动指定根目录

    示例:

     "compilerOptions": {
         "rootDir": "./src"
     }
     ```
    
    
  • allowJs

    • 是否对js文件编译
  • checkJs

    • 是否对js文件进行检查

    示例:

     "compilerOptions": {
         "allowJs": true,
         "checkJs": true
     }
     ```
    
    
  • removeComments

    • 是否删除注释
    • 默认值:false
  • noEmit

    • 不对代码进行编译
    • 默认值:false
  • sourceMap

    • 是否生成sourceMap,SourceMap 的主要作用是为了方便调试,解决了源代码和运行代码不一致所产生的问题
    • 默认值:false
  • 严格检查

    • strict
      • 启用所有的严格检查,默认值为true,设置后相当于开启了所有的严格检查
    • alwaysStrict
      • 总是以严格模式对代码进行编译
    • noImplicitAny
      • 禁止隐式的any类型
    • noImplicitThis
      • 禁止类型不明确的this
    • strictBindCallApply
      • 严格检查bind、call和apply的参数列表
    • strictFunctionTypes
      • 严格检查函数的类型
    • strictNullChecks
      • 严格的空值检查
    • strictPropertyInitialization
      • 严格检查属性是否初始化
  • 额外检查

    • noFallthroughCasesInSwitch
      • 检查switch语句包含正确的break
    • noImplicitReturns
      • 检查函数没有隐式的返回值
    • noUnusedLocals
      • 检查未使用的局部变量
    • noUnusedParameters
      • 检查未使用的参数
  • 高级

    • allowUnreachableCode
      • 检查不可达代码
      • 可选值:
        • true,忽略不可达代码
        • false,不可达代码将引起错误
    • noEmitOnError
      • 有错误的情况下不进行编译
      • 默认值:false

四.使用webpack打包

通常情况下,实际开发中我们都需要使用构建工具对代码进行打包;

TS同样也可以结合构建工具一起使用,下边以webpack为例介绍一下如何结合构建工具使用TS;

步骤如下:

初始化项目

进入项目根目录,执行命令 npm init -y,创建package.json文件

下载构建工具

命令如下:

npm i -D webpack webpack-cli webpack-dev-server typescript ts-loader clean-webpack-plugin html-webpack-plugin

共安装了7个包:

  • webpack:构建工具webpack
  • webpack-cli:webpack的命令行工具
  • webpack-dev-server:webpack的开发服务器
  • typescript:ts编译器
  • ts-loader:ts加载器,用于在webpack中编译ts文件
  • html-webpack-plugin:webpack中html插件,用来自动创建html文件
  • clean-webpack-plugin:webpack中的清除插件,每次构建都会先清除目录

配置使用webpack

根目录下创建webpack的配置文件webpack.config.js

//引入入一个包
const path=require('path')

//引入html插件
const HTMLWebpackPlugin=require('html-webpack-plugin')
const { CleanWebpackPlugin } = require("clean-webpack-plugin");

// webpack所有的配置信息都应该写在module.exports
module.exports={
   // 指定文件入口
   entry: "./src/index.ts",

   //设置环境
   mode:"development",

   //指定打包文件所在目录
   output:{
       // 指定文件打包目录
       path:path.resolve(__dirname,'dist'),
       //打包后的文件名
       filename:"bundle.js",
       
   //     environment: {
   //     arrowFunction: false // 关闭webpack的箭头函数,可选
   //  }
   },

   
   //指定webpack打包要使用的模块
   module:{
       // 指定要加载的规则
       rules:[{
           //test指定的是规则生效的文件
           test: /\.ts$/,
           // 要使用的loader,使用顺序从后往前,先把ts转化成js,再把新版本js转换成旧版本js
           use: [
               //配置bable
               {
                   //指定加载器
                   loader:"babel-loader",
                   //设置babel
                   options:{
                       //设置预定义环境
                       presets:[
                           [
                           //指定环境的插件
                           "@babel/preset-env",
                           //配置信息
                           {
                               //浏览器版本
                               targets:{
                                   "chrome":"58",
                                   "ie":"11"
                               },
                               //指定corejs版本
                               "corejs":"3",
                               //使用corejs的方式 "usage" 表示按需加载
                               "useBuiltIns":"usage"

                           }
                       ]
                   ]
                   }

               },
               {
                   loader: "ts-loader",
               }    
           ],
           //要排除的文件
           exclude: /node_modules/
       }]
   },

   // 配置webpack插件
   plugins:[
       //打包构建前清空插件
       new CleanWebpackPlugin(),
       //打包关联html插件
       new HTMLWebpackPlugin(
           {
               // title:"这是一个自定义的title"
               template:"./src/index.html"
           }
       ),
   ],

   //设置引用模块
   resolve:{
       extensions:['.ts','.js']
   }



}

配置TS编译选项

根目录下创建tsconfig.json,配置可以根据自己需要

{
   "compilerOptions": {
       "target": "ES2015",
       "module": "ES2015",
       "strict": true
   }
}

修改package.json配置

修改package.json添加如下配置

{
 "name": "package",
 "version": "1.0.0",
 "description": "",
 "main": "index.js",
 "scripts": {
   "test": "echo \"Error: no test specified\" && exit 1",
   "build": "webpack",
   "start": "webpack server --open --mode development"
 },
 "keywords": [],
 "author": "",
 "license": "ISC",
 "devDependencies": {
   "@babel/core": "^7.21.0",
   "@babel/preset-env": "^7.20.2",
   "babel-loader": "^9.1.2",
   "clean-webpack-plugin": "^4.0.0",
   "core-js": "^3.28.0",
   "html-webpack-plugin": "^5.5.0",
   "ts-loader": "^9.4.2",
   "typescript": "^4.9.5",
   "webpack": "^5.75.0",
   "webpack-cli": "^5.0.1",
   "webpack-dev-server": "^4.11.1"
 }
}

项目使用

在src下创建ts文件,并在并命令行执行npm run build对代码进行编译;

或者执行npm start来启动开发服务器;


Babel

除了webpack,开发中还经常需要结合babel来对代码进行转换;

以使其可以兼容到更多的浏览器,在上述步骤的基础上,通过以下步骤再将babel引入到项目中;

虽然TS在编译时也支持代码转换,但是只支持简单的代码转换;

对于例如:Promise等ES6特性,TS无法直接转换,这时还要用到babel来做转换;

安装依赖包:

npm i -D @babel/core @babel/preset-env babel-loader core-js

共安装了4个包,分别是:

  • @babel/core:babel的核心工具

  • @babel/preset-env:babel的预定义环境

  • @babel-loader:babel在webpack中的加载器

  • core-js:core-js用来使老版本的浏览器支持新版ES语法

修改webpack.config.js配置文件

...
module: {
    rules: [
        {
            test: /\.ts$/,
            use: [
                {
                    loader: "babel-loader",
                    options:{
                        presets: [
                            [
                                "@babel/preset-env",
                                {
                                    "targets":{
                                        "chrome": "58",
                                        "ie": "11"
                                    },
                                    "corejs":"3",
                                    "useBuiltIns": "usage"
                                }
                            ]
                        ]
                    }
                },
                {
                    loader: "ts-loader",

                }
            ],
            exclude: /node_modules/
        }
    ]
}
...

如此一来,使用ts编译后的文件将会再次被babel处理;

使得代码可以在大部分浏览器中直接使用;

同时可以在配置选项的targets中指定要兼容的浏览器版本;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/372534.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文掌握如何轻松稿定项目风险管理【静说】

风险管理对于每个项目经理和PMO都非常重要&#xff0c;如果管理不当会出现很多问题&#xff0c;咱们以前分享过很多风险管理的内容&#xff1a; 风险无处不在&#xff0c;一旦发生&#xff0c;会对一个或多个项目目标产生积极或消极影响的确定事件或条件。那么接下来介绍下五大…

在成都想转行IT,选择什么专业比较好?

很多创新型的互联网服务公司的核心其实都是软件&#xff0c;创新的基础、运行的支撑都是软件。例如&#xff0c;软件应用到了出租车行业&#xff0c;就形成了巅覆行业的滴滴;软件应用到了金融领域&#xff0c;就形成互联网金融;软件运用到餐饮行业&#xff0c;就形成美团;软件运…

学渣适用版——Transformer理论和代码以及注意力机制attention的学习

参考一篇玩具级别不错的代码和案例 自注意力机制 注意力机制是为了transform打基础。 参考这个自注意力机制的讲解流程很详细&#xff0c; 但是学渣一般不知道 key&#xff0c;query&#xff0c;value是啥。 结合B站和GPT理解 注意力机制是一种常见的神经网络结构&#xff0…

[计算机网络(第八版)]第二章 物理层(复习笔记)

2.1 物理层的概念 物理层是屏蔽掉传输媒体和通信手段的差异&#xff0c;为数据链路层提供一个统一的数据传输服务&#xff0c;将比特流按照传输媒体的需要进行编码&#xff0c;然后将信号通过传输媒体传输到下一个节点的物理层&#xff0c;并不是指具体的传输媒体。用于物理层…

一文带你看懂:如何进行一次高质量CR?

程序员对代码评审&#xff08;Code Review&#xff09;不可谓不熟悉&#xff0c;而代码评审也已经是许多组织的标准化实践。结合笔者的五年多的开发经验&#xff0c;既有经历过零CR的小组织&#xff0c;也有接触过完善CR规范的大厂团队。对于“如何进行一次--高质量的组内代码C…

力扣-销售员

大家好&#xff0c;我是空空star&#xff0c;本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目&#xff1a;607. 销售员二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果5.其他总结前言 …

【测试】自动化测试03(JUnit)

努力经营当下&#xff0c;直至未来明朗&#xff01; 文章目录JUnit一&#xff09; 注解1. Test2. BeforeEach3. BeforeAll4. AfterEach5. AfterAll二&#xff09; 断言&#xff08;Assertions类&#xff09;三&#xff09;用例的执行顺序四&#xff09;参数化五&#xff09;测试…

Qt windeployqt.exe 打包qml

Qt系列文章目录 文章目录Qt系列文章目录前言一、遇到的坑二、参考前言 我们在QtCreator下面开发程序&#xff0c;一般都会遇到工程发布给客户使用的情况。我们通常会使用Qt自带的打包工具&#xff1a;windeployqt.exe。 windeployqt.exe是Qt自带的工具&#xff0c;用于创建应用…

使用windwow windbg 吃透64位分页内存管理

前言 分页基础概念是操作系统基础知识&#xff0c;网上已经有太多太多了。所以本文记录使用windwow内核调试工具验证理论知识。 具体可以参阅intel volume3的 4.1.1 Four Paging Modes章节。 简而言之&#xff1a;CR0.PG 0表示不开启分页.并且根据CR4各种标志开启不同类别的…

力扣-变更性别

大家好&#xff0c;我是空空star&#xff0c;本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目&#xff1a;627. 变更性别二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果5.其他总结前言…

算法设计与分析期末考试复习(三)

动态规划 动态规划算法与分治法类似&#xff0c;其基本思想也是将待求解问题分成若干个子问题。但是经分解得到的子问题往往不是互相独立的。在用分治法求解时&#xff0c;有些子问题被重复计算机了许多次。 如果能够保存已解决的子问题的答案&#xff0c;而在需要时再找出已求…

Scala-抽象类、匿名子类、伴生对象、单例模式

抽象类 匿名子类 伴生对象&#xff08;单例对象&#xff09; 单例设计模式 抽象类 定义抽象类&#xff1a;abstract class Person{} //通过 abstract 关键字标记抽象类定义抽象属性&#xff1a;val|var name:String //一个属性没有初始化&#xff0c;就是抽象属性定义抽象…

应用场景六:同时支持CP343和CP341功能(Modbus连接仪表,以太网连接WINCC)

应用描述&#xff1a; 桥接器同时支持西门子PLC的CP343以太网通讯模块和CP341串口通讯模块的功能。可以同时通过ModbusRTU连接仪表、变频器等串口设备&#xff0c;同时可以通过网口连接组态监控软件WINCC。PLC内部不需要编程&#xff0c;也不需要进行硬件组态配置&#xff0c;…

FME+YOLOV7写DNF自动刷图脚本

目录 前言 一、难点分析 二、实现流程 1.DNF窗口位置获取 2.获取训练数据 3.数据标注 4.数据格式转换 5.数据训练 5.刷图逻辑编写 前言 这是一篇不务正业的研究&#xff0c;首先说明&#xff0c;这不是外挂&#xff01;这不是外挂&#xff01;这不是外挂&#xff01;这只是用a…

【网络原理10】构造HTTP请求、HTTPS加密

目录 一、构造HTTP请求 ①使用form表单构造HTTP请求&#xff1a; form表单是如何提交的 form提交的缺点 ②基于ajax构造http请求 如何使用Jquery框架 二、HTTPS 运营商劫持 HTTP的加密版本&#xff1a;HTTPS ①对称加密&#xff1a;客户端和服务端使用同一把密钥&…

【AcWing】差分及其应用

&#x1f386;音乐分享 光辉岁月 (粤语版)_BEYOND 所谓差分&#xff0c;就是前缀和的逆运算 &#xff08;不懂前缀和的同学可以去C站看一下&#x1f602;&#xff09; 797. 差分 - AcWing题库 代码 #include<iostream> using namespace std; const int N 1e5 10…

怎样选择运动耳机、5款最佳运动蓝牙耳机推荐

你是否在跑步时大幅度抖动让耳机松落&#xff0c;不得不一遍又一遍的塞紧耳机&#xff1f;你是否在游泳时因为耳机进水而懊恼自己大意&#xff1f;没错&#xff0c;在运动过程中这些情况我都有遇到过&#xff01;运动耳机因其使用都是在跑步、游泳、骑行、徒步等场景&#xff0…

Apache Hadoop生态部署-Maxwell(实时数据同步)采集节点安装

目录 Apache Hadoop生态-目录汇总-持续更新 1&#xff1a;安装包准备 2&#xff1a;MySQL 环境准备 2.1&#xff1a;开启MySQL Binlog 2.2&#xff1a;验证mysql配置是否正确 2.3&#xff1a;初始化Maxwell元数据库,分配账号 3&#xff1a;安装 4&#xff1a;测试 Apach…

【开发规范】go项目开发中的[流程,git,代码,目录,微服务仓库管理,静态检查]

文章目录前言一、有哪些规范我们应该遵循二、项目开发流程三、git的代码分支管理1. 分支管理2. commit规范三、go的代码规范四、go项目目录规范五、微服务该采用multi-repo还是mono-repo&#xff1f;1. 引言2. Repos 是什么?3. 什么是 Mono-repo?4. Mono-repo 的劣势5. 什么是…

1、算法导论---时间复杂度、确定性和非确定性图灵机、算法的确定性与非确定性、P问题、NP问题、规约/约化、NPC问题、NP-hard问题

算法导论1、 时间复杂度2、图灵机3、算法的确定性与非确定性4、P问题5、NP问题6、规约/约化7、NPC问题8、NP-Hard问题9、四大问题关系1、 时间复杂度 要想了解算法的问题&#xff0c;首先要知道问题的分类&#xff0c;而要想知道问题的分类&#xff0c;就要先了解时间复杂度。…