当前位置: 首页 > news >正文

《TypeScript 面试八股:高频考点与核心知识点详解》

“你好啊!能把那天没唱的歌再唱给我听吗? ”


前言

因为主包还是主要学习js,ts浅浅的学习了一下,在简历中我也只会写了解,所以我写一些比较基础的八股,如果是想要更深入的八股的话还是建议找别人的。

Ts基础

为社么要使用ts?ts相对于js的优势在哪?

TypeScript是JS的超集,包括所有的JS规范版本。同时拥有强大的类型系统,包括泛型。是一个面向对象的语言,提供类,接口和模块。

TS对JS的改进主要是静态类型检查(强类型语言)“静态类型更有利于构建大型应用”。 同时TS多了接口,泛型这些JS所没有的特性,内置的数据类型也比较多。

TypeScript的内置数据类型有哪些

在Typescript中,内置的数据类型也称为原始数据类型。

  • boolean(布尔类型)
  • number(数字类型)
  • string(字符串类型)
  • void 类型
  • null 和 undefined 类型
  • array(数组类型)
  • tuple(元组类型):允许表示一个已知元素数量和类型的数组,各元素的类型不必相同
  • enum(枚举类型):enum类型是对JavaScript标准数据类型的一个补充,使用枚举类型可以为一组数值赋予友好的名字
  • any(任意类型)
  • never 类型
  • object 对象类型

TypeScript 中 const 和 readonly 的区别?

const可以防止变量的值被修改,在运行时检查,使用const变量保存的数组,可以使用push,pop等方法。

readonly可以防止变量的属性被修改,在编译时检查,使用Readonly Array声明的数组不能使用push,pop等方法

TypeScript 中 any 类型的作用是什么?

为编程阶段还不清楚类型的变量指定一个类型。 这些值可能来自于动态的内容,比如来自用户输入或第三方代码库(不确定用户输入值的类型,第三方代码库是如何工作的)。 这种情况下,我们不希望类型检查器对这些值进行检查而是直接让它们通过编译阶段的检查。使用any就失去了ts带来的类型检查。

any的问题

  1. 类型污染:any类型的对象会导致后续的属性类型都会变成any
  2. 使用不存在的属性或方法而不报错

TypeScript 中 any、never、unknown、null & undefined 和 void 有什么区别?

  • any: 动态的变量类型(失去了类型检查的作用)。
  • never: 永不存在的值的类型。例如:never 类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型。
  • unknown: 任何类型的值都可以赋给 unknown 类型,但是 unknown 类型的值只能赋给 unknown 本身和 any 类型。
  • null & undefined: 默认情况下 null 和 undefined 是所有类型的子类型。 就是说你可以把 null 和 undefined 赋值给 number 类型的变量。当你指定了 --strictNullChecks 标记,null 和 undefined 只能赋值给 void 和它们各自。
  • void: 没有任何类型。例如:一个函数如果没有返回值,那么返回值可以定义为void。

TS中any和unknown有什么区别?

unknown 和 any 的主要区别是 unknown 类型会更加严格:在对 unknown 类型的值执行大多数操作之前,我们必须进行某种形式的检查。而在对 any 类型的值执行操作之前,我们不必进行任何检查。

any 和 unknown 都是顶级类型,但是 unknown 更加严格,不像 any 那样不做类型检查,反而 unknown 因为未知性质,不允许访问属性,不允许赋值给其他有明确类型的变量。

我在之前的博客中提到了:unkonw因为我们不知道他里面是什么,所以我们不能对他进行任何操作。

解释一下TypeScript中的枚举

枚举就是一个对象的所有可能取值的集合(和数学中的思想一样);

enum Day {SUNDAY, MONDAY,TUESDAY, WEDNESDAY,THURSDAY,FRIDAY,SATURDAY}

TypeScript 中如何联合枚举类型的 Key?————用下标

 enum Status {xiaoming, xiaohong, xiaogang,}
​console.log(Status.xiaoming,Status[0]);console.log(Status.xiaohong,Status[1]);console.log(Status.xiaogang,Status[2]);//输出: 0 xiaoming//      1 xiaohong//      2 xiaogang

keyof 和 typeof 关键字的作用?

keyof 关键字

keyof 用于获取对象类型的键的联合类型。它可以让你从一个对象类型中提取出所有键的名称,并将它们组合成一个联合类型。

interface Person {name: string;age: number;address: string;
}type PersonKeys = keyof Person; // "name" | "age" | "address"function getProperty(obj: Person, key: PersonKeys) {return obj[key];
}const person: Person = {name: "Alice",age: 30,address: "123 Main St"
};console.log(getProperty(person, "name")); // 输出: Alice
console.log(getProperty(person, "age")); // 输出: 30

typeof 关键字

typeof 用于获取变量或表达式的类型。它可以让你在类型上下文中引用一个变量的类型。

const person = {name: "Alice",age: 30,address: "123 Main St"
};type PersonType = typeof person;
// PersonType 的类型为:
// {
//   name: string;
//   age: number;
//   address: string;
// }function printPerson(p: PersonType) {console.log(p.name, p.age, p.address);
}printPerson(person); // 输出: Alice 30 123 Main St

TS中的泛型是什么

泛型允许我们在编写代码时使用一些以后才指定的类型,在定义函数,接口或者类的时候,不预先定义好具体的类型,而在使用的时候在指定类型的一种特性。

泛型的主要作用是:

  1. 提高代码的复用性:可以编写适用于多种类型的通用代码。
  2. 增强类型安全性:通过类型参数,可以在编译时捕获类型错误。
  3. 减少冗余代码:避免为每种类型编写单独的函数或类。

泛型函数

泛型函数可以接受任意类型的参数,并返回相应类型的值。

function identity<T>(arg: T): T {return arg;
}// 使用泛型函数
let output1 = identity<string>("Hello"); // 类型为 string
let output2 = identity<number>(42);      // 类型为 number

泛型接口

泛型接口允许你定义可以适用于多种类型的接口

interface KeyValuePair<K, V> {key: K;value: V;
}// 使用泛型接口
let pair1: KeyValuePair<string, number> = { key: "age", value: 30 };
let pair2: KeyValuePair<number, boolean> = { key: 1, value: true };

泛型类

泛型类允许你创建可以处理多种类型的类。

class Box<T> {private value: T;constructor(value: T) {this.value = value;}getValue(): T {return this.value;}
}// 使用泛型类
let box1 = new Box<string>("Hello"); // 类型为 Box<string>
let box2 = new Box<number>(42);      // 类型为 Box<number>

在这个例子中,Box 类可以存储任意类型的值,并通过 getValue 方法返回该值。

any和泛型的区别?

泛型有类型推断,编译器会根据传入的参数自动地帮助我们确定T的类型

any则是不检验

接口和Type

TypeScript 中同名的 interface 或者同名的 interface 和 class 可以合并吗?

同名的interface会自动合并,同名的interface和class会自动聚合。

接口和类型别名的区别?

两者都可以用来描述对象或函数的类型。与接口不同,类型别名还可以用于其他类型,如基本类型(原始值)、联合类型、元组。

TypeScript 中 type 和 interface 的区别?

相同点:

  1. 都可以描述 '对象' 或者 '函数'
  2. 都允许拓展(extends):interface 和 type 都可以拓展,并且两者并不是相互独立的,也就是说 interface 可以 extends type, type 也可以 extends interface 。 虽然效果差不多,但是两者语法不同。

不同点:

特性interfacetype
扩展方式通过 extends 扩展通过 &(交叉类型)扩展
声明合并支持不支持
适用场景对象类型、类的接口任何类型(基本类型、联合类型、元组等)
性能在大型项目中稍好处理复杂类型时可能稍慢
兼容性支持 implements不能直接用于 implements
灵活性较低,只能定义对象或函数类型较高,可以定义任何类型

 类

TS中什么是方法重载?

方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数。 基本上,它在派生类或子类中重新定义了基类方法。

方法覆盖规则:

  • 该方法必须与父类中的名称相同。
  • 它必须具有与父类相同的参数。
  • 必须存在IS-A关系或继承。

TS中的类及其特性

在 TypeScript 中,​类(Class)​ 是面向对象编程(OOP)的核心概念之一。TypeScript 的类不仅支持 ES6 的类特性,还增加了一些额外的功能,如访问修饰符、抽象类、只读属性等。

1. ​基本语法

TypeScript 中定义类的语法与 ES6 类似,使用 class 关键字。

class Person {// 属性name: string;age: number;// 构造函数constructor(name: string, age: number) {this.name = name;this.age = age;}// 方法greet() {console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`);}
}// 创建类的实例
const person = new Person("Alice", 30);
person.greet(); // 输出: Hello, my name is Alice and I'm 30 years old.

2. ​访问修饰符

TypeScript 提供了三种访问修饰符,用于控制类成员的访问权限:

  • ​**public**​(默认):成员可以在任何地方访问。
  • ​**private**:成员只能在类内部访问。
  • ​**protected**:成员可以在类内部和子类中访问。
class Person {public name: string; // 默认是 publicprivate age: number; // 只能在类内部访问protected gender: string; // 可以在子类中访问constructor(name: string, age: number, gender: string) {this.name = name;this.age = age;this.gender = gender;}public greet() {console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`);}
}class Employee extends Person {constructor(name: string, age: number, gender: string) {super(name, age, gender);console.log(this.gender); // 可以访问 protected 成员// console.log(this.age); // 错误: age 是 private 成员}
}const person = new Person("Alice", 30, "female");
console.log(person.name); // 可以访问 public 成员
// console.log(person.age); // 错误: age 是 private 成员
// console.log(person.gender); // 错误: gender 是 protected 成员

3. ​只读属性

使用 readonly 关键字可以将属性标记为只读,只能在构造函数中初始化,之后不可修改。

class Person {readonly name: string;constructor(name: string) {this.name = name;}changeName(newName: string) {// this.name = newName; // 错误: name 是只读属性}
}const person = new Person("Alice");
// person.name = "Bob"; // 错误: name 是只读属性

4. ​静态成员

静态成员属于类本身,而不是类的实例。使用 static 关键字定义静态成员。

class MathUtils {static PI = 3.14;static calculateArea(radius: number) {return this.PI * radius * radius;}
}console.log(MathUtils.PI); // 输出: 3.14
console.log(MathUtils.calculateArea(5)); // 输出: 78.5

5. ​抽象类

抽象类不能被实例化,只能被继承。它可以包含抽象方法(没有实现的方法)和具体方法。

abstract class Animal {abstract makeSound(): void; // 抽象方法,子类必须实现move() {console.log("Moving...");}
}class Dog extends Animal {makeSound() {console.log("Woof!");}
}const dog = new Dog();
dog.makeSound(); // 输出: Woof!
dog.move(); // 输出: Moving...
// const animal = new Animal(); // 错误: 不能实例化抽象类

6. ​getter 和 setter

可以使用 get 和 set 关键字定义属性的访问器。

class Person {private _age: number;constructor(age: number) {this._age = age;}get age() {return this._age;}set age(value: number) {if (value >= 0) {this._age = value;} else {throw new Error("Age cannot be negative.");}}
}const person = new Person(30);
console.log(person.age); // 输出: 30
person.age = 25;
console.log(person.age); // 输出: 25
// person.age = -5; // 抛出错误: Age cannot be negative.

7. ​类的继承

使用 extends 关键字实现类的继承,子类可以继承父类的属性和方法。

class Animal {constructor(public name: string) {}move(distance: number) {console.log(`${this.name} moved ${distance} meters.`);}
}class Dog extends Animal {bark() {console.log("Woof! Woof!");}
}const dog = new Dog("Buddy");
dog.move(10); // 输出: Buddy moved 10 meters.
dog.bark(); // 输出: Woof! Woof!

8. ​方法重写

子类可以重写父类的方法。

class Animal {move() {console.log("Moving...");}
}class Dog extends Animal {move() {console.log("Running...");}
}const dog = new Dog();
dog.move(); // 输出: Running...

9. ​构造函数重载

TypeScript 支持构造函数重载,可以根据不同的参数创建对象。

class Point {constructor(public x: number, public y: number);constructor(x: number, y: number, public z: number);constructor(public x: number, public y: number, public z?: number) {// 实现逻辑}
}const point1 = new Point(1, 2);
const point2 = new Point(1, 2, 3);

10. ​类与接口

类可以实现接口,接口可以定义类的结构。

interface Animal {name: string;makeSound(): void;
}class Dog implements Animal {constructor(public name: string) {}makeSound() {console.log("Woof!");}
}const dog = new Dog("Buddy");
dog.makeSound(); // 输出: Woof!

TS原理 

简单介绍一下 TypeScript 模块的加载机制?

假设有一个导入语句 import { a } from "moduleA";

  1. 首先,编译器会尝试定位需要导入的模块文件,通过绝对或者相对的路径查找方式;
  2. 如果上面的解析失败了,没有查找到对应的模块,编译器会尝试定位一个外部模块声明(.d.ts);
  3. 最后,如果编译器还是不能解析这个模块,则会抛出一个错误 error TS2307: Cannot find module 'moduleA'.

对 TypeScript 类型兼容性的理解?

TypeScript 类型兼容性指的是 TypeScript 中的类型系统能够自动进行类型检查和类型推导,以确保类型的兼容性。具体来说,如果两个类型 A 和 B 满足一定的关系,那么 A 类型的变量或参数可以赋值给 B 类型的变量或参数。

TypeScript 的类型兼容性规则基于结构子类型化的原则,即只要目标类型(被赋值的类型)的成员属性包含来源类型(待赋值的类型)的成员属性,或者来源类型可以转换为目标类型,就认为这两个类型是兼容的。

例如,下面代码中的 a 变量和 b 变量都是 Animal 类型,但是它们的属性不完全相同:

interface Animal {name: string;age: number;
}class Cat implements Animal {name = 'Tom';age = 2;type = 'mammal';
}let a: Animal = { name: 'Kitty', age: 1 };
let b: Animal = new Cat();

尽管 Cat 类型比 Animal 类型具有更多的属性,但是由于其中的属性包含了 Animal 的所有属性,因此 Cat 是兼容于 Animal 的。因此,let b: Animal = new Cat() 是合法的。

在 TypeScript 中,类型兼容性是非常重要的,因为它允许我们编写更加灵活和可复用的代码,同时保证类型的安全性。在使用类型兼容性时,需要注意一些细节,如类型保护等,以确保程序的正确性。

TypeScript 中的 this 和 JavaScript 中的 this 有什么差异?

  1. TypeScript:noImplicitThis: true 的情况下,必须去声明 this 的类型,才能在函数或者对象中使用this。
  2. Typescript 中箭头函数的 this 和 ES6 中箭头函数中的 this 是一致的。

tsconfig.json有什么作用?

tsconfig.json文件是JSON格式的文件。

在tsconfig.json文件中,可以指定不同的选项来告诉编译器如何编译当前项目。

相关文章:

《TypeScript 面试八股:高频考点与核心知识点详解》

“你好啊&#xff01;能把那天没唱的歌再唱给我听吗&#xff1f; ” 前言 因为主包还是主要学习js&#xff0c;ts浅浅的学习了一下&#xff0c;在简历中我也只会写了解&#xff0c;所以我写一些比较基础的八股&#xff0c;如果是想要更深入的八股的话还是建议找别人的。 Ts基…...

鸡生蛋还是蛋生鸡? 基于python的CCM因果关系计算

文章目录 前言一、安装二、代码1.全部代码2.结果展示总结前言 因果推断在科学研究中起着重要的作用,尤其是在复杂系统中,例如生态学、气候学、经济学等领域。在这些领域中,了解变量之间的因果关系可以帮助我们更好地理解系统的动态行为和相互作用。传统的相关性分析并不足以…...

PyBluez2 的详细介绍、安装指南、使用方法及配置说明

PyBluez2&#xff1a;Python 蓝牙开发的核心库 一、PyBluez2 简介 PyBluez2 是 Python 的开源蓝牙编程库&#xff0c;支持蓝牙 2.0、BLE&#xff08;低功耗蓝牙&#xff09;和传统蓝牙协议栈的开发。它提供了对蓝牙硬件适配器的底层控制&#xff0c;适用于设备发现、配对、数…...

鸿蒙HarmonyOS NEXT之无感监听

鸿蒙中存在一些无感监听&#xff0c;这些监听经过系统API封装使用很简单&#xff0c;但是对实际业务开发中有很重要&#xff0c;例如埋点业务、数据统计、行为上报、切面拦截等。 Navigation的页面切换 在鸿蒙中Navigation被用来作为路由栈进行页面跳转&#xff0c;如果你想知…...

质检LIMS系统在食品生产加工企业的应用 如何保证食品生产企业的安全

在食品生产加工领域&#xff0c;质量安全是贯穿全产业链的生命线。随着《食品安全法》对全过程追溯要求的深化&#xff0c;传统实验室管理模式已难以满足高效、精准的质量管控需求。质检实验室信息管理系统&#xff08;LIMS&#xff09;作为数字化升级的核心工具&#xff0c;正…...

linux中如何获取其他进程的退出状态

进程的退出状态至关重要&#xff0c;用wait系列函数&#xff0c;父进程可以捕捉到子进程的退出状态&#xff0c;若给定任意进程&#xff0c;其父进程已经确定&#xff0c;无法改变&#xff0c;自己如何获取到其退出状态呢。 可以用ptrace系统api attach到相应的进程&#xff0c…...

【android】补充

3.3 常用布局 本节介绍常见的几种布局用法&#xff0c;包括在某个方向上顺序排列的线性布局&#xff0c;参照其他视图的位置相对排列的相对布局&#xff0c;像表格那样分行分列显示的网格布局&#xff0c;以及支持通过滑动操作拉出更多内容的滚动视图。 3.3.1 线性布局Linea…...

Unix Domain Socket、IPC、RPC与gRPC的深度解析与实战

Unix Domain Socket、IPC、RPC与gRPC的深度解析与实战 引言 在分布式系统和本地服务通信中&#xff0c;进程间通信&#xff08;IPC&#xff09;与远程过程调用&#xff08;RPC&#xff09;是核心能力。本文将深入剖析 Unix Domain Socket&#xff08;UDS&#xff09;、IPC、RP…...

从 MySQL 到时序数据库 TDengine:Zendure 如何实现高效储能数据管理?

小T导读&#xff1a;TDengine 助力广州疆海科技有限公司高效完成储能业务的数据分析任务&#xff0c;轻松应对海量功率、电能及输入输出数据的实时统计与分析&#xff0c;并以接近 1 : 20 的数据文件压缩率大幅降低存储成本。此外&#xff0c;taosX 强大的 transform 功能帮助用…...

华为OD机试A卷 - 积木最远距离(C++ Java JavaScript Python )

最新华为OD机试 真题目录:点击查看目录 华为OD面试真题精选:点击立即查看 题目描述 小华和小薇一起通过玩积木游戏学习数学。 他们有很多积木,每个积木块上都有一个数字,积木块上的数字可能相同。 小华随机拿一些积木挨着排成一排,请小薇找到这排积木中数字相同且所处…...

Zerotier虚拟局域网在树莓派的应用和Syncthing配合Zerotier实现端到端文件同步

一、Zerotier的部署 1、官网注册账号 https://my.zerotier.com/i 2、选择linux系统&#xff0c;执行安装Zerotier curl -s https://install.zerotier.com | sudo bash3、将树莓派网络加入Zerotier zerotier-cli join DB62228FEDF6CE55DB62228FEDF6CE55 为你的Zerotier IP 需…...

C++设计模式-桥梁模式:从基本介绍,内部原理、应用场景、使用方法,常见问题和解决方案进行深度解析

一、桥梁模式基本介绍 桥梁模式&#xff08;Bridge Pattern&#xff09;是一种结构型设计模式&#xff0c;又叫桥接模式&#xff0c;其核心思想是将抽象部分与实现部分分离&#xff0c;使它们可以独立变化。这种模式通过组合代替继承&#xff0c;有效解决了多层继承导致的类爆…...

系统转换、系统维护、净室软件工程、构件软件工程(高软51)

系列文章目录 系统转换、系统维护、净室软件工程、构件软件工程 文章目录 系列文章目录前言一、系统转换二、系统维护三、净室软件工程四、基于构件的软件工程总结 前言 本节讲明遗留系统的系统转换、系统维护、净室软件工程、基于构件软件工程相关知识。 一、系统转换 就是讲…...

自然语言处理(13:RNN的实现)

系列文章目录 第一章 1:同义词词典和基于计数方法语料库预处理 第一章 2:基于计数方法的分布式表示和假设&#xff0c;共现矩阵&#xff0c;向量相似度 第一章 3:基于计数方法的改进以及总结 第二章 1:word2vec 第二章 2:word2vec和CBOW模型的初步实现 第二章 3:CBOW模型…...

Docker镜像迁移方案

Docker镜像迁移方案 文章目录 Docker镜像迁移方案一&#xff1a;背景二&#xff1a;操作方式三&#xff1a;异常原因参考&#xff1a; 一&#xff1a;背景 比如机器上已经有先有的容器&#xff0c;但是docker pull的时候是失败的二&#xff1a;操作方式 1、停止正在运行的容器…...

深度学习框架PyTorch——从入门到精通(10)PyTorch张量简介

这部分是 PyTorch介绍——YouTube系列的内容&#xff0c;每一节都对应一个youtube视频。&#xff08;可能跟之前的有一定的重复&#xff09; 创建张量随机张量和种子张量形状张量数据类型 使用PyTorch张量进行数学与逻辑运算简单介绍——张量广播关于张量更多的数学操作原地修改…...

Springboot 集成 Flowable 6.8.0

1. 创建 Spring Boot 项目 通过 Spring Initializr&#xff08;https://start.spring.io/ &#xff09;创建一个基础的 Spring Boot 项目&#xff0c;添加以下依赖&#xff1a; Spring WebSpring Data JPAMySQL DriverLombok&#xff08;可选&#xff0c;用于简化代码&#x…...

Vue3 项目通过 docxtemplater 插件动态渲染 .docx 文档(带图片)预览,并导出

Vue3 项目通过 docxtemplater 插件动态渲染 .docx 文档&#xff08;带图片&#xff09;预览&#xff0c;并导出 预览安装插件示例代码项目目录结构截图实际效果截图 动态渲染 .docx 文档&#xff08;带图片&#xff09;&#xff0c;预览、导出安装插件docx 模板文件内容完整代码…...

实验一、Linux环境下实现进度条小程序:深入解析核心实现与关键技术细节

目录 引言&#xff1a;为什么需要进度条&#xff1f;环境准备与项目结构分析原理剖析&#xff1a;从终端输出到动态刷新代码逐行解析&#xff08;附完整代码&#xff09; 4.1 头文件与宏定义4.2 进度条的动态构建逻辑4.3 关键转义字符&#xff1a;\r与\n的深度对比4.4 缓冲机制…...

生活电子常识——cmd不能使用anaconda的python环境,导致输入python打开应用商店

前言 电脑已经安装了anaconda,从自带的Anaconda Prompt (Anaconda3)中是可以识别python环境的&#xff0c;然而切换到cmd时&#xff0c;突然发现cmd中无法识别anaconda的python环境&#xff0c;竟然打开了应用商店让我安装Python&#xff0c;这当然是不对的。 解决 这是因为…...

TypeScript中的声明合并:与JavaScript的对比与实践指南

引言 在大型项目开发中&#xff0c;代码的可维护性和可扩展性至关重要。TypeScript作为JavaScript的超集&#xff0c;通过静态类型系统带来了更强大的代码组织能力。其中声明合并&#xff08;Declaration Merging&#xff09; 是TypeScript独有的重要特性&#xff0c;本文将深…...

数据结构初阶-二叉树链式

目录 1.概念与结构 2.二叉数链式的实现 2.1遍历规则 2.2申请内存空间 2.3手动构建一棵二叉树 2.4二叉树结点的个数 2.5二叉树叶子结点的个数 2.6二叉树第K层结点个数 2.7二叉树的高度 2.8二叉树中查找值为x的结点 2.9二叉树的销毁 3.层序遍历 3.1概念 3.2层序遍历…...

2024年认证杯SPSSPRO杯数学建模B题(第二阶段)神经外科手术的定位与导航全过程文档及程序

2024年认证杯SPSSPRO杯数学建模 B题 神经外科手术的定位与导航 原题再现&#xff1a; 人的大脑结构非常复杂&#xff0c;内部交织密布着神经和血管&#xff0c;所以在大脑内做手术具有非常高的精细和复杂程度。例如神经外科的肿瘤切除手术或血肿清除手术&#xff0c;通常需要…...

Linux程序性能分析

为什么程序会慢&#xff1f; 在深入工具和方法之前&#xff0c;我们先来聊聊为什么程序会慢。一个程序主要在三个方面消耗资源&#xff1a; CPU时间 - 计算太多、算法效率低 内存使用 - 内存泄漏、频繁申请释放内存 I/O操作 - 文件读写、网络通信太频繁 今天我们主要聚焦C…...

【开题报告+论文+源码】基于SpringBoot的智能安全与急救知识科普系统设计与实现

项目背景与意义 在全球范围内&#xff0c;安全与急救知识的普及已成为提升公众安全素养、减少意外伤害发生率、提高突发事件应对能力的重要举措。尤其是在当今社会&#xff0c;人们面临的生活、工作环境日益复杂&#xff0c;交通事故、火灾、溺水、突发疾病等各种意外事件的发生…...

Linux shift 命令使用详解

简介 在 Bash 脚本中&#xff0c;shift 命令用于将命令行参数向左移动&#xff0c;有效地丢弃第一个参数并将其他参数向下移动。 基础语法 shift [N]N&#xff08;可选&#xff09;→ 要移动的位置数。默认值为 1 示例用法 移动参数 #!/bin/bash echo "Before shift…...

【C++网络编程】第5篇:UDP与广播通信

一、UDP协议核心特性 1. UDP vs TCP ​特性 ​UDP​TCP连接方式无连接面向连接&#xff08;三次握手&#xff09;可靠性不保证数据到达或顺序可靠传输&#xff08;超时重传、顺序控制&#xff09;传输效率低延迟&#xff0c;高吞吐相对较低&#xff08;因握手和确认机制&…...

C++11QT复习 (五)

文章目录 **Day6-2 成员访问运算符重载&#xff08;2025.03.25&#xff09;****1. 复习****2. 成员访问运算符重载****2.1 箭头运算符 (->) 重载****(1) 语法** **2.2 解引用运算符 (*) 重载****(1) 语法** **3. 代码分析****3.1 代码结构****3.2 代码解析****(1) Data 类**…...

Python项目-基于Python的网络爬虫与数据可视化系统

1. 项目简介 在当今数据驱动的时代&#xff0c;网络爬虫和数据可视化已成为获取、分析和展示信息的重要工具。本文将详细介绍如何使用Python构建一个完整的网络爬虫与数据可视化系统&#xff0c;该系统能够自动从互联网收集数据&#xff0c;进行处理分析&#xff0c;并通过直观…...

SpringCloud Zuul 使用教程

SpringCloud Zuul 使用教程 目录 Zuul 简介环境准备搭建 Zuul 网关 • 3.1 Maven 依赖 • 3.2 配置文件 • 3.3 启动类注解基本路由配置 • 4.1 简单路由 • 4.2 基于路径的路由 • 4.3 基于服务的路由Zuul 高级配置 • 5.1 过滤器配置 • 5.2 限流与熔断 • 5.3 负载均衡 •…...

介绍一款基于MinerU的PDF翻译工具

一。简介 Fast pdf translate是一款pdf翻译软件&#xff0c;基于MinerU实现pdf转markdown的功能&#xff0c;接着对markdown进行分割&#xff0c; 送给大模型翻译&#xff0c;最后组装翻译结果并由pypandoc生成结果pdf。 git地址&#xff1a; https://github.com/kv1830/fast…...

轻量级TLS反向代理工具TLS-reverse-proxy:打造安全通信桥梁

在数字化浪潮席卷全球的今天&#xff0c;数据隐私与传输安全已成为企业及个人的核心关切。TLS&#xff08;传输层安全协议&#xff09;作为互联网通信的"隐形卫士"&#xff0c;承担着保护数据在传输过程中不被窃取或篡改的重要使命。然而&#xff0c;对于许多传统服务…...

SQL问题分析与诊断(8)——前提

8.1. 前提 与其他关系库类似&#xff0c;SQL Server中&#xff0c;当我们对存在性能问题的SQL语句进行分析和诊断时&#xff0c;除了获取该SQL语句本身外&#xff0c;还需要获取SQL语句相应的查询计划及其相关的数据环境。这里&#xff0c;所谓数据环境&#xff0c;具体是指SQ…...

关于cmd中出现无法识别某某指令的问题

今天来解决以下这个比较常见的问题&#xff0c;安装各种软件都可能会发生&#xff0c;一般是安装时没勾选注册环境变量&#xff0c;导致cmd无法识别该指令。例如mysql&#xff0c;git等&#xff0c;一般初学者可能不太清楚。 解决这类问题最主要的是了解环境变量的概念&#x…...

如何处理不同输入类型(例如邮箱、电话号码)的验证?

处理不同输入类型(如邮箱、电话号码)的验证可以通过多种方法实现,包括使用 HTML5 内置验证、JavaScript/jQuery 自定义验证和正则表达式。以下是一些常用的验证方法和示例。 1. 使用 HTML5 内置验证 HTML5 提供了一些内置的输入类型,可以自动处理基本的验证。 示例 <…...

Redis集群哨兵相关面试题

目录 1.Redis 主从复制的实现原理是什么? 详解 补充增量同步 replication buffer repl backlog buffer 2.Redis 主从复制的常见拓扑结构有哪些? 3.Redis 复制延迟的常见原因有哪些? 4.Redis 的哨兵机制是什么? 主观下线和客观下线 哨兵leader如何选出来的&#x…...

【CXX-Qt】4.1 extern “RustQt“

QObjects Properties Methods Signals #[cxx_qt::bridge] mod ffi {extern "RustQt" {} }extern “RustQt” 部分是 CXX-Qt 桥接的核心&#xff0c;用于声明 Rust 类型和签名&#xff0c;使其可用于 Qt 和 C。 CXX-Qt 代码生成器使用你的 extern “RustQt” 部…...

当 0 编程基础,用 ChatGPT 和 Cursor 开发同一应用时… |AI 开发初体验

求人不如求己。 事情是这样的&#xff0c;前段时间&#xff0c;我看了本书&#xff0c;书里介绍了款应用&#xff0c;能计算财富自由价格&#xff0c;还能制定退休计划。 结果&#xff0c;我迫不及待去下载这个应用时&#xff0c;发现这应用功能残缺&#xff0c;完全不可用。 …...

如何排查C++程序的CPU占用过高的问题

文章目录 可能的原因程序设计的BUG系统资源问题恶意软件硬件问题 通常步骤一个简单的问题代码在windows平台上如何排查Windows Process ExplorerWinDBG 在Linux平台如何排查使用TOP GDBPerf 可能的原因 程序设计的BUG 有死循环低效算法与数据结构滥用自旋锁频繁的系统调用&a…...

数据库练习

完善t_hero表 -- 添加作者字段 alter table t_hero add author varchar(100);-- 更新数据update t_hero set author "曹雪芹" where id 1; update t_hero set author "曹雪芹" where id 2; update t_hero set author "曹雪芹" where id…...

nodejs-原型污染链

还是老规矩&#xff0c;边写边学&#xff0c;先分享两篇文章 深入理解 JavaScript Prototype 污染攻击 | 离别歌 《JavaScript百炼成仙》 全书知识点整理-CSDN博客 Ctfshow web入门 nodejs篇 web334-web344_web334 ctfshow-CSDN博客 334-js审计 var express require(expr…...

无人机与AI技术结合的突破性应用场景

1. 自主导航与动态避障 技术栈&#xff1a;SLAM 强化学习 (PPO算法) 代码示例&#xff08;Python PyTorch&#xff09;&#xff1a; import torch class DronePPO(torch.nn.Module):def __init__(self):super().__init__()self.actor torch.nn.Sequential(torch.nn.Linear…...

jsBridge在vue中使用

创建jsBridge.js /* eslint-disable */ function connectWebViewJavascriptBridge (callback) {if (window.WebViewJavascriptBridge) {callback(window.WebViewJavascriptBridge)} else {document.addEventListener(WebViewJavascriptBridgeReady, function () { callback(wi…...

Windows下docker使用教程

docker安装 镜像制作镜像加载容器创建更新镜像导出镜像 Windows10安装dockerdocker image制作docker 镜像加载docker 容器创建更新imageimage 导出为.tar文件 #以Windows10 、11为例 linux和Windows区别在于docker安装的程序是哪个操作系统的&#xff0c;后面的内容其实不变 …...

iOS:GCD信号量、同步、异步的使用方法

信号量的详细用法&#xff0c;可以用此方法进行队列管理 -(void)dispatchSignal{//crate的value表示&#xff0c;最多几个资源可访问dispatch_semaphore_t semaphore dispatch_semaphore_create(3);dispatch_queue_t quene dispatch_get_global_queue(DISPATCH_QUEUE_PRIORI…...

Nginx相关漏洞解析

一、CRLF注入漏洞 原理&#xff1a;Nginx将传入的url进行解码&#xff0c;对其中的%0a%0d替换成换行符&#xff0c;导致后面的数据注入至头部&#xff0c;造成CRLF 注入漏洞 1、开环境 2、访问网站&#xff0c;并抓包 3、构造请求头 %0ASet-cookie:JSPSESSID%3D1 这样就可以…...

SpringCloud构建一个服务步骤

Spring Cloud是一个用于构建分布式系统的开源框架&#xff0c;可以帮助开发者快速构建各种云原生应用。下面是一个简单的步骤&#xff0c;展示如何使用Spring Cloud构建一个服务&#xff1a; 创建一个Spring Boot项目&#xff1a;首先需要创建一个Spring Boot项目作为基础。可以…...

MySQL中怎么分析性能?

MySQL中主要有4种方式可以分析数据库性能&#xff0c;分别是慢查询日志&#xff0c;profile&#xff0c;Com_xxx和explain。 慢查询日志 先用下面命令查询慢查询日志是否开启&#xff0c; show variables like slow_query_log;# 一般默认都是以下结果 ---------------------…...

MinGW与使用VScode写C语言适配

压缩包 通过网盘分享的文件&#xff1a;MinGW.zip 链接: https://pan.baidu.com/s/1QB-Zkuk2lCIZuVSHc-5T6A 提取码: 2c2q 需要下载的插件 1.翻译 找到VScode页面&#xff0c;从上数第4个&#xff0c;点击扩展&#xff08;以下通此&#xff09; 搜索---Chinese--点击---安装--o…...

k8s存储介绍(五)PV与PVC

在 Kubernetes&#xff08;k8s&#xff09;中&#xff0c;持久化存储&#xff08;Persistent Storage&#xff09;是一个非常重要的概念&#xff0c;因为 Pod 本身是无状态的&#xff0c;重启后会丢失数据。为了支持有状态应用&#xff0c;Kubernetes 提供了持久化存储的机制&a…...