java版本使用springboot vue websocket webrtc实现视频通话

使用java版本 websocket webrtc实现视频通话 原理简单解释使用技术搭建websocket环境依赖最终演示效果 原理简单解释 ​ 浏览器提供获取屏幕、音频等媒体数据的接口, ​ 双方的媒体流数据通过Turn服务器传输 websocket传递信令服务 使用技术 java jdk17springboot 3.2.2websocket前端使用 vue 搭建websocket环境依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> websocket的配置类 package com.example.webrtc.config; import com.example.webrtc.Interceptor.AuthHandshakeInterceptor; import com.example.webrtc.Interceptor.MyChannelInterceptor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.messaging.converter.MessageConverter; import org.springframework.messaging.handler.invocation.HandlerMethodArgumentResolver; import org.springframework.messaging.handler.invocation.HandlerMethodReturnValueHandler; import org.springframework.messaging.simp.config.ChannelRegistration; import org.springframework.messaging.simp.config.MessageBrokerRegistry; import org.springframework.web.socket.config.annotation.*; import org.springframework.web.socket.server.standard.ServerEndpointExporter; import java.util.List; @Configuration @EnableWebSocketMessageBroker public class WebSocketConfig extends WebSocketMessageBrokerConfigurationSupport implements WebSocketMessageBrokerConfigurer { private static final Logger log = LoggerFactory.

java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport does not have member fiel

如何解决问题java: java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field ‘com.sun.tools.javac.tree.JCTree qualid’ 看网上说是因为lombok不兼容问题,修改lombok版本后可以正常编译 实际操作下来,发现java版本不对应也会出现这种问题,遇到这种问题 的可以看看自己的java版本对不对 如下图

前端秘法基础式终章----欢迎来到JS的世界

目录 一.JavaScript的背景 二.JavaScript的书写形式 1.行内式 2.嵌入式 3.外部式 三.JS中的变量 1.变量的定义 2.JS动态类型变量 2.1强类型和弱类型 3.JS中的变量类型 四.运算符 五.if语句和三元表达式和Switch语句和循环语句 六.数组 1.创建获取数组元素 2.新增数组元素 七.函数 1.函数的声明和调用 2.作用域及作用域链 八.对象 1.对象的创建 1.1字面变量创建 1.2使用new Object创建 1.3构造函数创建对象 1.4class构造对象 1.5static修饰 1.6对象的继承 一.JavaScript的背景 JavaScript 是一种高级编程语言,通常用于网页开发和网页交互。它可以让网页变得更加动态和交互性强,例如实现动画效果、表单验证、数据交互等。 JavaScript 可以直接嵌入到 HTML 页面中,通过浏览器执行,从而实现网页的各种功能。它也可以用于开发桌面应用程序、移动应用程序等。 JavaScript 有以下几个特点: - 解释性语言:JavaScript 代码不需要编译,直接由浏览器解释执行。 - 面向对象:它支持面向对象编程的特性,如类、对象、继承等。 - 事件驱动:通过监听和响应网页上的各种事件(如点击、鼠标移动等)来触发相应的 JavaScript 代码执行。 - 跨平台:由于 JavaScript 主要在浏览器中运行,所以它可以在各种操作系统和设备上运行。 二.JavaScript的书写形式 1.行内式 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <input type="button" value=" js "

mysql从库处理报错You must reset your password using ALTER USER statement before executing this statement

在 linux 中安装好 MySQL 并完成初始化配置后,使用默认生成的 root 用户密码登录 MySQL 时,可能会出现无法执行任何语句的情况,提示「You must reset your password using ALTER USER statement before executing this statement」。 这是因为 MySQL 5.7 版本后,用户表的密码字段由 password 改为了 authentication_string,同时增加了一个 password_expired 字段来标识密码是否过期。 对于 root 用户密码过期的情况,我们可以通过以下步骤来修改root用户的密码: 1. 停止所有的 MySQL 进程。使用命令 `service mysql stop` 或 `killall mysql` 2. 使用无验证模式启动 MySQL。执行命令 `mysqld_safe --skip-grant-tables` 3. 使用 MySQL 客户端登录无需密码。此时可以执行任何语句。 4. 检查用户表,使用 `select * from mysql.user;`来查看用户详情。 5. 修改 root 用户的密码到期标识和密码。 6. 使用语句: `update mysql.user set authentication_string=password('yourpassword'), password_expired='N' where user='root';` 执行 `flush privileges;`刷新 privileges 表。 查看结果 select authentication_string,password_expired from user where user='root'; 8.

从入门到精通:AI绘画与修图实战指南

💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】 在这篇文章中,我们将深入探讨如何利用Photoshop和Firefly等工具进行AI绘画与修图。我们将从基础知识开始,逐步引导读者掌握这些工具的使用技巧。 AI绘画与修图的基础知识 我们将首先介绍AI绘画与修图的基础知识,包括了解Photoshop和Firefly的界面布局、工具功能以及基本操作。读者将通过实际操作来熟悉这些工具的基本功能,并理解它们在AI绘画与修图中的应用。 Photoshop基础知识 界面布局 Photoshop的界面主要包括以下几个部分: 菜单栏:包含各种功能和操作命令,如文件、编辑、图像、图层等。工具栏:包含大量用于绘画和修图的工具,如画笔工具、橡皮擦、选择工具、修复工具等。调色板:用于选择前景色和背景色,同时还包含其他颜色相关的功能。图层面板:显示当前文档的所有图层,并允许对它们进行操作,如新建、合并、调整不透明度等。 工具功能 画笔工具:用于在画布上绘制图案或涂抹颜色。橡皮擦:用于擦除图层上的内容,可以通过设置不同的模式和硬度来实现不同的擦除效果。选区工具:包括矩形选框、椭圆选框、奇形选框等,用于选择图像中的特定区域。修复工具:如修补、内容识别填充,用于修复图片中的缺陷,去除不需要的元素等。 基本操作 打开/保存文件:通过菜单栏或快捷键打开需要处理的图片,进行编辑后可保存为不同格式。新建图层:创建新的图层以便对不同部分进行独立编辑。调整图像大小和分辨率:通过图像菜单下的图像大小和图像调整功能,可以对图片尺寸和分辨率进行调整。快捷键和技巧:介绍一些常用的快捷键和操作技巧,比如Ctrl+S保存、Ctrl+Z撤销等,提高操作效率。 Firefly基础知识 界面布局 Firefly的用户界面通常包括以下几个主要部分: 工具栏:包含了AI绘画与修图的特色工具,如智能画笔、自动颜色修正等。属性面板:显示当前所选工具或特效的属性和参数,允许用户进行调整。图像预览窗口:用于展示载入的图像,并可在此处进行绘画和修图操作。 工具功能 智能画笔:利用AI技术进行智能的绘画和填充,能够根据用户的输入自动调整线条和色彩。自动颜色修正:基于AI算法自动调整图像的色彩和对比度,使图像看起来更加生动饱满。 基本操作 载入图像:通过导入功能将需要处理的图像载入到Firefly中。应用智能滤镜:使用智能画笔或其他AI特色工具对图像进行绘画或修图操作。调整绘画风格:通过调整属性面板中的参数,改变绘画的风格、颜色等效果。 通过这些基础知识的介绍,读者将建立起对Photoshop和Firefly工具的初步认识,为后续的高级技巧和实战案例做好准备。 创意修图:AI技术的艺术应用 风格迁移 通过AI技术进行风格迁移,可以将一幅图像的艺术风格转移到另一幅图像上,创造出全新的艺术效果。在操作步骤指导中,我们将介绍如何使用专门的风格迁移工具或者编程库,如TensorFlow和PyTorch,来实现这一效果。读者将学习如何选择合适的模型和参数,并利用训练好的神经网络对图像进行风格迁移处理。 图像增强 AI图像增强技术能够借助深度学习算法,改善图像的清晰度、色彩和细节,使其更加生动和具有艺术感。我们将通过案例演示展示不同类型的图像增强效果,例如去噪、增强对比度、提升清晰度等。读者将了解如何使用开源的图像增强工具或者在线平台,如Adobe Lightroom和DxO PhotoLab,来实现图像增强的目的。 智能滤镜 智能滤镜功能利用AI技术根据图像内容自动调整滤镜效果,赋予图像更具艺术感的外观。在实际应用指导中,我们将介绍如何使用包括Luminar AI、Photoshop等软件的智能滤镜功能,以及如何利用深度学习模型生成针对特定图像的个性化滤镜效果。 ⭐️ 好书推荐 《AI绘画与修图实战:Photoshop+Firefly从入门到精通》 【内容简介】 本书内容共13章5个部分,第一部分主要讲解新版Photoshop绘画基础及常用操作,如何创建选区精准选择需要的图像部分,AI绘画智能填充与合成图像的操作;第二部分主要介绍风景照片、人物照片、产品照片和动物照片的快捷修饰方法,AI人工智能调整图像色彩,AI人像创意效果设计,运用Camera Raw的AI功能等内容;第三部分主要介绍使用Firefly关键词生成图像,生成填充功能应用,调出吸人眼球的文本特效等内容;第四部分介绍利用多种样式制作画面的 📚 京东购买链接:《AI绘画与修图实战:Photoshop+Firefly从入门到精通》 《AI时代Python量化交易实战:ChatGPT让量化交易插上翅膀》 【内容简介】 本书是一本旨在帮助架构师在人工智能时代展翅高飞的实用指南。全书以ChatGPT为核心工具,揭示了人工智能技术对架构师的角色和职责进行颠覆和重塑的关键点。本书通过共计 13 章的系统内容,深入探讨AI技术在架构 设计中的应用,以及AI对传统架构师工作方式的影响。通过学习,读者将了解如何利用ChatGPT这一强大的智能辅助工具,提升架构师的工作效率和创造力。 本书的读者主要是架构师及相关从业人员。无论你是初入职场的新手架构师还是经验丰富的专业人士,本书都将成为你的指南,帮助你在人工智能时代展现卓越的架构设计能力。通过本书的指导,你将学习如何运用ChatGPT等工具和技术,以创新的方式构建高效、可靠、可扩展的软件架构。 📚 京东购买链接:《AI时代Python量化交易实战:ChatGPT让量化交易插上翅膀》

修复 Android 手机陷入恢复模式的 5 种方法

您的手机卡在 Android Recovery 模式且无法退出此模式?无论您按什么按钮组合,甚至在取出并重新插入电池后重新启动手机,手机都会启动回到恢复模式吗? Android卡在recovery模式的情况并不罕见,各种品牌的Android手机都可能发生这种情况,比如三星、Oppo、华为、LG等。不过不用担心,你的手机不会变砖,因为这个问题。在本文中,我们将列出几种修复陷入恢复模式的 Android 手机并使其恢复正常工作的方法。 为什么我的 Android 手机卡在恢复模式? 按钮故障:一种常见原因是用于启动进入 Android 恢复模式的一个或多个按钮卡住、发生故障或完全停止工作。如果您的手机已经使用了几年或者以前曾遇到过按钮故障,那么这可能就是问题所在。 固件损坏:如果您刷写了不适合您手机的ROM,或者以错误的方式刷写了正确的ROM,您的手机可能无法在开机时启动Android系统,从而启动到恢复模式。 如何正常退出Android Recovery模式? 正常情况下,无论您的手机如何进入恢复模式,您都可以轻松退出该模式并启动手机进入正常模式。以下是详细步骤。 在 Android 恢复屏幕上,按音量增大/减小按钮突出显示立即重新启动系统,然后按电源按钮选择该选项,以便您的手机将立即退出恢复模式并启动到正常模式。 或者,您可以使用音量增大/减小按钮和电源按钮选择关闭选项以完全关闭手机电源。然后按住电源按钮以正常模式打开手机。 如何修复 Android 卡在恢复模式? 如果您的Android手机由于某种原因陷入恢复模式并且无法以正常方式退出该模式,您可以使用以下方法修复它。 方法一:检查按钮 步骤 1:如果可能,请关闭手机,以避免意外在 Android 恢复屏幕上选择不需要的选项并导致数据丢失。 步骤2:取下手机的保护壳(如有),使物理按键完全露出。 步骤 3:按下并释放每个按钮几次,尤其是音量按钮。如果按钮被卡住或按下,这可能会使按钮回到正确的位置并再次开始正常工作。 步骤4:之后,重新打开手机,看看是否摆脱recovery模式并正常启动。 方法 2:尝试硬重启 当设备遇到卡顿、死机等情况时,硬重启是一个值得尝试的方法,而且在很多情况下都有效。 要硬重启 Android 手机,请按住电源按钮 10 到 20 秒,直到看到制造商徽标出现。 如果这不起作用,请尝试同时按住电源和音量调高按钮 10 到 20 秒,直到手机重新启动。 方法 3:恢复出厂设置 如果您的手机仍处于恢复模式并且无法正常启动,恢复出厂设置可能会有所帮助。恢复出厂设置将删除所有用户文件和已安装的应用程序,包括那些可能导致卡住问题的文件和应用程序。 步骤 1:当手机处于 Android 恢复屏幕时,使用音量增大/减小按钮突出显示擦除数据/恢复出厂设置,然后使用电源按钮选择此选项。 方式4:使用奇客安卓系统修复 如果上述方法都不适合您,请不要沮丧。这里有一个强大且可靠的Android系统修复工具——奇客安卓系统修复,它可以安全、轻松地修复三星Android手机上的各种问题,包括卡在恢复模式下。 您只需在计算机上下载并安装此软件工具,使用 USB 数据线将手机连接到计算机,然后按照以下简单步骤即可使手机退出恢复模式。 安卓手机修复工具—Android系统修复工具Android系统修复工具,快速修复解决所有Android系统问题。如:安卓陷入恢复模式;安卓卡在快速启动模式;无法开机、黑屏死机等各种问题https://www.geekersoft.cn/android-system-repair.html步骤1:启动奇客安卓系统修复。 在计算机上打开奇客安卓系统修复,然后单击软件界面上的“开始”按钮。 步骤 2:下载系统包。 接下来,您需要下载适合您手机的系统固件包。为此,您需要 在界面相应的文本字段中输入您的设备型号,最后点击下载,软件会自动开始下载适合您手机的系统包。 只需等待下载完成即可。这将需要几分钟的时间,具体取决于您计算机的网络速度。 步骤 3:将 Android 手机置于下载模式。 当系统包准备好后,您需要按照屏幕上的步骤手动将手机置于下载模式。

前端实现:不同角色登入展示不同页面效果

功能介绍:首先是不同身份的用户展示的界面不同,其次实现在注册时选择对应的身份 不同身份的用户系统展示界面不同 1. 数据库user 表中添加role属性 No.1 点击“表”——右击“user”——点击“设计表”——添加“role”属性——user表中进行角色设置 添加属性: No.2 “user”表中进行“role”多种角色设置(比如,用户,管理员) 2. 在后台的 User 类里面加一个新的字段叫 role,然后重启后台 3. 在菜单的标签上加一个 v-if 判断就可以了(eg:想让管理员看到这个菜单) <!-- <el-submenu>二级菜单--> <el-submenu index="info" v-if="user.role==='管理员'"> <template slot="title"> <i class="el-icon-house"></i> <span> 信息管理</span> </template> <el-menu-item index="/user">用户信息</el-menu-item> </el-submenu> 完善:路由守卫解决用户页面权限问题 (添置index.js页面) router.beforeEach((to, from, next) => { // to 是到达的路由信息 // from 是开源的路由信息 // next 是帮助我们跳转路由的函数 let adminPaths = ['/user'] let user = JSON.parse(localStorage.getItem('honey-user') || '{}') if (user.role !== '管理员' && adminPaths.includes(to.path)) { // 如果当前登录的用户不是管理员,然后当前的到达的路径是管理员才有权限访问的路径,那这个时候我就让用户去到一个没有权限的页面,不让他访问实际的页面 next('/403') } else { next() } }) 在注册时选择不同身份登录 1.

中科院一区论文复现,改进蜣螂算法,Fuch映射+反向学习+自适应步长+随机差分变异,MATLAB代码...

本期文章复现一篇发表于2024年来自中科院一区TOP顶刊《Energy》的改进蜣螂算法。 论文引用如下: Li Y, Sun K, Yao Q, et al. A dual-optimization wind speed forecasting model based on deep learning and improved dung beetle optimization algorithm[J]. Energy, 2024, 286: 129604. 改进的蜣螂优化算法原理如下: 改进策略 改进点1: 融合Fuch混沌与逆向学习策略在种群初始化的应用 种群初始化在DBO中随机生成,会导致种群初始化分布不均匀,导致初始化种群的多样性。融合混沌和逆向学习策略进行群体初始化,将混沌初始化方法和逆向学习初始化策略相结合,以提高DBO的收敛速度。 Fuch混沌映射公式如下: 在使用Fuch混沌映射生成初始解的同时,引入反向学习策略。扩大了蜣螂的搜索空间,以提高种群初始解决方案的质量。反向学习策略的数学表达式如下式所示: 其中 OPi 是对应于每个初始解 Pi 的逆解。Pmax 和 Pmin 分别表示初始解中的最大值和最小值。K 是 (0, 1) 范围内的随机值。 改进点2: 自适应步长策略与凸透镜成像策略的集成 由于DBO采用随机策略,在蜣螂觅食阶段缺乏自适应能力,全局搜索能力较弱,容易陷入局部最优。为了进一步提高算法的寻道性能,该文采用动态选择策略,在一定概率下交替使用自适应步长策略和凸透镜成像反转策略来更新目标位置。 在初期迭代中,大步长能够扩展觅食搜索,提高算法的全局搜索能力,促进算法更快地找到更优的解,加快收敛速度。在后期迭代中,小步长有利于算法的局部搜索。步长的规律变化在觅食蜣螂的搜索中起着指导作用,这意味着在整体环境中从全局搜索逐渐过渡到局部搜索。该策略主要由线性递减的自适应步进控制因子α0决定,如下所示: 同时,引入一种凸透镜成像学习策略来扰动蜣螂种群,以增强种群多样性,提高算法跳出局部最优的可能性。该等式表示如下: 该策略在之前提出的改进算法中也有详细介绍,具体请看:三种策略改进的沙猫群优化算法(MSCSO) 目标位置更新采用哪种策略的选择由选择概率 Ps 决定, 当随机值Ps<0.5时,采用随机步进策略对蜣螂进行位置更新;否则,凸透镜反向学习策略用于位置更新,如下方程所示: 改进点3: 随机差异变异策略 蜣螂偷窃行为的位置更新方程根据个体的当前最优值更新其位置,这可能导致种群多样性的减少。导致算法陷入局部最优状态,收敛精度效率低下。因此,本文引入随机差分变异策略来增强偷蜣螂种群多样性。公式如下: 其中 P (t+1)表示通过随机差异突变获得的新个体,r1 和 r2 是 [0,1] 范围内的随机值。P∗ 是当前最佳个人位置。P′(t)是从种群中随机选择的个体的位置。

社区老人健康信息管理系统|基于springboot社区老人健康信息管理系统设计与实现(源码+数据库+文档)

社区老人健康信息管理系统目录 目录 基于springboot社区老人健康信息管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、健康信息管理 2、预约管理 3、公告管理 4、公告类型管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布道师,阿里云开发社区乘风者计划专家博主,CSDN平台Java领域优质创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。✌️ 主要项目:小程序、SpringBoot、SSM、Vue、Html、Jsp、Nodejs等设计与开发。 🍅文末获取源码联系🍅 基于springboot社区老人健康信息管理系统设计与实现 一、前言 因为传统社区老人健康信息管理系统信息管理难度大,容错率低,管理人员处理数据费工费时,所以专门为解决这个难题开发了一个社区老人健康信息管理系统管理系统,可以解决许多问题。 社区老人健康信息管理系统管理系统按照操作主体分为管理员和用户。管理员的功能包括就诊历史管理、字典管理、论坛管理、公告管理、健康信息管理、药品管理、药品入库管理、药品使用管理、医保信息管理、医生管理、预约管理、用户管理、管理员管理。用户的功能等。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。 社区老人健康信息管理系统管理系统可以提高社区老人健康信息管理系统信息管理问题的解决效率,优化社区老人健康信息管理系统信息处理流程,保证社区老人健康信息管理系统信息数据的安全,它是一个非常可靠,非常安全的应用程序。 关键词:社区老人健康信息管理系统管理系统;健康信息,预约Mysql数据库;Java语言 二、系统功能设计 设计的管理员功能结构,管理员权限操作的功能包括管理公告,管理社区老人健康信息管理系统信息,包括健康信息管理,培训管理,预约管理,薪资管理等,可以管理公告。 三、系统实现 1、健康信息管理 图5.1 即为编码实现的健康信息管理界面,管理员在健康信息管理界面中可以对界面中显示,可以对健康信息信息的健康信息状态进行查看,可以添加新的健康信息信息等。 图5.1 健康信息管理界面 2、预约管理 图5.2 即为编码实现的预约管理界面,管理员在预约管理界面中查看预约种类信息,预约描述信息,新增预约信息等。 图5.2 预约管理界面 3、公告管理 图5.3 即为编码实现的公告管理界面,管理员在公告管理界面中新增公告,可以删除公告。 图5.3 公告管理界面 4、公告类型管理 图5.4 即为编码实现的公告类型管理界面,管理员在公告类型管理界面查看公告的工作状态,可以对公告的数据进行导出,可以添加新公告的信息,可以编辑公告信息,删除公告信息。 图5.4 公告类型管理界面 四、数据库设计 1、实体ER图 (1)下图是用户实体和其具备的属性。 用户实体属性图 (2)下图是药品实体和其具备的属性。 药品实体属性图 (3)下图是药品入库实体和其具备的属性。 药品入库实体属性图 (4)下图是医生实体和其具备的属性。 医生实体属性图 (5)下图是论坛实体和其具备的属性。 论坛实体属性图 (6)下图是预约实体和其具备的属性。 预约实体属性图 (7)下图是公告实体和其具备的属性。 公告实体属性图 (8)下图是健康信息实体和其具备的属性。 健康信息实体属性图 (9)下图是就诊历史实体和其具备的属性。 就诊历史实体属性图

org/springframework/boot/maven/RepackageMojo has been compiled by a more recent version of the Java

项目场景: 项目中执行clean,再执行install时报错,错误如下 org/springframework/boot/maven/RepackageMojo has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0 问题描述 org/springframework/boot/maven/RepackageMojo是由较新版本的Java Runtime(类文件版本61.0)编译的,该版本的Java运行时只能识别52.0以下的类文件版本 原因分析: 通过对应表可知,这个文件是由java 17版本编译的,而现在系统中只能识别java 8以下的版本,java版本不一致导致打包失败,需要在出错的模块的打包插件中设置一个版本就好了 java对应表 49 = Java 5 50 = Java 6 51 = Java 7 52 = Java 8 53 = Java 9 54 = Java 10 55 = Java 11

【算法】基础算法002之滑动窗口(一)

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C++》《Linux》《算法》 🌝每一个不曾起舞的日子,都是对生命的辜负 目录 前言 1.长度最小的子数组 滑动窗口类问题解题思路大纲: 2.无重复字符的最长字串 3.最大连续1的个数Ⅲ 4.将 x 减到 0 的最小操作数(medium) 前言 本篇文章主要会讲解滑动窗口的解题思想,滑动窗口实际上就是利用双指针的基础思想,并且利用单调性进行解题的方法。 滑动窗口所用到的双指针是用来维护这个所谓的『 窗口』,所以这两个指针是『 同向』且『 不回退』的,这也就决定了滑动窗口解题的时间复杂度最多为O(2N) 即O(N),所以滑动窗口是一种非常优秀的算法思想。 那么滑动窗口思想具体的应用,以及如何分析判断是否适用滑动窗口解题呢? 欢迎大家📂收藏📂以便未来做题时可以快速找到思路,巧妙的方法可以事半功倍。 ========================================================================= GITEE相关代码:🌟樊飞 (fanfei_c) - Gitee.com🌟 ========================================================================= 1.长度最小的子数组 209. 长度最小的子数组 - 力扣(LeetCode)https://leetcode.cn/problems/minimum-size-subarray-sum/ 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 如果依照暴力枚举的策略,解题思路大致如下: 利用双指针,一个指针固定,移动另一个指针,当两个指针中间的所有元素和大于等于目标值target时,记录此时的长度,然后循环往复,求长度最小值。 代码如下: class Solution { public: int minSubArrayLen(int target, vector<int>& nums) { // 记录结果 int ret = INT_MAX; int n = nums.

用Python开发一个飞机大战游戏(附源码教程)

点击蓝字 关注我们 Python是一门非常简单的语言,快速入门之后可以做很多事情!比如爬虫啊,数据分析啊,自动化运维啊,机器学习,量化分析等等!但是入门到进阶的过程有时会非常痛苦,如果有一些好玩有趣的例子就好了。 比如通过游戏来学编程是一个非常好的途径,今天强哥就来写一个非常好玩的打飞机游戏,大概就1000多行,非常不错! 1、打飞机的游戏 打飞机的游戏估计很多人都玩过,雷霆战机相信很多80后的小伙伴都玩过! Python是一门非常简单的语言,快速入门之后可以做很多事情!比如爬虫啊,数据分析啊,自动化运维啊,机器学习,量化分析等等! 但是入门到进阶的过程有时会非常痛苦,如果有一些好玩有趣的例子就好了。比如通过游戏来学编程是一个非常好的途径 2、代码讲解 1.代码的结构 2.游戏的角色文件 gameRole 整个游戏分三个角色,下面我一一来解释一下,思路其实非常清晰的。 1)一个是子弹 初始化子弹的图片,然后得到它在画布上的坐标,并控制它的移动速度 2)敌机 会随机出一堆敌人的飞机,直管往前冲,从屏幕的上方往下方蜂拥而至,不需要考虑其他的行为! 敌机有几个重要的属性,比如它的飞行图片和击落的图片,然后获取的屏幕上的坐标。敌机的行为就一个飞,而且是只会往前飞。 3)我方战机 玩家类class Player(pygame.sprite.Sprite):` `def __init__(self, plane_img, player_rect, init_pos):` `pygame.sprite.Sprite.__init__(self)` `self.image = [] # 用来存储玩家对象精灵图片的列表` `for i in range(len(player_rect)):` `self.image.append(plane_img.subsurface(player_rect[i]).convert_alpha())` `self.rect = player_rect[0] # 初始化图片所在的矩形` `self.rect.topleft = init_pos # 初始化矩形的左上角坐标` `self.speed = 8 # 初始化玩家速度,这里是一个确定的值` `self.bullets = pygame.sprite.Group() # 玩家飞机所发射的子弹的集合` `self.img_index = 0 # 玩家精灵图片索引` `self.is_hit = False # 玩家是否被击中 def shoot(self, bullet_img): bullet = Bullet(bullet_img, self.

前端秘法进阶----css中那些不能说的秘密

目录 一.css属性计算过程 1.使用继承 2.使用默认值 3.面试题 二.css之包含块 一.css属性计算过程 1.使用继承 层叠冲突这一步完成后,解决了相同元素被声明了多条样式规则究竟应用哪一条样式规则的问题。 那么如果没有声明的属性呢?此时就使用默认值么? 答案并不是,此时还有第三个步骤,那就是使用继承而来的值。 例如: ```html <div> <p>Lorem ipsum dolor sit amet.</p> </div> ``` ```css div { color: red; } ``` 在上面的代码中,我们针对 div 设置了 color 属性值为红色,而针对 p 元素我们没有声明任何的属性,但是由于 color 是可以继承的,因此 p 元素从最近的 div 身上继承到了 color 属性的值。 这里有两个点需要我们注意一下。 首先第一个是我强调了是**最近的** div 元素,看下面的例子: ```html <div class="test"> <div> <p>Lorem ipsum dolor sit amet.</p> </div> </div> ``` ```css div { color: red; } .test{ color: blue; }

macOS 安装 conda

macOS 安装 conda 安装 conda参考 Conda是一个开源的软件包管理系统和环境管理系统,用于安装和管理软件包和其依赖项。 安装 conda mkdir miniconda3 cd miniconda3 bash Miniconda3-latest-MacOSX-x86_64.sh $ conda list 参考 macOS 安装 conda开始使用conda

社区养老|社区养老服务系统|基于springboot社区养老服务系统设计与实现(源码+数据库+文档)

社区养老服务系统目录 目录 基于springboot社区养老服务系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员部分功能 (1) 用户管理 (2)服务种类管理 (3)社区服务管理 (4)物品信息管理 2、用户部分功能 (1)社区服务 (2)物品信息 (3)社区活动 (4)意见中心 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布道师,阿里云开发社区乘风者计划专家博主,CSDN平台Java领域优质创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。✌️ 主要项目:小程序、SpringBoot、SSM、Vue、Html、Jsp、Nodejs等设计与开发。 🍅文末获取源码联系🍅 基于springboot社区养老服务系统设计与实现 一、前言 社区养老服务系统有管理员,用户两个角色。管理员功能有个人中心,用户管理,服务种类管理,社区服务管理,服务预约管理,物品种类管理,物品信息管理,借用信息管理,归还信息管理,活动分离管理,社区活动管理,活动报名管理,疫情监控管理,物业收费管理,资讯中心管理,意见中心管理,系统管理。用户可以注册登录,查看管理员发布的各中心信息,可以服务预约,借用归还,活动报名,发布自己的疫情监控信息,查看物业收费等操作。社区养老服务系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助使用者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 关键词:社区养老服务系统;Spring Boot框架;MySQL;自动化 二、系统功能设计 在分析并得出使用者对程序的功能要求时,就可以进行程序设计了。如图4.2展示的就是管理员功能结构图。 三、系统实现 1、管理员部分功能 (1) 用户管理 如图5.1显示的就是用户管理页面,此页面提供给管理员的功能有:对用户信息进行查询,添加,删除以及批量删除操作。 图5.1 用户管理页面 (2)服务种类管理 如图5.2显示的就是服务种类管理页面,管理员可以对服务种类进行添加,修改,删除,查询操作。 图5.2 服务种类管理页面 (3)社区服务管理 如图5.3显示的就是景点信息管理页面,管理员可以对社区服务信息进行添加,修改,删除,查询操作。 图5.3 社区服务管理页面 (4)物品信息管理 如图5.4显示的就是物品信息管理页面,管理员可以对物品信息进行添加修改删除查询操作。 图5.4 物品信息管理页面 2、用户部分功能 (1)社区服务 如图5.5显示的就是社区服务页面,用户注册登录后可以在社区服务信息里面预约和评论。 图5.5 社区服务页面 (2)物品信息 如图5.6显示的就是物品信息页面,用户登录后可以在物品信息里面借用。 图5.6 物品信息页面 (3)社区活动 如图5.7显示的就是社区活动页面,用户登录后可以在社区活动报名。 图5.7 社区活动页面 (4)意见中心 如图5.8显示的就是意见中心页面,用户登录后可以在意见中心发布意见。 图5.8 意见中心页面

(14)Hive调优——合并小文件

目录 一、小文件产生的原因 二、小文件的危害 三、小文件的解决方案 3.1 小文件的预防 3.1.1 减少Map数量 3.1.2 减少Reduce的数量 3.2 已存在的小文件合并 3.2.1 方式一:insert overwrite (推荐) 3.2.2 方式二:concatenate 3.2.3 方式三:使用hive的archive归档 3.2.4 方式四:hadoop getmerge 一、小文件产生的原因 数据源本身就包含大量的小文件,例如api,kafka消息管道等。动态分区插入数据的时候,会产生大量的小文件,从而导致map数量剧增;;reduce 数量越多,小文件也越多,小文件数量=ReduceTask数量*分区数;hive中的小文件是向 hive 表中导入数据时产生; 向 hive 中导入数据的几种方式: (1)直接向表中插入数据 insert into table t_order2 values (1,'zhangsan',88),(2,'lisi',61); 这种方式每次插入时都会产生一个小文件,多次插入少量数据就会出现多个小文件,故这种方式生产环境基本不使用; (2)通过load方式加载数据 -- 导入文件 load data local inpath "/opt/module/hive_data/t_order.txt" overwrite into table t_order; -- 导入文件夹 load data local inpath "/opt/module/hive_data/t_order" overwrite into table t_order; 使用 load方式可以导入文件或文件夹,当导入一个文件时,hive表就有一个文件,当导入文件夹时,hive表的文件数量为文件夹下所有文件的数量; (3)通过查询方式加载数据 insert overwrite t_order select oid,uid from t_order2 这种方式是生产环境中经常用的,也是最容易产生小文件的方式。insert 导入数据时会启动MR任务,MR-reduce的个数与输出文件个数一致。

(12)Hive调优——count distinct去重优化

离线数仓开发过程中经常会对数据去重后聚合统计,count distinct使得map端无法预聚合,容易引发reduce端长尾,以下是count distinct去重调优的几种方式。 解决方案一:group by 替代 原sql 如下: #=====7日、14日的app点击的用户数(user_id去重统计) select group_id, app_id, -- 7日内UV count(distinct case when dt >= '${7d_before}' then user_id else null end) as 7d_uv, --14日内UV count(distinct case when dt >= '${14d_before}' then user_id else null end) as 14d_uv from tbl where dt >= '${14d_before}' group by group_id, --渠道 app_id; --app 优化思路:group by两阶段聚合 #=====7日、14日的app点击的用户数(user_id去重统计) select group_id, app_id, -- 7日内UV sum(case when 7d_cnt > 0 then 1 else 0 end) as 7d_uv, --14日内UV sum(case when 14d_uv > 0 then 1 else 0 end) as 14d_uv from (select group_id, app_id, -- 7日内各渠道各app下的每个用户的点击量 count(case when dt >= '${7d_before}' then user_id else null end) as 7d_cnt, -- 14日内各渠道各app下的每个用户点击量 count(case when dt >= '${14d_before}' then user_id else null end) as 14d_uv from tbl where dt >= '${14d_before}' group by group_id, app_id, user_id) tmp1 group by group_id, app_id; 方案一弊端:数据倾斜风险 解决方案一通过两阶段group by(分组聚合) 对count (distinct) 进行改造调优,需要注意的是:如果分组字段user_id在tbl 表中存在大量的重复值,group by底层走shuffle,会有数据倾斜的风险,因此方案一还可以进一步优化。

Java——Swing详解

目录 Swing1、Swing和MVC设计模式2、布局管理2.1、布局管理器2.2、边框布局2.3、网格布局 3、文本输入3.1、文本域3.2、标签和标签组件3.3、密码域3.4、文本区3.5、滚动窗格 4、选择组件4.1、复选框4.2、单选按钮4.3、边框4.4、组合框4.5、滑动条 5、菜单5.1、菜单构建5.2、菜单项中的图标5.3、复选框和单选按钮菜单项5.4、弹出菜单5.5、键盘助记符和加速器5.6、启用和禁用菜单项5.7、工具条5.8、工具提示 6、复杂的布局管理6.1、网格包布局1)、gridx、gridy、gridwidth和gridheight参数2)、增量字段3)、fill和anchor参数4)、填充5)、指定gridx、gridy、gridwidth和gridheight参数的备用方法6)、网格包布局技巧7)、使用帮助类管理网格包约束8)、完整示例9)、API 6.2、定制布局管理器 7、对话框7.1、选项对话框7.2、创建对话框7.3、数据交互7.4、文件对话框 Swing 1、Swing和MVC设计模式 构成用户界面组件的各个组成部分,如按钮、复选框、文本域或复杂的树控件,每个组件都有三个特征: 内容,如按钮的状态(是否按下),或者文本域中的文本外观(颜色、大小等)行为(对事件的反应) 这三个特征之间存在相当复杂的交互,即使是最简单的组件(如按钮)也能体现出这一点。很明显,按钮的外观显示取决于它的观感。Metal按钮的外观与Windows按钮或者 Moif按钮的外观就不一样。另外,外观显示还要取决于按钮的状态:当按钮被按下时,按钮需要重新绘制,使它看起来不一样。而状态取决于按钮接收到的事件。当用户在按钮上点击鼠标时,按钮就被按下。 Swing设计者采用了MVC模式,这种设计模式要求我们提供三个不同的对象: 模型(model):存储内容视图(view):显示内容控制器(controller):处理用户输入 这种模式明确地规定了三个对象如何交互。模型存储内容,它没有用户界面。按钮的内容非常简单,只有很少的一组标志,用来表示当前按钮是否按下,是否处于活动状态,等等。文本域的内容更有意思,它与内容的视图不同:如果内容的长度大于文本域的大小,用户就只能看到文本域可以显示的那一部分。 对大多数Swing组件来说,模型类将实现一个名字以Model结尾的接口,在这里,接口就名为ButtonModel接口。实现了此接口的类可以定义各种按钮的状态。实际上,按钮并不复杂,另外Swing库中有一个名为DefaultButtonModel的类实现了这个接口。 可以通过查看ButtonModel接口的属性来了解按钮模型维护着什么类型的数据: actionCommand:与按钮关联的动作命令字符串mnemonic:按钮的助记快捷键armed:如果按钮按下且鼠标仍在按钮上则为trueenabled:如果按钮是可选择的则为truepressed:如果按钮按下且鼠标按键没有释放则为truerollover:如果鼠标在按钮上则为trueselected:如果按钮已经被选择(用于复选框和单选按钮)则为true 每个JButton对象都存储着一个按钮模型对象,可以如下访问: var button = new JButton("Blue"); ButtonModel model = button.getModel(); 实际上,不必关心按钮状态的详细信息,只有绘制它的视图才对此感兴趣。所有重要的信息(如按钮是否启用)可以通过JButton类得到(当然,JButton类会向它的模型获取这些信息)。 下面查看ButtonModel接口中不包含的信息。模型不存储按钮标签或者图标。对于一个按钮来说,仅凭模型无法知道它的外观。 另外还需要注意,同样的模型(即DefaultButtonModel)可用于下压按钮、单选按钮、复选框,甚至菜单项。当然,这些按钮都有各自不同的视图和控制器。当使用Metal观感时,JButton类用BasicButtonUI类作为其视图;用ButtonUIListener类作为其控制器。通常,每个Swing组件都有一个相关的后缀为UI的视图对象,但并不是所有的Swing组件都有专门的控制器对象。 JButton就是一个继承自JComponent的包装器类,其中包含DefaultButtonModel对象,一些视图数据(例如按钮标签和图标)以及一个负责按钮视图的BasicButtonUI对象。 2、布局管理 2.1、布局管理器 通常,组件放置在容器中,布局管理器决定容器中组件的位置和大小。按钮、文本域和其他的用户界面元素都会扩展Component类,组件可以放置在容器(如面板)中。由于Container类扩展自Component类,所以容器本身也可以放置在另一个容器中。 每个容器都有一个默认的布局管理器,但可以重新进行设置: panel.setLayout(new GridLayout(4, 4)); 会使用GridLayout类按4行4列摆放组件。往容器中添加组件时,容器的add方法将把组件和所有位置要求传递给布局管理器。 java.awt.Container: void setLayout(LayoutManager m):为容器设置布局管理器Component add(Component c)Component add(Component c, Object constraints):将组件添加到容器中,并返回组件引用 java.awt.FlowLayout FlowLayout()FlowLayout(int align)FlowLayout(int align, int hgap, int vgap):构造一个新的FlowLayout对象。align参数可以是LEFT、CENTER或者RIGHT 2.2、边框布局 边框布局管理器(border layout manager)是每个JFrame的内容窗格的默认布局管理器。流布局管理器会完全控制每个组件的位置,边框布局管理器则不然,它允许为每个组件选择一个位置。可以选择把组件放在内容窗格的中央、北部、南部、东部或者西部。 例如: frame.add(component, BorderLayout.SOUTH); 先放置边缘组件,剩余的可用空间由中间组件占据。当容器调整大小时,边缘组件的尺寸不会改变,而中间组件的大小会发生变化。添加组件时可以指定BorderLayout类的CENTER、NORTH、SOUTH、EAST和WEST常量。不是所有的位置都会被占用,如果没有提供任何值,系统默认为CENTER。 与流布局不同,边框布局会扩展所有组件的尺寸以便填满可用空间(流布局将维持每个组件的最佳尺寸)。

学生成绩管理系统|基于Springboot的学生成绩管理系统设计与实现(源码+数据库+文档)

学生成绩管理系统目录 目录 基于Springboot的学生成绩管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员功能模块 2、学生功能模块 3、教师功能模块 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布道师,阿里云开发社区乘风者计划专家博主,CSDN平台Java领域优质创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。✌️ 主要项目:小程序、SpringBoot、SSM、Vue、Html、Jsp、Nodejs等设计与开发。 🍅文末获取源码联系🍅 基于Springboot的学生成绩管理系统设计与实现 一、前言 学生成绩管理系统主要包括首页、个人中心、学生管理、教师管理、班级管理、综合成绩管理、专业管理、课程信息管理等功能模块。 本文首先介绍了学生成绩管理的技术发展背景与发展现状,然后遵循软件常规开发流程,首先针对系统选取适用的语言和开发平台,根据需求分析制定模块并设计数据库结构,再根据系统总体功能模块的设计绘制系统的功能模块图,流程图以及E-R图。然后,设计框架并根据设计的框架编写代码以实现系统的各个功能模块。最后,对初步完成的系统进行测试,主要是功能测试、单元测试和性能测试。测试结果表明,该系统能够实现所需的功能,运行状况尚可并无明显缺点。 关键词:学生成绩;java;MySQL数据库 二、系统功能设计 通过市场调研及咨询研究,了解了使用者及管理者的使用需求,于是制定了管理员、学生和教师等模块。其功能结构图如下图: 三、系统实现 登录,管理员、学生和教师通过输入用户名,密码,选择角色信息,点击登录进入系统操作进行操作,如图5-1所示。 图5-1登录界面图 1、管理员功能模块 管理员登录进入学生成绩管理系统可以查看首页、个人中心、学生管理、教师管理、班级管理、综合成绩管理等内容进行详细操作,如图5-6所示。 图5-2管理员功能界面图 学生管理,在学生管理页面可以对索引、学号、头像、学生姓名、性别、手机号码、邮箱、班级等内容进行详情,修改或删除等操作,如图5-2所示。 图5-2学生管理界面图 教师管理,在教师管理页面可以对索引、教师工号、头像、教师姓名、性别、手机号码、邮箱、职务等内容进行详情,修改或删除等操作,如图5-3所示。 图5-3教师管理界面图 综合成绩管理,在综合成绩管理页面可以对索引、学号、学生姓名、班级、学业成绩、德育成绩、体育素质、智育素质、总分、学年、登记时间、教师工号、教师姓名等内容进行详情,修改或删除等操作,如图5-4所示。 图5-4综合成绩管理界面图 2、学生功能模块 学生登录进入学生成绩管理系统可以查看首页、个人中心、综合成绩管理等内容进行详细操作,如图5-5所示。 图5-5学生功能界面图 个人中心,在个人信息页面通过填写学号、头像、学生姓名、性别、手机号码、邮箱、班级等内容进行个人信息修改操作,如图5-6所示。 图5-6个人中心界面图 3、教师功能模块 教师登录进入学生成绩管理系统可以查看首页、个人中心、综合成绩管理等内容进行详细操作,如图5-7所示。 图5-7教师功能界面图 个人中心,在个人信息页面通过填写教师工号、头像、教师姓名、性别、手机号码、邮箱、职务等内容进行个人信息修改操作,如图5-8所示。 图5-8个人中心界面图 综合成绩管理,在综合成绩管理页面可以对索引、学号、学生姓名、班级、学业成绩、德育成绩、体育素质、智育素质、总分、学年、登记时间、教师工号、教师姓名等内容进行详情,修改或删除等操作,如图5-9所示。 图5-9综合成绩管理界面图 四、数据库设计 1、实体ER图 综合成绩管理E-R图,如图4-2所示: 图4-2综合成绩管理E-R图 学生信息E-R图,如图4-3所示: 图4-3学生信息E-R图 教师信息E-R图如图4-4所示。 图4-4教师信息E-R图 五、核心代码 package com.service.impl; import org.springframework.stereotype.Service; import java.util.Map; import java.util.List; import com.baomidou.mybatisplus.mapper.Wrapper; import com.

Spark编程实验六:Spark机器学习库MLlib编程

目录 一、目的与要求 二、实验内容 三、实验步骤 1、数据导入 2、进行主成分分析(PCA) 3、训练分类模型并预测居民收入 4、超参数调优 四、结果分析与实验体会 一、目的与要求 1、通过实验掌握基本的MLLib编程方法; 2、掌握用MLLib解决一些常见的数据分析问题,包括数据导入、成分分析和分类和预测等。 二、实验内容 1.数据导入 从文件中导入数据,并转化为DataFrame。 2、进行主成分分析(PCA) 对6个连续型的数值型变量进行主成分分析。PCA(主成分分析)是通过正交变换把一组相关变量的观测值转化成一组线性无关的变量值,即主成分的一种方法。PCA通过使用主成分把特征向量投影到低维空间,实现对特征向量的降维。请通过setK()方法将主成分数量设置为3,把连续型的特征向量转化成一个3维的主成分。 3、训练分类模型并预测居民收入 在主成分分析的基础上,采用逻辑斯蒂回归,或者决策树模型预测居民收入是否超过50K;对Test数据集进行验证。 4、超参数调优 利用CrossValidator确定最优的参数,包括最优主成分PCA的维数、分类器自身的参数等。 附:数据集: 下载Adult数据集(http://archive.ics.uci.edu/ml/datasets/Adult)。数据从美国1994年人口普查数据库抽取而来,可用来预测居民收入是否超过50K$/year。该数据集类变量为年收入是否超过50k$,属性变量包含年龄、工种、学历、职业、人种等重要信息,值得一提的是,14个属性变量中有7个类别型变量。 Index.txt文件内容: Index of adult 02 Dec 1996 140 Index 10 Aug 1996 3974305 adult.data 10 Aug 1996 4267 adult.names 10 Aug 1996 2003153 adult.test 三、实验步骤 1、数据导入 从文件中导入数据,并转化为DataFrame。 //导入需要的包 from pyspark.ml.feature import PCA from pyspark.sql import Row from pyspark.ml.linalg import Vector,Vectors from pyspark.ml.evaluation import MulticlassClassificationEvaluator from pyspark.ml import Pipeline,PipelineModel from pyspark.