【ts语法学习】主要数据类型与变量声明时的类型注解
一、ts中的主要数据类型
1.布尔类型 (boolean)
2.数值类型 (number)
3.字符串类型 (string)
4.数组类型 (Array)
5.对象类型 (object)
6.null 和 undefined
7.元组类型 (Tuple)
8.枚举类型 (enum)
9.任意类型 (any)
10.never
11.unknown
12.void
TypeScript(简称 TS)是强类型语言,存在类型推断
TS中的类型推断是指编译器会根据上下文自动推断变量,表达式或返回值的类型,而不需要显式地声明类型注解,例如:
let num = 10; // TypeScript 推断 num 为 number 类型
let str = "Hello"; // TypeScript 推断 str 为 string 类型function add(a: number, b: number) {return a + b; // TypeScript 推断返回值为 number
}let arr = [1, 2, 3]; // TypeScript 推断 arr 为 number[] 类型
let obj = { name: "Alice", age: 25 }; // TypeScript 推断 obj 为 { name: string, age: number } 类型
二、变量声明
1.布尔类型
let isTrue:boolean = true
2.数值类型 (number)
let age: number = 25;
3.字符串类型 (string)
let name: string = "John Doe";
4.数组类型 (Array)
//传统方式
let list: number[] = [1, 2, 3];
//泛型方式(更推荐)
let list: Array<number> = [1, 2, 3];
5.对象类型 (object)
在 TypeScript 中,对象类型的变量声明和使用非常灵活,可以提供强大的类型检查和代码提示。声明一个对象,可以使用接口(interface)和类型别名(type)的方式
对象的基本声明:
1.使用对象字面量
let person: { name: string; age: number } = {name: "Alice",age: 30
};
2.使用类型别名
type Person = {name: string;age: number;
};let person: Person = {name: "Alice",age: 30
};
3.使用接口
interface Person {name: string;age: number;
}let person: Person = {name: "Alice",age: 30
};
对象属性的可选性
interface Person {name: string;age?: number; // age 是可选属性
}let person1: Person = {name: "Alice"
};let person2: Person = {name: "Bob",age: 25
};
对象的只读属性
interface Person {readonly id: number;name: string;age?: number;
}let person: Person = {id: 1,name: "Alice"
};person.name = "Bob"; // 合法
person.id = 2; // 错误: 无法分配到 "id",因为它是只读属性
对象的扩展与继承
interface Shape {color: string;
}interface Square extends Shape {sideLength: number;
}let square: Square = {color: "blue",sideLength: 10
};
6.null 和 undefined
//在 TypeScript 中,let obj: null | undefined = null;
//这种写法被称为联合类型(Union Types)的变量声明。
//表示当前obj对象,可以被赋值null,也可以是undefined
let obj:null | undefined = null
7.元组类型 (Tuple)
在 TypeScript 中,元组(Tuple)是一种特殊的数组类型,它允许你在数组中明确指定每个位置的元素类型。元组可以确保数组的长度和每个位置的元素类型是固定的
基本元祖类型声明:
let tuple: [string, number];tuple = ["Alice", 25]; // 正确
// tuple = ["Bob", 25, true]; // 错误: 元组长度不匹配
// tuple = [25, "Bob"]; // 错误: 元素类型不匹配console.log(tuple[0]); // 输出: "Alice"
console.log(tuple[1]); // 输出: 25
访问元组元素:
let tuple: [string, number, boolean] = ["Alice", 25, true];console.log(tuple[0]); // 输出: "Alice"
console.log(tuple[1]); // 输出: 25
console.log(tuple[2]); // 输出: true
元组的可选元素:
let tuple: [string, number?, boolean?];tuple = ["Alice"]; // 合法
tuple = ["Alice", 25]; // 合法
tuple = ["Alice", 25, true]; // 合法
// tuple = ["Alice", 25, true, false]; // 错误: 元组长度不匹配console.log(tuple[0]); // 输出: "Alice"
console.log(tuple[1]); // 输出: 25 (如果存在)
console.log(tuple[2]); // 输出: true (如果存在)
元祖的剩余元素:
let tuple: [string, ...number[]];tuple = ["Alice", 25, 30, 35];console.log(tuple[0]); // 输出: "Alice"
console.log(tuple[1]); // 输出: 25
console.log(tuple[2]); // 输出: 30
console.log(tuple[3]); // 输出: 35
元祖的类型断言:
使用as关键字进行类型断言
let arr: any[] = ["Alice", 25, true];
let tuple = arr as [string, number, boolean];console.log(tuple[0]); // 输出: "Alice"
console.log(tuple[1]); // 输出: 25
console.log(tuple[2]); // 输出: true
8.枚举类型 (enum)
None 是枚举的第一个成员,且没有显式地赋值,它的值默认为 0
如果在枚举中没有显式地定义 None 成员,TypeScript 会根据枚举成员的定义顺序自动赋值。
数字枚举:
//默认情况下,枚举的成员是数字类型。枚举中的第一个成员默认值为 0,后面的成员依次递增。
enum Direction {Up, // 0Down, // 1Left, // 2Right // 3
}let direction: Direction = Direction.Up;console.log(direction); // 输出: 0//也可以手动赋值
enum Direction {Up = 1, // 1Down = 2, // 2Left = 3, // 3Right = 4 // 4
}let direction: Direction = Direction.Up;console.log(direction); // 输出: 1
字符串枚举:
enum Direction {Up = "UP",Down = "DOWN",Left = "LEFT",Right = "RIGHT"
}let direction: Direction = Direction.Up;console.log(direction); // 输出: "UP"
常量枚举:
常量枚举(const enum)在编译时会被完全移除,所有的访问都会被替换为直接的值。这可以减少编译后的代码量。
const enum Direction {Up,Down,Left,Right
}let direction: Direction = Direction.Up;console.log(direction); // 输出: 0
异构枚举:
异构枚举允许你混合使用数字和字符串类型的枚举成员。
enum BooleanLikeHeterogeneousEnum {No = 0,Yes = "YES",
}console.log(BooleanLikeHeterogeneousEnum.No); // 输出: 0
console.log(BooleanLikeHeterogeneousEnum.Yes); // 输出: "YES"
枚举的计算成员:
枚举的成员可以是一个表达式,详略
9.任意类型 (any)
在 TypeScript 中,any 类型是一种特殊的类型,它允许变量可以是任意类型。使用 any 类型可以绕过 TypeScript 的类型检查,使得变量可以接受任何类型的值。然而,过度使用 any 会削弱 TypeScript 的类型系统优势,因此在实际开发中应谨慎使用。
let value: any; // value 可以是任意类型
value = 42; // 合法
value = "Hello"; // 合法
value = false; // 合法
any的缺点:
当你使用 any 类型时,编辑器将无法提供代码提示和自动补全功能,这会降低开发效率。
解决办法:
使用unknown类型,unknown 是 any 的安全替代品。与 any 不同,unknown 类型在使用前需要进行类型检查或类型断言。
let value: unknown;
value = 42;
value = "Hello";if (typeof value === "string") {//toUpperCase用于将字符串中的所有字母转换为大写形式console.log(value.toUpperCase()); // 合法
}
10.never类型
在 TypeScript 中,never 类型表示那些永远不会发生的值的类型。never 类型是所有类型的子类型,并且可以赋值给任何类型,但 never 类型本身不能赋值给除了 never 类型之外的任何类型。
(这里可以理解为,never虽然是所有类型的子类型,但它表示的是一个永远不会发生的值的类型,赋值的本质是将一个变量的值复制到另一个变量中,如果源变量没有值,那么这个赋值操作就没有意义)
never 类型的基本声明:
never类型的出现有以下两种情况
1.无法到达的代码
当一个函数永远不会返回时,其返回类型声明为 never。
function throwError(message: string): never {throw new Error(message);
}// 函数抛出异常,永远不会返回
throwError("Something went wrong");
2.无限循环
function infiniteLoop(): never {while (true) {// 无限循环}
}// 函数进入无限循环,永远不会返回
infiniteLoop();
11.unknown类型
参考上文any类型的用法
12.void类型
在 TypeScript 中,void 类型表示一个函数没有返回值,或者一个变量不持有任何有意义的值。void 类型在 TypeScript 中主要用于函数的返回类型声明,而不是用于变量声明。
void 类型的变量声明:
void 类型的变量只能被赋值为 undefined 或 null(在 strict null checks 关闭的情况下)
let voidVar: void;voidVar = undefined; // 合法,因为 undefined 是 void 类型的值
voidVar = null; // 合法(如果 strict null checks 关闭)
voidVar = 42; // 错误: Type '42' is not assignable to type 'void'
voidVar = "hello"; // 错误: Type '"hello"' is not assignable to type 'void'
void类型的使用场景:
表示函数不返回任何值
function logMessage(message: string): void {console.log(message);
}logMessage("Hello, world!"); // 函数没有返回值
回调函数的返回类型,处理不需要返回值的回调
function doSomething(callback: () => void): void {callback();
}doSomething(() => {console.log("Callback executed");
});
void与undefined,never 的区别:
undefined 是一个实际的值:undefined 是一个 JavaScript 内置的值,表示一个变量未被赋值。
never 表示永远不会返回:never 表示函数永远不会返回,通常用于抛出异常或进入无限循环的函数。
void 是一个类型:void 表示一个函数没有返回值,或者一个变量不持有任何有意义的值。
补充null与undefined的区别:
null 是显式的空值:null 通常由开发者显式地赋值,表示“这里没有值”。
undefined 是隐式的空值:undefined 通常由 JavaScript 引擎自动赋值,表示“变量未定义”或“属性不存在”。
相关文章:
【ts语法学习】主要数据类型与变量声明时的类型注解
一、ts中的主要数据类型 1.布尔类型 (boolean) 2.数值类型 (number) 3.字符串类型 (string) 4.数组类型 (Array) 5.对象类型 (object) 6.null 和 undefined 7.元组类型 (Tuple) 8.枚举类型 (enum) 9.任意类型 (any) 10.never 11.unknown 12.void TypeScript(简称 …...
论文概览 |《Sustainable Cities and Society》2024.12 Vol.116
本次给大家整理的是《Sustainable Cities and Society》杂志2024年12月第116期的论文的题目和摘要,一共包括52篇SCI论文! 论文1 Enhancing road traffic flow in sustainable cities through transformer models: Advancements and challenges 通过变压…...
Vue3之响应式系统详解
Vue3中的响应式系统是其核心功能之一,它使得数据变化能够自动触发视图更新,从而简化了开发过程,提高了开发效率。本文将详细阐述Vue3中的响应式系统,包括其核心概念、工作原理、实现方式、应用场景以及优势。同时,本文…...
只出现一次的数字(字节面试题 最优解)
题目来源 136. 只出现一次的数字 - 力扣(LeetCode) 题目描述 给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问…...
VMware Workstation的有线连接消失了
进入/var/lib目录下 cd /var/lib 查看是否存在NetworkManager 文件 ls 将其删除,然后虚拟机reboot一下。 sudo rm -r NetworkManager reboot 解决了,可以联网...
leetcode-146.LRU缓存(易理解)
为了实现一个满足 LRU(最近最少使用)缓存约束的数据结构,我们需要在 (O(1)) 时间复杂度内完成 get 和 put 操作。这通常可以通过结合使用哈希表和双向链表来实现: 哈希表:用于在 (O(1)) 时间复杂度内实现对缓存中元素…...
ArcGIS地理空间平台manager存在任意文件读取漏洞
免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…...
ARCGIS国土超级工具集1.2更新说明
ARCGIS国土超级工具集V1.2版本,功能已增加至47 个。在V1.1的基础上修复了若干使用时发现的BUG,新增了"矢量分割工具"菜单,同时增加及更新了了若干功能,新工具使用说明如下: 一、勘测定界工具栏更新界址点成果…...
「iOS」通过CoreLocation Framework深入了解MVC架构
「iOS」通过CoreLocation Framework重新了解多界面传值以及MVC架构 文章目录 「iOS」通过CoreLocation Framework重新了解多界面传值以及MVC架构前言CoreLocation了解根据需求建模设计属性方法设计协议传值Block传值KVONotification通知方式 总结参考文章 前言 在这个学期的前…...
spring实例化对象的几种方式(使用XML配置文件)
前言 Spring框架作为一个轻量级的控制反转(IoC)容器,为开发者提供了多种对象实例化的策略。通过这些策略,开发者可以更加灵活地控制对象的生命周期和依赖关系。无论是通过XML配置、注解配置还是Java配置,Spring都能…...
pyhton 批量往PDF文件指定位置里面填写数据
pyhton 批量往PDF文件指定位置里面填写数据 import PyPDF2 from PyPDF2 import PdfReader, PdfWriterdef modify_pdf(input_pdf_path, output_pdf_path, page_number, x, y, text):reader PdfReader(input_pdf_path)writer PdfWriter()for page in reader.pages:writer.add_p…...
深度学习——激活函数、损失函数、优化器
深度学习——激活函数、损失函数、优化器 1、激活函数1.1、一些常见的激活函数1.1.1、sigmoid1.1.2、softmax1.1.3、tanh1.1.4、ReLU1.1.5、Leaky ReLU1.1.6、PReLU1.1.7、GeLU1.1.8、ELU 1.2、激活函数的特点1.2.1、非线性1.2.2、几乎处处可微1.2.3、计算简单1.2.4、非饱和性1…...
上拉模式下引脚电平与代码读取值的关系
在单片机系统中,引脚的输入模式设置对上拉模式下引脚电平及代码读取值有着关键影响。 当引脚被配置为上拉模式且无外部信号输入时,内部上拉电阻使引脚保持高电平。此时,代码读取该引脚的值为 1。例如在一个简单的电路中,仅设置了…...
UNIX简史
从1991年Linux出现至今,由于众多IT巨头以及技术社区的推动,Linux已经成为非常成熟、可用于各种关键领域的操作系统,适当了解其发展历史,对于理顺其技术流派、从而更好地学习和使用Linux具有重要意义。由于其基于UNIX系统二十多年的…...
python学opencv|读取图像(十三)BGR图像和HSV图像互相转换深入
【1】引言 前序学习过程中,我们偶然发现:如果原始图像是png格式,将其从BGR转向HSV,再从HSV转回BGR后,图像的效果要好于JPG格式。 文章链接为: python学opencv|读取图像(十二)BGR图…...
ElasticSearch 搜索、排序、分页功能
一、DSL 查询文档 ElasticSearch 的查询依然是基于 json 风格的 DSL 来实现的。 官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/8.15/query-dsl.html 1.1 DSL 查询分类 常见的查询类型包括: 查询所有:查询出所有数…...
MAC虚拟机上安装WDA环境
MAC虚拟机上安装WDA环境 一、MAC虚拟机切换root权限二、macOS上安装xcode若你的macOS系统可以在appstore下载安装若你安装的macOS系统版本太低,无法在appstore上安装xcode 三、macOS上安装WebDriverAgent四、使用xcode配置WDA安装到手机上高版本系统支持 一、MAC虚拟…...
KDD 2025预讲会:10位一作的论文分享与话题思辨|12月18日全天直播
点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 圆桌思辨:一作们的KDD 2025投稿经验分享与热点探讨 1. KDD 2025 与往年相比有哪些新变化?两次投稿周期的新规则有哪些影响? 2. 第一篇KDD的工作是如何成功被接收的࿱…...
Input system手游的控制
手游离不开触屏控制 新的inputsystem 实现过程 安装input system在projectsetting中的player的othersettings中active input handing设置both打开window的analysis的input debugger。在options中设置为simulate touch input from mouse or pen。 增强触摸控制的相关知识 启…...
在 Visual Studio Code 中编译、调试和执行 Makefile 工程 llama2.c
在 Visual Studio Code 中编译、调试和执行 Makefile 工程 llama2.c 1. Installing the extension (在 Visual Studio Code 中安装插件)1.1. Extensions for Visual Studio Code1.2. C/C1.2.1. Pre-requisites 1.3. Makefile Tools 2. Configuring your project (配置项目)2.1.…...
KMP 算法
这里写目录标题 KMP数组计算方式**问题描述****初始准备****逐步推导过程****Step 1: i 1,子串为 ab****Step 2: i 2,子串为 aba****Step 3: i 3,子串为 abab****Step 4: i 4,子串为 ababa****Step 5: i 5,子串为…...
计算机网络中的三大交换技术详解与实现
目录 计算机网络中的三大交换技术详解与实现1. 计算机网络中的交换技术概述1.1 交换技术的意义1.2 三大交换技术简介 2. 电路交换技术2.1 理论介绍2.2 Python实现及代码详解2.3 案例分析 3. 分组交换技术3.1 理论介绍3.2 Python实现及代码详解3.3 案例分析 4. 报文交换技术4.1 …...
echarts图表自定义配置(二)——代码封装
下图是初版,火山图的代码。可以看出,里面的变量,逻辑,函数存在冗余,基本上都是改了参数,同样的get和set,去刷新图表;对于往后继续开发十几二十个图表,会很麻烦。因此需要…...
Serdes技术与Xilinx GT概览
目录 一、前言 二、Serdes技术 2.1 芯片间信号传输 2.2 Serdes技术 三、 Xilinx GT 3.1 7系列器件GT 3.2 Ultrascale GT 3.3 Ultrascale GT 四、参考资料 一、前言 对于芯片间高速信号传输技术,不得不提serdes以及在Xilinx在此基础上的高速收发器GT系列&…...
WEB开发: Node.js路由之由浅入深(三)自动配置路由 - 全栈工程师入门
前面我们一起学习了Node.js路由的两个进阶, (1)WEB开发: Node.js路由之由浅入深(一) - 全栈工程师入门 (2)WEB开发: Node.js路由之由浅入深(二)…...
6-9 捕获 0 异常(1)
中断号的 处理是这样的。 1、 cpu 根据中断号 去中断向量表 去找 第几个 表。、 2、 而 中断向量表 的内容是 GDT 的选择子。 3、 由于使用是的 平坦模型,所以只需要 将具体的函数给到 中断向量表的 offset 字段就可以了。 接下来 就是 在 代码中定义 中断门的属…...
社区团购创新模式与新兴技术融合的深度探索:基于开源、AI 智能名片、2+1 链动模式与 S2B2C 商城小程序
摘要:本文聚焦于社区团购这一新兴零售业态,深入剖析其“线上预售,线下自提,以销定采,落地集配”的 16 字箴言所蕴含的商业逻辑。详细探讨在物流与信息流层面社区团购的独特优势,并在此基础上研究开源理念、…...
day45 198.打家劫舍 213.打家劫舍II 337.打家劫舍III
198.打家劫舍 相邻的房子不可以打劫,所以递推式需要考虑; 初始化也需要考虑,可以从两个方向入手 方向1:从后往前看,dp[i] dp[i-1] class Solution { public:int rob(vector<int>& nums) {if (nums.size(…...
SQL server学习02-使用T-SQL创建数据库
目录 一, 使用T-SQL创建数据库 1,数据库的存储结构 2,创建数据库的语法结构 1)使用T-SQL创建学生成绩管理数据库 二,使用T-SQL修改数据库 1,修改数据库的语法结构 1)修改学生成绩管理数…...
绘图方式集合
1. 流程图 1.1 PlantUML 代码绘制流程图 1.1.1 简介 1.1.2 网站 你可以使用以下网站来将 PlantUML 代码转换成可视化的流程图: PlantUML 官方网站 网站地址:https://plantuml.com/plantuml此网站提供了一个在线工具,可以直接输入 PlantUM…...
sqoop导入hdfs,hive
sqoop将mysql中的表导入到hdfs中 sqoop import \ > --connect jdbc:mysql://192.168.52.150/test \ > --username root \ > --password 123456 \ > --table emp \ > --delete-target-dir \ > --target-dir /sqoop_works/emp_1将数据导入hive中,首…...
C语言动态内存管理【进阶--5--】
文章目录 [toc] 动态内存管理一、作用即意义二、动态内存函数的介绍Ⅰ、malloc()函数、free()函数Ⅱ、calloc()函数Ⅲ、realloc()函数 三、常见的动态内存错误Ⅰ、对NULL指针的解引用操作Ⅱ、对动态开辟空间的越界访问Ⅲ、对非动态开辟的内存使用free释放Ⅳ、使用free释放动态开…...
Hadoop其四,片与块,MapReduce原理,Shuffle过程,Combiner
目录 一、关于片和块 二、MapReduce的原理 MapTask执行阶段 ReduceTask的执行流程: 三、Shuffle 过程 map端: reduce端: 环形缓冲区: 四、Combiner 【可有可无】 五、需要记忆的内容 一、关于片和块 假如我现在500M这样…...
引领未来的变革:15种前沿RAG技术及其应用探索
在现代人工智能领域,检索增强生成(RAG)技术逐渐成为推动各种应用的重要力量。这些技术通过结合信息检索与文本生成,能够更有效地处理和利用信息。本文将详细介绍15种前沿RAG技术及其具体应用实例,以帮助您更好地理解这…...
gradle在IDEA 中无法使用的启动守护线程的问题
最近打开一个比较早的项目,Gradle 配置没有问题,IDEA 打开Java项目却不能初始化守护线程,UI 上只能看到失败,看不到具体原因。 首先尝试了升级最新的gradle 版本8.11, 实际上这个版本在本地命令行都不能正常工作,没有…...
C++小白实习日记——Pollnet,Efvi,UDP,数据类型转换(上)
上周主要是熟悉了一下公司内部一些自定义结构体对应的数据类型,要求:读取文件,将文件中数据转化为定义的结构体中的数据类型,按照时间进行排序,用UDP发送数据;在另一台服务器上接收数据,按照定义…...
git安装教程(Git-2.38.1-64-bit)
目录 一、git下载 二、git安装 1.更改安装路径 2.安装组件 3.选择开始菜单文件夹 4.选择Git默认编辑器 5.决定初始化新项目(仓库)的主干名字 6.修改Git的环境变量 7.选择SSH执行文件 9.选择HTTPS后端传输 10.配置行尾符号转换 11.配置终端模…...
C# OpenCvSharp DNN 实现百度网盘AI大赛-表格检测第2名方案第三部分-表格方向识别
目录 说明 效果 模型 项目 编辑 代码 参考 下载 其他 说明 百度网盘AI大赛-表格检测的第2名方案。 该算法包含表格边界框检测、表格分割和表格方向识别三个部分,首先,ppyoloe-plus-x 对边界框进行预测,并对置信度较高的表格边界…...
selenium 验证码滑块对齐没有验证通过
描述: 最近使用seleniuim采集有滑块验证码的数据,遇到了移动滑块对齐后,还是无法通过验证,经过模拟真人多次移动、控制移动时间(避免过快)一番尝试后、最终通过模拟抖动得以解决 解决办法: 把yoffset的值改为-6~6的…...
【Neo4J】neo4j docker容器下的备份与恢复
文章目录 一. 官网说明1. 操作说明2. 注意事项 二. docker 容器化操作1. 导出(备份)停止容器执行备份 2. 导入(恢复)停止容器(如果未停止)执行导入 3. 启动容器 一. 官网说明 https://neo4j.com/docs/operations-manual/current/…...
Java实现雪花算法获取id
Java实现雪花算法获取id 在 Java 中实现雪花算法(Snowflake)时,通常会设计一个工具类来生成全局唯一的 ID。这个工具类可以封装雪花算法的逻辑,并提供简单的接口来生成 ID。 以下是一个完整的 Java 工具类实现雪花算法的例子&am…...
Leetcode1338:数组大小减半
题目描述: 给你一个整数数组 arr。你可以从中选出一个整数集合,并删除这些整数在数组中的每次出现。 返回 至少 能删除数组中的一半整数的整数集合的最小大小。 代码思路: 这个代码的目的是解决一个特定的问题:给定一个整数数…...
【系统思辨】分散注意
注意力在我们的日常生活和工作中扮演着至关重要的角色。注意力可以提高效率和准确性、减少错误和失误,提升学习效率,促进创造力。与此同时,各种各样的生活事件在分散我们的注意力,并且还有很多分散我们注意的手段,比如…...
微信小程序中 Echarts 的巧妙运用
一、引入 Echarts 的准备工作 在微信小程序中引入 Echarts 需要进行一系列的准备工作。首先,我们可以从 echarts 官网或 GitHub 上下载 echarts-for-weixin 项目。找到其中的 ec-canvas 文件夹,这个文件夹将是我们引入到微信小程序项目中的关键部分。 …...
opencv——图片矫正
图像矫正 图像矫正的原理是透视变换,下面来介绍一下透视变换的概念。 听名字有点熟,我们在图像旋转里接触过仿射变换,知道仿射变换是把一个二维坐标系转换到另一个二维坐标系的过程,转换过程坐标点的相对位置和属性不发生变换&a…...
Gate学习(7)引入体素源
一、从GitHub下载体素源模型源码 下载地址:BenAuer2021/Phantoms-for-Nuclear-Medicine-Imaging-Simulation:用于核医学成像应用的模型(闪烁显像、SPECT 和 PET) --- BenAuer2021/Phantoms-For-Nuclear-Medicine-Imaging-Simulat…...
腾讯微信Android面试题及参考答案(多张原理图)
Android 应用的启动流程如下: 当用户点击应用图标时,首先会通过 Launcher(桌面启动器)来响应这个操作。Launcher 本身也是一个 Android 应用,它运行在系统中,负责管理和显示桌面上的图标等信息。 系统会检查应用是否已经有进程存在。如果没有,就会通过 Zygote 进程来孵化…...
【Android】View的工作流程
View的工作流程 开始了解一下View的工作流程,就是measure、layout和draw。measure用来测量View的宽高,layout用来确定View的位置,draw则用来绘制View。这一讲我们来看看measure流程,measure流程分为View的measure流程和ViewGroup…...
Linux基础指令
使用 tab 键补全 我们敲的所有的 Linux 命令 , 都可以使用 tab 键来尝试补全 , 加快效率 . 使用 ctrl c 重新输入 如果命令或者目录敲错了 , 可以 ctrl c 取消当前的命令 . ls :列出当前目录中的文件和子目录 语法 : ls [ 选项 ] [ 目录或文…...
Gemini 2.0 Flash重磅发布:多模态AI大模型,赋能实时交互与智能助手新体验
点击访问 chatTools 免费体验GPT最新模型,包括o1推理模型、GPT4o、Claude、Gemini等模型! 在AI领域竞争日益激烈的今天,谷歌再次亮剑,推出了新一代至强AI大模型——Gemini 2.0 Flash。这款模型不仅具备强大的多模态输入输出能力&a…...