Typescript学习教程,从入门到精通,TypeScript 函数语法知识点及案例代码(5)
TypeScript 函数语法知识点及案例代码
TypeScript 提供了丰富的函数语法特性,使得函数定义更加灵活和强大。以下将详细介绍 TypeScript 中函数的相关语法,包括函数定义、可选参数、默认参数、剩余参数、重载函数、递归函数、匿名函数、箭头函数以及回调函数。
函数定义
在 TypeScript 中,函数可以通过 function
关键字来定义,也可以使用箭头函数(=>
)。
// 基本函数定义
function greet(name: string): string {return `Hello, ${name}!`;
}// 函数表达式
const greet2 = function(name: string): string {return `Hello, ${name}!`;
};// 调用函数
console.log(greet("Alice")); // 输出: Hello, Alice!
console.log(greet2("Bob")); // 输出: Hello, Bob!// 无返回值函数
function logMessage(message: string): void {console.log(message);
}// 函数类型
type GreetFunction = (name: string) => string;
const greet3: GreetFunction = function(name) {return `Hello, ${name}!`;
};
可选参数、默认参数和剩余参数
可选参数
// 可选参数使用?标记
function buildName(firstName: string, lastName?: string): string {if (lastName) {return `${firstName} ${lastName}`;} else {return firstName;}
}console.log(buildName("Alice")); // 输出: Alice
console.log(buildName("Alice", "Smith")); // 输出: Alice Smith
默认参数
// 默认参数
function buildName2(firstName: string, lastName: string = "Doe"): string {return `${firstName} ${lastName}`;
}console.log(buildName2("John")); // 输出: John Doe
console.log(buildName2("John", "Smith")); // 输出: John Smith
剩余参数
// 剩余参数(可变参数)
function sum(...numbers: number[]): number {return numbers.reduce((total, num) => total + num, 0);
}console.log(sum(1, 2, 3)); // 输出: 6
console.log(sum(1, 2, 3, 4, 5)); // 输出: 15// 剩余参数也可以和其他参数一起使用
function greetPeople(greeting: string, ...names: string[]): string {return `${greeting} ${names.join(", ")}!`;
}console.log(greetPeople("Hello", "Alice", "Bob", "Charlie"));
// 输出: Hello Alice, Bob, Charlie!
重载函数
函数重载允许一个函数接受不同数量或类型的参数时,做出不同的处理。
// 函数重载
function makeDate(timestamp: number): Date;
function makeDate(year: number, month: number, day: number): Date;
function makeDate(yearOrTimestamp: number, month?: number, day?: number): Date {if (month !== undefined && day !== undefined) {return new Date(yearOrTimestamp, month - 1, day);} else {return new Date(yearOrTimestamp);}
}const d1 = makeDate(1234567890000); // 使用时间戳
const d2 = makeDate(2023, 5, 17); // 使用年月日console.log(d1); // 输出: 2009-02-13T23:31:30.000Z
console.log(d2); // 输出: 2023-05-16T16:00:00.000Z (注意月份是0-based)// 另一个重载例子
function reverse(value: string): string;
function reverse<T>(value: T[]): T[];
function reverse(value: string | any[]): string | any[] {if (typeof value === "string") {return value.split("").reverse().join("");} else {return value.slice().reverse();}
}console.log(reverse("hello")); // 输出: olleh
console.log(reverse([1, 2, 3])); // 输出: [3, 2, 1]
递归函数
递归函数是调用自身的函数,常用于解决分治问题。
// 阶乘函数
function factorial(n: number): number {if (n <= 1) return 1;return n * factorial(n - 1);
}console.log(factorial(5)); // 输出: 120// 斐波那契数列
function fibonacci(n: number): number {if (n <= 1) return n;return fibonacci(n - 1) + fibonacci(n - 2);
}console.log(fibonacci(10)); // 输出: 55// 尾递归优化版本(TypeScript目前不自动优化,但这是更好的写法)
function factorialTail(n: number, acc: number = 1): number {if (n <= 1) return acc;return factorialTail(n - 1, n * acc);
}console.log(factorialTail(5)); // 输出: 120
匿名函数
匿名函数是没有名称的函数,通常作为参数传递或立即执行。
// 作为参数传递
const numbers = [1, 2, 3, 4, 5];
const doubled = numbers.map(function(num) {return num * 2;
});
console.log(doubled); // 输出: [2, 4, 6, 8, 10]// 立即调用的函数表达式(IIFE)
(function() {console.log("This runs immediately");
})();// 带有类型的匿名函数
const greetAnonymous: (name: string) => string = function(name) {return `Hello, ${name}!`;
};
console.log(greetAnonymous("Dave")); // 输出: Hello, Dave!
箭头函数
箭头函数是ES6引入的简洁函数语法,自动绑定this。
// 基本箭头函数
const greetArrow = (name: string): string => `Hello, ${name}!`;
console.log(greetArrow("Eve")); // 输出: Hello, Eve!// 多行箭头函数
const sumArrow = (a: number, b: number): number => {const result = a + b;return result;
};
console.log(sumArrow(3, 4)); // 输出: 7// this绑定示例
class Counter {count = 0;increment() {setTimeout(function() {// 这里的this指向window/undefined,因为普通函数有自己的this// this.count++; // 会报错}, 1000);setTimeout(() => {// 箭头函数不绑定自己的this,所以这里的this指向Counter实例this.count++;console.log(this.count); // 1秒后输出: 1}, 1000);}
}const counter = new Counter();
counter.increment();// 箭头函数作为回调
const numbers = [1, 2, 3];
const squares = numbers.map(n => n * n);
console.log(squares); // 输出: [1, 4, 9]
回调函数
回调函数是作为参数传递给另一个函数的函数,在特定事件或条件发生时被调用。
// 基本回调函数
function fetchData(callback: (data: string) => void) {// 模拟异步操作setTimeout(() => {callback("Data received");}, 1000);
}fetchData((data) => {console.log(data); // 1秒后输出: Data received
});// 错误优先回调(Node.js风格)
function readFile(callback: (error: Error | null, data?: string) => void) {const success = Math.random() > 0.5;setTimeout(() => {if (success) {callback(null, "File content");} else {callback(new Error("Failed to read file"));}}, 1000);
}readFile((err, data) => {if (err) {console.error("Error:", err.message);} else {console.log("Data:", data);}
});// 使用接口定义回调类型
interface Callback<T> {(err: Error | null, result?: T): void;
}const dbQuery: Callback<string> = function(cb) {setTimeout(() => {cb(null, "Query results");}, 500);
};dbQuery((err, result) => {if (err) {console.error(err);} else {console.log(result); // 输出: Query results}
});
实战闯关——基础语法
闯关1:实现一个计算器函数
/*** 实现一个计算器函数* @param operator 运算符,可以是 '+', '-', '*', '/'* @param operands 操作数数组* @returns 计算结果*/
function calculate(operator: '+' | '-' | '*' | '/', ...operands: number[]): number {if (operands.length === 0) return 0;switch (operator) {case '+':return operands.reduce((sum, num) => sum + num, 0);case '-':return operands.slice(1).reduce((diff, num) => diff - num, operands[0]);case '*':return operands.reduce((product, num) => product * num, 1);case '/':return operands.slice(1).reduce((quotient, num) => quotient / num, operands[0]);default:throw new Error(`Unknown operator: ${operator}`);}
}console.log(calculate('+', 1, 2, 3)); // 输出: 6
console.log(calculate('-', 10, 2, 3)); // 输出: 5
console.log(calculate('*', 2, 3, 4)); // 输出: 24
console.log(calculate('/', 20, 2, 5)); // 输出: 2
闯关2:实现一个柯里化函数
/*** 柯里化函数* @param fn 要柯里化的函数* @returns 柯里化后的函数*/
function curry<T, R>(fn: (...args: T[]) => R): (...args: T[]) => R | ((...args: T[]) => R) {return function curried(...args: T[]): R | ((...args: T[]) => R) {if (args.length >= fn.length) {return fn(...args);} else {return (...moreArgs: T[]) => curried(...args, ...moreArgs);}};
}// 测试柯里化
function add(a: number, b: number, c: number): number {return a + b + c;
}const curriedAdd = curry(add);
console.log(curriedAdd(1)(2)(3)); // 输出: 6
console.log(curriedAdd(1, 2)(3)); // 输出: 6
console.log(curriedAdd(1)(2, 3)); // 输出: 6
console.log(curriedAdd(1, 2, 3)); // 输出: 6
闯关3:实现一个记忆化函数
/*** 记忆化函数,缓存函数结果* @param fn 需要记忆化的函数* @returns 记忆化后的函数*/
function memoize<T extends (...args: any[]) => any>(fn: T): T {const cache = new Map<string, ReturnType<T>>();return function(...args: Parameters<T>): ReturnType<T> {const key = JSON.stringify(args);if (cache.has(key)) {return cache.get(key)!;}const result = fn(...args);cache.set(key, result);return result;} as T;
}// 测试记忆化
function expensiveCalculation(n: number): number {console.log(`Calculating for ${n}...`);return n * n;
}const memoizedCalculation = memoize(expensiveCalculation);
console.log(memoizedCalculation(5)); // 输出: Calculating for 5... 然后 25
console.log(memoizedCalculation(5)); // 直接输出: 25 (没有计算)
console.log(memoizedCalculation(3)); // 输出: Calculating for 3... 然后 9
console.log(memoizedCalculation(3)); // 直接输出: 9 (没有计算)
闯关4:实现一个管道函数
/*** 管道函数,将多个函数组合成一个从左到右执行的函数链* @param functions 要组合的函数数组* @returns 组合后的函数*/
function pipe<T>(...functions: Array<(arg: T) => T>): (arg: T) => T {return (input: T) => functions.reduce((acc, fn) => fn(acc), input);
}// 测试管道函数
function add5(x: number): number {return x + 5;
}function multiply3(x: number): number {return x * 3;
}function subtract10(x: number): number {return x - 10;
}const transform = pipe(add5, multiply3, subtract10);
console.log(transform(10)); // 计算过程: (10 + 5) = 15 → (15 * 3) = 45 → (45 - 10) = 35
闯关5:实现一个防抖函数
/*** 防抖函数,在延迟时间内只执行最后一次调用* @param fn 要防抖的函数* @param delay 延迟时间(毫秒)* @returns 防抖后的函数*/
function debounce<T extends (...args: any[]) => any>(fn: T, delay: number): (...args: Parameters<T>) => void {let timeoutId: ReturnType<typeof setTimeout>;return function(...args: Parameters<T>): void {clearTimeout(timeoutId);timeoutId = setTimeout(() => {fn(...args);}, delay);};
}// 测试防抖函数
function search(query: string): void {console.log(`Searching for: ${query}`);
}const debouncedSearch = debounce(search, 500);// 快速连续调用
debouncedSearch("a");
debouncedSearch("ab");
debouncedSearch("abc");// 500毫秒后只会输出: Searching for: abc
这些示例涵盖了TypeScript函数的主要概念和实际应用场景,从基础到高级功能都有涉及。
相关文章:
Typescript学习教程,从入门到精通,TypeScript 函数语法知识点及案例代码(5)
TypeScript 函数语法知识点及案例代码 TypeScript 提供了丰富的函数语法特性,使得函数定义更加灵活和强大。以下将详细介绍 TypeScript 中函数的相关语法,包括函数定义、可选参数、默认参数、剩余参数、重载函数、递归函数、匿名函数、箭头函数以及回调…...
【51单片机定时器/计数器】
目录 简介 定时器配置流程 1.配置定时器工作方式寄存器TMOD 2.配置中断寄存器TCON 3.定时时间计算公式 4.配置中断允许寄存器IE 5.使用中断函数完成中断 简介 定时器/计数器本质都是对脉冲信号进行计数,区别在于作为定时器时的脉冲信号来自于晶振12分频&…...
Oracle 的 ASSM 表空间
Oracle 的 ASSM(Automatic Segment Space Management)表空间 是一种自动管理段空间的技术,通过位图(Bitmap)机制跟踪数据块的使用情况,替代传统的手动管理(MSSM,即 Freelist 管理&am…...
C++学习:六个月从基础到就业——C++11/14:auto类型推导
C学习:六个月从基础到就业——C11/14:auto类型推导 本文是我C学习之旅系列的第四十一篇技术文章,也是第三阶段"现代C特性"的第三篇,主要介绍C11/14中的auto类型推导机制。查看完整系列目录了解更多内容。 引言 在现代C…...
select语句的书写顺序
一.MySQL SELECT语句的执行顺序 MySQL中SELECT语句的执行顺序与SQL语句的书写顺序不同,理解这个执行顺序对于编写高效查询非常重要。 1.标准SELECT语句的执行顺序 FROM子句(包括JOIN操作) 首先确定数据来源表执行表连接操作 WHERE子句 对F…...
OpenWebUI新突破,MCPO框架解锁MCP工具新玩法
大家好,Open WebUI 迎来重要更新,现已正式支持 MCP 工具服务器,但 MCP 工具服务器需由兼容 OpenAPI 的代理作为前端。mcpo 是一款实用代理,经测试,它能让开发者使用 MCP 服务器命令和标准 OpenAPI 服务器工具ÿ…...
【Day28】
总结: Python 通过缩进来定义代码块的结构。当解释器遇到像 def, class, if, for 这样的语句,并且后面跟着冒号 : 时,它就期望接下来会有一个或多个缩进的语句来构成这个代码块。如果它没有找到任何缩进的语句(即代码块是空的&am…...
STM32 | FreeRTOS 消息队列
01 一、概述 队列又称消息队列,是一种常用于任务间通信的数据结构,队列可以在任务与任务间、中断和任务间传递信息,实现了任务接收来自其他任务或中断的不固定长度的消息,任务能够从队列里面读取消息,当队列中的消…...
Vue-事件修饰符
事件修饰符 prevent (阻止默认事件) 超链接 点击事件 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>事件修饰符</title><!-- 引入Vue --><script …...
c++函数调用运算符及类型转换运算符重载
author: hjjdebug date: 2025年 05月 17日 星期六 14:44:48 CST descrip: c函数调用运算符及类型转换运算符重载 文章目录 0. 前言. 运算符包括以下运算符.1. 运算符重载语句一般格式:2. 函数调用运算符:3. 类型转换运算符: 例如 int(); double(); bool(…...
如何在 Windows 10 或 11 中安装 PowerShellGet 模块?
PowerShell 是微软在其 Windows 操作系统上提供的强大脚本语言,可用于通过命令行界面自动化各种任务,适用于 Windows 桌面或服务器环境。而 PowerShellGet 是 PowerShell 中的一个模块,提供了用于从各种来源发现、安装、更新和发布模块的 cmdlet。 本文将介绍如何在 PowerS…...
84.评论日记
原链接 这个视频我发了四五条评论。评论内容甚至和下面这个视频内的其他评论一样。 找了另外的账号也发了。 发现,无论是我这个账号,还是其他的账号,评论都无法看到。 我大胆猜测有一种机制,某些官号会被设置成一种高检测的等…...
一周学会Pandas2 Python数据处理与分析-Pandas2数据添加修改删除操作
锋哥原创的Pandas2 Python数据处理与分析 视频教程: 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 对数据的修改、增加和删除在数据整理过程中时常发生。修改的情况一般是修改错误,还有一种情况是格式转换…...
荷兰国旗问题 之 指针划分区间问题
文章目录 首先介绍一下什么是荷兰国旗问题?问题描述为:给定一个由红色、白色和蓝色三种颜色组成的无序数组,将数组元素按颜色排序,使得所有红色元素在前,白色元素居中,蓝色元素在后。这里的 “颜色” 通常用…...
冒泡排序-java
public class BubbleSort{ public static void bubbleSort(int[] arr) { int n arr.length; boolean swapped; // 外层循环控制遍历的轮数 for (int i 0; i < n - 1; i) { swapped false; for (int j 0; …...
进阶-数据结构部分:2、常用排序算法
飞书文档https://x509p6c8to.feishu.cn/wiki/FfpIwIPtviMMb4kAn3Sc40ABnUh 常用排序算法 这几种算法都是常见的排序算法,它们的优劣和适用场景如下: 冒泡排序(Bubble Sort):简单易懂,时间复杂度较高&…...
人工智能-自然语言与语音产品实现
一、语义相似度 (一)、文本向量化 1、文本向量化(Text Vectorization) 是自然语言处理(NLP)中的核心预处理步骤,旨在将人类语言的文本转换为计算机可处理的数值向量(数学表达&…...
阿里巴巴开源移动端多模态LLM工具——MNN
MNN 是一个高效且轻量级的深度学习框架。它支持深度学习模型的推理和训练,并在设备端的推理和训练方面具有行业领先的性能。目前,MNN 已集成到阿里巴巴集团的 30 多个应用中,如淘宝、天猫、优酷、钉钉、闲鱼等,覆盖了直播、短视频…...
SpringBootAdmin:全方位监控与管理SpringBoot应用
监控的意义 1. 监控服务状态是否宕机 2. 监控服务运行指标 (内存,虚拟机,线程,请求等) 3. 监控日志 4. 管理服务 (服务下线) 可视化监控平台 Spring Boot Admin, 开源社区项目, 用于管理和监控SpringBoot应用程序. 客户端注册到服务端, 通过HTTP请求方式, 服务端定期从客…...
SAP HCM 0008数据存储逻辑
0008信息类型:0008信息类型是存储员工基本薪酬的地方,因为很多企业都会都薪酬带宽,都会按岗定薪,所以在上线前为体现工资体系的标准化,都会在配置对应的薪酬关系,HCM叫间接评估,今天我们就分析下…...
【springcloud学习(dalston.sr1)】Config配置中心-ConfigServer端与Git通信(含源代码)(十三)
该系列项目整体介绍及源代码请参照前面写的一篇文章【springcloud学习(dalston.sr1)】项目整体介绍(含源代码)(一) springcloud学习(dalston.sr1)系统文章汇总如下: 【springcloud学习(dalston…...
2020CCPC河南省赛题解
A. 班委竞选 签到题,模拟。 #include <bits/stdc.h> #define x first #define y second #define int long long //#define double long doubleusing namespace std; typedef unsigned long long ULL ; typedef pair<int,int> PII ; typedef pair<d…...
C语言输入函数对比解析
目录 C语言输入函数全家福(和它们的秘密)fgetsgetsscanfgetcharfscanf函数对比表灵魂总结 哈哈,看来你正在和C语言的输入函数们玩“大家来找茬”!放心,我会用最接地气的方式给你讲明白,保证比看《甄嬛传》还…...
python四则运算计算器
python四则运算计算器 是谁说,python不好写计算器的,我亲自写个无ui的计算器功能,证明这是谣言 step1:C:\Users\wangrusheng\Downloads\num.txt 15 - 4 * 3 10 / 2(5 3) * 2 6 / 31/2 * 8 3/4 * 4 - 0.52.5 * (4 1.6) - 9 / 3-6 12 * (…...
BUUCTF——Nmap
BUUCTF——Nmap 进入靶场 类似于一个nmap的网站 尝试一下功能 没什么用 看看数据包 既然跟IP相关 伪造一个XXF看看 拼接了一下没什么用 果然没这么简单 尝试一下命令注入 构造payload 127.0.0.1 | ls 应该有过滤 加了个\ 直接构造个php木马上传试试 127.0.0.1 | <?…...
【Changer解码头详解及融入neck层数据的实验设计】
Changer解码头详解 ChangerEx中的 Changer 解码头(定义在 [changer.py](file://opencd\models\decode_heads\changer.py))是基于双时相输入的,用于遥感变化检测任务。下面我将详细解释: 🎯 一、解码头输入数据来源 输…...
深度学习推理引擎---OpenVINO
OpenVINO(Open Visual Inference & Neural Network Optimization Toolkit)是英特尔开发的开源工具套件,旨在优化和加速深度学习模型在英特尔硬件(CPU、GPU、VPU、FPGA等)上的推理性能,同时支持从训练到…...
JavaScript splice() 方法
1. JavaScript splice() 方法 1.1. 定义和用法 splice() 方法用于添加或删除数组中的元素。 注意:这种方法会改变原始数组。 返回值:如果删除一个元素,则返回一个元素的数组。 如果未删除任何元素,则返回空数组。 1.2. …...
数据库故障排查指南:解决常见问题,保障数据安全与稳定
数据库故障排查指南:解决常见问题,保障数据安全与稳定 📖 前言 数据库作为现代应用的核心组件,其稳定性直接影响业务连续性。本文总结六大常见数据库故障场景,提供快速排查思路与解决方案,助你化身"…...
gem5-gpu教程 第十章 关于topology 的Mesh network
问题一、L1和L2缓存之间的VI_hammer_fusion中指定了互连延迟,如何更改这些数字吗? 我已经实现了一个网格拓扑来连接cpu内核和GPU SM,并对VI_hammer*和网格文件进行了所有必要的更改。我的问题是: 1. There is interconnect latency specified in VI_hammer_fusion betwee…...
【C/C++】C++返回值优化:RVO与NRVO全解析
文章目录 C返回值优化:RVO与NRVO全解析1 简介2 RVO vs NRVO3 触发条件4 底层机制5 应用场景6 验证与限制7 性能影响8 补充说明9 总结 C返回值优化:RVO与NRVO全解析 返回值优化(Return Value Optimization, RVO)是编译器通过消除临…...
使用 Kaniko来构建镜像
使用 Kaniko来构建镜像 Kaniko 是一种专注于容器镜像构建的开源工具,其核心设计理念与 Docker 存在显著差异。以下从功能定位、技术实现和适用场景三方面进行对比分析: 一、Kaniko 的核心特性 无需 Docker 守护进程 Kaniko 直接在容器或 Kubernetes 集…...
2025.05.17淘天机考笔试真题第三题
📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 03. 奇偶平衡树分割问题 问题描述 K小姐是一位园林设计师,她设计了一个由多个花坛组成的树形公园。每个花坛中种植了不同数量的花…...
history模式:让URL更美观
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…...
算法:分治法
实验内容 在一个2kⅹ2k个方格组成的棋盘中,若恰有一个方格与其他方格不同,则称该方格为特殊方格,且称该棋盘为一特殊棋盘。 显然,特殊方格出现的位置有4k 种情况,即k>0,有4k 种不同的特殊棋盘 棋盘覆盖:…...
豆粕ETF投资逻辑整理归纳-20250511
目录 一、什么是豆粕 基本概念 豆粕上游生产国 豆粕下游消耗方 二、豆粕ETF 概念 策略 展期操作 超额收益 行情波动 豆粕资产的低相关性 三、展期收益 Contango升水结构和Backwardation贴水结构 豆粕的贴水逻辑 还有哪些品种拥有长期的展期收益 四、其他相关信…...
使用 Python 连接 Oracle 23ai 数据库完整指南
方法一:使用 oracledb 官方驱动(推荐) Oracle 官方维护的 oracledb 驱动(原 cx_Oracle)是最新推荐方案,支持 Thin/Thick 两种模式。 1. 环境准备 pip install oracledb2. 完整示例代码 import oracledb import getpass from typing import Unionclass Oracle23aiConn…...
构建集成差异化灵巧手和先进机器人控制技术的自动化系统
介绍程序 1.流程分析 通过流程分析审查应用机器人自动化的可行性。 2.系统设计 选择合适的机器人(机械臂、夹持器、视觉系统等),并通过详细的任务分析设计最佳系统。 3.内部测试 建立内部测试平台并解决任何问题。 4.现场测试 现场设…...
题单:汉诺塔问题
题目描述 如下图所示,设有 nn 个大小不等的中空圆盘,按照从小到大的顺序叠套在立柱 A 上,另有两根立柱 B 和 C 。 现在要求把全部圆盘从 A 柱(称为源柱)移到 C 柱(称为目标柱),移动…...
Unable to get end effector tips from jmg
这个错误信息表明在使用MoveIt2时,moveit_visual_tools无法从关节模型组(Joint Model Group,简称JMG)中获取末端执行器(End Effector,简称EE)的尖端信息。这通常是因为配置文件中缺少相关信息&a…...
flutter flutter run 运行项目卡在Running Gradle task ‘assembleDebug‘...
flutter run --verbose在运行flutter run 可以看到是卡在哪一步 最重要的就是自己查看日志,具体哪一步有问题flutter run --verbose使用这个,运行了项目会将错误信息放在控制台 可能原因 静态资源问题如果:图片、字体文件等没有在pubspec.yam…...
STM32烧录程序正常,但是运行异常
一、硬件配置问题 BOOT引脚设置错误 STM32的启动模式由BOOT0和BOOT1引脚决定。若设置为从RAM启动(BOOT01,BOOT10),程序在掉电后无法保存,导致复位后无法正常运行。应确保BOOT00(从Flash启动)15。…...
TTS:F5-TTS 带有 ConvNeXt V2 的扩散变换器
1,项目简介 F5-TTS 于英文生成领域表现卓越,发音标准程度在本次评测软件中独占鳌头。再者,官方预设的多角色生成模式独具匠心,能够配置多个角色,一次性为多角色、多情绪生成对话式语音,别出心裁。 最低配置…...
ecmascript 第6版特性 ECMA-262 ES6
https://blog.csdn.net/zlpzlpzyd/article/details/146125018 在之前写的文章基础上,ES6在export和import的基础外,还有如下特性 特性说明let/const块级作用域变量声明>箭头函数Promise异步编程...
2024 山东省ccpc省赛
目录 I(签到) 题目简述: 思路: 代码: A(二分答案) 题目简述: 思路: 代码: K(构造) 题目: 思路: 代…...
角点特征:从传统算法到深度学习算法演进
1 概述 图像特征是用来描述和分析图像内容的关键属性,通常包括颜色、纹理和形状等信息。颜色特征能够反映图像中不同颜色的分布,常通过 RGB 值或色彩直方图表示。纹理特征则关注图像表面的结构和细节,例如通过灰度共生矩阵或局部二值模式&…...
免费代理IP服务有哪些隐患?如何安全使用?
代理IP已经成为互联网众多用户日常在线活动中不可或缺的一部分。无论是为了保护个人隐私、突破地理限制,还是用于数据抓取、广告投放等商业用途,代理IP都扮演着关键角色。然而,市场上存在大量的免费代理IP服务,尽管它们看起来颇具…...
深入了解 VPC 端点类型 – 网关与接口
什么是VPC 端点 VPC 端点(VPC Endpoint)是 Amazon Web Services (AWS) 提供的一种服务,允许用户在 Virtual Private Cloud (VPC) 内部安全地访问 AWS 服务,而无需通过公共互联网。VPC 端点通过私有连接将 VPC 与 AWS 服务直接连接…...
Android屏幕采集编码打包推送RTMP技术详解:从开发到优化与应用
在现代移动应用中,屏幕采集已成为一个广泛使用的功能,尤其是在实时直播、视频会议、远程教育、游戏录制等场景中,屏幕采集技术的需求不断增长。Android 平台为开发者提供了 MediaProjection API,这使得屏幕录制和采集变得更加简单…...
信息系统项目管理师高级-软考高项案例分析备考指南(2023年案例分析)
个人笔记整理---仅供参考 计算题 案例分析里的计算题就是进度、挣值分析、预测技术。主要考査的知识点有:找关键路径、求总工期、自由时差、总时差、进度压缩资源平滑、挣值计算、预测计算。计算题是一定要拿下的,做计算题要保持头脑清晰,认真读题把PV、…...