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

java复杂度,包装类,泛型解析

如何衡量代码的好坏?

评价代码的好坏我们使用算法效率来判断,而算法效率分两种:

算法效率:

第一种是时间效率,第二种是空间效率,时间效率被称为时间复杂度,⽽空间效率被称作空间复杂度。 时间复杂度主要衡量的是⼀个算法的运⾏速度,⽽空间复杂度主要衡量⼀个算法所需要的额外空间,现在我们计算机的储存容量已经很高了,所以我们更加注重时间复杂度。

1.时间复杂度的概念

在 Java 中,时间复杂度是用来衡量一个算法运行所消耗时间的概念。但它并不是精确计算算法实际运行的时间,因为算法实际运行时间会受运行环境(如机器性能)、测试数据规模等因素影响。时间复杂度采用大 O 符号表示法,⼀个算法所花费的时间与其中语句的执⾏次数成正⽐例,算法中的基本操作的执⾏次数,为算法的时间复杂度。

2.解析几个常见的时间复杂度类型。

在实际中⼀般情况关注的是算法的最坏运⾏情况。

O (n) - 常数时间复杂度

import java.util.Scanner;public class TEXT {public static void main(String[] args) {int count=0;Scanner scan=new Scanner(System.in);//输入nint n= scan.nextInt();for(int i=0;i<n;i++){//复杂度为ncount++;}System.out.println(count);}
}

O (n²) - 平方时间复杂度

import java.util.Scanner;public class TEXT {public static void main(String[] args) {int count=0;Scanner scan=new Scanner(System.in);int n= scan.nextInt();for(int i=0;i<n;i++){//n*n平方复杂度for (int j=0;j<n;j++){count++;}}System.out.println(count);}

3.O(M+N)复杂度

import java.util.Scanner;public class TEXT {public static void main(String[] args) {int count=0;Scanner scan=new Scanner(System.in);int m= scan.nextInt();int n= scan.nextInt();for(int i=0;i<m;i++){//m一个O(M)复杂度count++;}for(int j=0;j<n;j++){//n一个O(N)复杂度count++;}System.out.println(count);}

4. O (log n) - 对数时间复杂度

典型的就是二分查找:

在这段代码中,每执行一次循环体,查找范围就会缩小一半。比如初始数组长度为 n ,第一次循环后查找范围变为约 n​ /2,第二次变为约 n/4​ ,以此类推。假设最多需要 k 次循环就能找到目标元素或者确定目标元素不存在,那么就有 n/2'​k=1 ,解这个等式可得 k=log2​n,

根据时间复杂度的计算规则,总的时间复杂度就是 O(logn)

import java.util.Scanner;public class TEXT {public static int  boo(int[] arr,int tag){int left=0;int right= arr.length-1;while (left<=right){int mid=left+(right-left)/2;if(arr[mid]<tag){left=mid+1;} else if (arr[mid]==tag) {return mid;}else{right=mid-1;}}return -1;}public static void main(String[] args) {int[] arr={1,3,5,7,9};System.out.println(boo(arr,5));}

5. O (n log n) - 线性对数时间复杂度

二.包装类

包装类的作用:方便在泛型中使用,泛型只能引用类型,包装类包含许多实用方法

JAVA中8种基本数据类型进行封装,处理int的Integer和char的Character其他的包装类都为自己首字母大写后的模样

基本数据类型------------->包装类类型
boolean--------------------->Boolean(true,false)

byte------------------------->Byte(-128,127)

short------------------------->Short(-128,127)

long-------------------------->Long(-128,127)

float-------------------------->Float(-128,127)

double------------------------>Double(-128,127)

int----------------------------->Integer(-128,127)

char--------------------------->Character(0~127)

装箱拆箱

装箱分为自动装箱和手动装箱,拆箱也同样分为自动和手动。

看下面这组a,b为100时代码a==b返回true,而当我们将a,b变为200时返回false。这个原因是因为对于 Integer 类型,当值在 -128 到 127 之间时,Java 会对其进行缓存,以提高性能和节省内存。a 和 b 的值是 200,不在 -128 到 127 这个缓存范围内。因此,Java 会为 a 和 b 分别创建新的 Integer 对象。a 和 b 引用的是不同的对象,所以 a == b 的比较结果为 false

泛型

为实现可应用于各种类型的代码而生

概念:泛型即参数化类型,也就是把类型当作参数传递。借助泛型,在定义类、接口或者方法时,能使用类型参数来替代具体的类型。在使用时再指定具体的类型,这样就能让同一个类、接口或方法处理不同类型的数据。

下面的代码,当我们不使用泛型时,我们在将数组内容交给ret时会显得比较鸡肋,因为我们object是父类String是子类,父类内容交给子类要强制类型转换,当我们使用时会不方便,当我们需要多组数据时,我们还要去查看需要的是什么类型的。所以这个时候我们引入了泛型类型,它可以实现各种类型代码的应用。

我们看下面两组代码:

1组未使用泛型

2.组使用了泛型

使用了泛型后当我们需要调用String类型时,直接在<>内添加我们需要的类型如<Interger><Double>注意:这里面只能是包装类不能是基本类型如int这样。

这里我们自定义一个student类型,我们可以通过使用我们student类型来new student储存到jj中

泛型擦除机制

概念:在编译时,java编译器会把泛型的信息从泛型中移除,这就是泛型的擦除机制。

观察上面这段代码我们可以发现即使我们的两个list使用的泛型类型不同,在编译运行时我们还是可以返回true,这就是因为我们泛型类型的擦除效果。下面我们去看看他们的原始类型是什么:

我们通过代码的运行发现我们list1和list2原始类型都为ArrayList并没有携带具体的储存数据类型,而我们泛型擦除后大多数情况将泛型替换成边界或Object。

泛型的上界

泛型是没下界的,我们泛型在定义时有时候需要对传入的数据变量做一定的约束,我们就会用到泛型的边界约束。

class qq<t extends Number> 

像这样就是一种约束,我们泛型继承了Number,t是Number的子类,也可以是Number。

我们创建了一个找最大数的代码类qq,我们的qq继承了Comparable接口,当我们再创建animal类时,我们qq去使用了这个animal类会出现提醒让我们去实现Comparable接口,因为qq的泛型是继承了Comparable的。这也就进行了约束作用。

class qq<t extends Comparable<t>> {public t findmaxvalue(t[] Array) {t max = Array[0];for (int i = 1; i < Array.length; i++) {if (max.compareTo(Array[i]) < 0) {max = Array[i];}}return max;}
}
class animal{}
public class TEXT {public static void main(String[] args) {qq<Integer> K = new qq<>();Integer[] Array = {1, 2, 3, 4, 5, 6, 7, 8, 9};int p = K.findmaxvalue(Array);System.out.println(p);qq<animal> d=new qq<animal>();}
}

相关文章:

java复杂度,包装类,泛型解析

如何衡量代码的好坏&#xff1f; 评价代码的好坏我们使用算法效率来判断&#xff0c;而算法效率分两种&#xff1a; 算法效率&#xff1a; 第一种是时间效率&#xff0c;第二种是空间效率&#xff0c;时间效率被称为时间复杂度&#xff0c;⽽空间效率被称作空间复杂度。 时间…...

K8S安装部署(v1.27.6)

一、机器配置 系统版本主机名IP基于服务centos 7.9k8s-master192.168.163.104dockerk8s-node1192.168.163.105k8s-node2192.168.163.106注:以上3台机器都是2C4G的虚拟机,仅供测试使用 docker部署可以参考:docker 部署 二、其他环境配置 #1、关闭防火墙 systemctl stop fir…...

Debezium BinaryLogClient详解

Debezium BinaryLogClient详解 1. 类的作用与功能 1.1 核心作用 BinaryLogClient是Debezium中负责与MySQL服务器建立和维护Binlog连接的核心类,主要功能包括: 连接管理:建立和维护与MySQL服务器的Binlog连接事件监听:接收和处理Binlog事件心跳保活:维护连接活跃状态断线…...

Leetcode 刷题记录 09 —— 链表第三弹

本系列为笔者的 Leetcode 刷题记录&#xff0c;顺序为 Hot 100 题官方顺序&#xff0c;根据标签命名&#xff0c;记录笔者总结的做题思路&#xff0c;附部分代码解释和疑问解答&#xff0c;01~07为C语言&#xff0c;08及以后为Java语言。 01 合并 K 个升序链表 /*** Definitio…...

加速项目落地(Trae编辑器)

目录 vscode安装python支持 vscode常用插件 Trae编辑器 两个界面合成 补充&#xff08;QT开发的繁琐&#xff09; AI编程哪家强&#xff1f;Cursor、Trae深度对比&#xff0c;超详细&#xff01; - 知乎 Trae兼容vscode的插件&#xff0c;我们可以先在vscode里面装好再一…...

vue3的页面跳转方法汇总(路由跳转,组件跳转)

1.组件跳转 使用router-link组件进行组件导航&#xff08;无需引入该组件&#xff0c;可直接使用&#xff09;&#xff0c;to后面跟组件路由。如果想要在当前页显示跳转的组件&#xff0c;可以通过<router-view>来显示当前路由匹配到的组件&#xff0c;也可以不使用<r…...

C++回顾 Day5

自实现string完整版 my_string.h using namespace std; class mystr{public://mystr();mystr(const char * new_str nullptr);mystr(const mystr & another);char * c_str();~mystr();mystr& operator(const mystr & another);mystr operator(const mystr &…...

OpenMVS 的编译与运行

Title: OpenMVS 的编译与运行 文章目录 I. 编译与准备1. 获得源码2. wiki3. 退出 Conda 环境4. 编译5. 数据准备 II. 命令了解1. 稠密重建 DensifyPointCloud2. 曲面重建 ReconstructMesh3. 网格优化 RefineMesh4. 纹理贴图 TextureMesh III. 命令运行1. 运行稠密重建2. 运行网…...

@Transactional注解的使用

目录 一.介绍 1.使用Transactional注解的位置 2.Transactional注解的作用 二.举例 1.需求场景 2.做法 3.效果展示 三.简单总结 一.介绍 1.使用Transactional注解的位置 我们在Java开发中&#xff0c;一般在service层的方法上&#xff0c;使用Transactional注解&#x…...

路由器NAT回流踩坑

路由器 H3C GR-3000AX-U 不支持NAT回流 核心问题定位 外网访问 ✅ 非Docker服务&#xff08;直接运行在宿主机上的服务&#xff09;可以访问❌ Docker服务 无法访问 内网访问 ✅ 内网IP访问&#xff08;无论Docker还是非Docker&#xff09;正常❌ 内网通过公网IP访问 全部失败…...

如何创建RDD

创建RDD&#xff08;Resilient Distributed Dataset&#xff09;主要有以下三种方法&#xff1a; 1. 从集合创建RDD 通过将本地集合&#xff08;如列表、数组&#xff09;传递给SparkContext的parallelize方法&#xff0c;可以将本地数据转换为RDD。这种方式通常用于测试或开…...

PTS-G5K13M RF Generator 5kW / 13MHz 射频电源User s Manual

PTS-G5K13M RF Generator 5kW / 13MHz 射频电源User s Manual...

vue3父组件调用子组件方法

需求&#xff1a;在vue3中需要在父组件调用子组件的方法 思路&#xff1a;通过ref和defineExpose直接暴露给父组件 1.子组件暴露表单验证方法 <template><a-form ref"formRef" :model"formState" :rules"rules"><a-form-item …...

Python小酷库系列:5个常用的dict属性化访问扩展库

5个常用的dict属性化访问扩展库 嵌套结构高级功能性能综合建议 在前面我们详细讲解了 Box和 Munch这两个dict属性化访问的扩展库&#xff0c;总体而言它们主要用于提升配置文件数据、JSON对象数据的可读性&#xff0c;减少了代码中双引号。在这一领域中还有dotmap、addict 和…...

day009-用户管理专题

文章目录 1. 创建包含时间的文件2. 与用户相关的文件3. 用户分类4. 与用户相关的命令4.1 添加用户4.2 删除用户4.3 查看用户4.4 修改用户密码 5. sudo6. 思维导图7. 老男孩思想-学习方法 1. 创建包含时间的文件 或$()是替换符号&#xff0c;可以将命令的结果作为字符串或变量的…...

微信小程序pinia的应用

情景&#xff1a;院校列表的关注状态的实时更新 新建一个ts文件存储关注状态&#xff0c;用于集中管理用户“已关注院校”的相关状态和操作 import {definStore} from pinia; import type { College_records } from /types/university;export const useFocusCollegeStore de…...

LWIP的超时事件笔记

那个马蜂佬&#xff0c;刚发就给我两个赞 lwIP超时事件处理简介 为每个与外界网络连接的任务都设定了timeout属性&#xff0c;即等待超时时间&#xff0c;例如TCP建立连接超时、ARP缓存表项的时间管理等&#xff0c;都需要超时操作来处理 lwIP超时事件机制 一共有四种 2.1&a…...

如何避免项目结束后知识流失

避免项目结束后知识流失的方法包括&#xff1a;建立项目知识库、实施定期知识回顾与总结、强化团队内部知识共享机制、利用合适的知识管理工具。项目知识库的建设尤其关键&#xff0c;它可帮助团队保留核心经验和方法&#xff0c;确保知识沉淀在组织内部。通过知识库&#xff0…...

【MCP】客户端配置(ollama安装、qwen2.5:0.5b模型安装、cherry-studio安装配置)

【MCP】客户端配置&#xff08;ollama安装、qwen2.5:0.5b模型安装、cherry-studio安装配置&#xff09; 客户端配置&#xff08;1&#xff09;下载安装ollama&#xff08;2&#xff09;安装qwen2.5:0.5b模型&#xff08;3&#xff09;安装配置cherry-studio 客户端配置 &#…...

Media3 中 Window 的时间相关属性详解

AndroidX Media3 的 Timeline.Window 类中&#xff0c;与时间相关的属性描述了媒体播放窗口&#xff08;window&#xff09;在时间维度上的关键信息。这些属性帮助开发者理解媒体的播放范围、起始点、持续时间以及与设备时间或直播流的同步关系。 Timeline.Window 的时间相关属…...

C 语言编码规范

在 C 语言开发过程中&#xff0c;遵循编码规范不仅能提高代码的可读性、可维护性&#xff0c;还能减少潜在的错误&#xff0c;提升团队协作效率。以下从多个维度详细阐述 C 语言编码过程中需要注意的规范要点。 一、命名规范 变量命名 变量命名应做到见名知意&#xff0c;采用…...

嵌入式开发学习日志Day15

一、指针指向字符型数组 &#xff08;1&#xff09;【const】&#xff1a;在指针变量中使用时&#xff0c;无法通过该指针修改被指向的变量&#xff1b; &#xff08;2&#xff09;【const】&#xff1a;关键字&#xff0c;在C和C中&#xff0c;能加就加&#xff0c;加了一定…...

从人脸扫描到实时驱动,超写实数字分身技术解析

在元宇宙浪潮中&#xff0c;数字人、虚拟数字人等新兴概念逐渐走进大众视野&#xff0c;其中数字分身作为虚拟数字人的细分领域&#xff0c;正引发广泛关注。数字分身依托人工智能与虚拟现实技术&#xff0c;能基于真人信息进行1:1复刻&#xff0c;具备与真人高度相似的外貌、声…...

Vue3 自定义指令的原理,以及应用

文章目录 前言一、原理说明二、注册与使用1. 全局注册2. 局部注册3. 使用方式 三、典型应用场景四、案例&#xff1a;权限控制指令五、注意事项 v-draggable✅ 目标效果&#xff1a;&#x1f9e9; 1. 自定义指令定义&#x1f9f1; 2. 在项目中注册&#x1f9ea; 3. 使用示例&am…...

306.检查是否所有A都在B之前

2124. 检查是否所有 A 都在 B 之前 - 力扣&#xff08;LeetCode&#xff09; class Solution {public boolean checkString(String s) {return !s.contains("ba");} } class Solution(object):def checkString(self, s):return s.find("ba")-1...

适合java程序员的Kafka消息中间件实战

创作的初心&#xff1a; 我们在学习kafka时&#xff0c;都是基于大数据的开发而进行的讲解&#xff0c;这篇文章为java程序员为核心&#xff0c;助力大家掌握kafka实现。 什么是kafka: 历史&#xff1a; 诞生与开源&#xff08;2010 - 2011 年&#xff09; 2010 年&#xf…...

当体育数据API遇上WebSocket:一场技术互补的「攻防战」

在世界杯决赛的最后一分钟&#xff0c;你正通过手机观看直播。突然&#xff0c;解说员大喊“球进了&#xff01;”&#xff0c;但你的屏幕却卡在对方半场的回放画面——这种「延迟乌龙」的尴尬&#xff0c;正是实时体育应用面临的终极挑战。 在体育数字化浪潮下&#xff0c;用…...

1:点云处理—三种显示方法(自建点云)

1.彩色显示 *读取三维点云 dev_get_window(WindowHandle)dev_open_window(0, 0, 512, 512, black, WindowHandle1) read_object_model_3d(./19-12-26/t.ply, m, [], [], ObjectModel3D, Status)Instructions[0] : Rotate: Left button Instructions[1] : Zoom: Shift left…...

SCADA|KingSCADA运行报错:加载实时库服务失败

哈喽,你好啊,我是雷工! 最近在绵阳出差,在现场调试时遇到报错问题,翻了下以往记录没有该错误的相关笔记。 于是将问题过程及处理办法记录下来。 01 问题描述 昨天还好好的,可以正常运行的程序今天再次运行时报错: “加载 实时库服务 失败” 查看日志中错误信息如下: …...

k8s | Kubernetes 服务暴露:NodePort、Ingress 与 YAML 配置详解

CodingTechWork 引言 在 Kubernetes 集群中&#xff0c;服务暴露是将集群内部的服务对外部网络提供访问的关键环节。NodePort 和 Ingress 是两种常用的服务暴露方式&#xff0c;它们各有特点和适用场景。本文将详细介绍这两种方式的原理、配置方法以及如何通过 YAML 文件实现服…...

upload-labs靶场通关详解:第一关

一、一句话木马准备 新建一个文本文档&#xff0c;写入php代码&#xff0c;修改文件后缀名为php&#xff0c;保存。 phpinfo() 是 PHP 里的一个内置函数&#xff0c;其功能是输出关于当前 PHP 环境的详细信息。这些信息涵盖 PHP 版本、服务器配置、编译选项、PHP 扩展、环境变…...

SSA-CNN+NSGAII+熵权TOPSIS,附相关气泡图!

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 经典麻雀搜索算法深度学习多目标优化多属性决策&#xff01;SSA-CNNNSGAII熵权TOPSIS&#xff0c;附相关气泡图&#xff01;本文旨在通过优化卷积神经网络&#xff08;CNN&#xff09;以及采用NSGAII多目标优化与熵权…...

数据结构之栈与队列

一&#xff0c;栈和队列的区别 1、核心定义与特性 特性栈&#xff08;Stack&#xff09;队列&#xff08;Queue&#xff09;定义仅允许在栈顶&#xff08;表尾&#xff09;进行插入和删除的线性表&#xff0c;遵循 后进先出&#xff08;LIFO&#xff09;。允许在队尾插入、队…...

SSHv2 密钥交换(Key Exchange)详解

1. 算法协商 在密钥交换开始前&#xff0c;客户端和服务端会协商确定本次会话使用的算法组合。具体过程如下&#xff1a; 交换算法列表 客户端和服务端各自发送支持的算法列表&#xff0c;包括&#xff1a; 密钥交换算法&#xff08;如 diffie-hellman-group14-sha256&#xf…...

从零开始学习three.js(15):一文详解three.js中的纹理映射UV

1. UV 映射基础概念 1.1 什么是 UV 坐标&#xff1f; 在三维计算机图形学中&#xff0c;UV 坐标是将二维纹理映射到三维模型表面的坐标系统。UV 中的 U 和 V 分别代表2D纹理空间的水平&#xff08;X&#xff09;和垂直&#xff08;Y&#xff09;坐标轴&#xff0c;与三维空间…...

解锁 Postgres 扩展日!与瀚高共探 C/Java 跨语言扩展技术的边界与未来

2025 年 5 月 13 日至 16 日&#xff08;蒙特利尔时间&#xff09;&#xff0c;一年一度的 PostgreSQL 开发者大会 PGConf.dev&#xff08;原 PGCON 会议&#xff09;将在加拿大蒙特利尔盛大举行。同去年一样&#xff0c;在本次大会开幕的前一天同样会举办另外一个专场活动——…...

【Hive入门】Hive增量数据导入:基于Sqoop的关系型数据库同步方案深度解析

目录 引言 1 增量数据导入概述 1.1 增量同步与全量同步对比 1.2 增量同步技术选型矩阵 2 Sqoop增量导入原理剖析 2.1 Sqoop架构设计 2.2 增量同步核心机制 3 Sqoop增量模式详解 3.1 append模式&#xff08;基于自增ID&#xff09; 3.2 lastmodified模式&#xff08;基…...

✍️【TS类型体操进阶】挑战类型极限,成为类型魔法师!♂️✨

哈喽类型战士们&#xff01;今天我们要玩转TS类型体操&#xff0c;让你的类型系统像体操运动员一样灵活优雅~ 学会这些绝招&#xff0c;保准你的代码类型稳如老狗&#xff01;&#xff08;文末附类型体操段位表&#xff09;&#x1f680; 一、什么是类型体操&#xff1f; &…...

部署Prometheus+Grafana简介、监控及设置告警(一)

部署PrometheusGrafana简介、监控及设置告警 一. 环境准备 服务器类型IP地址组件 Prometheus服务器、agent服务器、Grafana服务器192.168.213.7Prometheus 、node_expprter&#xff0c;Grafanaagent服务器192.168.213.8node_exporter 如果有防火请记得开启9090&am…...

k8s部署OpenELB

k8s部署OpenELB k8s部署OpenELB配置示例: layer2模式 k8s部署OpenELB 部署OpenELB至K8s集群 # k8s部署OpenELB kubectl apply -f https://raw.githubusercontent.com/openelb/openelb/refs/heads/master/deploy/openelb.yaml# 查看openelb的pod状态 kubectl get pods -n open…...

python打卡day18

聚类后的分析&#xff1a;推断簇的类型 知识点回顾&#xff1a; 推断簇含义的2个思路&#xff1a;先选特征和后选特征通过可视化图形借助ai定义簇的含义科研逻辑闭环:通过精度判断特征工程价值 作业&#xff1a;参考示例代码对心脏病数据集采取类似操作&#xff0c;并且评估特征…...

新品发布 | 96MHz主频 M0+内核低功耗单片机CW32L011产品介绍

CW32L011是基于 eflash 的单芯片低功耗微控制器&#xff0c;集成了主频高达 96MHz的 ARMCortex-M0内核、高速嵌入式存储器(多至 64K字节 FLASH 和多至 6K 字节 SRAM)以及一系列全面的增强型外设和 I/O 口。 所有型号都提供全套的通信接口(3路 UART、1路 SPI和1路12C)、12位高速…...

【面试 · 二】JS个别重点整理

目录 数组方法 字符串方法 遍历 es6 构造函数及原型 原型链 this指向 修改 vue事件循环Event Loop FormData 数组方法 改变原数组&#xff1a;push、pop、shift、unshift、sort、splice、reverse不改变原属组&#xff1a;concat、join、map、forEach、filter、slice …...

【详细教程】ROC曲线的计算方式与绘制方法详细介绍

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...

【神经网络与深度学习】VAE 在解码前进行重参数化

在 VAE 中&#xff0c;解码之前进行重参数化主要有以下几个重要原因&#xff1a; 可微分性 在深度学习里&#xff0c;模型是通过反向传播算法来学习的&#xff0c;而这需要计算梯度。若直接从潜在变量的分布 (q_{\theta}(z|x))&#xff08;由编码器输出的均值 (\mu) 和方差 (…...

ai agent(智能体)开发 python3基础11: java 调用python waitfor卡死,导致深入理解操作系统进程模型和IPC机制

java 调用python waitfor 卡死 导致浏览器无法自动关闭&#xff0c;java &#xff0c;python双发无限等待 根源在于还是没有理解 进程之间标准输入输出到底是什么含义 系统进程与跨语言调用的核心机制 在跨语言调用&#xff08;如Java调用Python&#xff09;时&#xff0c;理…...

大模型赋能:2D 写实数字人开启实时交互新时代

在数字化浪潮席卷全球的当下&#xff0c;人工智能技术不断突破创新&#xff0c;其中大模型驱动的 2D 写实数字人正成为实时交互领域的一颗新星&#xff0c;引领着行业变革&#xff0c;为人们带来前所未有的交互体验。 一、2D 写实数字人概述 2D 写实数字人是通过计算机图形学…...

CATIA高效工作指南——零件建模篇(二)

一、PowerCopy特征复用技术 1.1 智能特征封装 通过​​几何图形集(Geometrical Set)​​构建参数化特征组&#xff0c;将关联的草图、曲面、实体等元素进行逻辑封装。操作流程如下&#xff1a; 创建新几何图形集并完成特征建模激活PowerCopy命令&#xff0c;选择目标几何集定…...

QT人工智能篇-opencv

第一章 认识opencv 1. 简单概述 OpenCV是一个跨平台的开源的计算机视觉库&#xff0c;主要用于实时图像处理和计算机视觉应用‌。它提供了丰富的函数和算法&#xff0c;用于图像和视频的采集、处理、分析和显示。OpenCV支持多种编程语言&#xff0c;包括C、Python、Java等&…...

java实现一个操作日志模块功能,怎么设计

为了设计一个高效、可靠且可扩展的操作日志模块&#xff0c;可以结合 ​AOP&#xff08;面向切面编程&#xff09;​、异步处理​&#xff08;多线程或MQ&#xff09;以及合理的存储策略&#xff0c;具体方案如下&#xff1a; ​1. 技术选型与架构设计​ ​​(1) AOP 实现非侵…...