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

# 手写数字识别:使用PyTorch构建MNIST分类器

手写数字识别:使用PyTorch构建MNIST分类器

在这篇文章中,我将引导你通过使用PyTorch框架构建一个简单的神经网络模型,用于识别MNIST数据集中的手写数字。MNIST数据集是一个经典的机器学习数据集,包含了60,000张训练图像和10,000张测试图像,每张图像都是28x28像素的灰度手写数字。
在这里插入图片描述

在这里插入图片描述

环境准备

首先,确保你的环境中安装了PyTorch和torchvision。可以通过以下命令安装:

pip install torch torchvision

数据加载与预处理

我们首先加载MNIST数据集,并将图像转换为PyTorch张量格式,以便模型可以处理。

import torch
from torch import nn
from torch.utils.data import DataLoader
from torchvision import datasets
from torchvision.transforms import ToTensor'''下载训练数据集(包含训练图片+标签)'''
training_data = datasets.MNIST( #跳转到函数的内部源代码,pycharm 按下ctrl+鼠标点击 training_data:Datasetroot="data",#表示下载的手写数字 到哪个路径。60000train=True, #读取下载后的数据 中的 训练集download=True,#如果你之前已经下载过了,就不用再下载transform=ToTensor(), #张量,图片是不能直接传入神经网络模型
)   #对于pytorch库能够识别的数据一般是tensor张量。'''下载测试数据集(包含训练图片+标签)'''
test_data = datasets.MNIST(root="data",train=False,download=True,transform=ToTensor()
)
print(len(training_data))

数据可视化

为了更好地理解数据,我们可以展示一些手写数字图像。

''展示手写字图片,把训练数据集中的前59000张图片展示一下'''from matplotlib import pyplot as plt
figure = plt.figure()
for i in range(9):img, label = training_data[i+59000] #提取第59000张图片figure.add_subplot(3, 3, i+1) #图像窗口中创建多个小窗口,小窗口用于显示图片plt.title(label)plt.axis("off") # plt.show(I)#是示矢量,plt.imshow(img.squeeze(), cmap="gray")a = img.squeeze()
plt.show()

创建DataLoader

为了高效地加载数据,我们使用DataLoader来批量加载数据。

# '"创建数据DataLoader(数据加载器)开'
#  'batch_size:将数据集分成多份,每一份为batch_size个数据'
#  '优点:可以减少内存的使用,提高训练速度。train_dataloader = DataLoader(training_data, batch_size=64) #64张图片为一个包,train_dataloader:<torch
test_dataloader = DataLoader(test_data, batch_size=64)

模型定义

接下来,我们定义一个简单的神经网络模型,包含两个隐藏层和一个输出层。

'''定义神经网络类的继承这种方式'''
class NeuralNetwork(nn.Module):  #通过调用类的形式来使用神经网络,神经网络的模型,nn.moduledef __init__(self): #python基础关于类,self类自已本身super().__init__() #继承的父类初始化self.flatten = nn.Flatten() #展开,创建一个展开对象flattenself.hidden1 = nn.Linear(28*28, 128 ) #第1个参数:有多少个神经元传入进来,第2个参数:有多少个数据传出self.hidden2 = nn.Linear(128, 256)self.out = nn.Linear(256, 10)def forward(self, x):x = self.flatten(x) #图像进行展开x = self.hidden1(x)x = torch.relu(x) #激活函数,torch使用的relu函数 relu,tanhx = self.hidden2(x)x = torch.relu(x)x = self.out(x)return xmodel = NeuralNetwork().to(device) #把刚刚创建的模型传入到Gpu
print(model)

训练与测试

我们定义训练和测试函数,使用交叉熵损失函数和随机梯度下降优化器。

def train(dataloader, model, loss_fn, optimizer):model.train() #告诉模型,我要开始训练,模型中w进行随机化操作,已经更新w。在训练过程中,w会被修改的
# #pytorch提供2种方式来切换训练和测试的模式,分别是:model.train()和 model.eval()。# 一般用法是:在训练开始之前写上model.trian(),在测试时写上 model.eval()batch_size_num = 1for X, y in dataloader: #其中batch为每一个数据的编号X, y = X.to(device), y.to(device) #把训练数据集和标签传入cpu或GPUpred = model.forward(X) #.forward可以被省略,父类中已经对次功能进行了设置。自动初始化wloss= loss_fn(pred, y) #通过交叉熵损失函数计算损失值loss# Backpropagation 进来一个batch的数据,计算一次梯度,更新一次网络optimizer.zero_grad() #梯度值清零loss.backward() #反向传播计算得到每个参数的梯度值woptimizer.step() #根据梯度更新网络w参数loss_value = loss.item() #从tensor数据中提取数据出来,tensor获取损失值if batch_size_num % 100 ==0:print(f"loss: {loss_value:>7f} [number:{batch_size_num}]")batch_size_num += 1def test(dataloader, model, loss_fn):size = len(dataloader.dataset) #10000num_batches = len(dataloader) #打包的数量model.eval() #测试,w就不能再更新。test_loss, correct = 0, 0with torch.no_grad(): #一个上下文管理器,关闭梯度计算。当你确认不会调用Tensor.backward()的时候。这for X, y in dataloader:X, y = X.to(device), y.to(device)pred = model.forward(X)test_loss += loss_fn(pred, y).item()  #test_loss是会自动累加每一个批次的损失值correct += (pred.argmax(1) == y).type(torch.float).sum().item()a = (pred.argmax(1) == y)   #dim=1表示每一行中的最大值对应的索引号,dim=0表示每一列中的最大值b = (pred.argmax(1) == y).type(torch.float)test_loss /= num_batches #能来衡量模型测试的好坏。correct /= size #平均的正确率print(f"Test result: \n Accuracy: {(100*correct)}%, Avg loss: {test_loss}")

训练模型

最后,我们训练模型并测试其性能。

loss_fn = nn.CrossEntropyLoss() #创建交叉熵损失函数对象,因为手写字识别中一共有10个数字,输出会有10个结果optimizer = torch.optim.SGD(model.parameters(), lr=0.01) #创建一个优化器,SGD为随机梯度下降算法
# #params:要训练的参数,一般我们传入的都是model.parameters()# #lr:learning_rate学习率,也就是步长#loss表示模型训练后的输出结果与,样本标签的差距。如果差距越小,就表示模型训练越好,越逼近干真实的模型。# train(train_dataloader, model, loss_fn, optimizer)
# test(test_dataloader, model, loss_fn)epochs = 30
for t in range(epochs):print(f"Epoch {t+1}\n")train(train_dataloader, model, loss_fn, optimizer)
print("Done!")
test(test_dataloader, model, loss_fn)

运行结果

在这里插入图片描述

结论

通过这篇文章,我们成功构建了一个简单的神经网络模型来识别MNIST数据集中的手写数字。这个模型展示了如何使用PyTorch进行数据处理、模型定义、训练和测试。希望这能帮助你开始自己的深度学习项目!

相关文章:

# 手写数字识别:使用PyTorch构建MNIST分类器

手写数字识别&#xff1a;使用PyTorch构建MNIST分类器 在这篇文章中&#xff0c;我将引导你通过使用PyTorch框架构建一个简单的神经网络模型&#xff0c;用于识别MNIST数据集中的手写数字。MNIST数据集是一个经典的机器学习数据集&#xff0c;包含了60,000张训练图像和10,000张…...

ios app的ipa文件提交最简单的方法

ipa文件是ios的app打包后生成的二级制文件&#xff0c;在上架app store connect或做testflight测试的时候&#xff0c;它提示我们需要使用xcode、transporter或xcode命令行等方式来上传。 而xcode、transporter或xcode命令行的安装都需要使用mac电脑&#xff0c;假如没有mac电…...

与/或形演绎推理——基于王永庆著《人工智能原理与方法》的深度解析

前文&#xff0c;我们已经写了两种演绎推理&#xff1a;自然演绎推理和归结演绎推理。 自然演绎推理&#xff1a;自然演绎推理——基于王永庆著《人工智能原理与方法》的深度解析-CSDN博客 归结演绎推理&#xff1a;归结演绎推理——基于王永庆著《人工智能原理与方法》的深度…...

【Qt】Qt 按钮控件详解,PushButton,RadioButton,CheckBox,ToolButton

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;QT 欢迎大家点赞收藏评论&#x1f60a; 目录 &#x1f4da;按钮类控件&#x1f351;Push Button &#x1f965;Radio Buttion&#x1f343;click, press, release, toggled 的区别&#x1f341;…...

跨平台开发选Java还是C?应用场景与性能深度对比

&#x1f381;个人主页&#xff1a;User_芊芊君子 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 &#x1f50d;系列专栏&#xff1a;AI 【前言】 在计算机技术快速发展的今天&#xff0c;跨平台开发已经成为众多开发者的核心需求。Java和C作为两种历史悠…...

Node.js 的定义、用途、安装方法

关于 Node.js 的定义、用途、安装方法&#xff0c;以及为什么不能使用 DOM、BOM 和与浏览器不同的顶级对象的简明总结&#xff1a; &#x1f4a1; 一、Node.js 的定义 Node.js 是一个基于 Chrome V8 引擎 的 JavaScript 运行时环境&#xff0c;它让 JavaScript 不再局限于浏览…...

5、Props:组件间的密语——React 19 数据传递全解

一、密语启封&#xff1a;咒语学徒的困惑 "教授&#xff0c;我的魔法傀儡为什么总是不听指令&#xff1f;"年轻的学徒举着发光的魔杖&#xff0c;组件树中的傀儡们却像打人柳一样混乱。"记住&#xff0c;艾薇&#xff0c;"赫敏的魔杖在空中划出金色数据流…...

LangGraph中预构件,creat_react_agent的实现流程

LangGraph Prebuilt Agent 流程图 本文档展示了LangGraph的prebuilt模块中Agent的实现流程&#xff0c;重点是create_react_agent函数构建的代理系统流程和结构。 ReAct Agent构建流程 #mermaid-svg-ubcEEuBeApApT624 {font-family:"trebuchet ms",verdana,arial,s…...

python-将文本生成音频

将文本生成音频通常需要结合 文本转语音&#xff08;TTS&#xff0c;Text-to-Speech&#xff09; 工具或库来实现&#xff0c;比如 Google TTS (gtts)、Amazon Polly、Microsoft Azure TTS 等。 一、使用 Google TTS (gtts) 将文本生成音频 gtts 是一个简单易用的 Python 库&a…...

【虚幻C++笔记】接口

目录 概述创建接口 概述 简单的说&#xff0c;接口提供一组公共的方法&#xff0c;不同的对象中继承这些方法后可以有不同的具体实现。任何使用接口的类都必须实现这些接口。实现解耦解决多继承的问题 创建接口 // Fill out your copyright notice in the Description page o…...

白酒制造主数据管理全链路解析:业务重塑与AI赋能

作为中国消费领域的支柱产业之一&#xff0c;白酒行业在消费升级、渠道多元化的浪潮下&#xff0c;企业正面临库存积压、串货乱价、质量追溯难等核心痛点。如何通过主数据管理实现业务全链路的标准化与智能化&#xff0c;已成为行业数字化转型的关键命题。 01政策背景与行业现…...

Java与C在典型场景下的性能对比深度剖析

&#x1f381;个人主页&#xff1a;User_芊芊君子 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 &#x1f50d;系列专栏&#xff1a;AI 【前言】 在计算机编程领域&#xff0c;Java和C语言都是举足轻重的编程语言。Java以其跨平台性、自动内存管理和丰富…...

基于springboot+vue的数码产品抢购系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;Maven3.3.9 系统展示 系统首页 商品信…...

芯片封装制造技术分析

封装技术正由单一防护功能向集成化系统发展&#xff0c;核心需统筹电气参数、热耗散能力与生产成本之间的关系。 一、技术定义与基础功能 芯片封装指通过特定制程将半导体晶片封装于保护结构内的技术&#xff0c;核心作用包括&#xff1a; 环境隔离&#xff1a;阻隔机械冲击、…...

Linux:Makefile

编译器gcc 使用方式&#xff1a;gcc [ 选项 ] 要编译的⽂件 [ 选项 ] [ ⽬标⽂件 ] 编译分为以下几个步骤&#xff1a; 1.预处理(进⾏宏替换) 预处理功能主要包括宏定义,⽂件包含,条件编译,去注释等。 预处理指令是以#号开头的代码⾏。 实例: gcc –E hello.c –o hello…...

下篇:《高阶排序算法:分治思想与性能突破》

个人主页&#xff1a;strive-debug 1. 堆排序&#xff08;Heap Sort&#xff09; - **核心思想**&#xff1a;利用 **大根堆&#xff08;升序&#xff09;** 或 **小根堆&#xff08;降序&#xff09;** 进行选择排序。 - **关键步骤**&#xff1a; 1. **建堆**&#xff08;…...

5G时代,视频分析设备平台EasyCVR实现通信基站远程安全便捷管控

一、背景介绍 随着移动通信行业的快速发展&#xff0c;各大运营商不断建设越来越多的无人值守通信基站。这些基站大多位于偏远地区&#xff0c;人烟稀少且交通不便&#xff0c;给日常维护带来了许多不便。特别是安装在空旷地带的基站设备&#xff0c;如空调、蓄电池等&#xf…...

第 4 篇:Motion 拖拽与手势动画(交互篇)—— 打造直觉化交互体验

Framer Motion 的拖拽与手势系统让实现复杂交互变得异常简单。本文将深入解析核心 API&#xff0c;并通过实战案例演示如何创造自然流畅的交互体验。 &#x1f9f2; 拖拽动画基础 1. 启用拖拽 使用 drag 属性即可开启拖拽能力。支持的值有&#xff1a;true&#xff08;全方向…...

TDengine 语言连接器(R语言)

简介 R 语言是一种用于统计分析、绘图和数据挖掘的编程语言和软件环境 。 TDengine 支持 R 语言访问 TDengine 数据库&#xff0c;通过 R 语言中的 RJDBC 库可以使 R 语言程序支持访问 TDengine 数据。 以下是安装过程、配置过程以及 R 语言示例代码。 安装过程 在开始之前&…...

Vue Router(3)- 历史记录模式、路由元信息

历史记录模式 Vue Router 支持多种历史管理模式&#xff0c;主要区别在于 URL 的表现形式和页面刷新/直接访问时的处理方式。 如果需要最好的兼容性或没有服务器配置权限&#xff0c;使用 Hash 模式 如果需要干净的 URL 并能配置服务器&#xff0c;使用 History 模式&#xff…...

android studio 运行java main报错

运行某个带main函数的java文件报错 Could not create task :app:Test.main(). > SourceSet with name main not found. 解决办法&#xff1a;在工程的.idea/gradle.xml 文件下添加&#xff1a; <option name"delegatedBuild" value"false" /&g…...

TDengine 3.3.6.3 虚拟表简单验证

涛思新出的版本提供虚拟表功能&#xff0c;完美解决了多值窄表查询时需要写程序把窄表变成宽表的处理过程&#xff0c;更加优雅。 超级表定义如下&#xff1a; CREATE STABLE st01 (ts TIMESTAMP,v0 INT,v1 BIGINT,v2 FLOAT,v3 BOOL) TAGS (device VARCHAR(32),vtype VARCHAR(…...

什么是进程?

目录 冯诺依曼体系 操作系统(OperatorSystem) 设计OS的目的 进程 task_struct 操作 /proc文件夹 父子进程 创建子进程 了解进程之前&#xff0c;我们先说说冯诺依曼体系结构&#xff0c;这是计算机硬件方面的知识。 冯诺依曼体系 我们常见的计算机&#xff0c;如笔记…...

mysql备份存储过程、函数和事件

背景 今天还原mysql数据库备份发现&#xff0c;数据库中没有存储过程和函数&#xff0c;虽然不推荐研发使用数据库的函数、存储过程&#xff0c;但还是免不了有人偶尔使用&#xff0c;所以整理备份和还原策略。 数据库备份 mysqldump -u user -p --routines --triggers --ev…...

【正点原子STM32MP257连载】第五章 ATK-DLMP257B文件系统简介 #文件系统 #SSH

1&#xff09;实验平台&#xff1a;正点原子ATK-DLMP257B开发板 2&#xff09;浏览产品&#xff1a;https://www.alientek.com/Product_Details/135.html 3&#xff09;全套实验源码手册视频下载&#xff1a;正点原子资料下载中心 文章目录 第五章 ATK-DLMP257B文件系统简介5.1…...

实战5:Python使用循环神经网络生成诗歌

实战5&#xff1a;Python使用循环神经网络生成诗歌 使用依赖加载数据词典构建和文本预处理总代码 在我们学习了课程8后&#xff0c;我们在实战练习一个例子。 你的主要任务&#xff1a;学习如何使用简单的循环神经网络&#xff08;Vanilla RNN&#xff09;生成诗歌。亚历山大谢…...

【网络安全】谁入侵了我的调制解调器?(二)

文章目录 针对 TR-069 协议 REST API 的攻击思路攻击百万台调制解调器意外发现 Cox 后端 API 的授权绕过漏洞确认我们能够进入任何人的设备访问和更新任何Cox商业客户账户通过泄露的加密密钥覆盖任何人的设备设置执行对任何调制解调器的命令影响最后想说阅读本文前,请先行浏览…...

当纺织车间遇上“数字魔法”--天拓四方飞鸟物联平台+边缘计算采集网关的智造革命

在传统印象里&#xff0c;纺织车间总是机器轰鸣、纱线纷飞&#xff0c;工人穿梭其间手动调整参数&#xff0c;次品率全凭经验“拿捏”。但如今&#xff0c;某纺织龙头企业的智能工厂里&#xff0c;一台台纺织机像被施了“聪明咒”&#xff0c;自己会“说话”、会“思考”&#…...

基于PLC的停车场车位控制系统的设计

2.1 设计目标 本课题为基于PLC的停车场车位控制系统来设计&#xff0c;在此将功能确定如下&#xff1a; 针对8个车位的停车场进行设计将停车场分为入口处&#xff0c;车位处、以及出口处三个部分&#xff1b;每个车位都有指示灯指示当前位置是否空闲&#xff0c;方便司机查找空…...

ios接入穿山甲【Swift】

1.可接入的广告&#xff0c;点击右下角查看接入文档 https://www.csjplatform.com/union/media/union/download/groMore 2.进入接入文档&#xff0c;选择最新版本进行接入 pod Ads-CN-Beta,6.8.0.2pod GMGdtAdapter-Beta, 4.15.22.0pod GDTMobSDK,4.15.30pod KSAdSDK,3.3.74.0p…...

【iOS】OC高级编程 iOS多线程与内存管理阅读笔记——自动引用计数(二)

自动引用计数 前言ARC规则所有权修饰符**__strong修饰符**__weak修饰符__unsafe_unretained修饰符__autoreleasing修饰符 规则属性数组 前言 上一篇我们主要学习了一些引用计数方法的内部实现&#xff0c;现在我们学习ARC规则。 ARC规则 所有权修饰符 OC中&#xff0c;为了处…...

智能语音识别+1.2用SAPI实现文本转语音(100%教会)

欢迎来到智能语音识别系列的第二篇文章. 上一篇文章的地址在这:智能语音处理1.1下载需要的库(100%实现)-CSDN博客 想必上一篇的操作(文本转语音)已经成功实现了 接下来,我们要学习用SAPI技术去实现文本转语音 一.简单介绍SAPI技术 SAPI是架构在COM基础上的&#xff0c;微软…...

Unity导出微信小游戏后无法调起移动端输入框

参考官方demo 参考demo https://gitee.com/wechat-minigame/minigame-unity-webgl-transform/tree/main/Demo/API_V2 里面有对输入文本框适配的处理方法&#xff0c;还有一些其他功能展示 1 使用Unity打开/Demo/API目录&#xff0c;API示例开发版本为Unity 2022.3.14f1。 2 若…...

16.使用豆包将docker-compose的yaml转为k8s的yaml,安装各种无状态服务

文章目录 docker方式httpbinit-toolslinux-commandmyipreference docker-compose安装k8s方式 docker方式 httpbin A simple HTTP Request & Response Service https://httpbin.org/ https://github.com/postmanlabs/httpbin https://github.com/mccutchen/go-httpbin do…...

每日OJ_牛客_kotori和抽卡(二)_数学_C++_Java

目录 牛客_孩子们的游戏_约瑟夫环 题目解析 C代码 Java代码 牛客_孩子们的游戏_约瑟夫环 孩子们的游戏(圆圈中最后剩下的数)_牛客题霸_牛客网 描述&#xff1a; 每年六一儿童节&#xff0c;牛客都会准备一些小礼物和小游戏去看望孤儿院的孩子们。其中&#xff0c;有个游戏…...

整活 kotlin + springboot3 + sqlite 配置一个 SQLiteCache

要实现一个 SQLiteCache 也是很简单的只需要创建一个 cacheManager Bean 即可 // 如果配置文件中 spring.cache.sqlite.enable false 则不启用 Bean("cacheManager") ConditionalOnProperty(name ["spring.cache.sqlite.enable"], havingValue "t…...

JVM:运行时数据区和线程

一、运行时数据区概述 &#xff08;1&#xff09;整体架构 JVM 启动时&#xff0c;操作系统会为它分配相应的内存空间&#xff0c;接着 JVM 会对分配到的空间进行划分。当 JVM 退出&#xff0c;这些空间会被回收。JVM 将分配到的内存空间主要分成五部分&#xff1a;程序计数器…...

Lucene.NET + Jieba分词:核心词典与停用词配置详解

文章目录 前言一、dict.txt&#xff1a;核心分词词典1. 文件作用2. 文件格式3. 配置方法 二、cn_synonym.txt&#xff1a;同义词扩展库1. 文件作用2. 文件格式3. 在 Lucene 中使用 三、stopwords.txt&#xff1a;停用词表1. 文件作用2. 文件格式3. 配置方法 四、实战&#xff1…...

软件测试之测试数据生成(Excel版)

这是Excel生成测试数据的函数使用 1.时间 1.1.时间 例生成2022-05-01之前一年内任意时间点: =TEXT("2022-05-01"-RAND()-RANDBETWEEN(1,365),"yyyy-mm-dd hh:mm:ss")1.2.年月日 yyyy-mm-dd 以当前时间生成10年的日期 =TEXT(NOW()-RAND()-RANDBETWE…...

局域网内Docker镜像共享方法

在局域网内将Docker镜像构建并传输到另一台电脑&#xff0c;可以通过以下几种方法实现。以下是具体步骤及注意事项&#xff0c;结合不同场景的适用方案&#xff1a; 方法一&#xff1a;使用 docker save 和 docker load 传输镜像文件 步骤说明 在构建机上保存镜像 通过 docker…...

解决WinEdt编辑器出现文字不会适应软件宽度的问题

解决WinEdt编辑器出现文字不会适应软件宽度的问题 问题描述解决 问题描述 在使用WinEdt编辑Latex文本时&#xff0c;发现突然动了下键盘&#xff0c;或者突然就在编辑文本时不能自动换行&#xff0c;而是超出了软件屏幕的宽度。 解决 按住ctrl w &#xff0c;直到界面变成下…...

跨境电商管理转型:日事清通过目标管理、流程自动化助力智优美科技项目管理升级与目标落地复盘

1.客户背景介绍 深圳市智优美科技有限公司是一家专业从事外贸B2C的电子商务公司&#xff0c;公司总部位于深圳市宝安区&#xff0c;旗下拥有三家子公司。目前销售的品类有&#xff1a;家居用品、电子产品、电子配件产品等&#xff0c;在深圳外贸电商行业销售额稳居行业前10名。…...

高防CDN、高防IP vs 高防服务器:核心优势与选型指南

一、高防服务器的核心局限 高防服务器是指通过机房部署硬件防火墙&#xff08;如集群防火墙、流量清洗设备&#xff09;来防御DDoS攻击的物理或虚拟服务器。其核心问题在于&#xff1a; 单点防御风险&#xff1a;依赖单一服务器硬扛攻击&#xff0c;若攻击流量超过防御阈值&am…...

入门-C编程基础部分:5、变量

飞书文档https://x509p6c8to.feishu.cn/wiki/PVnawQn5DiVhHhkMApqcDyDvnWg 变量的作用&#xff1f; 存储程序运行时&#xff0c;需要存储一些可能会变化的数据。 C 中每个变量都有特定的类型&#xff0c;类型决定了变量存储的大小和布局。 变量的名称可以由字母、数字和下划…...

Kafka深度解析与实战应用

Kafka深度解析与实战应用 作者&#xff1a;LedgerX技术团队 发布日期&#xff1a;2025年4月16日 引言 在当今数字时代&#xff0c;数据已成为企业的核心资产&#xff0c;而高效处理大规模数据流的能力则成为现代后端系统的关键挑战之一。Apache Kafka作为一个分布式流处理平台…...

数学教学通讯杂志数学教学通讯杂志社数学教学通讯编辑部2025年第6期目录

课程教材教法 “课程思政”视域下的高中数学教学探索与实践——以“函数概念的发展历程”为例 赵文博; 3-617 PBL教学模式下高中统计教学的探索与实践——以“随机抽样&#xff08;第一课时&#xff09;”为例 陈沛余; 7-10 “三新”背景下的高中数学教学困境与应对…...

【JavaEE初阶】多线程重点知识以及常考的面试题-多线程进阶(二)

本篇博客给大家带来的是多线程中synchronize的实现原理和JUC(java.util.concurrent) 常见类的相关知识点. &#x1f40e;文章专栏: JavaEE初阶 &#x1f680;若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的…...

Flutter PIP 插件 ---- iOS Video Call 自定义PIP WINDOW渲染内容

以下是一篇关于在 iOS 中实现画中画(PiP)功能的技术博客: iOS 画中画(PiP)功能实现指南 效果 简介 画中画(Picture in Picture, PiP)是一项允许用户在使用其他应用时继续观看视频内容的功能。本文将详细介绍如何在 iOS 应用中实现 PiP 功能&#xff0c;包括自定义内容渲染和…...

【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——4G模块ME3630测试

1&#xff09;实验平台&#xff1a;正点原子ATK-DLMP257B开发板 2&#xff09;浏览产品&#xff1a;https://www.alientek.com/Product_Details/135.html 3&#xff09;全套实验源码手册视频下载&#xff1a;正点原子资料下载中心 文章目录 第四章 ATK-DLMP257B功能测试——4G模…...

高并发内存池(四):内存释放原理与实现

前言&#xff1a;经过前3期的攻坚&#xff0c;我们已完整实现了内存动态申请的核心模块。接下来将进入关键阶段——内存释放机制的理解与实现&#xff0c;这是构建完整 高并发内存池 的最后一块技术拼图。该模块完成后&#xff0c;项目主体架构将基本成型&#xff08;达90%&…...