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

JavaScript 系列之:垃圾回收机制

前言

垃圾回收是一种自动内存管理机制,用于检测和清除不再使用的对象,以释放内存空间。当一个对象不再被引用时,垃圾回收器会将其标记为垃圾,然后在适当的时候清除这些垃圾对象,并将内存回收给系统以供其他对象使用。

什么是"对象不再被引用"?

当一个对象不再被任何变量或属性引用时,它就成为垃圾。例如,当一个函数执行完毕后,其中创建的局部变量将成为垃圾,因为它们无法再被访问到。

"适当的时候"是指什么时候?

首先 JavaScript 引擎会定期找出垃圾,也会在内存使用量到达某一阈值或内存分配失败时去找垃圾,还有一些其他的机制这里不做拓展。

JavaScript 引擎是如何找到并清理垃圾的?

有两种方式:标记清除法和引用计数法。现在大都用的是标记清除法,因为引用计数法在处理循环引用时存在问题。

对于栈中的垃圾和堆中的垃圾,清理时有什么区别?

当我们在 JavaScript 中讨论垃圾回收机制时,主要关注的是堆内存中的回收机制。栈内存的管理是由编译器和解释器自动进行的,当执行上下文被销毁时,其所占用的栈内存会自动被回收。

栈中的垃圾清理堆中的垃圾清理
存储内容基本类型数据、函数调用上下文复杂数据结构(对象和数组)
管理方式自动管理,由编译器和解释器负责依赖垃圾回收机制,自动回收不再被引用的对象
垃圾清理方式无需显式清理,执行上下文销毁时自动释放内存通过垃圾回收机制周期性检查并回收不再被引用的对象内存

标记清除

它分为两个阶段:标记阶段和清除阶段。

  1. 标记阶段: 在标记阶段,垃圾回收器会对内存中的所有对象进行遍历,从根对象开始(通常是全局对象)递归地遍历对象的引用关系。对于每个被访问到的对象,垃圾回收器会给它打上标记,表示该对象是可达的,即不是垃圾。这个过程确保了所有可达对象都会被标记。

  2. 清除阶段: 在清除阶段,垃圾回收器会遍历整个内存,对于没有标记的对象,即被判定为垃圾的对象,会被立即回收,释放内存空间。这样,只有被标记的对象会被保留在内存中,而垃圾对象会被清除。
    在这里插入图片描述
    上图中蓝色的元素代表被访问到的对象,即可达对象,灰色代表没有被访问到的对象,即不可达对象

如何理解"递归地遍历对象的引用关系"?

在 JavaScript 中,内存中的对象通过引用关系相互连接,形成了复杂的引用图。

当 JavaScript 代码执行时,会创建各种对象,包括全局对象、函数对象、数组对象、普通对象等等。这些对象在内存中占据一定的空间。

随着程序的执行,对象之间会建立引用关系。这种引用关系通常是通过将一个对象的引用赋值给另一个对象的属性、局部变量或函数的参数来实现的。

例如你在全局作用域中写了这行代码 var obj = {},这就代表着你给全局对象设置了一个 obj 属性;再例如一个函数将一个对象作为参数,实际上传递的是对象的引用…这些都会成为引用关系的一部分。通过这些引用关系,JavaScript 引擎会动态地构建一个复杂的引用图。这个引用图以根对象为起点,通过对象之间的引用关系不断扩展和延伸。

标记阶段完成之后,如果其中一个变量不再被引用了,此时该变量还是被标记状态的,那么清除阶段怎么识别它呢?

在本次清除阶段识别不了,但是在下一轮的标记阶段,该变量不会被打上标记,那它就可以被清除啦。

如果一个变量在标记阶段没有被引用,它没有被打上标记,但是在清除阶段之前,它又被引用了,那它会被视作垃圾回收吗?

无需担心,现代垃圾回收器通常会使用各种策略(如写屏障、增量标记、并发标记等)来跟踪引用变化,不会错误地回收仍然被引用的对象。

如何理解根对象?

根对象通常包括以下几类:

  1. 全局对象:在浏览器中全局对象是 window(Node.js 中是 global),它包含了全局作用域中定义的所有属性和方法。全局对象总是可达的,因为它是程序的入口点之一,这也意味着全局对象永远不会被垃圾回收机制视为垃圾对象来回收。

  2. 活跃的执行上下文(Execution Contexts) :可以理解为当前正在执行或即将执行的代码块所对应的执行上下文。"活跃的执行上下文"可以是全局执行上下文,也可以是某个函数执行上下文,具体取决于当前执行的代码块。全局对象其实就是全局执行上下文中的一个组成部分。

  3. 内置的持久性引用:有些 JavaScript 引擎可能会维护一些内置的、持久的引用,这些引用指向的对象也会被视为根对象。例如,一些引擎可能会将当前执行的栈帧或特定类型的内部数据结构保留在内存中,以便进行调试或性能分析。

引用计数

它的策略是每个对象维护一个计数器来记录其被引用的次数,当对象被新引用时计数加 1,当引用被移除时计数减 1,当计数减至 0 时对象被自动回收。

两者优缺点比较

标记清除:

  • 优点:

    • 简单有效

    • 可以处理循环引用

  • 缺点:

    • 标记清除算法会暂停程序的执行,也就是说垃圾回收过程中会停顿

    • 标记清除算法会在回收过程中产生大量的不连续的、碎片化的内存空间,从而使得内存的利用率降低。

引用计数:

  • 优点:

    • 简单高效

    • 实时回收:用计数可以在对象不再被引用时立即回收,不需要等待垃圾收集器的运行。

  • 缺点:

    • 循环引用:当两个或多个对象相互引用时,它们的引用计数都不为零,即它们无法被回收,这会导致内存泄漏

哪些操作会导致内存泄漏?

全局变量导致内存泄漏

如果意外地将变量声明为全局变量(例如,在函数外部或在函数内部但未使用 varletconst 声明的变量),那么这些变量在程序的整个生命周期内都将保持活动状态,可能导致内存泄漏。

function myFunction() {  a = "I am a global variable now!"; // 忘记使用 var, let 或 const
}  myFunction();  
// 此时 a 成为了全局变量,即使函数执行完毕,a 也不会被回收

闭包

function createLeakyClosure() {var localVar = "我是局部变量,但由于闭包,我可能导致内存泄漏";// 返回一个匿名函数,该函数引用了localVarreturn function() {return localVar;};
}// 外部引用闭包
var closure = createLeakyClosure();// 如果 closure 不再需要,但由于它是闭包,它仍然持有对 localVar 的引用,
// 这可能导致 localVar 占用的内存无法被回收,直到 closure 被明确置为 null 或 undefined。

DOM 引用未释放

如果一个 DOM 元素被从 DOM 树中移除,但仍有 JavaScript 变量或对象保持对该 DOM 元素的引用,那么这块 DOM 元素占用的内存(包括其属性、事件监听器等)将不会被垃圾回收机制回收,从而造成了内存泄漏。

例如有一个长时间存活的对象(如全局对象),它有一个属性的值是该 DOM 元素,即使你通过操作 DOM 树删除了该 DOM 元素,该 DOM 元素所占据的内存空间不会被视作垃圾回收,直到这个长时间存活的对象被销毁。

定时器/计时器

没有清除定时器,导致计时器持续运行,占用内存空间,导致内存泄漏。尤其是在 vue 中,最好是在 beforeDestory() 中清除定时器。

相关文章:

JavaScript 系列之:垃圾回收机制

前言 垃圾回收是一种自动内存管理机制,用于检测和清除不再使用的对象,以释放内存空间。当一个对象不再被引用时,垃圾回收器会将其标记为垃圾,然后在适当的时候清除这些垃圾对象,并将内存回收给系统以供其他对象使用。…...

18.6 大语言模型可解释性解密:打开AI黑箱的关键技术

大语言模型可解释性解密:打开AI黑箱的关键技术 关键词:模型可解释性, 注意力机制分析, 特征可视化, 探针技术, AI透明度 1. 可解释性核心价值与挑战 大模型可解释性研究致力于破解"输入-输出"间的认知黑箱,其技术价值可概括为: #mermaid-svg-oF7xAEMTxnQZ6mF7 …...

Jmeter接口自动化测试读取用例

一:环境准备 1.下载jxl.jar这个jar包 2.下载好之后,放到Jmeter的安装路径下的lib目录下 3.jxl.jar的作用:完成对Excel的读写以及修改操作 如何利用jmter操作excel的思路分析: 1,Excell一般有三个最重要的元素&…...

es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?底层的 lucene 介绍一下呗?倒排索引了解吗?

Elasticsearch 写入数据的工作原理 1. 写入流程概述 当客户端向 Elasticsearch 发送写入请求时,会经历以下步骤: 客户端选择一个节点 作为 coordinating node(协调节点),发送请求。协调节点对文档进行路由&#xff…...

npm : 无法加载文件 E:\ProgramFiles\Nodejs\npm.ps1,因为在此系统上禁止运行脚本。

这个错误是因为 Windows 系统的 PowerShell 执行策略 限制了脚本的运行。默认情况下,PowerShell 的执行策略是 Restricted,即禁止运行任何脚本。以下是解决该问题的步骤: 1. 检查当前执行策略 打开 PowerShell(管理员权限&#x…...

Spark map与mapPartitions算子源码级深度解析

Spark map与mapPartitions算子源码级深度解析 一、核心源码结构差异 1. map算子实现逻辑 def map[U: ClassTag](f: T => U): RDD[U] = withScope {val cleanF = sc.clean(f)new MapPartitionsRDD[U, T](this, (context, pid, iter) => iter.map(cleanF)) }实现特征: …...

Docker搭建基于Rust语言的云原生可观测平台OpenObserve

文章目录 前言1. 安装Docker2. 创建并启动OpenObserve容器3. 本地访问测试4. 公网访问本地部署的OpenObserve4.1 内网穿透工具安装4.2 创建公网地址 5. 配置固定公网地址 前言 嘿,朋友们,今天我们要聊聊一个能让你在云原生世界里大展身手的秘密武器——…...

论文阅读:A comprehensive survey on model compression and acceleration

对模型压缩和加速的全面调查 阅读论文:A comprehensive survey on model compression and acceleration 摘要 背景:近年来,机器学习(ML)和深度学习(DL)在计算机视觉、自然语言处理、股票预测…...

IO流(师从韩顺平)

文章目录 文件什么是文件文件流 常用的文件操作创建文件对象相关构造器和方法应用案例 获取文件的相关信息应用案例 目录的操作和文件删除应用案例 IO 流原理及流的分类Java IO 流原理IO流的分类 IO 流体系图-常用的类IO 流体系图(重要!!&…...

Ubuntu+deepseek+Dify本地部署

1.deepseek本地部署 在Ollama官网下载 需要魔法下载 curl -fsSL https://ollama.com/install.sh | sh 在官网找到需要下载的deepseek模型版本 复制命令到终端 ollama run deepseek-r1:7b 停止ollama服务 sudo systemctl stop ollama # sudo systemctl stop ollama.servi…...

Java类中的this操作

在Java中,`this` 是一个关键字,用于引用当前对象的实例。它通常在类的方法或构造器中使用,主要有以下几种用途: 1. 区分成员变量和局部变量 当成员变量与局部变量同名时,使用 `this` 可以明确引用当前对象的成员变量。 public class Person { private String name; …...

云创智城YunCharge 新能源二轮、四轮充电解决方案(云快充、万马爱充、中电联、OCPP1.6J等多个私有单车、汽车充电协议)之新能源充电行业系统说明书

云创智城YunCharge 新能源充电行业系统说明书 ⚡官方文档 ⚡官网地址 1. 引言 随着全球环境保护和能源危机的加剧,新能源汽车行业得到了快速发展,充电基础设施建设也随之蓬勃发展。新能源充电行业系统旨在提供高效、便捷的充电服务,满足电…...

利用STM32TIM自制延迟函数实验

一、实验目的 掌握STM32定时器(TIM)的工作原理及配置方法学习使用HAL库实现微秒级/毫秒级延时函数理解定时器中断服务程序的编写规范 二、实验原理 ​定时器基础: STM32定时器包含向上计数器、向下计数器、中心对齐模式通过预分频器&#x…...

【STM32F103ZET6——库函数】6.PWM

目录 配置PWM输出引脚 使能引脚时钟 配置PWM 使能PWM 配置定时器 使能定时器时钟 使能定时器 例程 例程说明 main.h main.c PWM.h PWM.c led.h led.c DSQ.h DSQ.c 配置PWM输出引脚 PWM的输出引脚必须配置为复用功能。 注意:需要使用哪个引脚&…...

RabbitMQ系列(四)基本概念之Exchange

在 RabbitMQ 中,Exchange(交换机) 是消息路由的核心组件,负责根据规则将生产者发送的消息分发到对应的队列(Queue)中。以下是其核心功能与分类的详细说明: 一、Exchange 的核心作用 消息路由枢…...

解决“ReadTimeoutError:HTTPSConnectionPool”pip安装超时问题

安装pytorch时,出现如下报错信息: pip._vendor.urllib3.exceptions.ReadTimeoutError:HTTPSConnectionPool(host‘files.pythonhosted.org’, port443): Read timed out. 这是由于网络等各种原因导致安装超时引发的,可以按如下方式手动设置延…...

SAP中的屏幕PBO和PAI事件

PBO中的O,OUT,输出,和屏幕显示有关,比如屏幕元素的隐藏与显示,屏幕元素的输入状态的控制。 例如,控制屏幕所有元素为只读模式 LOOP AT SCREEN.SCREEN-INPUT 0.MODIFY SCREEN. ENDLOOP.PAI中的I,IN,输入,和屏幕输入有…...

Linux 环境“从零”部署 MongoDB 6.0:mongosh 安装与数据操作全攻略

前提 完成linux平台部署MongoDB【部署教程】且完成mongosh的安装 由于本人使用的是6.0版本的MongoDB,新版本 MongoDB(尤其是 6.0 及以上版本)已经不再默认捆绑传统的 mongo shell,而改用新的 MongoDB Shell(mongosh&am…...

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_init_cycle 函数 - 详解(4)

详解(4) 初始化配置转储结构(config_dump) if (ngx_array_init(&cycle->config_dump, pool, 1, sizeof(ngx_conf_dump_t))! NGX_OK){ngx_destroy_pool(pool);return NULL;}ngx_rbtree_init(&cycle->config_dump_rb…...

Eclipse 编译项目指南

Eclipse 编译项目指南 引言 Eclipse 是一款功能强大的集成开发环境(IDE),广泛用于Java、C/C、Python等多种编程语言的开发。在Eclipse中编译项目是进行软件开发的基础步骤。本文将详细介绍如何在Eclipse中编译项目,包括项目设置…...

实现 Leaflet 多类型点位标记与聚合功能的实战经验分享

在现代的地理信息系统(GIS)应用中,地图功能是不可或缺的一部分。无论是展示商业网点、旅游景点还是公共服务设施,地图都能以直观的方式呈现数据。然而,当数据量较大时,地图上可能会出现大量的标记点&#x…...

C高级——shell(3)

一、shell的选择结构 1.回顾:C语言的选择结构:if , if else if ,if else,switch (switch的执行速度最快) 2.shell的选择结构: 单分支if 双分支 if else 多分支if elif case..in 1.1 shell的选择结构的格式 --------C语言的格式--…...

Qt 中,**信号与槽(Signals Slots)机制

在 Qt 中,信号与槽(Signals & Slots)机制 是实现对象间通信的核心模式,通常也被视为一种高效的“通知者模式”。它允许对象在特定事件发生时通知其他对象,且完全解耦。 核心概念 信号(Signal&#xff0…...

字符串复制函数strcpy()的使用仿写strcpy()——C语言

strcpy 函数是C语言标准库中的字符串处理函数,用于将一个字符串复制到另一个字符串中。 char *strcpy(char *dest, const char *src); dest 是目标字符串的指针,用于存储复制后的字符串。 src 是源字符串的指针,指向要被复制的字符串。 st…...

想知道两轮差速方形底盘 URDF 咋做,ROS2 配 Rviz 咋显示吗?看这里!

视频讲解 想知道两轮差速方形底盘 URDF 咋做&#xff0c;ROS2 配 Rviz 咋显示吗&#xff1f;看这里&#xff01; 模型概述 一个方形底盘和两个差速驱动轮 URDF 代码 <?xml version"1.0" encoding"utf-8"?> <robot name"diff"> …...

什么是Ollama?什么是GGUF?二者之间有什么关系?

一、Ollama:本地化大模型运行框架 Ollama 是一款开源工具,专注于在本地环境中快速部署和运行大型语言模型(LLM)。它通过极简的命令行操作简化了模型管理流程,支持离线运行、多模型并行、私有化部署等场景。 核心特性 本地化运行:无需依赖云端API,用户可在个人电脑或服务…...

AI触手可及 | 基于函数计算玩转AI大模型

AI触手可及 | 基于函数计算玩转AI大模型 基于函数计算部署AI大模型的优势方案架构图像生成 - Stable Diffusion WebUI部署操作 释放资源部署总结体验反馈 在生成式AI技术加速迭代的浪潮下&#xff0c;百亿级参数的行业大模型正推动产业智能化范式转移。面对数字化转型竞赛&…...

VScode在Windows11中配置MSVC

因为MSVC编译器在vs当中&#xff0c;所以我们首先要安装vs的一部分组件。如果只是需要MSVC的话&#xff0c;工作负荷一个都不需要勾选&#xff0c;在单个组件里面搜索MSVC和windows11 SDK&#xff0c;其中一个是编译器&#xff0c;一个是头文件然后右下角安装即可。搜索Develop…...

基于SSM实现的bbs论坛系统功能实现四

一、前言介绍&#xff1a; 1.1 项目摘要 随着互联网技术的不断进步和普及&#xff0c;网络社区已成为人们获取信息、交流意见、分享经验的重要场所。BBS&#xff08;Bulletin Board System&#xff0c;电子公告板系统&#xff09;论坛系统作为网络社区的一种重要形式&#xf…...

Linux mount命令

Linux mount命令是经常会使用到的命令&#xff0c;它用于挂载Linux系统外的文件。 一、挂载功能介绍 挂载方法&#xff1a;mount DECE MOUNT_POINT 命令使用格式&#xff1a;mount [-fnrsvw] [-t vfstype] [-o options] device dir device&#xff1a;指明要挂载的设备&…...

【RAG生成】生成模块核心技术解密:从理论到实践的全链路优化

RAG知识系列文章 【RAG实践】手把手Python实现搭建本地知识问答系统【RAG进阶】从基础到模块化&#xff1a;深度解析RAG技术演进如何重塑AI知识边界【RAG检索】RAG技术揭秘&#xff1a;检索≠召回&#xff1f;【RAG增强】解密RAG系统排序优化&#xff1a;从基础原理到生产实践…...

JavaWeb-ServletContext应用域接口

文章目录 ServletContext接口简介获取一个ServletContext对象ServletContext接口中的相关方法获取应用域配置参数关于应用域参数的配置要求getContextPath获取项目路径getRealPath获取真实路径log系列方法添加相关日志增删查应用域属性 ServletContext接口简介 ServletContext…...

Vue3状态管理新选择:Pinia使用完全指南

一、为什么需要状态管理&#xff1f; 在Vue应用开发中&#xff0c;当我们的组件树变得复杂时&#xff0c;组件间的数据传递会成为棘手的问题。传统方案&#xff08;如props/$emit&#xff09;在多层嵌套组件中会变得笨拙&#xff0c;这时状态管理工具应运而生。Vue3带来了全新…...

权重生成图像

简介 前面提到的许多生成模型都有保存了生成器的权重,本章主要介绍如何使用训练好的权重文件通过生成器生成图像。 但是如何使用权重生成图像呢? 一、参数配置 ima_size 为图像尺寸,这个需要跟你模型训练的时候resize的时候一样。 latent_dim为噪声维度,一般的设置都是…...

【ESP32S3接入讯飞在线语音识别】

视频地址: 【ESP32S3接入讯飞在线语音识别】 1. 前言 使用Seeed XIAO ESP32S3 Sense开发板接入讯飞实现在线语音识别。自带麦克风模块用做语音输入,通过串口发送字符“1”来控制数据的采集和上传。 语音识别对比 平台api教程评分百度...

RISCV指令集解析

参考视频&#xff1a;《RISC-V入门&进阶教程》1-4-RV32I基本指令集&#xff08;1&#xff09;_哔哩哔哩_bilibili privilege是特权指令集&#xff0c;有点系统调用的感觉&#xff0c;要走内核态。unprivilege指令集有点像普通的函数调用。...

详解 c++ 中的 namespage

C 中的命名空间很特别&#xff0c;其他编程语言基本都没有。命名空间介于函数与类之间&#xff0c;兼顾了二者的一些优点。这篇博客根据 chatgpt 的回答整理。 文章目录 **1. 什么是 namespace&#xff08;命名空间&#xff09;&#xff1f;****2. 语法****3. 使用 namespace 访…...

Qt监控系统远程回放/录像文件远程下载/录像文件打上水印/批量多线程极速下载

一、前言说明 在做这个功能的时候&#xff0c;着实费了点心思&#xff0c;好在之前做ffmpeg加密解密的时候&#xff0c;已经打通了极速加密保存文件&#xff0c;主要就是之前的类中新增了进度提示信号&#xff0c;比如当前已经处理到哪个position位置&#xff0c;发个信号出来…...

Idea 和 Pycharm 快捷键

一、快捷键 二、Pycharm 中怎么切换分支 参考如下 如果在界面右下角 没有看到当前所在的分支&#xff0c;如 “Git:master” 3. 有了 4....

在 Mac mini M2 上本地部署 DeepSeek-R1:14B:使用 Ollama 和 Chatbox 的完整指南

随着人工智能技术的飞速发展&#xff0c;本地部署大型语言模型&#xff08;LLM&#xff09;已成为许多技术爱好者的热门选择。本地部署不仅能够保护隐私&#xff0c;还能提供更灵活的使用体验。本文将详细介绍如何在 Mac mini M2&#xff08;24GB 内存&#xff09;上部署 DeepS…...

2024年国赛高教杯数学建模A题板凳龙闹元宵解题全过程文档及程序

2024年国赛高教杯数学建模 A题 板凳龙闹元宵 原题再现 “板凳龙”&#xff0c;又称“盘龙”&#xff0c;是浙闽地区的传统地方民俗文化活动。人们将少则几十条&#xff0c;多则上百条的板凳首尾相连&#xff0c;形成蜿蜒曲折的板凳龙。盘龙时&#xff0c;龙头在前领头&#x…...

【R包】pathlinkR转录组数据分析和可视化利器

介绍 通常情况下&#xff0c;基因表达研究如微阵列和RNA-Seq会产生数百到数千个差异表达基因&#xff08;deg&#xff09;。理解如此庞大的数据集的生物学意义变得非常困难&#xff0c;尤其是在分析多个条件和比较的情况下。该软件包利用途径富集和蛋白-蛋白相互作用网络&…...

基于大模型的脑出血全周期预测与诊疗方案研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 1.3 研究方法与数据来源 二、大模型预测脑出血的原理与技术基础 2.1 大模型概述 2.2 脑出血相关数据收集与预处理 2.3 机器学习算法在预测模型中的应用 2.4 模型训练与优化 三、术前风险预测与准备 3.1 术前…...

高数1.1 函数

1. 定义 1.1 函数 1.2 反函数 1.2.1 求反函数例题 1.3 基本初等函数和初等函数 1.4 基本函数性质...

Java常见设计模式(中):结构型模式

&#x1f308; 引言&#xff1a;设计模式就像乐高积木 适配器&#xff1a;让不同形状的积木完美拼接装饰器&#xff1a;给积木添加炫酷灯光效果代理&#xff1a;遥控积木完成复杂动作组合&#xff1a;将小积木搭建成宏伟城堡 结构型模式 主要用于描述对象之间的关系&#xff…...

【Python修仙编程】(二) Python3灵源初探(3)

第一部分&#xff1a;乾坤袋的秘密与修炼之路 在修仙界&#xff0c;有一个古老的传承&#xff0c;名为《Python无极心法》&#xff0c;它蕴含着强大的力量&#xff0c;能够助修仙者突破重重境界&#xff0c;领悟宇宙天地的奥秘。而要修炼此心法&#xff0c;必须先从基础的“乾…...

Mac本地部署Deep Seek R1

Mac本地部署Deep Seek R1 1.安装本地部署大型语言模型的工具 ollama 官网&#xff1a;https://ollama.com/ 2.下载Deepseek R1模型 网址&#xff1a;https://ollama.com/library/deepseek-r1 根据电脑配置&#xff0c;选择模型。 我的电脑&#xff1a;Mac M3 24G内存。 这…...

可以免费无限次下载PPT的网站

前言 最近发现了一个超实用的网站&#xff0c;想分享给大家。 在学习和工作的过程中&#xff0c;想必做PPT是一件让大家都很头疼的一件事。 想下载一些PPT模板减少做PPT的工作量&#xff0c;但网上大多精美的PPT都是需要付费才能下载使用。 即使免费也有次数限制&#xff0…...

c++作业

练习题&#xff1a; #include <iostream> #include <cstring> using namespace std;class mystring {char* p;int len; public:mystring();mystring(const char* p);~mystring();void copy(const mystring& str);void append(const mystring& str);void sh…...

补题蓝桥杯14届JavaB组第4题

算法&#xff1a;动态规划 需要两个一维数组来进行dp 一个用来记录到当前位置的最短时间&#xff0c;另一个用来记录到达当前位置传送门的最短时间 到达传送门的时间需要进行判断&#xff0c;如果上一次传送到达传送门&#xff0c;需要判断上一次传送到这的位置在当前传送门…...