UUID无处不在,你就是唯一(2023.4.16)

news2024/11/16 6:00:10

六种语言生成UUID 2023.4.16

  • 引言
  • 1、UUID简介
  • 2、UUID格式和编码
  • 3、UUID各历史版本
  • 4、UUID代码具体调用实现
    • 4.1 C# 生成UUID
    • 4.2 Java 生成UUID
    • 4.3 Python 生成UUID
    • 4.4 C++ 生成UUID
    • 4.5 C 生成UUID
    • 4.6 JavaScript 生成UUID(较为实用)
      • 4.6.1 控制台运行(浏览器)
      • 4.6.2 控制台运行(Node TestUUID.js)
  • 5、总结

引言

        全球数字化浪潮滚滚而来,各行各业无时无刻不在与数字打交道,万事万物或被牵扯和囊括其中。数字(Digit or number)作为一种简单快速的识别代码,深受开发者和广大用户的喜爱,在以下诸如此类的众多场景中被广泛使用:
(1)各个国家居民身份的唯一标识ID Card
(2)全世界生产的所有电脑,每台电脑都有着唯一的序列号硬件MAC地址
(3)各大手机厂商为用户分配的识别号,如(苹果手机AppID、华为手机HUAWEI_id
(4)全球通信运营商为用户分配的移动号码8614879421684
(5)互联网为政府机构、大学校园教育、企业单位、个人用户都分配了唯一的IP地址,从广域网(WAN)到局域网(LAN),从IPv4IPv6,公网环境下寄托在域名服务器DNS中的域名地址
(6)银行等业务部门为客户办理的业务单号、账单流水、卡号
(7) 世界上所有英文期刊发表的论文的唯一标识,如(DOI)。

        假如存在这样一个问题→从全球数十亿人口中寻找满足特定条件的某一个人,那么我们该如何去做这件事情呢

        思路一:世界本无序,但人们可以定义规则生成秩序,对几十亿人口按照阿拉伯数字编号并排序,寻找某个人就相当于获取该人物的编号,但是数字的存储位数显著增加会给计算机存储带来巨大挑战,因为人处于社会当中,伴随复杂多样的关系,导致属性关联、各异,海量信息无法仅仅依赖于数字;

        思路二:为所有人口分配互不重复且唯一的识别码,这个识别码可以是数字、字母、符号以及它们的组合体,但需要统一管理。

        思路三:结合思路一和思路二,考虑归纳分组、分门别类的思想,采取分而治之,从国家到地区、城市、县、乡、村,正如域名分配一样,从顶级、中级到低级一样,采用分层分级的思路实现,便于提高处理效率,缩短计算时间

        前两种思路无形中都与数据库密切相关,数据库的规模可大可小,查询检索速度可快可慢,主要取决于查询条件和数据量的大小第三种思路正如金字塔、树等结构,自上而下,分门别类,扩展延伸,分层分级,较为灵活,当然比较符合现代科学技术的发展、计算机的存储方式、数据库设计模式等理念。当然大家如果有好的想法,欢迎在评论区各抒己见,畅所欲言呀!✨✨✨

1、UUID简介

        UUID的全称为(Universally Unique Identifier通用唯一标识符,它出现的目的是让分布式系统中出现的一切元素都具有唯一的辨识,而不需要根据中央控制端来指定辨识资格,即出生便具有独特性、唯一性和有效性。下图为Github上的uuid,已然收获了13k+的star数量,足见其深受广大开发者和工程师的喜爱。

在这里插入图片描述

2、UUID格式和编码

在这里插入图片描述

3、UUID各历史版本

        如果想要进一步了解UUID是如何生成的,可以参考UUID标准和维基百科上的UUID介绍。UUID具有多个版本且各个版本具有不同的算法和应用范围,分别为基于时间的UUID、DCE安全的UUID、基于名字的UUID(MD5)、随机UUID和基于名字的UUID(SHA1)。总的来说,各个版本的发展都是为了保证唯一性、尽可能避免冲突同时提高生成效率,基本是与时间、MAC地址、域名、URL相关或随机生成。

Version 1 UUIDs are generated from a time and a node id (usually the MAC address);

version 2 UUIDs are generated from an identifier (usually a group or user id), time, and a node id;

versions 3 and 5 produce deterministic UUIDs generated by hashing a namespace identifier and name;

and version 4 UUIDs are generated using a random or pseudo-random number.

在这里插入图片描述

4、UUID代码具体调用实现

        下面就到了激动人心的环节,读完卷书,不如行万里路,让我们来亲自动手实践一下,以C#、Java、Python、C++、C和JavaScript这六种语言代码体验一下通用唯一标识符的生成和调用方法吧。

4.1 C# 生成UUID

        具体需要参考Microsoft-C#官方API文档中的Guid,使用Guid来生成UUID也是一种不错的方法哦。

在这里插入图片描述
        TestUUID.cs文件代码内容如下:

using System;

namespace UUIDCSharp
{
    class TestUUID
    {
        static void Main(string[] args)
        {
            for(int i=0;i<10;i++)
            {
                string uuid = Convert.ToString(Guid.NewGuid());
                Console.WriteLine("第"+i.ToString()+"个 UUID is: " + uuid);
            }
        }
    }
}

        运行结果截图如下:
在这里插入图片描述

4.2 Java 生成UUID

        具体参考Oracle-Java官方API文档中的UUID,介绍了四种版本的UUID;再者还可参考h2数据库网站上的UUID描述,利用其提供的样例源码来估计和理解两个UUID重复的概率。

在这里插入图片描述

在这里插入图片描述

        TestUUID.java文件内容代码如下:

package com;
import java.util.UUID;

public class TestUUID {
	
	public static String getTwoUUIDRepeatProbability(int i)
	{
		String res = null;
		double x = Math.pow(2, 122);
        double n = Math.pow(2, i);
        double p = 1 - Math.exp(-(n * n) / 2 / x);
        res = ("2^" + i + "=" + (1L << i) + " probability: 0" + String.valueOf(1 + p).substring(1));
		return res;
	}
	
	public static void main(String[] args)
	{
		/*
		 * 直接利用java.util.UUID类直接获取UUID字符串 
		*/
		for(int i=0;i<10;i++)
			System.out.println("第"+i+"个 UUID:"+UUID.randomUUID().toString());
//		for(int i=35;i<62;i++)
//			System.out.println(getTwoUUIDRepeatProbability(i));
	}
}

        运行结果截图如下:

在这里插入图片描述

4.3 Python 生成UUID

在这里插入图片描述

        具体参考Python-uuid官网API文档,通过导入uuid模块就可以使用它的四个方法了。注意这四个方法依次是uuid1(),uuid3(),uuid4(),uuid5(),然而并没有uuid2()。在某个文件目录下用Notepad新建test-uuid.py文件,并输入如下代码后打开控制台执行命令:python test-uuid.py

        test-uuid.py文件内容代码如下:

# -*- coding:utf-8 -*-
import uuid
print(uuid.uuid1())
print(uuid.uuid3(uuid.NAMESPACE_DNS, 'jing_zhong'))
print(uuid.uuid4())
print(uuid.uuid5(uuid.NAMESPACE_DNS, 'jing_zhong'))

        命令行和Python自带的IDLE运行结果如下所示:
在这里插入图片描述
在这里插入图片描述
        下面利用PyCharm新建项目和TestUUID.py文件,编译运行测试,TestUUID.py文件内容代码如下:

# -*- coding:utf-8 -*-
import uuid


def getUUID1():
    return str(uuid.uuid1())

def getUUID3(name):
    return str(uuid.uuid3(uuid.NAMESPACE_DNS, name))

def getUUID4():
    return str(uuid.uuid4())

def getUUID5(name):
    return str(uuid.uuid5(uuid.NAMESPACE_DNS, name))


if __name__ == '__main__':
    n = 10
    for i in range(0,n):
        print("第" + str(i+1) + "个uuid1:" + getUUID1())
        print("第" + str(i+1) + "个uuid3:" + getUUID3("jing_zhong"))
        print("第" + str(i+1) + "个uuid4:" + getUUID4())
        print("第" + str(i+1) + "个uuid5:" + getUUID5("jing_zhong"))

        运行结果截图如下:
在这里插入图片描述

4.4 C++ 生成UUID

在这里插入图片描述

        这里依赖C++的Boost库来生成UUID,到官网下载编译后的Boost库或根据官方文档自己编译源码均可,之后用VS 2015新建C++项目头文件和库文件目录引入即可,然后新建TestUUID.cpp文件,输入如下代码后编译生成即可。

        TestUUID.cpp文件内容代码如下:

#include <iostream>
#include <boost/uuid/uuid.hpp>
#include <boost/uuid/uuid_io.hpp>
#include <boost/uuid/uuid_generators.hpp>

using namespace std;
using namespace boost;

string getUUID()
{
	boost::uuids::uuid a_uuid = boost::uuids::random_generator()();
	string uuid_string = boost::uuids::to_string(a_uuid);
	return uuid_string;
}

int main()
{
	std::cout << "-----------------------C++ 使用boost库生成UUID------------------------" << std::endl;
	for (int i = 0; i < 10; i++)
		std::cout << "第"<< (i+1) <<"个UUID:" << getUUID() << std::endl;
	
	return 0;
}

        运行结果截图如下:
在这里插入图片描述

4.5 C 生成UUID

        至于用C语言代码生成UUID,大家可能使用更多的是在linux系统上的libuuid库,当然也推荐大家学习Github-stduuid库,尝试在Windows系统下用VS编译即可使用。有兴趣的伙伴可以多阅读StackOverflow上的generating-a-random-uuid-in-c话题讨论,或许会有启发。

        TestUUID-linux-libuuid.c文件内容代码如下(linux下安装libuuid库后调用):

#include <stdlib.h>
#include <stdio.h>
#include <uuid.h>

int main(void) {
    uuid_t binuuid;
    uuid_generate_random(binuuid);
    char *uuid = malloc(37);
	#ifdef capitaluuid
	    uuid_unparse_upper(binuuid, uuid);
	#elif lowercaseuuid
	    uuid_unparse_lower(binuuid, uuid);
	#else
	    uuid_unparse(binuuid, uuid);
	#endif
    puts(uuid); // Equivalent of printf("%s\n", uuid); - just my personal preference
    return 0;
}

//#include <stdio.h>
//#include <uuid/uuid.h>
//
 gcc uuid.c -luuid -o uuid
//
//int main()
//{
//	int i, n;
//	uuid_t uu[4];
//	char buf[1024];
//	struct timeval tv;
//	//1、
//	uuid_generate(uu[0]);
//	//2、
//	uuid_generate_random(uu[1]);
//	//3、
//	uuid_generate_time(uu[2]);
//	//4、
//	n = uuid_generate_time_safe(uu[3]);
//	printf("n = %d\n", n);
//	for (i = 0; i<4; ++i) {
//		uuid_unparse(uu[i], buf);
//		printf("uu[%d]\t\t%s\n", i, buf);
//	}
//
//	uuid_time(uu[2], &tv);
//	printf("tv s:%lx  u:%lx\n", tv.tv_sec, tv.tv_usec);
//
//
//	return 0;
//}

        此外,自己动手编写一个利用随机数生成UUID的函数代码,放到TestUUID.c中,利用VS 2015新建项目后编译运行。

        TestUUID.c文件内容代码如下:

#include <stdio.h>
#include <stdlib.h>

char* gen_uuid() //3fb17ebc-bc38-4939-bc8b-74f2443281d4
{
	char v[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
	static char buf[37] = { 0 };
	for (int i = 0; i < 37; ++i)
	{
		if (i == 8 || i == 13 || i == 18 || i == 23)
			buf[i] = '-'; //put dashes in place 8 dash 4 dash 4 dash 4 dash 12
		else if(i != 36)
			buf[i] = v[rand() % 16]; //gen random for all spaces because lazy
		else
			buf[36] = '\0'; //needs end byte
	}
	return buf;
}

void printChars(char *s)
{
	for (int i = 0; i <= 36; ++i)
	{
		if(i !=36)
			printf("%c", *(s++));
		else
			printf("\n");
	}
}

int main()
{
	puts("----------------C语言代码生成UUID-----------------");
	for (int i = 0; i < 10; i++)
	{
		char *s = gen_uuid();
		printf("第%d个UUID:", i + 1);
		printChars(s);
	}
	
	system("pause");
	return 0;
}

        运行结果截图如下:
在这里插入图片描述

4.6 JavaScript 生成UUID(较为实用)

        在前端JavaScript代码面前,生成UUID早已成为老生常谈的话题,有兴趣的朋友可以参考StackOverflow上的两个讨论话题:how-to-create-a-guid-uuid-in-javascript和collisions-when-generating-uuids-in-javascript,个人觉得该话题早已引起了广泛而又激烈的讨论,大家的思路和想法都十分活跃和积极,下面的代码是自己认为较为精华的部分:

4.6.1 控制台运行(浏览器)

{
	function createGuid1() {
	  return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) {
		var r = (Math.random() * 16) | 0;
		var v = c === "x" ? r : (r & 0x3) | 0x8;
		return v.toString(16);
	  });
	}
	
	function createuuid2() {
		return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
			var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
			return v.toString(16);
		});
	}
	
	console.log('-------------------使用第一种方法生成UUID---------------------');
	for(let i=0;i<10;i++)
		console.log('第'+(i+1)+'个UUID:',createGuid1())
	console.log('-------------------使用第二种方法生成UUID---------------------');
	for(let i=0;i<10;i++)
		console.log('第'+(i+1)+'个UUID:',createuuid2())
}

        浏览器中按F12进入开发者控制台Console窗口中,将以上代码粘贴其中后按回车键,即可看到运行结果:
在这里插入图片描述

4.6.2 控制台运行(Node TestUUID.js)

在这里插入图片描述

        除了在浏览器内运行js外,可能大多数开发者更喜欢在命令行终端窗口中测试运行。这里假设大家在电脑上已经安装好了Node.js环境,且已经配置好了npm包管理器,那么可以全局或者在某文件目录下局部安装uuid依赖库进行测试学习,下面我以本地E:\jing_zhong\TestNodeUUID文件目录下测试运行js代码进行说明。

        第一步,Win+R打开cmd命令行窗口,依次输入如下两行命令在查看安装的node版本号npm版本号,确保前提环境安装成功。

node -v
npm -v

在这里插入图片描述

        第二步,用Notepad或其他IDE新建package.json文件和TestUUID.js文件,并将下述内容粘贴到其中;

        package.json文件(utf-8编码)内容如下:

{
  "name": "test-node-uuid",
  "version": "1.0.0",
  "description": "test javascript uuid",
  "main": "TestUUID.js",
  "scripts": {
    "testuuid": "node TestUUID"
  },
  "type": "cjs",
  "keywords": [
    "uuid",
    "js"
  ],
  "author": "jing_zhong",
  "license": "MIT",
  "dependencies": {
    "uuid": "^9.0.0"
  }
}

在这里插入图片描述

        TestUUID.js文件内容代码如下:

function createGuid1() {
  return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) {
	var r = (Math.random() * 16) | 0;
	var v = c === "x" ? r : (r & 0x3) | 0x8;
	return v.toString(16);
  });
}

function createuuid2() {
	return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
		var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
		return v.toString(16);
	});
}

console.log('-------------------使用第一种方法生成UUID---------------------');
for(let i=0;i<10;i++)
	console.log('第'+(i+1)+'个UUID:',createGuid1())
console.log('-------------------使用第二种方法生成UUID---------------------');
for(let i=0;i<10;i++)
	console.log('第'+(i+1)+'个UUID:',createuuid2())

console.log('-------------------使用第三种方法生成UUID(uuid库)---------------------');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var uuidv1 = (0, _interopRequireDefault(require("./node_modules/uuid/dist/v1.js")).default);
var uuidv3 = (0, _interopRequireDefault(require("./node_modules/uuid/dist/v3.js")).default);
var uuidv4 = (0, _interopRequireDefault(require("./node_modules/uuid/dist/v4.js")).default);
var uuidv5 = (0, _interopRequireDefault(require("./node_modules/uuid/dist/v5.js")).default);
for(let i=0;i<10;i++)
	console.log('第'+(i+1)+'个UUID:',uuidv1(),'  ', uuidv4())

//console.log(uuidv3('6ba7b810-9dad-11d1-80b4-00c04fd430c8','6ba7b810-9dad-11d1-80b4-00c04fd430c8'));
//console.log(uuidv4());
//console.log(uuidv5('6ba7b810-9dad-11d1-80b4-00c04fd430c8','6ba7b810-9dad-11d1-80b4-00c04fd430c8'));

在这里插入图片描述

        第三步,在命令行窗口中输入命令进入TestNodeUUID目录,安装uuid库后执行TestUUID.js代码,得到运行结果。

cd E:\jing_zhong\TestNodeUUID
E:
npm install
node TestUUID.js

在这里插入图片描述

5、总结

        世界上没有两片完全相同的叶子。作为身份的唯一标识码UUID在许多行业和实际的应用场景中都有独特的唯一性要求,众多软件应用和硬件厂商早已考虑到这一点。人间各地烟火不同,繁花各异(樱花、梅花、海棠花、菊花、茉莉花、桃花),此时此刻,不由得回忆起《爱莲说》中的予独爱莲之出淤泥而不染,濯清涟而不妖,中通外直,不蔓不枝,香远益清,亭亭净植,可远观而不可亵玩焉!!!

        愿自己始终能够保持一颗纯净而沉着的心灵,不被外事外物束缚、干扰,脚踏实地,诚心诚意,实事求是,追求真理,不遗余力,在自己热爱的技术领域深耕探索,以绵薄之力分享些许技术心得,体会学海遨游的乐趣,感叹知识海洋的无线广阔,慢慢成长,积极学习

人生充满未知和挑战,勇敢者从未停止脚步。寒门学子,漂泊在外,漆黑的夜晚时常独自思考自己的人生应该如何度过,回想自己还有哪些不足和遗憾 ?尽管久久无法找到答案,但灵机一动发现,除了从书中寻找答案,还可以用心感受社会的变迁、气候的变化、工作的不易和生活的艰辛,可怜天下父母心,母亲身上那种时不我待、只争朝夕的坚强品格,乐观向上的豁达心态令我敬佩不已;父亲身上那种刚强勇毅、不屈不挠、坚韧执著的恒心和毅力更能成为我前进道路上的明灯。愿自己活到老,学到老,还有三分没学到,回首往事之时尽是历历在目的美好回忆。

        ❤️❤️❤️亲爱的孟营,世界之大,有幸相识,时光匆匆,感恩曾经,纵有不舍,心有所往,愿你早遇佳人,幸福一生

        最后,谨以此文与诸君共勉之,孤独寂寞的日子里还是会偷偷地思念家人、默默期待着未来的那个她

人的一生应当这样度过,当他回首往事的时候,不因虚度年华而悔恨,更不因碌碌无为而羞愧。多少人曾爱慕你年轻时的容颜,可知谁愿承受岁月无情的变迁。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/439257.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

测绘与设计之间的鸿沟:坐标系,教你如何将CAD与测绘数据准确叠加

一、背景 2008年&#xff0c;我国推出了2000国家大地坐标系&#xff08;以下简称国家2000坐标系&#xff09;&#xff0c;截至2022年&#xff0c;国家2000坐标系在自然资源领域已经取得了较高的普及率&#xff0c;但在工程建设领域的普及率依旧比较低&#xff0c;很多工程项目…

23种设计模式(9)——适配器模式

目录 一、基本介绍 二、demo 2.1、类适配器模式 类适配器模式注意事项和细节 2.2、对象适配器模式 对象适配器模式注意事项和细节 2.3、接口适配器模式 接口适配器模式介绍 三、适配器模式在框架中的应用 3.1在 SpringMVC 框架应用 3.2、spring AOP中的适配器模式 一、…

如何制作实时库存报表

草料二维码暂不支持自动计算功能&#xff0c;无法看到实时的库存数量。但可以使用外部数据分析工具&#xff0c;如百度Sugar&#xff0c;连接草料二维码官方数据库&#xff0c;即可自由实现各类计算&#xff0c;包括实时库存。 一、案例效果 输入物料名称&#xff0c;即可快速…

oracle学习之rownum和rowid

rownum先百度一波https://www.cnblogs.com/xfeiyun/p/16355165.html rownum是oracle特有的一个关键字。 对于基表&#xff0c;在insert记录时&#xff0c;oracle就按照insert的顺序&#xff0c;将rownum分配给每一行记录&#xff0c;因此在select一个基表的时候&#xff0c;r…

Java基础(八)异常处理

1. 异常概述 1.1 什么是生活的异常 男主角小明每天开车上班&#xff0c;正常车程1小时。但是&#xff0c;不出意外的话&#xff0c;可能会出现意外。 出现意外&#xff0c;即为异常情况。我们会做相应的处理。如果不处理&#xff0c;到不了公司。处理完了&#xff0c;就可以…

Ubuntu下打开QtCreator,环境变量(PATH、LD_LIBRARY_PATH等)与预期不一致的问题

现象展示 在Ubuntu中&#xff0c;安装好Qt之后&#xff0c;可以在系统桌面的左下角找到启动图标 但是&#xff0c;这种方式启动的QtCreator所读取到的环境变量和我们从命令行读取到的不一致&#xff1a; 可以看到&#xff0c;明显少了这个&#xff1a;/opt/ros/humble/bin 因…

Docker实战笔记3-仓库

转载请标明出处&#xff1a;http://blog.csdn.net/zhaoyanjun6/article/details/130260521 本文出自【赵彦军的博客】 文章目录 官方仓库 Docker Hub注册登录查看镜像搜索镜像推送镜像自动构建 网易镜像 官方仓库 Docker Hub https://hub.docker.com/ 目前 Docker 官方维护了…

C++入门之auto关键字内联函数

文章目录 前言一、auto关键字1.auto简介2.auto的使用细则&#xff08;1&#xff09;auto与指针和引用结合起来使用&#xff08;2&#xff09;在同一行定义多个变量&#xff08;3&#xff09;auto不能推导的场景 3.基于范围的for循环(C11)&#xff08;1&#xff09;遍历&#xf…

聚观早报|五一首日高铁跨省游热度暴涨;大语言模型规模接近极限

今日要闻&#xff1a;马斯克已创立新人工智能公司X.AI&#xff1b;五一假期首日高铁跨省游热度暴涨&#xff1b;大语言模型规模已接近极限&#xff1b;贾跃亭发文谈FF首台量产车下线&#xff1b;斑马智行与智己汽车进一步合作 马斯克已创立新人工智能公司X.AI 据外媒报道&…

Node 07-nvm

nvm 介绍 nvm 全称 Node Version Manager 顾名思义它是用来管理 node 版本的工具&#xff0c;方便切换不同版本的Node.js 使用 nvm 的使用非常的简单&#xff0c;跟 npm 的使用方法类似 下载安装 首先先下载 nvm&#xff0c;下载地址 https://github.com/coreybutler/nvm-…

【Python中线程和进程详解】

一.区别 几乎所有的操作系统都支持同时运行多个任务&#xff0c;每个任务通常是一个程序&#xff0c;每一个运行中的程序就是一个进程&#xff0c;即进程是应用程序的执行实例。现代的操作系统几乎都支持多进程并发执行。 注意&#xff0c;并发和并行是两个概念&#xff0c;并…

好家伙,9:00面试,9:06就出来了,问的实在是太...

从外包出来&#xff0c;没想到死在另一家厂子 自从加入这家公司&#xff0c;每天都在加班&#xff0c;钱倒是给的不少&#xff0c;所以也就忍了。没想到2月一纸通知&#xff0c;所有人不许加班&#xff0c;薪资直降30%&#xff0c;顿时有吃不起饭的赶脚。 好在有个兄弟内推我去…

会声会影老牌视频剪辑软件2023新版本升级

会声会影2023(VideoStudio)是一款功能强大的专业视频制作软件的视频编辑软件及视频剪辑软件&#xff0c;可以剪辑&合并视频、制作视频、屏幕录制、光盘制作、视频后期编辑、添加特效、字幕和配音等操作&#xff0c;任何人都能快速上手&#xff0c;以它的界面美观&#xff0…

#关于webpack版本号的问题#

场景&#xff1a;在使用npm install 安装package.json里面的依赖的&#xff0c;打包&#xff0c;运行的使用&#xff0c;有时候会失败。 原因 &#xff1a;由于webpack webpack-cli版本不同导致的 这个时候需要解决webpack webpack-cli的安装&#xff0c;切换等操作 例如使用…

python+vue 智慧校园校医室问诊系统

本网站所实现的是一个智慧校园校医室问诊系统&#xff0c;该系统严格按照需求分析制作相关模块&#xff0c;并利用所学知识尽力完成&#xff0c;但是本人由于学识浅薄&#xff0c;无法真正做到让该程序可以投入市场使用&#xff0c;仅仅简单实现部分功能&#xff0c;希望日后还…

CentOS8使用cephadm部署和配置Ceph Octopus

部署工具&#xff1a;cephadm操作系统&#xff1a;CentOS 8Ceph版本&#xff1a;Octopus操作用户&#xff1a;root 部署前&#xff0c;请注意&#xff1a;根据目前&#xff08;2020年8月&#xff09;Ceph官方文档的介绍&#xff0c;cephadm的对各服务的支持情况如下&#xff1a…

3D WEB端渲染引擎如何使用服务器端的转换程序?1个案例教会你

前言 HOOPS SDK是用于3D工业软件开发的工具包&#xff0c;其中包括4款工具&#xff0c;分别是用于读取和写入30多种CAD文件格式的HOOPS Exchange、专注于Web端工程图形渲染的HOOPS Communicator、用于移动端和PC端工程图形渲染的HOOPS Visualize、支持将3D数据以原生3D PDF、H…

html+css+js本地音乐播放器,实现可视化音频频谱

效果 htmlcssjs本地音乐播放器&#xff0c;实现可视化音频频谱 前言 之前用swing写了个本地音乐播放器&#xff08;如下图&#xff09;&#xff0c;但是效果一言难尽&#xff0c;界面丑&#xff0c;功能bug也多&#xff0c;唉 所以后面又重新用html写了个&#xff0c;界面样式…

港联证券:为什么会出现股票跌停?股票跌停应该怎么卖出?

股票跌停的意思是股票跌落到交易规则设定的涨跌幅限制范围外&#xff0c;致使股票无法正常卖出的现象。那么为什么会呈现股票跌停&#xff1f;股票跌停应该怎样卖出&#xff1f;下面就由港联证券为大家分析&#xff1a; 为什么会呈现股票跌停&#xff1f; 1、主力出货 当某只…

【竞赛知识ONE】取余问题

前言: 在一些竞赛题中,往往要求对最终的数据结果进行取余或者求模运算。但是如果仅仅只是在输出最终结果的时候对某个数取模,那么可能会导致数据溢出等问题,所以在计算过程中也需要对中间数据进行取模操作。 定理: 举例: 1. 案例一 解题分析:思路并不难理解计算…