大数据技术之SparkCore

文章开篇先简单介绍一下SparkCore: Spark Core是spark的核心与基础,实现了Spark的基本功能,包含任务调度,内存管理,错误恢复与存储系统交互等模块 Spark Core中包含了对Spark核心API——RDD API(弹性分布式数据集)的定义:RDD表示分布在多个计算节点上可以并行操作的元素集合,是spark的核心抽象。 第1章 RDD概述 1.1 什么是RDD RDD(Resilient Distributed Dataset)叫做分布式数据集,是Spark中最基本的数据抽象。代码中是一个抽象类,它代表一个不可变、可分区、里面的元素可并行计算的集合。 1.2 RDD的属性 1)一组分区(Partition),即数据集的基本组成单位; 2)一个计算每个分区的函数; 3)RDD之间的依赖关系; 4)一个Partitioner,即RDD的分片函数; 5)一个列表,存储存取每个Partition的优先位置(preferred location)。 1.3 RDD特点 RDD表示只读的分区的数据集,对RDD进行改动,只能通过RDD的转换操作,由一个RDD得到一个新的RDD,新的RDD包含了从其他RDD衍生所必需的信息。RDDs之间存在依赖,RDD的执行是按照血缘关系延时计算的。如果血缘关系较长,可以通过持久化RDD来切断血缘关系。 1.3.1 分区 RDD逻辑上是分区的,每个分区的数据是抽象存在的,计算的时候会通过一个compute函数得到每个分区的数据。如果RDD是通过已有的文件系统构建,则compute函数是读取指定文件系统中的数据,如果RDD是通过其他RDD转换而来,则compute函数是执行转换逻辑将其他RDD的数据进行转换。 1.3.2 只读 如下图所示,RDD是只读的,要想改变RDD中的数据,只能在现有的RDD基础上创建新的RDD。 由一个RDD转换到另一个RDD,可以通过丰富的操作算子实现,不再像MapReduce那样只能写map和reduce了,如下图所示。 RDD的操作算子包括两类,一类叫做transformations,它是用来将RDD进行转化,构建RDD的血缘关系;另一类叫做actions,它是用来触发RDD的计算,得到RDD的相关计算结果或者将RDD保存的文件系统中。下图是RDD所支持的操作算子列表。 1.3.3 依赖 RDDs通过操作算子进行转换,转换得到的新RDD包含了从其他RDDs衍生所必需的信息,RDDs之间维护着这种血缘关系,也称之为依赖。如下图所示,依赖包括两种,一种是窄依赖,RDDs之间分区是一一对应的,另一种是宽依赖,下游RDD的每个分区与上游RDD(也称之为父RDD)的每个分区都有关,是多对多的关系。 1.3.4 缓存 如果在应用程序中多次使用同一个RDD,可以将该RDD缓存起来,该RDD只有在第一次计算的时候会根据血缘关系得到分区的数据,在后续其他地方用到该RDD的时候,会直接从缓存处取而不用再根据血缘关系计算,这样就加速后期的重用。如下图所示,RDD-1经过一系列的转换后得到RDD-n并保存到hdfs,RDD-1在这一过程中会有个中间结果,如果将其缓存到内存,那么在随后的RDD-1转换到RDD-m这一过程中,就不会计算其之前的RDD-0了。 在这里插入图片描述 1.3.5 CheckPoint 虽然RDD的血缘关系天然地可以实现容错,当RDD的某个分区数据失败或丢失,可以通过血缘关系重建。但是对于长时间迭代型应用来说,随着迭代的进行,RDDs之间的血缘关系会越来越长,一旦在后续迭代过程中出错,则需要通过非常长的血缘关系去重建,势必影响性能。为此,RDD支持checkpoint将数据保存到持久化的存储中,这样就可以切断之前的血缘关系,因为checkpoint后的RDD不需要知道它的父RDDs了,它可以从checkpoint处拿到数据。 第2章 RDD编程 2.1 编程模型 在Spark中,RDD被表示为对象,通过对象上的方法调用来对RDD进行转换。经过一系列的transformations定义RDD之后,就可以调用actions触发RDD的计算,action可以是向应用程序返回结果(count, collect等),或者是向存储系统保存数据(saveAsTextFile等)。在Spark中,只有遇到action,才会执行RDD的计算(即延迟计算),这样在运行时可以通过管道的方式传输多个转换。 要使用Spark,开发者需要编写一个Driver程序,它被提交到集群以调度运行Worker,如下图所示。Driver中定义了一个或多个RDD,并调用RDD上的action,Worker则执行RDD分区计算任务。 2.2 RDD的创建 在Spark中创建RDD的创建方式可以分为三种:从集合中创建RDD;从外部存储创建RDD;从其他RDD创建。 2.2.1 从集合中创建 从集合中创建RDD,Spark主要提供了两种函数:parallelize和makeRDD 1)使用parallelize()从集合创建 scala> val rdd = sc.parallelize(Array(1,2,3,4,5,6,7,8)) rdd: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at parallelize at :24

Speedify使用步骤

好的,我将为您介绍使用Speedify的步骤。 前往Speedify的官网(https://www.speedify.com/),点击页面上的“下载”按钮。 选择适用于您设备的版本并下载。 安装Speedify。根据您的操作系统,安装过程可能略有不同。 在安装后,启动Speedify。 当您首次启动Speedify时,您需要输入电子邮件地址和密码来创建帐户。如果您已经有了Speedify帐户,请输入您的登录凭据。 当您登录后,您就可以开始使用Speedify了。默认情况下,Speedify会自动连接到最佳服务器。如果您想要手动选择服务器,可以点击“选择服务器”按钮来进行更改。 如果您希望暂时停止使用Speedify,可以点击“断开连接”按钮。当您准备好再次使用Speedify时,只需再次点击“连接”按钮即可。 希望以上步骤能够帮助您快速上手使用Speedify。如果您在使用过程中遇到问题,可以尝试查看帮助文档或者联系Speedify的技术支持团队。

【图神经网络】Pytorch图神经网络库——PyG异构图学习

PyG异构图学习 举个例子创建异构图Utility函数 异构图Transformations创建异构图神经网络自动转换GNN模型使用异构卷积包装器部署现有的异构算子 异构图采样参考资料 大量真实世界数据集存储为异构图,这促使Pytorch Geometric(PyG)中引入专门的功能。例如,推荐领域中的大多数图(如社交图)都是异构的,因为它们存储关于不同类型的实体及其不同类型的关系的信息。本文介绍如何将异构图映射到PyG,以及如何将它们用作图形神经网络模型的输入。 异构图具有不同类型的信息附加到节点和边上。因此,由于类型和维数的差异,单个节点或边特征张量不能包含整个图的所有节点或边特征。相反,需要为节点和边分别指定一组类型,每个类型都有自己的数据张量。由于数据结构的不同,消息传递公式也随之改变,允许以节点或边类型为条件计算消息和更新函数。 举个例子 作为一个示例,我们从OGB数据集看一下异构ogbn-mag网络: 给定的异构图有1,939,743个节点,节点类型分为作者、论文、机构和研究领域四种。它还有21,111,007条边,属于以下四种类型之一: writes(写作):作者写一篇特定的论文affiliated with(附属于):作者附属于某一特定机构cites(引用):一篇论文引用另一篇论文has topic(有主题):一篇论文有一个特定研究领域的主题 这个图的任务是根据图中存储的信息推断出每一篇论文(会议或期刊)的发表地点。 创建异构图 首先,我们可以创建torch_geometric.data.HeteroData类型的数据对象,为每种类型分别定义节点特征张量、边索引张量和边特征张量: from torch_geometric.data import HeteroData data = HeteroData() # 实例化一个空对象 # 初始化结点特征 data['paper'].x = ... # [num_papers, num_features_paper] data['author'].x = ... # [num_authors, num_features_author] data['institution'].x = ... # [num_institutions, num_features_institution] data['field_of_study'].x = ... # [num_field, num_features_field] # 初始化边索引 data['paper', 'cites', 'paper'].edge_index = ... # [2, num_edges_cites] data['author', 'writes', 'paper'].edge_index = ... # [2, num_edges_writes] data['author', 'affiliated_with', 'institution'].

Java实现文件上传和下载

目录 一、简介二、maven依赖三、配置3.1、application.yml3.2、属性配置类 四、工具类(非FTP)4.1、文件上传4.2、文件下载 五、测试5.1、远端下载到服务器5.2、服务器下载到客户端5.3、浏览器上传到服务端 结语 一、简介 我们在工作和生活中经常遇到上传资料或者下载资料,这些资料可能是视频,语音,文件等等,我们统称为文件上传和文件下载,今天我们就基于Spring Boot,实现简单的文件上传下载功能。 二、maven依赖 本文用到的依赖如下: pom.mxl <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.2</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.alian</groupId> <artifactId>file</artifactId> <version>0.0.1-SNAPSHOT</version> <name>file</name> <description>文件上传和下载</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.5.2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> <version>2.5.2</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.12.0</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.68</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.14</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.

【老保姆教程】:Tesseract-OCR图片文字识别

文章目录 🌟介绍一波🌟小安装🌟配置环境变量⭐️tesseract-ocr配置⭐️tessdata语言配置⭐️检测环境变量是否安装成功 🌟语言包的配置使用🌟CMD命令框中进行图片识别操作⭐️举例一:识别数字⭐️举例二:识别文字 🌟pycharm中进行图片识别操作⭐️举例一:识别文字 🌟唠唠问题 🌟介绍一波 Tesseract-OCR 是一款由HP实验室开发由Google维护的开源OCR(Optical Character Recognition , 光学字符识别)引擎。与Microsoft Office Document Imaging(MODI)相比,我们可以不断的训练的库,使图像转换文本的能力不断增强;如果团队深度需要,还可以以它为模板,开发出符合自身需求的OCR引擎。 (别问我咋知道,百度一下,你就知道😛) 🌟小安装 安装Tesseract-OCR(64位的安装包链接) tesseract-ocr-setup-4.00.00dev.exetesseract各种语言集合包 tesseract各种语言集合包 🌟配置环境变量 ⭐️tesseract-ocr配置 下载 tesseract-ocr-setup-4.00.00dev.exe 完成后,对tesseract-ocr进行安装,找到tesseract.exe所在的文件路径,复制该文件所在的路径。 打开环境变量:打开控制面板——>输入“环境”,回车——>点击“编辑系统环境变量”——>点击“环境变量”。 3、在用户变量和系统变量的Path中分别粘贴之前复制的路径,最后一直点击“确定”即可。 ⭐️tessdata语言配置 在Tesseract-OCR的文件夹中找到tessdata文件夹并进入(此文件夹中包含的是各种语言包,提供识别功能)并复制此路径。 打开环境变量(以上已有,不再赘述),在系统变量中点击新建,添加一个系统变量,变量名为TESSDATA_PREFIX,变量值为tessdata文件夹的路径。 ⭐️检测环境变量是否安装成功 👉打开cmd命令框并输入tesseract后回车,如果出现以下内容则表示环境变量安装成功。 🌟语言包的配置使用 下载好tessdata各语言集合包并解压后点击进入文件,即可看见里面有很多语言包(chi_sim是中文识别包,equ是数学公式包,eng是英文包 ),可将对应的语言包复制并粘贴到Tesseract-OCR的文件夹下的tessdata文件夹中。 🌟CMD命令框中进行图片识别操作 在CMD中进入所要识别图片的路径。 ⭐️举例一:识别数字 命令(举例):tesseract 1.png out_1 -1 eng 1.png:图片名称 out_1:识别后形成的文本文件名称 -l:不是数字1,而是字母L的小写 eng:识别的是数字或英文 这时则在图片路径下生成一个名为out_1的文本文件,文件中写入的是识别的内容。 ⭐️举例二:识别文字 🌟pycharm中进行图片识别操作 需要下载的模块: pip install PIL pip install pytesseract ⭐️举例一:识别文字 from PIL import Image from pytesseract import pytesseract a = pytesseract.image_to_string(Image.open('F:/识别/2.png'), lang='chi_sim') print(a) 🌟唠唠问题 大家可以发现👀,使用Tesseract-OCR进行图片文字识别时会出现识别错误的情况,也就是识别精度较低。当我们想识别文字较多,内容较为复杂的图片时,就很难识别出来了,这可咋办?

禁用Chrome自动更新及关闭弹窗

Chrome经常提示自动更新失败,而且更新了以后还会提示,每次打开页面都弹窗,很烦,找了一些方法,又结合自己情况,做个总结分享,希望能帮到大家。 目录 1.关闭更新服务2.删除update文件并设置权限3.关闭弹窗提示4.完成 1.关闭更新服务 win+r 打开cmd,输入services.msc,确定,打开服务菜单,找到gupdate和gupdatem,如下图 分别双击服务,设置启动类型为禁用,确认 2.删除update文件并设置权限 打开Chrome目录,如 C:\Program Files (x86)\Google ,找到Update文件夹,删除文件夹中所有内容,右击Update文件夹–>属性–>安全–>编辑,选择SYSTEM,设置权限为拒绝,最后确定。 3.关闭弹窗提示 如果浏览器固定在任务栏,先取消固定,等操作完成后,再将Chrome固定到任务栏 在开始菜单中,找到Chrome,右击打开文件位置,右击属性,在“目标”后,添加如下内容,再点击确认 --disable-background-networking 4.完成 做完以上步骤,应该就不会自动更新也没有弹窗了,可以不用忍受弹窗折磨了。

正则校验手机号

正则表达式可以用来校验手机号码的合法性。 如果你想使用正则表达式来校验中国大陆的手机号码,可以使用如下的正则表达式: ^1[3-9]\d{9}$ 这个正则表达式可以匹配所有 13 到 19 开头的 11 位数字,即所有中国大陆的手机号码。 例如,如果你想校验字符串 "13812345678" 是否是一个合法的手机号码,可以使用如下的代码: import re def check_phone_number(phone_number): pattern = "^1[3-9]\d{9}$" if re.match(pattern, phone_number): return True else: return False print(check_phone_number("13812345678")) # True print(check_phone_number("23812345678")) # False print(check_phone_number("138123456789")) # False print(check_phone_number("138123456")) # False 注意: 这个正则表达式只适用于中国大陆的手机号码,如果你想校验其他国家/地区的手机号码,可能需要使用不同的正则表达式。这个正则表达式只能用来校验手机号码的合法性,不能用来判断手机号码是否存在或者能否接收短信/电话。

css实现环形进度条

效果: 纯css实现进度条,这里用到的核心属性为box-show,box-show可以控制元素的阴影,通过控制元素阴影的移动位置来实现进度条效果。 .box{ box-show : 0px 0px 0px 0px #ccc; } box-show有5个参数 第一个参数: 控制元素阴影的左右位置第二个参数: 控制元素阴影的上下位置第三个参数: 控制元素阴影的模糊程度第四个参数: 控制元素阴影的大小(放大&缩小)第五个参数: 设置元素阴影的颜色 前四个参数部分可以省略,例如,box-show: 0px 0px 2px #ccc,这一句就是设置2px的模糊阴影,颜色为#ccc。 下面是代码部分: <div class="container"> <div class="shadow">Hover Me</div> </div> /* 使用 scss */ $color: #e91e63; .container{ position: relative; overflow: hidden; width: 124px; height: 124px; margin: 0 auto; border-radius: 50%; } .shadow{ position: absolute; top: 50%; left: 50%; transform: translate(-50% , -50%); width: 120px; height: 120px; line-height: 120px; border-radius: 50%; color: #fff; font-size: 20px; cursor: pointer; box-shadow: 60px -60px 0 2px $color,-60px -60px 0 2px $color,-60px 60px 0 2px $color,60px 60px 0 2px $color; text-align: center; /* &表示嵌套的上一级对象 这里就指的是shadow border 动画名称 0.

python之环境切换问题实践总结

前言 这个标题是实践总结,为什么呢,因为这个问题困扰了我整整一个月,都没有解决。现在终于解决了,写一篇文章记录一下,也看看有没有小伙伴遇到一样的问题,或者在我下次还会发生这样的实情事可以第一时间解决,幸好不着急,不然就g了。 问题描述 就是我在暑假用python做了一个网页,这也是我学python以来第一个 大项目,做完之后,电脑太卡了,太乱了。然后就把电脑恢复出厂了,想着项目我已经做好了电脑再怎么折腾都会运行的,可是,等我把软件,环境全部装好之后,就发现好多报错。也不是报错,好多提示,一会是这个库没有安装,一会是python没有解释器。 库没安装,好办,我去安装,这一次我聪明了,做我恢复之前我搜过一个技能,怎么把项目中用到的库导出来, pip freeze > requirements.txt 这个命令,可以把当前环境或者项目用到的第三方库全部导出来放到一个requirements.txt文件里面,方便下次一次性安装。 那我接下来安装 pip install -r requirements.txt 我安装完了。没有解释器,那我自己配置一下,但是还是提示我没有安装模块,但我我真的是确确实实安装了。 解决方案 最后我解决了,怎么解决的,归根结底还是我环境弄得不对,因为我学习的大数据,老师让我们使用anaconda。因为这个软件我用了半年了,大致有个了解,就是个python的发行版本。这一次直接给电脑安装了anaconda,没有安装python。 先说一下我的问题,我确确实实安装了第三方库,但是我错了,我把环境弄错了,我做的项目和我安装第三方库的不是一个环境。怎么理解呢,我住在这个房间,但是我把东西放在了那个房间。这么一来,我为什么找不到我的东西,因为我放错地方了。而且我百度,还创建好多没用的环境 然后我又安装python、卸载python,安装anaconda,卸载anaconda。来回横跳,就是不行 然后最近又在捣鼓一个东西,这里我大致了解了一些python环境相关的知识。今天,2022,10,31日解决了。今天是万圣节。 我记录一下解决过程 anaconda 介绍 一开接触这个,弄得我一头雾水,现在学习了快一年了,基本明白了。 先看一下百度百科对anaconda的解释 Anaconda包括Conda、Python以及一大堆安装好的工具包,比如:numpy、pandas等 Miniconda包括Conda、Python conda是一个开源的包、环境管理器,可以用于在同一个机器上安装不同版本的软件包及其依赖,并能够在不同的环境之间切换 我用了这么久我来说一下这是什么意思 这是python的升级版,pro版 一大堆的安装好的工具包,就是说在没有使用anaconda的时候,我们使用一个第三方库,都有先pip install一下。是不是觉得很麻烦,我就想过这个问题,有没有什么方法可以不用安装这些库,自动就安装好,我一用pip就会报错。而anaconda对于像数据分析用的numpy、pandas等等这些工具包,不需要我们额外安装。已经带好了 conda是什么事,就是用来管理包的工具,其实和pip一样。我看好多文档,这是conda下载的比较全面,这个我具体不知道。 python,如果你觉得是python的解释器,那就对了一半,还有一半,现在python3.11都出来了,在我们之前安装的时候,就只能安装python的一种版本,但是anaconda不一样,你可以用python的各种版本,3.x、2.x来回切换。 这里就提到了一个虚拟环境,一开始我也是不明白,是这样的 我们现在用多个项目,那我就可以为每一个项目创建一个工作环境,对,虚拟环境也可以理解为工作环境。让这个项目只在属于自己的环境下开发,这时我们就可以每一个工作环境创建不同的python版本。各自版本的第三方库互不干扰。 anaconda,现在我用习惯了,都觉得很方便 因为提供了虚拟环境,所以也不用安装python了,这个里面就已经有了,但是要学会配置。 更新anaconda conda update anaconda 环境管理 查看anaconda版本 conda -V 注意这个V要大写。这一步也是检测anaconda有没有安装成功的重要方法 查看所有虚拟环境 conda env list 或 conda info -e 或 conda info --envs 查看当前有哪些 虚拟环境,这里我要演示一下 (base) PS C:\Users\huan> conda env list # conda environments: # base * D:\anaconda3 base 是环境名称,D:\anaconda3是环境的安装位置

解决git bash here 连接GitHub失败的问题fatal: unable to access ‘https://github.com/xxiaoooo/vscode.git/‘: Open

问题:fatal: unable to access 'https://github.com/xxiaoooo/vscode.git/': OpenSSL SSL_read: Connection was reset, errno 10054 译:致命:无法访问'https://github.com/xxiaoooo/vscode.git/':OpenSSL SSL_read:连接已重置,错误号10054 产生原因:一般是这是因为服务器的SSL证书没有经过第三方机构的签署,所以才报错 参考网上解决办法:解除ssl验证后,再次git即可 输入:$ git config --global http.sslVerify "false" 又报错显示:fatal: unable to access 'https://github.com/xxiaoooo/vscode.git/': Could not resolve host: github.com 译:致命:无法访问'https://github.com/xxiaoooo/vscode.git/':无法解析主机:github.com ...原因:出现该错误是因为使用了proxy代理,所以要解决该问题,核心操作就是要取消代理; ...查询:通过git配置文件查看是否使用代理:git config --global http.proxy ...解决:通过git取消代理: git config --global --unset http.proxygit config --global --unset https.proxy 输入:git config --global http.proxy 再次输入: git config --global --unset http.proxy 然后再次链接GitHub仓库即可。

git pull报错error: You have not concluded your merge (MERGE_HEAD exists).

输入git pull 显示以下信息 错误:您尚未结束合并(merge_HEAD存在)。 提示:请在合并之前提交更改。 致命:由于未完成合并而退出。 原因是因为我没有拉取仓库代码的最新版,然后又上传更改的内容,上传一半失败了,因为有个文件发生冲突了 解决方案:舍弃本地代码,远端版本覆盖本地版本(慎重) 输入git fetch --all 输入git reset --hard main ——强制恢复 注:这个地方可使用 git reset --hard origin/main 或git reset --hard origin/master 具体要根据红框圈住的地方选择 最后在输入git fetch ——从远程获取最新版本到本地,不会自动merge(合并两个分支) 然后就在本地仓库上又看见上传失败的文件了,先拉取远程仓库的最新版同步到本地,就可以把文件再重新上传了

C#使用FreeSpire.XLS创建Excel

前言 对于使用C#程序生成Excel文件,我经历了以下几个阶段,强烈推荐使用Spire.XLS: Microsoft.Office.Interop.Excel.dllEPPlus.dllSpire.XLS.dll 对于Spire.XLS的免费版本,Free Spire.XLS有以下限制,但一般够用了,其官网说明如下 免费 Spire.XLS 感兴趣。它是完全免费的,没有任何警告消息供您商业和个人使用。 免费版限于每个工作簿5张和每张200行。在读取或写入XLS或PDF文件期间会强制执行此限制。 从Free Spire.XLS v7.8开始,加载和保存.xlsx文件格式没有任何限制。 将Excel文件转换为PDF文件时,只能获取PDF文件的前3页。 DLL引用 使用NuGet搜索FreeSpire.XLS安装到项目即可 我们用下图的一个表格,来做示例代码操作 代码如下 using Spire.Xls; using Spire.Xls.Charts; using System; using System.Data; using System.Drawing; namespace Spire_XLS_Demo { class Program { static void Main(string[] args) { //定义Excel保存路径,在临时目录中 string strFileName = System.IO.Path.GetTempPath() + "DEMO_" + DateTime.Now.ToString("yyyyMMdd_hhmmss") + ".xlsx"; //实例化Excel Workbook book = new Workbook(); book.DefaultFontName = "Arial"; Worksheet sheet1 = book.Worksheets[0]; Worksheet sheet2 = book.Worksheets[1]; //删除自动创建的Sheet3 book.Worksheets[2].Remove(); //加载数据 DataTable dtMyData = GetMyData(); //保存数据 sheet1.

VUE—跳转传参

目录 一、基本使用 二、$route和$router 三、路由跳转的两种方式 四、编程式导航 五、传参 六、props 一、基本使用 1、安装vue-router cnpm install --save vue-router@3 如果大家用的是vue2,下载vue-router不设置版本好的话,可能会因为版本过高,不兼容的问题导致项目报错,所以大家可以限制版本号 如果已经下载了最新的版本,可以先删除再下载 npm uninstall vue-router --legacy-peer-deps 2、创建路由组件 一般来说vue的路由组件建在【pages或者views】文件夹下,非路由组件建在components文件夹下 所有我们要先创建一个文件夹,我这里取名pages,再创建两个文件夹about和detail <template> <div>about</div> </template> <script> export default { name: "about", data() { return {}; }, created() {}, mounted() {}, methods: {}, }; </script> <style scoped lang="stylus"></style> detail组件和about一样 3、根组件添加非路由组件 <template> <div> <router-link to="/about">关于</router-link> <router-link to="/detail" style="marginLeft:20px">详情</router-link> <router-view></router-view> </div> </template> <script> export default { name: 'app', data () { return { } }, created () { }, mounted () { }, methods: { } } </script> <style scoped lang="

windows10怎么安装linux子系统

要在 Windows 10 上安装 Linux 子系统,您需要执行以下步骤: 确保您的 Windows 10 版本为“家庭版”或“专业版”,因为 Linux 子系统只能在这两个版本中使用。 打开“设置”并单击“更新与安全”。 在左侧菜单中单击“开发人员选项”。 在右侧的“开发人员选项”窗口中,勾选“启用 Windows Subsystem for Linux”选项。 单击“确定”并重新启动您的计算机。 在启动后,打开 Microsoft Store 并搜索“Linux”。 在搜索结果中,选择你想要安装的 Linux 发行版,并单击“获取”

Easy Excel 常用注解

1.@ExcelProperty - 用于匹配excel和实体类的匹配,参数:value是列名,index是列名的序号, converter默认自动选择,指定当前字段用什么转换器,默认会自动选择。写的情况下只要实现com.alibaba.excel.converters.Converter#convertToExcelData(com.alibaba.excel.converters.WriteConverterContext<T>) 方法即可。 2.@ColumnWith - 设置列宽,参数最大可以设置255个字符 3.@ContentFontStyle - 设置单元格内容字体格式 参数含义fontName字体名称fontHeightInPoints字体高度italic是否斜体strikeout是否设置删除水平线color字体颜色typeOffset偏移量underline下划线bold是否加粗charset编码格式 4.@ContentRowHeight - 设置行高,value为-1代表自动行高 5.@ContentStyle - 设置内容格式 参数含义dataFormat日期格式hidden设置单元格使用此样式隐藏locked设置单元格使用此样式锁定quotePrefix在单元格前面增加`符号,数字或公式将以字符串形式展示horizontalAlignment设置是否水平居中wrapped设置文本是否应换行。将此标志设置为true通过在多行上显示使单元格中的所有内容可见verticalAlignment设置是否垂直居中rotation设置单元格中文本旋转角度。03版本的Excel旋转角度区间为-90°90°,07版本的Excel旋转角度区间为0°180°indent设置单元格中缩进文本的空格数borderLeft设置左边框的样式borderRight设置右边框样式borderTop设置上边框样式borderBottom设置下边框样式leftBorderColor设置左边框颜色rightBorderColor设置右边框颜色topBorderColor设置上边框颜色bottomBorderColor设置下边框颜色fillPatternType设置填充类型fillBackgroundColor设置背景色fillForegroundColor设置前景色shrinkToFit设置自动单元格自动大小 6.@HeadFontStyle - 设置标题字体格式 参数含义fontName设置字体名称fontHeightInPoints设置字体高度italic设置字体是否斜体strikeout是否设置删除线color设置字体颜色typeOffset设置偏移量underline设置下划线charset设置字体编码bold设置字体是否加粗 7.@HeadRowHeight - 设置标题行行高,value为-1代表自动标题行高 8.@HeadStyle - 设置标题样式 参数含义dataFormat日期格式hidden设置单元格使用此样式隐藏locked设置单元格使用此样式锁定quotePrefix在单元格前面增加`符号,数字或公式将以字符串形式展示horizontalAlignment设置是否水平居中wrapped设置文本是否应换行。将此标志设置为true通过在多行上显示使单元格中的所有内容可见verticalAlignment设置是否垂直居中rotation设置单元格中文本旋转角度。03版本的Excel旋转角度区间为-90°90°,07版本的Excel旋转角度区间为0°180°indent设置单元格中缩进文本的空格数borderLeft设置左边框的样式borderRight设置右边框样式borderTop设置上边框样式borderBottom设置下边框样式leftBorderColor设置左边框颜色rightBorderColor设置右边框颜色topBorderColor设置上边框颜色bottomBorderColor设置下边框颜色fillPatternType设置填充类型fillBackgroundColor设置背景色fillForegroundColor设置前景色shrinkToFit设置自动单元格自动大小 9.@ExcelIgnore - 忽略该字段转换成Excel列名属性 10.@ExcelIgnoreUnannotated - 没有注解的字段都不转换 11.

TLS 协议与 TLS 证书的生成、配置

这里不详细说明 TLS 协议的内容,请另行查阅文档 画外:由于 RSA/ECC 两类非对称加密算法被广泛的应用在各类加密通讯中,因此下面说明的证书生成、签名过程, 同样也适用于其他场景,比如 SSH 密钥对生成、JWT 密钥对生成等等。 TLS 协议 我们需要加密网络数据以实现安全通信,但是有一个现实的问题: 非对称加密算法(RSA/ECC 等)可以方便地对数据进行签名/验证,但是计算速度慢。对称加密算法(ChaCha20/AES 等)计算速度快,强度高,但是无法安全地生成与保管密钥。 于是 TLS 协议在握手阶段使用非对称算法验证服务端,并安全地生成一个对称密钥,然后使用对称算法进行加密通信。 这里讲「安全地生成一个对称密钥」(Elliptic Curve Diffie-Hellman (ECDHE) key exchange),提供了「完美前向保密(Perfect Forward Secrecy)」特性,前向保密能够保护过去进行的通讯不受密码或密钥在未来暴露的威胁。(tls1.1/tls1.2 也可以使用非前向安全的算法!要注意!) TLS 通过两个证书来实现服务端身份验证,以及对称密钥的安全生成: CA 证书(公钥):浏览器/操作系统自带,用于验证服务端的 TLS 证书的签名。保证服务端证书可信。TLS 证书:使用 CA 证书验证了 TLS 证书后,将使用这个 TLS 证书进行协商,以安全地生成一个对称密钥。 CA 证书和 TLS 证书,都只在 TLS 握手阶段有用到,之后的通信就与它们无关了。 一、TLS 证书支持保护的域名类型 TLS 证书支持配置多个域名,并且支持所谓的通配符(泛)域名。 但是通配符域名证书的匹配规则,和 DNS 解析中的匹配规则并不一致! 根据证书选型和购买 - 阿里云文档 的解释,通配符证书只支持同级匹配,详细说明如下: 一级通配符域名:可保护该通配符域名(主域名)自身和该域名所有的一级子域名。 例如:一级通配符域名 *.aliyun.com 可以用于保护 aliyun.com、www.aliyun.com 以及其他所有一级子域名。 但是不能用于保护任何二级子域名,如 xx.aa.aliyun.com 二级或二级以上通配符域名:只能保护该域名同级的所有通配域名,不支持保护该通配符域名本身。 例如:*.a.aliyun.com 只支持保护它的所有同级域名,不能用于保护三级子域名。 要想保护多个二三级子域,只能在生成 TLS 证书时,添加多个通配符域名。

win10下安装、卸载ubuntu双系统

Windows、Ubuntu双系统正确卸载Ubuntu系统 先判断启动方式,以管理员身份打开cmd或者power shell,输入bcdedit,找到path那一行,如果是winload.efi就是uefi引导,若为exe就是legacy引导 或者win+r输入msinfo32找到bios模式,如果显示为传统,就表示是legacy,否则为uefi 如果为legacy启动,使用mbrfix 如果ubuntu不是以wubi方式安装的,那么卸载ubuntu时要慎重,不是直接删除ubuntu所在分区这么简单的,否则你会发现你的windows系统也进不去了。那是因为如果你安装Ubuntu的时候将GRUB写入到MBR,也就是/dev/sda,(如果你每次一开机就出现GURB菜单,说明写入到MBR )。那么你卸载ubuntu的时候就将MBR重写,去掉ubuntu的GURB。 正确的删除ubuntu方法如下: 第1步,修复MBR 1.进入windows,下载个软件MbrFix,放在C:\windows\system32文件夹中 2.打开命令提示符(以管理员身份启动) 3.在命令提示符中输入MbrFix /drive 0 fixmbr /yes 4.此时已经修复了MBR,重启电脑后会发现已经没有了linux启动选项,直接进入windows了 第2步,删除Ubuntu 在 Windows下,在计算机(Computer)上点右键->管理(Manage)->磁盘管理(DiskManagement): 有2个没有卷标名称(卷标名称就是驱动器号,如C:,D:,E:,…)的主分区(PrimaryPartition)就是Ubuntu的分区, 主分区的窗口颜色是深蓝色的。 其中一个是交换(Swap)分区,与机器物理内存大小差不多;另一个是root分区,大小和你分配给它的差不多。 分别在这2个分区上点右键,选择删除卷(DeleteVolume),删除卷之后,分区窗口颜色会变为绿色,并合并为一个窗口。 如果你不想安装Ubuntu,那么可以在这个未知分区上创建扩展分区,格式化,分配卷标,给Windows使用。 如果想安装Ubuntu,那么删除分区后就不要有任何操作了。 如果为UEFI启动,使用easyUEFI,https://www.easyuefi.com/index-us.html 下载安装后打开,找到ubuntu删除,然后重启,再删除ubuntu的对应的分区,就可以了 windows下安装ubuntu18.04双系统 1.制作u盘启动盘 准备一个空优盘,(附链接)下载UltralSO,打开优盘点击试用。进入界面:文件-打开 (选择你下载的ubuntu安装包,格式为.ios);然后是:启动-写入硬盘映像;在弹出的新窗口中,硬盘驱动器:选择刚刚插入的U盘写入方式:设置为USB-HDD+其余需要勾选的不管,采用默认的设置就行然后可以格式化一下,最后点击最下面一栏的写入按钮。 2.分出一个盘来安装ubuntu win+s 搜索“计算机管理”-磁盘管理:压缩卷出一个未分配的盘。大一点比较好200G-500G,越大越好。 3.插上优盘,重启,进入bios界面。惠普电脑是按f10或者按esc之后再按f10.进入后如果没有install ubuntu,需要把bios中的启动选项的usb启动跳到最前面,然后再重启就可以了。选择install ubuntu ,最小化安装,其他选项(以便于自己分区) 4.分区 分区很重要,先分逻辑分区再分主分区。双击你压缩卷的那个盘即可分配 重新做ubuntu18.041 有很多东西都不记得了又得重新网上搜一遍大概留下点记录供以后重做用上 Swap(相当于电脑内存):逻辑分区、大小设置为电脑内存大小, 我电脑内存16G 但是我给了8000M 个人认为8G够用了 /boot(引导分区):主分区:大小设置为1000M; 这个1G 因为后续可能会升级太小不够用 /home(用户存储数据用):逻辑分区,要尽可能大,256G空间可以设置为175G。 /.(主分区):主分区,用于存放系统,相当于win7的C盘,50G+即可。 这个是我的分区方法 和分区顺序,我是先分home 逻辑分区 因为我发现先分2个主分区后无法继续分区了 所以先分逻辑分区后面在分主分区 我觉得/home 这个一定要自己分区因为这个是保存的个人数据,万一系统出问题了 这一块里面的数据还能找回来 就和windows 的d,e,f盘一样 如果是/根目录自动分配的 重做系统就丢了 5.安装启动引导器设备选择(windows boot manager·····) 6.拔掉优盘重启就可以了。 7.小问题

【Java】不重新打包 修改Springboot启动端口

运行jar包时指定端口 如下:指定端口为8088,不管jar包里面之前是指定了什么端口号,最终访问服务时还是以8088这个端口进行访问 java -jar xxx.jar --server.port=8081 使用vim 修改jar包中的配置文件 1. 使用vim进入jar包 vim api_old.jar 2. 找到指定的文件名,进入修改的文件 3.修改后 保存退出

OJ(Online Judge)系统汇总

OJ百度百科 在线判题系统_百度百科 ***Openjudge和Poj 北大OJ(英文),经常服务器坏, Welcome To PKU JudgeOnline 备用网站 OpenJudge - NOI - 首页 ***《信息学奥赛一本通(C++版)》配套OJ 信息学奥赛一本通(C++版)在线评测系统 信息学奥赛一本通(C++版)在线评测系统 难度:中等,适合零基础 啊哈添柴: 在线OJ网站 - 啊哈添柴 ***洛谷 Luogu 洛谷比赛 比赛列表 - 洛谷 有很多网友认为不适合零基础,但洛谷某管理人员认为适合,也有网友认为认为洛谷的题在有老师的指导下适合零基础的。 洛谷支持4个外网:Uva,Spoj,Atcoder,Codeforces 洛谷有网校,适合省选之前的学生。 涉及到读字符、字符串的数据有污染,必须用洛谷独门蹩脚方法破解。 P1388 算式 数据有错,但由于以“涉及版权”理由不提供数据下载,错误长期得不到更正。 编程魔法师 新华算法竞赛培训平台 hydro.ac 首页 - HydroOJ atcoder.jp AtCoder Vijos 首页 - Vijos MOOC课程——程序设计与算法 OpenJudge - NOI - 首页 难度:中等 LOJ https://loj.ac/ HustOJ MYOJ 热心家长创建的一个自测OJ,与华中科技大学颇有渊源。不定期举办一些针对初学者的比赛。菜鸟们不妨一试。 ***牛客竞赛网 牛客竞赛OJ_ACM/NOI/CSP/CCPC/ICPC_信息学编程算法训练平台 牛客网介绍: 是一个专注于算法选手学习和成长的专业训练网站。 每周五准时一场竞赛,并有丰厚奖品相送。 网站题库包括但不限于历年的noip初赛、复赛试题,各省省选、NOI真题、USACO月赛题等等。尤其对noip初赛试题提供在线打分功能,方便选手进行自我估测。 此外包含专业训练区,包括从入门到NOI各个等级的专区训练。针对信竞赛知识点,专门的分类可以进行针对性的练习。 牛客不定期特邀金牌选手进行直播授课,并且只收一分钱。更有效的帮助所有选手全面提高水平。 自2017问世以来,共举办比赛数百场,比赛题目上千道,比赛参赛人数20万人次,竞技选手从中小学到大学全覆盖。 牛客网比赛 牛客竞赛OJ_ACM/NOI/CSP/CCPC/ICPC_信息学编程算法训练平台

计算多项式的值(c++基础)

题目描述: 假定多项式的形式为xn+xn-1+…+x2+x+1,请计算给定单精度浮点数x和正整数n值的情况下这个多项式的值。 输入格式: 输入仅一行,包括x和n,用单个空格隔开。x在float范围内,n <= 1000000。 输出格式: 输出一个实数,即多项式的值,精确到小数点后两位。保证最终结果在long double范围内。 样例输入: 2.0 4 样例输出: 31.00 时间限制: 1000ms 空间限制: 128MB 代码如下: #include<bits/stdc++.h> using namespace std; int main(){ long double x,n,s=1,a=1; cin>>x>>n; for(int i=1;i<=n;i++){ a=a*x; s=s+a; } printf("%.2Lf",s); return 0; }

Docker使用(容器、镜像相关命令)

虚拟化 在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。这些资源的新虚拟部份是不受现有资源的架设方式,地域或物理组态所限制。一般所指的虚拟化资源包括计算能力和资料存储。 在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化的利用物理硬件 对资源充分利用。 虚拟化技术种类很多,例如:软件虚拟化、硬件虚拟化、内存虚拟化、网络虚拟化(vip)、桌面虚拟化、服务虚拟化、虚拟机等等。 什么是Docker Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护 Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。 Docker服务器与客户端 Docker是一个客户端-服务器(C/S)架构程序。Docker客户端只需要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。Docker提供了一个命令行工具Docker以及一整套RESTful API。你可以在同一台宿主机上运行Docker守护进程和客户端,也可以从本地的Docker客户端连接到运行在另一台宿主机上的远程Docker守护进程 Registry(注册中心) 远程镜像仓库: hub.docker.com Docker用Registry来保存用户构建的镜像。Registry分为公共和私有两种。Docker公司运营公共的Registry叫做Docker Hub。 Docker安装与启动 更新yum包到最新 # yum remove docker docker-common docker-selinux docker-engine sudo yum update 安装需要的软件包 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 设置yum源为阿里源 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 安装docker sudo yum install docker-ce # 查看docker版本 docker -v 设置ustc的镜像 配置阿里镜像站:

uni-popup如何遮挡住uniapp自带的tabbar

uni-popup 是 uni-app 提供的一个组件,它可以用来弹出一个浮层,覆盖在其他内容之上。如果你想使用 uni-popup 遮挡住 uni-app 自带的 tabbar,你可以这样做: 在 uni-app 的根目录下新建一个文件夹,名为 components,然后在 components 文件夹中新建一个组件,名为 uni-popup。 在 uni-popup 组件中,使用 v-if 指令来控制 uni-popup 组件的显示和隐藏。 在 uni-popup 组件中,使用 fixed 定位来设置 uni-popup 组件的位置,并且将它的 z-index 设置为一个较大的值,使它能够在其他组件之上。 在 uni-app 的根目录下的 main.js 中,引入 uni-popup 组件并注册为全局组件。 在 uni-app 的根目录下的 main.js 中,通过 Vue.prototype.$popup 方法将 uni-popup 组件绑定到 Vue 的原型上。 在 uni-app 的根目录下的 main.js 中,通过 Vue.prototype.$popup.show 方法来显示 uni-popup 组件。 在 uni-app 的根目录下的 main.js 中,通过 Vue.prototype.$popup.hide 方法来隐藏 uni-popup 组件。 在 uni-app 的根目录下的 main.

GBK编码的理解

1、我们学程序的时候,所熟知的ASCII码,就是一种编码方式 计算机底层,就只认识0和1. 举个例子,以3bit为例: 所以,如果是000的话,可以对应数字0 如果是001的话,可以对应数字1 。。。 如果是111的话,可以对应数字7。 老外才多少个字符,总共才26个英文字母,加上大小写,才52个。 后来有扩展了一些其他字符,如+-*/ 空格之类的,又扩展了一些控制字符和不可见字符,如CTRL键,DEL键,空格键等。 总之,1个字节,8bit,有256种编码方式,完全可以对应这么多字符。 所以ASCII码字符的所谓编码方式,其实就是数值跟字符建立一个一一映射的关系。(这个一一映射就是高中里面学到的函数) 然后计算机解析到这个这个数值,就会在屏幕上画出对应的点阵字母——所有在屏幕上显示的东西,都是点阵显示的。因为像素比较大,人眼看起来还是比较连续的,但是如果放大的话,可以看出来还是歪歪曲曲的。 如上图,B这个字母就可以用8*12的点阵来显示,当读取到B的ASCII码值的时候,就调出来显示即可。这就完成了编码。 2、ASCII初始字符就127个。后来又扩展了,扩展了一些希腊字母。 整个欧洲的知识体系就是建立在希腊字母表上面的。 3、但是中国不一样,中国的语言体系,是另一套体系,中国的文字,不是字母,而是象形文字。 很明显,以8bit一个字节来编码汉字,很明显不够。中国常用的汉字有6000多个。 那就用两个字节16bit来编码。16bit最多是65536种可能,完全可以覆盖常用的汉字(当然,如果遇到生僻字怎么办?) 用16bit来编码,比如,用16进制数字,0xBABA,可以编码成汉字——“汉” 当计算机识别到16进制数字0xBABA,就可以采用一个16*12的点阵来显示汉字“汉”。这样就完成了编码。 这种编码方式,取了一个名字,叫做GBK编码。也叫国标编码。 GBK编码表,类似ASCII码表,很明显,GBK编码表比ASCII表更复杂,排列可能性更多。 GBK编码表,可以查看下面的连接: GBK 编码范围, GBK 编码表 每个编码表前面有一个字节,如上图所示,那么多字节显示在BA这一个模块里面。如果要查找汉字“汉”,那么汉字在BA模块里面,在第B行,第A列,所以“汉”的编码就是——BABA(16进制的数,0xBABA) 同理,如果要查看汉字“花”的GBK编码值,那么查找到花在“BB”方块内,在第A行第8列,所以“花”——BBA8 这就完成了GBK编码汉字的功能。 GBK编码范围:8140-FEFE 所有的汉字都是放在一个个的方块里面的,这个方块的编码是在81~FE范围的,行是4~F行,列是0~F列,但是每个方块里面最后一个F行F列都没有被编码使用。所以每个方块的编码范围又是从40~FE。这样就完成了所有汉字的编码。 GBK编码是对之前老的编码GB2312的扩展。所以猜测,GBK编码是为了解决一些偏僻字的问题,进行了扩展。两万多个汉字,足够用了。 我们国家GBK的编码,不仅仅编码了中文,还编码了日文,还编码了希腊字母。这说明我们国家在制定GBK编码的时候其实就考虑到向世界学习的态度。 当然这涉及到一个计算机世界话语权的问题。因为我们国家前期在计算机领域的发展相较于美国比较慢,所以我们国家也没主导Unicode统一码的标准制定。 从上面的GBK编码表中可以看出,我们国家的工作人员,是有这个雄心壮志,想制定一套兼容天下编码字符的一个表的

Adobe公司简介

Adobe公司简介 Adobe公司是一家全球性的企业,拥有强大的全球影响力和一流的专业技术。 Adobe致力于为全球客户提供高品质、高性能的数字内容及相关服务, Adobe拥有卓越的产品、解决方案、服务和专业知识,帮助客户创造出与众不同、充满创意的产品和内容。 Adobe拥有全球领先的数字化软件解决方案和行业知识产权(IP),为数字时代提供最具创新性、最高效的数字化创作工具以及先进应用程序和内容。 Adobe是一家世界级企业,在其历史中创造了无数个业界第一,拥有强大而全面的数字化创意工具,为世界各地广大企业客户提供一流水平的解决方案。 Adobe在中国有两个分公司:深圳办事处 北京分公司:北京办事处 1.在全球拥有超过一亿的付费用户 Adobe全球用户超过一亿,是最大的数字内容创作工具供应商之一。 Adobe公司于1998年在美国纳斯达克上市(NASDAQ: ACBN),2000年10月进入中国内地市场。 2014年7月, Adobe以15亿美元收购法国公司 Maya Photoshop。 2014年10月, Adobe推出了面向个人的移动应用程序 AppleBeats,这是一款基于移动设备,基于浏览器的软件。 2014年11月16日, Adobe宣布完成了对加拿大软件外包服务公司 Accelerate (后改名为 Acclid)的收购交易。 2014年11月18日, Adobe宣布与微软达成战略合作关系,将在其 Windows和 Office办公软件产品中预装微软 Office 2010 (Excel 2010、 PowerPoint 2010)、 AcrobatX和 Adobe Reader 4. Objectives for Windows 8等应用程序。 2.年营业额达60亿美元 Adobe于1995年在美国纳斯达克上市,如今市值达近百亿美元。 公司在全球拥有约6,600名员工,2007年的营业额达61亿美元。 Adobe拥有一支强大的国际研发团队,致力于不断创新,开发出最先进、最受欢迎的软件产品。 2004年 Adobe成功收购 Flash软件开发商 Sun Microsystems (美国)公司并获得其全球客户群;2007年收购数字营销软件公司 Propheteo (美国),从而巩固了 Adobe在该领域的领先地位。 Adobe是行业内首家通过美国证券交易委员会审批,允许客户进行股票交易市场发行公司债券的企业,在美国、欧洲和亚洲等地均有分公司。 3.在全球超过150个国家和地区开展业务,并有来自世界各地的超过10,000名员工 4.全球营业额超过30亿美元。 5.超过150万名员工。 6.2008年全球销售额达90亿美元-增长25%。 4. Adobe拥有强大而全面的数字创意工具,这些工具让你从不同视角发现美,创造出独一无二的内容、产品和服务 Adobe全球市场营销经理 Ken Wilson表示:“凭借强大而全面的数字创意工具, Adobe为我们客户的创新提供了无与伦比的支持,帮助他们利用数字技术为其产品和服务创造出独特且激动人心的内容。” “Adobe是一个全球性企业,在世界各地创造了无数个业界第一,我们将继续利用这一优势,成为客户可信赖的合作伙伴。” “我们会继续以最好的方式帮助全球客户取得成功,为他们在各自领域里创造更多价值。” 5. Adobe拥有来自全球的专业技术人才,并拥有超过3,000个成功项目案例

Python利用函数和字典实现:输入两个数字,并输入加减乘除运算符,输出运算结果。若输入其他符号,则退出程序...

下面是使用函数和字典来实现这个需求的代码示例: def calculate(num1, num2, operator): # 定义字典,保存运算符对应的运算函数 operations = { "+": lambda x, y: x + y, "-": lambda x, y: x - y, "*": lambda x, y: x * y, "/": lambda x, y: x / y } # 在字典中获取对应的运算函数,并调用 result = operations[operator](num1, num2) return result # 获取输入的两个数字和运算符 num1 = float(input("输入第一个数字: ")) num2 = float(input("输入第二个数字: ")) operator = input("输入运算符(+、-、*、/): ") # 调用 calculate 函数计算结果 result = calculate(num1, num2, operator) # 输出结果 print(f"

用栈实现队列

一、思路分析 队列遵循“先进先出”的原则,栈遵循“后进先出”的原则,基于队列和栈的特点,可以通过两个栈实现队列的功能。 将栈分为存储栈和改变栈,存储栈负责“入队”的相关操作,将需要入队的元素通过栈的push()函数存入存储栈。当需要出队时,首先要判断改变栈是否为空,若为空则将存储栈中的元素全部push()到改变栈中,实现了位序颠倒,此时改变栈中的出栈次序已成为我们所需要的出队次序,当改变栈不为空时,则先要将改变栈中的元素进行出栈,此时的出栈操作等同于我们所要实现的出队操作。 实现上述操作还要判断所涉及的栈是否为空,只有当两个栈同时为空时,我们所设计的队列才为空。 二、图形描述 进行出队时,若改变栈为空,则将存储栈中的元素全部压入改变栈中,此时改变栈中则是我们想要的出队顺序。 若改变栈不为空,则无须对存储栈进行操作,直接继续将改变栈中的元素出栈实现出队操作即可,重复直至改变栈为空。 三、代码展示 #include <iostream> #include <stack> using namespace std; class MyQueue { stack <int> storage; //存储入队元素 stack <int> change; //将入队元素存入其中实现次序颠倒 public: MyQueue() { } //入队操作时,只需要正常调用入栈函数即可 void push(int x) { storage.push(x); } //出栈操作时,要首先判断改变栈是否为空 int pop() { //改变栈为空则将存储栈中的元素全部压入改变栈中 //改变栈不为空则跳过压入操作继续对改变栈的元素进行操作直至为空 if(change.empty()){ while(!storage.empty()){ change.push(storage.top()); storage.pop(); } } int flag = change.top(); change.pop(); return flag; } int peek() { if(change.empty()){ while(!storage.empty()){ change.push(storage.top()); storage.pop(); } } return change.top(); } //当且仅当两个栈同时为空时,设计的队列为空 bool empty() { if(storage.

VSCode 深度学习环境配置

1、趋动云服务器连接 如何在本地连接一台远程的Linux服务器呢?一般的方式是通过SSH服务 安全外壳协议(Secure Shell,简称SSH)是一种在不安全网络上用于安全远程登录和其他安全网络服务的协议。 在VS Code 中我们可以使用remote-ssh cha 1. 1VSCode 连接远程服务器 a. 安装 Remote-SSH 插件 使用: ctrl + shift + x : 打开插件管理面板,搜索Remote-SSH,并安装 b. 连接远程服务器 打开右侧面板中的远程资源管理器 连接远程服务器 点击SSH上的 + 号,在右侧 Enter SSH Connection Command 中粘贴趋动云的连接命令,并回车。 ssh -p 435xx root@direct.virtaicloud.com -p 表示 SSH服务的端口root 是用户名称direct.virtaicloud.com 服务器地址。这里需要DNS解析如果是自己实验室的服务器,也可以 这也写: ssh -p 22 你的账户名@192.168.1.11 选择保存位置,选出现的第一个即可。完成配置 修改连接名称 选择SSH 后边的齿轮,选择第一个配置文件。 将HOST修改为远程项目的名称如:D2L 方便区分。在后期有多个的时候,不会发生名字冲突。这个很重要! c. 添加多个远程容器(远程服务器) 添加多个远程服务器,这里其实只是把以上的步骤重复一遍即可,但是需要主要的是,一定要重命名项目。 d. 删除远程连接 点击SSH后的齿轮,选择第一个文件,打开配置文件。删除想要删除的配置即可。如下面四行,一定要将这Host 缩进下的内容全部删除。![在这里插入图片描述](https://img-blog.csdnimg.cn/0b90f6c785744aafa5699ee84a60dcc2.png 2. 深度学习相关的包安装 pip install xxx 如果提示有缺什么包如: Traceback (most recent call last):

《Docker系列》Docker安装MySQL 5.7

Docker安装MySQL 5.7 一、docker拉取MySQL 5.7镜像 docker pull mysql 拉取最新MySQL docker pull mysql:5.7 拉取指定版本MySQL 1 拉取mysql 5.7镜像 [root@zxy_master ~]# docker pull mysql:5.7 5.7: Pulling from library/mysql d26998a7c52d: Pull complete 4a9d8a3567e3: Pull complete bfee1f0f349e: Pull complete 71ff8dfb9b12: Pull complete bf56cbebc916: Pull complete 2e747e5e37d7: Pull complete 711a06e512da: Pull complete 3288d68e4e9e: Pull complete 49271f2d6d15: Pull complete f782f6cac69c: Pull complete 701dea355691: Pull complete Digest: sha256:6306f106a056e24b3a2582a59a4c84cd199907f826eff27df36406f227cd9a7d Status: Downloaded newer image for mysql:5.7 docker.io/library/mysql:5.7 2 检查镜像 [root@zxy_master ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql 5.

vue Element-ui 表格多选 修改选中行背景色

转自:https://www.cnblogs.com/Amerys/p/14688342.html 整体思路方式: 1、给获取到的数据添加自定义的className 2、在点击行(row-click)和手动点击勾选框的事件(select-all)中获取到当前的row的className,直接修改className即可 点击查看事件说明 3、在行的 className 的回调方法中(row-class-name)直接返回className 注:还有另一种方式通过获取row进行循环,判断当前点击row的id或者index与数据的是否相等,然后存放点击后的row到新的数组中,这种方式因为触及到遍历。当我有500行数据或者很多行数据,可想而知这里要遍历多少次,还有另一个就是连续点行的颜色发生变化会有延迟,相对来说性能就不好了。 步骤如下: 1、给数据添加自定义className, 由于这里演示的是本地数据,是直接添加的className; 真实开发是通过接口去加载数据,获取到的数据 直接遍历 赋值就可以,后面就不用管遍历了 data() { return { tableData: [ { date: "2016-05-03", name: "王小虎", address: "上海市普陀区金沙江路 1518 弄", className: "normal", }, { date: "2016-05-02", name: "王小虎", address: "上海市普陀区金沙江路 1518 弄", className: "normal", }, { date: "2016-05-04", name: "王小虎", address: "上海市普陀区金沙江路 1518 弄", className: "normal", }, { date: "2016-05-01", name: "王小虎", address: "上海市普陀区金沙江路 1518 弄", className: "normal", }, { date: "

paddle ocr 训练数字识别模型

选择识别算法 gitlab 修改配置文件 复制rec_icdar15_train.yml配置文件,预训练模型用rec_mv3_none_bilstm_ctc 更改 pretrained_model预训练模型路径character_dict_path字典路径,字典内容data_dirlabel_file_list Global: use_gpu: true epoch_num: 10 log_smooth_window: 20 print_batch_step: 10000 save_model_dir: ./output/rec/number/ save_epoch_step: 5 # evaluation is run every 2000 iterations eval_batch_step: [0, 3, 6, 9] cal_metric_during_train: True pretrained_model: pretrain_models/rec_mv3_none_bilstm_ctc_v2.0_train/best_accuracy checkpoints: save_inference_dir: ./ use_visualdl: False infer_img: ./train_data/NUMBER/9997_448.jpg # for data or label process character_dict_path: ppocr/utils/number_dict.txt max_text_length: 6 infer_mode: False use_space_char: True save_res_path: ./output/rec/predicts_number.txt Optimizer: name: Adam beta1: 0.9 beta2: 0.999 lr: learning_rate: 0.0005 regularizer: name: 'L2' factor: 0 Architecture: model_type: rec algorithm: CRNN Transform: Backbone: name: MobileNetV3 scale: 0.

大一c语言程序设计——电话簿管理

题目要求 电话簿管理 设计一个学生通信录,学生通迅录数据信息构成内容可自行设计(如:姓名、家庭地址、邮政编码、电话号码等等)。该学生通信录电管理程序具有加入、删除、显示和查询等功能。 能建立、修改和增删学生通讯录;具有群组工能,可以增加群组和记录;删除可以删除一条、一个群组、全部记录;查询包含模糊查询;显示可以以页面和列表方式显示;有自动排序的功能;界面友好,易于操作,采用文件存储数据。 代码实现 头文件 fun.h //头文件的包含 #include<stdio.h> #include<string.h> #include<stdlib.h> //宏定义 //学生信息结构的定义 typedef struct student { int num;//以学号排序 char logo[20];//群组分类功能——标签 char name[20]; char address[50]; int PostalCode; char PhoneCode[12]; struct student* next; }STU; //函数的声明 //创建学生信息链表 STU* create(); //添加学生的信息 STU* append(STU* head, STU* new); //修改学生的信息 STU* modify(STU* head, char name[]); //删除一条、一个群组、全部记录 STU* delete(STU* head, int choice); //对数据进行保存 void save(FILE* fp, STU* head); //查找 void find(STU* head, int choice); //显示通讯录信息 void output(STU* head); fun.

Java中的日期类

一、介绍 日期类就是跟日期有关的类,主要有三种:Date类、Calendar类和LocalDate类。 二、Date类(第一代日期类) Date类是java.util包里的类,即java.util.Date。 1、输出当前系统时间 package com.hspedu.System_; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Set; public class Date01 { public static void main(String[] args) { //1.获取当前系统时间 //2.默认输出的日期格式是国外的方式,因此通常需要对格式进行转换 Date d1 = new Date(); System.out.println("当前日期:" + d1); //1.创建SimpleDateFormat对象,可以指定相应的格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss E"); String format = sdf.format(d1); //format:将日期转换成指定格式的字符串 System.out.println("当前日期:" + format); } } 输出结果: 当前日期:Tue Dec 20 12:20:34 CST 2022 当前日期:2022年12月20日 12:20:34 周二 2、把格式化的字符串转成对应的Date 二、Calendar类 (第二代日期类) package com.hspedu.System_; import java.text.SimpleDateFormat; import java.

ansible基础及常见知识点

1、 ansible普通用户执行sudo命令 # ansible -i hosts test01 -a 'ls /root' -u 'yukw' -b test01 | FAILED! => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "module_stderr": "Shared connection to 10.0.8.80 closed.\r\n", "module_stdout": "sudo: 需要密码\r\n", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 1 } [ root @ cs-ansible 10.0.8.252 ] /data/services/ansible-test # ansible -i hosts test01 -a 'ls /root' -u 'yukw' -b -K BECOME password: test01 | FAILED! => { "

智能优化算法比较:常用的23组测试函数

在智能优化算法的性能比较过程中,经常会需要用到一些测试函数,进行算法的性能比较。CEC(国际进化计算会议) 测试函数,常用的23组整理如下。 1 单模态的基准测试函数 2 多模态的基准测试函数 3 复合基准测试函数 4 测试函数代码 %% 子函数用于定义表达式 % F1 function o = F1(x) o=sum(x.^2); end % F2 function o = F2(x) o=sum(abs(x))+prod(abs(x)); end % F3 function o = F3(x) dim=size(x,2); o=0; for i=1:dim o=o+sum(x(1:i))^2; end end % F4 function o = F4(x) o=max(abs(x)); end % F5 function o = F5(x) dim=size(x,2); o=sum(100*(x(2:dim)-(x(1:dim-1).^2)).^2+(x(1:dim-1)-1).^2); end % F6 function o = F6(x) o=sum(abs((x+.5)).^2); end % F7 function o = F7(x) dim=size(x,2); o=sum([1:dim].

通过yum安装python3.9和pip3

你好! 要使用 yum 安装 Python 3.9 和 pip3,需要执行以下步骤: 首先,确保你的系统上已经安装了 yum。如果没有,请参考如何在 CentOS 上安装 yum。 然后,使用 yum 命令安装 Python 3.9。 yum install python3.9 接下来,使用 yum 命令安装 pip3。 yuminstall python3-pip 最后,检查是否已成功安装 Python 3.9 和 pip3。 python3.9 --version pip3 --version 如果一切顺利,上述命令会输出 Python 3.9 和 pip3 的版本信息。 希望这能帮到你!

shell 变量替换

公式 总结 1. ${变量#匹配规则} #从头开始匹配, 最短删除 2. ${变量##匹配规则} #从头开始匹配,最长删除 3. ${变量%匹配规则} #从尾开始匹配,最短删除 4. ${变量%%匹配规则} #从尾开始匹配,最长删除 5.${变量/旧字符串/新字符串} #替换变量内的旧字符串为新字符串,只替换第一个 6. ${变量//旧字符串/新字符串} #替换变量内的旧字符串为新字符串,全部替换 示例 删除 var1 ="I love you, Do you love me?" echo $var1 # I love you, Do you love me? #从头开始匹配, 最短删除 echo ${var1#*ov} # e you, Do you love me? #从头开始匹配,最长删除 echo ${var1##*ov} # e me? #从尾开始匹配,最短删除 echo ${var1%*ov} # e me? # I love you, Do you l #从尾开始匹配,最长删除 echo ${var1%%*ov} # e me?

Qt6.3学习笔记 QOpenGLWidget 简单使用

QOpenGLWidget绘图的简单使用 #ifndef ORIENTATIONGLWIDGET_H #define ORIENTATIONGLWIDGET_H #include <QtOpenGL> #include <QOpenGLWidget> #include <QOpenGLExtraFunctions> class OrientationGLWidget : public QOpenGLWidget, public QOpenGLExtraFunctions { Q_OBJECT public: explicit OrientationGLWidget(QWidget *parent = nullptr); ~OrientationGLWidget(); signals: private: public: void drawView(); // QOpenGLWidget interface protected: //设置渲染环境 void initializeGL(); //绘制窗口 void resizeGL(int w, int h); void paintGL(); }; #endif // ORIENTATIONGLWIDGET_H #include "orientationglwidget.h" #include <gl/glu.h> OrientationGLWidget::OrientationGLWidget(QWidget *parent) : QOpenGLWidget{parent} { } OrientationGLWidget::~OrientationGLWidget() { } void OrientationGLWidget::initializeGL() { initializeOpenGLFunctions(); //这个代表截取屏幕,这里我这里截取整个屏幕 //注意此关键函数 //glOrtho(0.

如何在 Java 中将 String 转换为 int?

问: 如何将 String 转换为 int? "1234" → 1234 答1: huntsbot.com – 高效赚钱,自由工作 String myString = "1234"; int foo = Integer.parseInt(myString); 如果您查看 Java documentation,您会注意到“捕获”是此函数可以抛出一个 NumberFormatException,您可以处理它: int foo; try { foo = Integer.parseInt(myString); } catch (NumberFormatException e) { foo = 0; } (此处理将格式错误的数字默认为 0,但您可以根据需要执行其他操作。) 或者,您可以使用 Guava 库中的 Ints 方法,该方法与 Java 8 的 Optional 结合使用,是一种将字符串转换为 int 的强大而简洁的方法: import com.google.common.primitives.Ints; int foo = Optional.ofNullable(myString) .map(Ints::tryParse) .orElse(0) 除了捕获 NumberFormatException 之外,用户还应该注意他们传入的字符串的长度;如果它们的长度足以溢出整数,则可能要考虑使用 Long::parseLong 代替。 它完美地工作。谢谢! 答2: huntsbot.

linux如何访问windows共享文件夹

在 Linux 中访问 Windows 共享文件夹的方法如下: 确保 Windows 电脑开启了共享功能。 在 Linux 电脑上打开终端,输入以下命令: sudo apt-get install smbclient 这样就安装了 smbclient 工具,它可以用来连接 Windows 共享文件夹。 输入以下命令来连接 Windows 共享文件夹: smbclient //<Windows IP地址>/<共享文件夹名称> -U <Windows用户名> 例如,如果 Windows 电脑的 IP 地址是 192.168.1.100,共享文件夹名称是 share,Windows 用户名是 user,那么输入的命令就是: smbclient//192.168.1.100/share -U user 输入 Windows 用户密码后,就可以在 Linux 电脑上访问 Windows 共享文件夹了。 注意:如果 Windows 电脑使用的是较新的 Windows 系统,可能需要在 Windows 电脑上安装 SMB1 共享功能,才能在 Linux 电脑上访问共享文件夹。

mysql服务无法启动

搜索发现很多错误我是同时发生,看下图(已解决记录一下,图片都是找其他博主的): 第一种:mysql服务无法启动。 第二种:mysql本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止。 第三种:ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061) 解决方法: 我发现在跟着B站教程时候第二种错误就存在了,可我没当回事,才造成后面的启动mysql错误。 我发现初始化mysql时候生成的data文件夹跟视频里面不太一样。 这是解决后的图片(解决前没记录),里面没有这么多文件,就四五个好像。 所以应该就直接重新安装。 首先,先删除已经安装的mysql57,避免之后产生冲突,用指令mysqld remove mysql57。 之后,直接删除全部文件夹(我是免安装版本),重新解压官网下载的文件夹,再按照视频步骤一步步重新设置就成功了。 鉴定: 任务管理器启动mysql57成功直接safe。 补充:如果最后还出现第三种错误ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061) 看我另一个文章 http://t.csdn.cn/KdDrX

J1939协议简介

J1939简介 J1939协议简介 J1939协议是由美国汽车工程师协会(SAE) (SAE协会简介)定义的一组标准。J1939标准用于卡车、公共汽车和移动液压等重型车辆。在许多方面,J1939标准类似于旧版J1708和J1587标准,但J1939标准协议建立在CAN(控制器区域网络,ISO11898)上。 物理层(J1939/11)描述了针对客车的电气接口。数据链路层描述了构建报文、访问总线以及诊断传送故障的规则。应用层(J1939/71和J1939/73)定义了在网络中传送的每条报文的具体数据。 J1939主要特性 J1939协议标准基于CAN的高层协议J1939协议应用于重型车辆J1939协议传送速度稳定在250kbps 报文格式及使用方法(J1939/21) MJ1939标准定义的大部分报文均旨在广播。这意味着网络中传输的数据没有指定目标地址。这样任何想要使用数据的设备都不需要再额外请求报文。将来的软件升级也可以方便兼容新设备(地址分配)。当报文必须指向特定设备时,可以在报文标识符里包含特定的目标地址。例如,请求来自发动机的特定扭矩值,而不是来自制动控制器的特定扭矩值。 J1939使用CAN 2.0B协议中定义的29位标识符,如图1所示。含有指定目标地址的报文(“PDU 1”)与旨在广播的报文(“PDU 2”)使用的标识符略有不同。 PDU是协议数据单元(即报文格式)。 SOF,SRR和IDE位由CAN标准定义,这里忽略。RTR位(远程请求位)在J1939中总是设置为0。 J1939协议中使用的29位标识符结构如下。 优先权位保留位数据页位PDU格式特定PDU源地址3个位1个位1个位8个位8个位8个位 表1: 29位标识符的结构 标识符的前三位是用于在仲裁过程中控制报文的优先级。0值拥有最高优先级。更高优先级值通常用于高速控制报文,例如从传动装置至发动机的转矩控制报文。包含时间不重要的数据的报文,例如车辆行驶速度,会被赋予较低优先级值。 标识符的下一位将保留备用,在报文发送中应设置为0。 标识符中的下一位是数据页选择器。此位扩展可由标识符表示的潜在参数组的数目。 协议数据单元格式(PF)用于确定是否可以作为包含目标地址报文发送或者报文总是作为广播报文发送。 对特定协议数据单元(PS)字段变化的解释以PF的值为依据: 如果PF处于0和239之间,则报文可寻址,且PS字段包含目标地址。如果PF处于240和255之间,则报文只能广播(PDU2),且PS字段包含组扩展。 组扩展扩展了可由标识符表示的潜在广播参数组的数目。 术语参数组编号(PGN)适用于将保留位、DP、PF和PS字段的值合并成单个18位的值。 例如: 身份0xcf004ee可分为表2所示字段。 0x0C0xF00x040xEE00001100111100000000010011101110—PrioRDPPFPSSA 表2. PGN示例 PGN = R,DP, PF和PS字段 – 在本例中为0x0F004。PF = 0xF0 = 240,即这是PDU2(广播)报文PS = 0×04,即组扩展 = 4 标识符的最后8位包含发送报文的设备的地址。地址是被分配以提供唯一地访问网络上的给定设备的方式的标签或“句柄”。对于给定的网络,每个地址必须是唯一的(可以有254个)。这意味着两个不同的设备(ECU)不能使用相同的地址。 地址和名称 (J1939/81) 名称是64位(8字节)长的标签,给每个ECU一个独特的身份。 名称由10个字段组成,并具有表3所示的以下结构。 表3. 名称的结构 1随机存取位2行业组,长度3位3车辆系统实例,长度4位4车辆系统,长度7位5保留位6函数,长度8位7函数实例,长度5位8ECU实例,长度3位9制造商代码,长度11位10身份号码,长度21位 CAN报文中的字节号码内容/意义0身份号码, LSB1身份号码20-4位: 身份号码,MSB 5-7位: 制造商代码,LSB3制造商代码,MSB40-2位: ECU实例 3-7位: 函数实例5函数60位: 保留位 1-7位: 车辆系统70-3位: 车辆系统实例 4-6位: 行业组 7位: 随机存取位 名称的主要目的是描述ECU。低函数字段的值,0到127,被预先分配给“标准的”函数或设备。值128至254则依赖于行业组和车辆系统的值。这种依赖性使得不同的车辆可以拥有相同配置的函数。该系统还允许诸如拖车和农用车辆等设备限制对可用地址的搜索,且因此尽可能缩短动态声明地址的时间以及降低其难度。当请求地址时, 名称被用来决定哪一个ECU拥有更高的优先权,并以此获得请求的地址。

信息安全加解密各种算法(比较全)

一、数据安全,分为: 前端:展示做脱敏处理,数据脱敏(Data Masking) 前端到后端过程:数据加密传输 后端:数据加密后存储到数据表 二、数据安全:加密分类 可逆加密 1.1 对称加密 (对称,指的是秘钥对称,加密解密都是用的同一个秘钥) 1.2 非对称加密 (非对称,称指的是秘钥非对称,加密解密用的两个不同秘钥) 不可逆加密 三、可逆【对称加密算法】(symmetric encryption algorithm)有哪些产品? ZUC算法 【中国国家颁布的分组密码算法】 SM系列 (SM1算法、SM4算法、SM7算法)【中国国家颁布的分组密码算法】 AES算法 (备注:国际主流,美国的) IDEA算法 DES系列(DES算法、3DES算法) (其中3DES即:Triple Data Encryption Algorithm,简写为Triple DEA,缩写为TDEA/3DES) RC系列(RC2算法、RC4算法、RC5算法、RC6算法) TEA系列(TEA算法、XTEA算法、XXTEA算法) Fish系列(BlowFish算法、TwoFish算法) Camellia算法 ChaCha20算法 Salsa20算法 ...... 四、可逆【非对称加密算法】(asymmetric encryption algorithm)有哪些产品? SM系列(SM2算法、SM9算法)【国家颁布的分组密码算法】 RSA算法 ECDSA算法 (ECC与DSA的结合,区块链就是这种) ECC算法 (备注:移动设备用) DSA算法 (备注:数字签名用) Elgamal算法 Rabin算法 D-H算法(即:Diffie-Hellman) 背包算法 ...... 五、不可逆【Hash算法】有哪些产品? SM3算法【国家颁布的hash算法】 SHA系列(SHA1、SHA-224、SHA-256、SHA-384、SHA-512) MD系列(MD2、MD4、MD5) HMAC系列(HMAC、HMAC-MD5、HMAC-SHA1) HAVAL算法 ...... 六、对称加密 和 非对称加密 区别? (1)密钥不同 1、对称加密:对称加密加密和解密使用同一个密钥。(也就是说,加解密双方都是使用同一个密钥对数据进行加密和解密,存在无法验证发送者和接受者的身份,有冒用身份的风险。) 2、非对称加密:非对称加密加密和解密所使用的不是同一个密钥, 需要两个密钥来进行加密和解密。 公钥进行加密,私钥进行解密。

如何关闭swagger-ui.html

要关闭 Swagger UI,您需要停止运行您的应用程序。这将使 Swagger UI 不再可用。 如果您使用的是本地开发服务器,可以使用“CTRL + C”快捷键来停止运行服务器。如果您使用的是远程服务器,则需要使用服务器控制面板或命令行工具来停止服务器。 此外,还可以通过在 Swagger UI 的 URL 中添加“?url=”参数来关闭 Swagger UI。例如,如果您的 Swagger UI 的 URL 是“http://localhost:8080/swagger-ui.html”,则可以使用“http://localhost:8080/swagger-ui.html?url=”来关闭 Swagger UI。 希望这对您有帮助!

“RouteRecordRaw“ 是一种类型,在同时启用了 “preserveValueImports“ 和 “isolatedModules“ 时,必须使用仅类型导入进行导入。

使用vue3+ts开发时,在配置路由时,出现如下问题: 在引用RouteRecordRaw声明routes时,报错。 解决方法: 第一种方法: 引入的时候以类型的形式引入,前面添加type: import { createRouter, createWebHistory } from 'vue-router' import type { RouteRecordRaw } from 'vue-router' 第二种方法: 找到根目录中的tsconfig.json文件,设置preserveValueImports:false "compilerOptions": { "baseUrl": ".", "paths": { "@/*": ["./src/*"] }, "preserveValueImports": false 这样如上问题就可解决。

shell 获取命令执行的结果,获取结果返回

shell脚本中, 执行其他脚本时,想判断执行其他脚本的结果是否成功 if [ $? -ne 0 ];then echo "fail" else: echo "success" fi 如果返回0,代表命令执行成功 返回1或者其他不等于0的值,代表失败 -eq //equals等于 -ne //no equals不等于 -gt //greater than 大于 -lt //less than小于 -ge //greater equals大于等于 -le //less equals小于等于 当我们想获取上一个shell脚本的返回值时,可用 exit(退出当前程序) exit 0 代表当前程序是执行成功,正常退出 exit 1 代表当前程序执行失败,失败结束并退出 以下例子为:我执行一个脚本,如果失败的话,我重试一遍,再次失败我就异常退出 sh myshell.sh # 第一次执行myshell.sh脚本 if [ $? -ne 0 ];then # 判断以上脚本执行是否成功 sh myshell.sh # 如果失败再次启动 if [ $? -ne 0 ];then python3 $dingding $1/${pro_name[$i]} # 这里是失败发送钉钉报警 exit 1 # 失败退出 fi fi

Android 13.0 SystemUI 启动流程

1、手机开机后,Android系统首先会创建一个Zygote(核心进程)。 2、由Zygote启动SystemServer。 3、SystemServer会启动系统运行所需的众多核心服务和普通服务、以及一些应用及数据。例如:SystemUI 启动就是从 SystemServer 里启动的。 4、进入锁屏界面,开机完成。 SystemServer 中有一个 main()方法为系统服务的入口; /** * The main entry point from zygote. */ public static void main(String[] args) { new SystemServer().run(); } 在SystemServer 中的 main()方法中,就一句代码生成 SystemServer 对象,执行run 方法。在run()方法里启动了各类服务; private void run() { //省略部分代码 // Start services. try { traceBeginAndSlog(“StartServices”); startBootstrapServices(); startCoreServices(); startOtherServices(); // 在该方法里启动了 SystemUI的服务。 SystemServerInitThreadPool.shutdown(); } catch (Throwable ex) { Slog.e(“System”, “******************************"); Slog.e(“System”, " Failure starting system services”, ex); throw ex; } finally {

Spring参数校验注解 - @Valid / @Validated

目录 前言 二、使用步骤 引入库 1.URL校验 2.表单校验 3.嵌套校验 4.分组校验 前言 "对于任何一个项目来说,对接口的参数进行校验是必不可少的,最简单的方法就是在代码中直接检查参数。然而,这种方法显然不够优雅。Spring 提供了一种更优雅的方法来实现参数校验,本文将对此进行详细说明。" 一、@Valid / @Validated的区别 @Validated // 支持类上,方法,方法参数上注解,支持指定group分组,不支持嵌套对象自动校验 @Valid // 不支持类上注解,不支持指定group分组,但是支持嵌套对象的字段自动校验 二、使用步骤 引入库 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> <version>2.5.5</version> </dependency> 1.URL校验 @RestController @Validated public class MyController { } @GetMapping("/test") public R test(@NotBlank @RequestParam String p1, @Range(max = 50, min = 10) @RequestParam int p2) { //业务逻辑 return R.ok(); } 注意需要在类上加一个@Validated注解,否则可能无法校验成功。 2.表单校验 @Data @AllArgsConstructor public class User { private String id; @NotBlank @Size(max = 20) private String name; @NotNull @Pattern(regexp = "

数据结构---用栈实现队列

用栈实现队列 模拟入队模拟出队JAVA实现总结 用栈来模拟一个队列,要求实现队列的两个基本操作:入队、出队。 栈是先入后出,队列是先入先出 用两个栈来实现一个队列功能 让其中一个栈作为队列的入口,负责插入新元素;另一个栈作为队列的出口,负责移除老元素。 核心点:两个栈是各自独立的,怎么能把它们有效地关联起来? 模拟入队 在模拟入队操作时,每一个新元素都被压入到栈A当中。 元素1入队 元素2入队 元素3入队 模拟出队 按理说,我们希望最先入队的元素1出队 解决方案:让栈A中的所有元素按顺序出栈,再按照出栈顺序压入栈B。这样一来,元素从栈A弹出并压入栈B的顺序是3、2、1,和当初进入栈A的顺序1、2、3是相反的。 此时让元素1 出队,也就是让元素1从栈B中弹出。 让元素2出队。 如果现在又有新元素4入队: 每次都是先把栈B弹干净后,再从栈A取元素入栈到B中 先把3弹栈,这时,栈B为空栈,再从栈A中取元素到B中。 JAVA实现 package algorithmProblem; import java.util.Stack; //栈模拟队列的入队和出队 public class stacks2Queue { //用俩个栈模拟 private Stack<Integer> stackA = new Stack<Integer>(); private Stack<Integer> stackB = new Stack<Integer>(); /** * 入队 * @param element */ public void enQueue(int element){ stackA.push(element); } /** * 栈A元素转移到栈B * 为了出队做的前期准备 */ private void transformer(){ //当栈A不为空,执行循环(把A栈元素全部都放到B栈中) while (!(stackA.isEmpty())) { stackB.

Python入门常用开发环境

开发环境:英文是 IDE(lntegrated develo pment Fnvironment 集成开发环境)。 常用的开发环境如下: 1.IDLE 2.pycharm(推荐) 3.vscode(推荐) pycharm下载和安装: 下载地址:https://www.jetbrains.com/pycharm/download。 下载对应的版本: 和安装普通软件一样,点击下一步即可。 安装完成后,运行pycharm。选择不导入配置: 创建Python项目: 1.选择:New project 2.选择路径(尽量不要包含中文),项目名:mypy01 开发和运行项目: 1.打开项目后,右键单击项目,创建Python文件mypy01 2.运行py文件,使用右键点击编辑区,选择Run mypy01即可。 交互模式和控制台: 1.点击Terminal,则进入控制台(Powershell); 2.点击交互模式,则进入类似IDLE的交互模式。 其他设置: 1.字体大小: File-->setting-->Editor-->Font 把字体调大一些。 2.主题风格: File-->setting-->Apperence-->Pragula(黑色主题),Intelij light(白色主题)。