TypeScript 快速入门
TypeScript 快速入门
1. 初识 TypeScript
1.1 TS 是什么?
- 以 JavaScript 为基础构建的语言;
- 一个 JavaScript 的超集;
- 可以在任何支持 JavaScript 的平台执行;
- TypeScript 扩展了 JavaScript 并添加了类型;
- TS 不能被 JS 解析器直接执行(需要先编译为 JS);
1.2 TS 简介
- TypeScript 是 JavaScript 的超集。
- 它对 JS 进行了扩展,向 JS 中引入了类型的概念,并添加了许多新的特性。
- TS 代码需要通过编译器编译为 JS,然后再交由 JS 解析器执行。
- TS 完全兼容 JS,换言之,任何的 JS 代码都可以直接当成 JS 使用。
- 相较于 JS 而言,TS 拥有了静态类型,更加严格的语法,更强大的功能;TS 可以在代码执行前就完成代码的检查,减小了运行时异常的出现的几率;TS 代码可以编译为任意版本的 JS 代码,可有效解决不同 JS 运行环境的兼容问题;同样的功能,TS 的代码量要大于 JS,但由于 TS 的代码结构更加清晰,变量类型更加明确,在后期代码的维护中 TS 却远远胜于 JS。
1.3 TS 增加了什么
- 类型
- 支持 ES 的新特性
- 添加 ES 不具备的新特性
- 丰富的配置选项
- 强大的开发工具
2. TypeScript 开发环境搭建
-
安装 NodeJS
-
全局安装 typescript
npm i typescript -g
-
创建一个 .ts 文件
-
编译
2.1 VScode 编译 ts
-
安装 ts-node
npm i ts-node -g
-
在文件根目录进入终端,运行:
tsc --init
,生成 json 文件 -
在 json 文件中输出路径修改为:
"outDir": "./js/"
; -
终端中运行
tsc -s
,让 VScode 自动监视,也可以使用tsc xxx.ts
单独编译某个 ts 文件。
2.2 给自动编译添加防抖
由于使用 tsc -w
自动编译比较频繁,可以添加一个类似防抖效果,减少不必要的编译
-
安装 chokidar:
npm i chokidar -S
-
在项目根目录下创建一个新文件
watch-and-compile.js
,写入内容const { exec } = require('child_process'); const chokidar = require('chokidar');// 初始化延迟计时器 let timeout;function compile() {console.log('Compiling TypeScript files...');exec('tsc', (err, stdout, stderr) => {if (err) {console.error(`Error: ${stderr}`);} else {console.log(stdout);}}); }// 监听文件变化 const watcher = chokidar.watch('src/**/*.ts', {ignoreInitial: true });watcher.on('all', (event, path) => {console.log(`File ${path} has been ${event}`);// 防抖处理:清除并重新设置计时器if (timeout) clearTimeout(timeout);timeout = setTimeout(compile, 1000); /* 设置时间 */ });console.log('Watching for file changes...');
-
修改
package.json
以增加一个启动脚本{"scripts": {"watch": "node watch-and-compile.js"} }
-
运行以下命令来启动文件变化监听脚本:
npm run watch
。
3. TS 基本类型
3.1 了解 TS 基本类型
-
类型声明
-
类型声明是TS非常重要的一个特点
-
通过类型声明可以指定TS中变量(参数、形参)的类型
-
指定类型后,当为变量赋值时,TS编译器会自动检查值是否符合类型声明,符合则赋值,否则报错
-
简而言之,类型声明给变量设置了类型,使得变量只能存储某种类型的值
-
语法:
let 变量: 类型;let 变量: 类型 = 值;function fn(参数: 类型, 参数: 类型): 类型{... }
-
-
自动类型判断
- TS拥有自动的类型判断机制
- 当对变量的声明和赋值是同时进行的,TS编译器会自动判断变量的类型
- 所以如果你的变量的声明和赋值时同时进行的,可以省略掉类型声明
3.2 基本类型
类型 | 描述 |
---|---|
number | 任意数字 |
string | 任意字符串 |
boolean | 布尔值 |
字面量 | 限制变量的值就是该字面量的值 |
any | 任意类型 |
unknown | 类型安全的 any |
void | 没有值(或 undefined) |
never | 不能是任何值 |
object | 对象 |
array | 数组 |
tuple | 元组,TS新增类型,长度固定的数组 |
enum | 枚举,TS中新增类型 |
-
字面量
也可以使用字面量去指定变量的类型,通过字面量可以确定变量的取值范围
let a: 10; // a = 11; /* 报错,不能将类型“11”分配给类型“10” */let b: 'male' | 'female'; b ='male'; b = 'female';let c: boolean | number; c = true; c = 10;
-
any
可以接收任意类型的值
let d: any; d = 10; d = 'hello'; d = true;
若一个变量设置 any 类型后,相当于关闭了 TS 的类型检查
未声明类型时,变量默认为 any 类型(隐式的 any 类型)
let e;
-
unknown
表示未知类型
let f: unknown; f = 10; f = 'hello';
any、unknown 的区别:
- any 类型的值可以赋值给其它任意类型的值,会影响到其它的值。
- unknown 只能赋值给其他 unknown 类型或 any 类型的值。
unknown 可以看作是安全类型的 any。
-
void
表示空,用在函数中表示没有返回值。
function f(): void {return xxx; /* 报错 */ }
-
never
表示永远不会返回结果
function f(): never {return xxx; /* 报错 */ }
-
object(作用不大)
let g: object; g = {}; g = []; g = function() {};
object 在 TS 中并不实用,因为在 TS 中一切皆对象
-
array
let j: Array<number>; j = [1, 2, 3]; // j = ["1", "2"]; /* 报错,不能将类型“string”分配给类型“number” */let k: string[]; k = ["hello", "world"];
数组两种表示形式:
Array<类型>
或类型[]
。 -
tuple
语法:
变量: [类型1, 类型2]
,类型可以相同,具有个数的限制let l: [string, number]; l = ["hello", 10]; // l = ["hello", "world"]; /* 报错,不能将类型“string”分配给类型“number” */
-
enum
用来定义一组命名的常量值
enum Color {Red,Green,Blue } let m: Color; m = Color.Red; m = Color.Green; m = Color.Blue; // m = Color.yellow; /* 报错,Color 中没有 yellow 属性 */
类型1 | 类型2 ...
表示一个值的类型,满足 类型1 或 类型2;
类型1 & 类型2 ...
表示一个值的类型,满足 类型1 且 类型2,这种表示并没有什么意义,但是可以用在多个值类型的判断,如{参数1: 类型1} & {参数2: 类型2} ..
表示一个对象中 参数1 满足 类型1 且 参数2 满足 类型2;
类型别名:可以给一个类型起一个别名
type Person = {name: string;age: number }; let m: Person; m = {name: "Tom",age: 18 };
3.3 类型断言
类型断言可以用来手动指定一个值的类型,即允许变量从一种类型更改为另一种类型。
语法格式:<类型>值
或 值 as 类型
。
在 TypeScript 中,类型断言(Type Assertion)是一种告诉编译器某个值的具体类型的方法。类型断言有两种常见的语法形式:as
和 !
。
-
as
断言:值 as 类型;
as
断言是 TypeScript 中推荐使用的类型断言语法。它明确地告诉编译器,你确信这个值的类型是什么。- 使用
as
断言时,如果编译器能够推断出这个值可能为null
或undefined
,它不会报错,而是相信你的断言。
-
!
断言:值!;
!
断言(非空断言)是一种更强制的类型断言,它告诉编译器这个值绝对不会是null
或undefined
。- 使用
!
断言时,如果编译器能够推断出这个值可能为null
或undefined
,它会报错,因为!
断言强制排除了这种可能性。
两者的区别:
- 使用
as
断言时,编译器会相信你,认为这个值是你所指定的类型,即使它可能是undefined
。 - 使用
!
断言时,编译器会认为你断言这个值绝对不是undefined
,而实际上它可能是undefined
,可能会报错。
因此,使用 as
断言不会报错,而使用 !
断言会报错,是因为 !
断言强制排除了 undefined
的可能性,而实际上这个值可能是 undefined
。
在 TypeScript 开发中,一般推荐使用
as
断言来进行类型断言。以下是一些原因:
可读性和明确性:
as
断言更加明确和直观,因为它明确地指出了你希望将某个值断言为哪种类型。灵活性:
as
断言允许你在编译器能够推断出值可能为null
或undefined
的情况下,仍然进行类型断言。- 这使得代码更加灵活,因为你可以在不改变编译器行为的情况下,明确地指定类型。
避免过度断言:
!
断言(非空断言)是一种更强制的断言,它告诉编译器这个值绝对不会是null
或undefined
。过度使用!
断言可能会隐藏潜在的空值问题,导致运行时错误。社区惯例:
在 TypeScript 社区中,
as
断言是更常见的做法,因此使用as
断言可以使代码更符合社区惯例,便于他人理解和维护。综上所述,在开发时一般推荐使用
as
断言来进行类型断言,因为它更加明确、灵活,并且符合社区惯例。
相关文章:
TypeScript 快速入门
TypeScript 快速入门 1. 初识 TypeScript 1.1 TS 是什么? 以 JavaScript 为基础构建的语言;一个 JavaScript 的超集;可以在任何支持 JavaScript 的平台执行;TypeScript 扩展了 JavaScript 并添加了类型;TS 不能被 J…...
第一章 计算机网络和因特网
1.1 什么是因特网(Internet) 在博客这一系列文章中,我们使用一种特定的计算机网络,即公共因特网作为讨论计算机网络及其协议的主要载体。什么是因特网?可以用两种方式来回答这个问题:其一,我们能够通过因特网的具体构…...
【uni-app】axios 报错:Error: Adapter ‘http‘ is not available in the build
在 uni-app 中使用 axios 会报错:Error: Adapter ‘http‘ is not available in the build 解决方法:为 axios 添加 adapter 适配器。 import axios from axios; import settle from ../../node_modules/axios/lib/core/settle; import buildURL from …...
【路由交换方向IE认证】BGP选路原则之Weight属性
文章目录 一、路由器BGP路由的处理过程控制平面和转发平面选路工具 二、BGP的选路顺序选路的前提选路顺序 三、Wight属性选路原则规则9与规则11的潜移默化使用Weight值进行选路直接更改Weight值进行选路配合使用route-map进行选路 四、BGP邻居建立配置 一、路由器BGP路由的处理…...
思科模拟器的单臂路由,交换机,路由器,路由器只要两个端口的话,连接三台电脑该怎么办,划分VLAN,dotlq协议
单臂路由 1. 需求:让三台电脑互通 2. 在二层交换机划分vlan,并加入; 3. 将连接二层交换机和路由器的端口f0/4改为trunk模式 4. 路由器:进入连接路由器的f0/0端口将端口开启 5. 进入每个vlan设dotlq协议并设网络IP(…...
计算机视觉与深度学习 | 基于Matlab的钢筋计数
===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 基于Matlab的钢筋计数 1、引言2、方法设计2.1 整体流程2.2 关键技术2…...
Pytorch深度学习框架60天进阶学习计划 - 第41天:生成对抗网络进阶(三)
Pytorch深度学习框架60天进阶学习计划 - 第41天:生成对抗网络进阶(三) 7. 实现条件WGAN-GP # 训练条件WGAN-GP def train_conditional_wgan_gp():# 用于记录损失d_losses []g_losses []# 用于记录生成样本的多样性(通过类别分…...
MySQL 用 limit 影响性能的优化方案
一.使用索引覆盖扫描 如果我们只需要查询部分字段,而不是所有字段,我们可以尝试使用索引覆盖扫描,也就是让查询所需的所有字段都在索引中,这样就不需要再访问数据页,减少了随机 I/O 操作。 例如,如果我们…...
粉末冶金齿轮学习笔记分享
有一段小段时间没有更新了,不知道小伙们有没有忘记我。最近总听到粉末冶金齿轮这个概念,花点时间来学习一下,总结一篇笔记分享给大家。废话不多说,直接开始: “粉末冶金”是一种制造工艺,包括在高压下压实…...
数据结构第五版【李春葆】
数据结构教程上机实验指导第5版(李春葆主编).pdf 数据结构教程(第5版)(李春葆).pdf 数据结构教程(第五版)课后习题参考答案(李春葆).pdf 数据结构教…...
深入解析区块链技术:原理、应用与未来展望
1 区块链技术原理 1.1 基本概念 区块链本质上是一个分布式账本,它由一系列按照时间顺序排列的数据块组成,每个数据块包含了一定时间内的交易信息。这些数据块通过密码学技术相互链接,形成一个不可篡改的链条。其核心特点包括去中心化、不可篡…...
SAX解析XML:Java程序员的“刑侦破案式“数据处理
各位XML侦探们!今天我们要化身代码界的福尔摩斯,学习用SAX解析XML——这种一边读文件一边破译线索的技术,就像在凶案现场逐帧查看监控录像,内存占用比你的咖啡杯还小!(DOM解析?那叫把整个监控室…...
Spring - 13 ( 11000 字 Spring 入门级教程 )
一: Spring AOP 备注:之前学习 Spring 学到 AOP 就去梳理之前学习的知识点了,后面因为各种原因导致 Spring AOP 的博客一直搁置。。。。。。下面开始正式的讲解。 学习完 Spring 的统一功能后,我们就进入了 Spring AOP 的学习。…...
SQL 解析 with as dual sysdate level
目录 sql的运行顺序 with as EXTRACT 编辑 dual sysdate level 编辑 编辑 Oracle中的日期存储 核心部分 拆解字符串并计算最小值 关联子查询 NVL 函数 REGEXP_SUBSTR() sql的运行顺序 <select id"getTrendList" parameterType"java.util.H…...
苍穹外卖day03
店铺状态接口 引入Redis,因为像存储店铺状态这种只有一个字段(没必要存储在数据库),且登录后台就要被访问的数据(加快查询速度,减少数据库压力) 使用步骤:导入相关maven依赖、配置…...
精品整理 | 云安全知识证书 (CCSK) v5 备考学习资源汇总
云安全知识证书 (CCSK) v5 备考学习资源,包含课件、视频、习题及CSA学习指南,共12章。 1.云计算的概念和架构 2.云治理 3.风险、审计与合规 4.组织管理 5.身份和访问管理 6.云安全监控 7.云基础设施和网络安全 8.云工作负载安全 9.云数据安全 10.云应用…...
编程思想——FP、OOP、FRP、AOP、IOC、DI、MVC、DTO、DAO
个人简介 👀个人主页: 前端杂货铺 🙋♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…...
使用SSH开通Linux服务器账号
文章目录 1. 通过SSH连接到服务器2. 创建账号3. 将用户设置为管理员(可选)4. 设置SSH登录权限(可选)(1)切换到该用户目录(2)创建.ssh目录并设置适当的权限 1. 通过SSH连接到服务器 …...
【C++】内存分配与释放、内存碎片、内存泄漏、栈溢出
C内存分配方式 内存分配方式区别 特性 静态分配 栈分配 堆分配 分配时机 编译期 函数调用时 运行期(new) 释放方式 自动释放 函数结束自动释放 手动delete释放 内存区域 静态存储区 栈 堆(自由存储区) 大小灵活性…...
论文:Generalized Category Discovery with Large Language Models in the Loop
论文下载地址:Generalized Category Discovery with Large Language Models in the Loop - ACL Anthology 1、研究背景 尽管现代机器学习系统在许多任务上取得了优异的性能,绝大多数都遵循封闭世界的设置,假设训练和测试数据来自同一组预定义…...
k8s亲和力和非亲和力
在 Kubernetes 中,亲和力(Affinity)和非亲和力(Anti-Affinity)是用于控制 Pod 调度策略的机制,它们可以帮助优化资源利用率、提高应用性能和可用性。以下是亲和力和非亲和力的详细解释: 亲和力…...
Redis几个基本的全局指令
目录 1.set和get 2.keys 3.exists 4.del 5.expire 6.ttl 7.type 我们都知道Redis存的内容都是键值对,key是String,value有很多类型,像string(字符串),hash(哈希),…...
Flutter中如何判断一个计算任务是否耗时?
在 Flutter 里,判断一个计算任务是否耗时可从以下几个角度着手: 1. 任务复杂度分析 数学运算复杂度:依据算法的时间复杂度来初步判断。例如,简单的加法、乘法运算时间复杂度为 O ( 1 ) O(1) O(1),这类任务通常不耗时…...
LeetCode面试热题150中6-11题学习笔记(用Java语言描述)
Day 02 6、轮转数组 需求:给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 方法一 核心思想 使用额外的数组来将每个元素放至正确的位置。用 n 表示数组的长度,遍历原数组,将原数组下标…...
驱动开发硬核特训 · Day 10 (理论上篇):设备模型 ≈ 运行时的适配器机制
🔍 B站相应的视屏教程: 📌 内核:博文视频 - 总线驱动模型实战全解析 敬请关注,记得标为原始粉丝。 在 Linux 驱动开发中,设备模型(Device Model)是理解驱动架构的核心。而从软件工程…...
4.13日总结
javafx中实现发送qq邮箱验证码: 手动导入jar包方法: 第一步:开启QQ邮箱的 POP3/IMAP 或者 SMTP/IMAP 服务 打开qq邮箱(电脑端),找到设置里的账号与安全的安全设置,往下滑就可以找到 POP3/IMAP 或者 SMTP…...
python 微博爬虫 01
起因, 目的: ✅下载单个视频,完成。✅ 获取某用户的视频列表,完成。剩下的就是, 根据视频列表,逐个下载视频,我没做,没意思。获取视频的评论,以后再说。 关键点记录: 1. 对一个视…...
CST1017.基于Spring Boot+Vue共享单车管理系统
计算机/JAVA毕业设计 【CST1017.基于Spring BootVue共享单车管理系统】 【项目介绍】 共享单车管理系统,基于 Spring Boot Vue 实现,功能丰富、界面精美 【业务模块】 系统共有四类用户,分别是:监管用户、运营用户、调度用户、普…...
小刚说C语言刷题——第23讲 字符数组
前面,我们学习了一维数组和二维数组的概念。今天我们学习一种特殊的数组,字符数组。 1.字符数组的概念 字符数组就是指元素类型为字符的数组。字符数组是用来存放字符序列或者字符串的。 2.字符数组的定义及语法 char ch[5]; 3.字符数组的初始化及赋…...
c++11--std::forwaord--完美转发
std::forword的作用 完美转发的核心目的是保持参数的原始类型(包括const/volatile限定符和左值/右值性质)不变地传递给其他函数。 为什么需要完美转发 在没有完美转发之前,我们面临以下问题: 模板参数传递中的值类别丢失 当参数…...
机器学习的一百个概念(12)学习率
前言 本文隶属于专栏《机器学习的一百个概念》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见[《机器学习的一百个概念》 ima 知识库 知识库广场搜索: 知识库创建人机器学习@Shockang机器学习数学基础@Shocka…...
java异常 与 泛型<T>
文章目录 异常认识异常什么是异常?Java的异常体系异常的基本处理异常的作用? 自定义异常编译时异常自定义运行时异常 异常的处理方案 泛型认识泛型泛型类泛型接口泛型方法、通配符、上下限泛型支持的类型包装类包装类具备的其他功能总结 异常 认识异常 …...
齐次坐标系统:什么是齐次坐标?为什么要引入齐次坐标?
齐次坐标系统:计算机图形学的基础 在计算机图形学、计算机视觉、相机标定、三维建模等领域,齐次坐标是一个非常重要的数学工具。本文将介绍:齐次坐标的基本概念、数学原理、我们为什么要引入齐次坐标、及其在实际应用中的价值。 文章目录 齐…...
基于XGBoost的异烟酸生产收率预测:冠军解决方案解析
1. 引言 在化工生产领域,准确预测产品收率对优化工艺流程、降低生产成本具有重要意义。本文以异烟酸生产为研究对象,通过机器学习方法构建预测模型,在包含10个生产步骤、42个工艺参数的数据集上实现高精度收率预测。该方案在工业竞赛中斩获冠军,本文将深度解析其技术实现细…...
vue3动态路由
要想实现vitevue-router实现动态路由我们需要用到 1. addRoute() 官方文档中addRoute的使用 当我们添加一个主路由的时候 router.addRoute({ path: /permission, name: permission, component: () > import(xxxxx)}) 添加子路由也就是嵌套路由 router.addRoute(主路由的…...
Tkinter进度条与状态栏
在图形用户界面(GUI)应用中,进度条和状态栏是非常常见的控件,它们可以有效地向用户显示操作进度、状态信息或者任务完成情况。Tkinter提供了内置的控件和方法来实现进度条和状态栏的功能。在这一章中,我们将学习如何在Tkinter应用中使用进度条和状态栏来提升用户体验。 1…...
NModbus 库在 C# 中的使用
以下是关于 NModbus 库在 C# 中的使用方法 的详细指南,涵盖从安装到实际通信的完整流程: 1. 安装 NModbus 库 通过 NuGet 包管理器安装: Install-Package NModbus 或使用 .NET CLI: dotnet add package NModbus 2. 基础使用示例 2.1 创建 Modbus TCP 主站(Master) …...
大模型到底是怎么产生的?一文了解大模型诞生全过程
前言 大模型到底是怎么产生的呢? 本文将从最基础的概念开始,逐步深入,用通俗易懂的语言为大家揭开大模型的神秘面纱。 大家好,我是大 F,深耕AI算法十余年,互联网大厂核心技术岗。 知行合一,不写水文,喜欢可关注,分享AI算法干货、技术心得。 【专栏介绍】: 欢迎关注《…...
算法差分详解 + 总结
文章目录 差分一维差分题解代码 二维差分 差分 区间修改时使用差分 1. 先预处理一个差分数组,cre[i] a[i] - a[i-1],对差分数组求前缀和可以还原为原数组 2. 如果要让区间内的数d,比如[l,r]内d,那么r1区间-d可以达到这样的效果&…...
全星APQP软件:为用户提供高效、合规、便捷的研发管理体验
全星APQP软件:为用户提供高效、合规、便捷的研发管理体验 为什么选择全星APQP软件系统? 在汽车及高端制造行业,研发项目管理涉及APQP(先期产品质量策划)、FMEA(失效模式与影响分析)、CP&#x…...
数据结构——哈希详解
数据结构——哈希详解 目录 一、哈希的定义 二、六种哈希函数的构造方法 2.1 除留取余法 2.2 平方取中法 2.3 随机数法 2.4 折叠法 2.5 数字分析法 2.6 直接定值法 三、四种解决哈希冲突的方法 3.1 开放地址法 3.1.1 线性探测法 3.1.2 二次探测法 3.2 链地址法 3…...
智慧乡村数字化农业全产业链服务平台建设方案PPT(99页)
1. 农业全产业链概念 农业全产业链是依托数字化、电子商务、云计算等技术,整合规划咨询、应用软件设计与开发等服务,推动农业产业升级和价值重塑,构建IT产业融合新生态。 2. 产业链技术支撑 利用云计算、大数据、区块链等技术,为…...
Mysql -- 基础
SQL SQL通用语法: SQL分类: DDL: 数据库操作 查询: SHOW DATABASES; 创建: CREATE DATABASE[IF NOT EXISTS] 数据库名 [DEFAULT CHARSET字符集] [COLLATE 排序规则]; 删除: DROP DATABA…...
《AI大模型应知应会100篇》第14篇:大模型商业化现状:主流应用场景及盈利模式
第14篇:大模型商业化现状:主流应用场景及盈利模式 摘要 近年来,大模型(如Qwen、DeepSeek、GPT、BERT等)以其强大的语言理解和生成能力引发了技术界的广泛关注。然而,如何将这些前沿技术转化为商业价值&am…...
深入理解linux操作系统---第3讲 基本操作与基本管理
3.1 shell基本功能与基本概念 3.1.1 shell基本功能 Shell是Linux系统的核心交互工具,主要功能包括: 程序启动与进程管理:通过命令行将程序名传递给内核执行,支持进程的后台运行与监控(如ps、kill命令)文…...
Go:函数
函数 函数声明 func name(parameter-list) (result-list) { body }函数声明包含函数名、形参列表、可选的返回列表以及函数体 。形参列表指定由调用者传递的变量参数名和类型;返回列表指定函数返回值类型 ,无返回值或返回未命名值时,返回列…...
swagger 注释说明
一、接口注释核心字段 在 Go 的路由处理函数(Handler)上方添加注释,支持以下常用注解: 注解名称用途说明示例格式Summary接口简要描述Summary 创建用户Description接口详细说明Description 通过用户名和邮箱创建新用户Tags接口分…...
【C++】C与C++、C++内存空间、堆与栈
C嘎嘎嘎嘎嘎~ C与C的区别与联系 C内存空间 int global_var; // 未初始化全局变量,BSS段 const char* str "Hello"; // 字符串常量text段 in数据段void func() {static int static_var; // 未初始化的静态变量,数据段int local_var; …...
从零训练LLM-1.训练BPE
文章目录 BPE 简介BPE (Byte-Pair Encoding) 算法训练流程BPE 编码流程BPE 评估代码 参考 本文基于 HF -tokenizer 训练,更便捷 BPE 简介 分词器将单词从自然语言通过“词典”映射到0, 1, 36这样的数字,可以理解为数字就代表了单词在“词典”中的页码。…...
shield.io网站|markdown中适用的“徽标”
动态的我还没看是怎么弄,但是应该和静态的差不多,因此本文仅讨论静态徽标 静态徽标效果 创建方法 网址:Shields.io | Shields.io 进入之后点击“Badges”标签进入网页创建徽标的页面,根据文档中对每个属性的介绍在右侧将自己预…...