嵌入式学习的第二十三天-数据结构-树+哈希表+内核链表
一、树(一对多)
1.树的定义
树:n(n>=0)个结点的有限集合。n = 0 ,空树。
2.在任意一个非空树中,
(1),有且仅有一个特定的根结点
(2),当n>1 时,其余结点可分为m个互不相交的有限集合T1,T2,T3.。。。。Tm,其中每一个
集合又是一个树,并且称谓子树。
3.度
结点拥有子树的个数称谓结点的度。度为0的结点称谓叶结点。度不为0,称谓分支结点。
树的度数是指,这棵树中,最大的结点的度数,称谓树的度数。
树的深度或高度,从根开始,根为第一层,根的孩子为第二层。
4.树的存储,顺序结构,链式结构。
二、二叉树 binary tree
1.定义
n个结点的有限集合,集合要么为空树,要么由一个根结点和两棵互不相交,分别称谓根结点的左
子树和右子树的二叉树组成。
相交:D-E
2.特点
(1),每个结点最多两个子树。
(2),左子树和右子树是有顺序的,次序不能颠倒。
(3),如果某个结点只有一个子树,也要区分左,右子树。
3.特殊的二叉树
(1),斜树,所有的结点都只有左子树,左斜树,所有结点都只有右子树,右树。
(2),满二叉树,所有的分支结点都存在左右子树,并且叶子都在同一层上。
(3),完全二叉树,对于一颗有n个结点的二叉树按层序编号,如果编号i(1<=i<=n)的结点于同样
深度的满二叉树中编号为i的结点在二叉树中位置完全相同,则这可树为完全二叉树。
4.特性(选填)
(1),在二叉树的第i层上最多有2^(i-1)个结点 i>=1
(2),深度为k的二叉树至多有2^k -1 个结点 k>=1
(3),任意一个二叉树T,如果其叶子结点的个数是n0,度数为2的结点数为n2, n0 = n2 +1;
(4),有n个结点的完全二叉树深度为(logn/log 2) +1;
注:向下取整
5.树的遍历
(1)广度遍历:层序
(2)深度遍历
前序,根左右,先访问根,然访问左,访问右。
中序,左根右,先从根开始(不是先访问根),从左开始访问,在访问根,在访问右结点。
后序,左右根,先从根开始(不是先访问根),先访问左,在访问右。在访问根。
三、树的链式存储的一般操作
1.创建
void CreateTree(TreeNode **root)
{char c = data[ind++];if('#'==c){*root=NULL;return;}else{*root = malloc(sizeof(TreeNode));if(NULL == *root){fprintf(stderr, "CreateTree malloc error");return ;}(*root)->data=c;CreateTree(&(*root)->left);CreateTree(&(*root)->rigjt);}
}
2.前序
void PreOrderTraverse(TreeNode*root)
{if(NULL == root){return;}printf("%c",root->data);PreOrderTraverse(root->left);PreOrderTraverse(root->rigjt);
}
3.中序
void InOrderTraverse(TreeNode*root)
{if(NULL == root){return;}InOrderTraverse(root->left);printf("%c",root->data);InOrderTraverse(root->rigjt);
}
4.后序
void PostOrderTraverse(TreeNode*root)
{if(NULL == root){return;}PostOrderTraverse(root->left);PostOrderTraverse(root->rigjt);printf("%c",root->data);
}
5.销毁
void DestoryTree(TreeNode *root)
{if(NULL == root){return;}DestoryTree(root->left);DestoryTree(root->rigjt);free(root);
}
四、哈希表
1.创建
HSTable*CreateHsTable(int len)
{HSTable*hs = malloc(sizeof(HSTable));if(NULL == hs){fprintf(stderr, "CreateHsTable malloc error");return NULL;}hs->head = malloc(sizeof(DATATYPE)*len);if(NULL == hs->head){fprintf(stderr, "CreateHsTable malloc2 error");return NULL;} hs->tlen =len;int i=0;for(i =0;i<len;i++){hs->head[i]=-1;}return hs;
}
2.HSFun
int HSFun(HSTable*hs,DATATYPE*data)
{return *data % hs->tlen;
}
3.插入
int HSInsert(HSTable*hs,DATATYPE*data)
{int ind=HSFun(hs, data);while(hs->head[ind]!=-1){printf("pos %d,num :%d\n",ind,*data);ind =(ind+1)%hs->tlen;}hs->head[ind]=*data;return 0;}
4.查找
int HsSearch(HSTable*hs,DATATYPE*data)
{int ind=HSFun(hs, data);int old_ind=ind;while(hs->head[ind]!=*data){ind =(ind+1)%hs->tlen;if(old_ind==ind){return -1;}}return ind;
}
5.main.c
int main(int argc, char **argv)
{HSTable*hs=CreateHsTable(15);int array[]={12,67,56,16,25,37,22,29,15,47,48,34};int i = 0;for (i = 0; i < 12; i++){HSInsert(hs, &array[i]);}int want_num = 37;int ret = HsSearch(hs, &want_num);if (-1 == ret){printf("not find \n");}else{printf("find ,%d\n", hs->head[ret]);}return 0;
}
五、内核链表(双向链表)
思想:将数据摘出来,没有耦合,需自己定义结构体,结构体内部包括节点和数据,可按照自己的
需求设计
Linux第一宏:offset(地址偏移量) 和 contrainof(求地址)
相关操作:
1.klist.c
#include "./klist.h"void klist_init(KLIST* head)
{head->prev = head;head->next = head;
}void klist_add(KLIST* newnode,KLIST*prev,KLIST* next)
{newnode->next =next;newnode->prev = prev;prev->next = newnode;next->prev = newnode;}void klist_add_head(KLIST* head,KLIST* newnode)
{klist_add(newnode,head,head->next);
}
void klist_add_tail(KLIST* head,KLIST* newnode)
{klist_add(newnode,head->prev,head);
}void klist_del(KLIST*prev,KLIST*next)
{prev->next = next;next->prev = prev;
}
2.klist.h
#ifndef __KLIST_H__
#define __KLIST_H__typedef struct __klist
{struct __klist *next;struct __klist* prev;
}KLIST;#define offset(type,mem) ((size_t) &((type*)0)->mem)
/*** @brief ptr 结构体node的指针type 结构体 per * mem node在结构中的变量名*/
#define containerof(ptr,type,mem) ({ const typeof(((type*)0)->mem) * _mptr = (ptr);\(type*) ((char*)_mptr- offset(type,mem)); })#define klist_for_entry(ptr,type,mem) containerof(ptr,type,mem)
/*** @brief p , 指向结构体的指针* n, 指向当前结构体的下一个指针head, 链表的头节点指针mem, node在结构体中变量的名字*/
//for(p=klist_for_entry(&(head)->next,typeof(*p),mem),n=klist_for_entry((p)->mem.next,typeof(*p),mem);
#define klist_for_each(p,n,head,mem) \
for(p=klist_for_entry(head->next,typeof(*p),mem),n=klist_for_entry((p)->mem.next,typeof(*p),mem);\
&p->mem != (head); p=n,n=klist_for_entry((n)->mem.next,typeof(*n),mem))// #define offset(type,mem) ((size_t) &((type*)0)->mem)
// #define containerof(p,type,mem) ({\
// const typeof( ((type*)0)->mem ) * _mptr = (p);\
// (type*)((char*)_mptr - offset(type,mem));})
// #define klist_entry(p,type,mem) containerof(p,type,mem)// #define klist_for_each(p,n,head,node)\
// for(p=klist_entry((head)->next,typeof(*p),node),\
// n=klist_entry(p->node.next,typeof(*p),node); \
// &p->node != (head);p=n,n=klist_entry(n->node.next,typeof(*n),node))void klist_init(KLIST* head);
void klist_add_head(KLIST* head,KLIST* newnode);
void klist_add_tail(KLIST* head,KLIST* newnode);
void klist_del(KLIST*prev,KLIST*next);#endif
3.per.c
#include "./per.h"
#include "klist.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int add_per(int id,char *name,KLIST* head)
{PER* per = malloc(sizeof(PER));if(NULL == per){perror("add_per malloc\n");return 1;}strcpy(per->name,name);per->id = id;klist_add_tail(head,&per->node);return 0;
}int show_per(KLIST* head)
{PER *p ,*n;klist_for_each(p,n,head,node){printf("%d %s\n",p->id,p->name);}return 0;
}int del_per(KLIST* head,int id)
{PER *p ,*n;klist_for_each(p,n,head,node){//printf("%d %s\n",p->id,p->name);if(p->id == id){klist_del(p->node.prev, p->node.next);free(p);}}return 0;}
4.per.h
#ifndef __PER_H__
#define __PER_H__
#include "./klist.h"
typedef struct
{int id;char name[40];KLIST node;
} PER;int add_per(int id,char *name,KLIST* head);
int show_per(KLIST* head);
int del_per(KLIST* head,int id);
#endif
相关文章:
嵌入式学习的第二十三天-数据结构-树+哈希表+内核链表
一、树(一对多) 1.树的定义 树:n(n>0)个结点的有限集合。n 0 ,空树。 2.在任意一个非空树中, (1),有且仅有一个特定的根结点 (2),当n>1 时,其余结点可分为m个…...
互联网大厂Java求职面试:Spring AI与大模型交互的高级模式与自定义开发
互联网大厂Java求职面试:Spring AI与大模型交互的高级模式与自定义开发 在当今技术领域,随着AI和大模型技术的广泛应用,如何在复杂的系统架构中高效地集成这些技术成为了各大互联网公司关注的重点。本文将通过一场模拟的面试对话,…...
Ansible模块——主机名设置和用户/用户组管理
设置主机名 ansible.builtin.hostname: name:要设置的主机名 use:更新主机名的方式(默认会自动选择,不指定的话,物理机一般不会有问题,容器可能会有问题,一般是让它默认选择) syst…...
lowcoder数据库操作1:链接目标数据库
比如我使用的是PostgreSQL,要链接到数据库。 步骤1,Data Sources 步骤2, New data source 步骤3,选择PostgreSQL 步骤4,输入各种信息 命名,数据库所在的IP,端口,库名,用户密码。 步…...
R9打卡——RNN实现阿尔茨海默病诊断(优化特征选择版)
🍨 本文为🔗365天深度学习训练营中的学习记录博客 🍖 原作者:K同学啊 1.检查GPU import numpy as np import pandas as pd import torch from torch import nn import torch.nn.functional as F import seaborn as sns#设置GPU训…...
Label Studio:开源标注神器
目录 一、Label Studio 是什么? 二、核心功能大揭秘 2.1 多类型数据全兼容 2.2 个性化定制随心配 2.3 团队协作超给力 2.4 机器学习巧集成 三、上手实操超简单 3.1 安装部署不头疼 3.1.1 Docker安装 3.1.2 pip安装 3.1.3 Anaconda安装 3.2 快速开启标注…...
flow-两种SharingStarted策略的区别示例
一 代码示例 viewModel.kt:// 上游数据源 - 模拟温度传感器 private val temperatureSource flow {var temp 20while(true) {emit(temp)delay(1000)println("上游发射温度: $temp") // 日志观察发射} }// WhileSubscribed - 有订阅者才收集 val temperature1 tem…...
零基础设计模式——设计模式入门
第一部分:设计模式入门 欢迎来到设计模式的世界!别担心,这听起来可能很“高大上”,但我们会用最生活化的例子来帮助你理解。 1. 什么是设计模式? 想象一下,你是个大厨,每天都要做很多菜。有些…...
通过vcpkg交叉编译grpc:构建Arm64平台的Docker化开发环境
一、引言 在现代软件开发中,交叉编译是构建跨平台应用程序的关键技术。本文将详细介绍如何使用Docker容器和vcpkg包管理器为Arm64架构交叉编译gRPC库。这种方法特别适用于需要在x86开发机上为ARM服务器或嵌入式设备构建高性能RPC服务的场景。 二、配置Docker交叉编…...
Nginx基础知识
Nginx是什么? Nginx 是一款高性能的 Web 服务器、反向代理服务器和负载均衡器,以其高并发处理能力和低内存消耗著称。以下是 Nginx 的基础知识和常见配置示例: 1. 核心概念 • 配置文件位置:通常为 /etc/nginx/nginx.conf 或 /us…...
【计算机主板架构】ITX架构
一、引言 在计算机硬件的广阔领域中,主板架构犹如大厦的基石,对整个计算机系统的性能、功能和扩展性起着至关重要的作用。其中,ITX架构以其小巧、灵活和独特的设计理念,在特定的应用场景中脱颖而出。从家庭媒体中心到小型办公电脑…...
ubuntu 20.04 运行和编译LOAM_Velodyne
摘要:创建工作空间-->src下克隆代码(https://github.com/laboshinl/loam_velodyne)-->修改四处代码(找到src/loam_velodyne路径下的CMakeLists.txt文件,注释掉35行代码和将/LOAM/src/loam_velodyne/src/lib文件夹…...
云计算简介:从“水电”到“数字引擎”的技术革命
云计算简介:从“水电”到“数字引擎”的技术革命 在当今数字化浪潮中,云计算早已从一个技术概念演变为支撑现代社会运转的核心基础设施。无论是你手机里的天气预报、电商购物的推荐系统,还是企业内部的ERP系统,背后都离不开云计算…...
femap许可与多用户共享
随着电磁仿真技术的发展,Femap作为一款领先的工具,在多个领域中发挥着不可替代的作用。然而,对于许多团队和企业来说,如何高效、经济地管理和使用Femap许可证成为了一个亟待解决的问题。本文将探讨Femap许可与多用户共享的概念、优…...
spring中yml配置上下文与tomcat等外部容器不一致问题
结论:外部优先级大于内部 在 application.yml 中配置了: server:port: 8080servlet:context-path: /demo这表示你的 Spring Boot 应用的上下文路径(context-path)是 /demo,即访问你的服务时,URL 必须以 /d…...
网络I/O学习-poll(三)
一、为什么要用Poll 由于select参数太多,较于复杂,调用起来较为麻烦;poll对其进行了优化 二、poll机制 poll也是一个系统调用,每次调用都会将所有客户端的fd拷贝到内核空间,然后进行轮询,判断IO是否就绪…...
云原生攻防2(Docker基础补充)
Docker基础入门 容器介绍 Docker是什么 Docker是基于Linux内核实现,最早是采用了 LXC技术,后来Docker自己研发了runc技术运行容器。 它基于Google Go语言实现,采用客户端/服务端架构,使用API来管理和创建容器。 虚拟机 VS Docker Namespace 内核命名空间属于容器非常核…...
【C++模板与泛型编程】实例化
目录 一、模板实例化的基本概念 1.1 什么是模板实例化? 1.2 实例化的触发条件 1.3 实例化的类型 二、隐式实例化 2.1 隐式实例化的工作原理 2.2 类模板的隐式实例化 2.3 隐式实例化的局限性 三、显式实例化 3.1 显式实例化声明(extern templat…...
CI/CD 实践:实现可灰度、可监控、可回滚的现代部署体系
CI/CD 实践:实现可灰度、可监控、可回滚的现代部署体系 一、背景 随着微服务架构、云原生技术的普及,传统的手动部署方式已难以满足现代业务快速迭代、高可用的需求。CI/CD(持续集成/持续交付)作为现代 DevOps 的核心环节&#…...
后退的风景
后退的风景 前言回退的景色 前言 坐在高铁的窗边,这是一趟回程的旅途,所有的树木、铁塔、石碑向后涌去,一如从前。 所谓风景正是如此,无非是看到了一段触动内心的感受,这段感受可能是伤心,亦或是欣喜。这…...
腾讯云安装halo博客
腾讯云安装halo博客 如果网站已经配置好可以直接使用的,可以直接跳转到《6》进行1panel的安装, 如果跳过之后安装出现问题,可以看看前面步骤 从《6》开始的安装视频 我估计是网站默认放开的端口和他返代理应用的端口冲突了,重装…...
Excel宏和VBA的详细分步指南
Excel宏和VBA的详细分步指南 一、宏录制与代码分析(超详细版)1. 启用开发工具2. 录制宏 二、VBA核心语法(深入详解)1. 变量与数据类型2. 循环结构3. 条件判断2. Worksheet对象3. Range对象的高级操作 四、实用案例扩展1. 数据清洗…...
第十六届蓝桥杯复盘
文章目录 1.数位倍数2.IPv63.变换数组4.最大数字5.小说6.01串7.甘蔗8.原料采购 省赛过去一段时间了,现在复盘下,省赛报完名后一直没准备所以没打算参赛,直到比赛前两天才决定参加,赛前两天匆匆忙忙下载安装了比赛要用的编译器ecli…...
深度学习---模型预热(Model Warm-Up)
一、基本概念与核心定义 模型预热是指在机器学习模型正式训练或推理前,通过特定技术手段使模型参数、计算图或运行环境提前进入稳定状态的过程。其本质是通过预处理操作降低初始阶段的不稳定性,从而提升后续任务的效率、精度或性能。 核心目标…...
python:pymysql概念、基本操作和注入问题讲解
python:pymysql分享目录 一、概念二、数据准备三、安装pymysql四、pymysql使用(一)使用步骤(二)查询操作(三)增(四)改(五)删 五、关于pymysql注入…...
科普:极简的AI乱战江湖
本文无图。 大模型 2022年2月,文生图应用的鼻祖Midjourney上线。 2022年8月,开源版的Midjourney,也就是Stable Diffusion上线。 2022年11月30日,OpenAI正式发布ChatGPT-3.5。 此后,不断有【大模型】面世&…...
养生指南:解锁健康生活新方式
一、饮食:精准搭配,科学滋养 饮食以 “少加工、多天然” 为核心。早餐选择希腊酸奶搭配蓝莓与一把混合坚果,富含蛋白质与抗氧化成分;午餐用藜麦饭搭配香煎龙利鱼和彩椒炒芦笋,营养全面且低脂;晚餐则是山药…...
Dolphinscheduler执行工作流失败,后台报duplicate key错误
背景 现场童鞋发来一张图如下 我很懵逼,不知道出了啥问题,在聊天工具上聊了10m还不知道啥,干脆就搞个腾讯会议(在此感谢腾讯爸爸免费会议)。哦,现场临时搭建了dolphinscheduler,然后导入工作流…...
【Vue】路由2——编程式路由导航、 两个新的生命周期钩子 以及 路由守卫、路由器的两种工作模式
目录 一、路由的push 与 replace切换 二、编程式路由导航 三、缓存路由组件 四、新增的两个生命周期钩子 五、路由守卫 5.1 前置路由守卫 5.2 后置路由守卫 5.3 独立路由守卫 5.4 组件内 路由守卫 六、路由器的两种工作模式 6.1 hash模式 6.2 history模式 6.3 V…...
VDC、SMC、MCU怎么协同工作的?
华为视频会议系统中,VDC(终端控制)、SMC(会话管理)、MCU(媒体处理) 通过分层协作实现端到端会议管理,其协同工作机制可总结为以下清晰架构: 1. 角色分工 组件核心职责类…...
ETL数据集成产品选型需要关注哪些方面?
ETL(Extract,Transform,Load)工具作为数据仓库和数据分析流程中的关键环节,其选型对于企业的数据战略实施有着深远的影响。谷云科技在 ETL 领域耕耘多年,通过自身产品的实践应用,对 ETL 产品选型…...
DriveGenVLM:基于视觉-语言模型的自动驾驶真实世界视频生成
《DriveGenVLM: Real-world Video Generation for Vision Language Model based Autonomous Driving》2024年8月发表,来自哥伦比亚大学的论文。 自动驾驶技术的进步需要越来越复杂的方法来理解和预测现实世界的场景。视觉语言模型(VLM)正在成…...
【达梦数据库】过程、函数、包头和包体详解零基础
目录 背景参考链接解释包头包体 背景 最近遇到关于包头和包体的问题,学习并记录 参考链接 参考链接: oracle的过程、函数、包头和包体详解零基础 解释 包头主要用于定义接口,包体主要用以实现包体中声明的存储过程、函数等。 包头 包体...
HarmonyOS开发样式布局
个人简介 👨💻个人主页: 魔术师 📖学习方向: 主攻前端方向,正逐渐往全栈发展 🚴个人状态: 研发工程师,现效力于政务服务网事业 🇨🇳人生格言&…...
SpringCloud——EureKa
目录 1.前言 1.微服务拆分及远程调用 3.EureKa注册中心 远程调用的问题 eureka原理 搭建EureKaServer 服务注册 服务发现 1.前言 分布式架构:根据业务功能对系统进行拆分,每个业务模块作为独立项目开发,称为服务。 优点: 降…...
【力扣刷题】LeetCode763-划分字母区间
文章目录 1. LeetCode763_划分字母区间 1. LeetCode763_划分字母区间 题目链接🔗 🐧解题思路: 区间合并 题目中这句话很关键“我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。” 你这句话你可以理解为 把…...
使用for循环和字典功能,统计字符出现在一个英文句子中的次数(python)
本题目要求写出一段代码实现输入一个英文句子后,统计句子中各个字符(不区分大小写,包含空格和标点符号)出现的次数。 输入格式: 请例如:输入 Life is short,we need Python. 。 输出格式: 对每一个字符输出对应的出现次数&…...
带你搞懂@Valid和@Validated的区别
前言 有参数传递的地方都少不了参数校验。在实际开发过程中,参数校验是保证程序健壮性的重要环节,前端的参数校验是为了用户体验,后端的参数校验是为了安全。试想一下,如果在 Controller 层中没有经过任何校验的参数通过 Service层…...
大数据hadoop小文件处理方案
Hadoop处理小文件问题的解决方案可分为存储优化、处理优化和架构优化三个维度,以下是综合技术方案及实施要点: 一、存储层优化方案 1.文件合并技术 离线合并:使用hadoop fs -getmerge命令将多个小文件合并为大文件并重新上传; MapReduce合并:开发专用MR…...
安装NASM
安装NASM 注意:这篇文章在librdkafka安装系列,不需要参考,仅为了记录而写,请不要参考,后续编译openssl的时候,可以使用参数no-asm,不影响整个的编译步骤。这里主要作为记录帖子。 本篇是Windows系统编译Qt使用的kafka(librdkafka)系列可以不参考的一篇,编译librdkaf…...
RabbitMQ-高级
RabbitMQ-高级 文章目录 RabbitMQ-高级前言:消息可靠性问题1.生产者可靠性1.生产者重连2.生产者确认机制3.生产者代码实现原理 2.MQ的可靠性1.数据持久化2.LazyQueue 3.消费者可靠性1.消费者确认机制1.确认机制2.确认功能 2.失败重试机制1.开启失败重试机制2.多次失…...
深入解析Spring Boot与Kafka集成:构建高效消息驱动微服务
深入解析Spring Boot与Kafka集成:构建高效消息驱动微服务 引言 在现代微服务架构中,消息队列扮演着至关重要的角色,而Apache Kafka凭借其高吞吐量、低延迟和可扩展性,成为了许多企业的首选。本文将详细介绍如何在Spring Boot应用…...
Unreal Engine: Windows 下打包 AirSim项目 为 Linux 平台项目
环境: Windows: win10, UE4.27, Visual Studio 2022 Community.Linux: 22.04 windows环境安装教程: 链接遇到的问题(问题:解决方案) 点击Linux打包按钮,跳转至网页而不是执行打包流程:用VS打开项…...
【图像大模型】FLUX.1-dev:深度解析与实战指南
FLUX.1-dev:深度解析与实战指南 一、引言二、模型架构与技术原理(一)模型架构(二)Rectified Flow 技术(三)指导蒸馏(Guidance Distillation) 三、项目运行方式与执行步骤…...
mariadb 升级 (通过yum)
* 注意下 服务名, 有的服务器上是mysql,有的叫mariadb,mysqld的 #停止 systemctl stop mysql #修改源 vi /etc/yum.repos.d/MariaDB.repo baseurl http://yum.mariadb.org/11.4/centos7-amd64 #卸载 yum remove mysql #安装 yum install MariaDB-server galera-4 MariaDB-…...
Flink 非确定有限自动机NFA
Flink 是一个用于状态化计算的分布式流处理框架,而非确定有限自动机(NFA, Non-deterministic Finite Automaton)是一种在计算机科学中广泛使用的抽象计算模型,常用于正则表达式匹配、模式识别等领域。 Apache Flink 提供了对 NFA…...
Profinet转Ethernet IP主站网关:点燃氢醌生产线的智慧之光!
案例分享:转角指示器和Profinet转EthernetIP网关的应用 在现代工业自动化中,设备和系统之间的高效通信至关重要。最近,我们在某大型化工企业的生产线上实施了一个项目,旨在通过先进的设备和通信技术提高生产效率和安全性。该项目…...
动态IP技术在跨境电商中的创新应用与战略价值解析
在全球化4.0时代,跨境电商正经历从"流量红利"向"技术红利"的深度转型。动态IP技术作为网络基础设施的关键组件,正在重塑跨境贸易的运营逻辑。本文将从技术架构、应用场景、创新实践三个维度,揭示动态IP如何成为跨境电商突…...
WEB安全--SQL注入--Oracle注入
一、Oracle知识点了解 1.1、系统变量与表 版本号:SELECT * FROM V$VERSION 用户名:USER、SYS_CONTEXT(USERENV,SESSION_USER) 库名:ALL_USERS、USER_USERS、DBA_USERS 表名:ALL_TABLES、DBA_TABLES、USER_TABLES 字段名&…...
Unity预制体变体(Prefab Variants)、接口(Interface)、抽象类(Abstract Class)、枚举(Enumeration)
一、预制体变体(Prefab Variants) 预制体变体是什么? 预制体变体是指从同一个基础预制体派生出来的不同版本的预制体。这些变体可以包含不同的组件配置、属性值、子对象或者行为,但它们共享一些共同的基础结构和特性。通过创建预…...