【docker启动nginx】

docker启动nginx docker启动nginx1. 抓取镜像并生成目录2. 生成自签名证书(生产环境需要到CA申请)2.1 首先将openssl拷贝到nginx/ssl目录2.2 编辑 openssl.cnf2.3 生成证书 3. 生成Nginx basic认证密码3.1 安装httpd工具3.2 生成密码文件3.3 配置密码文件 4. 配置Nginx4.1 生成nginx.conf文件4.2 生成default.conf(包含各个server块,每个server块监听指定的server_name和port)4.3 生成80_server(将HTTP请求转发为对应的HTTPS请求)4.4 生成admin_9443_server文件(用于管理员访问etcd, es, kibana, grafana等)4.5 生成meta_locations(一般无需改变)4.6 生成extra_locations(一般无需改变)4.7 生成meta_server4.8 生成proxy选项 5. 启动Docker6. 打通防火墙7. 外部访问验证 docker启动nginx nginx一般用做web服务器,一般为了公网访问需要申请https证书,并进行配置,本次自己制作证书。 使用容器后,需要考虑网络以及配置和日志的持久化,本次复用宿主机网络,生产环境一般来说做端口映射。 集群一般在前置添加负载均衡即可。 1. 抓取镜像并生成目录 docker pull nginx:1.21.6 && mkdir -p /home/nginx/conf && mkdir -p /home/nginx/logs && mkdir -p /home/nginx/ssl && mkdir -p /home/nginx/conf/conf.d 2. 生成自签名证书(生产环境需要到CA申请) 2.1 首先将openssl拷贝到nginx/ssl目录 cp /etc/pki/tls/openssl.cnf /home/nginx/ssl 2.2 编辑 openssl.cnf vi /home/nginx/ssl/openssl.cnf [ req ] req_extensions = v3_req //取消对应的注释 2.

详解静态网页数据获取以及浏览器数据和网络数据交互流程-Python

目录 前言 一、静态网页数据 二、网址通讯流程 1.DNS查询 2.建立连接 3.发送HTTP请求 4.服务器处理请求 5.服务器响应 6.渲染页面 7.页面交互 三、URL/POST/GET 1.URL 2.GET 形式 3.POST 形式 四.获取静态网页数据 1.requests库 点关注,防走丢,如有纰漏之处,请留言指教,非常感谢 前言 在网站设计领域,基于纯HTML格式构建的网页通常定义为静态网页,这种类型的网页是早期网站建设的主要形式。对于网络爬虫来说,抓取静态网页中的数据相对较为简单,因为所需的所有信息都直接嵌入在网页的HTML代码里。然而,对于那些利用AJAX技术动态加载数据的网页,其数据并不总是直接出现在HTML代码中,这对爬虫的抓取工作造成了一定的难度。 在静态网页的数据抓取过程中,Requests库显示出其卓越的实用性。这个库不仅功能全面,而且操作简洁直观。本章的内容将从介绍如何安装Requests库开始,接着如何使用这个库来发送HTTP请求并获得相应内容,探讨如何通过自定义Requests的参数来适应不同的数据抓取需求。 一、静态网页数据 静态网页是互联网的基本组成部分,它们是由服务器以 HTML(超文本标记语言)形式发送到客户端(通常是浏览器)的网页。这些页面在服务器上是预先编写好的,对于所有用户来说,其内容在每次请求时都保持不变。与之相对的是动态网页,它们的内容可以根据用户的不同请求或交互而变化。 一般来说静态网页可获取到的信息有: 文本内容:网页上的所有文本,如文章、标题、链接描述等。链接(URLs):网页上的所有超链接。图像及其URL:网页上的图像以及它们的源URL。HTML结构信息:如各种HTML标签中的内容(div、span、p等)。样式信息:例如CSS类和ID等。元数据:如网页标题、描述、关键词等。 目前主流处理静态网页的工具有Python 语言的 requests 库来发送HTTP请求,并使用 BeautifulSoup 或 lxml 解析HTML内容。在浏览器中使用开发者工具可以更深入地分析网页结构和内容,按下F12即可进入开发者模式。 二、网址通讯流程 因为涉及到网址通讯流程,这里简要介绍一下网页信息传输流程更方便以后了解我们应该如何获取静态数据以及抓取信息。 当我们在浏览器中输入一个网址并访问时,发生的网络通讯流程可以分为以下几个主要步骤: 1.DNS查询 浏览器首先需要找出您要访问的网站的IP地址。它通过向DNS(域名系统)服务器发出查询来完成这一步骤。如果该地址已经在浏览器的缓存中,这一步将被跳过。 2.建立连接 一旦浏览器获得了网站的IP地址,它将尝试通过TCP(传输控制协议)建立到该地址的连接。通常这涉及到一个“三次握手”过程,确保稳定的连接建立。 3.发送HTTP请求 连接建立后,浏览器会向服务器发送一个HTTP请求。这个请求包括所请求页面的详细信息,以及客户端(即浏览器)的信息,如请求的类型(通常是GET或POST)、所需资源的路径、浏览器类型等。 4.服务器处理请求 服务器接收到请求后,会根据请求的类型和资源处理请求。如果是静态内容(如HTML页面、图片、CSS文件等),服务器通常会直接返回这些文件。对于动态内容,服务器可能会执行后端代码,如数据库查询,然后生成相应的HTML内容。 5.服务器响应 服务器处理请求后,会将响应数据(网页代码、图片、错误消息等)发送回浏览器。这通常以HTTP响应的形式发生,包括状态码(如200表示成功,404表示未找到等)和响应体。 6.渲染页面 浏览器接收到服务器的响应后,会解析和渲染页面。这包括HTML的解析、CSS样式的应用、JavaScript的执行等。这一过程中,浏览器可能还会发送额外的请求来获取页面上的其他资源(如图片、CSS文件、JavaScript文件等)。 7.页面交互 页面加载完成后,用户可以与页面进行交互,如点击链接、提交表单等。这可能会触发额外的HTTP请求和服务器响应,从而更新页面内容。通常使用HTTP的GET和POST请求最为常见,用于获取和提交数据。 从以上网页数据获取流程理解完,我们再来了解URL/POST/GET三者在浏览器网页网络通讯中代表的意义和作用,这也是一般通用的网络信息通讯规则。 三、URL/POST/GET 大家不妨在浏览器开发者模式,点击网络一栏可以查看每次网络数据交互情况,基本上都会有涉及到GET和POST,所有这里详细讲述GET和POST的具体作用和形式。 1.URL URL想必大家都知道,诸如:https://www.csdn.net/就是一个URL,但是这里要较为详细的讲述一下URL的参数,也就是除去标准的URL后续?后面所带的参数含义。 URL参数是指在URL(统一资源定位符)中包含的一组键值对,用于向服务器传递额外的信息。它们通常出现在问号(?)之后,并使用等号(=)分隔键和值,不同键值对之间使用和号(&)分隔。这种传递参数的方式使得客户端(通常是浏览器)能够向服务器发送特定的请求,以获取或提交特定的数据。 比如https://www.csdn.net/?spm=1010.2135.3001.4476,?后面的参数就是。其中,spm是一个参数,它的值是1010.2135.3001.4476;这样,服务器就能够识别客户端的请求,并根据这些参数来执行相应的操作,比如执行搜索操作并过滤到编程相关的结果。 这里需要URL的四个特点: 键值对: URL参数是以键值对的形式存在的,一个键对应一个值。在上面的例子中,q是键,python是值。 多个参数: URL可以包含多个参数,它们之间使用&符号分隔。在上面的例子中,q=python和category=programming是两个不同的参数。 编码: 由于URL中不能包含一些特殊字符,参数的键和值通常需要进行URL编码。例如,空格可能被编码为%20。 GET请求: URL参数通常与HTTP的GET请求一起使用。在GET请求中,参数会被附加到URL上,而在POST请求中,参数通常包含在请求体中。

最好用的Redis客户端:RedisInsight安装部署教程, 官方亲儿子真香, 2种安装方式(包含Docker方式), 超详细教程

最好用的Redis客户端:RedisInsight安装部署教程, 官方亲儿子真香, 2种安装方式(包含Docker方式), 超详细教程 文章目录 最好用的Redis客户端:RedisInsight安装部署教程, 官方亲儿子真香, 2种安装方式(包含Docker方式), 超详细教程为什么是款优秀的客户端先看官网官网地址 两种安装方式第一种:可执行文件 第二种:docker部署第一种:直接运行`dokcer run`命令启动容器第二种:使用`docker-compose`启动容器 使用方式参考资料我是老码农 大家好,我是老码农。 《码农说》公众号的第9篇文章迎着即将到来2024的步伐暖暖来袭。 很多时候,我们不需要Redis Stack这个套装,只需要一个Redis客户端就够了。 那接下来我们分享如何安装RedisInsight这个优秀的客户端工具。 为什么是款优秀的客户端 操作系统:支持Windows、Linux、macOS多操作系统; Redis部署:支持Redis、Redis Stack、Redis Enterprise Software、Redis Cloud多种部署方式,轻松进行交互; 数据可视化 支持对数据浏览、过滤、可视化、CRUD操作;树状视图对数据分组显示,友好导航;JSON格式数据显示优美; 管理流和消费者组 可视化Redis Streams和使用者组,并设置自动刷新以实时显示新条目。使用Redis Pub/Sub的专用工作区来发布和消费消息。 日志分析和命令分析 解决性能问题,通过查看实时处理的命令和检查慢速命令来跟踪和调试Redis服务器。 先看官网 这个是我的一个习惯,学习新知识或查阅资料一般先去官网翻翻,官网的资料比较权威。 官网地址 RedisInsight官网 https://redis.io/docs/connect/insight/ 两种安装方式 第一种:可执行文件 Step1:访问:https://redis.io/docs/connect/insight/, 点击如图所示的链接 Step2:如下图所示,点击【Download RedisInsight Now】按钮 Step3: 会跳转到这里,然后选择操作系统和输入邮箱 Step4:输入的内容有点多,别嫌烦 Step5: 下载下来后,双击可执行文件,一路回车,安装即可。 这块我就不过多截图介绍了。 第二种:docker部署 第一种:直接运行dokcer run命令启动容器 Step1:先打开一个dos窗口,执行下面的命令,创建数据卷 D:\oldgeek\docker>docker volume create redisinsight_data redisinsight_data Step2:新建并启动容器,因为之前在本地安装过redis stack,所以这个端口号我改成8002,如果大家没安装过,直接用8001 docker run -v /redisinsight_data:/data -p 8002:8001 redislabs/redisinsight 另外一种启动方式(是因为我在本地同时安装了RedisStack,需要打通这两个容器的网络才能互访)

WebMvcConfigurer和WebMvcConfigurationSupport(MVC配置)

一:基本介绍 WebMvcConfigurer是接口,用于配置全局的SpringMVC的相关属性,采用JAVABean的方式来代替传统的XML配置文件,提供了跨域设置、静态资源处理器、类型转化器、自定义拦截器、页面跳转等能力。 WebMvcConfigurationSupport是webmvc的配置类,如果在springboot项目中,有配置类继承了WebMvcConfigurationSupport,那么webmvc的自动配置类WebMvcAutoConfiguration就会失效。 两者都是Spring MVC中的组件,具体的区别如下: 1.实现方式不同 WebMvcConfigurer:是一个接口,它提供了多个回调方法,可以用于自定义Spring MVC的配置(如消息转换器、拦截器等)。我们在使用时只需要实现该接口,重写其中的方法即可。 WebMvcConfigurationSupport:是一个抽象类,它也提供了多个回调方法,用于自定义Spring MVC的配置,但是需要继承该类并重写其中的方法。 2.作用不同 WebMvcConfigurer: 主要用于添加或修改Spring MVC的配置,如添加拦截器,自定义消息转换器等。 WebMvcConfigurationSupport: 主要用于完全自定义Spring MVC的配置,如果我们需要对Spring MVC的配置进行大量的自定义,可以选择继承该类并重写其中的方法。但是需要注意的是,继承该类会覆盖Spring MVC的部分默认配置。因此,当我们只需要对部分配置进行自定义时,应该使用WebMvcConfigurer。 3.继承关系不同 WebMvcConfigurer: 没有继承关系,我们只需要实现该接口即可使用。 WebMvcConfigurationSupport: 是一个抽象类,需要继承后才能使用。 4.总结 在日常开发中推荐优先使用WebMvcConfigurer的方式(官方推荐),因为简单方便,也没有特别复杂的定制需求;若我们项目中使用的MVC存在着更加复杂的配置需求推荐WebMvcConfigurationSupport,通过继承此类,我们可以说对官方的MVC代码进行重写操作,但是因为其配置量较大,实现比较复杂,因此在日常开发中使用WebMvcConfigurationSupport并不常见。 二:配置摘要 常用自定义配置如下: 1.addInterceptors(拦截器配置) 2.addCorsMappings(全局跨域处理) 3.addViewControllers(注册视图控制器)(可以让地址对应资源文件,如html文件) 4.addResourceHandlers(配置静态资源处理)(可以在客户端直接访问静态资源信息) 三:Spring和SpringBoot中配置步骤区别 1.Spring中配置WebMvcConfigurer方式: ①创建一个Java 类,实现WebMvcConfigurer接口 @Configuration public class MyWebMvcConfig implements WebMvcConfigurer { // 自定义配置代码 } ②注入到Bean容器里 @Configuration public class AppConfig { @Bean public MyWebMvcConfig myWebMvcConfig() { return new MyWebMvcConfig(); } } 2.SpringBoot中配置WebMvcConfigurer方式:(这种方式简单) 创建一个 Java 类,并实现WebMvcConfigurer接口 @Configuration public class MyWebMvcConfig implements WebMvcConfigurer { // 自定义配置代码 } 四:拦截器(addInterceptors) 在SpringBoot中,可以使用拦截器来对请求进行统一的预处理或后处理。拦截器用于日志记录、权限检查、性能监控、事务控制等方面。SpringBoot中实现拦截器,首先要创建一个实现HandlerInterceptor接口的拦截器类。该接口定义了三个方法,分别是preHandle、postHandle和afterCompletion,用于在请求处理前、请求处理后和请求完成后进行处理。

纯娱乐,教你用AI花10分钟为自己定做理想女友

你以为这些图片是真人么,这就是AI自动生成的美女图片,最近生成式AI火遍全网,今天为大家介绍人人都能学会的简单Stable Diffusion制作美女的教程。大家除了休闲娱乐之外,也可以利用这个工具去美化自己和家人的照片,转换不同尺寸,更改清晰度,换装等等,拥抱AI,让AI平民化。 以下是在Windows 10电脑上的操作步骤: 一、下载安装包 从以下夸克网盘下载地址下载安装包到本地,地址如下: 链接:https://pan.quark.cn/s/7c51556d27eb 提取码:cFdx 输入提取码之后,界面如下图: 选中SD目录之后,点击“下载”按钮,将这个目录文件全部下载到本地硬盘 二、安装Stable Diffusion 软件 1、安装Stable Diffusion软件的启动器运行依赖 如上图,鼠标双击启动器运行依赖-dotnet-6.0.11.exe 安装程序,启动后如下图: 直接选择安装即可。 2、解压Stable Diffusion软件的安装包到本地文件夹 如上图找到sd-webui-aki-v4.4.7z文件压缩包,将其解压到你指定的本地文件夹下,例如d:\SD,如果你的机器上没有Winrar压缩解压软件,请到网上下载一下。 选择“提取”解压软件包到本地硬盘的指定文件夹 解压过程稍长,请耐心等待 3、安装Python 选择python安装包文件:python-3.10.11-amd64.exe 文件,如下图: 注意一定选这个自定义安装的选项,我们需要将Python 安装在上一步解压出来的Stable Diffusion所在的文件夹下的python目录下,这样才能保证后续安装一些第三方插件的时候顺利运行 如上图:先找到解压的安装包python所在的文件夹,并记录下来。 如上图的选项配置和自定义路径,然后选择install按钮进行安装。 三、启动Stable Diffusion 软件,进行简单测试 在Stable Diffusion的软件解压目录下,找到的“A启动器”文件,如下图: 双击鼠标启动后如下图:因为要下载一些必须的文件,过程稍长,请耐心等待。 如过出现如下提示,请选择“是”的选项,并重新启动机器。 A启动器启动成功之后出线如下图界面: 选择“一键启动”按钮,启动绘图引擎,如下图:第一次启动由于要下载必要的应用包,时间较长,需要耐心等待一会。 启动结束之后会自动弹出浏览器的界面如下图:则表示安装成功了。 下面在“文生图”界面里面输入简单的提示词来测试一下:输入a girl 然后选择生成 此时界面会显示对应的进度:如下图:表示系统一切运行正常 四、通过特定模型和提示词生成理想女友 1、copy模型到stable diffusion 软件包的目录 在夸克网盘下载的安装包中找到以下模型:如下图: 将这些文件复制到Stable Diffusion解压包中的models\stable-diffusion 目录下 2、利用麦橘写实(majicmixRealistic)模型来制作美女 回到浏览器界面,如下图:点击模型刷新按钮,刷新刚才copy的模型到下拉框中。 选中majicmixRealistic模型,如下图: 复制下面的提示词,到提示词输入框,单批数量随意设置(我这里选6张,如果没有大于6G显存的显卡,建议设置1张,多了过程会比较慢),如下图: 正向提示词:1girl,face,white background, 反向提示词:(worst quality:2),(low quality:2),(normal quality:2),lowres,watermark, 完成之后选择右下角的图片,可放大显示:如下图: 点击左右两边的箭头可以切换单独的图片:如下图 以上基本上就完成了理想女友的图片的简单的全过程,后面大家可以按照自己的喜好,更改不同的提示词就可以切换不同的场景,另外两个模型,大家也可以尝试一下。 1.日式美少女模型:cherryPickerXL_v27模型 正向提示词: highres,best quality,natural,Illustrator without black main lines,black contour lines,or black line drawings,flat and monochrome illustration,coloring similar to overseas animation,chibi character,full-body illustration,deformed illustration,girl holding a guitar with white and light blue as precious colors,flat illustration,simple,minimalism,white background.

文心一言可以用来降重吗

大家好,今天来聊聊文心一言可以用来降重吗,希望能给大家提供一点参考。 以下是针对论文重复率高的情况,提供一些修改建议和技巧,可以借助此类工具: 文心一言可以用来辅助降重 文心一言是百度推出的AI语言模型,具有强大的自然语言处理能力。在论文降重方面,文心一言可以提供一定的辅助作用。 一、文心一言的文本处理能力 文心一言可以对文本进行语义分析和理解,识别出文本中的重复内容,并提出相应的修改建议。这有助于减轻人工降重的工作量,提高降重效率。 二、文心一言的降重效果 虽然文心一言可以辅助降重,但其效果可能因文本内容、语言风格等因素而有所不同。对于一些简单的重复内容,文心一言可以很好地进行降重处理。但对于一些复杂的文本结构和语义关系,可能需要结合其他方法进行辅助降重。 三、文心一言的局限性 虽然文心一言在文本处理方面有着广泛的应用,但其也存在一些局限性。例如,对于一些特定领域的专业术语和复杂句式,文心一言可能无法准确理解和处理。此外,对于一些具有特殊文化背景和语境的文本,文心一言也可能无法完全准确地把握其含义和表达方式。 四、结合其他方法进行降重 虽然文心一言可以用来进行文本降重,但为了达到更好的效果,通常需要结合其他方法进行辅助降重。例如,可以结合专业的查重工具对论文进行查重,找出其中的重复内容和相似度较高的部分,然后使用文心一言或其他工具进行辅助降重。此外,也可以结合人工审阅和修改的方式,对论文进行进一步的调整和优化伪原创。 五、结论 总的来说,文心一言可以用来辅助降重,但其效果可能因文本内容、语言风格等因素而有所不同。为了达到更好的效果,通常需要结合其他方法进行辅助降重从65%到8%‼️论文降重推荐。同时,在使用文心一言进行降重时,也需要注意其局限性,并结合其他方法进行综合处理。 文心一言可以用来降重吗相关文章: 从53%到10%‼️论文怎么引用不算重复率 从61%到5%‼️知网查重重复率看哪 从65%到6%‼️五十句子之间的转换 从63%到6%‼️毕业论文要修改几个 从63%到9%‼️论文查重怎么看重复的地方

(头哥)Hive的安装与配置

第1关:Hive的安装与配置 wget -O - https://gitee.com/tianzhen2647/bash/raw/master/Hive%E7%9A%84%E5%AE%89%E8%A3%85%E4%B8%8E%E9%85%8D%E7%BD%AE/h1.sh | bash 第2关:Hive Shell入门基础命令 直接修改/opt/hive/bin下的hive文件,把里面的内容修改为 #!/bin/bash # 输出 "default" echo "student id int name string age int" 或者还是不行的话,复制预期输出里面的结构,这个不做脚本的原因也在于总是会出现tab和空白符不匹配的情况,难绷,那就只能用点特殊方法了

学生信息管理系统(mysql+jsp+servlet)

一、相关知识介绍: (一)JDBC技术: JDBC是Java Database Connectivity(Java数据库连接)的缩写,编程人员可以通过这个API接口连接到数据库,并使用结构化查询语言(SQL)完成对数据库的查找和更新 JDBC的目标是屏蔽不同的数据库驱动程序之间的差别,为开发者提供一个标准的、纯Java的数据库程序设计接口,为在Java中访问不同类型的数据库提供技术支持 在Java程序中,通过JDBC访问数据库的步骤如下: ①装载并注册数据库的JDBC驱动程序; ②建立与数据库的连接; ③创建Statement对象; ④调用SQL语句访问数据库; ⑤处理ResultSet中的记录集; ⑥关闭ResultSet、Statement和Connection对象。 (二)MVC模式 1.MVC组成 MVC是 Model-View-Controller 的缩写,即模型-视图-控制器,是一种目前广泛流行的软件设计模式,MVC把一个应用的输入、处理、输出流程按照模型、视图、控制器的方式进行分离,从而将一个应用程序分成三个核心模块:模型、视图和控制器,它们各自完成不同的任务 总的来说,模型是应用对象,视图时他在屏幕上的表示,控制器定义用户界面对用户输入的响应方式 2.MVC模式两种开发模型: 模型一:JSP+JavaBeans的结合 模型二:JSP+JavaBeans+Servlet的结合 二、该项目总体功能概述: 本系统利用Java Web技术实现了学生信息管理系统,具有简单的学生信息管理功能。实现了一下功能模块:院系信息管理模块,学生信息管理模块,课程信息管理模块,成绩管理模块等。 所用到的技术栈 mvc开发模式 jsp+Servlet HTML5+CSS3+JavaScript等 三、系统运行过程: 四、详细设计与代码实现 (一)建立数据库与相关表 1.创建数据库: StudentInfoManagement 2.创建相关表: class表: 字段中文描述数据类型Clno班级编号char(20)Clname班级名称char(20)Dno所属院系char(20) Course表: 字段中文描述数据类型Cno课程号char(20)Cname课程名称char(20)Cteacher老师char(20)Ccredit学分smallint Department表: 字段中文描述数据类型Dno所属院系char(20)Dname系名char(20) SC表: 字段中文描述数据类型Sno学号char(20)Cno课程号char(20)Grade成绩smallint Student表: 字段中文描述数据类型Sno学号char(20)Sname姓名char(20)Ssex性别char(20)Sage年龄smallintClno班级编号char(20) User表: 字段中文描述数据类型username用户名char(20)password密码char(20)level权限级别char(20) (二)设计系统所需要的JavaBean DBUtils.java类: 该JavaBean将数据库连接操作和关闭操作封装起来,在以后的数据库操作中可以直接调用这个JavaBean的方法,该JavaBean应该包含的方法有: 1.数据库的连接,获得一个连接对象的方法:Connection getConnection() 2.当数据库操作完成后,关闭连接并释放资源的方法:closeConnection(Connection conn) 实现代码: `package utils; import java.sql.DriverManager; import java.sql.SQLException; import com.mysql.jdbc.Connection; public class DBUtils { /** * 获取数据库连接 * @return Connection对象 */ public static Connection getConnection(){ String dbUserName = "

python可以在win7上运行吗,python哪个版本支持win7

大家好,小编来为大家解答以下问题,python可以在win7上运行吗,python哪个版本支持win7,今天让我们一起来看看吧! 背景 我需要在不连接互联网的 Windows7 办公电脑上为网页版的办公系统开发一个自动化工具,可以将日常琐碎的操作替代掉。 基本确定了通过 Python+Selenium 的方式来实现网页自动化功能python创意。 首先我需要配置开发环境,安装 Python、VS Code、导入Selenium库、下载浏览器驱动。 本文会介绍在 Window7 系统下应该安装哪一版的 Python。 从 Python 官网文档中寻找不同版本所支持系统的信息 我在搜索引擎中搜索出来的结果千差万别,想要从中辨别出每一条信息的真假是很有些难度的。所以我开始在 Python 官网上寻找不同 Python 版本支持的系统信息。大家可以参照下图展示的方式查找自己设备系统(如 macOS、Linux 等)的 Python 版本支持信息。 第1步:打开 Python 官网首页文档 Document 中的 Windows 第2步:查找支持 Windows7 系统的 Python3.X 版本 第3步:找到最新的支持 Windows7 系统的 Python 版本 有两种方式确定支持 Windows7 的最终版本号。 方式1: 在当前页面向下滑,发布时间由近及远,找到支持 Windows7 系统的最终 Python 版本。记住:要有安装文件的版本才行。 方式2: 查阅 Python3.8 版本的发布计划,确定支持Windows7 系统的最终 Python 版本。 打开 Python 官网首页文档 Document 中的 All releases 查看 Python3.8 版本的发布计划 PEP 569

基于OpenAI的Whisper构建的高效语音识别模型:faster-whisper

1 faster-whisper介绍 faster-whisper是基于OpenAI的Whisper模型的高效实现,它利用CTranslate2,一个专为Transformer模型设计的快速推理引擎。这种实现不仅提高了语音识别的速度,还优化了内存使用效率。faster-whisper的核心优势在于其能够在保持原有模型准确度的同时,大幅提升处理速度,这使得它在处理大规模语音数据时更加高效。 项目地址:https://github.com/SYSTRAN/faster-whisper 1.1 whisper OpenAI 的开源模型 whisper,可以执行 99 种语言的语音识别和文字转写。但是 whisper 模型占用计算资源多,命令行使用门槛高。whisper 模型本身还存在一些问题,例如 模型幻听问题(大部分的类似于不断重复同一句话、无语音部分复读莫名内容等都是由于这个原因造成的)。要更好使用 whsiper 模型就需要能够准确调试模型参数。但 whisper 模型参数众多,且命令行使用对使用者有一定要求,而且只有 torch 版可以做到调整参数。使用 VAD 类工具也需要一定的动手能力。 1.2 faster-whisper faster-whisper是具有完全的 whsiper 模型参数,且自带 VAD加持的 whisper 版本,该版本使用了 CTranslate2 来重新实现 whsiper 模型,CT2 对 transformer 类网络进行了优化,使模型推理效率更高。 相比于 openai/whisper,该实现在相同准确性下速度提高了 4 倍以上,同时使用的内存更少。 所谓 VAD 即 Voice Activity Detection —— 声音活动检测,在语音信号处理中,例如语音增强,语音识别等领域有着非常重要的作用。它的作用是从一段语音(纯净或带噪)信号中标识出语音片段与非语音片段。在语音转写任务中,可以提前将语音和非语音部分分离出来,从而提升 whisper 网络识别速度,并减少模型幻听。 VAD地址:https://github.com/snakers4/silero-vad 1.3 性能对比 在性能方面,faster-whisper展现了显著的优势。例如,在使用Large-v2模型和GPU进行13分钟音频的转录测试中,faster-whisper仅需54秒,而原始Whisper模型需要4分30秒。这一显著的性能提升,意味着在实际应用中,faster-whisper能够更快地处理大量数据,特别是在需要实时或近实时语音识别的场景中。 1.4 技术优势 faster-whisper的技术优势不仅体现在速度上。它还支持8位量化,这一技术可以在不牺牲太多准确度的情况下,进一步减少模型在CPU和GPU上的内存占用。这使得faster-whisper在资源受限的环境中也能高效运行,如在移动设备或嵌入式系统上。 aster-whisper适用于多种场景,特别是那些需要快速、准确的语音识别的应用。例如,在客户服务中,它可以用于实时语音转文字,提高响应速度和服务质量。在医疗领域,faster-whisper可以辅助医生快速转录病历,提高工作效率。此外,它还适用于实时会议记录、多语言翻译、教育辅助等多个领域。 2 faster-whisper安装及使用 2.1 conda环境下安装 pip install faster-whisper 2.2 模型下载 large-v3模型:https://huggingface.

Java 实现自动获取法定节假日

一、背景 在实现业务需求的过程中,遇到了需要计算 x 个工作日后的日期需求。由于工作日是每年国务院发布的,调休和休假都没有规律,所以无法使用算法进行计算。 一般的实现方案是自己维护一个工作日和调休的表,或者去爬取国务院发布的数据。但前者实现起来麻烦,每年都得搞一遍;后者可能涉及法律风险,爬虫的识别策略也不太可靠。 所以还是考虑使用由专人维护的接口,找到了天行数据的接口,个人用户有10个免费接口的额度,每个接口每天限制调用100次。 因为节假日一旦定下来就不会轻易改变,所以可以把获取到的数据存在本地,这样每天100次的接口额度完全够用,不需要进行付费。 二、技术实现方案 整体流程: 读取节假日配置:从本地文件中读取节假日,如果本地没有文件,则调用天行接口获取。解析数据:从天行返回的数据里,获取该年份里需要调休的日期和补班的日期。计算日期:循环获取日期,判断是否为工作日,计算x个工作日后的日期。 实现细节: 文件名:保存下来的文件,名字里要包含特定的年份。计算逻辑:计算日期的时候,需要考虑到跨年的情况,跨年需要重新获取下一年的数据,再继续进行计算日期。日期判断:工作日=不休假的周一至周五+补班的周六周末。 三、详细代码 Java 代码 主要有五个类,HolidayResponse 是封装天行API的返回结果;TianApiProperties 是获取天行API的key;TianApiHolidayService 是接口;TianApiHolidayServiceImpl 里是具体实现;HttpConnector 是接口请求,这个换成任何一个能发起http请求的库都行。 目前代码是基于SpringBoot写的,但纯粹只是为了方便,实际是可以转成纯Java工具代码,不依赖于SpringBoot。 HolidayResponse.java import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import java.util.List; /** * @author jing * @version 1.0 * @desc 返回结果 * @date 2023/12/19 11:40 **/ @Data public class HolidayResponse { @JsonProperty("code") private int code; // 公共参数 - 状态码 @JsonProperty("msg") private String msg; // 公共参数 - 错误信息 @JsonProperty("result") private Result result; // 公共参数 - 返回结果集 // Getters and setters /** * Represents the result section of the response.

python如何做图形化界面,python的图形界面gui编程

大家好,本文将围绕python编写图形化界面的工具展开说明,python如何做图形化界面是一个很多人都想弄明白的事情,想搞清楚python的图形界面gui编程需要先了解以下几个事情。 原文链接:(八)Python 图形化界面设计 - 简书 声明:本篇文章为转载自(八)Python 图形化界面设计 - 简书,在原作者的基础上添加目录导航,旨在帮助大家以更高效率进行学习和开发。 Python-Tkinter 图形化界面设计(详细教程) 目录 Python-Tkinter 图形化界面设计(详细教程) 一、图形化界面设计的基本理解 二、窗体控件布局 2.1.根窗体显示实例 2.2. tkinter 常用控件 2.2.1 控件的共同属性 2.3 控件布局 2.3.1 pack()方法 2.3.2 grid()方法 2.3.3 place()方法 三、tkinter常见控件的特征属性 3.1、文本输入和输出相关控件 ○ 3.1.1 标签(Label)和 消息(Message) ○ 3.1.2 文本框(Text) ○ 3.1.3 输入框(Entry) 3.2 按钮(Button) 3.3 单选按钮 3.4 复选框 3.5 列表框 与 组合框 3.5.1 列表框 3.5.2 组合框 3.6 滑块 3.7 菜单 3.8 子窗体 3.9 模式对话框(Modal) 3.9.1 交互对话框 3.9.2 文件选择对话框 3.9.3、颜色选择对话框

Qualcomm® AI Engine Direct 使用手册(15)

Qualcomm® AI Engine Direct 使用手册(15) 6 工具6.1 型号转换6.2 模型准备 6 工具 本页介绍了适用于 Linux/Android 和 Windows 开发人员的各种 SDK 工具和功能。对于不同开发者的集成流程,请参阅概述页面了解更多信息。 笔记 在本机 Windows 中使用转换器工具时,用户需要通过Python执行(参见下面的示例) $ python qnn-onnx-converter <选项> 笔记 库的扩展名命名:对于 Windows 开发人员,请将以下部分中的所有“.so”文件替换为类似的“.dll”文件。请参阅平台差异了解更多详细信息。 有关转换器的更多详细信息,请参阅转换器。 [*] Windows 平台上的 qnn-profile-viewer 不支持 libQnnGpuProfilingReader.dll。 [†] 不支持 ARM64EC/X 二进制格式。 6.1 型号转换 qnn-张量流转换器 qnn -tensorflow-converter工具将模型从 TensorFlow 框架转换为 CPP 文件,将模型表示为一系列 QNN API 调用。此外,还会生成包含模型静态权重的二进制文件。 usage: qnn-tensorflow-converter -d INPUT_NAME INPUT_DIM --out_node OUT_NAMES [--input_type INPUT_NAME INPUT_TYPE] [--input_dtype INPUT_NAME INPUT_DTYPE] [--input_encoding INPUT_ENCODING [INPUT_ENCODING .

Android13关于获取外部存储文件的相关问题及解决方案记录

Android的学习路上... 测试设备:vivo X90s安卓版本: Android13开发环境:AndroidStudio FlamingoSDK:33 最近我在Android13的环境下尝试写一个文件选择器,以便日后的开发使用。但是我们知道,从Android13 (API33) 开始,外部存储权限发生了变化,要想读取外部存储文件,使用原来的权限注册方式已经失效了。 <!--以下方式在安卓13下已失效--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 测试一下:我在test文件夹内有4个文件和1个文件夹。 左图是系统自带的文件选择器,右图是我开发的文件选择器(我是以系统的选择器作为参照的,因此样子长得很像😄)。此时我的文件选择器只注册了 WRITE/READ_EXTERNAL_STORAGE 权限。可以看到,这种方式在Android13中是获取不到文件的,只能获取文件夹。 系统自带的文件选择器 我开发的文件选择器 这是因为Android13细化了外部存储权限,在我的理解里,Android13把文件分为了媒体文件和非媒体文件。媒体文件包括照片、视频和音频,他们需要各自的权限才能获取。权限声明如下所示(在AndroidManifest.xml中声明后还需动态获取权限): <!--照片--> <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" /> <!--视频--> <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" /> <!--音频--> <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" /> 在上图中,picture.png属于照片文件,video.mp4属于视频文件,music.mp3属于音频文件。而text.pdf就属于非媒体文件了。若现在赋予我的文件选择器媒体文件权限,如下图所示,此时就能看到:picture.png、video.mp4、music.mp3就能被获取了。 开启媒体文件权限 获取到媒体文件 那除了媒体文件外,其他的比如PDF文件、DOCX文件、TXT文件等等这些非媒体文件应该如何获取呢?其中之一可行的办法就是使用管理所有文件权限。 <!--管理所有文件权限--> <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" tools:ignore="ScopedStorage" /> 使用此权限时,需要现在AndroidManifest.xml中声明,但不需动态获取权限。而是要跳转到设置页面使用户手动开启权限,跳转代码如下: // 跳转至设置页面,让用户手动开启 public void setting(Activity activity) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { if (!Environment.isExternalStorageManager()) { Intent intent = new Intent( Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION); intent.setData(Uri.parse("package:" + activity.getPackageName())); activity.startActivity(intent); } } } 设置页面如下左图。手动开启了权限后,就可以获取到其他文件了,如下右图所示。 管理所有文件权限设置页面 开启后就能获取到非媒体文件了 开启此权限值得注意的是: 如果允许了此权限,那么即使应用无“照片与视频”、“音乐与音频”权限,仍可访问、写入、修改和删除所有文件。

深度学习关于stable diffusion官方模型下载,并附上:Stable Diffusion下载+安装+使用教程,保证你能学会!

下载地址: 自用备份,有需要的人请拿去,不客气!! 1.4版本下载: CompVis/stable-diffusion-v-1-4-original · Hugging Face 1.5版本下载: runwayml/stable-diffusion-v1-5 at main sdxl-0.9.0版本下载 https://huggingface.co/stabilityai/stable-diffusion-xl-base-0.9 sdxl-1.0版本下载: https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/tree/main ———————————————— 详细教程: 一、Stable Diffusion 安装 我们可以先安装启动器的运行依赖,并解压秋叶包本体。 第一步:打开“启动器运行依赖-dotnet-6.0.11.exe”来安装。 第二步:解压“sd-webui-aki-v4.zip”。 注意: 当我们解压好启动器本体的时候,暂时还不要启动,先一起把模型安装了。 第三步:导入核心数据。 1、下载“推荐大模型”文件夹中的模型。 2、并把文件夹里的所有模型放在这个目录下: \sd-webui-aki-v4\models\Stable-diffusion 1 3、同时,还要下载ControlNet模型。 4、ControlNet模型文件夹里的所有内容,放在这个目录下: \sd-webui-aki-v4\models\ControlNet 1 5、最后,需要单独下载推荐LoRA。 6、这些LoRA是笔者为了方便小伙伴们取用改了名的,需要全部放在这个目录下: sd-webui-aki-v4\extensions\sd-webui-additional-networks\models\lora 1 7、当大家上手之后就可以参考末尾处这一篇文章,并在【大量模型·LoRA】文件夹中寻找自己想要的LoRA了。 二、Stable Diffusion 使用教程 开启软件运行。 解压并导入完毕上述数据之后,就可以点开启动器了。 1、在安装目录下往下拉,找到这个“A启动器.exe",双击。 2、再点击右下角的一键启动。 3、再让这个界面多跑一会儿。 4、就可以看到它自动在浏览器中打开了一个新的网页,就算是启动成功了。 注意: 有时候会出现警告错误或缺少模块,但是又不会影响正常运行。 如果它没自动打开,可以手工去浏览器输入网址:http://127.0.0.1:7860 5、最终的效果。 例如:输入一个关键词“一个美女”,点击“生成”,结果效果图如下: 总结: 这是Stable Diffusion WebUI 2.0 离线版的,没网也能用,也可以做18+的,这里就不展示了,哈哈哈! 不过这玩意10G,我加了一些lora,controNet,大模型,一下子就70个G,效果还不错,不过大部分都是civitai中直接下载别人训练好的模型。 整合包下载 上面用到的安装文件和整合包已经上传CSDN,朋友们如果需要可以点击下方微信扫描CSDN官方认证二维码免费下载。 ———————————————— 版权声明:本文为CSDN博主「AI绘画成神之路」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/m0_71745903/article/details/133827105

【分布式链路追踪技术】sleuth+zipkin

目录 1.概述 2.搭建演示工程 3.sleuth 4.zipkin 5.插拔式存储 5.1.存储到MySQL中 5.2.用MQ来流量削峰 6.联系作者 1.概述 当采用分布式架构后,一次请求会在多个服务之间流转,组成单次调用链的服务往往都分散在不同的服务器上。这就会带来一个问题: 故障难以溯源。 发起请求,然后请求报错,到底是调用链中哪一环出了问题?很难以定位。这时候就需要用到链路追踪技术了。所谓的链路追踪技术,也就是想办法让分布式系统中的单次请求的链路调用成为可被追踪的,便于在出现故障的时候进行快速的定位溯源。 目前有两套实现思路: 基于日志来实现,常用到的有Sleuth、zipkin 基于agent来实现,常用到的有skywaiking 本文讲解的是其中基于日志实现的sleuth以及其配套的可视化套件zipkin。 关于分布式链路追踪作者上文讲过详细的概论: https://bugman.blog.csdn.net/article/details/135175596?spm=1001.2014.3001.5502 2.搭建演示工程 本次用于演示的工程很简单,用spring cloud来搭建三个服务,一个app服务用来提供服务,一个鉴权中心用来登录以及鉴权,一个bis服务用来聚合: 在bis中调用鉴权中心来登录获取token,然后校验token,校验通过后调用app提供的服务: spring cloud的成体系的文章,在博主的另一个专栏,从0开始一步步深入浅出(该系列登上过2023年的新星计划): http://t.csdnimg.cn/PDgr3 3.sleuth 依赖: <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-sleuth</artifactId> <version>3.1.8</version> </dependency> 去访问bis,会看到: bis的日志: AuthenticationCenter的日志: APP的日志: 我想到这里很多读者会有个疑问。 问: sleuth这么保证一个链路上的traceID是相同的? 答: 当一个请求进入 Spring Cloud 的微服务系统时,Sleuth 会生成一个唯一的 Trace ID。如果请求是从另一个使用 Sleuth 的服务传入的,Sleuth 会提取并使用该服务传入的 Trace ID。Sleuth 集成了这些通信协议,如HTTP协议,并在服务间调用时自动将 Trace ID 添加到 HTTP 请求的头部、消息的元数据等中。 4.zipkin 光有了日志,进行问题排查还是要一条条的翻,还是很繁琐。所以配套出现了可视化套件,由推特开发的——zipkin。其能对标准opentracing格式的日志进行收集和展示。zipkin采用的标准的CS架构,client向server发数据。 服务端: 服务端是一个jar包,直接跑起来就可以,下载地址: Central Repository: io/zipkin/zipkin-server 客户端: 依赖: <dependency>

Python头歌集合(部分参考题解)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Python初体验——Hello World第1关:Hello Python,我来了!第2关:我想看世界第3关:学好Python 二、Python入门之基础语法第1关:行与缩进第2关:标识符与保留字第3关:注释第4关:输入输出 三、函数结构第1关:函数的参数 - 搭建函数房子的砖第2关:函数的返回值 - 可有可无的 return第3关:函数的使用范围:Python 作用域 四、函数调用第1关:内置函数 - 让你偷懒的工具第2关:函数正确调用 - 得到想要的结果第3关:函数与函数调用 - 分清主次 五、模块第1关:模块的定义第2关:内置模块中的内置函数 六、字符串处理第1关:字符串的拼接:名字的组成第2关:字符转换第3关:字符串查找与替换 七、元组与字典第1关:元组的使用:这份菜单能修改吗?第2关:字典的使用:这份菜单可以修改第3关:字典的遍历:菜名和价格的展示第4关:嵌套 - 菜单的信息量好大 八、玩转列表第1关:列表元素的增删改:客人名单的变化第2关:列表元素的排序:给客人排序第3关:数值列表:用数字说话第4关:列表切片:你的菜单和我的菜单 九、循环结构第1关:While 循环与 break 语句第2关:for 循环与 continue 语句第3关:循环嵌套第4关:迭代器 十、顺序与选择结构第1关:顺序结构第2关:选择结构:if-else第3关:选择结构 : 三元操作符 十一、类的基础语法第1关:类的声明与定义第2关:类的属性与实例化第3关:类的导入 十二、类的继承第1关:初识继承第2关:覆盖方法第3关:多重继承 十三、类的其它特性第1关:类的私有化 十四、NumPy基础及取值操作第1关:ndarray对象第2关:形状操作第3关:基础操作第4关:随机数生成第5关:索引与切片 十五、NumPy数组的高级操作第1关:堆叠操作第2关:比较、掩码和布尔逻辑第3关:花式索引与布尔索引第4关:广播机制第5关:线性代数 十六、Numpy 进阶第1关:Numpy 广播第2关:Numpy 高级索引第3关:Numpy 迭代数组 十七、Pandas初体验第1关:了解数据处理对象--Series第2关:了解数据处理对象-DataFrame第3关:读取CSV格式数据第4关:数据的基本操作——排序第5关:数据的基本操作——删除第6关:数据的基本操作——算术运算第7关:数据的基本操作——去重第8关:层次化索引 十八、Pandas 进阶第1关:Pandas 分组聚合第2关:Pandas 创建透视表和交叉表 十九、 Matplotlib接口和常用图形第1关:画图接口第2关:线形图第3关:散点图第4关:直方图第5关:饼图 二十、Matplotlib子图与多子图第1关:手动创建子图第2关:网格子图第3关:更复杂的排列方式 二十一、Python面向对象编程实训第1关:按揭贷款——定义抽象类 二十二、机器学习第1关:kNN算法---红酒分类 二十三、K-means聚类算法第1关:计算欧几里得距离第2关:计算样本的最近邻聚类中心第3关:计算各聚类中心第4关:评估聚类效果第5关:组合已实现的函数完成K-means算法 二十四、机器学习 --- 神经网络第1关:神经网络基本概念第2关:激活函数第3关:反向传播算法 二十五、机器学习 --- 模型评估、选择与验证第1关:为什么要有训练集与测试集第2关:欠拟合与过拟合第3关:偏差与方差第4关:验证集与交叉验证第5关:衡量回归的性能指标 二十六、Python机器学习软件包Scikit-Learn的学习与运用第1关:使用scikit-learn导入数据集第2关:数据预处理 — 标准化 二十七、使用机器学习解决实际问题第2关:识别花朵第3关:预测房价第4关:癌症诊断 前言 提示:这里是本文要记录的大概内容:

Stable Diffusion API入门:简明教程

Stable Diffusion 是一个先进的深度学习模型,用于创造和修改图像。这个模型能够基于文本描述来生成图像,让机器理解和实现用户的创意。使用这项技术的关键在于掌握其 API,通过编程来操控图像生成的过程。 在探索 Stable Diffusion API 的世界前,需要把握以下基本概念: API(应用程序编程接口) :这是一个让不同应用软件之间可以进行通信的平台。利用 Stable Diffusion API,开发人员可以编程方式调用图像生成功能。端点(Endpoint) :端点是 API 在 URL 中的特定路径。这是 API 的访问点,通过在这些端点发送请求来使用 API 的服务。请求(Request) :请求是发送至 API 以调用一项服务的信息载体。在 Stable Diffusion API 中,请求通常会携带文本描述、风格设定和其他影响图像生成的选项。响应(Response) :响应是在请求处理完成后,API 返回的结果数据。使用 Stable Diffusion API,响应可以是生成的图像或者是一条执行状态报告。 Stable Diffusion API 的线上文档可以通过这个链接 Stable Diffusion API 文档 访问,网址为 https://stablediffusionapi.apifox.cn/ 。这个线上资源包括了官方提供的所有 API 接口及其说明,你可以根据业务需求挑选适用的接口进行调用。 为了更便捷地测试和调试,可以将这些 API 克隆到 Apifox 平台上,这样就可以直接在 Apifox 中进行操作了。 图文指南:Stable Diffusion API 的使用过程 获取 API 密钥 首先,每个 API 请求必须有授权。获取密钥请前往 https://stablediffusionapi.com/register 注册并登录(需要科学上网)。在“API Settings”找到并复制你的 API 密钥。

最全的Oracle到高斯数据库的SQL语法迁移手册(建议收藏)

Copyright © 2022 PawSQL 文章目录 概述虚拟表(dual)虚拟表dual 虚拟列虚拟列rownum虚拟列rowid 字符串函数nvl(col, value)nvl2(col, v1, v2)decode(arg1, arg2, arg3, arg4)substr(str, int, int)instr(str1, str2)replace(srcstr, oldsub[, newsub ])stragg(str,[str])listagg(str, [str]) 日期函数sysdate/systimestampto_date(str, fmt)trunc(arg1, [arg2])add_months(date, int)last_day(date) SQL语句HAVING子句顺序括号中的表名UNIQUE关键字MINUS关键字FROM关键字NOLOGGING关键字AS关键字FROM子查询的别名UPDATE语句里的字段名左(右)外连接CONNECT BY子句 操作符的强类型限制数值运算(+,-,*,/,%)日期计算(+,-)字符串拼接(||) 函数参数的强类型限制substr(arg1, arg2, arg3)sum(arg)avg(arg)round(arg) 条件判断中的强类型限制比较运算(=、>、<、>=、<=、<>)BETWEENIN LIST 默认参数to_char(unknown)to_number(str) 关于PawSQL联系我们 概述 异构数据库的迁移(譬如从Oracle迁移到openGauss)工作主要包括三个方面, 数据库对象的迁移,包括库、模式、表、索引、视图、触发器、存储过程等等;数据内容的迁移,主要指的是数据表中数据嘚迁移;数据应用的迁移,主要指的是应用中SQL语句的迁移。 目前对于数据库对象以及数据内容的迁移有很多成熟的工具,而对于应用迁移的工具却很少能够见到。原因是因为DML语句比DDL复杂的多,不同的数据库语法差异也比较大。目前市场上的迁移工具大多使用正则表达式来解析SQL语句,而DML语句的复杂性导致此类工具的解析成功率较低,难以作为一个成熟地商业产品进行推广。 PawSQL团队开发的DML语法转换工具Ora2ogSQL,通过PawSQL强大的SQLParser,能够解析几乎所有的Oracle语法,并将其转换为对应的openGauss语法,支持数据库应用的平滑迁移。 本手册介绍了Oracle和openGauss的语法区别,以及转换映射关系,可以作为迁移人员的SQL迁移参考手册。 本手册描述了PawSQL Ora2ogSQL内部的实现逻辑,PawSQL Ora2ogSQL能够帮助SQL迁移人员自动识别不兼容的语法,并完成语法转换。 虚拟表(dual) 虚拟表dual Oracle获取一个常量需要通过一个dual,Opengauss不需要 编号OracleOpengauss1select 2 from dualselect 2 虚拟列 虚拟列rownum 对于查询返回的每行数据,rownum虚拟列会返回一个数字,第一行的ROWNUM为1,第二行为2,以此类推。 rownum在select列表中时重写为row_number() over ()rownum在where子句中时重写为limit… offset… 编号OracleOpengauss1select rownum from customer;select row_number() over () as rownum from customer2select tableoid from customer where rownum < 10 and rownum >= 2;select tableoid from customer limit 9 OFFSET 23select c_name from customer where rownum < 10 and c_phone = ‘111’;select customer.

数据结构 实验 家族族谱项目

数据结构 实验 家族族谱项目 一、家族族谱项目的问题分析 1.设计制作自己的家族族谱,确认问题; 家谱记载了一个家族的世系繁衍及重要人物事迹。使用树型结构对家谱进行管理,实现查看祖先和子孙个人信息,插入家族成员,删除家族成员的功能 2.分解问题,写出问题陈述,即把问题分解为各个比较小的问题,区分出紧急、严重性或可能性等问题 (1).显示家谱图 (2).层次遍历家谱图 (3).显示第n代人的所有信息 (4).按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息) (5).按照出生日期查询成员名单 (6).输入两人姓名,确定其关系 (7).给某成员添加孩子 (8).删除某成员(若其还有后代,则-。并删除) (9).修改某成员信息 (10).按出生日期对家谱中所有人排序 (11).退出系统 3. 分析选择关键活动,按照问题优先度排序,即制订研究这些问题的先后程序。按照姓名查询,输出成员信息 4. 分析此类问题所需数据的类型、特点、关系等。 采用二叉树来表示家谱。家谱可以看作是一颗树。许多家庭看作一片森林。每个森林都有唯一对应的二叉树。且二叉树非常方便操作和理解。 二、家族族谱项目的结构设计 1.根据问题分析设计一款合适的数据结构 2.选择合适存储结构方案,写出具体的结构体定义 typedef struct Infomation{ char name[20]; char birth[20]; int wedding; char add[20]; int health; char death_date[20]; }Info; typedef struct bnode{ Info person; struct bnode *lchild,*rchild; }BNode,*BiTree; typedef struct{ //循环队列的定义 BiTree queue[MAXSIZE]; int front,rear; }Queue; 3.设计解决问题的基本功能/操作 1、初始化队列,由void InitQ()函数实现 2、入队,由void EnQueue()函数实现 3、出队,由void DeQueue()函数实现 4、判队空,由int QEmpty()函数实现 5、判队满,由int QFull()函数实现