基于云端的跨平台个人信息管理系统

博主介绍:专注于Java .net  php phython  小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作

☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟
我的博客空间发布了1000+毕设题目 方便大家学习使用
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人

3 系统详细设计与实现 

3.1系统详细设计

个人信息管理系统的时序图如图3.1所示,系统里界面之间的跳转,数据在各模块的传输和消息传输的时间顺序以及多个对象之间的动态协作和控件的各项触发事件,基本使用的是Async异步方法以确保整个应用的各功能能够流畅地运行。

图3.1 系统时序图

个人信息管理系统的各个子功能都是在各自模块下进行本地的数据存储,当用户输入登录信息后,系统匹配用户名和密码,如果匹配成功将进入功能选择主界面,在各功能的主页面可以使用相应的功能,例如登录成功,添加收支数据,必须先进入记账本总界面,选择添加功能才可以跳转到收支存储界面。

系统重要方法包括数据XML序列化和反序列化以XML文件的方式存储数据。个人信息管理系统的本地与云端存储主要通过密钥的链接,获取从 Windows 装载文件共享的命令行,设置AzureStorageFileContent 的Share $s -Source 为相应的存储地址来上载文件,在创立链接之后使用net use 命令根据存储帐户名称,文件存储共享名称来装载文件,实现了云端文件与本地的数据存储共享,保持数据一致性。

3.1.1联系人信息管理模块设计

联系人信息管理流程图(如图3.2),主要采用vCard格式创建联系人,从而限制电话字段,其他功能包括添加、删除或者联系人信息(姓名和联系方式),查看已经存储的联系人数据以及查询号码的归属地信息。

图3.2 联系人信息管理模块流程图

在联系人模块中对手机号码的信息查询,要获取用户输入的手机号码属于什么省份、什么地区和SIM卡种类的信息,就必须在项目里提前引入Web Service服务,再通过网络 service接口,实例化一个代理对象,最后通过调用getMobileCodeInfo方法联网查询返回一个包含在应用中所输入号码信息的字符串。

联系人功能的软件程序时序图就如图3.3所示。

图3.3 联系人模块时序图

用户在进入联系人模块后点击添加联系人信息按钮,按要求输入联系人的信息,点击保存触发事件,将联系人的信息使用vCard格式存储在本地,也使用云存储。当用户要使用查询功能时,调用相应查询方法,通过Web服务获取信息,将号码信息返回到联系人模块进行显示。

3.1.2备忘录模块设计

备忘录模块里的具体功能流程如图3.4所示。用户可对备忘录信息进行添加、删除以及查看,而且对已经保存的备忘录数据可以语音播放。其中文本记录里主要使用 JSON进行数据存储,经过将文件数据序列化存储,使用时,再反序列化得到文件数据。

图3.4 备忘录功能流程图

备忘录里的文本消息可以通过Text-To-Speech(TTS)技术,使用内置的语音引擎转换成语音播放,并可更新和删除记录。其中最主要的是实例化speechSynthesier对象,调用synthesierTextToStreamAsync方法,根据给定的文本生成语音流,保存在speechSynthesisStream实例中,随后就对生成的语音数据进行播放。

3.1.3记账本功能模块设计

记账本功能模块是系统里比较重要的功能模块,主要是对用户日常的收支数据进行保存,辅助用户对收支管理分析,更好的实现收支数据可视化,其基本功能流程图如图3.5所示。

图3.5 记账本功能流程图

收支管理:基本的添加收入支出数据,保存之后的删除或者查看收入支出,以及筛选收支数据记录,为用户提供基本的收支管理功能。

收支报表:提供日、月、年三种报表,统计用户的开支,供查询。

收支分析:在得到用户日常生活里的收支数据之后,对保存的收入支出数据进行统计和分析。根据用户的收支记录,生成相应的饼状图,从不同方面直观展示用户的收支情况,饼图控件是利用构造饼图piece来创建的,之后用Grid面板里面的userControl控件来加载饼状图形状。

3.1.4发现附近好友功能模块设计

发现好友的模块通过软件应用查找附近已开启的蓝牙设备和进行对等项的匹配连接,如果匹配连接成功,然后就可在应用间发送接收文本消息,进行信息交互,功能流程图如图3.6。

图3.6 发现好友功能模块流程图

主要利用peerFinder类的finderAllPeersAsync方法进行查找附近相同应用的蓝牙设备和对等项,然后返回peerInformation数据,里面保存的是通过应用查找到的对等项列表信息,最后进行匹配对等项,使用Socket编程的相关知识发送基于TCP协议的文本消息。

3.1.5个人中心模块设计

个人中心模块是用户最先使用的的功能模块,只有登录成功了才可以选择其他功能模块,同时,个人中心的数据同步和消息推送用到Azure,其具体流程图如图3.7所示。

图3.7 个人中心模块流程图

注册和登录:用户在登录的主界面进行输入姓名以及密码,系统首先从数据中查找用户名,如果用户不存在给出相应提示。用户名存在则取出对应的密码,后台程序将两个密码进行比对,通过应用的认证之后,进入个人中心功能模块。

个人中心模块的功能时序图如图3.8所示。

图3.8 个人中心模块时序图

当进行同步数据时,异地的相同应用可以实现数据库同步的功能,只要是将UWP应用的本地数据库设为主库,把云端设为从库,通过共享文件,将本地数据文件上载云端,再从云端下载文件,从而更好地实现同步本地应用与云端的数据,达到用户数据一致的功能需求。


个人中心的消息推送功能是第二个基于Azure的功能,是为了方便开发者在后台进行相关信息的推送,做到一次发送,所有应用都能收到消息通知,其通知中心功能流程图如图3.9所示。

图3.9通知推送功能流程图

从上图可以得知,云端消息通知推送是利用云端作为发送服务后台对所有安装此应用的设备进行一对多的消息推送,该功能是放在后台处理,不显现给用户,需要利用开发者的权限,关联好整个系统与应用商店,之后,开发者还需要从云端的仪表板里进行编码发送推送内容。

3.2系统实现

根据前期的需求分析,以及系统的总体设计和详细设计,按照模块功能联系人信息历、备忘录、记账本、发现好友和个人中心的顺序逐步进行实现。系统重要方法除了数据XML序列化和反序列化以XML文件的方式存储数据,还有收支数据同一页面不同时间数据的查看,数据的条件查询(关键字和时间段),备忘录里的数据存储方法和发现好友里蓝牙对等项的查找与匹配等,详细内容如表3.1所示。

表3.1 系统部分方法表

方法

参数

返回值

描述

Account_load

object sender, RoutedEventArgs e

void

获取收支数据,并与功能首页绑定显示

Buttons_click

object sender, RoutedEventArgs e

void

跳转到其他功能页面

save_cher()

Task<bool>

存储记账记录数据

Back_click

object sender, RoutedEventArgs e

void

返回到上一界面

getThisYear_record()

int year

Task< voucher>

获取某年数据记录

getThisMonth_record ()

int month, int year

Task< voucher>

获取某月数据记录

getThisDay_record()

int day, int month, int year

Task< voucher>

获取某日数据记录

Monthbar_click/Yearbar_click()

object sender, RoutedEventArgs e

void

月/年查询界面返回/进入前后时间

readFAsync()

string fileName

Task<string>

读取本地文件

writeFAsync()

string fileName, string content

Task

写入本地文件

writeAsync()

T data, string filename

Task

将实体类对象序列化成XML格式,然后存储到文件

readAsync()

string filename

Task

获取文件,反序列化XML文件

search_Data()

DateTime? begin, DateTime? end, string keyWords

Task< voucher>

按时间和关键字查询收支记录

get_Contact()

void

获取联系人信息

get_Contact()

string id

void

获取需要编辑的联系人信息

Text_Save()

object sender, RoutedEventArgs e

void

备忘录信息存储

find_bluetooth()

object sender, RoutedEventArgs e

void

查找蓝牙对等项

InitNotificationsAsync()

Void

消息通知发送

同时,个人信息管理系统在数据存储方面,本地与云端存储主要通过密钥的链接,获取从 Windows 装载文件共享的命令行,设置AzureStorageFileContent 的Share $s -Source 为相应的存储地址来上载文件,在创立链接之后使用net use 命令根据存储帐户名称,文件存储共享名称来装载文件,从而实现本地与云端数据一致。将整个系统应用配置好。

3.2.1联系人信息管理模块实现

对联系人信息管理模块地设计思路与实现进行分析,实现增删联系人信息以及号码归属地查询。其使用Grid里面的RowDefinitions来定义两行标注姓名和手机号码,并且将手机号码TextBox的inputScop属性设置为手机号码格式。

当用户打开添加界面,输入将要添加的联系人姓名以及手机号码后,点击保存按钮,后台会先判断用户是否已经填写了姓名或电话,不为空则先使用ContactInformation()新创建联系人对象cInfo,通过异步获得属性值的方法getproperties()得到联系人的属性字典,接着传递和添加联系人的相关属性,使用的是properties里的Add(KnownContactProperties.GivenName)。在创建或者获取联系人存储数据时,如果发生了错误,应用会进行报错,例如:姓名或联系电话不能为空,以及一些系统错误。可以在CsLists.xaml下对已保存的联系人信息进行查看,通过对页面代码中TextBlock的Text属性设置为Binding并加上数据源,从而完成数据绑定,实现控件在联系人的主界面可以显示数据,可以删除联系人信息,也可跳转到编辑联系人界面。

查询电话号码归属地的功能,需要先在该系统工程项目中添加输入web服务的相应网站引用。

同时,用MobileCodeServiceReference.MobileCodeWSSoapClient()方法实例化了一个web service代理的对象,再调用web service的getMobileCodeInfoAsync()方法获取电话号码的归属地,最后将得到的一维字符串数组(省份、城市等)赋给控件的Text属性,从而实现号码归属地的查询。

联系人模块界面如图3.10。

图3.10 联系人主界面

 整个联系人模块的功能都根据需求分析和系统详细设计的要求实现,具体的核心代码见附录A。

3.2.2备忘录模块实现

采用 XML文件序列化和反序列化来存储备忘录信息的数据,在备忘录主界面可以通过Page里的BottomAppBar的添加按钮,增添一条新信息,同时使用系统Icon的Add图标;在备忘录主界面的XAML文件里,构建一个动态Grid,同时添加一个hyperlink按钮,链接到备忘录信息展示界面,如图3.11。

图3.11备忘录主界面

点击Add添加按钮之后,跳转到AddItem添加项目页面(如图3.12),通过cs文件里的save事件,使用异步getfolder ()方法获取备忘录的文件对象, XML对象由XmlDoucument()方法创建,使用setAttribute()设置其属性作为信息的标识符,用属性的值来保存信息,之后调用createFilederAsync()来创建应用文件,最后将这些处理好的XML数据存储到相应文件里。

图3.12 备忘录增加界面

而要查看已保存的信息,在主界面里面点击查看详细,跳转到display界面,并传递一个数据存储对象,从对象中获取相应的文件名,调用XmlDoucument的LoadFromFileAsync()函数将备忘录的相关应用文件信息保存到相应的XML文档里,最后通过文件元素Attributes里面获得元素名getnamedItem().NodeValue的方法将XML文档数据相应地赋给控件的Text,备忘录信息显示界面如图3.13。

图3.13 信息详细信息

TTS的实现首先需要在项目工程清单文件里,在Capabilities节点里设置deviceCapability的Name为microphone来获取麦克风权限。通过实例化一个speechSynthesis对象,然后调用synthesizeTextToStreamAsync()函数来根据文本数据生成相应的数据语音流,之后,返回一个speechSynthesisStream实例,用于让系统从其的Text属性获取识别出来,最后使用多媒体的Element控件对获取保存的数据语音流进行播放。

备忘录模块的功能根据需求分析和系统详细设计的要求都已实现,具体的核心代码见附录B。

3.2.3记账本功能模块实现

记账本功能是一项主要功能,在主界面,通过修改按钮的默认样式,把点击状态和间隔属性取消,将宽度和高度设置一致,实现磁贴风格的自定义控件,将Style的目标类型设置为Button,自定义了按钮功能,并命名其为“ButtonStyle”作为新的控件模型。之后在其控件模型上将内容呈现控件里的各属性使用相关模版Binding绑定到相应的数据源上,让记账的收入支出记录以及年月结余数据相应地动态显示到主界面磁贴按钮的上方。如图3.14所示,当用户点击记账本主界面的磁贴控件,将跳转到用户相应点击的功能界面,而且,主界面上动态显示了该磁贴控件绑定的数据信息,同时获取今日的账单记录,并绑定到首页的列表控件进行显示,使用Common类的getSummaryIncome()方法计算总收入数据,getSummaryExpenses()计算总支出,通过getThisMouthSummaryIncome()的值减去getThisMouthSummaryExpenses()的值计算出月结余,年结余与月的方法类似,传递给getThisDayAllRecords()的参数为DateTime.Now.Day/Month/Year用于在记账本功能主界面显示当日收入支出数据的账单。

图3.14 记账本主界面

添加收入支出的功能,通过Pivot控件的两个页签来显示,使用Appbar来实现保存和取消功能,如图3.15所示。至于在数据存储方面,管理系统里收入支出的数据都是使用同种数据对象类型,而用0表示收入,1表示支出以作区分,记账本功能模块里用于收入支出数据存储的辅助类和收入支出数据对象实体类共同协作完成对用户日常收入支出数据的存储,在添加收入和支出数据时可以选择所添加的类别,并且可以填写对收支的说明,说明的内容是可以用于后面的查询功能,除此之外,还要选择添加的日期和时间,默认添加为当时系统日期时间。

图3.15 收支添加

首先,用pivot.SelectedIndex根据所传递的参数值来判断是显示收入页面(0)还是支出页面(1)。而在辅助类里,传递过来的是vCher类,即在Addnew(vCher item)里使用Getdata()进行添加数据,保存数据。通过调用storageFileHelper的ReadAsync()方法来进行读取收入和支出的记账数据列表。

当有收入或者支出数据保存之后,就生成相应的月收入支出报表和年收入支出报表,而且可以在查询功能界面分别按照月份和年份分类查询记账的数据记录。通过Common类的getMouthSummaryIncome()方法获取月收入,SummaryExpenses获取月支出,传递mouth和year 给etThisMonthAllRecords()得到本月所有数据,还传递到PageTitle赋给其Text值,最后将数据给ItemsSource,完成月报表数据的绑定,从而实现整个月收入支出报表的收支数据显示,实现效果图如图3.16所示(年报表类似)。

图3.16 月报表

为了适配顶部的查询条件排列,所以系统采用适配触发器,而使用LINQ语句来实现关键字查询,除此之外还可以使用时间段来查询。系统里使用DatePickerBegin和DatePickerEnd来获取begin开始日期以及end结束日期的时间点值,传递到Common类的search()函数里的是begin、end和KeyWords关键字的Text值。LINQ语句部分先判断是否关键字KeyWords值是否为空,为空则计算收支数据开始点和收支数据结束点之间的时间段,从通过Getdata()方法获得的数据里查找出符合在时间段的数据,而在有关键字时,既有时间段的,还使用IndexOf(KeyWords)来实现数据查询,最后将查询到的记账数据记录返回到查询界面相应的控件上显示,记账本收支数据查询的页面设计如图3.17所示

图3.17 查询界面

对记账类应用来说,图表是直观显示数据的重要功能,通过饼状图和柱状图来显示不同类别的账目数据和其所占比例。主要利用QuickCharts图表控件库,首先要将图表的UI设计进行绑定,在Chartdata类里声明了sum和typeName两个属性,用于存储不同类别和其相应的数据,使用自定义集合类的<ChartData>()来创建图表的数据源对象,接着通过Common类的getAllRecords()函数获取所有的记账记录数据,使用LINQ语句从所有记账记录数据里按Category条件来获取数据的类别,再将饼图的数据源DataSource设置为枚举的数据集合COLlecion,最后形成相应的图表,生成具体效果如图3.18

图3.18 饼状图

记账本功能模块里的收支数据对象都是通过DataContractSerializer类序列化形成一个XML文件,然后保存到本地应用文件夹里面。系统应用先通过getDataFolder()获取需要存储数据的文件夹,然后异步传递文件名的方法getFile (filename)得到里面的文件,获取其数据流,初始化流阅读器对象需要先将irandomAccess流对象转化成流对象。实体类对象序列化成XML格式存储到文件里面,也是先有存储的文件夹,再用FileIO类把字符串数据写入文件,之后使用DataContractSerializer(typeof(T))创建序列化对象,再将数据录入进去,完成XML序列化存储。而StorageFileHelper类是负责数据文件读写操作的独立存储公共类。

大家点赞、收藏、关注、评论啦  其他的定制服务  下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 或者私信作者
 

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

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

相关文章

无线麦克风哪款好用,手机领夹麦克风哪个牌子好,麦克风推荐

随着短视频与直播行业的蓬勃发展&#xff0c;无线领夹麦克风市场迎来了前所未有的繁荣。品牌如罗德、大疆、西圣等麦克风品牌凭借卓越的技术实力与品牌影响力占据了市场的主导地位&#xff0c;其中西圣更是凭借其高性价比和用户口碑&#xff0c;稳居行业口碑品牌前列。但在这光…

Chainlit集成Langchain并使用通义千问实现文生图网页应用

前言 本文教程如何使用通义千问的大模型服务平台的接口&#xff0c;实现图片生成的网页应用&#xff0c;主要用到的技术服务有&#xff0c;chainlit 、 langchain、 flux。合利用了大模型的工具选择调用能力。实现聊天对话生成图片的网页应用。 阿里云 大模型服务平台百炼 API…

最新融合多模态的理解和生成的大一统transform架构,show-o模型部署

Show-o是由字节跳动和新加坡国立大学Show Lab共同研发的一个多模态大模型&#xff0c;统一了多模态理解和生成。 Show-o的创新之处在于它将自回归和离散扩散建模相结合&#xff0c;以适应不同和混合模态的输入和输出。 Show-o模型的架构基于预训练的大型语言模型&#xff08;…

web基础之SSRF

1、内网访问 题目提示&#xff1a;访问位于127.0.0.1的flag.php&#xff1b;直接利用ssrf漏洞访问?url127.0.0.1/flag.php 2、伪协议读取文件 &#xff08;1&#xff09;题目提示&#xff1a;尝试去读取一下Web目录下的flag.php吧 &#xff08;2&#xff09;什么是伪协议&a…

【鸿蒙】HarmonyOS NEXT星河入门到实战6-组件化开发-样式结构重用常见组件

目录 1、Swiper轮播组件 1.1 Swiper基本用法 1.2 Swiper的常见属性 1.3 Swiper的样式自定义 1.3.1 基本语法 1.3.2 案例小米有品 2、样式&结构重用 2.1 Extend:扩展组件(样式、事件) 2.2 Styles:抽取通用属性、事件 2.3 Builder:自定义构建函数(结构、样式、事…

无人机视角-道路目标检测数据集 航拍 8600张 voc yolo

数据集名称&#xff1a; 无人机视角-道路目标检测数据集 数据集规模&#xff1a; 图像数量&#xff1a;8600张拍摄方式&#xff1a;航拍&#xff08;使用无人机拍摄&#xff09;标注格式&#xff1a;支持VOC和YOLO格式 数据集内容&#xff1a; 该数据集由无人机从空中拍摄的…

Android10源码刷入Pixel2以及整合GMS

一、ASOP源码下载 具体可以参考我之前发布的文章 二、下载相关驱动包 这一步很关键,关系到编译后的镜像能否刷入后运行 下载链接:Nexus 和 Pixel 设备的驱动程序二进制文件 如下图所示,将两个驱动程序上传到Ubuntu服务器,并进行解压,得到两个脚本: 下载解压后会有两…

5.qml 如何管理好控制台打印输出

c 在工程文件里面加入&#xff0c;这个只是禁用了c端的打印 DEFINES QT_NO_WARNING_OUTPUT DEFINES QT_NO_DEBUG_OUTPUT qml 在pro里面添加 #CONFIG - declarative_debug #CONFIG - qml_debug DEFINES QT_QML_DEBUG_NO_WARNING禁用qml打印,在main.cpp中引入 qputenv…

git为不同的项目设置不同的提交作者

方法1&#xff1a;找到项目的.git文件夹打开 打开config在下面添加自己作者信息 [user]name 作者名email 邮箱方法2&#xff1a;直接在.git文件夹设置作者名&#xff08;不使用–global参数&#xff09; git config user.name "xxxxx"如果想要修改之前提交的…

【idea-安装】

JetBrains官⽹ : https://www.jetbrains.com/ 1.下载idea安装包&#xff0c;下载旧一些的版本&#xff0c;避免新版本的不稳定。 下载下来的安装包是exe格式的&#xff0c;直接点击运行。 点击Next 2.选择要下载的位置&#xff0c;点击下一步。 3.选择⽣成快捷⽅式和建⽴⽂件…

uniapp数据缓存和发起网络请求

数据缓存 uni.onStorageSync同步的方式将数据存储到本地缓存 <template><button click"onStorageSync()">存储数据</button> </template><script setup>const onStorageSync () > {// 存储数据uni.setStorageSync(username, 张三)…

刷题活动(旋转和翻转)

前两天打了CCPC网络赛&#xff08;让打老实了&#xff09;&#xff0c;现在认识到了刷题的重要性&#xff0c;于是我开创了这么个栏目&#xff0c;我们一起刷一下题。 还是在ACwing网站上刷题 旋转和翻转 首先&#xff0c;申一下题目&#xff0c;输入一个数字 n &#xff0c;来…

【堆的应用--C语言版】

前面一节我们都已将堆的结构&#xff08;顺序存储&#xff09;已经实现&#xff0c;对树的相关概念以及知识做了一定的了解。其中我们在实现删除操作和插入操作的时候&#xff0c;我们还同时实现了建大堆&#xff08;小堆&#xff09;的向上&#xff08;下&#xff09;调整算法…

JVM 调优篇2 jvm的内存结构以及堆栈参数设置与查看

一 jvm的内存模型 2.1 jvm内存模型概览 2.2 pc计数器 它是一块很小的内存空间&#xff0c;集合可以忽略不记&#xff0c;也是运行速度最快的存储区域。不会随着程序的运行需要更大的空间。 在jvm规范中&#xff0c;每个线程都有它自己的程序计数器&#xff0c;是线程私有的&…

DIC技术助力新能源汽车主机厂力学测试研发与整车性能提升

在新能源汽车研发过程中&#xff0c;非接触式全视场应变DIC测量方案&#xff0c;越来越受到汽车主机厂的信赖与认可。传统接触式传感器&#xff0c;在精度、灵活性和数据处理能力上存在局限。DIC技术可提供精确、高效、全视场、便捷的非接触式测量解决方案。 在汽车研发阶段&a…

C语言知识体系思维导图

为了更清晰地描述C语言知识体系&#xff0c;笔者用一个结构化的思维导图来概括其主要组成部分。见下&#xff1a; 这个思维导图旨在提供一个全面而系统的视角&#xff0c;帮助学习者逐步构建扎实的C语言知识体系。随着学习的深入&#xff0c;可以根据个人兴趣和职业需求&#x…

《Diffusion Models Without Attention》CVPR2024

摘要 这篇论文探讨了在高保真图像生成领域&#xff0c;去噪扩散概率模型&#xff08;Denoising Diffusion Probabilistic Models, DDPMs&#xff09;的重要性。尽管DDPMs在捕捉复杂视觉分布方面表现出色&#xff0c;但在高分辨率图像生成上面临显著的计算挑战。现有的方法&…

计算机毕业设计 《计算机基础》网上考试系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

大模型分离架构学习记录

GPU Direct GPU 网络的情况已经发生了很大变化。每个 GPU 都有自己的内部互联&#xff0c;例如 NVIDIA 的 A100 或 H800&#xff0c;它们内部的 NVLink 互联可以达到 600GB 甚至 900GB。这种内部互联与外部以太网网络集群设计之间存在耦合关系。GPU 是单机多网卡的&#xff0c…

创意无限:五款AI绘画应用,让艺术创作更简单

随着人工智能技术的不断进步&#xff0c;AI绘画已经成为一个不可忽视的现象。在短视频平台上&#xff0c;用户只需轻触屏幕&#xff0c;就能生成风格各异的画作&#xff0c;这种一键生成的特效迅速吸引了大量关注。AI绘画技术的快速发展&#xff0c;不仅让艺术创作变得更加便捷…