MinIO深度解析:从入门到实战——对象存储系统全指南
在当今数字化时代,数据存储至关重要。MinIO作为一款高性能的对象存储系统,正逐渐受到广泛关注。它与云原生存储系统相媲美,并且其API与Amazon
S3完全兼容。本文将带您快速了解MinIO,并探讨其在实际中的应用场景。
一、关于MinIO
MinIO简介
MinIO从设计之初就旨在成为Amazon S3存储API的完全兼容替代品。它声称是最兼容S3的替代方案,同时提供可比的性能和可扩展性。MinIO提供多种部署选项,可在大多数流行的架构上作为本机应用程序运行,也可以使用Docker或Kubernetes以容器化应用程序的形式部署。此外,MinIO是开源软件,组织可根据AGPLv3许可证的条款免费使用,但此选项除在线文档和MinIO用户社区外无支持。对于大型企业,也有带专用支持的付费订阅可供选择。由于其S3 API兼容性、多种部署能力以及开源性质,MinIO非常适合开发和测试以及DevOps场景。
对象存储工作原理
对象存储的概念类似于标准Unix文件系统,但不使用目录和文件,而是使用存储桶(buckets)和对象(objects)。存储桶可以像目录一样嵌套成层次结构,对象可以被看作是一组字节。这些集合可以是任意字节数组或普通文件,如图像、PDF等。例如,一个对象存储系统可能如下所示:
//images/imge1.pngimage2.jpg
//videos/video1.mp4
//users///john.doe/3rd quarter revenue report.docx
就像目录和文件一样,存储桶和对象也可以有权限,这允许对数据进行细粒度的访问控制,尤其是在有许多用户的大型组织中。
二、MinIO应用场景
大数据分析
在大数据分析场景中,MinIO可以作为数据湖的核心存储层。它可以存储来自各种来源的结构化和非结构化数据,如日志文件、传感器数据、图像和视频等。由于MinIO与Hadoop生态系统兼容,数据分析团队可以轻松地使用Spark、Hive等工具直接从MinIO读取和处理数据,无需额外的数据迁移步骤。
机器学习与AI
机器学习项目通常需要处理大量的训练数据和模型文件。MinIO提供了高性能的对象存储,可以快速访问这些数据,加速模型训练过程。此外,MinIO的版本控制功能可以帮助管理不同版本的模型和数据集,确保实验的可重复性。
内容分发网络(CDN)
MinIO可以作为CDN的源站存储,存储静态资源如图片、视频、CSS和JavaScript文件。通过与CDN服务集成,MinIO可以提供全球范围内的低延迟内容分发,提升用户体验。
备份与灾难恢复
MinIO提供了对象锁定和版本控制功能,使其成为备份和灾难恢复解决方案的理想选择。企业可以将关键数据备份到MinIO集群中,并设置保留策略以满足合规性要求。在发生数据丢失或系统故障时,可以从MinIO快速恢复数据。
三、安装MinIO
如前所述,MinIO几乎适用于所有平台。Windows、Linux和MacOS都有独立安装程序。然而,出于开发和测试目的,使用容器化分发是最简单的方法。让我们运行一个作为容器的独立MinIO服务器:
$ docker run -p 9000:9000 -p 9001:9001 \
quay.io/minio/minio server /data --console-address ":9001"
需要注意的是,容器化部署对于评估MinIO来说完全没问题,但存在一些限制。具体来说,版本控制、对象锁定和存储桶复制等一些高级功能将无法使用。这些功能需要MinIO的分布式部署,而这在单服务器部署中是不可用的。
四、使用MinIO
MinIO客户端
MinIO客户端提供与Unix文件管理命令(如cp和ls)相同的命令,但适用于本地和远程存储系统。它与AWS S3完全兼容,其语法模仿了AWS客户端工具。使用MinIO客户端的第一步是将其配置为与云存储系统通信。让我们将其指向上面的容器化部署:
$ mc alias set docker_minio http://127.0.0.1:9000 minioadmin minioadmin
此命令创建了一个指向MinIO容器化部署的别名,该部署可在localhost的9000端口上使用。在此部署中,默认访问密钥和秘密密钥均为minioadmin。我们可以使用admin子命令验证连接:
$ mc admin info docker_minio
127.0.0.1:9000
Uptime: 3 minutes
Version: 2023-05-04T21:44:30Z
Network: 1/1 OK
Drives: 1/1 OK
Pool: 1Pools: 1st, Erasure sets: 1, Drives per erasure set: 11 drive online, 0 drives offline
现在,我们可以开始执行基本操作,如创建存储桶和对象。许多MinIO客户端子命令模仿熟悉的Unix命令:
cp
:在文件系统之间复制文件或对象。ls
:列出存储桶中的文件或对象。mb
:创建存储桶(类似于Linux上的mkdir)。mv
:将文件或对象从一个文件系统移动/重新定位到另一个文件系统。rb
:删除存储桶(类似于Linux上的rmdir)。rm
:删除文件或对象。
这些子命令大多同时适用于本地文件系统和云存储。例如,我们可以使用以下命令序列创建一个新的存储桶,将文件复制到该存储桶中,在存储桶之间移动对象,然后删除一个存储桶:
$ mc mb user1
$ mc cp ~/Resume.pdf prattm
$ mc mb user2
$ mc cp user1/Resume.pdf user2
$ mc rb user1
$ mc ls user2
[2023-05-15 21:39:10 MDT] 491K Resume.pdf
MinIO控制台
另一种管理MinIO部署中的数据的方法是使用基于Web的管理控制台。对于容器化部署,我们首先在Web浏览器中打开地址http://127.0.0.1:9001。我们使用默认凭据minioadmin/minioadmin登录。从那里,我们可以创建我们的第一个存储桶:
请记住,并非所有选项(如版本控制)都适用于我们的容器化部署。现在,我们可以导航到对象浏览器并单击我们的新存储桶。在此屏幕上,我们有几个选项。首先,我们可以使用"创建新路径"按钮创建子存储桶:
我们还可以将文件作为新对象上传到存储桶中:
总体而言,MinIO管理控制台的功能与命令行客户端相当。但是,它确实存在一些小的差异。首先,与命令行客户端不同,客户端无法在存储桶之间移动对象。此外,命令行客户端还具有许多在管理控制台中不存在的子命令。例如,diff、du和pipe子命令都模仿标准Unix命令,在管理控制台中没有等效项。
MinIO Python SDK
Python作为目前最流行的编程语言之一,MinIO也提供了完善的Python SDK支持。下面是一个完整的Python示例,展示如何使用MinIO SDK进行基本操作:
from minio import Minio
from minio.error import S3Error# 初始化MinIO客户端
client = Minio("127.0.0.1:9000",access_key="minioadmin",secret_key="minioadmin",secure=False
)# 创建存储桶
try:client.make_bucket("my-python-bucket")print("Bucket 'my-python-bucket' created successfully")
except S3Error as err:if err.code != "BucketAlreadyOwnedByYou":raise# 上传文件
try:client.fput_object("my-python-bucket","example.txt","example.txt" # 本地文件路径)print("File 'example.txt' uploaded successfully")
except S3Error as err:print(f"Error uploading file: {err}")# 列出存储桶中的对象
try:objects = client.list_objects("my-python-bucket", recursive=True)print("\nObjects in bucket 'my-python-bucket':")for obj in objects:print(f" - {obj.object_name} ({obj.size} bytes)")
except S3Error as err:print(f"Error listing objects: {err}")# 下载文件
try:client.fget_object("my-python-bucket","example.txt","downloaded_example.txt")print("\nFile 'example.txt' downloaded successfully as 'downloaded_example.txt'")
except S3Error as err:print(f"Error downloading file: {err}")# 删除文件
try:client.remove_object("my-python-bucket", "example.txt")print("\nFile 'example.txt' deleted successfully")
except S3Error as err:print(f"Error deleting file: {err}")
MinIO Java SDK
Java作为企业级应用开发的主流语言,MinIO也提供了成熟的Java SDK。下面是一个简单的Java示例:
import io.minio.MinioClient;
import io.minio.MakeBucketArgs;
import io.minio.PutObjectArgs;
import io.minio.GetObjectArgs;
import io.minio.errors.MinioException;import java.io.FileInputStream;
import java.io.InputStream;public class MinioJavaExample {public static void main(String[] args) {try {// 初始化MinIO客户端MinioClient minioClient = MinioClient.builder().endpoint("http://127.0.0.1:9000").credentials("minioadmin", "minioadmin").build();// 创建存储桶minioClient.makeBucket(MakeBucketArgs.builder().bucket("my-java-bucket").build());System.out.println("Bucket 'my-java-bucket' created successfully");// 上传文件minioClient.putObject(PutObjectArgs.builder().bucket("my-java-bucket").object("example.txt").stream(new FileInputStream("example.txt"), -1, 10485760).build());System.out.println("File 'example.txt' uploaded successfully");// 获取对象try (InputStream stream = minioClient.getObject(GetObjectArgs.builder().bucket("my-java-bucket").object("example.txt").build())) {System.out.println("\nFile content:");byte[] buffer = new byte[1024];int bytesRead;while ((bytesRead = stream.read(buffer)) != -1) {System.out.print(new String(buffer, 0, bytesRead));}}} catch (MinioException e) {System.err.println("Error occurred: " + e.getMessage());e.printStackTrace();} catch (Exception e) {e.printStackTrace();}}
}
五、安装MinIO
如前所述,MinIO几乎适用于所有平台。Windows、Linux和MacOS都有独立安装程序。然而,出于开发和测试目的,使用容器化分发是最简单的方法。让我们运行一个作为容器的独立MinIO服务器:
$ docker run -p 9000:9000 -p 9001:9001 \
quay.io/minio/minio server /data --console-address ":9001"
需要注意的是,容器化部署对于评估MinIO来说完全没问题,但存在一些限制。具体来说,版本控制、对象锁定和存储桶复制等一些高级功能将无法使用。这些功能需要MinIO的分布式部署,而这在单服务器部署中是不可用的。
最后结论
在本文中,我们简要介绍了MinIO,这是一个具有完全S3兼容性的对象存储引擎,并探讨了其在大数据分析、机器学习、CDN和备份恢复等实际应用场景中的价值。虽然它是一个生产级的对象存储系统,但也适用于其他用例。由于其开源、可随处部署以及完全S3兼容,它是开发和测试环境的绝佳替代方案。无论是使用命令行工具、Web控制台还是各种编程语言的SDK,MinIO都提供了灵活的方式来满足不同的存储需求。
相关文章:
MinIO深度解析:从入门到实战——对象存储系统全指南
在当今数字化时代,数据存储至关重要。MinIO作为一款高性能的对象存储系统,正逐渐受到广泛关注。它与云原生存储系统相媲美,并且其API与Amazon S3完全兼容。本文将带您快速了解MinIO,并探讨其在实际中的应用场景。 一、关于MinIO …...
(8)python开发经验
文章目录 1 下载python2 pip安装依赖无法访问3 系统支持4 下载python文档5 设置虚拟环境6 编译安装python 更多精彩内容👉内容导航 👈👉Qt开发 👈👉python开发 👈 1 下载python 下载地址尽量不要下载最新版…...
uniapp自动构建pages.json的vite插件
对于 uniapp 来说,配置 pages.json 无疑是最繁琐的事情,具有以下缺点: 冗长,页面很多时 pages 内容会很长难找,有时候因为内容很长,导致页面配置比较难找,而且看起来比较凌乱json弊端ÿ…...
【MySQL进阶】如何在ubuntu下安装MySQL数据库
前言 🌟🌟本期讲解关于如何在ubuntu环境下安装mysql的详细介绍~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 dz…...
解放双手的全自动抠图工具
软件介绍 本文要介绍的这款软件是Teorex PhotoScissors,是一款全自动抠图软件。 第二段:软件便捷性 这款来自国外的软件堪称神器,目前已解锁可无限使用。使用起来特别方便,无需安装,打开即可直接操作,并…...
Python多进程编程执行任务
我的需求如下:现有一批任务,使用进程池执行,每个任务执行耗时不一样,任务并发执行期间,需要每隔一段时间监控任务执行进度 直接贴代码: import multiprocessing import time import random from multiproc…...
【Linux笔记】——Linux线程封装
🔥个人主页🔥:孤寂大仙V 🌈收录专栏🌈:Linux 🌹往期回顾🌹:【Linux笔记】——Linux线程控制创建、终止与等待|动态库与内核联动 🔖流水不争,争的是…...
ChatGPT + DeepSeek 联合润色的 Prompt 模板指令合集,用来润色SCI论文太香了!
对于非英语母语的作者来说,写SCI论文的时候经常会碰到语法错误、表达不够专业、结构不清晰以及术语使用不准确等问题。传统的润色方式要么成本高、效率低,修改过程又耗时又费力。虽然AI工具可以帮助我们来润色论文,但单独用ChatGPT或DeepSeek都会存在内容泛泛、专业性不足的…...
【typenum】 9 与常量泛型桥接(generic_const_mappings.rs)
一、源码 该代码提供了常量结构体与库类型的转换。 // THIS IS GENERATED CODE //! Module with some const-generics-friendly definitions, to help bridge the gap //! between those and typenum types. //! //! - It requires the const-generics crate feature to be…...
并发学习之synchronized,JVM内存图,线程基础知识
文章目录 Java内存图内存图区域介绍执行流程 进程和线程概念解释线程的6种状态简述等待队列和同步队列(阻塞队列)线程之间是独立的 synchronized静态方法非静态方法代码块 知识总结: 方法区存储类信息正在执行的程序叫进程,进程会…...
使用Docker部署Nacos
sudo systemctl start docker sudo systemctl enable docker docker --version 步骤 2: 拉取 Nacos Docker 镜像 拉取 Nacos 镜像: 你可以从 Docker Hub 上拉取官方的 Nacos 镜像,使用以下命令: docker pull nacos/nacos-server 这会从 …...
如何 naive UI n-data-table 改变行移动光标背景色
默认是light 灰,想换个显眼包色,折腾半天,可以了。 无废话上代码: <template><n-data-tablesize"small":columns"columns":data"sortedDataList":bordered"true":row-key"…...
Maven 插件扩展点与自定义生命周期
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...
Redis的发布订阅模型是什么,有哪些缺点?
Redis 发布订阅模型概述 Redis 发布订阅(Pub/Sub)是一种消息广播模式,核心角色包括: 发布者(Publisher):向指定频道(Channel)发送消息。频道(Channel&#…...
【EDA软件】【联合Modelsim仿真使用方法】
背景 业界EDA工具仿真功能是必备的,例如Vivado自带仿真工具,且无需联合外部仿真工具,例如MoodelSim。 FUXI工具仿真功能需要联合Modelsim,才能实现仿真功能。 方法一:FUXI联合ModelSim 1 添加testbench文件 新建to…...
C语言_动态内存管理
1. 为什么存在动态内存分配 ? 当前,我们掌握的内存开辟方式有: int val22;// 在栈空间上开辟四个字节 char arr[10]{0};// 在栈空间上开辟10个字节的连续空间而上述的开辟空间的方式有两个特点: 空间开辟大小示固定的数组在申明的时候&am…...
使用Langfuse和RAGAS,搭建高可靠RAG应用
大家好,在人工智能领域,RAG系统融合了检索方法与生成式AI模型,相比纯大语言模型,提升了准确性、减少幻觉且更具可审计性。不过,在实际应用中,当建好RAG系统投入使用时,如何判断接收信息是否正确…...
MySQL 数据库优化:ShardingSphere 原理及实践
在高并发、大数据量的业务场景下,MySQL 作为关系型数据库的核心存储引擎,其性能和扩展性面临严峻挑战。ShardingSphere 作为 Apache 顶级开源项目,提供了分布式数据库解决方案,通过分库分表、读写分离、弹性迁移等能力,帮助开发者实现 MySQL 的水平扩展与性能优化。 本文…...
【Redis】零碎知识点(易忘 / 易错)总结回顾
一、Redis 是一种基于键值对(key-value)的 NoSQL 数据库 二、Redis 会将所有数据都存放在内存中,所以它的读写性能非常惊人 Redis 还可以将内存的数据利用快照和日志的形式保存到硬盘上,这样在发生类似断电或者机器故障时…...
谷歌浏览器(Google Chrome)136.0.7103.93便携增强版|Win中文|安装教程
软件下载 【名称】:谷歌浏览器(Google Chrome)136.0.7103.93 【大小】:170M 【语言】:简体中文 【安装环境】:Win10/Win11 【夸克网盘下载链接】(务必手机注册): h…...
【滑动窗口】LeetCode 209题解 | 长度最小的子数组
长度最小的子数组 前言:滑动窗口一、题目链接二、题目三、算法原理解法一:暴力枚举解法二:利用单调性,用滑动窗口解决问题那么怎么用滑动窗口解决问题?分析滑动窗口的时间复杂度 四、编写代码 前言:滑动窗口…...
WebXR教学 07 项目5 贪吃蛇小游戏
WebXR教学 07 项目5 贪吃蛇小游戏 index.html <!DOCTYPE html> <html> <head><title>3D贪吃蛇小游戏</title><style>body { margin: 0; }canvas { display: block; }#score {position: absolute;top: 20px;left: 20px;color: white;font-…...
2.1.3
# Load the data file_path finance数据集.csv data pd.__________(file_path) --- data pd.read_csv(file_path) # 识别数值列用于箱线图 numeric_cols data.select_dtypes(include[float64, int64]).__________ --- numeric_cols data.select_dtypes(include[flo…...
StreamCap v0.0.1 直播录制工具 支持批量录制和直播监控
—————【下 载 地 址】——————— 【本章下载一】:https://drive.uc.cn/s/2fa520a8880d4 【本章下载二】:https://pan.xunlei.com/s/VOQDt_3v0DYPxrql5y2zxgO1A1?pwd2kqi# 【百款黑科技】:https://ucnygalh6wle.feishu.cn/wiki/…...
小蜗牛拨号助手用户使用手册
一、软件简介 小蜗牛拨号助手是一款便捷实用的拨号辅助工具,能自动识别剪贴板中的电话号码,支持快速拨号操作。最小化或关闭窗口后,程序将在系统后台运行,还可设置开机自启,方便随时使用,提升拨号效率。 …...
哈夫曼树(Huffman Tree)
1. 基本概念 哈夫曼树(Huffman Tree),又称最优二叉树,是一种带权路径长度(WPL, Weighted Path Length)最短的二叉树。它主要用于数据压缩和编码优化,通过为不同权值的节点分配不同长度的…...
布隆过滤器和布谷鸟过滤器
原文链接:布隆过滤器和布谷鸟过滤器 布隆过滤器 介绍 布隆过滤器(Bloom Filter)是 1970 年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数,检查值是“可能在集合中”还是“绝对不在集合中” 空间效率高&a…...
Vue+Vite学习笔记
Cesium与Vue集成:详解Cesium-Vue项目搭建与运行步骤指南 - 云原生实践 为什么按照这篇↑完成三步会有能打开的网址,不止localhost8080还有用127.0.0.1那个表示的。 用这个构建,出来的是localhost:5173?...
UE 材质基础 第一天
课程:虚幻引擎【UE5】材质宝典【初学者材质基础入门系列】-北冥没有鱼啊_-稍后再看-哔哩哔哩视频 随便记录一些 黑色是0到负无穷,白色是1到无穷 各向异性 有点类似于高光,可以配合切线来使用,R G B 相当于 X Y Z轴,切…...
网络编程中的直接内存与零拷贝
本篇文章会介绍 JDK 与 Linux 网络编程中的直接内存与零拷贝的相关知识,最后还会介绍一下 Linux 系统与 JDK 对网络通信的实现。 1、直接内存 所有的网络通信和应用程序中(任何语言),每个 TCP Socket 的内核中都有一个发送缓冲区…...
语音转文字
语音转文字工具大全 1. 网易 网易见外(网页) 地址:网易见外 - AI智能语音转写听翻平台 特点:完全免费,支持音频转文字,每日上限2小时 有道云笔记(安卓/iOS) 地址&a…...
软件设计师考试《综合知识》创建型设计模式考点分析
软件设计师考试《综合知识》创建型设计模式考点分析 1. 分值占比与考察趋势(75分制) 模式名称近5年题量分值占比高频考察点最新趋势抽象工厂模式45.33%产品族创建/跨平台应用结合微服务配置考查(2023)工厂方法模式56.67%单一产品扩展/日志系统与IoC容器…...
【八股战神篇】Java集合高频面试题
专栏简介 八股战神篇专栏是基于各平台共上千篇面经,上万道面试题,进行综合排序提炼出排序前百的高频面试题,并对这些高频八股进行关联分析,将每个高频面试题可能进行延伸的题目再次进行排序选出高频延伸八股题。面试官都是以点破…...
STM32F103定时器1每毫秒中断一次
定时器溢出中断,在程序设计中经常用到。在使用TIM1和TIM8溢出中断时,需要注意“TIM_TimeBaseStructure.TIM_RepetitionCounter0;”,它表示溢出一次,并可以设置中断标志位。 TIM1_Interrupt_Initializtion(1000,72); //当arr1…...
BC 范式与 4NF
接下来我们详细解释 BC 范式(Boyce-Codd范式,简称 BCNF),并通过具体例子说明其定义和应用。 一、BC范式的定义 BC范式(Boyce-Codd范式,BCNF)是数据库规范化理论中的一种范式,它比第…...
Data whale LLM universe
使用LLM API开发应用 基本概念 Prompt Prompt 最初指的是自然语言处理研究人员为下游任务设计的一种任务专属的输入模板。 Temperature 使用Temperature参数控制LLM生成结果的随机性和创造性,一般取值设置在0~1之间,当取值接近1的时候预测的随机性较…...
数据结构第七章(四)-B树和B+树
数据结构第七章(四) B树和B树一、B树1.B树2.B树的高度 二、B树的插入删除1.插入2.删除 三、B树1.B树2.B树的查找3.B树和B树的区别 总结 B树和B树 还记得我们的二叉排序树BST吗?比如就是下面这个: 结构体也就关键字和左右指针&…...
如何利用 Python 获取京东商品 SKU 信息接口详细说明
在电商领域,SKU(Stock Keeping Unit,库存进出计量的基本单元)信息是商品管理的核心数据之一。它不仅包含了商品的规格、价格、库存等关键信息,还直接影响到库存管理、价格策略和市场分析等多个方面。京东作为国内知名的…...
【机器学习】第二章模型的评估与选择
A.关键概念 2.1 经验误差和过拟合 经验误差与泛化误差:学习器在训练集上的误差为经验误差,在新样本上的误差为泛化误差 过拟合:学习器训练过度后,把训练样本自身的一些特点当作所有潜在样本具有一般性质,使得泛化性能…...
[PMIC]PMIC重要知识点总结
PMIC重要知识点总结 摘要:PMIC (Power Management Integrated Circuit) 是现代电子设备中至关重要的组件,负责电源管理,包括电压调节、电源转换、电池管理和功耗优化等。PMIC 中的数字部分主要涉及控制逻辑、状态机、寄存器配置、通信接口&am…...
LVGL- Calendar 日历控件
1 日历控件 1.1 日历背景 lv_calendar 是 LVGL(Light and Versatile Graphics Library)提供的标准 GUI 控件之一,用于显示日历视图。它支持用户查看某年某月的完整日历,还可以实现点击日期、标记日期、导航月份等操作。这个控件…...
ubuntu安装google chrome
更新系统 sudo apt update安装依赖 sudo apt install curl software-properties-common apt-transport-https ca-certificates -y导入 GPG key curl -fSsL https://dl.google.com/linux/linux_signing_key.pub | gpg --dearmor | sudo tee /usr/share/keyrings/google-chrom…...
如何开发专业小模型
在专业领域场景下,通过针对性优化大模型的词汇表、分词器和模型结构,确实可以实现参数规模的显著缩减而不损失专业能力。这种优化思路与嵌入式设备的字库剪裁有相似性,但需要结合大模型的特性进行系统性设计。以下从技术可行性、实现方法和潜…...
EXO 可以将 Mac M4 和 Mac Air 连接起来,并通过 Ollama 运行 DeepSeek 模型
EXO 可以将 Mac M4 和 Mac Air 连接起来,并通过 Ollama 运行 DeepSeek 模型。以下是具体实现方法: 1. EXO 的分布式计算能力 EXO 是一个支持 分布式 AI 计算 的开源框架,能够将多台 Mac 设备(如 M4 和 Mac Air)组合成…...
Git Worktree 使用
新入职了一家公司,发现不同项目用的使用一个 git 仓库管理。不久之后我看到这篇文章。 Git 的设计部分是为了支持实验。一旦你确定你的工作被安全地跟踪,并且存在安全的状态,以便在出现严重错误时可以恢复,你就不会害怕尝试新…...
【Linux网络】内网穿透
内网穿透 基本概念 内网穿透(Port Forwarding/NAT穿透) 是一种网络技术,主要用于解决处于 内网(局域网)中的设备无法直接被公网访问 的问题。 1. 核心原理 内网与公网的隔离:家庭、企业等局域网内的设备…...
反射机制动态解析
代码解释与注释 package com.xie.javase.reflect;import java.lang.reflect.Field; import java.lang.reflect.Modifier;public class ReflectTest01 {public static void main(String[] args) throws ClassNotFoundException {// 1. 获取java.util.HashMap类的Class对象Class…...
10 分钟打造一款超级马里奥小游戏,重拾20 年前的乐趣
我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 你好,我是悟空。 前言 小时候看到村里的大朋友家里都有一款 FC 游戏机,然后旁边还放…...
鸿蒙ArkUI体验:Hexo博客客户端开发心得
最近部门也在跟进鸿蒙平台的业务开发,自己主要是做 Android 开发,主要使用 Kotlin/Java 语言。,需要对新的开发平台和开发模式进行学习,在业余时间开了个项目练手,做了个基于 Hexo 博客内容开发的App。鸿蒙主要使用Ark…...
人工智能100问☞第25问:什么是循环神经网络(RNN)?
目录 一、通俗解释 二、专业解析 三、权威参考 循环神经网络(RNN)是一种通过“记忆”序列中历史信息来处理时序数据的神经网络,可捕捉前后数据的关联性,擅长处理语言、语音等序列化任务。 一、通俗解释 想象你在和朋友聊天,每说一句话都会根据之前的对话内容调整语气…...