序言
一、提升开发效率工具
1.1封装view窗口
1.2封装常用功能接口
1.3提供基础接口代码块
二、使用介绍
2.1 注册&登录
2.2 新建应用
2.3 下载应用
2.4 安装包介绍
2.5 demo项目
2.6 配置demo
2.7 运行demo
三、使用结果
3.1 摄像头采集人脸添加模板
3.2 实时画面1:N人脸检测
3.3 照片测试
3.4 活体检测
四、总结&建议
4.1 总结
4.2体验地址
序言 最近在公司项目中遇到了人脸识别验证的需求,其中一个重要的功能是使用手机摄像头进行人脸实时显示和识别。由于我之前没有调用过摄像头的经验,一开始遇到了很多问题😔😔
按照网上的教程编写了相关的代码,并在模拟器中运行程序。然而,当点击启动按钮时,程序突然崩溃了😭😭。
我有尝试重新编译代码、检查权限等方式,但问题依然存在。为了排查问题,决定在真机上调试程序。但是在真机上,依然发现程序根本无法启动,只是停留在一个黑屏界面上,没有任何反应。😰😰
通过添加调试语句并逐行排查,我发现问题可能出现在与摄像头资源释放和打开有关的代码段中。查阅了相关资料后,发现需要在onPause()方法中释放摄像头资源,并在onResume()方法中重新打开摄像头,以避免应用切换时的问题。系统可能会将摄像头资源分配给其他应用程序使用,如果不及时释放摄像头资源,用户再次回到应用时可能无法正常访问摄像头。🙂🙂
于是修改了代码,在onPause()和onResume()方法中加入了释放和打开摄像头资源的代码。这次运行程序时,它终于正常工作了!✌️✌️我成功看到了实时视频流。😎😎
通过这次经历,我意识到没有调用过摄像头的程序员,刚开始使用时几乎都会遇到这种类似的问题。
由于与硬件有关,写上层应用的软件工程师往往缺乏相关经验,有些问题根本想不到。并且查过资料过程中发现,视频处理隐藏的问题比较多,有些还与使用时长有关,简单测试测不出来。
因此,在开发过程中要保持警觉,并进行充分的测试,以确保软件的稳定性和可靠性💪
然而,项目进度紧迫,时间有限。最近得知一家名为👉【暖果科技】的视觉算法公司18年来一直从事前沿算法的研究和应用,他们最近推出了一个👉【AI开放平台—脸鉴】。
在这个平台提供的脸识别SDK里直接封装了View窗口,可以直接调用,而不需要重新制作UI上的人脸框。考虑到方便性,我去详细了解了一下,发现确实使用起来非常方便👍👍。
接下来我会把使用经验分享给大家。
今天我们就来了解一下这个SDK吧,本文会从以下四个方面讲解👇👇:
提升开发效率工具使用介绍使用结果总结&建议 一、提升开发效率工具 1.1封装view窗口 SDK封装了view窗口,处理了摄像头数据的获取和渲染,开发者无需担心底层视频流处理和图像显示细节。
经过验证和测试,封装的view窗口可以保证一定的稳定性和可靠性。初次接触人脸识别SDK的开发者可以直接使用这个封装好的view窗口,无需担心底层摄像头处理问题,避免潜在错误和异常情况。这个对开发者真的很友好👍👍
以添加人脸模板功能为例,看一下添加布局后的效果:
可以看到添加布局后,能很方便的调用手机摄像头并显示人脸跟踪框,窗口的大小、跟踪框的颜色等都可以根据需要设置。我们不需要关注如何调用摄像头,也不需要从头开始做UI,只需要调用封装好的方法即可,真的做到了开箱即用。✌️✌️
1.2封装常用功能接口 SDK还提供了人脸采集、人脸比对和活体检测这些常见功能的整合接口。对于不熟悉人脸识别流程的开发者来说,只需要调用一个接口,就能自动完成整个流程中多个功能的调用,而无需在不同的基础功能接口(如摄像头遮挡检测、人脸检测、提取指定位置的人脸特征和特征值比对等)之间反复切换和调用。进一步简化了开发过程,提高效率。
例如人脸比对的使用流程如下:
人脸比对功能基础接口使用流程
封装后的代码示例
public void compareFeature(View view) { if (feature1 == null || feature2 == null){ tv.
前言: 有许多开发的小伙伴,使用的是mac,那么在mac上如何安装,配置Mysql,以及使用Mysql了,今天来一个系统的教程。
安装Mysql 使用mysql前,我们需要先下载mysql,并按照以下几个步骤,便可以顺利下载安装mysql了。
1:下载mysql 首先,在浏览器当中输入地址https://www.mysql.com/downloads/,或者登陆Mysql的官网:https://www.mysql.com/downloads/;如下图所示:
进入官网后,页面拉到最下面,找到 Mysql Community(GPL) Downloads,点击进入下载,下图所示:
然后选择:Mysql Community Server。
点Mysql Community Server进来后,进入如下页面,这里有多个平台的下载的链接,我们选择“DMG格式”的下载链接 下载这一步,需要注意如下俩点:
1:注意平台(Select Operating System)
如果你是window,就选择window,mac电脑就选择macOs.
2:注意选芯片结构(Select OS Version)
芯片会更具平台做出筛选,比如macOs就分为ARM架构指令集一集X86架构
因为我的mac是m1pro 芯片,所以我选择了ARM。选择好对应的版本后,直接点击下载即可,直至下载完成。
2:安装mysql 下载完成后, 直接双击打开,弹出以下界面,再继续点击即可,如下图所示:
安装过程基本都是直接点下一步,只有安装到上图所示的Configuration这一步时,如下图所示:
此时需要注意如下俩点:
一定要选择Use Legacy Password Encryption。(备注:因为我之前选择过Use Strong Password Encryption,但是有的时候运行项目会出现问题)一定要记得输入密码,这个密码也是登陆mysql的密码,非常重要。备注:如果是8.23版本后的Mysql,那么在输入密码的时候需要至少输入8位。 接下来只需继续点下一步,直到安装完毕即可。
3:检验Mysql 是否安装成功 查看是否安装成功:在系统偏好设置内,查看是否有mysql,如果有,即安装成功。
查看mysql的版本,打开终端,输入mysql -u root -p
mysql -u root -p 出现上述图片状态表示已经成功进入MySQL。并且显示MySQL版本是8.1.0.
4:配置Mysql 如果,在终端执行mysql -u root -p 命令出现command not found,可能就是环境变量没有配置,打开mac终端,执行如下命令:
vim ~/.bash_profile 打开.bash_profile文件后,按下字母i键,进入编辑模式,并加入语句PATH=$PATH:/usr/local/mysql/bin,如下图所示
环境变量配置完毕后,执行source ~/.bash_profile命令,使得环境变量配置得以生效。
source ~/.bash_profile 如果配置成功,那么输入命令:mysql -u root -p,运行效果如下:
文章目录 序言步骤下载comfyUI配置大模型和vae下载依赖组件启动 生成图片解决办法 序言 由于stable diffusion web ui无法做到对流程进行控制,只是点击个生成按钮后,一切都交给AI来处理。但是用于生产生活是需要精细化对各个流程都要进行控制的。
故也就有个今天的猪脚:Comfyui
步骤 下载comfyui项目配置大模型和vae下载依赖组件启动 下载comfyUI 官网地址:https://github.com/comfyanonymous/ComfyUI
将项目下载到自己喜欢的目录下,下面是我的:
yutao@yutao MINGW64 /e/openai/project $ git clone https://github.com/comfyanonymous/ComfyUI.git 配置大模型和vae 在ComfyUI\models\checkpoints中放大模型文件在ComfyUI\models\vae中放vae文件。 但是,我们学stable diffusion基本都是从stable diffusion webui开始的,所以我们其实不需要再额外的下载,checkpoint和vae,而是共用他们。
ComfyUI的作者提供了配置方法:
修改extra_model_paths.yaml.example文件重命名为:extra_model_paths.yaml打开文件,将里面的base_path进行修改:
以下是我的stable-diffusion-webui的路径 a111: base_path: E:\openai\project\stable-diffusion-webui 保存退出。
下载依赖组件 在ComfyUI中调出命令行(将文件夹路径上敲cmd,回车即可)中执行:
E:\openai\project\ComfyUI>pip install -r requirements.txt 就会开始下载所需的依赖组件。
启动 命令:python main.py
E:\openai\project\ComfyUI>python main.py 浏览器访问地址:http://127.0.0.1:8188
最左边,因为我之前玩stable diffusion时候已经下载好了guofeng3大模型。所以load checkpoint 里面我显示的是guofeng3.
大模型,我下载的是guofeng3。
放到models/checkpoints文件夹里,例如:E:\openai\project\ComfyUI\models\checkpoints。
生成图片 因为默认参数就可以生成一个花瓶,点击右上角的Queue Prompt。
但是我的电脑总是不是那么顺利。
详细描述文章:【ComfyUI】RuntimeError: CUDA error: operation not supported
报了如下错误:
got prompt model_type EPS adm 0 making attention of type 'vanilla-pytorch' with 512 in_channels Working with z of shape (1, 4, 32, 32) = 4096 dimensions.
目录 对于源的添加与修改1. 查看源3. 移除源4. 恢复默认源 检查添加源是否生效清理原来的索引配置总结 欢迎关注 『Python』 系列,持续更新中
欢迎关注 『Python』 系列,持续更新中
对于源的添加与修改 1. 查看源 conda config --show-sources ## 2. 添加源 ```python conda config --add channels 你要安装的国内源 ``` 常见的国内源: 清华镜像anaconda源:
channels:
https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/ ssl_verify: true
上海交大anaconda镜像源:
channels:
https://mirrors.sjtug.sjtu.edu.cn/anaconda/pkgs/main/
https://mirrors.sjtug.sjtu.edu.cn/anaconda/pkgs/free/
https://mirrors.sjtug.sjtu.edu.cn/anaconda/cloud/conda-forge/ ssl_verify: true
中科大anaconda镜像源
channels:
https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
https://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge/ ssl_verify: true
比如说我们添加清华源的free
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ 3. 移除源 要移除的单个源 conda config --remove channels 要移除的单个源 移除全部源 conda config --remove channels 这里测试一下移除默认源 conda config --remove channels defaults 只剩下了清华源没有defaults源了
前言 前面荔枝梳理了RabbitMQ中的普通队列、交换机以及相关的知识,在这篇文章中荔枝将会梳理RabbitMQ的一个重要的队列 —— 死信队列,主要了解消息流转到死信队列的三种的方式以及相应的实现demo。希望能帮助到有需要的小伙伴~~~
文章目录 前言
死信队列
1 基本概念 2 设置消息时间TTL过期的死信队列
3 队列达到最大长度发生死信 4 消息被拒引发死信
总结
死信队列 1 基本概念 死信就是无法被消费的消息,一般来说,producer将消息投递到broker或者直接到queue里了,consumer从queue取出消息进行消费,但某些时候由于特定的原因导致queue中的某些消息无法被消费,这样的消息如果没有后续的处理就变成了死信,有死信自然就有了死信队列。
应用场景:为了保证订单业务的消息数据不丢失,需要使用到RabbitMQ的死信队列机制,当消息
消费发生异常时,将消息投入死信队列中。比如说:用户在商城下单成功并点击去支付后在指定时间未支付时自动失效。
死信具有一定的延迟性,它可以作为延迟消息来处理。
死信出现的原因:
消息TTL过期队列达到最大长度(队列满了,无法再添加数据到mq中)消息被拒绝(basic.reject或basic.nack)并且requeue=false.I 2 设置消息时间TTL过期的死信队列 首先我们在消费者Consumer1中声明普通交换机、死信交换机、普通队列和死信队列之间的关系,同时在声明之后令Consumer1拒收消息,在RabbitMQ中观察消息生产者发出消息的流转情况。
设置死信队列的消费者1
在死信队列中我们设置了普通交换机、死信交换机、普通队列和死信队列。同时在正常队列中通过channel信道对象中的queueDeclare方法中的一个Map类型的参数,设置了死信交换机和普通交换机之间的关系,配置好TTL、RoutingKey并声明其死信交换机。
package com.crj.rabbitmq.deadQueue; import com.crj.rabbitmq.utils.RabbitMqUtil; import com.rabbitmq.client.BuiltinExchangeType; import com.rabbitmq.client.Channel; import com.rabbitmq.client.DeliverCallback; import java.util.HashMap; import java.util.Map; /** * 死信队列 * 消费者1:需要声明死信队列和普通队列 */ public class Consumer { //普通交换机名称 public static final String NORMAL_EXCHANGE = "normal"; //死信交换机名称 public static final String DEAD_EXCHANGE = "
目录 前言一、Open in WordPress playground二、WebGPU三、新的核心 Web 指标INP四、Webview1、Custom Tabs2、JavaScriptEngine 五、Passkeys六、View Transitions API七、Google Chrome开发者工具优化1、覆盖HTTP的响应标头2、改变stack trance 八、Baseline总结 前言 在前不久的 2023 Google 开发者大会中,谷歌提出了更加强大且开放的 Web,并且还可以可以简化开发工作并支持 AI。Google 资深开发技术推广工程师兼 Chrome 开发技术推广部主管 Paul Kinlan 在 2023 Google 开发者大会讲解了 Google 推出的新功能,包括在 Web 开发值得重点关注的升级与成果以及 Web 如何实现加速开发。本文主要围绕 Google 在 Web 平台中的一些新特性展开描述,希望你能有所收获。
一、Open in WordPress playground WordPress playground 是Google应用商店中的一款扩展程序,它实际是一个使用WebAssembly(WASM)在浏览器运行wordpress的项目,让用户无需搭建本地开发环境即可快速测试插件和主题。
WebAssembly能够从 C++、C#、Kotlin 甚至 Swift 编写的应用中提取代码,并让代码在 Web 平台上运行。WebAssembly 如今支持 Kotlin 和 Dart,可让 Android 和 Flutter开发者利用其优势,在重用现有代码的同时,利用原生性能在 Web 上吸引新的用户。
二、WebGPU 经过多年的开发,Chrome 团队推出了WebGPU(Web图形化处理器),它允许在网络上进行高性能的3D图形和数据并行计算,减轻浏览器的JavaScript工作负载,并将机器学习模型推理的性能提高三倍,让浏览器3D性能大爆发!最终让浏览器游戏呈现具有许多不同对象的高度详细的场景。
目前许多广泛使用的 WebGL 库已经逐步实现 WebGPU 支持,比如Babylon.
启动MySQL MySQL安装完成之后,想要启动MySQL有以下两种方式:
第一种方式: 1.我们可以直接在我们Windows的命令行当中输入services.msc,就会进入到Windows的系统服务,因为之前在安装MySQL的时候,我们就已经提到了MySQL安装完成后就会自动注册为系统服务
2.在这个里面找到M开头的,会找到有一个MySQL80,此时鼠标右键就可以控制MySQL的启动与停止。而在我们MySQL安装完成之后,MySQL就默认已经启动了
第二种方式: 我们可以直接在命令行当中输入指令:
启动 net start mysql80 停止 net stop mysql80 MySQL80在安装时注册为Windows的系统服务,服务名称默认就是MySQL80,不区分大小写
1.进入cmd,以管理员的身份运行
2.进入以后输入指令net stop mysql80然后回车,此时MySQL的服务就已经停止了。输入net start mysql80指令然后回车就能将MySQL重新启动
操作MySQL 想要操作MySQL,这时候我们就需要通过MySQL的客户端工具来进行连接,MySQL的客户端连接有两种方式:
第一种方式: 1.直接使用MySQL提供的客户端命令行工具,输入密码123456,在这里我们就可以看到MySQL的版本号
第二种方式: 1.使用Windows的命令行来进行连接(系统自带的命令行工具执行指令)
mysql [-h 127.0.0.1][-p 3306] -u root -p mysql [-h 127.0.0.1]指定的是连接的是哪一个IP,[-p 3306]指的是连接的是哪一个端口,这两个参数可以省略,默认连接的就是本机的3306。然后-u指定root,以root用户进行连接,-p指定密码。
那么这种方式在使用的时候需要注意:
要想在任意的目录下去执行MySQL指令,那这个时候就必须得配置环境变量。
接下来就开始配置环境变量:
1.在系统设置中找到高级系统设置
2.进入后点击环境变量
3.需要在Path环境变量中去增加一个MySQL的环境变量
4.把bin目录的地址直接复制
C:\Program Files\MySQL\MySQL Server 8.0\bin
5.将复制的地址新建到Path环境变量中,点击确定,此时环境变量就配置完毕
6.再打开cmd窗口,输入mysql -u root -p指令,然后输入密码123456,如果能显示出MySQL的版本号,那么说明MySQL的环境变量配置成功
203.移除链表元素
206.反转链表
876.链表的中间结点
牛客.链表中倒数第k个结点
21.合并两个有序链表
牛客.链表分隔
牛客.链表的回文结构
160.相交链表
141.环形链表
142.环形链表2
1. 移除链表元素 题目描述 思路: 定义一个指针cur遍历整个链表,一个tail指针,cur遍历整个链表,如果cur->val!=val,就把tail的next存放cur指针指向的地址,这样下来,可以将链表中的!=val数据连接起来,tail指针作用就是起到连接作用,注意刚开始的时候如果第一个数据!=val,首先得将head,tail移动到cur指向的头结点上,为什么13行要将head=NULL;是为了防止空链表,如果链表最后一个元素==val的话,记得循环结束,将tail->next=NULL,当free掉最后一个6时,倒数第二个元素的next还保存6的地址,当free后,6地址上存的是随机值
代码: struct ListNode* removeElements(struct ListNode* head, int val){ struct ListNode*cur=head; struct ListNode*tail=NULL; head=NULL;ya while(cur) { if(cur->val==val) {struct ListNode*del=cur; cur=cur->next; free(del); } else { if(tail==NULL) {tail=head=cur;} else {tail->next=cur; tail=tail->next; } cur=cur->next;} } if(tail) {tail->next=NULL;} return head; } 带图调试
2.反转链表 题目描述 思路1 逆序链表将存放下一个结点地址地址反过来,也就是2的next存1的地址,3的next存2的地址,4的next存3的地址,5的next存4的地址。你如果将2的next存1的地址,那么3的地址就会丢失,我们可以定义3个指针,一个指针指向前一个结点的地址,一个指针指向后一个结点指针,第三个结点n2为当前位置的指针,将n2->next存入n1,也就是在逆序链表,将每个指针都向后移动,继续修改下一个逆序方向,直到将图示中的箭头全部逆序完,n2指向空,当n3指向空后不再移动n3指针,此时n1指向的尾结点刚好是逆序之后的头结点,然后返回n1即可,如果是空链表的话,逆序之后也是空链表,直接return NULL;
代码 struct ListNode* reverseList(struct ListNode* head){ struct ListNode*n1=NULL; struct ListNode*n2= head; if(head==NULL) {return NULL;} struct ListNode*n3=n2->next; while(n2) {n2->next=n1; n1=n2; n2=n3; if(n3) {n3=n3->next;} } return n1; } 带图调试
1、IDEA概述 IDEA全称IntelliJ IDEA,是用于Java语言开发的集成环境,它是业界公认的目前用于Java程序开发最好的工具。
集成环境:把代码编写,编译,执行,调试等多种功能综合到一起的开发工具。
2、IDEA下载和安装 2.1 IDEA下载 下载:(官网下载) https://www.jetbrains.com/idea/
安装:傻瓜式安装,建议修改安装路径。
进入官网后,点击下载即可。(这里以旗舰版为例。)
建议:不要下载最新版,推荐下载上一个版本的最后一个版本。
2.2 IDEA安装 1、下载完安装包,双击直接安装 2、欢迎安装
3、选择安装目录,目录中要避免中文和空格
4、创建桌面快捷图标等
确认是否与.java、.groovy、.kt 格式文件进行关联。这里建议不关联。
5、在【开始】菜单新建一个文件夹(这里需要确认文件夹的名称),来管理IDEA的相关内容。
6、完成安装
安装完成后,可以咨询神奇的百度寻找破解方法。
3、IDEA卸载 3.1 卸载过程 这里以卸载2022.1.2版本为例说明。在【控制面板】找到【卸载程序】
右键点击或左键双击IntelliJ IDEA 2022.1.2进行卸载:
如果需要保留下述数据,就不要打√。如果想彻底删除IDEA所有数据,那就打上√。
软件卸载完以后,还需要删除其它几个位置的残留:
4、IDEA中第一个代码:HelloWorld 4.1 创建Project项目 1. 打开IDEA,点击"New Project":
2. 建议先不选择Java,先建一个空项目Empty Project
3. 填写项目名称和项目存放路径
4. 点击Finish后弹出提示,点击Create
4.2 创建Module模块 1. 第一次创建项目,会自动弹出该弹窗,提示你创建模块
2. 点击左上角的" + ",选择New Module
3. 点击OK后会弹出新的弹窗,选择Java,点击Next
4. 修改模块名称,点击Finish即可
5. 点击OK
6. 模块创建完成
4.3 创建class类 4.4 在类中编写代码 public class HelloWorld { public static void main(String[] args) { System.
博主介绍:✌全网粉丝30W+,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌
🍅文末获取源码联系🍅
👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟
2022-2024年最全的计算机软件毕业设计选题大全:1000个热门选题推荐✅
Java项目精品实战案例《100套》
Java微信小程序项目实战《100套》
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人
一、 前言介绍: 近年来,我国的社会经济迅猛发展,社会对于房屋租赁的需求也在不断增多。在房屋租赁企业中面对繁琐而又庞大的信息量,为了企业和人们可以更好的了解和最快知道最新的房源信息。本系统基于以上需求,设计一个在线租房平台小程序,租房用户可以在小程序中搜索符合自己需求的房源。同时帮助出租户发布房屋出租信息。系统管理员在后台批量管理各种信息,可大量的节省工作时间,提高工作的效率。
对于本线上租房平台小程序的设计来说,它主要是采用后台采用java语言、springboot框架,它是应用mysql数据库、微信小程序等技术动态编程以及数据库进行努力学习和大量实践,并运用到了微信小程序的建设中在整个系统的设计当中,具体根据网上线上租房平台小程序的现状来进行开发的,具体根据用户需求实现线上租房平台小程序网络化的管理,各类信息有序地进行存储,进入线上租房平台小程序页面之后,方可开始操作主控界面,本系统主要讲述了线上租房平台小程序开发背景,该系统它主要是对需求分析和功能需求做了介绍,并且对系统做了详细的测试和总结。具体从业务流程、数据库设计和系统结构等多方面的问题。望能利用先进的计算机技术和网络技术来改变目前的线上租房平台小程序管理状况,提高管理效率。
二 、功能设计: 系统功能包括管理员服务端:首页、轮播图管理、公告信息管理、系统用户(管理员、租客用户、房主用户)资源管理(新闻列表、新闻分类列表)模块管理(房源信息、房源咨询、租赁申请、入住信息、房租信息、反馈信息、通知信息、房屋类型)个人管理;
用户客户端:首页、公告信息、新闻资讯、房源信息等功能。 三、功能实现: 3.1 小程序端: 用户登录或注册在登陆页面填写账号、密码、邮箱、手机昵称、姓名等信息
点击进入系统小程序首页可以看见相关的信息,房屋信息以及公告信息等,点击可以查看详情
房源信息详情页面可查看房屋名称、房屋类型、房屋编号、押金、租金、厅室、房屋详情、房主姓名等详细信息,可进行在线咨询、租赁申请、点赞、收藏、评论等操作。
3.2 web网页端: 用户注册在登陆页面填写账号、密码、邮箱、手机昵称、姓名等信息
用户对查看首页详情页面
3.3 后台管理端: 管理员输入个人的账号、密码登录系统,这时候系统的数据库就会在进行查找相关的信息,如果我们输入的账号、密码不正确,数据库就会提示出错误的信息提示,同时会提示管理员重新输入自己的账号、密码,直到账号密码输入成功后,会提示登录成功的信息。管理员登录效果图如图5.1所示:
管理员可以查看后台服务端后台首页、轮播图管理、公告信息管理、系统用户(管理员、租客用户、房主用户)资源管理(新闻列表、新闻分类列表)模块管理(房源信息、房源咨询、租赁申请、入住信息、房租信息、反馈信息、通知信息、房屋类型)个人管理等操作。管理员服务端效果图如图5.2所示。
管理员对公告信息管理编辑提交、确认、发布、审核等操作
四、库表设计: 4.1 数据设计原则 每个数据库的应用它们都是和区分开的,当运行到一定的程序当中,它就会与自己相关的协议与客户端进行通讯。那么这个系统就会对使这些数据进行连接。当我们选择哪个桥段的时候,接下来就会简单的叙述这个数据库是如何来创建的。当点击完成按钮的时候就会自动在对话框内弹出数据源的名称,在进行点击下一步即可,直接在输入相对应的身份验证和登录密码。 线上租房平台小程序的数据流程:
图4-4 系统数据流程图
4.2 实体E-R图设计 线上租房平台小程序实体E-R图,如图4.5所示。
图4.5实体E-R图
五、关键代码: /** * 登录 * @param data * @param httpServletRequest * @return */ @PostMapping("login") public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) { log.info("[执行登录接口]"); String username = data.
运行start-sh.all发现了如图的问题
也是搞了很久搜了很多教程,发现很多人并不是大毛病而是很多小细节出了错误。
首先检查如下hadoop-env.sh ,core-site.xml ,hdfs-site.xml ,mapred-site.xml ,yarn-site.xml
内容是否有配置错误
下图这种明显的错误一定要注意 “-”不要用错符号
若均正确(真的要很仔细的去看)
进入 /etc/profile查看自己是否正确的添加了环境变量
echo 'export HADOOP_HOME=/export/server/hadoop‐3.3.0' >> /etc/profile echo 'export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin' >> /etc/profile 注意要根据自己的hadoop进行相应变更 如hadoop-3.1.4 则需将上图指令 中的-3.3.0改为-3.1.4
进行完上述检验后就能成功了。
电脑环境 widows10系统
一、安卓端操作步骤 ## Android 设备通过usb连接开启ADB安装APK
1.开启开发者模式
操作步骤:进入设置并选择关于手机。找到版本号并点击7次,屏幕会出现提示您现在处于开发者模式。
2.开启USB调试
操作步骤: 返回到设置并点击开发者选项,选择 启用USB调试 ,再次返回到设置并点击安全,启用从未知来源安装。部分手机还需要勾选“仅充电”模式下允许ADB调试。
PS:部分手机还会出现“监控ADB安装应用”,务必要关闭此选项。防止无法安装APK。
3.USB线连接电脑
操作步骤:用USB线缆连接手机和电脑,手机弹出一个调试选项页面,选择确认
如果未弹出该页面,可能会有以下几种原因:
3.1没有启用USB调试选项:在设置> 开发者选项中启用该选项。
3.2没有安装手机驱动程序:可能需要手动安装设备的驱动程序
3.3没有正确连接USB:尝试更换USB数据线更换脑。
二、电脑端操作步骤 4.使用 USB连接到安卓设备
PS:将文件夹拷贝到E盘根目录(E:\ADB)不能有中文。
cmd进入doc命令行
C:\Users\Administrator>E: #进入E盘目录
E:>cd ADBr #进入E盘文件夹目录
E:\ADB>adb devices #查看已连接adb设备
E:\ADB>adb install MDMAndroidAgent.apk
或者双击E盘目录下的 makedeviceowner.bat 文件,安装指定的apk,
看到success 字样为正常安装
5.退出开发者模式
设置–>系统–>高级 -->开发者选项 -->关闭开关
## Android 11设备通过无线调试连接开启ADB安装APK
一、安卓端操作步骤
1.启动开发者模式: 关于手机 --> 连续点击版本号,直到提示进入开发者模式
2.启用无线调试选项: 手机–>设置–>系统–>高级 -->开发者选项 -->无线调试
3.允许无线调试: 询问要在此网络上允许无线调试吗?的对话框中,点击允许
二、电脑端操作步骤
E:\ADB>adb connect 192.168.101.3:40377 #(使用无线调试下的 I地址连接)
连接成功后安卓设备会在通知栏提示 已连接到无线调试
E:\ADB>adb install MDMAndroidAgent.
一.直接在controller层当中直接获取token
在controller层获取前端在请求头中存储的token有两种方式:
获取token方式1
/** * 获取请求头中的token方式一 * @param request * @return */ @GetMapping("/testGetToken") private apiResult getToken(HttpServletRequest request){ String token = request.getHeader("token"); return apiResult.ok(token); } 获取token方式2
/** * 获取请求头中的token方式二 * @param token * @return */ @GetMapping("/testGetTokenTwo") private apiResult getTokenTwo(@RequestHeader("token") String token){ return apiResult.ok(token); } 二.在service业务层获取token
在service层中获取token需要使用相应的工具类,这里我分享一个有用的工具类。代码如下:
import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; /** * 获取请求头中的token工具类 */ public class UserRequest { public static String getCurrentToken() { HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()) .
AIGC专栏1——Pytorch搭建DDPM实现图片生成 学习前言源码下载地址网络构建一、什么是Diffusion1、加噪过程2、去噪过程 二、DDPM网络的构建(Unet网络的构建)三、Diffusion的训练思路 利用DDPM生成图片一、数据集的准备二、数据集的处理三、模型训练 学习前言 我又死了我又死了我又死了!
源码下载地址 https://github.com/bubbliiiing/ddpm-pytorch
喜欢的可以点个star噢。
网络构建 一、什么是Diffusion 如上图所示。DDPM模型主要分为两个过程:
1、Forward加噪过程(从右往左),数据集的真实图片中逐步加入高斯噪声,最终变成一个杂乱无章的高斯噪声,这个过程一般发生在训练的时候。加噪过程满足一定的数学规律。
2、Reverse去噪过程(从左往右),指对加了噪声的图片逐步去噪,从而还原出真实图片,这个过程一般发生在预测生成的时候。尽管在这里说的是加了噪声的图片,但实际去预测生成的时候,是随机生成一个高斯噪声来去噪。去噪的时候不断根据 X t X_t Xt的图片生成 X t − 1 X_{t-1} Xt−1的噪声,从而实现图片的还原。
1、加噪过程 Forward加噪过程主要符合如下的公式:
x t = α t x t − 1 + 1 − α t z 1 x_t=\sqrt{\alpha_t} x_{t-1}+\sqrt{1-\alpha_t} z_{1} xt=αt xt−1+1−αt z1
其中 α t \sqrt{\alpha_t} αt 是预先设定好的超参数,被称为Noise schedule,通常是小于1的值,在论文中 α t \alpha_t αt的值从0.9999到0.998。 ϵ t − 1 ∼ N ( 0 , 1 ) \epsilon_{t-1} \sim N(0, 1) ϵt−1∼N(0,1)是高斯噪声。由公式(1)迭代推导。
「作者主页」:士别三日wyx
「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者
「推荐专栏」:小白零基础《Python入门到精通》
webbrowser模块详解 1、常用操作2、函数大全webbrowser.open() 打开浏览器webbrowser.open_new() 新窗口打开webbrowser.open_new_tab() 新页面打开webbrowser.get() 获取浏览器对象webbrowser.register() 注册浏览器 3、浏览器对象4、实战演示 webbrowser 是Python的内置库,提供了访问Web浏览器的接口
使用前需要「导入模块」
import webbrowser 1、常用操作 1)使用「默认浏览器」打开指定url
import webbrowser webbrowser.open('www.baidu.com') 2)使用「指定浏览器」(比如chrome)打开指定url
import webbrowser path = "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" webbrowser.register('chrome', None, webbrowser.BackgroundBrowser(path)) browser = webbrowser.get('chrome') browser.open('www.baidu.com') 2、函数大全 webbrowser 模块提供了一些「操作浏览器」的函数
webbrowser.open() 打开浏览器 使用「默认浏览器」打开指定的url
语法
webbrowser.open( url, new, autoraise ) 参数
url :(必选)需要打开的url new :(可选)0同一个窗口打开;1新窗口打开;默认值是0。 autoraise :(可选)True窗口前置;False不前置;默认值是True。 实例
import webbrowser webbrowser.open('www.baidu.com') 电脑会「打开」默认浏览器并访问url
补充:
new 参数只是尽可能在新窗口打开,很多情况下还是在同窗口打开 open() 函数有时能够「打开文件」,但这种方式是不支持的,应该避免 webbrowser.open_new() 新窗口打开 尽可能在默认浏览器的「新窗口」打开url,否则还是在原窗口打开。
前言: ava虚拟机(JVM)的类加载机制是Java应用中不可或缺的一部分。本文将详细介绍JVM的双亲委派机制,并阐述各关键点。
一、什么是双亲委派机制? 双亲委派机制(Parent-Delegate Model)是Java类加载器中采用的一种类加载策略。该机制的核心思想是:如果一个类加载器收到了类加载请求,默认先将该请求委托给其父类加载器处理。只有当父级加载器无法加载该类时,才会尝试自行加载。
二、类加载器与层级关系 Java中的类加载器主要有如下三种:
启动类加载器(Bootstrap ClassLoader): 负责加载 %JAVA_HOME%/jre/lib 目录下的核心Java类库如 rt.jar、charsets.jar 等。
扩展类加载器(Extension ClassLoader): 负责加载 %JAVA_HOME%/jre/lib/ext 目录下的扩展类库。
应用类加载器(Application ClassLoader): 负责加载用户类路径(ClassPath)下的应用程序类。
这三种类加载器之间存在父子层级关系。启动类加载器是最高级别的加载器,没有父加载器;扩展类加载器的父加载器是启动类加载器;应用类加载器的父加载器是扩展类加载器。
除了以上三个内置类加载器,用户还可以通过继承 java.lang.ClassLoader 类自定义类加载器,根据实际需求处理类加载请求。
三:双亲委派机制作用及如何破环机制 通过上述两块内容,我们对双亲委派机制、加载流程及层级有了一些了解,这时我们不妨抛出几个疑问。
为什么需要双亲委派双亲委派机制有哪些优缺点如何打破这个机制有哪些工具选择了破坏机制。 1. 为什么需要双亲委派 1. 通过双亲委派机制,可以避免类的重复加载,当父加载器已经加载过某一个类时,子加载器就不会再重新加载这个类。
2. 通过双亲委派机制,可以保证安全性。因为BootstrapClassLoader在加载的时候,只会加载JAVA_HOME中的jar包里面的类,如java.lang.String,那么这个类是不会被随意替换的。
那么,就可以避免有人自定义一个有破坏功能的java.lang.String被加载。这样可以有效的防止核心Java API被篡改。
这是在JDK1.8的java.lang.ClassLoader类中的源码,这个方法就是用于加载指定的类。
实现双亲委派机制 的代码也都集中在这个方法之中:
protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException{ synchronized (getClassLoadingLock(name)) { // First, check if the class has already been loaded Class<?> c = findLoadedClass(name); if (c == null) { long t0 = System.
multipart/form-data 是文件传输的content-type 格式,为了上传文件,等二进制流boundary 是分隔符,分隔多个文件、表单项。如果不自己设置,默认由浏览器自动产生,并确保在整个请求体中是唯一的,以便服务器能够正确地解析请求中的各个部分,在使用 multipart/form-data 格式进行数据提交时,每个请求体的部分(part)都需要有一个唯一的分隔符(boundary)来标识不同的部分。这个分隔符是由客户端生成并在请求头中指定的。一般情况下,开发人员无需手动指定分隔符,因为大多数 HTTP 客户端库(如浏览器内置的 XMLHttpRequest、Fetch 或第三方库如 axios)会自动为你生成和处理这些边界和分隔符。在示例中出现的 ----WebKitFormBoundarywd2ZRr4Hlgf2m5MT 只是一个范例分隔符,并非固定值。实际上,生成的分隔符可能是随机的,并且会具有足够的唯一性以确保它不会与正文中的实际数据发生冲突。所以,Content-Type: multipart/form-data; boundary=----WebKitFormBoundarywd2ZRr4Hlgf2m5MT 中的 boundary 值是自动生成的,并且在每个具体的请求中会有不同的值一般情况下,HTTP 客户端库(如浏览器内置的 XMLHttpRequest、Fetch 或第三方库如 axios)会自动为你生成并添加正确的分隔符和边界。关于去掉 boundary 前面的空格,需要注意的是,根据 HTTP 规范,分隔符的前面可以包含一个或多个空格字符。因此,去掉 boundary 前面的空格是不符合规范的行为,可能会导致请求无法被正确解析。建议保持 Content-Type 请求头中 boundary 前面的空格,以确保与 HTTP 规范的一致性,并避免出现潜在的问题。
运行Jar时在控制台输出的中文日志全是乱码,这是因为cmd/bash默认的编码是GBK,只要把cmd的编码改成UTF-8即可
两种方式修改:临时修改和注册表永久修改
临时修改 只对当前的cmd页面有效,关闭后重新打开都会恢复成GBK,
打开cmd,输入以下命令
chcp 65001 这样既可以更改cmd的编码为UTF-8了。
以下是常用的cmd编码
字符编码
对应字符
GBK(默认)
936
美国英语 437
utf-8
65001
这时候我们可以将运行Jar时,指定编码参数
java -Dfile.encoding=utf-8 -jar project.jar 这时候已经恢复正常了
为了方便也可以把修改编码和运行jar服务编写成bat文件,下次直接点击运行
chcp 65001
java -Dfile.encoding=utf-8 -jar project.jar
永久修改 (1)win键+R,输入regedit,确定
(2)按顺序找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor
(3)点击右键-新建,选择“字符串值”,命名为“autorun”, 点击右击修改,数值数据填写“chcp 65001”,确定
此时打开cmd已经默认是utf8了
也没有出现乱码情况
目录
🌳 Axios的诞生
🌳 Axios的介绍
定义
原理
特性
浏览器支持情况
如何安装 🌳 Axios的使用
◼️ 创建vue项目
◼️ Axios的基础用法(get、post、put 等请求方法)
get方法
post方法
put和patch方法 delete方法
并发请求
◼️ Axios进阶用法(实例、配置、拦截器、取消请求等)
1、axios实例的创建与配置
2、拦截器
3、取消请求(不常用,了解)
◼️ Axios进一步封装,在项目中的实际应用
代理
封装 调用
🌳 参考资料
🌳 Axios的诞生 为什么会诞生Axios?说到Axios我们就不得不说下Ajax。最初的旧浏览器页面在向服务器请求数据时,由于返回的是整个页面的数据,所以整个页面都会强制刷新一下,这对于用户来讲并不是很友好。因为当我们只需要请求部分数据时,服务器返回给我们的确是整个页面的数据,这样会造成网络资源的占用,即十分消耗网络资源。为了提高数据请求效率,异步网络请求Ajax就应运而生了,它可以在页面无刷新的情况下请求数据。因此,这样一来,当我们只是需要修改页面的部分数据时,可以实现不刷新页面的功能。
🌳 Axios的介绍 定义 Axios是一个基于promise 的 HTTP 库(类似于jQuery的Ajax,用于HTTP请求),可以用在浏览器和 node.js中(既可以用于客户端也可以用于node.js编写的服务端)。 Axios 是一个基于 promise 的网络请求库,可以用于浏览器和 node.js中。Axios(相比于原生的XMLHttpRequest对象来说) 简单易用,(相比于jQuery)axios包尺寸小且提供了易于扩展的接口,是专注于网络请求的库。
原理 axios(ajax i/o system)不是一种新技术,本质上也是对原生XHR(XMLHttpReques)的封装,只不过它是基于Promise的,是Promise的实现版本,符合最新的ES规范。 👉 番外:AJAX
AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。
—— 异步网络请求 —— Ajax能够让页面无刷新的请求数据 ——
要使用线程池来处理队列中的多个任务,可以使用Python的 concurrent.futures 模块中的 ThreadPoolExecutor 类。 ThreadPoolExecutor 提供了一个方便的接口,可以将任务提交到线程池中执行。
以下是一个示例,展示如何使用线程池处理队列中的多个任务:
import concurrent.futures # 模拟的任务函数 def task_function(task): print(f"Processing task: {task}") # 创建线程池 with concurrent.futures.ThreadPoolExecutor() as executor: # 创建一个任务队列 task_queue = ["Task 1", "Task 2", "Task 3", "Task 4", "Task 5"] # 提交任务到线程池 for task in task_queue: executor.submit(task_function, task) # 等待所有任务完成 executor.shutdown() 在上面的示例中,我们首先导入了 concurrent.futures 模块。然后,我们定义了一个模拟的任务函数 task_function ,该函数接受一个任务作为参数,并打印出任务的信息。
接下来,我们使用 ThreadPoolExecutor 创建了一个线程池。然后,我们创建了一个任务队列 task_queue ,其中包含了多个任务。
然后,我们使用 executor.submit() 方法将每个任务提交到线程池中执行。 submit() 方法接受任务函数和任务参数作为参数,并返回一个 Future 对象,该对象可以用于获取任务的执行结果。
最后,我们调用 executor.shutdown() 方法来等待所有任务完成并关闭线程池。
通过使用线程池,您可以并发地处理队列中的多个任务,提高程序的执行效率。请注意,线程池的大小默认为系统的CPU核心数,您也可以通过传递 max_workers 参数来指定线程池的大小。