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

GC垃圾回收

Gc是语言提供的自动的内存管理机制,自动释放不需要的内存对象,让出存储器资源。
Go语言变革:
V1.5的三色并发标记法
V1.5的三色并发标记为什么需要STW
V1.5的三色标记为什么需要屏障机制(“强-弱”,三色不变式、插入屏障、删除屏障)
V1.8混合写屏障机制
V1.8混合写屏障机制的全场景分析

GoV1.3之前的标记-清除算法

  • 标记
  • 删除

标记清除算法的具体步骤

  1. 暂停程序业务逻辑,分类出可达和不可达对象,然后做上标记
    在这里插入图片描述

  2. 开始标记,程序找出它所有可达的对象,并做上标记。
    在这里插入图片描述

  3. 标记完之后,清除未被标记的对象

在mark和sweep算法在执行的时候,需要程序暂停! STW过程中,CPU不执行用户代码全部用于垃圾回收,影响很大急需优化。因此在执行第三步时,程序会暂停所有工作,一直等待所有回收执行完成。
在这里插入图片描述

  1. 停止暂停,继续执行程序,然后循环重复这个过程,直到process程序生命周期结束。

标记-清除的缺点

  1. STW让程序暂停,程序出现卡顿
  2. 标记需要扫描整个heap(堆);
  3. 清除数据会产生heap(堆)碎片;
    V1.3版本之前在这里插入图片描述
    V1.3版本优化![[file-20250409203132341.png]]

上图主要是将STW步骤提前了一步,因为在sweep清除的时候,可以不需要STW停止,这些对象不会出现回收写冲突问题。
但是这个最大的问题是–STW会暂停整个程序。
因此出现三色并发标记法优化。

V1.5三色并发标记法

Golang中GC可以和其他用户goroutine并发运行但是需要一定时间STW,三色标记法就是通过三个阶段的标记来确定清除的对象都有哪些

三色并发标记法步骤

  1. 每次新创建的对象,默认的颜色都是标记为“白色”![[file-20250409203741372.png]]

上图所示,我们的程序可抵达的内存对象关系如左图所示,右边的标记表,是用来记录目前每个对象的标记颜色分类。程序其实是一些对象的根节点集合。将程序展开,会得到类似如下的表现形式。
![[file-20250409204030105.png]]

  1. 每次GC回收开始,会从根节点开始遍历所有对象,把遍历到的对象从白色集合放入灰色集合![[file-20250409204138423.png]]

这里的遍历是一次遍历,非递归形式,是从程序抽次可抵达的对象遍历一层,当前可抵达的对象是对象1和对象4,本次遍历结束,1和4就会被标记为灰色,灰色标记表就会多出两个对象。
3. 遍历灰色集合,将灰色对象引用的对象从白色集合放入灰色集合,之后将此灰色对象放入黑色集合![[file-20250409204410415.png]]

这一次遍历只是扫描灰色对象,将灰色对象的第一层可遍历可抵达的对象有白色变为灰色如对象2 和对象7。而之前的灰色对象1和对象4会被标记为黑色,由灰色标记表移动到黑色标记表中。
4. 重复第三步,知道灰色中无任何对象![[file-20250409204648862.png]]![[file-20250409204654859.png]]

当我们全部的可达对象都遍历完后,灰色标记表将不再存在灰色对象,目前全部内存的数据只有两个颜色,黑色和白色。黑色对象是我们程序逻辑可达对象,是合法有用的数据不可删除,白色的对象全部不可达对象,目前程序不依赖即垃圾数据
5. 回收所有的白色标记表的对象,也就是回收垃圾![[file-20250409205129338.png]]

以上就是三色并发标记法,但是这里面可能会有很多并发流程均会被扫描,执行并发流程的内存可能相互依赖,为了在GC过程中保证数据的安全,我们在开始三色标记之前就会加上STW,在扫描确定黑白对象之后再放开STW。但是这样明显GC扫描的性能实在是太低了。

没有STW的三色标记法

我们把初始状态设置为已经经历了第一轮扫描,目前黑色的有对象1和对象4,灰色的有对象2和对象7,其它均为白色;其中对象2通过指针p指向对象3![[file-20250409211626153.png]]
如果三色标记过程不启动STW,那么在GC扫描过程中,任意的对象均可能发生读写。如图,在扫描对象2之前,已经标记为黑色的对象4,此时创建指针q,并且指向白色的对象3![[file-20250410143840987.png]]
同时灰色对象2将指针p移除,那么白色的对象实则就是被挂在了已经扫描完成的黑色的对象4下![[file-20250410143935581.png]]
然后我们将所有灰色对象标记为黑色,那么对象2 和对象7就被标记成了黑色![[file-20250410144010276.png]]
然后将白色对象当做垃圾进行回收![[file-20250410144059427.png]]
这就出现了对象4合法引用的对象3被GC误杀回收掉了

屏障机制

三色标记不希望发生的情况

没有STW会出现的情况
条件1.一个白色对象被黑色对象引用
条件2.灰色对象与它之间的可达关系的白色对象遭到破坏(灰色同时丢了该白色)
满足以上两种条件就会出现对象丢失现象。

(1). “强-弱”三色不变式

  • 强三色不变式–不允许黑色对象引用白色对象![[file-20250410144953671.png]]
  • 弱三色不变式
    黑色对象只能引用存在被其他灰色对象引用或者可达它的链路上游有灰色对象的白色对象![[file-20250410145123876.png]]
    GC遵循上述两种方式,演变出两种屏障方式

插入屏障

在A引用对象B时,B对象内标记为灰色。满足强三色不变式
写屏障操作在栈空间对象操作中不使用,因为栈空间调用更加频繁要求速度快,如果引入写屏障机制会增加额外的开销。
因此插入屏障仅仅用于堆空间对象的操作中。
![[file-20250410153155561.png]]
![[file-20250410153207332.png]]
![[file-20250410153215732.png]]
![[file-20250410153220951.png]]
![[file-20250410153230197.png]]
![[file-20250410153235569.png]]
如果栈不添加插入屏障,三色标记后可能存在白色对象被引用的情况(GC不清理栈空间),(这个栈上的白色对象可能会逃逸到堆上,导致被清除) 所以要对栈重新进行三色标记扫描,此时需要启用STW直到栈空间的三色标记结束。
![[file-20250410153416640.png]]
![[file-20250410153424496.png]]
![[file-20250410153429929.png]]
清除所有白色节点
![[file-20250410153450096.png]]

删除屏障

具体操作:被删除的对象(即不再被其他对象引用),如果自身为灰色或者白色,那么被标记为灰色。为了确保其可达性在后续标记阶段被重新检查,避免因并发操作导致的错误回收。
满足:弱三色不变式(保证灰色对象到白色对象的路径不会断)
![[file-20250410161302131.png]]
![[file-20250410161325683.png]]
![[file-20250410161331815.png]]
![[file-20250410161336407.png]]
![[file-20250410161342178.png]]
![[file-20250410161346858.png]]
![[file-20250410161351547.png]]

这种方式回收精度低,一个对象即使被删除了最后一个指向它的指针也依旧可以活过这一轮,在下一轮GC中被清除。

插入屏障和删除屏障的短板:

  • 插入写屏障:结束时需要STW来重新扫描栈,标记栈上引用的白色对象。
  • 删除写屏障:回收精度低,GC开始时STW扫描堆栈来记录初始快照,这个过程会保护开始时刻所有存活对象。

V1.8混合写屏障机制

混合写屏障规则

具体操作

  1. GC开始直接将栈上的对象标记为黑色(只扫描这一次
  2. GC期间,任何在栈上创建的新对象,均为黑色(防止内存逃逸,栈上的白色对象逃逸到堆上被GC回收)
  3. 被删除的对象标记为灰色
  4. 被添加的对象标记为灰色
    满足:变形的弱三色不变式
    屏障技术不在栈上应用,保证栈的运行效率

混合写屏障的具体场景分析

注意混合写屏障是Gc的一种屏障机制,所以只是当程序执行GC的时候,才会触发这种机制。

GC开始:扫描栈区,将可达对象全部标记为黑色

在这里插入图片描述在这里插入图片描述

场景一:对象被一个堆对象删除引用,成为栈对象的下游

![[file-20250410163935971.png]]

![[file-20250410163941116.png]]

场景二:对象被一个栈对象删除引用,成为另一个栈对象的下游

![[file-20250410164157301.png]]
![[file-20250410164212843.png]]
![[file-20250410164235142.png]]

场景三:对象被一个堆对象删除引用,成为另一个堆对象的下游

![[file-20250410164317614.png]]
![[file-20250410164339775.png]]
![[file-20250410164350707.png]]

场景四:对象从一个栈对象删除引用,成为另一个堆对象的下游

![[file-20250410164431401.png]]
![[file-20250410164443088.png]]
![[file-20250410164457360.png]]
Golang中的混合写屏障满足弱三色不变式,结合了删除写屏障和插入写屏障的优点,只需要在开始时并发扫描各个goroutine的栈,使其变黑并一直保持,这个过程不需要STW,而标记结束后,因为栈在扫描后始终是黑色的,也无需再进行re-scan操作了,减少了STW的时间。

辅助GC(Mutator Assist)

为了防止内存分配过快,在GC执行过程中,如果goroutine需要分配内存,那么这个goroutine会参与一部分GC的工作,即帮助GC做一部分工作,这个机制叫作Mutator Assist。

垃圾回收触发时机

内存分配量达到阈值触发GC

默认情况下,最长2分钟触发一次GC,这个间隔在src/runtime/proc.go:forcegcperiod变量中被声明:

// forcegcperiod is the maximum time in nanoseconds between garbage
// collections. If we go this long without a garbage collection, one
// is forced to run.
//
// This is a variable for testing purposes. It normally doesn't change.
var forcegcperiod int64 = 2 * 60 * 1e9

手动触发

程序代码中也可以使用runtime.GC()来手动触发GC。这主要用于GC性能测试和统计。

GC性能优化

GC性能与对象数量负相关,对象越多GC性能越差,对程序影响越大。

所以GC性能优化的思路之一就是减少对象分配个数,比如对象复用或使用大对象组合多个小对象等等。

另外,由于内存逃逸现象,有些隐式的内存分配也会产生,也有可能成为GC的负担。

相关文章:

GC垃圾回收

Gc是语言提供的自动的内存管理机制,自动释放不需要的内存对象,让出存储器资源。 Go语言变革: V1.5的三色并发标记法 V1.5的三色并发标记为什么需要STW V1.5的三色标记为什么需要屏障机制(“强-弱”,三色不变式、插入屏障、删除屏障…...

“多端多接口多向传导”空战数据链体系——从异构融合架构到抗毁弹性网络的系统性设计

“多端多接口多向传导”空战数据链体系——从异构融合架构到抗毁弹性网络的系统性设计 文章目录 “多端多接口多向传导”空战数据链体系——从异构融合架构到抗毁弹性网络的系统性设计第一章 引言:空战数据链体系的范式革新1.1 空战数据链的演进逻辑1.2 新架构的核心理论价值1…...

Unity3D仿星露谷物语开发42之粒子系统

1、目标 使用例子系统,实现割草后草掉落的特效。 通过PoolManager获取特效预制体,通过VFXManager来触发特效。 2、配置例子特效 在Hierarchy -> PersistentScene下创建新物体命名为Reaping。 给该物体添加Particle System组件。 配置例子系统参数…...

python打卡训练营打卡记录day22

复习日 仔细回顾一下之前21天的内容,没跟上进度的同学补一下进度。 作业: 自行学习参考如何使用kaggle平台,写下使用注意点,并对下述比赛提交代码 kaggle泰坦尼克号人员生还预测 导入数据 # 导入所需库 import pandas as pd impor…...

网络编程(一)网络编程入门

本节课学习TCP客户端和服务器端编程架构,其分为分为C/S(客户端/服务器模式)和B/S(浏览器/服务器架构模式)两种模式。接下来我们分别了解这两种模式 C/S模式 C/S模式:服务器首先先启动,并根据客…...

华为IP(6)

VLAN聚合 VLAN聚合产生的技术背景 在一般是三层交换机中,通常采用一个VLAN接口的方式实现广播域之间的互通,这在某些情况下导致了IP地址的浪费 因为一个VLAN对应的子网中,子网号、子网广播地址、子网网关地址不能用作VLAN内的主机IP地址&a…...

初探机器学习与深度学习

本文以水果摊销量预测为例,揭示机器学习通过数据训练模型的核心逻辑,对比传统编程规则驱动模式。解析分类(疾病诊断)与回归(房价预测)两大任务的技术本质,类比前端开发中的类型定义与图表拟合。…...

3. 仓颉 CEF 库封装

文章目录 1. capi 使用说明2. Cangjie CEF2. 1实现目标 3. 实现示例 1. capi 使用说明 根据上一节 https://blog.csdn.net/qq_51355375/article/details/147880718?spm1011.2415.3001.5331 所述, cefcapi 是libcef 共享库导出一个 C API, 而以源代码形式分发的 li…...

Linux-TCP套接字编程简易实践:实现EchoServer与远程命令执行及自定义协议(反)序列化

一.TCP Socket常用API 1.1socket() NAMEsocket - create an endpoint for communicationSYNOPSIS#include <sys/types.h> /* See NOTES */#include <sys/socket.h>int socket(int domain, int type, int protocol); socket()打开一个网络通讯端口,如果…...

缓存(3):本地缓存作用 及 数据一致性 实现策略

概述 CAP 什么是CAP CAP理论&#xff0c;指的是在一个分布式系统中&#xff0c; Consistency&#xff08;一致性&#xff09;、 Availability&#xff08;可用性&#xff09;、Partition tolerance&#xff08;分区容错性&#xff09;&#xff0c;三者不可得兼。 三者关系如…...

【leetcode】《BFS扫荡术:如何用广度优搜索征服岛屿问题》

前言 &#x1f31f;&#x1f31f;本期讲解关于力扣的几篇题解的详细介绍~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f386;那么废话不…...

vue中理解MVVM

理解 在 Vue 中&#xff0c;MVVM&#xff08;Model-View-ViewModel&#xff09; 是其核心设计思想之一&#xff0c;它帮助实现了数据驱动的视图更新和良好的代码结构分离。我们来具体解析 Vue 是如何实现 MVVM 模式的。 &#x1f310; MVVM 是什么&#xff1f; 角色含义Vue…...

[工具]B站缓存工具箱 (By 郭逍遥)

&#x1f4cc; 项目简介 B站缓存工具箱是一个多功能的B站缓存工具&#xff0c;包含视频下载、缓存重载、文件合并及系统设置四大核心功能。基于yutto开发&#xff0c;采用图形化界面操作&#xff0c;极大简化B站资源获取与管理流程。 工具可以直接将原本缓存的视频读取&#…...

Docker Compose 完全指南:从入门到生产实践

Docker Compose 完全指南&#xff1a;从入门到生产实践 1. Docker Compose 简介与核心价值 Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过一个 YAML 文件来配置应用的服务&#xff0c;只需简单命令就能创建和启动所有服务。 核心优势&#xff1a;…...

《Redis应用实例》学习笔记,第二章:缓存二进制数据

前言 最近在学习《Redis应用实例》&#xff0c;这本书并没有讲任何底层&#xff0c;而是聚焦实战用法&#xff0c;梳理了 32 种 Redis 的常见用法。我的笔记在 Github 上&#xff0c;用 Jupyter 记录&#xff0c;会有更好的阅读体验&#xff0c;作者的源码在这里&#xff1a;h…...

ARM GIC(七)亲和路由:GICD_IROUTER寄存器具体如何与MPIDR配合使用?

ARM GIC&#xff08;一&#xff09; GIC V3架构基础学习笔记 完善亲和路由章节。 一、MPIDR MPIDR&#xff08;Multiprocessor Affinity Register&#xff09;寄存器在ARM架构中用于标识处理器的亲和性信息&#xff0c;这对于中断处理非常重要&#xff0c;特别是在多处理器系…...

stm32之SPI

目录 1.SPI通信协议1.1 简介1.2 硬件电路1.3 移位示意图1.4 SPI时序基本单元1.5 SPI时序 2.W25Q642.1 简介2.2 硬件电路2.3 框图2.3.1 结构介绍2.3.2 混淆 2.4 Flash操作注意事项2.4.1 写操作2.4.2 读取操作 2.5 芯片手册补充2.5.1 状态寄存器2.5.2 指令集 3.软件操作W25Q644.S…...

数据库事务以及JDBC实现事务

一、数据库事务 数据库事务&#xff08;Database Transaction&#xff09;是数据库管理系统中的一个核心概念&#xff0c;它代表一组操作的集合&#xff0c;这些操作要么全部执行成功&#xff0c;要么全部不执行&#xff0c;即操作数据的最小执行单元&#xff0c;保证数据库的…...

C语言_函数调用栈的汇编分析

在 C 语言的底层实现中&#xff0c;函数调用栈是程序运行时内存管理的核心机制。它不仅负责函数间的控制转移&#xff0c;还管理局部变量、参数传递和返回值。本文将结合 C 语言代码和 x86-64 汇编指令&#xff0c;深入解析函数调用栈的工作原理。 一、函数调用栈的基本概念 …...

单片机调用printf概率性跑飞解决方法

最近移植软件到不同平台的单片机上时&#xff0c;遇到了软件概率性跑飞的问题&#xff0c;分析后原因均指向和printf相关的库函数&#xff08;包括sprintf, vsnsprinft&#xff09;&#xff0c;在任务里调用这些函数就有概率在ucos切换任务时跑飞&#xff08;中断&#xff09;。…...

无人机空中物流优化:用 Python 打造高效配送模型

友友们好! 我是Echo_Wish,我的的新专栏《Python进阶》以及《Python!实战!》正式启动啦!这是专为那些渴望提升Python技能的朋友们量身打造的专栏,无论你是已经有一定基础的开发者,还是希望深入挖掘Python潜力的爱好者,这里都将是你不可错过的宝藏。 在这个专栏中,你将会…...

【RP2350】香瓜树莓派RP2350之低功耗

本文最后修改时间&#xff1a;2025年05月10日 01:57 一、本节简介 本节以树莓派pico2开发板为例&#xff0c;举例如何写一个低功耗驱动。 二、实验平台 1、硬件平台 1&#xff09;树莓派pico2开发板 ①树莓派pico2开发板&#xff08;作为仿真器&#xff09; ②micro usb数…...

招行数字金融挑战赛数据赛道赛题一

赛题描述&#xff1a;根据提供的用户行为数据&#xff0c;选手需要分析用户行为特征与广告内容的匹配关系&#xff0c;准确预测用户对测试集广告的点击情况&#xff0c;通过AUC计算得分。 得分0.6120&#xff0c;排名60。 尝试了很多模型都没有能够提升效果&#xff0c;好奇大…...

仿真生成激光干涉包裹相位数据-用于深度学习训练!

该MATLAB/Octave代码实现了论文[1]中提出的相位提取算法,用于从灰度条纹图案中提取包裹相位图(相位值在-π到+π之间)。代码首先生成模拟的条纹图案,包含背景光、调制光和相位分布,并加入高斯噪声。随后,通过N步相移算法估计背景光和调制光,并计算包裹相位。结果显示包括…...

命令行解释器中shell、bash和zsh的区别

命令行解释器&#xff08;Command Line Interpreter&#xff09;是一个程序&#xff0c;它的主要作用是接收用户输入的命令&#xff0c;并执行相应的操作。它充当了用户与操作系统内核之间的桥梁。 一、什么是 Shell&#xff1f; Shell 是一个通用术语&#xff0c;指的是 命令…...

SQL 数据库监控:SQL语句监控工具与实践案例

SQL 数据库监控&#xff1a;SQL语句监控工具与实践案例 SQL语句监控的主要方法 SQL监控主要通过以下几种方式实现&#xff1a; 数据库内置监控功能&#xff1a;大多数数据库系统提供内置的SQL监控工具数据库性能视图/系统表&#xff1a;通过查询特定的系统视图获取SQL执行信…...

招行数字金融挑战赛数据分析赛带赛题二

赛题描述&#xff1a;根据提供的脱敏资讯新闻数据&#xff0c;选手需要对提供的训练集进行特征工程&#xff0c;构建资讯分类模型&#xff0c;对与测试集进行准确的新闻分类。 最终得分&#xff1a;0.8120。十二点关榜没看到排名&#xff0c;估算100&#xff1f; 训练集很小&am…...

llama.cpp初识

Llama.cpp&#xff1a;赋能本地大语言模型推理的核心引擎及其应用场景 引言&#xff1a;Llama.cpp 是什么&#xff1f; 大型语言模型 (LLM) 的兴起正在深刻改变人机交互和信息处理的方式。然而&#xff0c;这些强大的模型通常需要巨大的计算资源&#xff0c;使得它们在云端之…...

【EBNF】EBNF:扩展巴克斯-诺尔范式文件格式与实用写法详解

EBNF&#xff1a;扩展巴克斯-诺尔范式文件格式与实用写法详解 一、什么是 EBNF&#xff1f; Extended Backus-Naur Form (EBNF)是一种形式化的语法&#xff0c;用于指定编程语言或其他形式化语言的结构。它是Backus-Naur形式&#xff08;BNF&#xff09;的扩展&#xff0c;最初…...

Go语言运算符详解

文章目录 1. 算术运算符2. 关系运算符3. 逻辑运算符4. 位运算符5. 赋值运算符6. 其他运算符运算符优先级注意事项 Go语言提供了与其他语言类似的运算符&#xff0c;包括算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符等。这些运算符即可满足基本的运算需求。 1. 算…...

MySQL用户管理

目录 一、用户用户信息创建用户删除用户从远端登录修改用户密码 二、数据库的权限给用户授权回收权限 与Linux操作系统类似&#xff0c;MySQL中也有超级用户和普通用户之分。&#xff0c;如果一个用户只需要访问MySQL中的某一个数据库&#xff0c;甚至数据库中的某一个表&#…...

视频编解码学习三之显示器续

一、现在主流的显示器是LCD显示器吗&#xff1f; 是的&#xff0c;现在主流的显示器仍然是 LCD&#xff08;液晶显示器&#xff0c;Liquid Crystal Display&#xff09;&#xff0c;但它已经细分为多种技术类型&#xff0c;并和其他显示技术&#xff08;如OLED&#xff09;形成…...

VSCode1.101.0便携版|中英文|编辑器|安装教程

软件介绍 Visual Studio Code是微软推出的一个强大的代码编辑器&#xff0c;功能强大&#xff0c;操作简单便捷&#xff0c;还有着良好的用户界面&#xff0c;设计得很人性化&#xff0c;旨在为所有开发者提供一款专注于代码本身的免费的编辑器。 软件安装 1、 下载安装包…...

Scala 中累加器的创建与使用格式详解

1. 内置累加器的创建与使用格式 1.1 创建内置累加器 // 通过 SparkContext 创建 val acc sc.longAccumulator("累加器名称") // Long 类型&#xff08;默认初始值 0&#xff09; val accDouble sc.doubleAccumulator("累加器名称") // Double 类型&a…...

【DNDC模型】双碳目标下DNDC模型建模方法及在土壤碳储量、温室气体排放、农田减排、土地变化、气候变化中的应用

由于全球变暖、大气中温室气体浓度逐年增加等问题的出现&#xff0c;“双碳”行动特别是碳中和已经在世界范围形成广泛影响。国家领导人在多次重要会议上讲到&#xff0c;要把“双碳”纳入经济社会发展和生态文明建设整体布局。同时&#xff0c;提到要把减污降碳协同增效作为促…...

深入剖析缓存与数据库一致性:Java技术视角下的解决方案与实践

一、缓存与数据库一致性问题根源 读写分离的架构矛盾 缓存作为数据库的“副本”&#xff0c;天然存在数据同步延迟。 高频读写场景下&#xff0c;缓存与数据库的更新顺序、失败重试等操作易引发不一致。 经典问题场景 场景1&#xff1a;先更新数据库&#xff0c;再删除缓存。…...

Anaconda环境中conda与pip命令的区别

文章目录 conda与pip的基本区别在Anaconda环境中的实际差异安装包环境管理依赖解决示例最佳实践建议 常见问题解答 conda与pip的基本区别 包来源与生态系统 conda&#xff1a;从Anaconda默认仓库或conda-forge等渠道获取包 不仅管理Python包&#xff0c;还能管理非Python依赖&…...

使用FastAPI和React以及MongoDB构建全栈Web应用05 FastAPI快速入门

一、FastAPI概述 1.1 什么是FastAPI FastAPI is a modern, high-performance Python web framework designed for building APIs. It’s rapidly gaining popularity due to its ease of use, speed, and powerful features. Built on top of Starlette, FastAPI leverages a…...

每日c/c++题 备战蓝桥杯(P1002 [NOIP 2002 普及组] 过河卒)

洛谷P1002 [NOIP 2002 普及组] 过河卒 题解 题目描述 过河卒是一道经典的动态规划题目。题目大意是&#xff1a;一个卒子从棋盘左上角(0,0)出发&#xff0c;要走到右下角(n,m)&#xff0c;棋盘上有一个马在(x,y)位置&#xff0c;卒子不能经过马所在位置及其周围8个位置。求卒…...

kubectl系列(十二):查询pod的resource 配置

在 Kubernetes 中&#xff0c;可以通过 kubectl 命令快速查询 Pod 的资源请求&#xff08;requests&#xff09;和限制&#xff08;limits&#xff09;配置。以下是多种方法实现这一目标&#xff1a; 1. 查看 Pod 的资源请求和限制&#xff08;基础版&#xff09; 使用 kubec…...

前端面试2

1. 面试准备 1. 建立自己的知识体系 思维导图ProcessOn框架Vue elementUI自查 https://zh.javascript.info/ 借鉴 https://juejin.cn/post/6844904103504527374http://conardli.top/blog/article/https://github.com/mqyqingfeng/Bloghttp://47.98.159.95/my_blog/#html 2.技能…...

使用 Java 反射动态加载和操作类

Java 的反射机制(Reflection)是 Java 语言的一大特色,它允许程序在运行时检查、加载和操作类、方法、字段等元信息。通过 java.lang.Class 和 java.lang.reflect 包,开发者可以动态加载类、创建实例、调用方法,甚至在运行时构造新类。反射是 Java 灵活性的核心,广泛应用于…...

基于Dockers的Bitwarden的私有本地部署

基于Dockers的Bitwarden的私有本地部署 文章目录 基于Dockers的Bitwarden的私有本地部署 本文首发地址 https://h89.cn/archives/355.html bitwarden 默认连接的是国外服务器 https://bitwarden.com/ &#xff0c;连接不是很稳定&#xff0c;也没有安全感&#xff0c;所以我选择…...

spark-Schema 定义字段强类型和弱类型

在数据处理和存储中&#xff0c;Schema&#xff08;模式&#xff09;定义了数据的结构和字段属性&#xff0c;其中字段的强类型和弱类型是重要的概念&#xff0c;直接影响数据的验证、存储和处理方式。以下是详细解释&#xff1a; 1. 强类型&#xff08;Strongly Typed&#x…...

【第35节 数据库设计】

本章目录: 一、节概述二、知识详解1. 数据库设计的基本步骤2. 用户需求分析3. 概念结构设计&#xff08;E-R建模&#xff09;4. 逻辑结构设计5. 物理结构设计6. 数据库实施7. 数据库运行维护8. 商业智能&#xff08;BI&#xff09;与数据仓库数据仓库的特点&#xff1a; 9. OLT…...

C++基本知识 —— 缺省参数·函数重载·引用

C基本知识 —— 缺省参数函数重载引用 1. 缺省参数2. 函数重载3. 引用3.1 引用的基础知识3.2 引用的作用3.3 const 引用3.4 指针与引用的关系 1. 缺省参数 什么是缺省参数&#xff1f;缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数的时候&#xff0c;如…...

大数据基础——Ubuntu 安装

文章目录 Ubuntu 安装一、配置电脑二、安装系统 Ubuntu 安装 一、配置电脑 1、进入VMware 2、选择配置类型 3、选择硬件兼容性版本 4、当前虚拟机的操作系统 选择“稍后安装操作系统”&#xff08;修改&#xff09; 5、选择虚拟机将来需要安装的系统 选中“Linux”和选择…...

英伟达微调qwen2.5-32B模型,开源推理模型:OpenCodeReasoning-Nemotron-32B

一、模型概述 OpenCodeReasoning-Nemotron-32B 是一个大型语言模型&#xff0c;基于 Qwen2.5-32B-Instruct 开发&#xff0c;专为代码生成推理任务进行了后续训练&#xff0c;支持 32,768 个标记的上下文长度&#xff0c;适用于商业和非商业用途。 二、性能表现 在 LiveCode…...

苍穹外卖-创建阿里云oss工具包

添加配置信息&#xff1a; sky:alioss:endpoint: ***access-key-id: ***access-key-secret: ***bucket-name: *** 把配置的内容转换成对象&#xff1a; Component ConfigurationProperties(prefix "sky.alioss") Data public class AliOssProperties {private St…...

代码随想录训练营第二十一天 |589.N叉数的前序遍历 590.N叉树的后序遍历

589.N叉数的前序遍历&#xff1a; 状态&#xff1a;已做出 思路&#xff1a; N叉树的前序遍历和二叉树很像&#xff0c;我这里使用栈来实现。首先把根结点入栈&#xff0c;然后删除栈顶节点后把栈顶节点的所有子树都插入到栈&#xff0c;这里需要注意的是插入的方式是从最后一…...