PTA非零返回的解决办法java

应该不止我一个是在PTA做题遇到了 非零返回 导致不能AC,结果网上搜了一大堆相关资料按照步骤说的来改后依然没什么用的倒霉蛋吧。。这是一件很无助的事情,而且改代码真的很烦…… 造成非零返回的原因很多,但是多数情况下或许并不是你的代码有问题,只是你跳的太快PTA跟不上你的速度罢了……文章只讲这种情况下的解决方法: 对此,你只需要回去从头到尾看一下你的代码,是不是有哪些地方太过聪明、复杂、睿智,或者容易造成歧义,找出这部分代码,然后把他们改成简单语句就OK了 另外了解一下什么是非零返回 非零返回是指:我们的程序的一些语法,在PTA执行的过程中抛出了异常,导致程序没能运行到最后一步return,就导致了非零返回。 但是这些语法在其他编译器上是可以通过的,就是在PTA上不行,反正我在IDE上是可以正确运行出结果的 附上实例↓↓↓ 这是我修改之前的代码: import java.util.Scanner; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner in=new Scanner(System.in); int num=in.nextInt(); for(int i=0;i<num;i++) { if(in.nextInt()==0) { Student s=new Student(in.nextInt(),in.next(),in.nextInt(),in.next(),in.nextDouble()); System.out.println(s.toString()); } if(in.nextInt()==1) { Teacher t=new Teacher(in.nextInt(),in.next(),in.nextInt(),in.next(),in.nextDouble()); System.out.println(t.toString()); } } in.close(); } } class Person{ int id; String name; int bir; Person(int id,String name,int bir) { this.id=id; this.name=name; this.bir=bir;

【智能优化算法-白鲸优化算法】基于白鲸优化算法求解单目标优化问题附matlab代码

1 内容介绍 白鲸优化算法(Beluga whale optimization,BWO)由Changting Zhong等人于2022年提出,该算法模拟了白鲸游泳,觅食和“鲸鱼坠落”行为。 在本文中,提出了一种新的基于群体的元启发式算法,其灵感来自白鲸的行为,称为白鲸优化 (BWO),以解决优化问题。BWO中建立了探索、开发和鲸落三个阶段,分别对应成对游泳、猎物和落鲸的行为。BWO中的平衡因子和鲸落概率具有自适应性,对控制探索和开发能力起着重要作用。此外,还引入了 Levy 飞行以增强开发阶段的全局收敛性。使用 30 个基准函数测试了所提出的 BWO 的有效性,并进行了定性、定量和可扩展性分析,并将统计结果与其他 15 种元启发式算法进行了比较。根据结果和讨论,BWO是解决单峰和多峰优化问题的竞争算法,通过弗里德曼排名测试,BWO在比较的元启发式算法中基准函数的可扩展性分析中的整体排名第一。最后,四个工程问题展示了 BWO 在解决复杂的现实世界优化问题中的优点和潜力。 2 仿真代码 ​ function func_plot(func_name) [lb,ub,dim,fobj]=Get_Functions_details(func_name); switch func_name case 'F1' x=-100:2:100; y=x; %[-100,100] case 'F2' x=-10:1:10; y=x; %[-10,10] case 'F3' x=-100:2:100; y=x; %[-100,100] case 'F4' x=-100:2:100; y=x; %[-100,100] case 'F5' x=-30:1:30; y=x; %[-30,30] case 'F6' x=-100:2:100; y=x; %[-100,100] case 'F7' x=-1:0.03:1; y=x; %[-1.28,1.28] case 'F8' x=-10:0.1:10;y=x; %[-10,10] case 'F9' x=-10:0.1:10; y=x; %[-10,10] case 'F10' x=-1:0.

Win10 如何安装 Nodejs 版本控制器 nvm

Win10 如何安装 Nodejs 版本控制器 nvm 注意:电脑之前安装过 NodeJs 的,必须先卸载掉相关Nodejs,并删除掉相关的缓存文件以及环境配置,否则会导致出现一系列的安装失败的问题! 一、卸载 Nodejs 如果未安装相关 Nodejs,则可以忽略此步骤! 打开控制面板(快捷方式:同时按住Win+ R组合键,等待运行窗口打开后,输入control即可打开控制面板) 选择卸载程序,并点击卸载程序 在程序和功能界面找到相应的 NodeJs 程序,点击鼠标右键点击卸载即可执行卸载操作,按照相关步骤进行即可 二、下载 NVM 软件包 点击版本链接选择相应的版本进行下载即可,本次示例版本号为1.1.9 点击图中的nvm-setup.zip,下载相关压缩包,下载成功以后对其减压 二、安装 NVM 点击其中的nvm-setup.exe文件按照步骤,进行自定义设置,并按照要求完成安装即可 安装成功后,使用管理员权限打开PowerShell(快捷方式:同时按住Win + X组合键,等弹出界面后,点击A,即可打开管理员权限的终端窗口) 在此终端窗口,输入nvm即可查看相关命令信息以及nvm版本号 相关命令解析: nvm arch:设置NodeJs是在32位还是64位模式下运行,默认是操作系统的当前位数 nvm current:查看当前使用的NodeJs版本 nvm install [version] [arch]:根据版本号和位数安装NodeJs,版本可以是特定版本,位数也可以是特定位数,“latest”:表示安装最新版本的NodeJs,“lts”:安装最新的LTS版本。arch:可选参数,可以为32|64|all,“all”:表示安装32位和64位版本。在命令的末尾添加--insecure,可以绕过远程下载服务器的SSL认证,但是不安全 nvm list [available]:查看当前安装的NodeJS版本列表,以及当前使用的版本,available:为具体的NodeJs版本号,根据此命令可以查看某一个版本是否被安装。此命令的简写方式为:nvm ls nvm on:启用NodeJs版本管理 nvm off:关闭NodeJs版本管理 nvm proxy [url]:设置nvm的代理,当有没有代理的时候,可以将其设置为"none" nvm node_mirror [url]:设置NodeJs代理,默认为:https://nodejs.org/dist/ nvm npm_mirror [url]:设置npm代理,默认为:https://github.com/npm/cli/archive/ nvm uninstall [version]:卸载某一个版本的NodeJs nvm use [version] [arch]:切换当前的NodeJs版本,version可以使用“latest”或者"newest",前者表示最新的NodeJs版本,后者为安装的最新的NodeJs版本 nvm root [path]:设置存放NodeJs版本的路径 nvm version:查看nvm版本号 nvm的settings.txt文件内容

Windows子系统的安装与使用

引言 好久没有更新技术博客了,这段时间一直在学习新的知识,涉足大数据技术领域,最近有一些收获,来和大家分享一下。笔者一直用的是windows系统的电脑,但是有时候又需要用到linux系统,对此有3种方案可以实现: 电脑安装双系统;安装虚拟机;安装windows子系统 本文就windows子系统的安装与使用进行详解。 安装windows子系统 1.打开电脑“控制面板”—》“程序” 2.点击“程序”,选择“启用或关闭Windows功能” 3.勾选“适用于Linux的windows子系统”和“虚拟机平台”两项 至此,windows子系统安装完成,接下来安装Ubuntu系统。 安装Ubuntu系统 1.打开电脑中的微软商店Microsoft Store 2.搜索ubuntu,点击免费下载进行下载并安装 3.启动Ubuntu,设置用户名和密码 4.进入系统即可输入shell命令 至此,即可在windows系统中使用linux系统,相关的操作均可实现。

Visual Studio2022安装教程

一、下载 直接下载我给你的网盘文件解压就可以了,也可去官网下载。 百度网盘链接:https://pan.baidu.com/s/14sdHJylEBtf2fU7OcX1YbQ 提取码:1234 官网下载:https://visualstudio.microsoft.com/zh-hans/?rr=https://www.microsoft.com/zh-cn/ 二、安装 1.解压 2.打开解压后的文件夹,鼠标右击需要安装的版本(如:专业版)选择【以管理员身份运行】。 3.点击【继续】。 4.下载安装中…… 5.勾选需要安装的应用(c++或c的代码勾选下面这个就可以了,其他功能也可以等需要用的时候再进行添加)。 6.更改安装或缓存的位置,勾选需要安装的插件(根据自己的需求勾选,点击【安装】。 7.下载安装中…… 8.点击确定 9.点击【启动】 10.点击【以后再说】。 11.点击【启动 Visual Studio】。 12.点击【继续但无需代码】。 13.点击【帮助】选择【注册Visual Studio】。 14.点击【使用产品秘钥解锁】。 15.输入产品秘钥:安装的是专业版输入【TD244-P4NB7-YQ6XK-Y8MMM-YWV2J】;安装的是企业版输入【VHF9H-NXBBB-638P6-6JHCY-88JWH】,社区版无需秘钥;点击【应用】。 16.安装成功!

python求最大公因数的几种方法及思路(附源码)

一.辗转相除法: 顾名思义,先用较大的数除以较小的数,再用较小的数除以前面所取得的余数,以此类推,等余数为0时,便取得了最大公因数,以下图为例,73便是3139和2117的最大公因数。附辗转相除法的解说视频:68.mp4_高清1080P在线观看平台_腾讯视频 (qq.com)https://v.qq.com/x/cover/i20ygjztsvi2sbt/j1422spoxoh.html 相关代码如下: a=3139 b=2117 #t表示a除以b的余数 t=a%b #当余数不为零的时候继续循环,当为0的时候输出结果 while t!=0: a=b; b=t; t=a%b print(b) 二.穷举: i从2一直往上取值,取尽a,b的公因数,保存到n中,最后输出n中的最大值,如果想求两数之间的公因数,把输出结果改为n即可。 a=3139 b=2117 n=[1];i=2 while i<=max(a,b): if a%i==0 and b%i==0: n.append(i) i+=1 while i>max(a,b): break print(max(n)) 三.更相减损法: 用a,b中较大的数字,减掉减小的数字,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止,此时的差值就是最大公因数 a=3139 b=2117 while a!=b: if a>b: a=a-b else: b=b-a print(a)

华为机试(6.17笔试题解析)

华为机试一共三道题,分值分别是100,100,200,满分400分,限时2.5小时。我抽到的这三题相对来说比较简单,满分通过,这里做个总结: 第一题:数据分类 ■ 题目描述 对一个数据a进行分类,分类方法为:此数据a(四个字节大小)的四个字节相加对一个给定的值b取模,如果得到的结果小于一个给定的值c,则数据a为有效类型,其类型为取模的值;如果得到的结果大于或者等于c,则数据a为无效类型。比如一个数据a=0x01010101,b=3,按照分类方法计算(0x01+0x01+0x01+0x01)%3 = 1,所以如果c=2,则此a为有效类型,其类型为1,如果c=1,则此a为无效类型;又如一个数据a=0x01010103,b=3,按照分类方法计算(0x01+0x01+0x01+0x03)%3 = 0,所以如果c=2,则此a为有效类型,其类型为0,如果c=0,则此a为无效类型。输入12个数据,第一个数据为c,第二个数据为b,剩余10个数据为需要分类的数据,请找到有效类型中包含数据最多的类型,并输出该类型含有多少个数据。 输入描述 输入12个数据,用空格分隔,第一个数据为c,第二个数据为b,剩余10个数据为需要分类的数据。 输出描述 输出最多数据的有效类型有多少个数据。 示例1 输入输出示例仅供调试,后台判题数据一般不包含示例 输入 3 4 256 257 258 259 260 261 262 263 264 265 输出 3 说明 10个数据4个字节相加后的结果分别为1 2 3 4 5 6 7 8 9 10,故对4取模的结果为1 2 3 0 1 2 3 0 1 2,c为3,所以0 1 2都是有效类型,类型为1和2的有3个数据,类型为0的只有2个数据,故输出3。 示例2 输入输出示例仅供调试,后台判题数据一般不包含示例 输入 1 4 256 257 258 259 260 261 262 263 264 265 输出 2

Xshell的下载与安装

引言 上一篇文章有介绍Windows子系统的安装与使用,安装Ubuntu桌面版确实可以直接使用Ubuntu子系统,但是Ubuntu桌面版的界面不是很好看,并且不能直接上传文件到服务器中,所以本篇章介绍SSH远程终端工具Xshell的下载与安装,通过Xshell可以实现文件的上传与下载。 下载Xshell 1.在xshell中文官网下载 现在Xshell提供免费授权,点击进入“免费授权页面” 2.填写姓名和邮件,选择下载的软件,之后就会发送到指定的邮箱 3.邮件发送时间可能有点长,也可以在笔者的百度网盘中下载 链接:https://pan.baidu.com/s/1jRUV6dlrZod4AgpyIxVI1w 提取码:z2t7 安装Xshell Xshell的安装过程非常简单,都是一键式next操作。 1.双击运行安装文件,点击“下一步” 2.选择“我接受许可证协议中的条款”,点击“下一步” 3.切换安装目录,点击“下一步” 4.安装完成点击“完成” 操作完后则完成了整个安装过程。 打开软件后弹出个人许可证,点击关闭即可。

mac的node版本安装及升降级

在开发过程中,对于不同的开发环境可能需要切换不同的node版本,此过程会涉及到node版本的升级与降级。 一、安装node版本管理模块n(sudo命令) 1. 全局安装n模块 sudo npm install n -g 2. 安装当前稳定版本 sudo n stable 3.安装最新版本 sudo n latest 4.node版本降级/升级(安装指定 node版本) sudo n 版本号 5.卸载指定 node版本 sudo n rm 版本号 6.检测目前安装了哪些node版本 n 7.切换 node版本(不会删除已安装的其他版本) sudo n 版本号 8.查看 node版本号 node -v 先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

2015年全国大学生电子设计竞赛A题(双向DC-DC变换器)训练总结(硬件部分)

目录 一、任务 二、电路设计 1 主回路电路拓扑图 2 半桥驱动电路 3 电流采样电路 4 电压采样及AD输入保护电路 5 作品实物图 三、调试中遇到的问题 问题一 buck闭环测试测试时,电流由小变大时,输出电压无法稳定,会变小。 问题二 使用稳压源代替电池组进行调试时,无法调节到目标值,使用电池组却可以达到目标值。 四、总结 一、任务 (后面部分省略,原题目很容易找到) 二、电路设计 1 主回路电路拓扑图 从VD到VO是BUCK电路, 从VO到VD是BOOST电路。即可实现双向的DC-DC变换 在平时做题过程中往往指导老师会针对题目给出很有用的经验值,我们自己很少去计算具体的参数。其实理论参数的计算具有很强的支撑力。很重要!之前看过一些资料和博客,但是我感觉讲的都不是很清清楚楚明明白白。最后在知乎上看到了一篇文章写的特别ok是《手撕Buck!Buck公式推导过程》,建议大家去看原文,我就不详细展开了。 2 半桥驱动电路 使用IR2184S驱动芯片,驱动MOS管的通断,实现斩波功能。 3 电流采样电路 电流采样电路如图4所示,通过使电流流过10毫欧合金电阻,在电阻两端产生压降。使用INA286对压降进行100倍放大并输出。 4 电压采样及AD输入保护电路 电流采样使用的是两个电阻进行分压。将目标电压转换到适合单片机采集电压(3.3v以下)。 为防止出现大电压灌入单片机而损坏单片机。所以制作钳位电路,将输入到AD口的电压限制再-0.3V到3.6V。保护单片机。 具体详细内容传送门---->AD输入钳位保护电路_Source_975的博客-CSDN博客_ad保护电路https://blog.csdn.net/next___/article/details/124874576?spm=1001.2014.3001.5501 5 作品实物图 三、调试中遇到的问题 问题一 buck闭环测试测试时,电流由小变大时,输出电压无法稳定,会变小。 原因:电路的走线布局导致。在大电流的回路上,连接线路不是理想的导体,有电阻,电流越大分的电压越多,输出电压就会变小。 解决方法:合理设置电压采样电路的位置,以及预留的电压表测试接口位置。二者紧靠。因为单片机是根据电压采样电路所采集到的值进行计算实现稳压操作。 问题二 使用稳压源代替电池组进行调试时,无法调节到目标值,使用电池组却可以达到目标值。 原因:电池组和稳压源的差异导致。 四、总结 通过全体成员的努力,成功实现了所有功能与指标。完结撒花。再接再励!!!

自制可运行pe的iso

自制可运行pe的iso 准备软件准备文件步骤名词解释结语 准备软件 UltraISO:用于制作可启动的ISOBootice: 用于修改PE引导的BCD启动项Dism++: 编辑wim镜像 准备文件 微软官方ISO镜像 步骤 创建任意一个工作目录。 从微软官方ISO镜像中提取必要文件 双击ISO镜像,挂载。在工作目录中新建Boot文件夹,复制挂载目录的sources\boot.wim, boot\boot.sdi 和 efi\microsoft\boot\efisys_noprompt.bin到其中。 修改Boot.wim 打开Dism++,依次点击 文件 -> 打开镜像文件,选择工作目录的Boot\boot.wim。选择 Windows Setup 的镜像,点击删除映像。选择 Windows PE 的镜像,点击可启动(这会将其转换为可启动WIM),点击退出。 准备EFI文件 生成 打开管理员权限的Windows Terminal。输入 bcdboot c:\windows /s D: /f UEFI,运行后在D盘根目录生成主机的EFI文件夹。复制D盘下的EFI文件夹到工作目录。 修改BCD 打开Bootice,依次点击 BCD编辑 -> 其他BCD文件,选择工作目录EFI\Microsoft\Boot下的BCD文件。点击智能编辑模式,删除原有启动项。点击 添加 -> 新建WIM启动项。设置设备文件为 \Boot\boot.wim,设置SDI文件为 \Boot\boot.sdi。点击保存当前系统设置并关闭。 复制 bootmgr.efi 在EFI文件夹下的Microsoft\Boot 文件夹复制 bootmgr.efi 到工作目录。 制作ISO 打开UltraISO,点击文件 -> 新建 -> UDF DVD 镜像。复制工作目录下的EFI,Boot, bootmgr.efi到UltraISO中。打开 Boot 文件夹,在 efisys_noprompt.bin 右键 -> 设置为引导文件。点击文件 -> 保存 iso 文件。 尝试用虚拟机启动吧!

系统分析师备考经验分享

文章目录 如何备考备考时间关于各科难度总结 前几天软考系统分析师的成绩公布,顺利通过。写这篇博客主要向大家分享一下备考系统分析师的一些经验以及建议。 先介绍一下我自己的一个情况,好让大家有个参照。本人是计算机相关专业毕业的,工作也有7年了,自认为基础还算不错。这次备考系统分析师大概准备了120小时左右。这次考试成绩如下(论文侥幸飘过): 如何备考 先说下本人的备考经历: 最早的时候,我在京东花了200块买了官方的3套教材《系统分析师教材》、《考试全程指导》、《历年真题(到2019年)》。本想通过看书的方式进行备考,书到了一看,好家伙,两本厚厚的教材(6-700页),每页都是密密麻麻的内容,直接劝退。 后面就自己去网上找相关教程,在B站发现不错的视频,是一个老师的试讲视频,但是要听更多得去淘宝买课程。因为价格还可以,同时不想花太多时间去网上找复习资料,我就买了这个课程。为了避免有打广告的嫌疑,具体哪个老师的课程这里不介绍,感兴趣的可以私信我了解。 这里简单介绍一下我报的这个课程,淘宝下单后,就可以去一个学习app上看老师的相关录播课程了(主要讲一些精华考点)。老师每周也会开一次直播课讲解知识点,有问题可以和老师交流。同时还会拉你进一个qq群,里面都是报班的同学,群里还有一些复习资源(比如一本通精华考点等)。 下面总结一下各种备考方式的优缺点: 备考方式优点缺点看官方教材学习到的知识点更加全面书上的内容很多,因此需要记忆大量的内容,同时不知道考试重点 ,加大备考难度。自行在网上找复习资料省钱,也可以找到类似培训班的一本通,明确重点复习内容,节省复习时间找资料比较费时间,另外通过文字资料学习可能没有看视频听老师讲课吸收快。没有一个好的交流环境网上报班有老师总结精华考点,节省复习时间。和自己在网上找资料相比,报班提供了更好的沟通渠道,有什么问题可以得到及时的解答费钱。不同的机构费用不同,从几百到几千都有 总的来说,如何备考因人而异,如果计算机基础比较差(计算机组成原理、操作系统、网络、数据库、软件工程等),建议直接报班跟老师的视频吸收的会快一些。如果基础比较好的,可以自己去网上找找复习资料,结合复习资料来学习。至于官方教材,可买可不买,拿我自己举例,虽然买了官方教材,但是一共也就看了其中的几章(主要是写论文的时候,有些知识点想结合教材上面的深入了解下)。没有书其实相关知识点去网上搜也可以找到很多资料。 当然,如果不想折腾去网上找资料,可以花点钱去买个课。当时我就是懒得去网上找复习资料,加上课程就399,可以反复学(一直到考过为止),因此直接买了个课程。 备考时间 这个也是因人而异的,有条件的,准备时间肯定越多越好。根据我报班老师的建议,最好准备时间在200个小时以上,是比较稳妥的。 根据我自己的统计,我准备的时间大概120个小时,历时两个月。一般就是晚上下班回去复习1-2个小时,周末复习几个小时。下面附上我报班的老师建议的备考时间: 第一阶段学习计划 1、复习目标: 上午选择题考试无忧,掌握系分整体知识结构。 2、复习时间: 约100个小时,个人自己规划。 第二阶段学习计划 1、复习目标: 案例分析、论文写作无忧。 2、复习时间: 约70个小时,个人自己规划。 第三阶段学习计划 1、学习目标: 查缺补漏,不断优化,无论什么题型,都能稳过。 2、学习时间; 约50个小时。 关于各科难度 首先系统分析师的考试分为3门,分别是上午的综合和下午的案例、论文。上午的考试全部都是选择题,只要复习充分,基本没有太大问题。比较难的是下午的案例分析和论文。 首先是案例,可谓是考系统分析师最大的难点。主要是因为它考的知识点比较杂,很多考点甚至不在官方教材上,会考一些当前比较热门的技术,需要考生有一定的知识储备。比如之前考过微服务、一些web技术(就算做web的可能也不一定答的上来)、今年还考了区块链以及分布式事务,这些都是平常我们不会复习到的,全靠平时积累。因此即使你准备的很充分了,系分案例也可能挂掉。 其次是论文,在论文上挂掉的人也挺多的。老师说系分的论文没有案例难,在我看来差不多。我觉的论文的一个难点是需要在2个小时内写够2500多字,基本没有给你太多的思考时间。因此考前提前准备好几篇论文进行押题是必然的。即使押不中,也可以拿之前写过的论文模板来用,可以节省不少时间。这里又体现了报班的一个好处,老师会比较详细的给你讲解论文该怎么写,按一定的模板写,可以节省不少时间。我个人是在考前准备了5篇论文,虽然都没考到,但是好歹积累了一些经验。因此,大家备考时能多准备论文就多准备,有备无患。 总结 总的来说,系分在软考中还是比较难的,即使准备充分,也不一定就能过。这次我能过也多亏论文的评卷老师给了及格分。如果大家只是单纯想考个高级软件工程师的证书,可以考虑下项目管理和系统规划这两个科目,准备充分的话通过的概率会更大些。

Thrift IDL示例文件

Java 示例1: 在src下新建thrift目录,在此目录下新建MyData.thrift文件 namespace java thrift.generated typedef i16 short typedef i32 int typedef i64 long typedef bool boolean typedef string String struct Person { 1:optional String username, 2:optional int age, 3:optional boolean married } exception DataException { 1:optional String message, 2:optional String callback, 3:optional String date } service PersonService { Person getPersonByUsername(1:required String username) throws (1:DataException dataException), void savePerson(1:required Person person) throws(1:DataException dataException) } 然后在IDEA中新建Terminal thrift --gen java src/thrift/MyData.thrift 此时会在项目的根目录下生成代码,然后在src/main/java/com.

(3)Thinkphp6数据库

目录 一.创建数据库 1.管理员表 2.商品分类表 3.商品表 4.菜单表 二.连接数据库 三.执行原生Mysql ​四.框架内-查询操作 五.添加 六.修改 七.删除 要使用Db类必须使用门面方式(think\facade\Db)调用 数据库操作统一入口:Db:: 数据库管理软件:phpMyAdmin(网页数据库管理),Navicat for MySql(Windows软件数据库管理) 以下使用的是phpMyAdmin 一.创建数据库 1.管理员表 CREATE TABLE `shop_admin`( `uid` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户ID', `account` varchar(50) NOT NULL COMMENT '账户', `password`char(32) NOT NULL COMMENT '密码', `name` varchar(50)NOT NULL COMMENT '姓名', `status` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '状态 1开启 2关闭', `add_time` int(10) unsigned NOT NULL COMMENT '添加时间', PRIMARY KEY (`uid`) )ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COMMENT='后台管理员'; ---------------------------------------------------------------------------------- INSERT INTO `shop_admin` VALUES(1,'admin','e10adc3949ba59abbe56e057f20f883e','小鱼',1,1605163389); 2.

IDEA创建Project

1、 2、 3、 4、 这样modules你就可以随意删除以及增加了, 如果还有不明白的地方,可以私信我

教你VSCode如何快速对齐代码、格式化代码

以前经常用VS2013或者VS2017还有VS2019代码工具,对其代码时ctrl+k+d来对齐代码,而现在操作VSCode来对齐代码的时候这个快捷键没用了,因为VSCode有自己的快捷键,如下代码所示: 刚使用VSCode发现代码容易写着容易乱,以前经常用VS2013或者VS2017还有VS2019代码工具,对其代码时ctrl+k+d来对齐代码,VSCode自带也有快捷键,需要先选中需要格式化的代码,然后使用组合键shift + alt +f 进行格式化。 这里你会好奇为啥没有用。因为缺少了一个插件,所以我们这里还要下一个插件。 下载这个插件就可以实现代码对齐了。然后使用组合键shift + alt +f 进行格式化。

ScottPlot入门教程:获取和显示鼠标处的数值

1效果展示 ScottPlot是个非常不错的开源图表库,官方的例程也比较丰富,本文简单举例说明如何获取鼠标处的数值,和官方示例ShowValueOnHover2类似。 2创建Demo工程 创建空白的Winform桌面程序 引入ScottPlot库 右键解决方案,点击Nuget程序包管理,搜索完整名ScottPlot: 引入完成之后设计窗口的工具箱中会出现FromsPlot控件,将其拖放到设计界面中,这里再加两个控件: Button用于点击产生随机数据,Label用于显示鼠标位置的数值,初始位置随意,程序里我们让它跟随鼠标在适当的位置显示。 图中更改了Label的背景色和边框样式,这样看起来好看些。 3代码编辑 双击添加的刷新Button可快速添加监听并进入代码编辑模式。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace ScottPlotTest { public partial class Form1 : Form { public const int MAX_LOG_LENGHT = 1000; private double[] values = new double[MAX_LOG_LENGHT]; private int dataCnt = 0; private ScottPlot.Plottable.SignalPlot signalPlot; public Form1() { InitializeComponent(); /* * 1.设置数据源,自定义X轴标签 */ var plt = formsPlot1.

Win10重启需重新安装声卡驱动,无法使用声音设备解决

Win10重启需重新安装声卡驱动,无法使用声音设备解决 Win + R 键打开运行窗口,输入 services.msc 回车 找到 Windows Audio 服务与 Windows Audio Endpoint Builder 服务,双击打开 将其启动类型修改为自动,点击应用-确定 若打开 service.msc 后查找到 Windows Audio 服务已经为开启状态,请先点击停止,然后点击启动;或者右击该服务点击重新启动。 可以在桌面创建 bat 脚本来重新启动该服务 新建重启音频服务.bat,右键编辑该文件,填入以下内容,每次开机后右键以管理员方式运行该文件 :: 以管理员方式启动 net stop Audiosrv pause net start Audiosrv pause 运行如图: 再重启该服务后,电脑的音量图标可能还是红叉,显示无法使用音频,此时可参考 https://blog.csdn.net/qq_45504119/article/details/104188365 进行设置。

Anaconda 虚拟环境迁移

由于实验室同时有几台服务器,因此需要在不用服务器配置相同的虚拟环境,因此考虑了虚拟环境迁移,绝对成功。 参考链接:不同的Ubuntu服务器上,Anaconda的python虚拟环境迁移_qq_34292087的博客-CSDN博客 前提介绍 Ubuntu18.04 anaconda3.5 迁移目标:python3.6(即上图中的env1) anaconda可以管理多个虚拟环境,在anaconda/envs目录下。假如服务器1上,我们有5个python环境(如上图),我们现在要把env1,复制到新的服务器2上 迁移过程 1、将服务器1上的anaconda/envs/env1,复制一份到服务器2的anaconda/envs下 我这里的环境名字是:Third cd ~/anaconda3/envs scp -r name@原服务器IP:~/anaconda3/envs/Third ./ 2、修改pip文件。pip具体路径:~/anaconda3/envs/env1/bin/pip或者pip3(最好是两个都换一下) 第一行中的python绝对路径需要修改正确!!!(否则pip install 报错) #!/home/lcf/anaconda3/envs/Third/bin/python # -*- coding: utf-8 -*- import re import sys from pip._internal.cli.main import main if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) sys.exit(main()) 把第一行的“#!/home/lcf/anaconda3/envs/Third/bin/python”要修改成目的环境的路径

设计模式之创建者模式中的单例模式、工厂方法模式、抽象工厂模式 主要概要梳理以及各模式优缺点总结

单例模式: 单例设计模式分类两种: 饿汉式:类加载就会导致该单实例对象被创建 懒汉式:类加载不会导致该单实例对象被创建,而是首次使用该对象时才会创建 单例模式的三种推荐实现方式: 双重检查锁方式(懒汉式)静态内部类方式(懒汉式)枚举方式(饿汉式) (还有其他的实现方式,但都有线程安全问题或内存浪费问题,所以推荐使用以上三个) *以上的所有单例实现方式都存在被破坏的可能性【枚举方式除外,因为枚举方式JVM底层已经解决这个问题】 破坏单例模式的两种方式: 序列化和反序列化暴力反射 解决两类破坏的应对方式: 序列化反序列方式破坏单例模式的解决方法 在Singleton类中添加readResolve()方法,在反序列化时被反射自动调用,如果定义了这个方法,就返回这个方法的值,如果没有定义,则返回新new出来的对象。反射方式破解单例的解决方法 抛异常 ================================================================= 工厂模式 简单工厂模式 并不属于23种设计模式中的一种,更多的是一种编程的习惯在 优点: 封装了创建对象的过程,可以通过参数直接获取对象。把对象的创建和业务逻辑层分开,这样以后就避免了修改客户代码,如果要实现新产品直接修改工厂类,而不需要在原代码中修改,这样就降低了客户代码修改的可能性,更加容易扩展。缺点: 增加新产品时还是需要修改工厂类的代码,违背了“开闭原则”。 工厂方法模式 优点: 用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程;在系统增加新的产品时只需要添加具体产品类和对应的具体工厂类,无须对原工厂进行任何修改,满足开闭原则;缺点: 每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类,可能会产生类爆炸。 抽象工厂模式 优点: 相比于工厂方法模式,抽象工厂模式对类进行同一级别和同一产品族的归纳,向上抽取共同点进行抽象类实现,减少类爆炸的可能性当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。缺点: 当产品族中需要增加一个新的产品时,所有的工厂类都需要进行修改。 模式扩展 优点: 模式扩展就是简单工厂+配置文件实现解耦合缺点: 需要在代码中进行读配置文件的操作。也不算缺点,就是写代码的时候更麻烦了,但是使用的时候比较方便,完全实现了类于类之间的解耦合

(1)Thinkphp6入门、安装视图、模板渲染、变量赋值

目录 一、MVC 二.单应用模式访问 三.安装视图 ​四. 模板渲染 五.模板变量 Thinkphp支持传统的MVC(Model-View-Controller)模式以及流行的MVVM(Model-View-ViewModel)模式的应用开发。 一、MVC MVC 软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller) ThinkPHP6 是一个典型的 MVC 架构 控制器—控制器,用于将用户请求转发给相应的Model进行处理,并根据Model的计算结果向用户提供相应响应视图—为用户提供使用界面,与用户直接进行交互。 模型—承载数据,并对用户提交请求进行计算的模块。 MVC架构程序的工作流程: (1)用户通过View 页面向服务端提出请求,可以是表单请求、超链接请求、AJAX 请求等 (2)服务端Controller 控制器接收到请求后对请求进行解析,找到相应Model 对用户请求进行处理 (3)Model处理后,将处理结果再交给 Controller (4)Controller在接到处理结果后,根据处理结果找到要作为向客户端发回的响应View页面。页面经渲染(数据填充)后,再发送给客户端。 二.单应用模式访问 项目访问路径:域名/index.php/index/index index.php 入口文件(可以通过配置伪静态省略) index 控制器 index 方法 文件名与文件里的类名要一致,不然无法自动加载 三.安装视图 新版框架默认只能支持PHP原生模板,如果需要使用think Template模板引擎,需要安装think-view扩展(扩展会自动安装think Template依赖库) composer require topthink/think-view 视图目录可以在根目录,也可以在app应用目录,可以通过config目录下的view.php修改视图配置 四. 模板渲染 要使用View,必须先引入think\facade\View 门面类 模板渲染的最典型用法是直接使用fetch方法,不带任何参数,系统会按照默认规则自动定位视图(view)目录下的模板文件,其规则是:控制器名(小写+下划线)/操作名(方法名字).html controller代码 >> index.php <?php namespace app\controller; use think\facade\View; class Index{ public function index(){ return View::fetch(); } } view代码(注:在app目录下,view目录需要我们手动创建) 一个控制器的接口文件(index.php)需要对应view下同名目录中的一个同名HTML文件。 即:

CorelDRAW2022精简亚太新增功能详细介绍

CorelDRAW 2022上线已经5个月了,很多小伙伴都新增安装并且已经能够熟练掌握了。那CorelDRAW 2022的新功能您都解锁了吗?今天就小编一起来看看CorelDRAW 2022都有哪些新功能以及新功能的使用详解吧!看您还有什么遗漏的新功能没有找到呢! 一 :多资产导出使用详解 很多小伙伴都会使用CorelDRAW 编辑排版及绘制画册,好不容易完成工作,却不知道如何导出。这不,在 CorelDRAW 2022最新版中,就更新了多资产导出功能,可以帮助用户快速导出作品。除了导出功能,多资产导出窗口还能对资产进行管理,我们一起来看看具体用法吧! 新增导出对象或页面 在文档中选择[页面]或[对象],在导出窗口中,点击页面中的[新增]按钮,就可以创建导出对象或页面。这个选中的操作很实用,如果在页面中有很多元素,而需要导出的就只有一个元素,选中该元素,就只会创建该元素对应的导出对象。当然,它也适用于多页面文档中,只想导出部分页面的情况。 导出设置 ① 新增后,在导出窗口就会显示导出列表。在窗口中还可以选择导出的格式, CorelDRAW 2022支持的导出格式有TIF、GIF、JPG、PNG、EPS、PDF、SVG。点击删除按钮可以删除列表中的页面。 ② 点击[设置]按钮,会弹出对话框,在对话框中可以预览导出的页面,并且可以切换多种预览方式。在对话框中,还可以放大缩小页面,设置导出的质量、颜色模式、清晰度等。 ③ 点击[选项]按钮,可以看到[再制]、[使用这些设置添加资产]、[导出项目]这三个选项。[再制]就是复制列表选中的页面或对象,[使用这些设置添加资产]是创建导出资产,并将选中页面中的设置复制到新建的资产上。[导出项目]就是可以对选中的项目执行导出命令。 其他功能 CorelDRAW 2022导出窗口最下方还有一排按钮,从左往右依次是[新增资产]、[默认文件格式]、[全选]、[删除]、[目标文件夹]和[导出]按钮。 二‍:多页视图使用详解 在原有功能的基础上,CorelDRAW 2022版增强了多页视图的功能,它的主要操作有: 1. 创建多页视图 ① 运行软件,点击[创建新文档]。在弹出的窗口中,输入文档名,[页面视图]选择[多页视图],设置好文档的其他参数,点击[OK]进行创建。 ② 创建后在主界面可以看到页面的序号,软件默认创建页面1。 2. 切换多页视图 如果在新建文档时,创建的是单页视图,可以在软件中切换成多页视图。点击菜单栏中[对象],再勾选[页]。在调出的窗口中可以切换为多页视图。 3. 管理多页视图 ① 在[页]窗口中可以设置页的排列布局。 ② 在[页]窗口下方可以设置缩略图的大小和排列方式。 ③ 点击[设置]按钮,可以[新建页面]、[插入页面]、[再制页面]和[删除页面]。新建页面就是在当前页面后新建一个默认的空白页面。CorelDRAW 还提供了另外两种新建页面的方法,一种是点击页窗口下方的[新建页面]的按钮,另一种是点击软件下方的“+”按钮。 ④ 点击[插入页面],会弹出对话框,在对话框中可以设置页码、页面尺寸以及页面方向,点击OK就可以插入一个页面。 ⑤ 点击[再制页面],可以设置插入页面的页码,同时还能选择复制图层和内容。 ⑥ 选中页面,再点击删除页面,就可以删除当前选中的页面。多页视图中至少要有一个页面,所以当文档只有一个页面时,就不能进行删除操作。 ⑦ 选中某个页面,右键单击可以操作当前页面,包括切换页面方向、重命名等。在软件的下方的页面选项卡中也可以进行同样的操作。 有了多页视图,我们可以在一个视图中查看、管理和编辑项目的所有页面。如果有图文排版的需求,使用这个功能再合适不过了!它可以帮助用户快速高效地在多个页面之间移动、排列和设计对象。 更多CorelDRAW 2022的新功能会持续更新,敬请期待! CorelDRAW2022订阅版mac-安装包下载 https://wm.makeding.com/iclk/?zoneid=49497 CorelDRAW2022订阅版win-安装包下载 https://wm.makeding.com/iclk/?zoneid=49498

力扣706. 手写简单hash表(2022.7.30)

706. 设计哈希映射 不使用任何内建的哈希表库设计一个哈希映射(HashMap)。 实现 MyHashMap 类: MyHashMap() 用空映射初始化对象void put(int key, int value) 向 HashMap 插入一个键值对 (key, value) 。如果 key 已经存在于映射中,则更新其对应的值 value 。int get(int key) 返回特定的 key 所映射的 value ;如果映射中不包含 key 的映射,返回 -1 。void remove(key) 如果映射中存在 key 的映射,则移除 key 和它所对应的 value 。 在手写hash表之前,我们首先得了解hash表底层是怎样构成的。hash表在1.8之后是由数组+链表+红黑树构成的,当链表长度大于8并且数组长度大于64时,会发生链表转红黑树,在这道题中,我们不用考虑那么多,只需要实现数组加链表即可 首先我们需要一个数组和链表节点,数组长度我们设为1009,是1000之后的第一个质数,长度为质数时数据可以尽量的均匀分配在数组中 代码如下 class MyHashMap { Node[] table; int len = 1009; class Node { int key; int val; Node next; Node() { } Node(int key, int val) { this.

Linux操作系统——面试题-(腾讯,百度,美团,滴滴)

文章目录 26 Linux 面试题-(腾讯,百度,美团,滴滴)26.1 分析日志t.log(访问量),将各个ip 地址截取,并统计出现次数,并按从大到小排序(腾讯)26.2 统计连接到服务器的各个 ip 情况,并按连接数从大到小排序 (腾讯)26.3 问题:如忘记了mysql5.7 数据库的 ROOT 用户的密码,如何找回? (滴滴)26.4 写出指令:统计 ip 访问情况,要求分析nginx 访问日志(access.log),找出访问页面数量在前 2 位的 ip(美团)26.5 使用 tcpdump 监听本机, 将来自ip 192.168.200.1,tcp 端口为 22 的数据,保存输出到26.6 常用的Nginx 模块,用来做什么(头条)26.7 如果你是系统管理员,在进行Linux 系统权限划分时,应考虑哪些因素?(腾讯)26.8 权限操作思考题26.9 说明 Centos7 启动流程,并说明和CentOS6 相同和不同的地方(腾讯)26.10 问题:列举 Linux 高级命令,至少 6 个(百度)26.11 问题:Linux 查看内存、io 读写、磁盘存储、端口占用、进程查看命令是什么?(瓜子)26.12 使用 Linux 命令计算 t2.txt 第二列的和并输出 (美团)26.13 Shell 脚本里如何检查一个文件是否存在?并给出提示(百度)26.14 用shell 写一个脚本,对文本 t3.txt 中无序的一列数字排序, 并将总和输出(百度)26.15 请用指令写出查找当前文件夹(/home)下所有的文本文件内容中包含有字符 “cat” 的文件名称(金山)26.16 请写出统计/home 目录下所有文件个数和所有文件总行数的指令(在金山面试题扩展)26.17 列出你了解的web 服务器负载架构(滴滴)26.18 每天晚上 10 点 30 分,打包站点目录/var/spool/mail 备份到/home 目录下(每次备份按时间生成不同的备份包 比如按照 年月日时分秒)(滴滴)26.

如何让history历史记录前带时间戳

如何让history历史记录前带时间戳 操作方法: 设置HISTTIMEFORMATE变量. 临时解决方法: export HISTTIMEFORMAT='%F %T ' 永久解决方法:vim /ect/profile export HISTTIMEFORMAT='%F %T '

Apache安装配置(Linux)-有手就行

Apache安装配置(Linux)-有手就行 文章目录 ## Apache(Linux) ## 1.下载 ## 2.解压 ## 3.安装 ## 4.启动服务 ## 5.设置开机自启 ## 6测试 ## 7.总结 Apache是什么? Apache(音译为阿帕奇)是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。 1.下载 网盘链接:链接:https://pan.baidu.com/s/1mmPnDAV6J8kyZq1IfVGBoQ 提取码:cd34 1.1方法一yum: 我本人使用了yum install httpd安装可省去一些步骤,就不需要用到网盘链接里的安装包,适合新手. [root@localhost changling]# cd /usr/local/src [root@localhost src]# yum install httpd #下载apache [root@localhost src]# wget http://mirrors.cnnic.cn/apache/apr/apr-1.7.0.tar.gz #下载APR [root@localhost src]# wget http://mirrors.cnnic.cn/apache/apr/apr-util-1.6.1.tar.bz2 #下载APR-util [root@localhost src]# yum install -y pcre pcre-devel #安装PCRE 1.2方法二(链接) 使用网盘链接下载apache代码如下 [root@localhost changling]# cd /usr/local/src [root@localhost src]# wget http://mirrors.cnnic.cn/apache/httpd/httpd-2.4.46.tar.gz #下载apache [root@localhost src]# wget http://mirrors.

Goland中调用同级目录下、不同级目录下的函数

一、同级目录 要求: 在One文件下有两个文件,分别为main.go和add.go,main.go调用add.go中的Add()函数并输出。 main.go代码: add.go代码: 注意: 1、如果使用的是Goland,在运行时,需要选中两个文件进行运行,否则系统在寻找Add()函数时会报错,显示:Undefined:Add()。由于add.go文件并没有编译,因此在main.go执行的时候无法编译通过。 2、在同级目录下,包名必须是main,否则会显示“Error: Run after the build is not possible The 'main' file has the non-main package or does not contain the 'main' function”。对于独立运行的执行文件必须是 package main。 3、调用其他文件中的函数时,函数名首字母要大写 二、不同级目录 (1)同一文件夹下 要求: 在Two文件下有两个文件,分别为main.go和mul.go,mul.go文件保存在Calc文件夹下。main.go调用mul.go中的Mul()函数。 main.go代码: mul.go代码“ 注意: 1、一定要导入Calc这个包,否则程序找不到Mul()函数 2、main.go文件的包名一定是package main,不能是其他 3、调用其他文件中的函数时,函数名首字母要大写 (2)不同文件夹下 要求: 有两个文件夹分别为:Two和Three,Two文件夹下的main.go调用Three文件夹中Readd文件中的Readd()函数。 main.go代码: Readd.go代码: 注意: 1、一定要导入Three包 2、main.go文件的包名一定是package main,不能是其他 3、调用其他文件中的函数时,函数名首字母要大写

【亲测有效】树莓派4B安装realsense(Intel深度摄像头)

第一步尝试通过pip下载,发现不能下载 pip install pyrealsense2 pip中的pyrealsense2只能下载给X86结构的计算机,并不能下载给arm结构的树莓派,故我们需要获得源码手动进行编译安装 这个是官网的安装教程: https://github.com/acrobotic/Ai_Demos_RPi/wiki/Raspberry-Pi-4-and-Intel-RealSense-D435 不过安装后在启动python后,import pyrealsense2,还是发现报错,于是找到其他方法,进行安装,下面分享我的安装过程和遇到的一些问题解决方案。 本树莓派环境 Linux raspberrypi 5.10.63-v7l+ # 是raspberry pi官方的32位系统,下载包为2021-05-07-raspios-buster-armhf python版本 3.7.3 cmake版本 3.16.3 摄像头型号:Intel D415 #型号影响不大 第一步:安装依赖包 sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade sudo apt-get install git cmake libssl-dev libusb-1.0-0-dev pkg-config libgtk-3-dev sudo apt-get install libglfw3-dev libgl1-mesa-dev libglu1-mesa-dev 前两步必装,第三条用于realsense-viewer,可不装 第二步:下载realsense SDK git clone https://github.com/IntelRealSense/librealsense.git 输入上面命令,如果显示fatal:不能连接到这个网址之类的,我们直接到他的网址下(https://github.com/IntelRealSense/librealsense)下载zip包(librealsense-master.zip),如果树莓派有显示器则我们可以到那个网址下直接下载,没有显示器,我们也可以通过下载到PC机,再通过scp命令传输到树莓派上。下载慢的话可以使用IDM或者迅雷获取安装包的网址进行下载。 第三步:编译准备 在编译之前,我们应该了解一下swap空间这个东西,在编译或者运行其他较大的程序时,有时总卡在99%不能运行下去,有可能就是运行内存不够用,这里建议树莓派4B以下的都扩展一下swap空间,如果4B也有这个问题同样扩展。还有分配太多swap空间,会浪费SD卡的磁盘空间,一般内存小于2G的情况下,交换分区应为内存的2倍。 ①方法一 sudo apt-get install dphys-swapfile # 安装dphys-swapfile,该软件自动设置为内存的两倍大小 sudo nano /etc/dphys-swapfile # 将 CONF_SWAPSIZE 和 CONF_MAXSWAP 这俩值修改成想要的大小,一般内存小于2G的情况下,交换分区应为内存的2倍 sudo /etc/init.

基于python web实现的猫咪信息管理及领养系统

前引: 大二第一次尝试写一个小项目,边学边写,最后写了一个小系统,用来查询和领养校园猫咪并配备了管理员的功能,第一次做完了一个完整的小项目后来用做我的程序设计设计实践和数据库大作业,写一篇博客也算是纪念一下,系统功能比较少,页面和代码都不成熟(纯小白,不喜勿喷),有需要的话自取,源码在我的GitHub里https://github.com/NieYFeng/Cat-adoption-aid-system 系统概述: 需求分析 系统需求分析 通过对学校小猫咪的各项数据的收集与调查,我们设计的系统需求分析图如下图: 功能性需求分析 管理员需求分析 管理员需要做的事情有: 系统用户信息管理猫咪信息管理宠物领养管理信息审核 用户需求分析 用户需要获得的信息有: 个人中心猫咪信息查看猫咪领养申请留言板 非功能性需求分析 (1)注册/登录设计 (2)管理员和用户在浏览网页的时候有数据记录 (3)方便可靠性,系统维护 系统总体设计 数据库设计 猫咪信息表 用户信息表 管理员处猫咪信息表 登录信息表 申请表 留言管理 系统的实现与测试 功能的实现 1 用户注册/登录 2 游客访问界面 3 猫咪信息查询 4 领养申请 5 留言板 6 管理员界面(部分) 部分代码: 用户登录 <head> <meta charset="utf-8" /> <title>猫咪领养系统登录</title> <link rel="stylesheet" href="/static/plugins/bootstrap-3.4.1/css/bootstrap.css"> <style> li { list-style: none; } body { margin: 0; padding: 0; box-sizing: border-box; background-image: url(../static/img/猫咪.jpeg); /* background-image: url(./static/img/猫咪.jpeg); */ background-repeat: no-repeat; /*这里的100% auto 表示将背景图片的长度100%显示,高度自适应*/ background-size: 100% auto; } #maxbox { margin: 0 auto; margin-top: 200px; padding: 20px, 50px; /*这里的90表示以不透明度90%显示*/ background-color:#00000060; text-align: center; width: 600px; height: 400px; border-radius: 10px; } #maxbox h1 { padding: 0; padding-top: 60px; color: white; font-size: 30px; padding-bottom: 4px; border-bottom: solid 1px white; } #maxbox h2 { font-weight: 700; } #maxbox .

a+=a-=a*=a,求a的值为多少

设有语句 int a=3;,则执行了语句 a+=a-=a*=a; 后,变量 a 的值是________。 A. 3 B. 0 C. 9 D. -12 (1)分析:结果为0,要从后往前算,先运算a*=a,变形为a=axa=9,这时候a被赋值为9,这时候在计算时,a就为9,a-=a相当于a=9-9=0,即最后结果为0。 (2)这里要与a += a-=a*a区别开来,axa没有赋值,所以再次计算的时候a为3,a-=9 ,a=-6,这里赋值了,a+=a相当于a=-6-6=-12. 代码运行结果如下 #include <stdio.h> int main(int argc,char *argv[]) { int a=3,b=3; a+=a-=a*=a; b+=b-=b*b; printf("a=%d b=%d\n",a,b); return 0; }

【全网最细致】SpringBoot整合Spring Security + JWT实现用户认证

【全网最细致】SpringBoot整合Spring Security + JWT实现用户认证 登录和用户认证是一个网站最基本的功能,在这篇博客里,将介绍如何用SpringBoot整合Spring Security + JWT实现登录及用户认证 文章目录 【全网最细致】SpringBoot整合Spring Security + JWT实现用户认证 前置知识:Session、Cookie与Token session与cookiesession的弊端tokensession与token的总结 JWT登录及用户认证流程设计前置知识:Spring Security根据自己的项目需求实现SpringSecurity中的部分过滤器正式开始整合Spring Security和JWT pom.xml添加相应依赖写一个JWT工具类写登录认证成功、失败处理器LoginSuccessHandler、LoginFailureHandler写RedisUtil工具类以及验证码配置后端写获取验证码接口验证码过滤器CaptchaFilterJWT过滤器JwtAuthenticationFilterJWT认证失败处理器JwtAuthenticationEntryPoint从数据库中验证用户名、密码:UserServiceDetails、AuthenticationManager、UserDetails无权限访问的处理:AccessDenieHandler登出处理器LogoutSuccessHandler密码加密解密:PasswordEncoder整合所有组件,进行Spring Security全局配置:SecurityConfig 前端需要做什么最后说说SpringSecurity和Shiro的权限管理 前置知识:Session、Cookie与Token session与cookie 在一些传统项目中,我们或许会用session来保存用户信息,进行用户认证。而现在基本上都用token来代替session,为什么会出现这样的变化,我们来聊聊session、cookie以及token 在谈session和cookie前,首先我们来谈谈会话。http本身是无状态协议,服务器无法识别每一次HTTP请求的出处(不知道来自于哪个终端),它只会接受到一个请求信号,所以就存在一个问题:将用户的响应发送给相应的用户,必须有一种技术来让服务器知道请求来自哪,这就是会话技术。 会话就是客户端和服务器之间发生的一系列连续的请求和响应的过程。会话状态指服务器和浏览器在会话过程中产生的状态信息,借助于会话状态,服务器能够把属于同一次会话的一系列请求和响应关联起来。 实现会话有两种方式:session和cookie。Session通过在服务器端记录信息确定用户身份,相应的也增加了服务器的存储压力。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是Session。属于同一次会话的请求都有一个相同的标识符,sessionID,客户端浏览器再次访问时只需要通过sessionID从Session中查找该客户的状态就可以了。那么后端是怎么把sessionID返回给客户端的?可以通过设置cookie的方式返回给客户端,若浏览器禁止cookie,则可以通过URL重写的方式发送。 刚刚提到了cookie,Cookie是服务端在HTTP响应中附带传给浏览器的一个小的文本文件,一旦浏览器保存了某个Cookie,在之后的请求和响应过程中,会将此Cookie来回传递,这样就可以通过Cookie这个载体完成客户端和服务端的数据交互。 使用Session进行用户认证时,当用户第一次通过浏览器使用用户名和密码访问服务器时,服务器会验证用户数据,验证成功后在服务器端写入session数据,向客户端浏览器返回sessionid,浏览器将sessionid保存在cookie中,当用户再次访问服务器时,会携带sessionid,服务器会拿着sessionid从服务器获取session数据,然后进行用户信息查询,查询到,就会将查询到的用户信息返回,从而实现状态保持,流程如下图: session的弊端 服务器压力增大 通常session是存储在内存中的,每个用户通过认证之后都会将session数据保存在服务器的内存中,而当用户量增大时,服务器的压力增大。CSRF跨站伪造请求攻击 一般session是基于cookie进行用户识别的, cookie如果被截获,用户就会很容易受到跨站请求伪造的攻击。即使不用cookie,用重写url方式发送sessionId,那就更容易被截获信息了扩展性不强 想象这么一个场景,若项目在多个服务器上部署,那我再其中一台登录了,称为A,session也保存到A中,万一下次我访问到另外一台服务器B怎么办?B上没有A的session呢?为了解决这个问题,我们需要将session保存到数据库中,所以每次保存这些session信息就是一个负担了,增加了服务器的存储压力。 token token的意思是“令牌”,是服务端生成的一串加密字符串(服务器端并不进行保存),作为客户端进行请求的一个标识。当用户第一次登录后,服务器生成一个token并将此token返回给客户端浏览器,以后客户端只需带上这个token前来请求数据即可,无需再次带上用户名和密码。 浏览器会将接收到的token值存储在Local Storage中,浏览器再次访问时服务器端时,服务器对浏览器传来的token值进行解密,解密完成后进行用户数据的查询,如果查询成功,则通过认证,实现状态保持,所以,即使有了多台服务器,服务器也只是做了token的解密和用户数据的查询,它不需要在服务端去保留用户的认证信息或者会话信息,这就意味着基于token认证机制的应用不需要去考虑用户在哪一台服务器登录了,这就为应用的扩展提供了便利,同时服务器也不需要保存token,token的出现就解决了session的弊端,成为了session的替代品。 使用token进行用户认证的流程如下图: session与token的总结 token 是无状态的,后端不需要记录信息,每次请求过来进行解密就能得到对应信息。 session 是有状态的,需要后端每次去检索id的有效性。不同的session都需要进行保存,但也可以设置单点登录,减少保存的数据。 session与token的选择是空间与时间博弈,为什么这么说呢,是因为token不需要保存,不占存储空间,但每次访问都需要进行解密,消耗了一定的时间。 在一般的前后端分离项目中,token展现出了它的优势,成为了比session更好的选择 JWT JWT其实就是一种被广泛使用的token,它的全称是JSON Web Token,它通过数字签名的方式,以JSON对象为载体,在不同的服务终端之间安全地传输信息。 JWT最常见的使用场景就是授权认证,一旦用户登录,后续每个请求都将包含JWT,系统在每次处理用户请求之前,都要先进行JWT安全校验,通过之后再进行处理。 JWT由3部分组成,用.拼接,如: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ 这三部分分别是: Header Header中保存了令牌类型type和所使用的的加密算法,例如: { ‘typ’: ‘JWT’, ‘alg’: ‘HS256’ } Payload Payload中包含的是请求体和其它一些数据,例如包含了和用户相关的一些信息 { “sub”: “1234567890”, “name”: “John Doe”,

mysql 事务原理详解

前言 事务是mysql Innodb引擎的一大特点,可以说,在日常开发中,对于mysql事务的使用无处不在,因此深入了解并掌握mysql的事务原理很有必要。 一、mysql事务简介 事务 是一组操作集合,一个不可分割的工作单位;事务会将所有操作作为一个整体,一起向系统提交或撤销操作请求,这些操作要么同时成功,要么同时失败; 比如 : 张三给李四转账1000块钱,张三银行账户减少1000元,而李四银行账户的钱要增加1000元。 这一组操作就必须在一个事务的范围内,要么都成功,要么都失败 二、事务四大特性 是事务的四大特性,简称ACID 原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败;一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态;隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行;持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的; 三、事务案例演示 下面来模拟一个事务操作,准备如下一张表,并初始化两条数据,来模拟转账的事务操作; 1) 测试一个正常的操作 -- 1. 查询张三余额 select * from account where name = '张三'; -- 2. 张三余额减1000 update account set money = money - 1000 where name = '张三'; -- 3. 李四余额加1000 update account set money = money + 1000 where name = '李四'; 执行完成后,可以看到效果是预期的; 2)测试异常情况 -- 1. 查询张三余额 select * from account where name = '张三'; -- 2.

报表fastreport

https://blog.csdn.net/fjseryi/article/details/12558621 报表fastreport - 麦麦提敏 - 博客园 (cnblogs.com) 本节主要讲述FastReport报表系统的基本概念、基本操作方法、基本控件使用等内容。 基本概念 最主要的概念是FastReport报表的组成方式和控件主要用途,它一般包括以下方面: *页面(Page) --- 默认为Page1 与我们现实中使用的纸张相似。但它不仅仅指的是一张纸,而是用于我们设计报表的容器。打印出来可以是一张纸也可以是多张。页面(Page)可以有多个(你可以新增页面New Page),即可以有多个报表容器。利用这一点,你可以设计出复合报表(Composite Report)。 利用页面设置可以定义大小、方向、边界、打印方式、分栏等参数。这里不再详述,只特别强调分栏的作用。你可以将页面分成多栏,这样打印时数据将按照从上到下,再从左往右的方式显示。这就是我们通常说的分栏报表(Splite Report)。 *区域(Band) FastReport将整个页面划分成若干个区域。而每个区域有着各自不同的功能,这些功能由FastReport自动加载。一个页面中可以没有区域,也可以只有其中的某些区域,这根据报表的需求而定。放置在页面中的区域有范围,落入区域范围内的控件(例如:TextObject)才具有区域的功能。 重要的区域包括: #报表抬头(ReportTitle) 仅在第一页显示在纸张的上部。一般用于打印报表的标题等信息。 #报表合计(ReprotSummary) 仅显示在所有数据的最后末尾。一般用于打印统计信息等。 #页首(PageHeader) 显示在每页的最上部。通过设置你可以让它置于报表抬头之上或者之下。一般用于打印页眉信息等。 #页脚(PageFooter) 显示在每页的最底部。一般用于打印页序等信息。 #主数据(MasterData) 用于显示数据源的数据,是最重要的区域。在该区域中可以定义连接哪一个数据源,那么该数据源的数据将会按顺序依次将记录打印出。 数据区域还有明细数据(DetailData)等,一共支持6阶数据。利用明细数据可以设计出主从报表、主-细-子细报表等。例如:各类单据的打印报表就是由单据头(主数据)和单据体(明细数据)共同完成的。 在打印时,明细一级的数据是受上一级主数据的控制,因此需要进行相关设置。 #头(Header) 显示在所有数据源的最上部,仅打印一次。一般用于显示相关摘要信息。 #尾(Footer) 显示在所有数据源的最下部,仅打印一次。一般用于显示所有数据的合计信息。 #栏首(ColumnHeader) 显示在每页数据源的上部,它在每页均显示。因此一般用于打印数据源字段的栏目信息。 #栏尾(ColumnHeader) 显示在每页数据源的下部,它在每页均显示。一般可用于统计显示每页数据的页合计信息。 #群组首(GroupHeader) 用于显示分组数据,在每一个分组开始显示。一般可用于显示分组索引数据。例如:将商品档案按商品分类分组显示,在群组首你可以显示商品分类名称。利用群组首可以设计出分组报表,关键是数据源必须按分组索引的字段排序才能达到分组的效果。群组首可以有多个,即可以嵌套使用。 另外,可以设置让分组索引数据在报表预览时显示在左侧的树型列表框(OutLine)中。 #群组尾(GroupFooter) 与群组首一一对应。一般用于显示分组数据的统计信息。 #子(Child) 是一个独立的区域。你可以设置子区域隶属于上述区域中的任何一个。在打印时,打印完父区域后,子区域将会跟随打印。一般可用于打印装饰线、调整高度或者打印子报表(SubReport)。 #重叠(overlay) 该区域内包含的内容将从页的开始位置计算打印,而不受其他功能区域的影响。一般用于无法在其他功能区域打印的内容的显示。 *对话框(DialogPage) 你可以通过设计对话框完成对数据源进行动态控制的目的,这也是设计复杂报表的重要手段。 对话框主要通过各种输入数据控件来接受客户的查询请求,因此可以学习几种主要的控件。 #标签(Label Control) --- 用于显示文字信息。使用Caption属性修改文字信息。 #文本编辑框(Edit Control) --- 用于接收用户录入的文字信息。使用Text属性修改文字信息。 #按钮(Button Control) --- 一般用于确定和取消。使用Caption属性修改文字信息。 #多选框(CheckBox Control) --- 用于用户对条件的选择。使用Checked属性确定是否。 #单选框(RadioButton Control) --- 用于用户对条件的单一选择。使用Checked属性确定是否。 #下拉框(ComboBox Control) --- 用于用户对多个数据列表的选择。使用Text属性修改当前文字信息,使用Items属性填充列表信息。 #时间框(DateEdit Control) --- 用于用户对时间的选择。利用Date属性改变时间。 *文本对象(Text Object)

魅族MX4安装Ubuntu Touch 16.04

Ubuntu Touch目前仍然有很多的缺陷,其中网络问题在16.04中就比较严重,会表现为高延迟和丢包 魅族MX4安装Ubuntu Touch 16.04 请注意自行备份数据 1、手机flyme降级 先降级至4.5.7A,再降级到4.2.8.2A 将固件拷贝到存储卡根目录→关机→同时按电源键和音量加键,进入系统升级模式;勾选“系统更新”,同时勾选“清除数据”,点击“开始”进行系统升级;系统升级时,请勿关机;系统升级完成后,手机会自动启动;进入系统设置→关于手机查看系统版本。 1、获取手机root权限 推荐使用kingoroot PC端(注意不是kingroot),可以顺利root,使用官方账号解锁的办法已经不可用 2、解锁bootloader和刷入第三方recovery 安装“魅族手机综合工具箱”中unlock.apk(ApkIDE_MX4_Unlock_BL.apk),一键解锁,同时会刷入第三方recovery,注意需要上一步获取的root权限 3、重新划分cache、userdata、system分区大小 按住音量+和电源键,重启进入recovery模式 运行adb进行分区,分区之前在recovery中卸载data,cache和system分区 # 查看设备,注意驱动安装不正确会不显示消息,到win10可选驱动中安装fastboot等驱动 adb devices # 进入shell adb shell # 查看分区信息 parted /dev/block/mmcblk0 unit MB print # 删除分区 rm 16 rm 15 rm 14 # 重新分区 mkpartfs system ext2 629 2677 name 14 system mkpartfs cache ext4 2677 4725 name 15 cache # 注意32G版本最后为31251 mkpartfs userdata ext4 4725 15617 name 16 userdata recovery设置中依次格式化cache,system,data(data要选格式化包括内置储存的一项)

yolov5依赖库安装

上一篇文章中已经在Anaconda中建立了一个pytorch的虚拟环境,在这个环境中安装yolov5的依赖库。(其实应该新建一个虚拟环境,在这个里面安装依赖库) 进入Anaconda Prompt,激活pytorch虚拟环境 将requirements.txt放在C盘用户文件夹下 否则会提示找不到文件 输入下面的安装命令 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple --ignore-installed 安装结束出显示安装了那些包 这样就将yolov5所需的依赖库安装在了Anaconda中创建的虚拟环境中了。 ps:用国内源安装速度挺快的,不要自己下载.whl文件安装,不然各个包的版本之间可能会出现很多问题。 安装过程中遇到的问题 用上面的方法安装应该不会遇到什么问题,记录一下自己安装环境过程中走的弯路。 1 最初安装环境的时候是在pycharm中打开Terminal,直接输入pip install -r requirements.txt 进行安装,这样做的问题主要有: 1)依赖库不是安装在虚拟环境中,因此安装之后运行yolov5也会报错,要求安装所需的以来库,因为python是安装在虚拟环境中的; 2)此时使用的是国外的网站,网速很慢,很容易断。 2 因为前期需要依赖库是自己下载.whl文件手动安装的,出现很多问题,比如: twisted 18.7.0 requires PyHamcrest>=1.9.0, which is not installed. cryptography 3.3.2 requires cffi>=1.12, which is not installed. conda 4.13.0 requires ruamel_yaml_conda>=0.11.14, which is not installed. 这个问题是说twisted 18.7.0 等需要的库没有安装,可以用pip安装(此时不需要添加国内源链接) pip install PyHamcrest>=1.9.0 pip install cffi>=1.12 但是安装ruamel_yaml_conda>=0.11.14时用pip安装会报错(并没有解决) 也可能出现下面的问题 cryptography 3.3.2 requires cffi>=1.12, but you have cffi 1.

chrome屏蔽右上角更新提示

win10/11系统chrome浏览器屏蔽右上角更新提示 位于桌面或开始菜单的快捷方式位于任务栏的快捷方式 chrome浏览器新版本可能对一些旧代码的兼容性没有老版本的好,安装旧版本的chrome浏览器右上角一直弹出更新提示,每次都得手动关闭,迟早会被逼成强迫症,真是叔叔不可忍,婶婶也不可忍。 话不多说,莽他! 位于桌面或开始菜单的快捷方式 1. 右键–>更多–>打开文件位置 2. 右键快捷方式,选择“属性”,在“快捷方式”下“目标”一栏末尾添加上 –disable-background-networking(前面有个空格隔开),应用。 C:\Users\27462\AppData\Local\Google\Chrome\Application\chrome.exe --disable-background-networking 位于任务栏的快捷方式 任务栏的快捷方式位置和开始菜单的路径是不同的,可以通过如下方式找到任务栏的快捷方式路径: 1. 直接使用提供的路径 任务栏路径:C:\Users\用户名\AppData\Local\Google\Chrome\Application 开始菜单路径:C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs 2. 手动查找 关闭chrome,按住Shift键,右键chrome,选择“属性” 右键快捷方式,选择“属性”,在“快捷方式”下“目标”一栏末尾添加上 –disable-background-networking,应用。 注意:若win11系统不生效,可以选择在目标那一栏的启动方式前后加上半角双引号(英文输入法模式下的双引号),即: “C:\Users\27462\AppData\Local\Google\Chrome\Application\chrome.exe” --disable-background-networking

RMAN备份详解

认识RMAN RMAN(Recovery Manager)是ORACLE恢复管理器的简称,是集数据库备份(backup)、还原(restore)和恢复(recover)于一体的工具。接下来了解一下RMAN中的几个重要概念。 (1)RMAN档案资料库 RMAN档案资料库用于存储数据库备份、还原以及恢复操作时所需要的信息。这些信息包括从目标数据库控制文件获取的数据库物理结构信息,以及RMAN备份与恢复过程中生成的信息。RMAN档案资料库可以保存在目标数据库的控制文件中,也可以保存在一个独立的恢复目录数据库的恢复目录中。 (1.1) 将RMAN档案资料库保存在控制文件中 控制文件包括不可重用的记录和可重用的记录,不可重用的记录主要是数据文件、联机重做日志文件等不经常变化的、关键性的信息;可重用的是记录数据库运行过程中不断生成的信息,包括重做日志文件的历史信息、已归档的重做日志文件的历史信息、备份信息等。 (1.2) 将RMAN档案资料库保存在恢复目录中 如果要使用恢复目录保存RMAN档案资料库,需要先创建一个独立于目标数据库的恢复目录数据库,专门用来存储和管理RMAN档案资料库信息。一个恢复目录可以被多个目标数据库使用,只要将目标数据库注册到恢复目录中即可。 RMAN恢复目录主要包括以下信息: --目标数据库的数据文件与归档重做日志文件的备份信息; --目标数据据库数据文件的镜像复制信息; --目标数据库中表空间与数据文件的关系; --存储用户建立的RMAN脚本,可以重复使用; --永久性的RMAN预定义配置参数信息。 (2)RMAN通道 在RMAN中进行任何类型的备份、修复或恢复操作时,都需要为这些操作分配通道,一个RMAN通道表示到一个存储设备的数据流,对应目标数据库的一个进程,由服务器进程来完成数据库的备份与恢复工作。RMAN支持的通道设备类型包括磁盘(Disk)与SBT(System Backup To Tape)。SBT是指第三方介质管理器管理与控制的存储备份,主要是磁带库和磁带驱动器。 (3)RMAN预定义配置参数 RMAN环境中有一系列的预定义配置参数,又称为RMAN环境变量,自动作用于所有的RMAN会话。可以使用show all命令查看预定义参数的配置 RMAN> show all; CONFIGURE RETENTION POLICY TO REDUNDANCY 2; #设置备份保留策略 CONFIGURE BACKUP OPTIMIZATION OFF; # default #启用或禁用优化功能 CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default #设置默认的备份类型 CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default #设置控制文件自动备份 CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default #控制文件自动备份的格式

ESP32 入门篇(一)使用 VS Code 进行开发环境安装

VS Code 是什么 官方介绍如下: ::: block-1 Visual Studio Code is a lightweight but powerful source code editor which runs on your desktop and is available for Windows, macOS and Linux. It comes with built-in support for JavaScript, TypeScript and Node.js and has a rich ecosystem of extensions for other languages and runtimes (such as C++, C#, Java, Python, PHP, Go, .NET). Begin your journey with VS Code with these introductory videos.

我理解的算法 - 53.最大子数组和(超经典多种解法:强推、动态规划、Kadane算法)

我理解的算法 - 53.最大子数组和(超经典多种解法:强推、动态规划、Kadane算法) 题目暴力解法(超时)强推解答法动态规划Kadane算法 题目 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。 示例 1: 输入:nums = [-2,1,-3,4,-1,2,1,-5,4] 输出:6 解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。 示例 2: 输入:nums = [1] 输出:1 示例 3: 输入:nums = [5,4,-1,7,8] 输出:23 提示: 1 <= nums.length <= 105 -104 <= nums[i] <= 104 进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的 分治法 求解。 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/maximum-subarray 暴力解法(超时) 这道题目也是非常经典,虽为简单题,其实如果推敲其中的解题方法,着实不简单,会有很多惊喜, 我们先从题目出发,顺着题目来解,最容易想到的肯定是暴力解法 我们组合出来所有的子数组,并计算其每个子数组的和,然后取最大的值即为答案,直接上代码 public int maxSubArray(int[] nums) { int maxSum = nums[0]; for(int i = 0; i < nums.

实现OCR语言识别Demo(二)- 图片及识别内容的展现和交互

实现OCR语言识别Demo(二)- 图片及识别内容的展现和交互 实现图片展现OCR识别内容的绘制OCR识别内容的点击效果实现 上一篇文章中(想要回顾的可以看这里),我们实现了BottomSheet,那么这篇文章中,我们要来实现图片展现及识别内容展现了 实现图片展现 我们有2种方式去选择我们的图片,一种是通过选择本地的相册的图片,另一种是通过拍照获得,我们来实现这两种方式 MainActivity.kt override fun onCreate(savedInstanceState: Bundle?) { ... super.onCreate(savedInstanceState) bindListeners() ... } private fun bindListeners() { open_take_pic.setOnClickListener { takeImage() } open_select_image.setOnClickListener { selectImageFromGallery() } } private val takeImageResult = registerForActivityResult(ActivityResultContracts.TakePicture()) { isSuccess -> if (isSuccess) { latestTmpUri?.let { _ -> CoroutineScope(Dispatchers.IO).launch { val compressedImageFile = Compressor.compress( applicationContext, takeImageTempFile!! ) image_preview.clearOcrBoxes() adapter.submitList(mutableListOf()) previewPhoto(compressedImageFile) postImage(compressedImageFile) } } } } private val selectImageFromGalleryResult = registerForActivityResult(ActivityResultContracts.GetContent()) { uri: Uri?

Origin(Pro):3D图-投影、垂线、标签

以XYZ形式的数据为例,Country列为标签。 插入3D Scatter图,首先设置散点的颜色、大小等格式。 三维图的投影(Projection)、垂线(Drop lines)和标签(Label)均在Plot Details对话框下设置。 1、投影(Projection):在Plot Details对话框下,勾选Original下面的Projiection选项,即可在坐标屏幕上显示散点的投影(Projection),同样可以设置投影(Projection)点的大小、颜色等格式。 2、垂线(Drop lines):在Drop Lines选项卡下,勾选Parallel to X/Y/Z Axis,同样可以设置垂线(Drop lines)的颜色等格式。 3、标签(Label):在Label选项卡下,勾选Enable显示标签,Label from中选择Col(G): Country,即以G列数据为标签。同样可以设置标签的颜色、字体、位置、旋转角度以及Leader Line等。

vue计算属性与监听器

一.计算属性 1.定义:要用的属性不存在,要通过已有属性计算得来。 2.原理:底层借助了objcet.defineproperty方法提供的getter和setter. 3.get函数什么时候执行? (1).初次读取时会执行一次。 (2).当依赖的数据发生改变时会被再次调用。 4.优势:与methods实现相比,内部有缓存机制(复用),效率更高,调试方便. 5.备注: 1.计算属性最终会出现在vm上,直接读取使用即可。 2.如果计算属性要被修改,那必须写set函数去响应修改,且set中要引起计算时依赖的数据发生改变。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <script src="../vue2.0+3.0/vue.js"></script> </head> <body> <!-- 计算属性: 1.定义:要用的属性不存在,要通过已有属性计算得来。 2.原理:底层借助了objcet.defineproperty方法提供的getter和setter. 3.get函数什么时候执行? (1).初次读取时会执行一次。 (2).当依赖的数据发生改变时会被再次调用。 4.优势:与methods实现相比,内部有缓存机制(复用),效率更高,调试方便. 5.备注: 1.计算属性最终会出现在vm上,直接读取使用即可。 2.如果计算属性要被修改,那必须写set函数去响应修改,且set中要引起计算时依赖的数据发生改变。 --> <div id="root"> 姓:<input type="text" v-model="firstName"><br><br> 名:<input type="text" v-model="lastName"><br><br> 全名:<span>{{fullName}}</span> </div> <script> Vue.config.productionTip = false;//阻止 vue 在启动时生成生产程序 const vm = new Vue({ el:'#root', data:{ firstName:'张', lastName:'三' }, computed:{ fullName:{ //get有什么作用?当有人读取fullName时,get就会被调用,且返回值就作为fullName的值 // get什么时候调用?1.

机械革命开启Hyper-V安装Docker无限蓝屏(已解决)

安装Docker时会蓝屏 安装Docker时会蓝屏,起初以为是docker/系统问题,后来经过仔细的检查,发现是只要开启虚拟化就会蓝屏,再检查好像硬件虚拟化有点问题,一番查找之后方知是bios的问题 CODE01需要升级到1.07版本 官方地址:https://www.mechrevo.com/service/ BIOS版本升级,只需要管理员身份运行F.bat脚本即可。接下来就是等待脚本自动运行重启,如遇到蓝屏问题,及时询问官方客服。如果还是蓝屏,BIOS重新恢复默认设置,设置Lanch cms 保存重启即可 参考:https://blog.csdn.net/wujuncheng1996/article/details/118438161

python/Pytharm 常用快捷键

python入门 常用快捷键 快捷键功能快捷键功能ctrl+z撤销上一级命令(Pytharm页面中View->Appearance->Toolbar调出该功能)Ctrl+Shift+Z还原撤销的命令Ctrl+Q快速查看文档Ctrl+ F1显示错误描述或警告信息Ctrl+/行注释(可选中多行)Ctrl + Alt+L代码格式化ctrl+alt+左箭头返回上一个光标的位置(CTRL进入函数后返回)ctrl+alt+右箭头前进到后一个光标的位置Ctrl+Alt+I自动缩进Ctrl + Alt +o自动导入Ctrl+Shift+F7讲当前单词在整个文件中高亮,F3移动到下一个,ESC取消高亮Ctrl+C/Ctrl+lnsert复制当前行或选定的代码块到剪贴板Tab / Shift + Tab缩进、不缩进当前行(可选中多行)Ctrl + Shift +/块注释Ctrl+ D复制选定的区域Shift + Enter换行Ctrl + J插入模版Ctrl+Delete删除到字符结束Ctrl + Numpad+全部展开Ctrl + Numpad-全部折叠Ctrl + Backspace删除到字符开始ctrl+B/鼠标左键车专到方法定义处Alt+ up/down方法上移或下移动Alt + Shift + up/down当前行上移或下移动Ctrl +E最近访问的文件Esc从其他窗口回到编辑窗口Shift+ F6方法或变量重命名Shift + Esc隐藏当前窗口,焦点到编辑窗口F12回到先前的工具窗口Shift +F10运行Ctrl + Shift + up快速上移某一行Ctrl + Shift +down快速下移某一行Ctrl + R替换ctrl +F当前文件查找Ctrl + Shift + R全局替换ctrl + Shift+F全局查找 参考链接: (3条消息) Pycharm常用的小技巧汇总,Python新手上路必备,快上车!_退休的龙叔的博客-CSDN博客_pycharm使用技巧 Pycharm常用快捷键 - 知乎 (zhihu.com)

Docker (容器) 的原理详解(--超详细--)

第一次接触 docker 的人可能都会对它感到神奇,一行 docker run,就能创建出来一个类似虚拟机的隔离环境,里面的依赖都是 reproduceable 的!然而这里面并没有什么魔法,有人说 Docker 并没有发明什么新的技术。确实是,它只不过是将一些 Linux 已经有的功能集合在一起,提供了一个简单的 UI 来创建“容器”。 这篇文章用来介绍容器的原理。 什么是一个容器?我们从容器的标准开始说起。 一、OCI Specification OCI 现在是容器的事实标准,它规定了两部分的标准: Image spec:容器如何打包Runtime spec:容器如何运行 Image Spec 容器的运行时是通过 Image 创建的,Image Spec 规定了这个 Image 里面要放什么文件。本质上,一个 Image 就是一个 tar 包。里面一般包含这些内容: 1 2 3 4 5 6 ├── blobs │ └── sha256 │ ├── 4297f01aae8e36da1ec85e36a3cc5a4b11aa34bcaa1d88cc9ca09469826cb2bf (image.manifest) │ └── 7ea0496f252ea46535ea6932dc460cb7d82bfc86875d9d2586b6afa1e8807ad0 (image.config) ├── index.json └── oci-layout manifest 里面包含 config 和 layers,其中 config 包含以下内容的配置: 创建运行时(container)的时候需要的配置;layers的配置image 的 metadata layers 就是组成 rootfs 的一些文件。base 层的 layer 有所有的文件,之后的 layer 只保存基于 base 层的 changes。在创建容器的时候需要打开这个 Image,先找到 base layer,然后将之后的 layer 一个一个地 apply changes,得到最后的 rootfs。

pandas - read_csv报错:‘utf-8‘/‘gbk‘ codec can‘t decode byte 0xb1 in position 0:invalid start byte

文章目录 问题描述原因解决方法 问题描述 桌面上有个Excel文件,转换为csv文件后,导入jupyter notebook,read_csv报错: ‘utf-8’/‘gbk’ codec can’t decode byte 0xb1 in position 0: invalid start byte 原因 Excel文件转换为csv文件后,编码格式为 ANSI ,jupyter notebook/python无法读取。 解决方法 将csv文件编码格式改为UTF-8格式。 首先,查看csv文件是什么编码格式,如果不是UTF-8,修改后重新上传读取。 如何查看csv文件是什么编码格式? 选中文件,右键——>打开方式——>记事本,右下角显示编码格式 如果编码格式不是“UTF-8”,如何修改? 记事本——>文件——>另存为,选择UTF-8格式 import pandas as pd df = pd.read_csv("XXX.csv") print(df) 最后,重新导入csv文件,就可以读取数据啦~

git log查看提交的Author是由谁决定的呢?

git log查看提交的Author是由谁决定的呢? ##背景 最近给某个开发人员aa开通了gitlab账号,账号是aa,邮箱是aa@qq.com,但是通过git log命令查看aa开发人员的提交记录时,Author确显示的是bb,邮箱是bb@qq.com,那么这个Authon到底是由谁决定的呢? 一、本地仓库 ##查看 $ git log 查看 Author中的名字是由本机中设置的 user.name和 user.email决定的,可通过 git config --list 查看 二、远程仓库(gitlab仓库) 三、总结 1、本地仓库 git log 查看到的Author 就是本地的 user.name 2、远程仓管(gitlab仓库) 查看到的Author 就是gitlab里面开的用户名,也就是你的公钥提交在哪个账户下就是哪个Author 好了,这就是git log查看提交的作者是由谁决定的方法了,如有问题可与博主一起交流讨论!