上篇文章我们介绍了MySQL数据库的安装,对于日常的MySQL数据库使用者来说已经够用了,但是对于MySQL数据库的开发人员还需要对MySQL的开发环境进行配置,本篇文章详细介绍了MySQL在Windows和Linux下开发环境的配置。
MySQL安装教程:https://blog.csdn.net/weixin_64647426/article/details/134105615
MySQL提供了可供开发的官方库文件,但在MySQL数据库开发之前需要将官方提供的库文件配置到开发的项目中,才能进行数据库开发的操作,所以学会MySQL开发环境的配置是至关重要的。
Windows下配置 MySQL开发头文件和库文件 找到MySQL的安装目录(因个人安装位置而意)
在安装目录下找到lib和include目录
记录下include和lib的绝对路径
如果是Linux环境,则一般在/usr/include/mysql
在lib下面有这样几个文件
这三个文件分成两组
mysqlclient.lib一组,为c/c++下静态库引用,使用这个静态库,其他的那两个库都不需要了;一般在Linux编程下会使用这个库libmysql.lib和libmysql.dll一组,为c/c++下动态库引用,其中dll是为了可以使程序能够正常的运行(要与exe在同一个目录下);其中lib是给编译器使用的,相当于一张表,告诉编译器去dll里找函数的实现,而不是等着我自己实现,起到指引的作用。 而Linux下,则是引用/usr/lib/x86_64-linux-gnu/libmysqlclient.a作为静态库引用或者引用/usr/lib/x86_64-linux-gnu/libmysqlclient.so作为动态库引用
建立项目并配置环境 首先新建一个VS的"控制台应用"项目
把MySQL下的include文件夹和那三个库(使用静态或动态导入对应的库文件就可以)文件复制到项目目录下
设置MySQL的include路径
右键项目点击属性→点击VC++目录→在"包含目录"下添加include
导入动态库的那个静态库
右键项目点击属性→点击链接器→点击输入→在"附加依赖项"中添加libmysql.lib
也可以用代码的方式来导入库(只有VS下好使,Linux是不行的):#pragma comment(lib, "libmysql.lib")
到这里头文件引用和库的导入就完成了,下面我们就用代码在测试一下
代码测试 #include <iostream> #include <mysql.h> int main() { MYSQL* mysql = new MYSQL(); MYSQL* pDB = mysql_init(mysql); if (pDB == NULL) { std::cout << "mysql_init failed!" << std::endl; return 0; } mysql_real_connect(pDB, "localhost", "root", "******"/*替换成你对应用户的密码*/, "mysql", 3306, NULL, 0); mysql_close(pDB); return 0; } 用上面的代码对我们环境的配置进行设置,你会发现编译有问题
问题 在上面的代码进行编译的时候,会出现编译不通过的问题,我们来看他给出的问题
目录
展示图:
设计逻辑:
moni.html
moni.css
注册登录功能:
展示图: 设计逻辑: 注册{ 注册
用户名
方框(请输入用户名)
密码
方框(请输入密码)
已注册,去登录
}
登录{ 登录
账号
方框(请输入用户名)
密码(请输入密码)
没有账号,去注册 忘记密码
}
<body></body>这个标签是一个页面的所有 按照注册登录界面的颜色,我们可以这样写
前端页面要得到css的布局,就得在html页面里调用css文件
例如:我创建了 moni.html moni.css
<link href="/css/moni.css" type="text/css" rel="stylesheet"> 效果展示:
下一步:制作白色盒子
css中
.a{ width: 340px; background: white; position: absolute; top: 50%; left: 50%; transform: translate(-50%,-50%); border-radius: 5px; } 写完这一步,然后再去运行,是没有东西的,但是并不是不存在
这么设计是因为他根据你写的内容而改变高度
如果要固定他的高度
在.a{ } 添加height=400
效果:
如果不加,我们可以根据内容的多少,设计多少白色的部分
继续接下去写
html中
根据设计逻辑,我们先写第一行文字(注册)
css中
效果
.b{ } 是针对注册两个字后面的白色部分进行布局
目录
1 引入
2 效果
编辑3 Latex代码示例
关键语句:
代码解释:
本文转自:
教你一个小技巧给latex表格添加脚注 (非footnote)_latex 图形的尾注_因吉的博客-CSDN博客
1 引入 Latex表格中通常会出现一些符号用于特殊含义表示,如最高分类精度等。本文则是对如何在表格中进行脚注进行示例。
2 效果 3 Latex代码示例 \documentclass{article} \usepackage{booktabs} \usepackage{multirow} \usepackage{rotating} \usepackage{tabularx} \begin{document} \begin{table*}[!htb] \caption{Test} \label{table: performance comparison} \centering \resizebox{\textwidth}{!}{ \begin{tabular}{crrrrrrrrr} \toprule Data set & A & B & C & D & E & F & G\\ \midrule Musk1 & $0.671\pm0.046$ & $0.156\pm0.008$ & $0.596\pm0.010$ & $0.247\pm0.032$ & $0.718\pm0.026$ & $0.602\pm0.046$ & $\bullet0.140\pm0.013$\\ Musk2 & $0.
用QGIS输出的数据类型为UInt16的TIFF文件,无法在GIMP中打开。
GIMP消息提示:
调查 用ImageMagick打开TIFF文件,虽然会出现警告,但是最终还是打开了:
在ImageMagick中重新保存后,就可以用GIMP打开了。使用tiffinfo工具查看,提示:
初步怀疑是这些tag的问题。调查这些tag的含义,果然是GeoTIFF相关的。具体可查看TIFF Tag Reference, Private TIFF Tags找到了GIMP issue 9691,也有相应的补丁,只是还没正式发布。 结论 QGIS输出这些tag是没问题的,只是GIMP目前暂时不支持,ImageMagick支持也不是很好。
解决办法是使用打上相应补丁的GIMP版本,或者使用其它支持这些GeoTIFF标签的工具,或者只要不影响工具链后续工具的处理就可以忽视此问题。
参考 略,都在上面文章的链接里了。
大家好,我是誉天的数通学员,前段时间刚刚通过了HCIE认证考试,这里给大家分享一下我的考试经验与心得,希望对大家有所帮助。
我预约的是11月3日的杭州考场,考试前一天我就到了杭州,在中医药大学地铁站边上的酒店入住休息。这里提醒下大家,酒店要尽量选个环境好点儿的,休息好了第二天考试的时候精神才会更好。
11月3日早上,八点左右我就到了考场。再次提醒大家,杭州考场附近基本没有什么早餐可以吃,建议前一天晚上到便利店或者什么地方买个面包啥的第二天早上吃,保证足够的能量去应对上午的考试。
8点半左右监考老师就会带着考生入场了,然后就是拍照之类的常规流程。刚进入考场是看不了题目的,必须得点击开始考试才能看到题目。所以进入考场之后,要先按照考场给的账号密码登入设备,需要注意的是,没有预配的设备都是默认的密码。小飞机上都有,可以直接点然后进入设备。进入设备后我第一时间进入Z园区的PE设备看型号,确认考试题目,我遇到的是SRV6。这个时候监考老师还在讲考试需要注意事项,我就先趁着这个时间去写SR的脚本。
然后点击开始考试,直接登入campus账号,进行Y园区的操作。各位注意咯,誉天学习群里Y园区的区别一定要看。虽然考试的大多数情况和平时练习没有什么区别,但有些细节还是有所差异的,不看那个文档的话真不一定知道在哪能操作。
我在Y园区部分做得比较顺利,设备上线测试都没问题。到了做透传节点的时候,题目上是没有透传节点这几个字眼的,所以我还以为是做边缘节点。结果在接入设置那里我没有找到边缘节点才有的地址。这个时候才恍然大悟,知道是做错了,应该做透传节点才对。
所以考试的时候一定要多看题,而且考前一定要多看誉天给的资料,很多细节都在资料和题目里。过了这个小波折,后面的Y园区就很顺利了,基本和誉天给的资料一模一样,没有再遇到其他问题,所以上午就做完了Y园区、Z园区。
杭州考场的午餐是在外面餐桌上吃的,吃完饭休息了大概20分钟,时间不到不让进考场。下午进入考场后,大概一个小时左右我就做完了X园区,然后开始进行测试。每个大题后面都会有让你用什么测试什么、拿哪台设备ping哪台设备之类的测试。我就一边测试一边截图,全部整理完差不多还剩3个多小时。
做到这里,我就只剩PY和论述了。PY没啥好说的,三四十分钟左右敲完,运行没问题就开始写论述。Z园区写的备份RR,第二题和MPLS的一样。做完之后还剩一个多小时,我就接着做做优化之类的,最终差不多提前了20多分钟左右出考场。
考场小建议
相信大多数同学现在对实验的各个命令都已经很熟悉了,但是呢,平时的练习中还是会出现一些细微的、自己不容易察觉的小问题。所以个人建议,大家在考试的时候可以把速度稍微放慢点儿。考场的时间还是比较充裕的,咱们不能一味地追求速度,还要尽量保证自己的正确率。否则一旦出现哪怕一个小问题,也会让我们在排错上消耗掉更多的时间,还容易影响心态,这就得不偿失了。
所以各位同学们考试的时候一定不要着急,考试的时候也不要紧张,稳住心态、踏实去做,通过考试问题不大。最后,祝大家早日上岸,全都一次通过!也感谢誉天各位老师和同学对我的帮助,特别是让我受益良多的肖老师,非常感谢!
作为当前网络领域最具含金量的认证之一,华为Datacom HCIE认证不仅是网络工程师们技术能力的证明,也是未来行业趋势的风向标。
尽管经历了几度版本更迭、考题变化,但是誉天一直紧跟技术发展趋势,在专业领域和教学内容上始终与当前的热点保持同步。而领先的师资团队、完善的实验环境、成熟的备考解法,都是我们学员持续稳定通关的保障!
誉天近期Datacom HCIE(部分)
誉天Datacom HCIE已通过一百三十余名学员
还在持续稳定过人中
作为华为授权培训合作伙伴,誉天是全国首批取得数通课程授权的机构,在数通方向积累了深厚的技术背景。为了帮助学员学好课程、掌握知识,誉天在专业师资、教学方法、考试辅导、实验环境、就业服务等方面投入大量的建设力量,为学员的技术提升与职业发展铺平道路。
师资方面,誉天数通讲师均具有网络领域专家级技术实力,项目经验丰富,且都取得了华为官方授权讲师认证。为了让学员能真正的掌握知识、应用知识,誉天数通课程在日常教学过程中加入了大量基于现网场景的教学实验案例,保障课程品质与内涵,让大家学到就能用到。
▼誉天数通学员战报合集(部分)▼
讲师们的专业水准并不仅仅体现在课堂上,课后的答疑辅导,也是为学员解决问题时必不可少的环节。誉天设有专门的考前辅导老师,帮学员从实战中融会贯通。经过多年的探索,誉天积累了完善、有效的备考方案,可以为学员提供考前指南与最新的考试动态。
▼誉天数通备考指南(部分)▼
誉天还提供EVPN,SR,SRv6,Vxlan以及综合实验练习手册与SD-WAN真机教学环境。多套实验机架,7*24小时提供练习备考环境,保障学员拥有充足机时。通过足量的练习,让学员熟练掌握技术和应用技术。
除此之外,誉天还提供完善的就业服务,从简历修改到面试辅导,从岗位推荐到入职办理,帮助学员顺利完成过渡,职场更进一步。
▼学员上完课后,斩获心仪offer▼
誉天数通HCIE火热开班中!真机实验+考前辅导+备考资料,名师保驾护航,助你稳定通关!识别二维码,即可获取免费试听名额!
需求:使用websocket不借助插件实现发布,订阅,网络断开重连,单点登录后挤号的功能
1.单点登录(同一账号同一时间只有一个在线,禁止多用户登录) 实现:在用户登录之后获取到token令牌并且存入到本地,可以判断token令牌是否失效来让用户退出登录,websocket的操作是让用户登录后连接到websocket并且发送指令,这边发送的指令是后端给的,之后前端进行接受消息,如果消息是退出登录的直接让他清空本地并且跳转到登录页就行
1.登录获取token令牌并且存储到localStorage
2.在layout也就是页面主体框架拿到token并且去连接websocket
3.连接成功后直接发送指令,之后再去监听返给前端的消息之后实现退出操作
url = `${protocol}://websocket的地址,要后端给?token=${token}`;,
这个我举个例子,连接地址应该是这样的:ws://127.0.0.1:8080?token=362466325,
ws.send(`msg:${this.data.id}`);这个也是后端定的要把账户的id给他,这样去监听登录
重连,之后消息返回loginOut后做退出登录的操作,如果链接因为各种原因关闭了,直接去请求重连。
retryCount: 0,
maxRetryCount: 5,
retryInterval: 2000, // 重试间隔时间,单位:毫秒
注意!!websocket不能设置请求头携带token好像,试了很多次都不行,用ws插件也不行,只能拼接token给后端了,有更好的方法可以在评论区联系我
let ws; let url = ""; export default { mounted() { this.connectWebsocket(); }, methods: { connectWebsocket() { let protocol = "ws"; if (typeof WebSocket === "undefined") { console.log("您的浏览器不支持WebSocket"); return; } else { if (window.location.protocol == "https:") { protocol = "wss"; } let token = localStorage.getItem("token"); url = `${protocol}://websocket的地址,要后端给?token=${token}`; // 打开一个ws ws = new WebSocket(url); ws.
定时器是在编程中常用的工具,用于执行某个任务或代码块在预定的时间间隔内或特定时间点。定时器相关方法的具体实现方式取决于编程语言和平台,下面是一些通用的定时器相关方法和概念:
setTimeout(callback, delay): 在指定的延迟之后执行一次回调函数。
setTimeout(function() {
console.log("定时器已触发!");
}, 1000); // 1秒后执行回调函数
setInterval(callback, interval): 在指定的时间间隔内重复执行回调函数。
var intervalId = setInterval(function() {
console.log("每隔一秒执行一次");
}, 1000);
clearTimeout(timeoutId): 用于取消通过setTimeout创建的定时器。
var timeoutId = setTimeout(function() {
console.log("这个定时器将被取消");
}, 1000);
clearTimeout(timeoutId); // 取消定时器
clearInterval(intervalId): 用于取消通过setInterval创建的定时器。
var intervalId = setInterval(function() {
console.log("这个间隔定时器将被取消");
}, 1000);
clearInterval(intervalId); // 取消间隔定时器
这些方法是JavaScript中的定时器方法示例,其他编程语言和平台也有类似的定时器功能,但方法名称和用法可能会有所不同。如果你需要更具体的信息,可以提供编程语言或平台的名称,我可以提供更详细的信息。
Dropout层通常用于深度学习模型中,以防止过拟合。它在神经网络中的位置可以有一些不同的选择,但通常是在全连接层之间或卷积层之间添加的。这有助于随机地关闭一些神经元,从而减少它们对模型的训练影响,以增强模型的泛化能力。
以下是一些常见的添加Dropout层的位置:
在全连接层之间:通常,您可以在全连接层(密集层)之后添加Dropout层。例如,在创建神经网络时,您可以如下所示添加Dropout:
model = Sequential()
model.add(Dense(128, activation='relu', input_shape=(input_shape,)))
model.add(Dropout(0.5)) # 在全连接层后添加Dropout
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))
在卷积层之间:如果您正在构建卷积神经网络(CNN),则通常将Dropout层添加到卷积层之间。例如:
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(height, width, channels)))
model.add(Dropout(0.25)) # 在卷积层后添加Dropout
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, kernel_size=(3, 3), activation='relu'))
model.add(Dropout(0.25))
model.add(MaxPooling2D(pool_size=(2, 2))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))
在这两种情况下,Dropout层的参数是指定要关闭的神经元的概率,通常在0到1之间。例如,Dropout(0.5)表示以50%的概率关闭每个神经元。这有助于防止过拟合,提高模型的泛化能力。您可以根据需要调整Dropout的概率。
文章目录 一、Hive建表SQL二、Hive函数三、函数1、查看内置函数2、空字段赋值(nvl)3、CASE WHEN THEN ELSE END4、行转列5、列转行6、开窗函数6.1 简介6.2 语法6.3 案例6.4 LAG函数6.5 Ntile函数6.6 Rank 7、自定义函数 四、压缩和存储1、简介2、压缩简介3、Map输出阶段压缩4、开启Reduce输出阶段压缩5、文件存储格式5.1 列式存储和行式存储5.2 TextFile_行存储5.3 Orc_列存储5.4 Parquet_列存储5.5 数据存储大小对比 6、存储和压缩结合 四、企业级调优1、查看执行计划2、Hive建表优化3、HQL语法优化3.1 列裁剪和分区裁剪3.2 Group By3.3 CBO优化 4、数据倾斜4.1 现象4.2 单表数据倾斜优化4.3 Join数据倾斜优化 5、Hive Job优化 一、Hive建表SQL Hive建表SQL
二、Hive函数 Hive函数
三、函数 1、查看内置函数 查看系统自带函数
show functions; 查看自带函数用法
# 显示简单用法 desc function !=; # 显示详细用法 desc function extended !=; 2、空字段赋值(nvl) NVL:给值为NULL的数据赋值,它的格式是NVL( value,default_value)。功能:如果value为NULL,则NVL函数返回default_value的值,否则返回value的值如果两个参数都为NULL ,则返回NULL。 # 当common为空时,返回age SELECT nvl(name,'age') FROM user; # 当name为空时候,用full_name替代 SELECT nvl(name,full_name) FROM user; 3、CASE WHEN THEN ELSE END 根据不同数据,返回不同逻辑
在Linux中,source命令用于在当前shell环境中执行指定脚本文件中的命令。它通常用于重新加载修改过的shell配置文件,例如.bashrc或.profile,以使更改生效,而不需要退出当前的shell会话。
使用方法为:
source 文件路径 或者使用其更短的别名 .(点号),这也是source的等效命令:
. 文件路径 这将执行指定路径的脚本文件,其中可以包含变量、函数和其他可执行的Shell命令。执行完后,其中定义的环境变量、函数等将在当前shell会话中生效。
例如:
source ~/.bashrc 或者
. /path/to/my_script.sh 这些命令将在当前shell环境中执行~/.bashrc文件或my_script.sh脚本文件中的命令,以确保其中所做的更改立即生效。在Linux中,source命令用于在当前shell环境中执行指定脚本文件中的命令。它通常用于重新加载修改过的shell配置文件,例如.bashrc或.profile,以使更改生效,而不需要退出当前的shell会话。
使用方法为:
source 文件路径 或者使用其更短的别名 .(点号),这也是source的等效命令:
. 文件路径 这将执行指定路径的脚本文件,其中可以包含变量、函数和其他可执行的Shell命令。执行完后,其中定义的环境变量、函数等将在当前shell会话中生效。
例如:
source ~/.bashrc 或者
. /path/to/my_script.sh 这些命令将在当前shell环境中执行~/.bashrc文件或my_script.sh脚本文件中的命令,以确保其中所做的更改立即生效。
1.小乌龟TortoiseGit 推送失败理由1:Access denied 推送被拒 2.小乌龟TortoiseGit 推送失败理由2:unable to access 无法访问 git.exe push --progress origin master:master remote: [session-5e4d0d8f] Access denied fatal: unable to access https://gitee.com/xxx.git/ : The requested URL returned error: 403 3.解决办法:配置的账户错误 ①找到,如图所示找到凭据管理器 ②找到Windows 凭据,找到git相关的,这就70%不是自己的账户或账户密码错误 ③按提示修改为你正确的账户 ④再次提交+推送就可以了
群晖7.2安装Jellyfin+alist+CloudDriver搭建无盘影音中心。
实现思路如下:
Jellyfin:提供个人影院功能。
alist(xiaoya):给影院提供海量影音资源。
CloudDriver2:alist的资源为网络资源,通过CloudDriver把alist的资源挂载到本地。提供给Jellyfin的媒体库用。
一、Jellyfin安装 参考如下文章:
群晖7.2版本安装Jellyfin_群晖第三方套件源-CSDN博客
二、alist安装 参考如下文章:
群晖7.2版本通过Container Manager安装xiaoya-alist-CSDN博客
三、CloudDriver安装 参考如下文章:
群晖7.2版本安装CloudDriver2(套件)挂载alist(xiaoya)到本地-CSDN博客
四、挂载alist资源 都已经本地化了,直接把挂载的文件夹分配给Jellyfin的媒体库就可以了。
五、效果 漫长的扫码媒体库之后,生成挂载影音的海报墙。(建议不要挂载根目录,挂载节点目录)
1、vue-devtools 扩展 存储在百度网盘地址: 链接:https://pan.baidu.com/s/1LDIJxG26tOHtUe_aUh_pEA 提取码:v81r
下载下来后是一个.crx 文件
2、浏览器打开扩展程序 1、可以通过地址访问 chrome://extensions/
2、可以自行找到相应位置,
扩展程序页面 3、把下载的文件拖拽到扩展程序页面就可以,就自动添加上了(上图中可见 6.4.5版本);还需要修改一个配置,点击插件的详情按钮,修改允许访问文件网址,打开就行了 4、检验成功,打开一个vue框架的项目,f12 可看到
本系统(程序+源码)带文档lw万字以上 文末可领取本课题的JAVA源码参考
系统程序文件列表 系统的选题背景和意义 选题背景: 请销假是每个组织和企业都必须面对的一个管理问题。传统的请销假流程通常繁琐且容易出错,需要员工填写纸质申请表格、经过多级审批、手动记录等步骤。这种方式不仅效率低下,还容易导致信息丢失或错误,给人力资源部门带来了很大的工作压力。为了解决这一问题,开发一个基于Springboot的请销假管理信息系统具有重要意义。
选题意义:通过开发请销假管理信息系统,可以实现请销假流程的自动化和数字化。员工只需在系统中填写请假申请,系统会自动进行审批流程,并将相关信息存储在数据库中,方便查询和统计。这样可以大大减少人力资源部门的工作量,提高工作效率。
该系统还可以提供实时的请销假信息查询和统计功能。员工可以随时查看自己的请假记录和剩余假期情况,避免了频繁向人力资源部门咨询的情况发生。同时,领导和管理者也可以通过系统获取团队成员的请假情况,更好地安排工作和资源。
该系统还可以提供数据分析功能,对请假情况进行统计和分析。通过对请假数据的挖掘,可以发现员工请假的规律和趋势,为企业的人力资源管理提供参考依据。同时,也可以帮助企业及时发现并解决员工请假过多或滥用请假的问题,提高团队的工作效率和凝聚力。
综上所述,开发一个基于Springboot的请销假管理信息系统具有重要的意义和价值,可以提高组织内部请销假流程的效率和准确性,为人力资源管理提供更好的支持。
运行环境 开发工具:idea/eclipse/myeclipse
数据库:mysql5.7或8.0
操作系统:win7以上,最好是win10
数据库管理工具:Navicat10以上版本
环境配置软件: JDK1.8+Maven3.3.9
服务器:Tomcat7.0
技术栈 前端技术: 使用Vue.js框架构建用户界面,它是一个灵活且高效的JavaScript框架,适合构建现代化的单页面应用(SPA)。后端技术: 采用Spring Boot框架进行后端开发,Spring Boot是一个Java平台,它提供了快速搭建、开发、运行Spring应用程序的能力,极大地简化了配置和部署流程。数据库: 使用MySQL作为关系型数据库管理系统,存储应用数据,它是一个流行的开源数据库,适用于各种规模的应用程序。数据库可视化工具: Navicat用于数据库的可视化管理和操作,它支持多种数据库系统,提供了一个直观的用户界面来管理MySQL数据库。开发环境: 使用JDK 1.8进行Java应用的开发,这是Java开发的核心环境,包含了运行Java程序所需的库和工具。服务器: 使用Tomcat 7.0作为Web应用服务器,它是一个开源的Servlet容器,用于部署和运行Java Web应用程序。项目管理工具: Maven 3.3.9用于项目的构建和依赖管理,它通过pom.xml文件定义项目结构和依赖关系,简化了项目构建过程和库管理。 后端由Spring Boot提供支持,前端由Vue.js构建,数据存储和管理通过MySQL和Navicat实现,整个开发流程由Maven进行管理,并在Tomcat服务器上运行。
程序界面: 源码文末获取↓↓↓↓:
要判断一个数是否是质数的n次方,你可以遵循以下步骤:
确定该数是否是一个质数。
如果该数是质数,检查它是否是n的幂。
以下是如何执行这些步骤的一些代码示例,使用Python编程语言:
# 判断一个数是否是质数
def is_prime(num):
if num <= 1:
return False
if num <= 3:
return True
if num % 2 == 0 or num % 3 == 0:
return False
i = 5
while i * i <= num:
if num % i == 0 or num % (i + 2) == 0:
return False
i += 6
return True
# 判断一个数是否是n的幂
def is_power_of_n(number, n):
godot4自定义按钮,适配boxcontainer中放置 实现代码如下:
extends Button class_name CustomButton @export var texture:Texture @export var texture_image_count:int @export var reload:bool = true : set(value): reload = value _setTexture() get: return reload func _ready(): _setTexture() func _process(_delta): if(reload): _setTexture() func _setTexture(): if texture == null: return add_theme_stylebox_override("normal", _getOneImageInTexture(0)) if texture_image_count >= 3: add_theme_stylebox_override("pressed", _getOneImageInTexture(1)) add_theme_stylebox_override("hover", _getOneImageInTexture(2)) else: add_theme_stylebox_override("pressed", StyleBoxEmpty.new()) add_theme_stylebox_override("hover", StyleBoxEmpty.new()) if texture_image_count == 4: add_theme_stylebox_override("disabled", _getOneImageInTexture(3)) else: add_theme_stylebox_override("disabled", StyleBoxEmpty.new()) add_theme_stylebox_override("focus", StyleBoxEmpty.new()) var width = texture.
🎉🎉欢迎来到我的CSDN主页!🎉🎉
🏅我是君易--鑨,一个在CSDN分享笔记的博主。📚📚
🌟推荐给大家我的博客专栏《若依框架开发》。🎯🎯
🎁如果感觉还不错的话请给我关注加三连吧!🎁🎁
前言 在我们之前的学习中我们接触以及了解了一些的框架结构,例如我们之前学习到的EasyUI、Bootstrap框架开发、LayUI、微信小程序开发等等。今天与大家分享的是一个开源的框架结构来利于我们的开发,今天带给大家的是RuoYi开发框架。
一、RuoYi简介 1. 概述 RuoYi是一款基于SpringBoot+Bootstrap的极速后台开发框架。
RuoYi 是一个 Java EE 企业级快速开发平台,基于经典技术组合(Spring Boot、Apache Shiro、MyBatis、Thymeleaf、Bootstrap),内置模块如:部门管理、角色用户、菜单及按钮授权、数据权限、系统参数、日志管理、通知公告等。在线定时任务配置;支持集群,支持多数据源,支持分布式事务。
2. 主要特性 若依框架具有以下一些的特性:
完全响应式布局(支持电脑、平板、手机等所有主流设备)强大的一键生成功能(包括控制器、模型、视图、菜单等)支持多数据源,简单配置即可实现切换。支持按钮及数据权限,可自定义部门数据权限。对常用js插件进行二次封装,使js代码变得简洁,更加易维护完善的XSS防范及脚本过滤,彻底杜绝XSS攻击Maven多项目依赖,模块及插件分项目,尽量松耦合,方便模块升级、增减模块。国际化支持,服务端及客户端支持完善的日志记录体系简单注解即可实现支持服务监控,数据监控,缓存监控功能。 3. 技术选型 若依框架技术选型主要以四个部分模块展开,分别是系统环境、主框架、持久层、视图层。接下来我们一起来看一看这四个模块涉及的内容有哪些。
系统环境:
Java EE 8Servlet 3.0Apache Maven 3 主框架:
Spring Boot 2.2.xSpring Framework 5.2.xApache Shiro 1.7 持久层:
Apache MyBatis 3.5.xHibernate Validation 6.0.xAlibaba Druid 1.2.x 视图层:
Bootstrap 3.3.7Thymeleaf 3.0.x 其中若依框架中也包含了有内置功能,例如: 部门管理、菜单管理、用户管理、字典管理等等的内置功能我们也可以前去官网的文档去查看。
RuoYi 官网地址:http://ruoyi.vip(opens new window)RuoYi 在线文档:http://doc.ruoyi.vip(opens new window)RuoYi 源码下载:https://gitee.com/y_project/RuoYi(opens new window)RuoYi 在线提问:https://gitee.com/y_project/RuoYi/issues(opens new window)RuoYi 博客:https://www.oschina.net/p/ruoyi 二、搭建若依框架开发环境及推送到gitee 后端 1.
前后端分离中,使用@RequestBody传递参数是一种比较常见的方式。相比于@RequestParam,@RequestBody可以传递更为复杂的参数类型,例如JSON格式的数据。但是并不是所有情况下都适合使用@RequestBody,具体需要根据实际情况来选择。
使用@RequestBody的优点:
可以传递复杂的参数类型,例如JSON格式的数据。可以使用对象来接收参数,代码可读性更好。可以使用注解来校验参数的合法性。 使用@RequestBody的缺点:
传递的参数类型必须是JSON格式的数据,如果是其他格式的数据则需要进行转换。传递的参数必须是完整的,不能缺少任何一个字段,否则会导致参数校验失败。传递的参数必须是字符串类型,不能是文件等二进制数据。 因此,使用@RequestBody传递参数并不是最优的选择,具体需要根据实际情况来选择。如果传递的参数比较简单,可以使用@RequestParam;如果传递的参数比较复杂,可以使用@RequestBody。
1.工具箱中找到ContextMenuStrip,然后可以直接编辑菜单的选项
2.将菜单绑定到右键上,在鼠标点击事件时,判断点击按钮为右键时,弹出菜单,弹出的位置为鼠标当前所在位置
网址:
https://square.github.io/retrofit/
https://github.com/square/retrofit/
https://www.jianshu.com/p/81754adcd4ae
android jdk8使用
implementation 'org.bouncycastle:bcprov-jdk15on:1.70' 报异常:
java.security.NoSuchAlgorithmException: Provider BC does not provide SM4/CBC/PKCS5Padding
generateSm4EcbCipher 替换成它
private Cipher generateSm4EcbCipher(String sm4Name, int sm4Mode, byte[] sm4Key) throws NoSuchAlgorithmException, NoSuchProviderException, NoSuchPaddingException { // Cipher cipher = Cipher.getInstance(sm4Name, BouncyCastleProvider.PROVIDER_NAME); Cipher cipher = Cipher.getInstance(sm4Name, new BouncyCastleProvider()); Key secretKey = new SecretKeySpec(sm4Key, SM4_NAME); IvParameterSpec ivParameterSpec = new IvParameterSpec(SM4_KEY_IV); try { cipher.init(sm4Mode, secretKey, ivParameterSpec); } catch (InvalidKeyException | InvalidAlgorithmParameterException e) { e.printStackTrace(); } return cipher; }