一.Git核心基础1.1.Git指南 设置你的用户名和邮件地址 每一个 Git 提交都会使用这些信息,它们会写入到你的每一次提交中,不可更改 如果使用了 --global 选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情, Git 都会使用这些信息 12git config --global user.name "coderxst"git config --global user.email "coderxst@qq.com" 查看配置信息 1git config --list Git别名 12git config --global alias.co checkoutgit config --global alias.br branch 获取远程仓库 方式一:初始化一个Git仓库,并且可以将当前项目的文件都添加到Git仓库中(目前很多的脚手架在创建项目时都会默认创建一个Git仓库) 1git init 方式二:从Git远程仓库,从其它服务器克隆(clone) 一个已存在的 Git 仓库(第一天 ...
通用技术
未读一.基础1.1.终端连接数据库12345# 方式一:mysql -uroot -pxxxxxx# 方式二:mysql -uroot -pEnter password: your password 1.2.SQL 语句分类 DDL(Data Definition Language):数据定义语言 可以通过 DDL 语句对数据库或者表进行:创建、删除、修改等操作 DML(Data Manipulation Language):数据操作语言 可以通过 DML 语句对表进行:添加、删除、修改等操作 DQL(Data Query Language):数据查询语言 可以通过 DQL 从数据库中查询记录;(重点) DCL(Data Control Language):数据控制语言 对数据库、表格的权限进行相关访问控制操作; 1.3.数据库操作 MySQL 默认的数据库 infomation_schema:信息数据库,其中包括 MySQL 在维护的其他数据库、表、列、访问 权限等信息 performance_schema:性能数据库,记录着 MySQL Server 数据库引擎 ...
redux
未读一. redux 核心1.1. redux 入门1.1.1 state 用于数据存储 123const initialState = { count: 0}; 1.1.2. action 通过 action 来更新 state 中的数据 所有数据的变化,必须通过派发(dispatch)action 来更新 action 是一个普通的 JavaScript 对象,用来描述这次更新的 type 和 content 优势与用法 使用 action 可以清晰的知道数据所发生的变化,所有的数据变化都是可追踪、可预测的 目前的 action 是固定的对象,实际开发中,会通过函数来定义,返回一个 action 12const addCounterAction = { type: "ADD_COUNTER", num: 6 };const subCounterAction = { type: "SUB_COUNTER", num: 2 }; 1.1.3. reducer 将 sta ...
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879---title: 分类date: 2023-07-04 19:16:57type: "category" # anzhiyu渲染模板是`categories`top_img: false---<style> #libCategories .card-wrap:hover .card-info:after { width: 300%; } html.windows div#libCategories div.container { display: grid; grid-template-columns: repeat(3, 1fr); grid-gap: 10px; } html.win ...
一、 安装 mingw64(C 语言环境)Rust 默认使用的 C 语言依赖 Visual Studio,但该工具占用空间大安装也较为麻烦,可以选用轻便的 mingw64 包。 1.1 安装地址(1) 下载地址 1-GitHub:Releases · niXman/mingw-builds-binaries · GitHub (2) 下载地址 2-WinLibs:WinLibs - GCC+MinGW-w64 compiler for Windows 1.2 压缩包1.2.1 压缩包下载下面以 GitHub 下载为例: 1.2.2 压缩包关键字说明 架构(Architecture):x86_64 表示压缩包适用于 64 位的 x86 处理器架构。 版本(Version):13.2.0-release 表示压缩包的版本号为 13.2.0,并且是正式发布的版本。 操作系统平台(Operating System Platform): posix:适用于符合 POSIX 标准的操作系统,如 Linux、UNIX 等。 win32:适用于 32 位的 Windows 操作系统。 ...
简介装饰器(Decorator)是一种语法结构,用来在定义时修改类(class)的行为。 在语法上,装饰器有如下几个特征。 (1)第一个字符(或者说前缀)是@,后面是一个表达式。 (2)@后面的表达式,必须是一个函数(或者执行后可以得到一个函数)。 (3)这个函数接受所修饰对象的一些相关值作为参数。 (4)这个函数要么不返回值,要么返回一个新对象取代所修饰的目标对象。 举例来说,有一个函数Injectable()当作装饰器使用,那么需要写成@Injectable,然后放在某个类的前面。 1234@Injectableclass A { // ...} 上面示例中,由于有了装饰器@Injectable,类A的行为在运行时就会发生改变。 下面就是一个最简单的装饰器。 123456function simpleDecorator() { console.log("hi");}@simpleDecoratorclass A {} // "hi" 上面示例中,函数simpleDecorat ...
编程语言
未读类型系统其实在很多语言里面都是有的,比如 Java、Swift、C++等等,但是相对来说 TypeScript 的类型非常灵活。 这是因为 TypeScript 的目的是为 JavaScript 添加一套类型校验系统,因为 JavaScript 本身的灵活性,也让 TypeScript 类型系统 不得不增加更附加的功能以适配 JavaScript 的灵活性 所以 TypeScript 是一种可以支持类型编程的类型系统 这种类型编程系统为 TypeScript 增加了很大的灵活度,同时也增加了它的难度 如果你不仅仅在开发业务的时候为自己的 JavaScript 代码增加上类型约束,那么基本不需要太多的类型编程能力 但是如果你在开发一些框架、库,或者通用性的工具,为了考虑各种适配的情况,就需要使用类型编程 TypeScript 本身为我们提供了类型工具,帮助我们辅助进行类型转换(前面有用过关于 this 的类型工具) 很多开发者为了进一步增强自己的 TypeScript 编程能力,还会专门去做一些类型体操的题目 https://github.com/type-challenges ...
在定义函数、接口或类的时候,不预先指定具体的类型,而在使用的时候再指定具体类型的一种特性 虽然 any 是可以的,但是定义为 any 的时候,其实已经丢失了类型信息 比如传入的是一个 number,那么希望返回的可不是 any 类型,而是 number 类型 所以,需要在函数中可以捕获到参数的类型是 number,并且同时使用它来作为返回值的类型 类型的参数化 通过 <类型> 的方式将类型传递给函数 通过类型推导(type argument inference),自动推到出传入变量的类型 在这里会推导出它们是字面量类型的,因为字面量类型对于函数也是适用的 123456789101112function bar<Type>(arg: Type): Type { return arg;}// 1.完整的写法const res1 = bar<number>(123);const res2 = bar<string>("abc");const res3 = bar<{ name: ...
对于传统的 JavaScript 程序我们会使用函数和基于原型的继承来创建可重用的组件,但对于熟悉使用面向对象方式的程序员使用这些语法就有些棘手,因为他们用的是基于类的继承并且对象是由类构建出来的。 从 ECMAScript 2015,也就是 ES6 开始, JavaScript 程序员将能够使用基于类的面向对象的方式。 使用 TypeScript,我们允许开发者现在就使用这些特性,并且编译后的 JavaScript 可以在所有主流浏览器和平台上运行,而不需要等到下个 JavaScript 版本。 定义类的声明:使用class关键字 声明类的属性:在类的内部声明类的属性以及对应的类型 如果类型没有声明,那么它们默认是 any 的 也可以给属性设置初始化值 在默认的strictPropertyInitialization模式下面我们的属性是必须 初始化的,如果没有初始化,那么编译时就会报错 如果在strictPropertyInitialization模式下确实不希望给属性初始化,可以使用 name!: string语法 类可以有自己的构造函数constructor,通过new关键 ...
TypeScript 的核心原则之一是对值所具有的结构进行类型检查。我们使用接口(Interfaces)来定义对象的类型。接口是对象的状态(属性)和行为(方法)的抽象(描述) 接口初探 在 TypeScript 中,我们使用接口(Interfaces)来定义对象的类型 接口: 是对象的状态(属性)和行为(方法)的抽象(描述) 接口类型的对象 多了或者少了属性是不允许的 可选属性: ? 只读属性: readonly 12345678910111213141516171819202122/** * 需求: 创建Person, 需要对人的属性进行一定的约束 * id是number类型, 必须有, 只读的 * name是string类型, 必须有 * age是number类型, 必须有 * sex是string类型, 可以没有 */// 定义人的接口interface IPerson { id: number; name: string; age: number; sex: string;}const person1: IPerson = { id ...




























