【JavaEE进阶】 利用Spring简单实现加法计算器和用户登录

文章目录 🎍序言🌳加法计算器🚩准备工作🚩约定前后端交互接⼝🌲后端服务器代码的书写 🌴用户登录🚩效果展示🚩准备工作🚩约定前后端交互接⼝🎈需求分析🎈接⼝定义📌校验接⼝📌查询登录⽤⼾接⼝ 🚩后端代码的书写🎈校验接⼝代码🎈查询登录⽤⼾接⼝🎈完整代码实现 ⭕总结 🎍序言 本篇博客主要内容: 理解前后端交互过程 接⼝传参,数据返回,以及⻚⾯展⽰ 🌳加法计算器 需求:输⼊两个整数,点击"点击相加"按钮,显⽰计算结果 效果展示如下: 具体实现步骤,博主大致分为以下几步: 准备工作 约定前后端交互接⼝ 后端服务器代码的书写 🚩准备工作 创建SpringBoot项⽬: 引⼊Spring Web依赖 这部分不会的小伙伴可以去看看博主写的【JavaEE进阶】 SpringBoot的创建与简单使用 创建calc.html文件 接下来我会直接给出大家前端的代码,大家直接导入即可,前端代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="calc/sum" method="post"> <h1>计算器</h1> 数字1:<input name="num1" type="text"><br> 数字2:<input name="num2" type="text"><br> <input type="submit" value=" 点击相加"> </form> </body> </html> 🚩约定前后端交互接⼝ 约定"前后端交互接"是进⾏Web开发中的关键环节 接⼝⼜叫API(Application Programming Interface),我们⼀般讲到接⼝或者API,指的都是同⼀个东西. 是指应⽤程序对外提供的服务的描述,⽤于交换信息和执⾏任务(与JavaSE阶段学习的[类和接⼝]中的接⼝是两回事). 简单来说,就是允许客⼾端给服务器发送哪些HTTP请求,并且每种请求预期获取什么样的HTTP响应. 现在"前后端分离"模式开发,前端和后端代码通常由不同的团队负责开发.双⽅团队在开发之前,会提前约定好交互的⽅式.客⼾端发起请求,服务器提供对应的服务. 服务器提供的服务种类有很多,客⼾端按照双⽅约定指定选择哪⼀个服务 接⼝,其实也就是我们前⾯⽹络模块讲的的"应⽤层协议".把约定的内容写在⽂档上,就是"接⼝⽂档",接⼝⽂档也可以理解为是应⽤程序的"操作说明书 在项⽬开发前,根据需求先约定好前后端交互接⼝,双⽅按照接⼝⽂档进⾏开发. 接⼝⽂档通常由服务提供⽅来写,交由服务使⽤⽅确认,也就是客⼾端. 接⼝⽂档⼀旦写好,尽量不要轻易改变. 如若需要改变,必须要通知另⼀⽅知晓 接下来我们一起来写一个关于加法计算器的简单的接口文档 首先我们进行需求分析 加法计算器功能,对两个整数进⾏相加,需要客⼾端提供参与计算的两个数,服务端返回这两个整数计算的结果 基于以上分析,我们来定义接⼝

docker之daemon.json配置

1. daemon.json为整个docker下的所有容器提供配置项 默认位置存放在 /etc/docker/daemon.json 如果不存在这个文件 可以手动创建一个 2. daemon.json的常见配置项目如下 { “api-cors-header”:"", ——————在引擎API中设置CORS标头 “authorization-plugins”:[], ——————要加载的授权插件 “bridge”:"", ————将容器附加到网桥 “cgroup-parent”:"", ——————为所有容器设置父cgroup “cluster-store”:"", ——————分布式存储后端的URL “cluster-store-opts”:{}, ————————设置集群存储选项(默认map []) “cluster-advertise”:"", ————————要通告的地址或接口名称 “debug”: true, ————————启用调试模式,启用后,可以看到很多的启动信息。默认false “default-gateway”:"", ——————容器默认网关IPv4地址 “default-gateway-v6”:"", ——————容器默认网关IPv6地址 “default-runtime”:“runc”, ————————容器的默认OCI运行时(默认为“ runc”) “default-ulimits”:{}, ——————容器的默认ulimit(默认[]) “dns”: [“192.168.1.1”], ——————设定容器DNS的地址,在容器的 /etc/resolv.conf文件中可查看。 “dns-opts”: [], ————————容器 /etc/resolv.conf 文件,其他设置 “dns-search”: [], ————————设定容器的搜索域,当设定搜索域为 .example.com 时,在搜索一个名为 host 的 主机时,DNS不仅搜索host,还会搜 索host.example.com 。 注意:如果不设置, Docker 会默认用主机上的 /etc/resolv.conf 来配置容器。 “exec-opts”: [], ————————运行时执行选项 “exec-root”:"", ————————执行状态文件的根目录(默认为’/var/run/docker‘) “fixed-cidr”:"", ————————固定IP的IPv4子网 “fixed-cidr-v6”:"", ————————固定IP的IPv6子网 “data-root”:"

静态网页设计二十四节气网站HTML+CSS+JS(web期末大作业)

一、网站题目 本网站介绍了中国二十四节气,中国二十四节气准确的反映了自然节律变化,在人们日常生活中发挥了极为重要的作用,二十四节气蕴含着悠久的文化内涵和历史积淀。 二、网站描述 2.1整体页面布局 网页多次使用div进行页面排版和页面布局,同时使用了float的属性,页面内容清晰明了,划分为不同块区,各页面通过超链接相联系。 2.2 导航栏制作 用ul-li进行导航栏制,同时用到了position 、margin、 padding以及border的相关属性。a标签使用display转换块级属性,同时进行左浮动设置完成了横向展示。还有hover的鼠标悬停特效。 2.3内容部分 左侧实现简单的轮播图功能,使用@keyframes switch{}在这里面设置每段回收,一共五张图片进行滚动,右侧文字说明用到了font的属性,进行文字样式的设置。节气歌部分用到了居中还有边界以及字体颜色设置。底端部分使用了ul-li布局,完成了列表的展现,同时使用背景图片结尾,实现颜色呼应。 2.4春夏秋冬二级页面 使用同一个CSS设置,实现页面布局一致性,html部分用h1 h2 加入标题,页面下半部分插入各个节气的图片 2.5留言页面 运用table表单知识完成了表格的展现 整合使用tr td ul li 完成页面布局,使用option设计了下拉表单以供选择,input实现两个按钮 2.6JavaScript部分 用JavaScript实现了页面警告框弹出提示,还有星星点亮评分,设计了JavaScript代码实现星星点亮选择 三、网站演示 四、网站源码 4.1HTML结构代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>二十四节气</title> <link rel="stylesheet" type="text/css" href="css/首页.css"/> <script src="js/qiehuan.js" type="text/javascript" charset="utf-8"></script> </head> <body> <div id="container" > <h1>二十四节气</h1> <div id="nav"> <ul> <li><img src=""/></li> <li><a href="index.html" target="_self">首页</a></li> <li><a href="Spring.html" target="_blank">春</a></li> <li><a href="Summer.html" target="_blank">夏</a></li> <li><a href="Autumn.html" target="_blank">秋</a></li> <li><a href="

AI绘画 | 不用魔法,不用花钱的Midjourney,拿走不谢!

AI绘画神器Midjourney的大名估计没人不知道了吧,但很多同学因为使用Midjourney需要魔法上网,再加上每个月几十美刀的费用的原因,直接被挡在了门外,今天给大家分享一个可以直接白嫖,且无需魔法上网来使用Midjourney的方法。到底香不香,大家用过之后就知道了。 只需3步即可 全程无需魔法上网 ❶注册Slack → ❷添加Midjourney机器人→ ❸开始使用Midjourney 注册Slack 直接打开slack官网 https://slack.com/,点击右上角的“登录”的地方进行注册即可。 注册完毕意味着有了自己的Slack账户,就像在discord中建立自己的空间一样,在slack中也可以建立自己的工作区,点击“创建工作区” ↑点击创建工作区↑ ↑团队命名↑ ↑用途说明↑ 创建成功后即可进入到你自己的工作区了 ↑在你的工作区内可以随意添加你的频道↑ 添加Midjourney机器人 经过以上步骤建立了自己的工作区之后,我们需要将Midjourney机器人添加到我们的工作区中。就像discord中增加机器人一样,我们需要先找到slack中的Midjourney机器人(Midjourney for slack) Use Midjourney in slack 网址:https://www.mjslackbot.com/ ↑点击Add to Slack↑ ↑点击【允许】↑ ↑点击接受↑ 开始使用Midjourney 以上步骤全部完成之后,在你的工作区中就会多出一个MJ Slackbot来,这就是Midjourney机器人了。使用的出图命令和Midjourney完全一样,输入"/"就会显示命令提示。 ↑Midjourney 安装成功↑ 生成第一张图像 和正常使用MJ一样,我们输入“/image prompt a cute boy”,便生成了以下图像。(注意看,还是fast模式哦) ↑一次生成4张图像↑ ↑点击U放大图像↑ 点击V生成变量图像 点击图像后,在弹出框中右键单击“图像存储为” 生成的图像最大只有512×512 总结 1、在Slack中可以正常使用Midjourney进行AI绘画 2、无需魔法,完全免费 2、完全继承了Midjourney命令和参数以及使用技巧 3、缺点:生成的图像最大尺寸只有512×512,但我认为这个缺点完全可以接受,因为我们可以对生成的图用AI工具高清放大,这都不叫事。 资料分享 小编整理了一份AI绘画的入门资料包,包括Stable Diffusion和Midjourney的安装包等等,wx扫描二v码免费领取 【保证100%免费】

opengauss-高斯数据库的安装部署及MySQL数据迁移实战.

目录 介绍 下载安装包 安装 1.设置SEMMNI 2.新建用户和用户组 3.下载安装包解压 4.安装数据库 5.修改配置 6.重启服务 数据库使用 gsql命令和常用sql 1.使用omm用户连接数据库-本地登陆无需输入密码: 2.查看用户信息 3.删除数据库 4.创建用户 5.创建数据库 B模式即MySQL模式(一定要设置成B) 6.切换到数据库 7.创建SCHEMA,需切换到指定的数据库执行 8.退出gsql 参考 介绍 opengauss是华为基于PostgreSQL魔改的数据库。本文介绍轻量版的安装。 官网:https://docs-opengauss.osinfra.cn/zh/docs/5.1.0/docs/GettingStarted/GettingStarted.html 安装包下载地址:https://opengauss.org/zh/download/ 相关文档地址:https://docs-opengauss.osinfra.cn/zh/docs/5.1.0/docs/GettingStarted/%E4%BA%86%E8%A7%A3openGauss.html 下载安装包 安装 1.设置SEMMNI 如果不设置的话在安装过程中会报错 the maximum number of SEMMNI is not correct, the current SEMMNI is xxx. Please check it. vi /etc/sysctl.conf # 增加如下语句在文件结尾后wq保存后 kernel.sem = 250 32000 100 999 # 保存后输入下方命令检查是否生效 sysctl -p 2.新建用户和用户组 openGauss不能使用root用户 新增组omm groupadd omm 新增用户omm useradd -g omm omm 设置omm用户密码 passwd omm 3.

【PGSQL】date_trunc 函数

date_trunc 函数用于在 PostgreSQL 中将日期或时间戳值截断(向下取整)到指定的精度级别。当您想要忽略较小的时间单位(例如,小时、分钟、秒),专注于较大的单位(例如,天、月、年)时,该函数非常有用。date_trunc 的语法如下: date_trunc(unit, source); unit:指定要将源值截断到的时间单位。可以是以下之一: 'microseconds'(微秒)'milliseconds'(毫秒)'second' 或 'seconds'(秒)'minute' 或 'minutes'(分钟)'hour' 或 'hours'(小时)'day' 或 'days'(天)'week' 或 'weeks'(周)'month' 或 'months'(月)'quarter' 或 'quarters'(季度)'year' 或 'years'(年) 通过指定 unit,您可以将 source 的值截断到所需的时间精度。以下是一些示例: -- 将时间戳截断到分钟 SELECT date_trunc('minute', current_timestamp); -- 2024-01-17 08:08:00 -- -- 将时间戳截断到小时 SELECT date_trunc('hour', current_timestamp); -- 2024-01-17 08:00:00 -- -- 将时间戳截断到天 SELECT date_trunc('day', current_timestamp); -- 2024-01-17 00:00:00 -- -- 将时间戳截断到月 SELECT date_trunc('month', TIMESTAMP '2024-02-16 14:32:45'); -- 2024-02-01 00:00:00 -- -- 将时间戳截断到年 SELECT date_trunc('year', TIMESTAMP '2024-02-16 14:32:45'); -- 2024-01-01 00:00:00 -- -- 一天开始 SELECT date_trunc('day', current_timestamp); -- -- 一天结束 SELECT date_trunc('day', current_timestamp) + INTERVAL '1 day' - interval '1 second'; 这些查询将返回截断到指定单位的日期或时间戳。

C语言经典算法之分块查找算法

目录 前言 A.建议 B.简介 一 代码实现 二 时空复杂度 A.时间复杂度: B.空间复杂度: 三 优缺点 A.优点: B.缺点: 四 现实中的应用 前言 A.建议 1.学习算法最重要的是理解算法的每一步,而不是记住算法。 2.建议读者学习算法的时候,自己手动一步一步地运行算法。 tips:文中的对数均以2为底数 B.简介 分块查找算法,也称为块搜素算法,是一种将数据集划分为块的查找方法。每个块内的数据是有序的,而块与块之间则可以是无序的。这个算法适用于对大量数据进行分块存储的场景,其中每个块的大小可以根据实际需求设定。 一 代码实现 #include <stdio.h> // 定义块的结构 struct Block { int size; // 块的大小 int *data; // 块内的数据 int max; // 块内数据的最大值(用于加速搜索) }; // 分块查找函数 int blockSearch(struct Block blocks[], int numBlocks, int target) { int blockIndex = 0; // 在每个块中进行线性查找,找到包含目标值的块 while (blockIndex < numBlocks && target > blocks[blockIndex].

【Qt-license】误操作qt下载导致只能安装商业版试用十天,无法安装社区版

背景: 原本是为了学习qml,需要下载一个design studio,而这个需要比较新版的安装程序,但新版的安装程序官方都是online安装。于是从官网找下载链接。毕竟是英文的,又心急,误打误撞中我选择了商业版试用。 其实online安装程序是一样的(qt-unified-windows-x64-4.6.1-online.exe),一旦选择了商业版试用,官方会在你的账户下生成为期10天的license。 然后在运行安装程序时,只要你输入了账密,安装程序直接加载账户license,根本就不显示GNU协议的选项。亦即:一旦选择了错误的下载链接,至少10天内,无法安装社区免费版。 解决: 这个online安装程序是支持运行参数的,跟linux命令一样,可以指定镜像,比如用国内的镜像会比默认官方的要速度快很多。但我没有发现哪里有人说哪个参数可以选择license。 所以实在没有办法,在官网账户管理中,选择send request,用Chinglish给qt group提了我的情况,并且请求大家谁有办法就给我发邮件。然后我随时关注邮件,结果什么都没收到。但是不出三天,官网提前终止了我的商用license试用权(就如上面账户截图那样)。然后再运行安装程序,可以正常选择GNU协议,并成功安装社区版。 结语: 所以这里主要是给自己,以及跟我情况类似的朋友提个醒,在官网下载时,一定一定要看好了,否则就跟我一样。然而我不保证每次我的方法都有效,那就只能等十天试用期过以后,再重新安装qt。

Python制作一个简单的计算器(加减乘除)

点击关注丨获取更多精彩内容 简易计算器 写在前面 小编用python实现了一个简单的计算器,一起来看看吧~ 需要环境: pycharm python 一、需求分析 1.1 功能分析 使用Python的Tkinter界面设计实现一个简单的计算器,主要功能按钮包括数字键、四则运算符、等于号和清除键,实现了简单的加减乘除运算。 1.2 性能分析 ① 系统具有易操作性 在日常使用中,这个计算器应该可以满足大多数用户的需求,即使在旧计算机上也能够流畅运行。 ② 系统具有高效性 这个计算器应用程序非常简单,没有太多的计算和数据处理。因此,它的性能应该是相对较好的,无论是在较老的电脑还是在较新的电脑上都能够快速响应和运行。 二、技术原理 这个计算器应用程序是基于Tkinter GUI工具集编写的一个Python应用程序,它使用不同类型的控件和布局管理器来创建图形用户界面并实现计算器的各种功能,通过用方法来处理用户在应用程序上的操作并显示相应的结果。 三、详细设计 3.1 导入tkinter库 ① 程序设计 import tkinter as tk ② 程序分析 在程序开头,通过"import tkinter as tk"导入tkinter库,以便使用tkinter库中的控件和方法。 3.2 定义全局变量 ① 程序设计 t = ""``color1 = "skyblue"``color2 = "yellow"``color3 = "pink"``color4 = "red"``result = tk.StringVar() ② 程序分析 全局变量t用于表示计算器输入框中的内容。全局变量result是一个StringVar对象,用于实时更新输入框中的内容,全局变量color1-4分别代表不同的颜色。 3.3 定义添加函数 ① 程序设计 def Add(num):` `global t` `t = t + str(num)` `result.

Win11安装及配置java环境jdk21及jre目录生成(2024年更新)

一、下载 https://download.oracle.com/java/21/latest/jdk-21_windows-x64_bin.exe 二、安装 1、双击运行,默认安装后的位置是C:\Program Files\Java\jdk-21 2、jdk21默认没有jre目录,以管理员身份运行cmd或powershell,运行完没报错就是成功了 cd 'C:\Program Files\Java\jdk-21' bin\jlink.exe --module-path jmods --add-modules java.desktop --output jre 三、环境变量 桌面 -> 右键“我的电脑” -> 点击“高级系统设置” -> 高级 -> 环境变量 1、添加JAVA_HOME 变量名:JAVA_HOME 变量值:C:\Program Files\Java\jdk-21 2、修改Path 添加两个目录: %JAVA_HOME%\bin %JAVA_HOME%\jre\bin 3、添加CLASSPATH,注意前面有个英文小数点 变量名:CLASSPATH 变量值:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\jre\lib\rt.jar;%JAVA_HOME%\lib\dt.jar 四、验证 打开cmd或powershell,键入如下指令 java --version 输出如下即大功告成 java 21.0.2 2024-01-16 LTS Java(TM) SE Runtime Environment (build 21.0.2+13-LTS-58) Java HotSpot(TM) 64-Bit Server VM (build 21.0.2+13-LTS-58, mixed mode)

python10种方式运行cmd命令并获得返回值的高级技巧

python10种方式运行cmd命令的高级技巧 import subprocess # 方法1:使用subprocess模块的run函数 def run_cmd_1(command): """ 运行CMD命令并返回输出结果 参数: command (str): 要执行的CMD命令 返回: output (str): 命令执行的输出结果 """ try: result = subprocess.run(command, shell=True, capture_output=True, text=True) if result.returncode == 0: output = result.stdout.strip() else: output = result.stderr.strip() except Exception as e: output = str(e) return output # 方法2:使用subprocess模块的check_output函数 def run_cmd_2(command): """ 运行CMD命令并返回输出结果 参数: command (str): 要执行的CMD命令 返回: output (str): 命令执行的输出结果 """ try: output = subprocess.check_output(command, shell=True, text=True) output = output.strip() except Exception as e: output = str(e) return output # 方法3:使用os模块的system函数 def run_cmd_3(command): "

深入了解Taipy:Python打造Web应用的全面教程

概要 Python是一门强大的编程语言,其丰富的生态系统中包含了各种用于Web开发的工具和框架。其中,Taipy(Tornado + asyncio + IPython)是一种强大的工具组合,可以帮助大家轻松构建高性能的Web应用程序。本文将详细介绍Taipy的各个组成部分以及如何使用它们来创建现代化的Web应用。 什么是Taipy? Taipy是一个集成了Tornado、asyncio和IPython的工具组合。它的目标是简化Web应用的开发过程,提供高性能和易用性。 1. Tornado Tornado 是一个异步Web框架,旨在处理高并发的网络应用程序。它使用非阻塞I/O和事件循环来实现高性能。Tornado提供了HTTP服务器和Web框架,适用于构建实时Web应用、API和长连接。 2. asyncio asyncio 是Python标准库中的异步编程框架,它使您能够编写基于事件的、非阻塞的代码。通过将asyncio与Tornado结合使用,您可以轻松处理异步操作,例如数据库访问、文件操作和网络请求。 3. IPython IPython 是一个强大的交互式Python解释器,提供了丰富的功能,如代码补全、历史记录、代码调试等。将IPython与Taipy结合使用,可以在开发Web应用时更轻松地进行调试和测试。 使用Taipy构建Web应用 要使用Taipy构建Web应用,首先需要安装Taipy和相关依赖。 可以使用pip来进行安装: pip install taipy 安装完成后,可以开始创建一个简单的Web应用。 以下是一个使用Taipy创建的示例Web应用: import taipy import tornado.web class MainHandler(tornado.web.RequestHandler): def get(self): self.write("Hello, Taipy!") def make_app(): return taipy.Application([ (r"/", MainHandler), ]) if __name__ == "__main__": app = make_app() app.listen(8888) taipy.ioloop.IOLoop.current().start() 在上述示例中,首先导入了Taipy和Tornado的相关模块,然后创建了一个处理HTTP请求的处理器类MainHandler。处理器类继承自tornado.web.RequestHandler,并重写了get方法,以响应GET请求。接下来,定义了一个make_app函数,用于创建Web应用程序实例。在该函数中,我们将URL路径"/"映射到MainHandler处理器类。 最后,在if __name__ == "__main__":中创建了Web应用实例并监听端口8888,然后启动了事件循环以处理请求。现在,可以在终端中运行这个应用程序,并访问http://localhost:8888,您将看到"Hello, Taipy!"的欢迎消息。 异步处理与协程 Taipy的一个关键特性是支持异步处理和协程。通过使用async/await关键字,可以轻松地编写异步视图和处理异步操作。 以下是一个简单的异步处理器示例: import taipy import tornado.web import asyncio class AsyncHandler(tornado.

【SpringCloud】这一次终于使用MQ解决了Eureka服务下线延迟感知问题

前言 其实,“通过Redis手动更新Ribbon缓存来解决Eureka微服务架构中服务下线感知的问题”是一种解,但不是最优解 1.痛点 上一篇文章的标题是: 通过Redis手动更新Ribbon缓存来解决Eureka微服务架构中服务下线感知的问题 当时在文章的末尾就指出,使用Redis+AOP的方式有很多漏洞,只有在服务调用方发送调用请求的情况下才会触发切面中更新Ribbon缓存的逻辑。如果每次在发布Eureka新服务的场景下,告警的接口都能准确定位到,那将这些接口方法通过切面去针对性的加上更新Ribbon缓存的前置操作完全是没问题的。但是如果告警接口数量众多,并且无法定位,上述方法就有些不够看了。 2.解决方案 于是,基于此种困境,我想到了用mq的事件驱动模式来推进Ribbon缓存更新(“下线”这一事件驱动,而不是“发送跨服务调用请求”这一事件),具体如下: 即,当服务被调用方中调用了下线接口下线了指定服务,会生产消息到MQ里,服务被调用方会监听这个队列去消费消息,并通过消费消息这一事件(消费下线服务端口信息)去驱动更新Ribbon缓存。 说明: 在以前我觉得用MQ不能做下线,压测了很多次也没成功,这本质还是没搞懂Eureka-Server,Eureka-Client,Ribbon三者的关系和之间的动作,其实这个体系里有两个非常关键的点(在配置文件中设置),可以直接影响无感知下线的结果,需要动态调整:那就是要关闭Eureka-server的三级缓存useReadOnlyResponseCache: false,并且缩短Eureka-Client端向Eureka-server端拉取服务列表的时间registry-fetch-interval-seconds: 3。可能这里大家看到去改配置有点鸡肋并且在实际场景中也不太现实,但别急,暂时先往下看,后面我会专门写一篇文章来解决这一问题 3.具体实现 3.1配置RabbitMQ 1.配置RabbitMQ(安装这些大家可以去看看平台比较成熟的文章)这里就不写了,我是直接在服务器上用docker容器化运行的: 在调用方与被调用方都配好MQ 3.2生产下线消息 首先声明一个队列: @Configuration @EnableRabbit public class RabbitMqConfig { @Bean public Queue theQueue() { return new Queue("SERVER_LIST"); } } 服务下线接口处,生产下线消息到MQ,向这接口/service-down-list发送GET请求,传递指定的下线服务实例信息即可下线服务,即http://localhost:8081/control/service-down-list?portParams=8083就下线了8083服务实例 @Value("${eureka-server.ipAddress}") private String ipAddress; @Value("${eureka-server.appName}") private String appName; @Value("${DIY_QUEUE.VALUE}") private String queueName; @GetMapping(value = "/service-down-list") public String offLine(@RequestParam List<Integer> portParams) { List<Integer> successList = new ArrayList<>(); //得到服务信息 List<InstanceInfo> instances = eurekaClient.getInstancesByVipAddress(appName, false); List<Integer> servicePorts = instances.

Python连接打印机:实现自动化打印的利器

引言: 在现代办公环境中,打印机已经成为不可或缺的设备之一。然而,手动操作打印机往往耗时耗力,而且容易出现错误。为了提高工作效率和准确性,我们可以通过编写Python程序来连接打印机,实现自动化打印。本文将介绍如何使用Python连接打印机,并提供一些实用的技巧和示例代码。 一、选择合适的打印机驱动 在开始使用Python连接打印机之前,首先需要选择适合的打印机驱动。Python提供了多个库和模块来支持不同型号和品牌的打印机。以下是一些常用的打印机驱动: cups:CUPS(Common Unix Printing System)是一个开源的打印系统,支持多种操作系统和打印机品牌。它提供了丰富的功能和灵活的配置选项,适用于各种场景。 pycups:pycups是CUPS的Python接口,提供了简单易用的API,可以方便地连接和管理打印机。它支持CUPS的所有功能,并提供了额外的扩展和定制选项。 esxi-libvirt:对于虚拟化环境(如VMware ESXi),可以使用esxi-libvirt库来连接和管理打印机。它提供了与虚拟机交互的API,可以实现远程打印和虚拟打印机的管理。 二、安装和配置打印机驱动 根据选择的打印机驱动,需要进行相应的安装和配置。以下是一般的安装和配置步骤: 安装驱动程序:根据打印机型号和操作系统的要求,下载并安装相应的驱动程序。可以从官方网站或第三方软件源获取驱动程序。 配置打印服务:安装驱动程序后,需要配置打印服务。对于CUPS,可以使用Web界面或命令行工具进行配置。对于其他驱动,可以参考官方文档或社区资源进行配置。 测试打印:完成配置后,可以进行测试打印,确保打印机正常工作并与Python程序连接成功。 三、使用Python连接打印机 一旦安装了合适的打印机驱动并完成了配置,就可以使用Python连接打印机了。以下是一些常用的方法和示例代码: 连接打印机:使用选择的打印机驱动提供的API或库,连接到目标打印机。例如,使用pycups库连接打印机的示例代码如下: import cups conn = cups.Connection() printers = conn.getPrinters() for printer in printers: print(printer) 发送打印任务:通过连接的打印机对象,可以发送打印任务到指定的打印机。例如,使用pycups库发送打印任务的示例代码如下: import cups import os conn = cups.Connection() printers = conn.getPrinters() for printer in printers: if printer['name'] == 'MyPrinter': # 打开文件并读取内容 with open('example.pdf', 'rb') as file: data = file.read() # 创建打印任务并设置参数 print_job = conn.printFile(printer['name'], data, 'example.pdf', 'PDF', {'Job-Sheets': None}) # 提交打印任务并等待完成 conn.

一起玩儿物联网人工智能小车(ESP32)——38. 激光测距模块VL53L0X的使用

摘要:本文介绍ESP32如何使用激光测距模块VL53L0X进行距离测量 在前面的自动避障小车中,主要使用超声波传感器来进行障碍物距离的测量,接下来将介绍另一种经常用到的测距传感器——激光测距传感器。其测量原理是传感器发出激光,然后再通过接收到的返回的激光来测量距离的方法。激光测距的方法有两种,一种是脉冲法,一种是相位法。脉冲法的原理与超声波传感器类似,是利用激光发射出去到返回之间的时间来计算激光器到物体之间的距离。而相位法则利用发出去的激光返回后的相位与仪器内直接返回激光的相位差来计算激光器到物体之间的距离。 这次使用的为新一代飞行时间(ToF)激光测距模块,这款飞行测距模块是基于基于VL53L0X设计的。样子如下图所示: VL53L0X是ST推出的第二代FlightSense技术的飞行时间传感器,与传统的测距传感器不同,VL53L0X采用ST的ToF技术,是目前最小的激光测距芯片,无论目标颜色和反射率如何,都可以进行距离测量,抗干扰能力更强。芯片如下图所示: VL53L0X是完全集成的传感器,配有嵌入式红外、人眼安全激光,先进的滤波器和超高速光子探测阵列。VL53L0X增强了ST FlightSense™系列,测量距离更长,速度和精度更高,从而开启了新应用之门。即使在恶劣工作条件下,该传感器也可以直接确定与目标物体之间的距离,最远2米,并且不受目标反射率影响。 VL53L0X芯片的主要特征: 完全集成的微型模块 n 940nm激光VCSEL n VCSEL驱动器 n 测距传感器,配有高级的嵌入式微控制器 n 4.4mmx2.4mmx1.0mm n 快速、准确的距离测量 n 测量绝对距离达2m n 报告的距离不受目标反射率影响 n 在高红外光环境下运行 n 先进的嵌入式光学串扰补偿,以简化玻璃罩的设计 人眼安全 n 1类激光设备,符合最新标准IEC 60825-1:2014(第3版) 易于集成 n 可回流焊元件 n 无需额外光学器件 n 单电源 n I2C接口,用于器件控制和数据传输 n Xshutdown(复位)和中断GPIO VL53L0X的参数: 工作电压:3.3V/5V 产品尺寸:4.4mm × 2.4mm × 1.0mm 测距范围:30 ~ 2000mm 测距精度:±5% (高速模式),±3% (高精度模式) 测距时间(min):20ms (高速模式),200ms(高精度模式) 测距角度:25° 激光波长:940nm 工作温度:-20 ~ 70°C VL53L0X传感器提供了3种测量模式:单次测量模式、连续测量模式和定时测量模式。 (1)单次测量模式:在这种测量模式下,一次触发只执行一次距离测量,测量结束后,VL53L0X传感器会返回待机状态,等待下一次触发。 (2)连续测量模式:在该模式下会以连续的方式执行距离测量。一次测量结束,下一次测量就会立即启动,用户必须停止测距才能返回到待机状态,最后的一次测量在停止前完成。 (3)定时测量模式:这种模式实际上就是指定时间间隔的连续测量模式。当一次测量结束后,经过用户定义的延迟时间之后,才会启动下一次测量。用户必须停止测距才能返回到待机状态,最后的一次测量在停机前完成。 VL53L0X传感器还提供了4种不同的精度模式: 精度模式 测量时间预算范围(ms) 测距距离(m)

详解--Hash(中文也称散列、哈希)

参考链接 参考链接2 1. hash 概念 1.1 什么是 hash Hash 也称散列、哈希,对应的英文都是 Hash。 基本原理就是把任意长度的输入,通过 Hash 算法变成固定长度的输出。这个映射的规则就是对应的 Hash 算法,而原始数据映射后的二进制串就是哈希值。hash 算法理论上会出现 不同数据通过 hash 算法计算出相同的 hash 值,叫做碰撞。活动开发中经常使用的 MD5 和 SHA 都是历史悠久的 Hash 算法。好的 hash 算法至少应 计算 hash 值迅速且 hash 值冲突概率要小。 两个知识 抗碰撞能力 对于任意两个不同的数据块,其hash值相同的可能性极小;对于一个给定的数据块,找到和它hash值相同的数据块极为困难。 抗篡改能力 对于一个数据块,哪怕只改动其一个比特位,其hash值的改动也会非常大。 2. Hash碰撞的解决方案 即如果遇到了 hash 冲突 需要解决的时候应该怎么处理,比较常用的算法是链地址法和开放地址法。 2.1 链地址法 链表地址法是使用一个链表数组,来存储相应数据,当hash遇到冲突的时候依次添加到链表的后面进行处理。 链地址在处理的流程如下: 添加一个元素的时候,首先计算元素 key 的 hash 值,确定插入数组中的位置。 如果当前位置下没有重复数据,则直接添加到当前位置。 当遇到冲突的时候,添加到同一个hash值的元素后面,行成一个链表。 这个链表的特点是同一个链表上的 Hash 值相同。 java的数据结构HashMap使用的就是这种方法来处理冲突,JDK1.8中,针对链表上的数据超过8条的时候,使用了红黑树进行优化。 2.2 开放地址法 开放地址法是指大小为 M 的数组保存 N 个键值对,其中 M > N。

前端js 数据结构:对象 object、数组Array 、Map 的创建、增删改 / 遍历数据

目录 前端js 数据结构:对象、数组、Map 的使用1 对象(object)1.1 创建对象1.1.1 对象字面量(最常用): {}1.1.2 使用 new 关键字和对象构造函数1.1.3 Object.create() 1.2 修改对象1.2.1 直接赋值:对象的属性名直接赋值1.2.2 点号/方括号访问属性1.2.3 将属性复制到目标对象:Object.assign()1.2.4 解构赋值:{...obj, 属性: value} 1.3 删除对象属性:delete obj.属性1.4 获取对象的数据1.4.1 获取对象属性数量:Object.keys(obj).length1.4.2 遍历获取对象的数据 2 数组(Array)2.1 创建数组2.1.1 字面量方式(常用):[ ]2.1.2 Array 构造函数 2.2 修改数组2.2.1 修改数组(添加/修改):push()、unshift()、splice()、直接赋值、使用扩展运算符 2.3 删除数据2.3.1 删除数据: splice()、pop()、shift()、filter()、slice() 2.4 获取数组数据2.4.1 获取数组的元素数量: arr.length2.4.2 遍历获取数组数据 3 Map3.1 创建Map:Map构造函数、数组创建Map3.2 添加、修改、删除、获取键值对3.3 获取数据3.3.1 获取 Map 的 长度:map.size3.3.2 遍历 Map 的 数据 前端js 数据结构:对象、数组、Map 的使用 1 对象(object) 对象:由一组键值对组成的无序集合,可以通过键来获取对应的值。 每个键值对中的键是唯一的,值可以是任意类型的数据。 对象通常用来表示实体的属性和方法。 1.1 创建对象 1.1.1 对象字面量(最常用): {} 对象字面量:通过在大括号 {} 中定义对象的属性和方法来创建对象。

论文aigc检测率为多少合格

在学术世界中,原创性和创新性是衡量一篇论文价值的关键因素。当我们谈论论文的AIGC检测率时,我们实际上是在探讨这篇论文的原创程度。AIGC检测率,简而言之,就是使用AIGC技术来检测论文内容与已有内容的相似度或重复度。这个数值越低,说明论文的原创性越高,反之则可能存在抄袭或过度借鉴的问题。 aigc过高怎么办?利用更高级的的asi就可以了。 多少合格的AIGC检测率呢?这其实没有一个固定的标准,因为它会因不同的学术出版机构、学科领域、学校或课程要求而有所不同。 一般来说,如果AIGC检测率低于10%,这篇论文可能会被视为具有较高的原创性,如在某些情况下可能获得校级优秀论文的评定。而如果AIGC检测率在30%以下,论文作者通常可以申请答辩。但如果AIGC检测率在30%-50%之间,那么论文作者需要针对检测报告进行修改,并在修改后重新进行查重检测。如果修改后的AIGC检测率低于30%,则可以申请答辩;否则,可能会被取消答辩资格。 当我们在谈论论文的AIGC检测率时,论文如何降重小技巧我们主要是在讨论该论文在特定AIGC系统中的重复内容比例。AIGC检测率的合格标准在不同场合下会有所不同,但一般来说,以下几个标准可能具有一定的参考价值: 学术出版要求:许多学术出版机构对于提交的论文有着严格的AIGC检测率要求。一般来说,他们会要求论文的AIGC检测率不得超过一定的阈值,如10%、5%或更低。这是因为学术出版物要求原创性和创新性,而高度重复的内容可能会损害这些价值。学科差异:不同的学科领域,对于AIGC检测率的接受程度也有所不同。例如,在人文科学领域,由于引述和引用较多,AIGC检测率可能相对较高;而在自然科学领域,对原创性和创新性的要求更为严格,AIGC检测率的要求也相应较低。学校或课程要求:许多学校或课程也有自己的AIGC检测率标准。学生需要根据这些标准来调整自己的论文内容,确保其符合要求。AIGC工具的差异:不同的AIGC检测工具可能有着不同的阈值判断。尽管大多数工具都遵循类似的检测原理,但具体的阈值设定可能会有所不同。内容质量:除了AIGC检测率之外,内容的质量也是评价一篇论文的重要标准。即使一篇论文的AIGC检测率很低,但如果其内容缺乏深度、逻辑或研究价值,那么这篇论文可能仍然不被接受。引用和借鉴:在学术写作中,合理地引用他人的研究成果是允许的。然而,如果一篇论文中的引用和借鉴内容过多,超过了适当的范围,那么这也可能导致AIGC检测率过高。诚信原则:最后,但并非最不重要的一点是,遵守学术诚信原则。即使你的论文在技术上满足了所有的AIGC检测率标准,但如果你的行为违反了学术诚信原则(例如故意抄袭或篡改数据),那么你的论文仍然可能被视为不合格。 综上所述,合格的论文AIGC检测率不仅需要满足特定的阈值要求,还需要考虑多个方面的因素。因此,作者在撰写论文时需要全面考虑这些因素,确保自己的论文既符合技术标准,又具有学术价值。

Spark--一文了解WebUI

文章目录 前言一、认识Spark UI二、Jobs2.1 了解jobs2.2 关于job我们需要知道的小知识2.2.1 多个job可以并行执行吗2.2.2 job是如何划分的2.2.3 job detai中为什么有些stage可以被跳过(skipped)2.2.4 上游stage的Shuffle Write等于下游stage的 Shuffle Read2.2.5 job提交间隔较大 三、Stages3.1 了解stage3.2 关于stage我们需要知道的小知识3.2.1 有的stage名叫`Listing leaf files and directories for xxx paths`3.2.2 有的stage会显示xxtask failed,代表什么意思呢,为什么task失败stage不会失败呢3.2.3 为什么一般spill disk要小于spill memory3.2.4 为什么要序列化3.2.5 为什么tasks中有些 index 相同3.2.6 为什么Spill (memory)/(disk)大量溢出,怎么优化 四、Storage4.1 了解Storage4.2 关于stage我们需要知道的小知识4.2.1 StorageLevel都有哪些4.2.2 ache table有什么用,和broadcast有什么关系或者区别吗 五、Environment5.1 了解environment5.2 常用参数5.2.1 executor申请&并行度5.2.2 内存分配5.2.3 文件输入输出与合并5.2.4 mapjoin5.2.5 shuffle阶段5.2.6 推测执行5.2.7 谓词下推 六、Executors6.1 了解 executors6.2 关于 executors 我们需要知道的小知识6.2.1 executor和driver到底是什么东西?6.2.2 2.storage memory中的总内存数代表什么意思 七、SQL7.1 了解 sql7.2 关于 sql 我们需要知道的小知识7.2.1 可以判断join的方式,是SortMergeJoin还是broadcast join7.2.2 判断各类操作下,有没有数据和时间倾斜7.

[ PyQt入门教程 ] Qt Designer工具的使用

Qt Designer是PyQt程序UI界面的实现工具,使用Qt Designer可以拖拽、点击完成GUI界面设计,并且设计完成的.ui程序可以转换成.py文件供python程序调用。本文主要通过用户登录需求描述Qt Designer工具开发界面的使用方法。 主要内容 1、Qt Designer程序主界面窗口介绍。 2、Qt Designer程序实现界面开发的案例。包括使用Qt Designer实现程序Gui开发、使用pyuic5将.ui转换.py程序、信号与槽的配置以及实现、使用pyinstaller转换成可执行程序的完成过程。 环境&工具版本 Win11+Pyhton3.12 + PyQt 5.11.2 一、Qt Designer工具主界面 打开路径:${python安装目录}/Lib/site-packages/pyqt5_tools/designer.exe。主界面如下: 主界面不同区域介绍: 工具箱 区域:提供GUI界面开发使用的各种基本控件,如单选框、文本框等。可以拖动到新创建的主程序界面。 主界面区域:用户放置各种从工具箱拖过来的各种控件。模板选项中最常用的就是Widget(通用窗口)和MainWindow(主窗口)。二者区别主要是Widget窗口不包含菜单栏、工具栏等。可以分别创建对比看看。 对象查看器 区域:查看主窗口放置的对象列表。 属性编辑器 区域: 提供对窗口、控件、布局的属性编辑功能。比如修改控件的显示文本、对象名、大小等。 信号/槽编辑器 区域:编辑控件的信号和槽函数,也可以添加自定义的信号和槽函数。 二、Qt Designer基本控件介绍 Widget Box控件工具箱是按照控件作用类别进行划分的。这里作为实现入门级界面实现,主要介绍最常使用的控件及控件对象相关函数。函数方法知道怎么获取控件输入内容以及如何将后台操作结果输出到界面控件显示的主要函数就可以了。 (1)显示控件。 Lable:文本标签,显示文本,可以用来标记控件。 Text Browser:显示文本控件。用于后台命令执行结果显示。 (2)输入控件,提供与用户输入交互 Line Edit:单行文本框,输入单行字符串。控件对象常用函数为Text() 返回文本框内容,用于获取输入。setText() 用于设置文本框显示。 Text Edit:多行文本框,输入多行字符串。控件 对象常用函数同Line Edit控件。 Combo Box:下拉框列表。用于输入指定枚举值。 (3)控件按钮,供用户选择与执行 Push Button:命令按钮。常见的确认、取消、关闭等按钮就是这个控件。clicked信号一定要记住。clicked信号就是指鼠标左键按下然后释放时会发送信号,从而触发相应操作。 Radio Button:单选框按钮。 Check Box:多选框按钮。 三、Qt Designer工具实现 了解基本控件及作用和获取输入/显示方法后,就可以开始动手实现小需求了。。比如登录界面。获取用户名和密码并显示。。 打开Qt Designer,开始拖拽控件实现吧。。 Step1:打开主界面,选择Widget模板 Step2:从Widget Box工具箱中拖拽2个label、2个line Edit、2个Push Button以及1个Text Browser。拖完后如下: Step3:双击各个控件,修改控件名称(对应属性编辑区中的text,可直接双击控件修改)以及对象名称(对应属性编辑区中的objectName)。对象名称一定记得修改。默认生成的label_1、label_2这种名称无法直接判断到底是对应哪个控件。。 点击菜单栏Form - Prview。预览界面实现效果