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

C++ 游戏开发

C++游戏开发

C++ 是一种高效、灵活且功能强大的编程语言,因其性能和控制能力而在游戏开发中被广泛应用。许多著名的游戏引擎,如 Unreal Engine、CryEngine 和 Godot 等,都依赖于 C++ 进行核心开发。本文将详细介绍 C++ 在游戏开发中的应用,从引擎选择、基本游戏架构到图形处理,并提供一些展示代码。
在这里插入图片描述

1. C++ 游戏开发的优势

1.1 高性能

游戏开发中的一个关键要求是高性能,尤其是在图形处理、物理引擎和实时交互方面。C++ 作为一门面向对象语言,同时提供了直接操作硬件的能力和底层内存管理的功能,这使得它可以最大限度地优化游戏性能。

1.2 精确的内存管理

C++ 提供了手动内存管理的功能,通过 newdelete 操作符,开发者可以更加精细地控制资源的分配与释放。相比于 Java 或 C# 等依赖垃圾回收机制的语言,C++ 的手动内存管理在需要极高性能的游戏开发场景中具有更大的优势。

1.3 广泛的库支持

C++ 拥有丰富的第三方库支持,如用于物理引擎的 Bullet Physics、用于图形渲染的 OpenGL 以及 DirectX、用于声音处理的 FMOD 等。开发者可以通过集成这些库,快速搭建游戏中的关键组件。
在这里插入图片描述

2. C++ 游戏开发的基本框架

在开始开发一个游戏时,我们需要定义游戏的基本架构。无论是 2D 还是 3D 游戏,通常都需要以下几个主要模块:

  • 游戏引擎:负责管理游戏循环、场景、物理模拟等。
  • 输入系统:处理用户输入(如键盘、鼠标、手柄等)。
  • 渲染系统:负责图形的渲染和绘制。
  • 音频系统:处理游戏中的音效和背景音乐。
  • 物理系统:模拟物体之间的物理交互,如碰撞、重力等。

2.1 游戏循环

游戏循环是游戏的核心部分,它不断地更新游戏状态并渲染画面。典型的游戏循环包含三个步骤:

  1. 处理输入
  2. 更新游戏状态
  3. 渲染帧

以下是一个简单的 C++ 游戏循环的代码示例:

#include <iostream>
#include <chrono>bool isRunning = true;void processInput() {// 假设这里处理键盘或鼠标输入std::cout << "Processing input..." << std::endl;
}void update() {// 更新游戏状态,如角色移动、碰撞检测等std::cout << "Updating game state..." << std::endl;
}void render() {// 渲染图形到屏幕上std::cout << "Rendering frame..." << std::endl;
}int main() {auto lastFrameTime = std::chrono::high_resolution_clock::now();while (isRunning) {// 计算每帧间隔时间auto currentFrameTime = std::chrono::high_resolution_clock::now();std::chrono::duration<float> deltaTime = currentFrameTime - lastFrameTime;lastFrameTime = currentFrameTime;processInput();  // 处理输入update();        // 更新游戏状态render();        // 渲染帧// 简单退出条件char quit;std::cout << "Press q to quit: ";std::cin >> quit;if (quit == 'q') isRunning = false;}return 0;
}

这个简单的例子展示了一个基本的游戏循环,它不断处理输入、更新游戏状态和渲染画面。

2.2 引入第三方库:SDL

为了在实际游戏开发中获得更好的图形处理能力,我们可以使用 SDL(Simple DirectMedia Layer)库。SDL 是一个跨平台的多媒体库,提供了对音频、键盘、鼠标、显示等硬件的低级访问。

2.2.1 安装 SDL

在基于 Linux 的系统上,你可以通过包管理器安装 SDL。比如在 Debian 系列系统上,使用以下命令:

sudo apt-get install libsdl2-dev
2.2.2 使用 SDL 创建窗口和处理输入

以下是一个使用 SDL 创建简单游戏窗口并处理输入的代码示例:

#include <SDL2/SDL.h>
#include <iostream>const int WINDOW_WIDTH = 800;
const int WINDOW_HEIGHT = 600;int main(int argc, char* argv[]) {// 初始化 SDLif (SDL_Init(SDL_INIT_VIDEO) < 0) {std::cerr << "Failed to initialize SDL: " << SDL_GetError() << std::endl;return -1;}// 创建窗口SDL_Window* window = SDL_CreateWindow("C++ Game Development",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,WINDOW_WIDTH, WINDOW_HEIGHT,SDL_WINDOW_SHOWN);if (!window) {std::cerr << "Failed to create window: " << SDL_GetError() << std::endl;SDL_Quit();return -1;}// 创建渲染器SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);if (!renderer) {std::cerr << "Failed to create renderer: " << SDL_GetError() << std::endl;SDL_DestroyWindow(window);SDL_Quit();return -1;}bool isRunning = true;SDL_Event event;// 游戏主循环while (isRunning) {while (SDL_PollEvent(&event)) {if (event.type == SDL_QUIT) {isRunning = false;}}// 设置渲染颜色(红色)SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);// 清空屏幕SDL_RenderClear(renderer);// 绘制内容(此处为简单的红色背景)SDL_RenderPresent(renderer);}// 清理 SDL 资源SDL_DestroyRenderer(renderer);SDL_DestroyWindow(window);SDL_Quit();return 0;
}

2.3 使用图形 API:OpenGL

SDL 提供了基础的窗口和输入管理功能,但如果需要更高级的图形处理功能,如 3D 渲染,则需要结合图形 API,如 OpenGL。以下是一个简单的 OpenGL 程序,它展示了如何在 C++ 中使用 OpenGL 进行渲染。

2.3.1 安装 OpenGL

在 Linux 上可以使用以下命令安装 OpenGL:

sudo apt-get install libgl1-mesa-dev libglu1-mesa-dev
2.3.2 OpenGL 渲染示例
#include <GL/gl.h>
#include <GL/glu.h>
#include <SDL2/SDL.h>
#include <iostream>void render() {// 清除颜色和深度缓冲区glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glLoadIdentity();// 开始绘制三角形glBegin(GL_TRIANGLES);glColor3f(1.0f, 0.0f, 0.0f); // 红色glVertex3f(-0.5f, -0.5f, 0.0f);glColor3f(0.0f, 1.0f, 0.0f); // 绿色glVertex3f(0.5f, -0.5f, 0.0f);glColor3f(0.0f, 0.0f, 1.0f); // 蓝色glVertex3f(0.0f, 0.5f, 0.0f);glEnd();
}int main(int argc, char* argv[]) {SDL_Init(SDL_INIT_VIDEO);// 设置 OpenGL 上下文属性SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3);SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);SDL_Window* window = SDL_CreateWindow("OpenGL Triangle", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, SDL_WINDOW_OPENGL);SDL_GLContext glContext = SDL_GL_CreateContext(window);if (!glContext) {std::cerr << "Failed to create OpenGL context: " << SDL_GetError() << std::endl;return -1;}bool isRunning = true;SDL_Event event;while (isRunning) {while (SDL_PollEvent(&event)) {if (event.type == SDL_QUIT) {isRunning = false;}}render();SDL_GL_SwapWindow(window);}SDL_GL_DeleteContext```cpp(glContext);SDL_DestroyWindow(window);SDL_Quit();return 0;
}

2.3.3 代码解析

该示例代码展示了如何使用 OpenGL 在 C++ 程序中渲染一个简单的三角形。以下是代码的几个关键部分:

  • OpenGL 上下文设置:在使用 OpenGL 渲染时,首先需要通过 SDL_GL_SetAttribute 函数设置 OpenGL 上下文的版本和配置,确保兼容现代的 OpenGL 核心功能。
  • 渲染循环render() 函数中包含了 OpenGL 的基本绘图过程,首先清除缓冲区,然后使用 glBegin()glEnd() 绘制一个三角形。
  • 颜色设置:通过 glColor3f(),我们为三角形的每个顶点设置不同的颜色,最终 OpenGL 会自动为每个像素插值生成过渡的颜色。
  • 窗口交换缓冲:每一帧渲染结束后,使用 SDL_GL_SwapWindow() 函数交换前后缓冲区,以更新屏幕内容。

2.4 使用物理引擎:Bullet Physics

物理引擎是现代游戏中不可或缺的一部分,特别是在处理物体碰撞、刚体动力学和力学仿真时,使用物理引擎可以大大简化开发工作。Bullet 是 C++ 社区中常用的开源物理引擎。

2.4.1 安装 Bullet Physics

在 Linux 系统上可以通过以下命令安装 Bullet 物理引擎:

sudo apt-get install libbullet-dev
2.4.2 Bullet 示例代码

以下是使用 Bullet 物理引擎进行简单刚体动力学仿真的示例代码:

#include <btBulletDynamicsCommon.h>
#include <iostream>int main() {// 创建 Bullet 世界btDefaultCollisionConfiguration* collisionConfig = new btDefaultCollisionConfiguration();btCollisionDispatcher* dispatcher = new btCollisionDispatcher(collisionConfig);btBroadphaseInterface* overlappingPairCache = new btDbvtBroadphase();btSequentialImpulseConstraintSolver* solver = new btSequentialImpulseConstraintSolver();btDiscreteDynamicsWorld* dynamicsWorld = new btDiscreteDynamicsWorld(dispatcher, overlappingPairCache, solver, collisionConfig);dynamicsWorld->setGravity(btVector3(0, -9.8, 0));// 创建地面平面btCollisionShape* groundShape = new btStaticPlaneShape(btVector3(0, 1, 0), 1);btDefaultMotionState* groundMotionState = new btDefaultMotionState(btTransform(btQuaternion(0, 0, 0, 1), btVector3(0, -1, 0)));btRigidBody::btRigidBodyConstructionInfo groundRigidBodyCI(0, groundMotionState, groundShape, btVector3(0, 0, 0));btRigidBody* groundRigidBody = new btRigidBody(groundRigidBodyCI);dynamicsWorld->addRigidBody(groundRigidBody);// 创建动态刚体btCollisionShape* fallShape = new btSphereShape(1);btDefaultMotionState* fallMotionState = new btDefaultMotionState(btTransform(btQuaternion(0, 0, 0, 1), btVector3(0, 50, 0)));btScalar mass = 1;btVector3 fallInertia(0, 0, 0);fallShape->calculateLocalInertia(mass, fallInertia);btRigidBody::btRigidBodyConstructionInfo fallRigidBodyCI(mass, fallMotionState, fallShape, fallInertia);btRigidBody* fallRigidBody = new btRigidBody(fallRigidBodyCI);dynamicsWorld->addRigidBody(fallRigidBody);// 模拟物理世界for (int i = 0; i < 300; i++) {dynamicsWorld->stepSimulation(1 / 60.f, 10);btTransform trans;fallRigidBody->getMotionState()->getWorldTransform(trans);std::cout << "Sphere height: " << trans.getOrigin().getY() << std::endl;}// 清理内存dynamicsWorld->removeRigidBody(fallRigidBody);delete fallRigidBody->getMotionState();delete fallRigidBody;delete fallShape;dynamicsWorld->removeRigidBody(groundRigidBody);delete groundRigidBody->getMotionState();delete groundRigidBody;delete groundShape;delete dynamicsWorld;delete solver;delete overlappingPairCache;delete dispatcher;delete collisionConfig;return 0;
}

2.4.3 代码解析

该示例展示了如何使用 Bullet 进行刚体仿真:

  • btDiscreteDynamicsWorld:物理世界的核心类,它负责管理所有刚体、碰撞检测和力学计算。
  • btRigidBody:表示物理世界中的刚体,地面使用了一个静态平面,而动态物体使用了一个球体形状。
  • stepSimulation:物理世界的更新函数,它按一定时间步长模拟物理现象。

通过该代码,你可以看到刚体(球体)在重力作用下从初始高度 50 逐渐下降到地面,并通过物理引擎计算其位置。
在这里插入图片描述

3. C++ 游戏开发总结

C++ 在游戏开发中有着不可替代的优势,尤其是在性能要求极高的实时渲染、物理仿真等方面。结合 SDL、OpenGL 和 Bullet 等第三方库,可以快速构建一个功能完整的游戏引擎框架,并在此基础上实现各种游戏功能。

本文通过示例展示了如何使用 C++ 创建基本的游戏循环,如何通过 SDL 进行窗口管理和渲染,如何使用 OpenGL 渲染简单的图形,最后如何集成 Bullet 物理引擎进行物理仿真。游戏开发是一个复杂的过程,C++ 提供了强大的工具和灵活的架构,帮助开发者创建出高性能、可扩展的游戏。希望本文能为你理解和使用 C++ 开发游戏提供一个良好的起点。
在这里插入图片描述

相关文章:

C++ 游戏开发

C游戏开发 C 是一种高效、灵活且功能强大的编程语言&#xff0c;因其性能和控制能力而在游戏开发中被广泛应用。许多著名的游戏引擎&#xff0c;如 Unreal Engine、CryEngine 和 Godot 等&#xff0c;都依赖于 C 进行核心开发。本文将详细介绍 C 在游戏开发中的应用&#xff0…...

【历年CSP-S复赛第一题】暴力解法与正解合集(2019-2022)

P5657 [CSP-S2019] 格雷码P7076 [CSP-S2020] 动物园P7913 [CSP-S 2021] 廊桥分配P8817 [CSP-S 2022] 假期计划 P5657 [CSP-S2019] 格雷码 暴力50分 #include<bits/stdc.h> #define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0) #define int long long #d…...

基于PyQt5和SQLite的数据库操作程序

基于PyQt5和SQLite的数据库操作程序:功能解析 在现代办公和数据处理中,数据库操作是不可或缺的一部分。然而,传统的数据库管理工具往往界面复杂,操作繁琐,对于非专业人士来说存在一定的学习曲线。为了解决这个问题,我们开发了一款基于PyQt5和SQLite的数据库操作程序。该…...

在Ubuntu 20.04中安装CARLA

0. 引言 CARLA (Car Learning to Act) 是一款开源自动驾驶模拟器&#xff0c;其支持自动驾驶系统全管线的开发、训练和验证&#xff08;Development, Training, and Validation of autonomous driving systems&#xff09;。Carla提供了丰富的数字资产&#xff0c;例如城市布局…...

【高中数学/对数/导数】曲线y=ln|x|过坐标原点的两切线方程为?

【问题】 曲线yln|x|过坐标原点的两切线方程为&#xff1f;&#xff08;高考真题&#xff09; 【出处】 《高考数学 函数与导数题型解题研究》P5第8题 中原教研工作室编著 【解答】 yln|x|的图线分两部分&#xff0c;y轴左边的部分是ylnx的镜像 所以知ylnx上切线过原点的…...

Qt CMake

使用 CMake 构建 CMake 是一款用于简化跨不同平台开发项目的构建流程的工具。 CMake 可自动生成构建系统&#xff0c;如 Makefile 和 Visual Studio 项目文件。 CMake 是一个第三方工具&#xff0c;有自己的文档。 本主题介绍如何在 Qt 5 中使用 CMake 3.1.0。 开始使用 CMak…...

制造企业各部门如何参与生产成本控制与管理?

​国内制造业的分量可不轻&#xff0c;从日常生活用品到高端工业设备&#xff0c;中国制造几乎涵盖了各个领域。 不过很多制造业企业在管理方面确实存在一些难题&#xff1a;成本控制不容易&#xff0c;产品质量并不稳定&#xff0c;生产周期也常常较长。 一、中国制造业生产管…...

FireRedTTS - 小红书最新开源AI语音克隆合成系统 免训练一键音频克隆 本地一键整合包下载

小红书技术团队FireRed最近推出了一款名为FireRedTTS的先进语音合成系统&#xff0c;该系统能够基于少量参考音频快速模仿任意音色和说话风格&#xff0c;实现独特的音频内容创造。 FireRedTTS 只需要给定文本和几秒钟参考音频&#xff0c;无需训练&#xff0c;就可模仿任意音色…...

活体检测标签之2.4G有源RFID--SI24R2F+

首先从客户对食品安全和可追溯性的关注切入&#xff0c;引出活体标签这个解决方案。接着分别阐述活体标签在动物养殖和植物产品方面的应用&#xff0c;强调其像 “身份证” 一样记录重要信息&#xff0c;让客户能够了解食品的来源和成长历程&#xff0c;从而放心食用。最后呼吁…...

Web3Auth 如何工作?

Web3Auth 用作钱包基础设施&#xff0c;为去中心化应用程序 (dApp) 和区块链钱包提供增强的灵活性和安全性。在本文档中&#xff0c;我们将探索 Web3Auth 的功能&#xff0c;展示它如何为每个用户和应用程序生成唯一的加密密钥提供程序。 高级架构 Web3Auth SDK 完全存在于用…...

问:SQL中join语法的差异?

在SQL中&#xff0c;JOIN语法用于结合来自两个或多个表的数据。不同类型的JOIN会基于不同的条件来合并表中的数据。以下是几种常见的JOIN及其差异&#xff1a; 假设我们有两个表&#xff1a;employees 和 departments。 employees 表: employee_idnamedepartment_id1Alice10…...

计算机网络各层有哪些协议?计算机网络协议解析:从拟定到实现,全面了解各层协议的作用与区别

在数字化时代&#xff0c;计算机网络无处不在&#xff0c;已经成为不可或缺的一部分。为了让不同设备能够有效地进行通信&#xff0c;网络协议作为一种约定和规则&#xff0c;确保了数据在网络中的可靠传输。今天&#xff0c;我们将深入探讨计算机网络的各层协议&#xff0c;详…...

解决方案:机器学习中,基学习器 跟 弱学习器,有什么区别

文章目录 一、现象二、解决方案 一、现象 在工作中&#xff0c;在机器学习中&#xff0c;有时候会看到基学习器 跟 弱学习器&#xff0c;会容易混淆&#xff0c;所以整理一下 二、解决方案 在机器学习中&#xff0c;“基学习器”&#xff08;Base Learner&#xff09;和“弱…...

【Python】ftfy 使用指南:修复 Unicode 编码问题

ftfy&#xff08;fixes text for you&#xff09;是一个专为修复各种文本编码错误而设计的 Python 工具。它的主要目标是将损坏的 Unicode 文本恢复为正确的 Unicode 格式。ftfy 并非用于处理非 Unicode 编码&#xff0c;而是旨在修复因为编码不一致、解码错误或混合编码导致的…...

第9课-C++String功能的探索

1&#xff1a;C 语言中的字符串 vs C string 类 1.1 C 语言中的字符串 在 C 语言中&#xff0c;字符串本质上是以 \0 结尾的字符数组。C 标准库为此提供了 str 系列函数&#xff0c;如 strlen()、strcpy() 和 strcat() 等。虽然这些函数可以操作字符串&#xff0c;但它们的操…...

基于Hive和Hadoop的保险分析系统

本项目是一个基于大数据技术的保险分析系统&#xff0c;旨在为用户提供全面的汽车保险信息和深入的保险价格分析。系统采用 Hadoop 平台进行大规模数据存储和处理&#xff0c;利用 MapReduce 进行数据分析和处理&#xff0c;通过 Sqoop 实现数据的导入导出&#xff0c;以 Spark…...

国庆节快乐前端(HTML+CSS+JavaScript+BootStrap.min.css)

一、效果展示 二、制作缘由 最近&#xff0c;到了国庆节&#xff0c;自己呆在学校当守校人&#xff0c;太无聊了&#xff0c;顺便做一个小demo帮祖国目前庆生&#xff01;&#xff01;&#xff01; 三、项目目录结构 四、准备工作 (1)新建好对应的文件目录 为了方便&#xff…...

【重学 MySQL】四十九、阿里 MySQL 命名规范及 MySQL8 DDL 的原子化

【重学 MySQL】四十九、阿里 MySQL 命名规范及 MySQL8 DDL 的原子化 阿里 MySQL 命名规范MySQL8 DDL的原子化 阿里 MySQL 命名规范 【强制】表名、字段名必须使用小写字母或数字&#xff0c;禁止出现数字开头&#xff0c;禁止两个下划线中间只出现数字。数据库字段名的修改代价…...

PyTorch源码系列(一)——Optimizer源码详解

目录 1. Optimizer类2. Optimizer概览3. 源码解析3.1 构造方法3.1.1 全局设置情形3.1.2 局部设置情形3.1.3 覆盖测试3.1.4 逐行讲解 3.2 add_param_group3.3 step3.4 zero_grad3.5 self.state3.6 state_dict3.7 load_state_dict 4. SGD Optimizer5. 极简版Optimizer源码6. 自定…...

Java - LeetCode面试经典150题(三)

区间 228. 汇总区间 题目 给定一个 无重复元素 的 有序 整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说&#xff0c;nums 的每个元素都恰好被某个区间范围所覆盖&#xff0c;并且不存在属于某个范围但不属于 nums 的数字 x 。 列表中…...

基于SpringBoot+Vue+MySQL的民宿预订平台

系统展示 用户前台界面 管理员后台界面 商家后台界面 系统背景 随着旅游业的蓬勃发展&#xff0c;民宿作为一种独特的住宿方式&#xff0c;受到了越来越多游客的青睐。然而&#xff0c;传统的民宿预定方式往往存在信息不对称、效率低下等问题&#xff0c;难以满足游客的个性化需…...

Hadoop krb5.conf 配置详解

krb5.conf文件是Kerberos认证系统中的一个关键配置文件&#xff0c;它包含了Kerberos的配置信息&#xff0c;如KDC&#xff08;Key Distribution Centers&#xff09;和Kerberos相关域的管理员服务器位置、当前域和Kerberos应用的默认设置、以及主机名与Kerberos域的映射等。以…...

工程师 - DNS请求过程

DNS&#xff08;Domain Name System&#xff0c;域名系统&#xff09;是互联网的重要基础设施之一&#xff0c;其主要功能是将人们容易记忆的域名&#xff08;例如 www.example.com&#xff09;转换为计算机能识别的IP地址&#xff08;例如 192.0.2.1&#xff09;&#xff0c;类…...

Solidity智能合约中的事件和日志

1. Solidity 中的事件和日志概述 1.1 什么是事件&#xff1f; 在 Solidity 中&#xff0c;事件&#xff08;Event&#xff09;是一种允许智能合约与外部世界进行通信的机制。通过触发事件&#xff0c;可以记录合约执行中的关键操作&#xff0c;并将这些操作发送到链上。事件的…...

第四十一篇-Docker安装Neo4j

创建目录 mkdir /opt/neo4j-data创建 docker run \ -d --name neo4j \ -p 7474:7474 -p 7687:7687 \ -v /opt/neo4j-data/data:/data \ -v /opt/neo4j-data/logs:/logs \ -v /opt/neo4j-data//conf:/var/lib/neo4j/conf \ -v /opt/neo4j-data/plugins:/plugins \ --env NEO4J…...

数电基础(组合逻辑电路+Proteus)

1.组合逻辑电路 1.1组合逻辑电路的分析 1.1.1组合逻辑电路的定义 组合逻辑电路的定义 &#xff08;1&#xff09;对于一个逻辑电路&#xff0c;其输出状态在任何时刻只取决于同一时刻的输入状态&#xff0c;而与电路的原来状态无关&#xff0c;这种电路被定义为组合逻辑电路…...

自给自足:手搓了一个睡眠监测仪,用着怎么样?

很久不分享手搓党作品拉&#xff01; 今天分享一个“基于毫米波雷达的睡眠监测仪”作品&#xff01; 用Air700E开发板毫米波雷达&#xff0c;手搓一个开箱即用的睡眠监测仪&#xff0c;不花冤枉钱&#xff01; 来仔细瞧瞧&#xff01; 一、项目原理及硬件制作 毫米波是指频率…...

Miniforge详细安装教程(macOs和Windows)

(注&#xff1a;主要是解决商业应用anaconda收费问题&#xff0c;这是轻量级的代替&#xff0c;个人完全可以使用anaconda和miniconda) Miniforge 是一个轻量级的包管理器&#xff0c;类似于 Anaconda 和 Miniconda。它主要用于安装基于 conda 的 Python 环境&#xff0c;专注于…...

HDFS Shell作业1

1.在HDFS上建立/user/stu/自己学号&#xff0c;和/user/stu/input目录。 命令&#xff1a; hdfs dfs -mkdir -p /user/stu/22 hdfs dfs -mkdir /user/stu/input 2.用两种不同的方法上传albums.csv至HDFS的学号目录和input目录中。 命令&#xff1a; hdfs dfs -put par…...

工业交换机一键重启的好处

在当今高度自动化和智能化的工业环境中&#xff0c;工业交换机作为网络系统中至关重要的一环&#xff0c;其稳定性和可靠性直接影响到整个生产过程的顺利进行。为了更好地维护这些设备的健康运行&#xff0c;一键重启功能应运而生&#xff0c;并呈现出诸多显著的好处。 首先&am…...

wordpress主题haowa导航下载/网站怎么seo关键词排名优化推广

文章目录 消息存储机制 1.前言 ⒉.核心存储类:DefaultMessageStore 3.消息存储流程 4.消息存储文件 5.存储文件内存映射 5.1.MapperFileQueue 5.2.MappedFile 5.2.1.commit 5.2.2.flush 5.3.TransientStorePool 6.刷盘机制 6.1.同步刷盘 6.2.异步刷盘 消息存储机制 1.前言 …...

成都网站建设顶呱呱/系统优化软件十大排名

一、需求 这两天遇到这样一个事情&#xff0c;因为某测试任务&#xff0c;需要在操作过程中连续的截图&#xff0c;最终分析截图。之前同事用的工具兼容性特别的不好&#xff0c;需要root&#xff0c;并且只适配固定几个版本的机型&#xff0c;因此我决定自己实现一个。首先最…...

房地产做网站怎样吸引客户/个人免费自助建站网站

indexDB 是一种低级api &#xff0c;用于客户端存储大量结构化数据。该api使用索引来实现对该数据的高性能搜索。为应用提供离线版本 indexdb 特点 键值存储。 IndexedDB 内部采用对象仓库&#xff08;object store&#xff09;存放数据。所有类型的数据都可以直接存入&#…...

wordpress博客常用插件/洛阳seo博客

spring.datasource.driver-class-namecom.mysql.jdbc.Driver 后面有空格...

一般做音响的有哪些网站/线上推广策划方案范文

相关文章: Top K problem 堆实现 找到无序数组中最小(最大)的k个数_fareast_mzh的博客-CSDN博客 使操作被快速执行的性质是堆序(heap order)性. 由于我们想要快速地找出最小元&#xff0c;因此最小元应该在根上. 类似的&#xff0c;可以声明一个max堆&#xff0c;找到和删除最…...

金华网站建设luopan/搜索引擎广告案例

在Windows环境中&#xff0c;我们一般使用TortoiseSVN来搭建svn环境。在Mac环境下&#xff0c;由于Mac自带了svn的服务器端和客户端功能&#xff0c;所以我们可以在不装任何第三方软件的前提下使用svn功能&#xff0c;不过还需做一下简单的配置。 我们首先来看下&#xff0c;如…...