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

centos使用dpdk库

yum -y install dpdk dpdk-devel

在 C++ 中使用 DPDK(Data Plane Development Kit)库通常涉及到以下几个步骤:安装 DPDK、配置编译环境、编写 C++ 代码并链接 DPDK 库。以下是如何在 C++ 中引用和使用 DPDK 的详细步骤。

1. 安装 DPDK

首先,你需要在系统上安装 DPDK。可以通过以下方式进行安装:

  • 从源代码编译

    下载 DPDK 源代码:
    1. git clone https://github.com/DPDK/dpdk.git
      cd dpdk
      
    2. 编译 DPDK:

      make config T=x86_64-native-linuxapp-gcc
      make
      
  • 通过包管理器安装(如果你的 Linux 发行版提供了 DPDK 包):

    bash复制

    sudo apt-get install dpdk
    

2. 配置环境

DPDK 需要一些环境变量来运行。你需要设置 RTE_SDK 和 RTE_TARGET 环境变量:

export RTE_SDK=/path/to/dpdk
export RTE_TARGET=x86_64-native-linuxapp-gcc

3. 编写 C++ 代码

编写一个简单的 C++ 程序来使用 DPDK。以下是一个基本的示例代码:

#include <iostream>
extern "C" {#include <rte_eal.h>
}int main(int argc, char **argv) {int ret = rte_eal_init(argc, argv);if (ret < 0) {std::cerr << "Failed to initialize EAL" << std::endl;return -1;}std::cout << "DPDK EAL initialized successfully" << std::endl;// 其他 DPDK 代码...return 0;
}

4. 编译 C++ 代码

为了编译这个 C++ 程序,你需要链接 DPDK 库。可以使用以下 g++ 命令:

g++ -o my_dpdk_app my_dpdk_app.cpp -I$RTE_SDK/$RTE_TARGET/include -L$RTE_SDK/$RTE_TARGET/lib -Wl,--no-as-needed -lrte_eal -lrte_mempool -lrte_ring -pthread
说明:
  • -I:指定 DPDK 头文件的路径。
  • -L:指定 DPDK 库文件的路径。
  • -Wl,--no-as-needed:确保链接器不会忽略未使用的库。
  • -l:链接所需的 DPDK 库,如 librte_eallibrte_mempoollibrte_ring 等。根据你的应用需求,可能需要链接其他 DPDK 库。

5. 运行程序

确保你有权限绑定网卡到 DPDK 驱动,然后运行你的程序:

sudo ./my_dpdk_app

注意事项

  • 权限:DPDK 通常需要 root 权限来访问硬件资源。
  • 网卡配置:确保你的网卡已经绑定到 DPDK 驱动(如 igb_uio 或 vfio-pci)。
  • 环境变量:确保在每次会话中都设置了必要的环境变量。

通过这些步骤,你可以在 C++ 中成功引用和使用 DPDK 库。根据你的具体应用需求,可能需要进一步学习 DPDK 的 API 和功能模块。

在 CentOS 上通过 yum 安装的 DPDK 通常会将文件放置在系统的标准位置,而不是像手动编译那样放在一个自定义的目录。因此,你不需要像手动安装那样设置 RTE_SDK 环境变量。以下是一些可能的文件位置和使用方式:

文件位置

  1. 头文件和库文件

    • 头文件通常安装在 /usr/include/dpdk
    • 库文件通常安装在 /usr/lib64
  2. 示例和工具

    • DPDK 的示例程序和工具可能位于 /usr/share/dpdk

使用方法

当使用系统安装的 DPDK 时,你可以直接在编译时引用这些标准路径。例如,编译一个使用 DPDK 的程序时,你可以这样做:

bash复制

g++ -o my_dpdk_app my_dpdk_app.cpp -I/usr/include/dpdk -L/usr/lib64 -Wl,--no-as-needed -lrte_eal -lrte_mempool -lrte_ring -pthread

查找已安装的 DPDK 文件

如果不确定文件的具体位置,可以使用以下命令来查找 DPDK 的安装路径:

bash复制

rpm -ql dpdk

这将列出 DPDK 包安装的所有文件及其路径。

运行 DPDK 应用程序

确保你的网络设备已绑定到 DPDK 驱动(如 vfio-pci 或 igb_uio),并且你有足够的权限运行 DPDK 应用程序(通常需要 root 权限)。

其他注意事项

  • 驱动绑定:你可能需要使用 dpdk-devbind 工具来绑定网卡驱动。这个工具通常安装在 /usr/share/dpdk/tools/

  • 环境变量:虽然不需要设置 RTE_SDK,但在某些情况下(例如运行特定的示例程序),你可能需要设置其他环境变量或参数。

通过这些步骤和信息,你应该能够使用通过 yum 安装的 DPDK 在 CentOS 上进行开发和运行应用程序。

//=====================================================================
//
// FastMemcpy.c - skywind3000@163.com, 2015
//
// feature:
// 50% speed up in avg. vs standard memcpy (tested in vc2012/gcc4.9)
//
//=====================================================================
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>#if (defined(_WIN32) || defined(WIN32))
#include <windows.h>
#include <mmsystem.h>
#ifdef _MSC_VER
#pragma comment(lib, "winmm.lib")
#endif
#elif defined(__unix)
#include <sys/time.h>
#include <unistd.h>
#else
#error it can only be compiled under windows or unix
#endif#include "FastMemcpy.h"
#include <rte_memcpy.h>unsigned int gettime()
{#if (defined(_WIN32) || defined(WIN32))return timeGetTime();#elsestatic struct timezone tz={ 0,0 };struct timeval time;gettimeofday(&time,&tz);return (time.tv_sec * 1000 + time.tv_usec / 1000);#endif
}void sleepms(unsigned int millisec)
{
#if defined(_WIN32) || defined(WIN32)Sleep(millisec);
#elseusleep(millisec * 1000);
#endif
}void benchmark(int dstalign, int srcalign, size_t size, int times)
{char *DATA1 = (char*)malloc(size + 64);char *DATA2 = (char*)malloc(size + 64);size_t LINEAR1 = ((size_t)DATA1);size_t LINEAR2 = ((size_t)DATA2);char *ALIGN1 = (char*)(((64 - (LINEAR1 & 63)) & 63) + LINEAR1);char *ALIGN2 = (char*)(((64 - (LINEAR2 & 63)) & 63) + LINEAR2);char *dst = (dstalign)? ALIGN1 : (ALIGN1 + 1);char *src = (srcalign)? ALIGN2 : (ALIGN2 + 3);unsigned int t1, t2;int k;sleepms(100);t1 = gettime();for (k = times; k > 0; k--) {memcpy(dst, src, size);}t1 = gettime() - t1;sleepms(100);t2 = gettime();for (k = times; k > 0; k--) {rte_memcpy(dst, src, size);}t2 = gettime() - t2;free(DATA1);free(DATA2);printf("result(dst %s, src %s): rte_memcpy=%dms memcpy=%d ms\n",dstalign? "aligned" : "unalign",srcalign? "aligned" : "unalign", (int)t2, (int)t1);
}void bench(int copysize, int times)
{printf("benchmark(size=%d bytes, times=%d):\n", copysize, times);benchmark(1, 1, copysize, times);benchmark(1, 0, copysize, times);benchmark(0, 1, copysize, times);benchmark(0, 0, copysize, times);printf("\n");
}void random_bench(int maxsize, int times)
{static char A[11 * 1024 * 1024 + 2];static char B[11 * 1024 * 1024 + 2];static int random_offsets[0x10000];static int random_sizes[0x8000];unsigned int i, p1, p2;unsigned int t1, t2;for (i = 0; i < 0x10000; i++) {	// generate random offsetsrandom_offsets[i] = rand() % (10 * 1024 * 1024 + 1);}for (i = 0; i < 0x8000; i++) {	// generate random sizesrandom_sizes[i] = 1 + rand() % maxsize;}sleepms(100);t1 = gettime();for (p1 = 0, p2 = 0, i = 0; i < times; i++) {int offset1 = random_offsets[(p1++) & 0xffff];int offset2 = random_offsets[(p1++) & 0xffff];int size = random_sizes[(p2++) & 0x7fff];memcpy(A + offset1, B + offset2, size);}t1 = gettime() - t1;sleepms(100);t2 = gettime();for (p1 = 0, p2 = 0, i = 0; i < times; i++) {int offset1 = random_offsets[(p1++) & 0xffff];int offset2 = random_offsets[(p1++) & 0xffff];int size = random_sizes[(p2++) & 0x7fff];rte_memcpy(A + offset1, B + offset2, size);}t2 = gettime() - t2;printf("benchmark random access:\n");printf("rte_memcpy=%dms memcpy=%dms\n\n", (int)t2, (int)t1);
}#ifdef _MSC_VER
#pragma comment(lib, "winmm.lib")
#endifint main(void)
{bench(32, 0x1000000);bench(64, 0x1000000);bench(512, 0x800000);bench(1024, 0x400000);bench(4096, 0x80000);bench(8192, 0x40000);bench(1024 * 1024 * 1, 0x800);bench(1024 * 1024 * 4, 0x200);bench(1024 * 1024 * 8, 0x100);random_bench(2048, 8000000);return 0;
}

gcc -O3 -mavx -o FastMemcpy FastMemcpy.c -I/usr/include/dpdk -L/usr/lib64 -Wl,--no-as-needed -lrte_eal -lrte_mempool -lrte_ring -pthread

相关文章:

centos使用dpdk库

yum -y install dpdk dpdk-devel 在 C 中使用 DPDK&#xff08;Data Plane Development Kit&#xff09;库通常涉及到以下几个步骤&#xff1a;安装 DPDK、配置编译环境、编写 C 代码并链接 DPDK 库。以下是如何在 C 中引用和使用 DPDK 的详细步骤。 1. 安装 DPDK 首先&#…...

ChatGLM:从GLM-130B到GLM-4全系列大语言模型

摘要 我们介绍了ChatGLM&#xff0c;这是一个不断进化的大语言模型系列&#xff0c;我们一直在持续开发中。本报告主要聚焦于GLM-4语言系列&#xff0c;包括GLM-4、GLM-4-Air和GLM-4-9B。它们代表了我们从ChatGLM前三代中汲取的所有见解和经验教训所训练出的最强大模型。迄今为…...

EF Core分页

Skip(3).Take(8) 最好显式指定排序规则需要知道满足条件的数据的总条数&#xff1a; 用IQueryable的复用 LongCount和Count页数&#xff1a;long pageCount (long)Math.Ceiling(count * 1.0 / pageSize); class Program {static async Task Main(string[] args){using (MyDbC…...

一种ESP8266+OLED时间天气显示

在当今这个信息爆炸的时代&#xff0c;人们对于获取实时信息的需求日益增长&#xff0c;尤其是在时间与天气这两个与日常生活息息相关的方面。而将 ESP8266 与 OLED 显示屏相结合制作的时钟兼天气显示设备&#xff0c;凭借其便携性、实时性以及低成本等优势&#xff0c;成为了众…...

LabVIEW光流跟踪算法

1. 光流跟踪算法的概述 光流&#xff08;Optical Flow&#xff09;是一种图像处理技术&#xff0c;用于估算图像中像素点的运动。通过比较连续帧图像&#xff0c;光流算法可以分析图像中的运动信息&#xff0c;广泛用于目标跟踪、运动检测和视频处理等场景。该示例使用了NI Vi…...

Nacos 配置与服务注册问题排查指南

Nacos 配置与服务注册问题排查指南 1. Nacos 配置文件优先级 在 Spring Boot 应用中&#xff0c;配置文件的优先级从高到低依次为&#xff1a; bootstrap.propertiesbootstrap.ymlapplication.propertiesapplication.yml 2. Nacos 配置中心配置示例 以下是一个典型的 Naco…...

浅谈云计算06 | 云管理系统架构

云管理系统架构 一、云管理系统架构&#xff08;一&#xff09;远程管理系统&#xff08;二&#xff09;资源管理系统&#xff08;三&#xff09;SLA 管理系统&#xff08;四&#xff09;计费管理系统 二、安全与可靠性保障&#xff08;一&#xff09;数据安全防线&#xff08;…...

system securiry: supervisor password required

报错解释&#xff1a; 这个错误表明系统安全模块&#xff08;如SELinux或AppArmor&#xff09;需要超级用户&#xff08;通常是root&#xff09;的密码来确认一个操作。这通常发生在尝试进行某些需要高级权限的系统更改时。 解决方法&#xff1a; 如果你拥有root权限&#xff0…...

【Python基础知识】pdb-Python的调试器的常用命令和使用示例

使用pdb的情形 多数时候&#xff0c;可以使用PyCharm、VSCode等现代化IDE进行代码的调试 对于远程服务器中运行的服务&#xff0c;本地无法复现时&#xff0c;可以使用 Python自带的pdb进行调试 1 代码中断点埋桩 中断进入调试器的典型用法是 在需要调试的地方插入以下代码: …...

C++ STL之容器介绍(vector、list、set、map)

1 STL基本概念 C有两大思想&#xff0c;面向对象和泛型编程。泛型编程指编写代码时不必指定具体的数据类型&#xff0c;而是使用模板来代替实际类型&#xff0c;这样编写的函数或类可以在之后应用于各种数据类型。而STL就是C泛型编程的一个杰出例子。STL&#xff08;Standard …...

【向量数据库 Milvus】Milvus 2.5版本CPU 安装单机版

以下是Milvus 2.5版本单机安装的步骤&#xff1a; 前提条件 系统可以使用centos或者ubuntu。系统已经安装docker和docker-compose。 下载并编辑docker-compose.yml 进入Milvus的GitHub项目主页查看最新版本的Milvus&#xff0c;下载对应版本的docker-compose.yml文件&#…...

[Do374]Ansible一键搭建sftp实现用户批量增删

[Do374]Ansible一键搭建sftp实现用户批量增删 1. 前言2. 思路3. sftp搭建及用户批量新增3.1 配置文件内容3.2 执行测试3.3 登录测试3.4 确认sftp服务器配置文件 4. 测试删除用户 1. 前言 最近准备搞一下RHCA LV V,外加2.9之后的ansible有较大变化于是练习下Do374的课程内容. 工…...

系统认识数据分析

什么是数据分析&#xff1f; 数据分析是指用适当的统计分析方法对收集来的大量数据进行分析&#xff0c;将它们加以汇总和理解并消化&#xff0c;以求最大化地开发数据的功能&#xff0c;发挥数据的作用。数据分析是为了提取有用信息和形成结论而对数据加以详细研究和概括总结的…...

Cherno C++学习笔记 P52 处理多返回值

在这篇文章当中&#xff0c;我们解决一下如何用C的函数处理多返回值的问题。 在有些情况下&#xff0c;我们希望我们的函数可以返回多个返回值&#xff0c;比如返回两个string或者是一个int加上一个string。如果我们用的是python之类的语言的话&#xff0c;那这个事情其实是很…...

Android车机DIY开发之学习篇(一)编译UBOOT以正点原子为例

Android车机DIY开发之学习篇(一)编译UBOOT以正点原子为例 1.代码在u-boot文件夹下 2.在 U-Boot 源码目录下执行如下命令编译 U-Boot&#xff1a; ./make.sh rk3588生成两个文件 ### uboot.img 对应<SDK>/uboot/uboot.img ### rk3588_spl_loader_v1.13.113.bin 对应<…...

扩散模型、原型网络以及肿瘤微环境解析等名词出现在基金立项名单中,它们各自的应用现状如何?|文献速递·25-01-10

小罗碎碎念 昨晚看到了云南省2025年自然科学基金立项的名单&#xff0c;今天把医工交叉的项目挑出来和大家分享一下。 今天分享的文献&#xff0c;灵感来源于2025年的基金&#xff0c;我会先简单分析一下基金的情况&#xff0c;然后再和大家分享三篇与立项基金相关的文献。 总共…...

【Java设计模式-4】策略模式,消灭if/else迷宫的利器

各位Java编程小伙伴们&#xff01;今天咱们要一起探索一个超级厉害的Java设计模式——策略模式&#xff0c;它就像是一把神奇的魔法剑&#xff0c;专门用来斩断那些让我们代码变得乱糟糟的if/else语句迷宫&#xff01; 一、if/else的烦恼 在编程的奇妙世界里&#xff0c;我们…...

10分钟快速了解OceanGPT(沧渊)

10分钟快速了解OceanGPT(沧渊) 海洋科学任务的大语言模型——OceanGPT OceanGPT是如何训练的?为了训练 OceanGPT (沧渊) ,收集了一个跨越多个领域的海洋科学语料库。由于每个子领域和主题都有其独特的数据特征和模式,因此提出了一个特定于领域的指令生成框架,称为 DoDirec…...

学习及笔记

1、计算md5 md5sum 文件名 2、跨服务器复制 scp 文件 目标用户名目标Ip:目标路径 3、curl curl -X POST http://10.105.2.46/getUerls -H "Content-Type: application/json" -d {"id": 379, "userId": "lyc", "password":…...

TensorFlow Quantum快速编程(基本篇)

一、TensorFlow Quantum 概述 1.1 简介 TensorFlow Quantum(TFQ)是由 Google 开发的一款具有开创性意义的开源库,它宛如一座桥梁,巧妙地将量子计算与 TensorFlow 强大的机器学习功能紧密融合。在当今科技飞速发展的时代,传统机器学习虽已取得诸多瞩目成就,然而面对日益…...

Vue.js组件开发-实现图片裁剪

在Vue.js中开发一个图片裁剪组件&#xff0c;可以使用cropperjs库&#xff0c;它是一个功能强大的JavaScript库&#xff0c;专门用于图片裁剪。在Vue项目中&#xff0c;可以通过vue-cropperjs这个Vue包装器来更方便地使用cropperjs。 步骤&#xff1a; 1. 安装依赖 首先&…...

Jira用例自动去除summary重复用例

title: Jira用例自动去除summary重复用例 tags: - jira - python categories: - python一、背景与需求二、解决方案思路三、实施步骤本文永久更新地址: 在使用 Jira 进行项目管理时&#xff0c;测试用例的维护至关重要。随着项目推进&#xff0c;用例数量增多&#xff0c;可能…...

2024年开发语言热度排名

随着技术的不断发展和变化&#xff0c;编程语言的热度也在不断演变。2024年即将到来&#xff0c;我们有必要回顾和展望当前和未来的开发语言市场。本文将基于多个因素&#xff0c;包括行业需求、社区支持、流行度以及新兴趋势&#xff0c;对2024年的开发语言热度进行排名和分析…...

【ArcGIS初学】产生随机点计算混淆矩阵

混淆矩阵&#xff1a;用于比较分类结果和地表真实信息 总体精度(overall accuracy) :指对角线上所有样本的像元数(正确分类的像元数)除以所有像元数。 生产者精度(producers accuracy) &#xff1a;某类中正确分类的像元数除以参考数据中该类的像元数(列方向)&#xff0c;又称…...

OpenScholar助高效检索和整合科学文献?

从事科研的人都离不开读文献。然而&#xff0c;如今每年发表的论文数量已达数百万篇&#xff08;例如&#xff0c;某位大佬在硕博期间就发表了178篇&#xff5e;&#xff09;。在如此海量的文献中&#xff0c;如何高效利用宝贵的时间获取所需信息&#xff0c;显得尤为重要。 近…...

代码随想录Day34 | 62.不同路径,63.不同路径II,343.整数拆分,96.不同的二叉搜索树

代码随想录Day34 | 62.不同路径,63.不同路径II,343.整数拆分,96.不同的二叉搜索树 62.不同路径 动态规划第二集&#xff1a; 比较标准简单的一道动态规划&#xff0c;状态转移方程容易想到 难点在于空间复杂度的优化&#xff0c;详见代码 class Solution {public int uniq…...

非PHP开源内容管理系统(CMS)一览

在现代网站开发中&#xff0c;内容管理系统&#xff08;CMS&#xff09;是不可或缺的工具。虽然许多广泛使用的CMS&#xff08;如WordPress和Joomla&#xff09;是基于PHP开发的&#xff0c;但其他编程语言同样诞生了许多优秀的开源CMS&#xff0c;适用于不同需求和技术栈的项目…...

【Rust】常见集合

目录 思维导图 一、Rust常用集合 1. Rust标准库中的集合概述 2. 常用集合类型 2.1 向量&#xff08;Vector&#xff09; 2.2 字符串&#xff08;String&#xff09; 2.3 哈希映射&#xff08;Hash Map&#xff09; 二、向量&#xff08;Vec&#xff09; 1. 向量的概述…...

55. 跳跃游戏

题目 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 C #include <…...

关于 ThinkPHP 与 PostgreSQL 结合使用的一些要点

ThinkPHP 是一款流行的 PHP 开发框架&#xff0c;而 PostgreSQL 是功能强大的开源关系型数据库。它们可以结合使用来开发各类应用&#xff0c;以下是关于 ThinkPHP 与 PostgreSQL 结合使用的一些要点&#xff1a; 配置数据库连接 编辑配置文件&#xff1a;在 ThinkPHP 项目中&…...

【 PID 算法 】PID 算法基础

一、简介 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&#xff09;、Differential&#xff08;微分&#xff09;的缩写。也就是说&#xff0c;PID算法是结合这三种环节在一起的。粘一下百度百科中的东西吧。 顾名思义&#xff0c;…...

介绍下不同语言的异常处理机制

Golang 在Go语言中&#xff0c;有两种用于处于异常的机制&#xff0c;分别是error和panic&#xff1b; panic panic 是 Go 中处理异常情况的机制&#xff0c;用于表示程序遇到了无法恢复的错误&#xff0c;需要终止执行。 使用场景 程序出现严重的不符合预期的问题&#x…...

Sprint Boot教程之五十八:动态启动/停止 Kafka 监听器

Spring Boot – 动态启动/停止 Kafka 监听器 当 Spring Boot 应用程序启动时&#xff0c;Kafka Listener 的默认行为是开始监听某个主题。但是&#xff0c;有些情况下我们不想在应用程序启动后立即启动它。 要动态启动或停止 Kafka Listener&#xff0c;我们需要三种主要方法…...

Linux服务器网络丢包场景及解决办法

一、Linux网络丢包概述 在数字化浪潮席卷的当下&#xff0c;网络已然成为我们生活、工作与娱乐不可或缺的基础设施&#xff0c;如同空气般&#xff0c;无孔不入地渗透到各个角落。对于 Linux 系统的用户而言&#xff0c;网络丢包问题却宛如挥之不去的 “噩梦”&#xff0c;频繁…...

2025年01月13日Github流行趋势

1. 项目名称&#xff1a;Jobs_Applier_AI_Agent 项目地址url&#xff1a;https://github.com/feder-cr/Jobs_Applier_AI_Agent项目语言&#xff1a;Python历史star数&#xff1a;25929今日star数&#xff1a;401项目维护者&#xff1a;surapuramakhil, feder-cr, cjbbb, sarob…...

贪心算法详细讲解(沉淀中)

文章目录 1. 什么是贪心算法&#xff1f;&#xff08;贪婪鼠目寸光&#xff09;经典例题1.1.1 找零问题1.1.2最小路径和1.1.3 背包问题 2.贪心算法的特点2.1 证明例1 3.学习贪心的方向心得体会 1. 什么是贪心算法&#xff1f;&#xff08;贪婪鼠目寸光&#xff09; 贪心策略&a…...

C/C++ 数据结构与算法【排序】 常见7大排序详细解析【日常学习,考研必备】带图+详细代码

常见7种排序算法 冒泡排序&#xff08;Bubble Sort&#xff09;选择排序&#xff08;Selection Sort&#xff09;插入排序&#xff08;Insertion Sort&#xff09;希尔排序&#xff08;Shell Sort&#xff09;归并排序&#xff08;Merge Sort&#xff09;快速排序&#xff08;…...

Oracle Dataguard(主库为双节点集群)配置详解(4):配置备库

Oracle Dataguard&#xff08;主库为双节点集群&#xff09;配置详解&#xff08;4&#xff09;&#xff1a;配置备库 目录 Oracle Dataguard&#xff08;主库为双节点集群&#xff09;配置详解&#xff08;4&#xff09;&#xff1a;配置备库一、为备库配置静态监听1、配置 li…...

【Unity3D日常开发】Unity3D中打开Window文件对话框打开文件(PC版)

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享QQ群&#xff1a;398291828小红书小破站 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 这篇文章继续讲如何使用Unity3D打开Window文…...

STM32-RTC实时时钟

1.0 RTC简介 RTC&#xff08;Real Time Clock&#xff09;实时时钟 RTC是一个独立的定时器&#xff0c;可为系统提供时钟和日历的功能 RTC和时钟配置系统处于后备区域&#xff0c;系统复位时数据不清零&#xff0c;VDD&#xff08;2.0~3.6V&#xff09;断电后可借助VBAT&#x…...

QT跨平台应用程序开发框架(1)—— 环境搭建

目录 一&#xff0c;关于QT 二&#xff0c;关于应用程序框架 三&#xff0c;环境搭建 3.1 预备 3.2 下载Qt SDK 3.3 安装Qt SDK 3.4 配置环境变量 3.5 认识一些重要工具 四&#xff0c;Qt Creator 的基本使用 4.1 创建项目 4.2 代码解释 一&#xff0c;关于QT 互联网…...

HTB:Paper[WriteUP]

目录 连接至HTB服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 将靶机TCP开放端口号提取并保存 使用nmap对靶机TCP开放端口进行脚本、服务扫描 使用nmap对靶机TCP开放端口进行漏洞、系统扫描 使用nmap对靶机常用UDP端口进行开放扫描 对靶机进行子域…...

【数据可视化-12】数据分析岗位招聘分析

&#x1f9d1; 博主简介&#xff1a;曾任某智慧城市类企业算法总监&#xff0c;目前在美国市场的物流公司从事高级算法工程师一职&#xff0c;深耕人工智能领域&#xff0c;精通python数据挖掘、可视化、机器学习等&#xff0c;发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...

UE材质节点Fresnel

Fresnel节点 ExponentIn 控制边缘透明度 BaseReflectFractionIn 控制中心透明度...

宁德时代C++后端开发面试题及参考答案

请阐述面向对象的三大特性。 面向对象编程有三大特性,分别是封装、继承和多态。 封装是指将数据和操作数据的方法绑定在一起,对数据的访问和操作进行限制。这样做的好处是可以隐藏对象的内部细节,只暴露必要的接口给外部。例如,我们可以把一个汽车类的内部引擎状态、速度等…...

opencv warpAffine仿射变换C++源码分析

基于opencv 3.1.0源代码 sources\modules\imgproc\src\imgwarp.cpp void cv::warpAffine( InputArray _src, OutputArray _dst,InputArray _M0, Size dsize,int flags, int borderType, const Scalar& borderValue ) {...if( !(flags & WARP_INVERSE_MAP) ){//变换矩阵…...

六十九:基于openssl实战验证RSA

RSA&#xff08;Rivest-Shamir-Adleman&#xff09;是一种非对称加密算法&#xff0c;广泛应用于数据加密和数字签名领域。在实际开发和学习过程中&#xff0c;理解 RSA 的工作原理和使用场景非常重要。本文将以 OpenSSL 工具为基础&#xff0c;通过实例操作来验证和理解 RSA 的…...

Docker的CMD指令

CMD指令是Dockerfile中的一个重要指令&#xff0c;用于指定容器启动时执行的默认命令。CMD为容器运行时提供了一个默认的执行指令&#xff0c;可以在容器启动时自动运行该命令。 * CMD指令用于指定容器启动时的默认命令 CMD指令指定的命令通常是容器启动后要执行的主要进程。…...

redis缓存篇知识点总结

1.缓存雪崩 当大量缓存数据在同一时间过期(失效)或者 Redis 故障宕机时,如果此时有大量的用户请求,都无法在 Redis 中处理,于是全部请求都直接访问数据库,从而导致数据库的压力骤增,严重的会造成数据库宕机,从而形成一系列连锁反应,造成整个系统崩溃 发生缓存雪崩有两…...

onlyoffice编辑服务部署

下载官方镜像 下载onlyoffice_7.4.1.tar.gz镜像包 安装官方镜像 上传镜像包后执行 docker load -i onlyoffice_7.4.1.tar.gz 将镜像部署到本地仓库 下载onlyoffice编辑服务包 下载onlyoffice.zip包 启动onlyoffice编辑服务 上传包至服务器&#xff0c;解压包&#xff0c;…...