在Visutal Studio 2022中完成D3D12初始化
在Visutal Studio 2022中完成DirectX设备初始化
- 1 DirectX12
- 1.1 DirectX 简介
- 1.2 DirectX SDK安装
- 2 D3D12初始化
- 2.1 创建Windwos桌面项目
- 2.2 修改符合模式
- 2.3 下载d3dx12.h文件
- 2.4 创建一个异常类D3DException,定义抛出异常实例的宏ThrowIfFailed
- 3 D3D12的初始化步骤
- 3.1 初始化前的准备
- 3.1.1 增加头文件的引用:
- 3.1.2 引用Direct3D库文件、IDXGI库文件
- 3.1.5 增加InitDirect3D函数
- 3.1.6 启用D3D12的调试层
- 3.2 创建Direct3D设备
- 3.2.1 增加IDXGIFactory和ID3D12Device两个全局的COM对象智能指针
- 3.2.2 创建一个D3D12设备
- 3.2.3 如果创建主显示适配器失败,使用WARP软件适配器
- 3.3 创建围栏
- 3.3.1 增加全局围栏和描述符变量
- 3.3.2 创建D3D12围栏
- 3.3.3 我们来了解下资源与描述符
- 3.4 检测对4X MSAA 质量级别的支持
- 3.4.1 增加全局资源数据格式和4X MASS质量级别变量
- 3.5 检测支持的D3D最高版本
- 3.6 创建命令队列和列表
- 3.6.1 增加全局变量
- 3.6.2 创建命令队列和命令列表
- 3.7 描述并创建交换链
- 3.7.1 创建全局变量
- 3.7.2 描述并创建交换链
- 3.7.3 处理CPU和GPU的同步
- 3.8 创建描述符堆
- 3.8.1 增加全局变量
- 3.8.2 创建描述符堆
- 3.9 创建渲染目标视图
- 3.9.1 增加全局变量
- 3.9.2 调整后台缓冲区的大小,并为它创建渲染目标视图 / 描述符
- 3.9 创建深度/模板缓冲区及其视图
- 3.10 设置视口和裁剪矩形
- 4 完整代码
- 错误:“&”要求左值
- 错误:D3D12GetDebugInterface: This method requires the D3D12 SDK Layers for Windows 10, but they are not present on the system.。
1 DirectX12
1.1 DirectX 简介
DirectX 是 Windows 中的一组组件,允许游戏、软件直接与视频和音频硬件结合使用。 使用 DirectX的游戏可以更有效地使用内置于硬件的多媒体加速器功能,从而改善整体的多媒体体验。
1.2 DirectX SDK安装
- 方法1,通过Windows 10 SDK安装,官网下载最新版本:Windows SDK
- 方法2,通过VS安装,做为一个开发人员,我更喜欢这种方式
安装完成后,我们可以了解下DirectX SDK头文件目录和库文件目录。
头文件目录:
C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\shared
C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\um
库文件目录 :
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0\um\x64
(注意:10.0.19041.0是我电脑上面的版本,大家的可能不一样)
2 D3D12初始化
有了开发环境,我们来完成D3D12初始化。
2.1 创建Windwos桌面项目
我们创建一个Windwos桌面项目,从头开始学习D3D11的初始化过程。
打开Visutal Studio 2022,选择菜单:文件->新建->项目,创建新项目。选择C++类型,输入 Windows桌面向导 进行筛选,在结果中选择“Windows桌面向导”,点击下一步。
配置项目名称和地址,点击创建
在弹出来的对话框中选择“桌面应用程序(.exe)”,勾选 “空项目”,点击确定建建一个空的Windwos桌面项目。
我这里没有勾选“空项目”,主要是偷懒不想写注册窗口和消息处理。
2.2 修改符合模式
创建项目后在项目属性找c/c++,找到语言,找到符合模式选否。不改碰到错误时再改也行。
2.3 下载d3dx12.h文件
打开官方github上面的d3dx12.h文件,把里面的代码拷贝下来。在工程解决方案里创建一个叫DXUtils的文件夹,在这个文件夹下新建一个d3dx12.h文件,把内容放在里面。
这个文件里面是官方写好的一些辅助结构体,不属于DirectX 12 SDK的核心部分,但是可以通过微软官方网站下载获得,方便我们后面开发。
以CD3DX12作为前缀的结构体全都定义在d3dx12.h头文件当中。
2.4 创建一个异常类D3DException,定义抛出异常实例的宏ThrowIfFailed
#pragma once#include <windows.h> // Windows 头文件
#include<string> // 提供wsring类,在Windows平台上应该使用wstring和wchar_t// 定义异常类
class D3DException
{
public:D3DException() = default;// 显示:异常函数的返回值、函数名、代码所处文件名,所处代码行数D3DException(HRESULT hr, const std::wstring& functionName, const std::wstring& filename, int lineNumber){ErrorCode = hr;FunctionName = functionName;Filename = filename;LineNumber = lineNumber;}std::wstring ToString()const;HRESULT ErrorCode = S_OK;std::wstring FunctionName;std::wstring Filename;int LineNumber = -1;
};// AnsiToWString函数(将字符串映射到 UTF-16 (宽字符) 字符串)
inline std::wstring AnsiToWString(const std::string& str)
{WCHAR buffer[512];MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, buffer, 512);return std::wstring(buffer);
}// 如果发生异常,抛出一个异常实例
#ifndef ThrowIfFailed
#define ThrowIfFailed(x) \
{ \HRESULT hr__ = (x); \std::wstring wfn = AnsiToWString(__FILE__); \if(FAILED(hr__)) { throw D3DException(hr__, L#x, wfn, __LINE__); } \
}
#endif
3 D3D12的初始化步骤
准备工作做发了,下面我们就来完成D3D12的初始化
要初始化D3D12,首先需要创建D3D12设备(ID3D12Device)。我们可以通过该ID3D12Device与硬件进行交互,命令硬件完成一些工作(比如:在显存中分配资源、清空后台缓冲区、将资源绑定到各种管线阶段、绘制几何体)。具体而言:
接口 | 说明 |
---|---|
ID3D12Device | 代表着一个显示适配器,显示适配器一般指3D图形硬件即显卡。显示适配器也可以用软件通过模拟硬件显卡的计算处理过程来代替,软件也可以作为适配器(如WARP适配器)。 |
- Direct3D设备既可以检测系统环境对功能的支持情况,又能创建所有其他的Direct3D接口对象(如资源、视图和命令列表)。
- 创建Direct3D设备使用函数D3D12CreateDevice。
现在我们开始在MyD3DApp.cpp中来增加设备的初始化。
3.1 初始化前的准备
3.1.1 增加头文件的引用:
#include<wrl.h> // 提供了ComPtr类,它是COM对象的智能指针,使我们无需手动Release
#include<d3d12.h> // Direct3D12头文件,ID3D12开头类型始于此
#include<dxgi1_4.h> // DirectX图形基础设施头文件,IDXGI开头类型始于此
#include<string> // 提供wsring类,在Windows平台上应该使用wstring和wchar_t
#include<assert.h>
#include "DXUtils/d3dx12.h"
3.1.2 引用Direct3D库文件、IDXGI库文件
// 引用Direct3D库文件
#pragma comment (lib, "d3d12.lib")
// 引用IDXGI库文件
#pragma comment (lib, "dxgi.lib")
增加使用Windows运行时库(Windows Runtime Library,WRL)为COM对象提供的COM对象的智能指针Microsoft::WRL::ComPtr类的命名空间。
using namespace Microsoft::WRL; // 方便使用Microsoft::WRL::ComPtr类
3.1.5 增加InitDirect3D函数
// 初始化Direct3D
bool InitDirect3D()
{
}
除了全局变量,后面的代码都在InitDirect3D中增加
3.1.6 启用D3D12的调试层
#if defined(DEBUG) || defined(_DEBUG) // 如果在Debug模式,启用D3D12的调试层,// 启用调试后,D3D会在错误发生时向VC++的输出窗口发送调试信息{ComPtr<ID3D12Debug> debugController;ThrowIfFailed(D3D12GetDebugInterface(IID_PPV_ARGS(&debugController)));debugController->EnableDebugLayer();}
#endif
3.2 创建Direct3D设备
3.2.1 增加IDXGIFactory和ID3D12Device两个全局的COM对象智能指针
// IDXGIFactory: DXGI中最关键的接口之一,可以枚举显示适配器
ComPtr<IDXGIFactory4> mdxgiFactory;// ID3D12Device: 代表一个显示适配器(显卡)
ComPtr<ID3D12Device> md3dDevice;
- D3D12Device 就是Direct3D中用于提供显卡控制接口的对象,它代表着当前系统中的显示适配器。一般来说,它是一个3D图形硬件(如显卡), 但是,操作系统在没有显卡的时候也能正常的显示图像,这时候使用的就是软件显示适配器,如(WARP适配器)
- 获取显示适配器
显示适配器是真正实现了图形处理能力的对象,上面的D3D12Device是对显示适配器的进一步封装。
这是我系统中的显示适配器
那么在程序中我们怎么才能知道使用的是哪个适配器呢,毕竟游戏的使用性能较高的适配较好。 - 我们了解下DXGI的概念。
DXGI是一种与Direct3D配合使用的API,设计DXGI的基本理念是使得多种图形API中的底层任务能够使用通用的API,比如3D和2D的图形API在底层都可以使用相同的,比如Direct3D和Direct2D内部实现交换链时可以使用同一套接口。
我们在获取系统的可用显示适配器时,会使用到 IDXGIFactory,主要用于创建SwapChain以及枚举显示适配器
后面的代码会使用IDXGIFactory4来枚举系统中的显示适配器
3.2.2 创建一个D3D12设备
// 创建可用于生成其他 DXGI 对象的 DXGI 1.0 FactoryThrowIfFailed(CreateDXGIFactory1(IID_PPV_ARGS(&mdxgiFactory)));// 创建一个D3D硬件适配器// D3D12CreateDevice参数为:(适配器指针,应用程序所需最低功能级别,所建ID3D12Device接口的COM ID)// 返回所创建的D3D12设备HRESULT hardwareResult = D3D12CreateDevice(nullptr, // 适配器指针,创建设备时用的显示适配器,适配器指针传入nullptr表示使用主显示适配器D3D_FEATURE_LEVEL_12_0, // 应用程序需要硬件支持的最低功能级别IID_PPV_ARGS(&md3dDevice));// IID_PPV_ARGS是Direct3D为我们提供的一个工具宏,它为我们生成了接口中的后两个参数
IID_PPV_ARGS宏会展开为两项,第一项根据__uuidof获取了COM对象的ID(全局唯一标识符,GUID),IID_PPV_ARGS辅助函数本质是把指针强制转换为void类型
3.2.3 如果创建主显示适配器失败,使用WARP软件适配器
// 创建主显示适配器失败,使用WARP软件适配器if (FAILED(hardwareResult)){ComPtr<IDXGIAdapter> pWarpAdapter;ThrowIfFailed(mdxgiFactory->EnumWarpAdapter(IID_PPV_ARGS(&pWarpAdapter)));// 不同windows版本的WARP最高支持的功能级别也不同// 再次创建D3D设备时,仅适配器指针参数不同,传入WARP适配器指针ThrowIfFailed(D3D12CreateDevice(pWarpAdapter.Get(),D3D_FEATURE_LEVEL_12_0,IID_PPV_ARGS(&md3dDevice)));}
3.3 创建围栏
CPU和GPU的同步需要使用到围栏,第一步中我们创建好设备,第二步就可以创建围栏了。
另外,如果使用描述符进行工作,需要获取描述符的大小。描述符在不同GPU平台上的大小不同,因此我们需要将获取的描述符大小信息缓存起来,方便需要时直接引用。
3.3.1 增加全局围栏和描述符变量
// ID3D12Fence: 表示围栏
ComPtr<ID3D12Fence> mFence;// RTV描述符大小,RTV描述符: 渲染目标视图资源
UINT mRtvDescriptorSize = 0;
// DSV描述符大小,DSV描述符: 深度/模板视图资源
UINT mDsvDescriptorSize = 0;
// CbvSrvUav描述符大小,CBV描述符: 常量缓冲区视图资源...
UINT mCbvSrvUavDescriptorSize = 0;
3.3.2 创建D3D12围栏
bool CreateD3DFence()
{// 创建围栏ThrowIfFailed(md3dDevice->CreateFence(0,D3D12_FENCE_FLAG_NONE,IID_PPV_ARGS(&mFence)));// 获取描述符大小mRtvDescriptorSize = md3dDevice->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_RTV);mDsvDescriptorSize = md3dDevice->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_DSV);mCbvSrvUavDescriptorSize = md3dDevice->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV);
}
可以看到新出现的四个变量都是通过 md3dDevice 对象获取到的,这说明:
1. Direct3D12 设备对象能创建所有其他的Direct3D接口对象。
2. COM对象需要使用特定方法或通过其他COM对象的方法获取。
3.3.3 我们来了解下资源与描述符
- 在渲染过程中,GPU需要对资源进行读和写。但是GPU和资源并不是直接绑定的,而是通过一个中间角色 “描述符”来进行绑定的。
- 描述符是一种对送往GPU的资源进行描述的轻量级结构,它是一个中间层。当GPU需要对资源进行读或写时,GPU就会问描述符:资源在哪里,我应该按照哪种数据格式进行读写。
- 描述符的作用有两点:
1. 指定资源数据。
2. 为GPU解释资源信息。 - 创建资源时可用无类型格式,如DXGI_FORMAT_R8G8B8A8_TYPELESS类型,它是4个分量组成,每个分量占8个位。如果某个资源在创建时采用了无类型格式,那么在为它创建描述符时必须指明其具体类型。
- 注意:视图和描述符的含义是等价的。
- 每个描述符都有一种具体类型,用来明确资源的具体作用,常用的描述符如下:
描述符 | 说明 |
---|---|
CBV | 常量缓冲区视图 |
SRV | 着色器资源视图 |
UAV | 无序访问视图 |
sampler | 采样器资源描述符 |
RTV | 渲染目标视图资源 |
DSV | 深度/模板视图资源 |
- 描述符堆中存有一系列描述符,本质上是存放用户程序中某特定类型描述符的一块内存。我们需要为每一种类型的描述符创建出单独的描述符,当然同一种描述符也可以创建多个描述符堆。
- 我们可以用不同的描述符来描述同一个资源,达到以不同的数据格式或内容部分去读写资源的目的。
- 由于创建描述符的过程中需要执行一些类型的检测和验证工作,最好不要在运行时才创建描述符,创建描述符的最佳时机为初始化期间。
- 当然有时确实需要使用无类型资源所带来的灵活性,此时在一定限度内,可以考虑在运行时创建描述符。
3.4 检测对4X MSAA 质量级别的支持
我们要使用4X MSAA,之所以选择4X,是因为借助此采样数量就可以获取开销不高但性能非凡的效果。而使用4X MSAA之前,我们要先检查设备是否支持4X MSAA 质量级别的图像。
3.4.1 增加全局资源数据格式和4X MASS质量级别变量
void Check4XMSAA()
{// DXGI_FORMAT: 资源数据的格式,一种枚举类型 DXGI_FORMAT mBackBufferFormat = DXGI_FORMAT_R8G8B8A8_UNORM;// 检测对4X MASS质量级别的支持D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS msQualityLevels;msQualityLevels.Format = mBackBufferFormat; // 纹理格式msQualityLevels.SampleCount = 4; // 采样次数msQualityLevels.Flags = D3D12_MULTISAMPLE_QUALITY_LEVELS_FLAG_NONE; // 默认选项msQualityLevels.NumQualityLevels = 0; // 质量级别// 使用ID3D12Device::CheckFeatureSupport函数,查询我们设置的这种图像质量的级别ThrowIfFailed(md3dDevice->CheckFeatureSupport(D3D12_FEATURE_MULTISAMPLE_QUALITY_LEVELS
相关文章:
在Visutal Studio 2022中完成D3D12初始化
在Visutal Studio 2022中完成DirectX设备初始化 1 DirectX121.1 DirectX 简介1.2 DirectX SDK安装2 D3D12初始化2.1 创建Windwos桌面项目2.2 修改符合模式2.3 下载d3dx12.h文件2.4 创建一个异常类D3DException,定义抛出异常实例的宏ThrowIfFailed3 D3D12的初始化步骤3.1 初始化…...
MobaXterm工具
MobaXterm 是一个增强型的 Windows 终端。其为 Windows 桌面提供所有重要的远程网络终端工具(如 SSH、X11、RDP、VNC、FTP、SFTP、Telnet、Serial、Mosh、WSL 等),和 Unix 命令(如 bash、ls、cat、sed、grep、awk、rsync 等&#…...
二分图练习
对于二分图我们可以用染色法 #include<bits/stdc.h> using namespace std;#define int long long const int N 2e65; int e[N],ne[N],h[N],idx 0; int colo[N]; int num 0;void add(int x,int y){e[idx] y;ne[idx] h[x];h[x] idx; } void dfs(int nod,int c){colo…...
创新设计策略:提升大屏幕可视化设计效果的关键方法
随着科技的不断发展和数据量的快速增长,数据可视化大屏在各个行业中的应用越来越广泛,可以帮助人们更好地理解和分析数据,可视化大屏设计也因此成了众多企业的需求。但很多设计师对可视化大屏设计并不了解,也不知道如何制作可视化…...
论文 | Chain-of-Thought Prompting Elicits Reasoningin Large Language Models 思维链
这篇论文研究了如何通过生成一系列中间推理步骤(即思维链)来显著提高大型语言模型进行复杂推理的能力。论文展示了一种简单的方法,称为思维链提示,通过在提示中提供几个思维链示例来自然地激发这种推理能力。 主要发现࿱…...
[机器学习]-人工智能对程序员的深远影响——案例分析
机器学习和人工智能对未来程序员的深远影响 目录 机器学习和人工智能对未来程序员的深远影响1. **自动化编码任务**1.1 代码生成1.2 自动调试1.3 测试自动化 2. **提升开发效率**2.1 智能建议2.2 项目管理 3. **改变编程范式**3.1 数据驱动开发 4. **职业发展的新机遇**4.1 AI工…...
AI学习环境 没有更好的替代 - (Google)Drive + Colab
在开始正题前,请容许我做一番回顾,并夹带一点点私货(谷歌扛旗的开源精神还没有死,并且会是未来的举足轻重的力量) 卧龙凤雏,一时瑜亮。一切的缘起应该是世纪初的门户网站乱战。 彼时,谷歌是从…...
【观成科技】Websocket协议代理隧道加密流量分析与检测
Websocket协议代理隧道加密流量简介 攻防场景下,Websocket协议常被用于代理隧道的搭建,攻击者企图通过Websocket协议来绕过网络限制,搭建一个低延迟、双向实时数据传输的隧道。当前,主流的支持Websocket通信代理的工具有…...
DangerWind-RPC-framework---三、服务端下机
当一台机器下线时,面临很多问题:如何将其从注册中心下线?如何清理释放资源?客户端拉取服务列表时也使用了本地缓存,如何及时更新本地缓存? 服务端机器的优雅下线需要使用ShutdownHook,这相当于添…...
基于Make的c工程No compilation commands found报错
由于安装gcc时只安装了build-essential,没有将其添加到环境变量中,因此打开Make工程时,CLion会产生如下错误: 要解决这个问题,一个方法是将GCC添加到环境变量中,但是这个方法需要修改至少两个配置文件&…...
c++:面向对象的继承特性
什么是继承 (1)继承是C源生支持的一种语法特性,是C面向对象的一种表现 (2)继承特性可以让派生类“瞬间”拥有基类的所有(当然还得考虑权限)属性和方法 (3)继承特性本质上是为了代码复用 (4)类在C编译器的内部可以理解为结构体,派…...
skywalking-2-客户端-php的安装与使用
skywalking的客户端支持php,真的很棒。 官方安装文档:https://skywalking.apache.org/docs/skywalking-php/next/en/setup/service-agent/php-agent/readme/ 前置准备 本次使用的php版本是8.2.13: php -v PHP 8.2.13 (cli) (built: Nov 21 2023 09:5…...
图文讲解IDEA如何导入JDBC驱动包
前言 学习JDBC编程,势必要学会如何导入驱动包,这里笔者用图文的方式来介绍 视频版本在这里 50秒教你怎么导入驱动包然后进行JDBC编程的学习_哔哩哔哩_bilibili 忘记录音频了,大伙凑合着看 下载驱动包 https://mvnrepository.com/artifact/mysql/mysql-connector-java 去中…...
java.lang.NullPointerException: null cannot be cast to non-null type kotlin.Int
java.lang.NullPointerException: null cannot be cast to non-null type kotlin.Int fun main(args: Array<String>) {var any1: Any?any1 nullval n1 any1 as? Int ?: -2024println(n1)kotlin.runCatching {var any2: Any?any2 nullval n2 any2 as Intprintln(…...
scrapy写爬虫
Scrapy是一个用于爬取网站数据并提取结构化信息的Python框架 一、Scrapy介绍 1.引擎(Engine) – Scrapy的引擎是控制数据流和触发事件的核心。它管理着Spider发送的请求和接收的响应,以及处理Spider生成的Item。引擎是Scrapy运行的驱动力。…...
Mybatis study
一、Mybatis Plus mybatis-plus指定实体类字段不查询 加标签 TableField(exist false) Spring Data Jpa学习 干我们这行,啥时候懈怠,就意味着长进的停止,长进的停止就意味着被淘汰,只能往前冲,直到凤凰涅槃的一天&am…...
【论文速读】《面向深度学习的联合消息传递与自编码器》
这篇文章来自华为的渥太华无线先进系统能力中心和无线技术实验室,作者中有大名鼎鼎的童文。 一、自编码架构的全局收发机面临的主要问题 文章对我比较有启发的地方,是提到自编码架构的全局收发机面临的主要问题: 问题一:基于随…...
防御---001
一、实验拓扑二、要求 1,DMZ区内的服务器,办公区仅能在办公时间内(9:00 - 18:00)可以访问,生产区的的设备全天可以访问. 2,生产区不允许访问互联网,办公区和游客区允许访问互联网 3,办公区设备10.0.2.10不允许访问DMZ…...
DNS 杂谈
一、定义 DNS(Domain Name System),域名系统,该系统记录域名和Ip地址的相互映射关系。用户访问互联网时,通过域名地址得到对应的IP地址,这个过程称为域名解析。DNS运行于UDP协议之上,使用的端口…...
docker笔记2
docker笔记2 一、阿里云镜像配置二、docker基本原理1.docker是如何启动一个容器的2.docker的底层原理 三、镜像命令总结 一、阿里云镜像配置 配置镜像的目的 由于Docker Hub等公共镜像仓库的服务器可能位于国外,直接从中拉取镜像时可能会遇到网络延迟或不稳定的问…...
数字统计
import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别// 注意 while 处理多个 caseint a in.nextInt();i…...
Git 使用问题
Git 使用问题 1, 网络问题 1, 网络问题 # 报错如下: fatal: unable to access https://github.com/xianglingliwei/HRNet.git/: Failed to connect to github.com port 443 after 21044 ms: Couldnt connect to server在不能正常访问Github的区域,需要设…...
JMH325【剑侠情缘3】第2版80级橙武网游单机更稳定亲测视频安装教学更新整合收集各类修改教学补丁兴趣可以慢慢探索
资源介绍: 是否需要虚拟机:是 文件大小:压缩包约14G 支持系统:win10、win11 硬件需求:运行内存8G 4核及以上CPU独立显卡 下载方式:百度网盘 任务修复: 1,掌门任务(…...
大数据专业创新人才培养体系的探索与实践
一、引言 随着大数据技术的迅猛发展,其在各行各业中的应用日益广泛,对大数据专业人才的需求也日益增长。我国高度重视大数据产业的发展,将大数据作为国家战略资源,推动大数据与各行业的深度融合。教育部也积极响应国家战略&#…...
MySQL 中的 DDL、DML、DQL 和 DCL
文章目录 1. 数据定义语言(DDL)2. 数据操作语言(DML)3. 数据查询语言(DQL)4. 数据控制语言(DCL)总结 在 MySQL 数据库管理系统中,SQL 语句可以根据其功能分为不同的类别&…...
基础架构服务API:降低成本,提升业务效益
基础架构服务API的应用可以显著降低企业的成本,并提升业务效益。通过使用这些API,企业可以充分利用云计算、自动化部署和资源管理等功能,从而减少了传统基础设施所需的大量投资和维护成本。这些API还提供了弹性扩展和自动化功能,使…...
Redis IO多路复用
0、前言 本文所有代码可见 > 【gitee code demo】 本文涉及的主题: 1、BIO、NIO的业务实践和缺陷 2、Redis IO多路复用:redis快的主要原因 3、epoll 架构 部分图片 via 【epoll 原理分析】 1、BIO单线程版 1.1 业务代码 client client代码相同…...
如何在Vue中实现拖拽功能?
Vue.js是一款流行的JavaScript框架,用于构建用户界面。其中一个常见的需求是在Vue中实现拖拽功能,让用户可以通过拖拽元素来进行交互。今天,我们就来学习如何在Vue中实现这一功能。 首先,我们需要明白拖拽功能的基本原理…...
在Linux下使用Docker部署chirpstack
目录 一、前言 二、chirpstack 1、chirpstack是什么 2、chirpstack组件 3、为什么选择Docker部署 三、Linux下部署过程 四、web界面部署过程 一、前言 本篇文章我是在Linux下使用 Docker 进行部署chirpstack,chirpstack采用的是v4 版本,v4 版本 与…...
《昇思25天学习打卡营第14天|计算机视觉-ShuffleNet图像分类》
FCN图像语义分割&ResNet50迁移学习&ResNet50图像分类 当前案例不支持在GPU设备上静态图模式运行,其他模式运行皆支持。 ShuffleNet网络介绍 ShuffleNetV1是旷视科技提出的一种计算高效的CNN模型,和MobileNet, SqueezeNet等一样主要应用在移动端…...
专业制作网站建设/拓客app下载
Linux Mysql cacti安装配置时间:2019-01-18 17:44作者:网友投稿cacti是一套开源的网络监控工具,可以监控主机的状态和负载情况,添加相应的模板后,可以用来监控apache服务器和mysql服务器的运行状态,我安装这…...
网站建设公司的名字/自己怎么建网站
Fastjson RCE续(自动化) 一、漏洞介绍 参阅Fastjson≤1.2.47 RCE。 二、漏洞危害 参阅Fastjson≤1.2.47 RCE。 三、漏洞验证 环境搭建: 实验环境系统IP地址攻击机win10199.200.234.44靶机Centos7192.168.134.133 docker pull vulhub/f…...
网站安装教程/郑州发布最新通告
目录 0 分区表 1 分区表基本操作 2 二级分区 3 动态分区调整 0 分区表 分区表实际上就是对应一个HDFS文件系统上的独立的文件夹,该文件夹下是该分区所有的数据文件。Hive中的分区就是分目录,把一个大的数据集根据业务需要分割成小的数据集。在查询…...
大型外贸商城网站建设/南宁seo排名优化
市场要闻 韩国釜山发行地区性数字货币,力促自由贸易区发展 2019年4月,韩国选择釜山市为优先自由贸易特区,并于当地发行地域性数字货币。该决议将于7月末,进入“优先自由贸易特区委员会”的审查会议和讨论决议程序。7月1日&#x…...
网站建设做网站好吗/qq推广网站
svr_linear SVR(linear) #基于直线 svr_rbf SVR(rbf) #基于半径 svr_poly SVR(poly) #基于多项式 转载于:https://www.cnblogs.com/gugubeng/p/9803465.html...
wordpress更换域名所有页面404/企业网站的搜索引擎推广与优化
概述:Spark 程序开发,调试和运行,intellij idea开发Spark java程序。 分两部分,第一部分基于intellij idea开发Spark实例程序并在intellij IDEA中运行Spark程序.第二部分,将开发程序提交到Spark local或者hadoop YARN…...