ML.NET库学习004:ML.NET基础知识复盘
文章目录
- ML.NET库学习004:ML.NET基础知识复盘
- 背景
- 简单的 ML.NET 应用程序
- 代码工作流
- 机器学习模型
- 基础
- 进阶
- ML.NET 架构
- 构建管道
- 训练模型
- 使用模型
- 数据模型和架构
- 模型部署
ML.NET库学习004:ML.NET基础知识复盘
学了几个小项目,发现好多方法莫名其妙。仔细思索,觉得是没有ML.NET的知识基础,直接上手看代码,先应该整体了解一下概念,再去看代码。
背景
ML.NET 使您能够在联机或脱机方案中将机器学习添加到 .NET 应用程序。借助此功能,您可以使用应用程序可用的数据进行自动预测。机器学习应用程序利用数据中的模式进行预测,而不需要显式编程。ML.NET 的核心是机器学习模型。
该模型指定了将输入数据转换为预测所需的步骤。借助 ML.NET,您可以通过指定算法来训练自定义模型,也可以导入预先训练的 TensorFlow 和 Open Neural Network Exchange (ONNX) 模型。拥有模型后,您可以将其添加到应用程序中以进行预测。
ML.NET 使用 .NET 在 Windows、Linux 和 macOS 上运行,或使用 .NET Framework 在 Windows 上运行。所有平台都支持 64 位。Windows 支持 32 位,但 TensorFlow、LightGBM 和 ONNX 相关功能除外。下表显示了您可以使用 ML.NET 进行的预测类型的示例。
简单的 ML.NET 应用程序
以下代码段中的代码演示了最简单的 ML.NET 应用程序。此示例构造一个线性回归模型,以使用房屋大小和价格数据预测房价。
using Microsoft.ML;
using Microsoft.ML.Data;class Program
{public record HouseData{public float Size { get; set; }public float Price { get; set; }}public record Prediction{[ColumnName("Score")]public float Price { get; set; }}static void Main(string[] args){MLContext mlContext = new();// 1. Import or create training data.HouseData[] houseData = [new() { Size = 1.1F, Price = 1.2F },new() { Size = 1.9F, Price = 2.3F },new() { Size = 2.8F, Price = 3.0F },new() { Size = 3.4F, Price = 3.7F }];IDataView trainingData = mlContext.Data.LoadFromEnumerable(houseData);// 2. Specify data preparation and model training pipeline.EstimatorChain<RegressionPredictionTransformer<Microsoft.ML.Trainers.LinearRegressionModelParameters>> pipeline = mlContext.Transforms.Concatenate("Features", ["Size"]).Append(mlContext.Regression.Trainers.Sdca(labelColumnName: "Price", maximumNumberOfIterations: 100));// 3. Train model.TransformerChain<RegressionPredictionTransformer<Microsoft.ML.Trainers.LinearRegressionModelParameters>> model = pipeline.Fit(trainingData);// 4. Make a prediction.HouseData size = new() { Size = 2.5F };Prediction price = mlContext.Model.CreatePredictionEngine<HouseData, Prediction>(model).Predict(size);Console.WriteLine($"Predicted price for size: {size.Size * 1000} sq ft = {price.Price * 100:C}k");// Predicted price for size: 2500 sq ft = $261.98k}
}
代码工作流
下图展示了应用程序代码结构和模型开发的迭代过程:
收集训练数据并将其加载到 IDataView 对象中
指定作管道以提取特征并应用机器学习算法
通过在管道上调用 Fit(IDataView) 来训练模型
评估模型并迭代以改进
将模型保存为二进制格式,以便在应用程序中使用
将模型加载回 ITransformer 对象
通过调用 PredictionEngineBase<TSrc,TDst> 进行预测。
机器学习模型
ML.NET 模型是一个对象,其中包含要对输入数据执行的转换,以得出预测的输出。
基础
最基本的模型是二维线性回归,其中一个连续量与另一个连续量成正比,如前面所示的房价示例所示。
模型很简单:Price=b+Size∗w.参数b和w通过在一组 (size, price) 对上拟合一条线来估计。用于查找模型参数的数据称为训练数据。机器学习模型的输入称为特征。在此示例中,Size是唯一的功能。用于训练机器学习模型的 ground-truth 值称为标签。在这里,Pr我ce训练数据集中的值是标签。
进阶
更复杂的模型使用交易文本描述将金融交易分类为多个类别。通过删除冗余的单词和字符,并计算单词和字符的组合,每个交易描述都分解为一组特征。该特征集用于根据训练数据中的类别集训练线性模型。
新描述与训练集中的描述越相似,就越有可能将其分配到同一类别。
房屋价格模型和文本分类模型都是线性模型。根据数据的性质和要解决的问题,您还可以使用决策树模型、广义加法模型等。您可以在 Tasks 中找到有关模型的更多信息。
ML.NET 架构
本节介绍 ML.NET 的架构模式。如果您是一位经验丰富的 .NET 开发人员,则其中一些模式对您来说可能很熟悉,而另一些则不太熟悉。
ML.NET 应用程序以 MLContext 对象开头。此 singleton 对象包含 catalogs。目录是用于数据加载和保存、转换、训练器和模型作组件的工厂。每个目录对象都有用于创建不同类型元件的方法。
您可以导航到列出的每个类别中的创建方法。如果使用 Visual Studio,则目录也会通过 IntelliSense 显示。
构建管道
每个目录中都有一组可用于创建训练管道的扩展方法。
var pipeline = mlContext.Transforms.Concatenate("Features", new[] { "Size" }).Append(mlContext.Regression.Trainers.Sdca(labelColumnName: "Price", maximumNumberOfIterations: 100));
在代码段中,和 都是目录中的方法。它们各自创建一个附加到管道的 IEstimator 对象。ConcatenateSdca此时,对象已创建,但尚未执行。
训练模型
创建管道中的对象后,可以使用数据来训练模型。
var model = pipeline.Fit(trainingData);
Calling 使用输入的训练数据来估计模型的参数。这称为训练模型。请记住,前面显示的线性回归模型有两个模型参数:bias 和 weight。调用后,参数的值是已知的。(大多数模型的参数比这多得多。Fit()Fit()
您可以在如何训练模型中了解有关模型训练的更多信息。
生成的模型对象实现 ITransformer 接口。也就是说,该模型将输入数据转换为预测。
IDataView predictions = model.Transform(inputData);
使用模型
您可以将输入数据批量转换为预测,也可以一次转换一个输入。房价示例同时执行了两项作:批量评估模型,一次一个进行新的预测。让我们看看如何进行单个预测。
var size = new HouseData() { Size = 2.5F };
var predEngine = mlContext.CreatePredictionEngine<HouseData, Prediction>(model);
var price = predEngine.Predict(size);
该方法采用一个 input 类和一个 output 类。字段名称或代码属性确定模型训练和预测期间使用的数据列的名称。有关更多信息,请参阅使用经过训练的模型进行预测。CreatePredictionEngine()
数据模型和架构
ML.NET机器学习管道的核心是 DataView 对象。
管道中的每个转换都有一个输入架构(转换希望在其输入上看到的数据名称、类型和大小);和输出架构(转换后生成的数据名称、类型和大小)。如果管道中一个转换的输出架构与下一个转换的输入架构不匹配,ML.NET 将引发异常。数据视图对象包含列和行。
每列都有一个名称、一个类型和一个长度。例如,房价示例中的输入列是 Size 和 Price。
它们都是 Single 类型,并且它们是标量而不是向量。
所有 ML.NET 算法都查找作为向量的输入列。默认情况下,此向量列称为 Features。这就是房价示例将 Size 列连接到名为 Features 的新列的原因。
var pipeline = mlContext.Transforms.Concatenate("Features", new[] { "Size" })
所有算法在执行预测后还会创建新列。这些新列的固定名称取决于机器学习算法的类型。对于回归任务,其中一个新列称为 Score,如 price data 属性中所示。
public class Prediction
{[ColumnName("Score")]public float Price { get; set; }
}
您可以在 Machine Learning Tasks 指南中找到有关不同机器学习任务的输出列的更多信息。DataView 对象的一个重要属性是它们被延迟计算。数据视图仅在模型训练和评估以及数据预测期间加载和作。在编写和测试 ML.NET 应用程序时,可以使用 Visual Studio 调试器通过调用 Preview 方法查看任何数据视图对象。
var debug = testPriceDataView.Preview();
模型部署
在实际应用程序中,您的模型训练和评估代码将与预测分开。事实上,这两项活动通常由不同的团队执行。您的模型开发团队可以保存模型以在预测应用程序中使用。
mlContext.Model.Save(model, trainingData.Schema, "model.zip");
相关文章:
ML.NET库学习004:ML.NET基础知识复盘
文章目录 ML.NET库学习004:ML.NET基础知识复盘背景简单的 ML.NET 应用程序代码工作流机器学习模型基础进阶 ML.NET 架构构建管道训练模型使用模型 数据模型和架构模型部署 ML.NET库学习004:ML.NET基础知识复盘 学了几个小项目,发现好多方法莫…...
2. UVM的基本概念和架构
文章目录 前言1. UVM的基本概念1.1 UVM的核心组件1.2 UVM的基本架构1.3 UVM的工作流程 2. UVM的架构2.1 UVM的层次结构2.2 UVM的组件交互 3. 总结 前言 首先,得确定UVM的基本概念和架构包含哪些关键部分。我回忆起UVM的核心组件,比如uvm_component、uvm…...
算法10--哈希
哈希 原理经典例题[1. 两数之和](https://leetcode.cn/problems/two-sum/description/)[面试题 01.02. 判定是否互为字符重排](https://leetcode.cn/problems/check-permutation-lcci/description/)[217. 存在重复元素](https://editor.csdn.net/md?not_checkout1&spm1015…...
磁盘文件删除后恢复
磁盘文件删除后,文件数据并未立即消失,只是文件系统的指针被移除,标记该空间为可覆盖。要恢复文件,可以尝试以下方法: 1. 使用数据恢复软件 Recuva:适合Windows,能恢复多种文件类型。PhotoRec…...
STM32 CUBE Can调试
STM32 CUBE Can调试 1、CAN配置2、时钟配置3、手动添加4、回调函数5、启动函数和发送函数6、使用方法(采用消息队列来做缓存)7、数据不多在发送函数中获取空邮箱发送,否则循环等待空邮箱 1、CAN配置 2、时钟配置 3、手动添加 需要注意的是STM32CUBE配置的代码需要再…...
【大模型】Ubuntu下安装ollama,DeepSseek-R1:32b的本地部署和运行
1 ollama 的安装与设置 ollama官网链接:https://ollama.com/ 在左上角的【Models】中展示了ollama支持的模型在正中间的【Download】中课可以下载支持平台中的安装包。 其安装和模型路径配置操作流程如下: ollama的安装 这里选择命令安装curl -fsSL …...
Goland 内存逃逸问题
内存逃逸是什么? 在go语言中,内存分配存在两个方式:堆分配;栈分配。 栈分配:是在函数调用时为局部变量分配内存,当函数返回时,这些内存会自动释放。 堆分配:通过 new 或者 make 函…...
我们来学人工智能 -- 本地部署DeepSeek
本地部署DeepSeek 题记思考正题结语 题记 时不待我AI会淘汰各领域一些岗位AI可以精简部门,DP白菜价的落地,2025年会更加明显会AI的淘汰不会AI的第四次工业革命将在中国爆发 全产业链多年数字化建设以DP为代表的全球领先白菜价人工智能在各行各业的普及 …...
【GitHub】GitHub 2FA 双因素认证 ( 使用 Microsoft Authenticator 应用进行二次验证 )
文章目录 一、GitHub 的 2FA 双因素认证二、使用 Microsoft Authenticator 应用进行二次验证1、TOTP 应用2、下载 Microsoft Authenticator 应用3、安装使用 Authenticator 应用 三、恢复码重要性 一、GitHub 的 2FA 双因素认证 现在登录 GitHub 需要进行二次身份验证 ; 先登录…...
通过脚本实现自动将标签内容复制到下一个标签文件中
只需要将下面内容运行前 修改文件夹路径(控制修改范围的文件名 不需要的话 就随便写一个不相同的文件名 就行 需要的话就是在这个文件名字之前的会被修改) import os import time # 文件夹路径 image_directory r"C:\Users\Lenovo\Desktop\新建文件夹\images" # 替…...
Elasticsearch+Kibana安装启动与操作教程
在大数据时代,Elasticsearch(简称 ES)和 Kibana 作为强大的数据搜索与可视化工具,受到了众多开发者的青睐。本文将为您详细介绍在 Windows 和 Mac 系统上安装、启动 Elasticsearch 和 Kibana 的步骤,以及常用命令和 Ki…...
CSS Overflow 属性详解:控制内容溢出的利器
在前端开发中,处理内容溢出是一个常见的需求。CSS 提供了 overflow 属性,帮助我们控制当内容超出元素框时的显示方式。本文将详细介绍 overflow 属性的各种取值及其应用场景。 1. 什么是 overflow 属性? overflow 属性用于控制当元素的内容…...
什么是XMLHttpRequest?及其详细使用说明
XMLHttpRequest(通常缩写为XHR)是一个JavaScript对象,用于在浏览器和服务器之间进行异步通信。它允许网页在不重新加载整个页面的情况下,向服务器发送请求并接收响应。XHR是Ajax(Asynchronous JavaScript and XML&…...
Chrome浏览器原理及优化
1. 相关面试题 1.1. 请说说从输入 URL 到页面渲染完成的全过程 1. 输入URL,用户在浏览器的地址栏输入一个URL,并按下回车键; 2. DNS解析; 浏览器需要将域名转换为服务器的IP地址,以建立连接。 (1). 如果浏览器缓存、操作系统缓存或路由器缓存中已有该域名的IP地址,…...
Vue 3 + Vite + JS 项目中实现组件全局自动化注册的魔法,极致组件自动化注册方案,开发效率飙升300%。
在Vue项目开发中,你是否还在为重复的组件注册代码而烦恼?是否经历过在大型项目中手动维护数百个组件注册的痛苦?本文将揭秘一种革命性的组件自动化注册方案,结合Vite的黑魔法和Vue3的最新特性,让你的开发效率实现质的飞…...
寒假2.8
题解 web:[RoarCTF 2019]Easy Calc 打开,是一个计算界面 看一下源代码,提示设置了WAF,并且有一个calc.php文件 访问一下calc.php文件,得到源码,使用get方式传参赋值给num,设置了黑名单&#x…...
企业如何利用DeepSeek提升网络安全管理水平
企业可以通过深度整合DeepSeek的AI能力,构建智能化、动态化的网络安全防御体系,以应对APT(高级持续性威胁)等复杂攻击。以下是具体策略与实践路径: 1. AI驱动的威胁检测与分析 多模态威胁狩猎 DeepSeek的深度学习技术能…...
C++ libfmt 实战: 高效便捷的格式化库
libfmt 是一个现代化的 C格式化库{fmt}, 具有以下关键特性: 安全性: 受 Python 格式化功能启发, {fmt}为printf系列函数提供安全替代方案. 格式字符串错误在编译时就能被检测出来, 并且通过自动内存管理避免缓冲区溢出错误.可扩展性: 默认支持格式化大多数标准类型, 包括容器,…...
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_max_sockets
在 Nginx 的源代码中, ngx_max_sockets 全局变量的声明位于 os/unix/ngx_os.h extern ngx_int_t ngx_max_sockets; 定义在 os/unix/ngx_posix_init.c ngx_int_t ngx_max_sockets; ngx_max_sockets 定义了 Nginx 能够同时使用的最大 Socket 文件描述符数量。它…...
Spring Boot接入Deep Seek的API
1,首先进入deepseek的官网:DeepSeek | 深度求索,单击右上角的API开放平台。 2,单击API keys,创建一个API,创建完成务必复制!!不然关掉之后会看不看api key!!&…...
大语言模型实践——基于现有API的二次开发
基于现有的API平台做一些实用的AI小应用。 API服务商:阿里云百炼 云服务器:阿里云(2核2GB) 部署框架:gradio 调用框架:openai 语言:Python (注:若搭建网站或API接口…...
ChunkKV:优化 KV 缓存压缩,让 LLM 长文本推理更高效
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
深入探究 Go 语言中的 Fx 框架:依赖注入的强大工具
在软件开发中,依赖注入(Dependency Injection,简称 DI)是一种重要的设计模式,它可以帮助我们降低代码的耦合度,提高代码的可测试性和可维护性。Go 语言作为一门高效、简洁的编程语言,拥有许多优…...
用 DeepSeek + Kimi 自动做 PPT,效率起飞
以下是使用 DeepSeek Kimi 自动做 PPT 的详细操作步骤: 利用 DeepSeek 生成 PPT 内容: 访问 DeepSeek 官网,完成注册/登录后进入对话界面。输入指令,例如“请用 Markdown 格式生成一份关于[具体主题]的 PPT 大纲,需包…...
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
【04】Java若依vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战 项目背景 本项目经费43000元,需求文档如下,工期25天,目前已经过了8天,时间不多了&#x…...
【C++】异常
前言 本篇博客我们来看下C有关异常的处理,了解下异常有关的知识 💓 个人主页:小张同学zkf ⏩ 文章专栏:C 若有问题 评论区见📝 🎉欢迎大家点赞👍收藏⭐文章 目录 1.异常的概念及使用 1.1异…...
Meta AI 最近推出了一款全新的机器学习框架ParetoQ,专门用于大型语言模型的4-bit 以下量化
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
金融资产配置
不要放在一个篮子里也不要放在太多篮子里: 尽量放在不相关的行业实现风险对冲 金融资产从风险类别上主要可以分为三类: 进攻型资产、稳定型资产和防守型资产 进攻型资产包括原油、股票、一级市场股权投资等 稳定型资产包括信托、理财、国债等 防守…...
(done) openMP学习 (Day14: 总结)
url: https://dazuozcy.github.io/posts/introdution-to-openmp-intel/#23-%E5%8F%AF%E6%80%95%E7%9A%84%E4%B8%9C%E8%A5%BF%E5%86%85%E5%AD%98%E6%A8%A1%E5%9E%8Batomicsflushpairwise%E5%90%8C%E6%AD%A5%20 新手并行程序员与专家并行程序员之间的区别是专家have a collection…...
音频进阶学习十一——离散傅里叶级数DFS
文章目录 前言一、傅里叶级数1.定义2.周期信号序列3.表达式DFSIDFS参数含义 4.DFS公式解析1)右边解析 T T T、 f f f、 ω \omega ω的关系求和公式N的释义求和公式K的释义 e j ( − 2 π k n N ) e^{j(\frac{-2\pi kn}{N})} ej(N−2πkn)的释义 ∑ n 0 N − 1 e…...
ssm的心得
spring是一个轻量级的ioc(控制反转)和aop(面向切面编程)容器框架,它可以管理和配置应用中的各种bean(对象),实现bean之间的依赖注入,以及提供事务管理、缓存、测试等功能…...
14vue3实战-----获取用户信息和用户的菜单树信息
14vue3实战-----获取用户信息和用户的菜单树信息 1.获取用户信息1.1封装接口1.2优化 2.获取用户的菜单树信息 1.获取用户信息 1.1封装接口 后端有根据id获取用户信息的接口,前端需要把该接口封装一下: service/login/login.ts: import hyRequest from…...
shell脚本学习笔记
Shell脚本学习笔记 参考资料:https://www.runoob.com/linux/linux-shell-passing-arguments.html 文章目录 Shell脚本学习笔记一、什么是Shell1.1、定义1.2、注释 二、Shell变量2.1、规则2.2、变量类型2.2.1、字符串2.2.2、整数2.2.3、数组2.2.4、环境变量2.2.5、特…...
Java中的线程池及其应用场景有哪些?
Java中的线程池是一种高效的并发编程机制,通过复用线程来管理任务的执行,从而提高资源利用率和系统性能。 本文将详细探讨Java线程池的概念、类型、应用场景以及实际代码示例,帮助读者全面理解线程池的使用方法及其在实际开发中的重要性。 …...
13.6 基于 LangChain架构优化实战:OpenAI-Translator翻译系统重构与10倍效率提升秘籍
LangChain架构优化实战:OpenAI-Translator翻译系统重构与10倍效率提升秘籍 关键词:LangChain 架构优化, 模块解耦, 翻译系统设计模式, 可扩展翻译框架, 多模型管理 1. 原架构痛点分析 问题维度原实现缺陷LangChain 优化方案大模型耦合直接调用 OpenAI API,切换模型需改代码…...
构建基于 SSE 协议通信的 MCP Server 和 Client
在之前的系列教程中,我们编写的 MCP 服务器与 MCP 客户端是通过 **stdio(Standard Input/Output,标准输入输出)**来进行交互的。客户端通过启动服务器子进程,并利用标准输入(stdin)和标准输出&a…...
Docker、Ollama、Dify 及 DeepSeek 安装配置与搭建企业级本地私有化知识库实践
在现代企业中,管理和快速访问知识库是提升工作效率、促进创新的关键。为了满足这些需求,企业越来越倾向于构建本地私有化的知识库系统,这样可以更好地保护企业数据的安全性和隐私性。本文将介绍如何利用 **Docker**、**Ollama**、**Dify** 和…...
第3章 使用 Vue 脚手架
第3章 使用 Vue 脚手架 3.1 初始化脚手架3.1.1 说明3.1.2. 具体步骤3.1.3 分析脚手架结构1 总结2 细节分析1 配置文件2 src文件1 文件结构分析2 例子 3 public文件4 最终效果 3.2 ref属性3.3 props配置项3.4 mixin混入3.5 插件3.6 scoped样式3.7 Todo-list 案例3.7.1 组件化编码…...
MySQL第五次作业
根据图片内容完成作业 1.建表 (1)建立两个表:goods(商品表)、orders(订单表) mysql> create table goods( -> gid char(8) primary key, -> name varchar(10), -> price decimal(8,2), -> num int); mysql> create t…...
pikachu[皮卡丘] 靶场全级别通关教程答案 以及 学习方法 如何通过渗透测试靶场挑战「pikachu」来精通Web渗透技巧? 一篇文章搞完这些问题
目录 Pikachu靶场 部署 暴力破解漏洞 学习地址: 靶场练习: 基于表单的暴力破解 验证码绕过(on server) 验证码绕过(on Client) token防爆破? XSS跨站脚本攻击 学习地址: 靶场练习: 反射型xss(get) 反射性xss(post) 存储型xss DOM型xss xss盲打 x…...
ai智能DeepSeek 在 Cursor 中的配置与应用实践
DeepSeek 是一款高效的深度搜索引擎,能够为开发者提供更智能、更精准的搜索体验。在数据量大、查询复杂的场景中,DeepSeek 能够帮助提升查询的响应速度和精确度。本文将介绍 DeepSeek 在 Cursor 中的配置与应用,帮助开发者理解如何在实际开发…...
登录到docker里
在Docker中登录到容器通常有两种情况: 登录到正在运行的容器内部:如果你想要进入到正在运行的容器内部,可以使用docker exec命令。 登录到容器中并启动一个shell:如果你想要启动一个容器,并在其中启动一个shell&…...
【大数据技术】搭建完全分布式高可用大数据集群(Kafka)
搭建完全分布式高可用大数据集群(Kafka) kafka_2.13-3.9.0.tgz注:请在阅读本篇文章前,将以上资源下载下来。 写在前面 本文主要介绍搭建完全分布式高可用集群 Kafka 的详细步骤。 注意: 统一约定将软件安装包存放于虚拟机的/software目录下,软件安装至/opt目录下。 安…...
Java 大视界 -- Java 大数据在智能供应链中的应用与优化(76)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
10.单例模式 (Singleton Pattern)
单例模式的定义 单例模式(Singleton Pattern) 是一种创建型设计模式,确保一个类在整个程序生命周期中只能有一个实例,并提供一个全局访问点。 特点: 唯一性:保证系统中某个类只能有一个实例。全局访问点…...
Docker 常见问题解决方法
云原生学习路线导航页(持续更新中) kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计(一)Kubernetes架构原则和对象设计(二)Kubernetes架构原则和对象设计(三)Kubernetes常…...
QT-面试
1. C(特别是 Qt)开发中,内存优化的方法 1. 合理管理对象生命周期,使用智能指针 Qt 提供了 QScopedPointer 和 QSharedPointer 来管理对象生命周期,避免手动 delete 导致的内存泄漏。 2. 减少内存占用 QString、QBy…...
使用java代码操作rabbitMQ收发消息
SpringAMQP 将来我们开发业务功能的时候,肯定不会在控制台收发消息,而是应该基于编程的方式。由于RabbitMQ采用了AMQP协议,因此它具备跨语言的特性。任何语言只要遵循AMQP协议收发消息,都可以与RabbitMQ交互。并且RabbitMQ官方也…...
LeetCode 128: 最长连续序列
LeetCode 128: 最长连续序列 题目: 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1: 输入:nums […...
Shapefile格式文件解析和显示
Java实现GIS SHP文件格式的解析和显示,JDK19下编译,awt图形系统显示。 SHP文件对应的属性存储在DBF格式数据库中,解析见:DBASE DBF数据库文件解析_数据库文件在线解析-CSDN博客 解析SHP文件代码: public static Shap…...