Completablefuture动态任务使用
场景如下:一个用户有N张不同银行卡,要求一个接口展示这N张卡的余额。如果各种银行查询余额API平均响应时间为2秒,假设用户有5张卡,就需要2*5=10秒才能展示出来结果改造为异步处理理论上就只需要2秒,实际情况中,Completablefuture改造之后,最慢的那个API响应即为整个结果的响应时间。但用户卡数量是动态的,所以异步任务也是动态。
创建模拟查询代码
假设四大行为A、B、C、D。其中A银行API响应为2秒、B银行API响应为3秒、C银行API响应为4秒、D银行API响应为5秒。余额统一设为100
12345678910111213141516171819202122232425262728293031323334353637383940414243private static int getBankA (String cardNo) { System.out.println("查询A银行-2秒"); try { // 模拟API调用耗时 Thread.sleep(2000); ...
MYSQL入门基础SQL
CRUD以用户表举例,有如下表结构
123456CREATE TABLE `user_info` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '自增主键', `name` varchar(64) NOT NULL COMMENT '用户名', `age` int NOT NULL COMMENT '年龄', PRIMARY KEY (`id`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户信息表';
增(Create)12-- 新增一条记录用户名为 张三 年龄为 20INSERT INTO user_info (name, age) VALUES ('张三', 20);
删(Delete)1234-- 根据 主键ID删除DELETE FROM `user_info` WHERE id = 1;-- 根据 用户名删除DELETE FROM `user_inf ...
Windows任务计划实现定时提醒弹窗
通过windows任务计划程序实现定时提醒功能
做为打工人的我们,一定要注重自己的身体健康。一天在办公室时间这么长,久坐对身体危害极大。
市场上有一些TODO软件可以做到提醒功能,但是过于臃肿。用windows计划任务 + 简单vbs弹窗。就满足我们的要求了,实现过程如下:
第一步 编写弹窗代码vbs文件打开记事本,填入一下内容。 保存为 久坐提醒.vbs 注意编码选 ANSI。
第一个参数 弹窗内容
第二个参数 4096代表 置顶弹出
第三个参数 弹窗标题
1x=msgbox("一个小时没动了,赶紧活动活动!", 4096, "久坐提醒")
我们可以双击该文件,可以看到如下弹窗
第二步 配置Windows任务计划1、利用window搜索 进入任务计划程序
2、点击 任务计划程序库 右键 新文件夹,创建一个目录,比如我创建一个 Diy 文件夹
3、右键 -> 创建任务 -> 输入任务名称 -> 点击到 触发器栏 -> 新建触发器
4、触发器我配置的是周一到周五,从九点开始每隔一小时提醒一次
5、新 ...
通过@ConfigurationProperties注解配置属性并校验参数
在Spring boot项目中,采用@ConfigurationProperties(frefix = “config”)配置实体参数。
启动项目之后,会遇到Nacos配置忘记填,导致配置属性为空。(不像@value注解,不配置参数就会启动报错,可以立马发现配置没写)
那么ConfigurationProperties实体配置有没有办法在项目启动时,没填写就启动报错、校验参数是否已经在nacos填写完成呢? 恭喜你本文就是答案!!!
1. 通过Springboot的@Validated注解实现对象实体参数校验
对象实体类上加上@Validated注解
在属性上加上javax.validation.constraints包下面对应的参数校验注解
@NotNull:不能为null,但可以为empty
@NotEmpty:不能为null,而且长度必须大于0
@NotBlank:只能作用在String上,不能为null,而且调用trim()后,长度必须大于0
2. 普通实体类配置校验普通的对象配置,举例在nacos中需要如下配置信息:
1234config: us ...
win10开启Linux子系统教程
Win10子系统Ubuntu-18.04windows subsystem for linux简称WSL。使用原生安装方便快捷,无需再安装虚拟机,从安装到运行最全教程,并开启SSH开机自启,用xshell终端连接。
1. 开启Linux子系统环境打开所有设置 -> 应用 -> 程序和功能 -> 启动或关闭Windows功能 -> 勾选适用于Linux的Windows子系统 -> 重启电脑
2. Microsoft Store安装Ubuntu打开Microsoft Store应用商店,搜索Ubuntu-18.04,下载完成之后。点击图标打开,进行安装。
在出现需要输入username的时候,就已经安装完成了,可以选择创建自己的用户名。但是我不想创建用户,想直接用root用户,怎么办呢?
很简单,在Microsoft Store应用商店搜索Windows Terminal下载并打开。点击下箭头,选中Ubuntu-18.04。就自动以root用户登录了。这个时候,我们就可以自己设置root的密码,输入命令:
12345--设置root账号密码。根据提示输入两次密 ...
小米路由器安装filebrowser
Filebrowser在Window环境下编译打包到路由器
由于releases页面中的十多个包中,并没有mips平台的包,只能自己编译打包对于 使用Go语言做开发的同学,这个问题很简单,可以咱不会GO怎么办,小白来一步步演示如何编译打包到自己的小米路由器成功搭建自己的文件管理 + 私人网盘
1 首先,Window上需要安装环境
安装go 下载地址:https://go.dev/dl/go1.18.1.windows-amd64.msi
安装nodejs 下载地址:https://nodejs.org/dist/v16.14.2/node-v16.14.2-x64.msi
安装没什么好说的,下载之后直接点下一步下一步就安装好了
2 下载filebrowser源码,编译前端静态资源源码地址:https://github.com/filebrowser/filebrowser
电脑有安装Git的话,直接clone。没有的话就下载zip
CMD窗口进入源码根目录
依次执行这三条命令先编译前端资源,进入前端目录 cd frontend安装依赖 npm ci注意了 敲黑板了这里有一个 ...
Windows开机自动发送邮件
最近有一个场景需要监控家里的电脑的开机情况,远程操作开机并启动一些服务,
需要知道开机状态。实现开机之后自动发送邮件通知。(七月更新增加:采用Windows任务计划完成开机发送邮件,高效快捷)
网上有很多大神都是直接自己手撸代码,实现一个Windows服务,或者VB写的,过于专业。小白只想偷懒,于是找到了一个工具 Blat官网 可以直接实现邮件功能
1. 首先下载Blat工具下载地址 https://sourceforge.net/projects/blat/files/ 。解压放到C盘创建的全英文目录下
2. 创建bat文件在当前目录新建一个 send.bat 文件,因为电脑开机连接网络需要时间,所以发送20次ping做延迟发送可以根据自己的实际网络情况调整, C:\quickStart\blat3222\full\blat.exe 替换成你自己的路径填入以下内容。
12345678910111213141516171819202122::chcp 65001 设置编码,防止中文乱码::最后加入 pause 可显示窗口用于排查问题,可删除chcp 65001rem ----延时执 ...
实测小米MIX4刷机欧版MIUI纪录
小米MIX4刷机欧版MIUI的全过程,并附带MIUI列表精简指南。
关于MIUI国行版和欧版的区别就不多说,网上大把的文章,其核心就是突出一个干净无广告。毕竟ROM包的体积小了2G最愉悦的感受就是“相册”。国行相册只要不点同意,每次进入都要弹出提示,恶心至极但目前由于没有MIX4的TWRP PS:现在已经有了 https://twrp.me/xiaomi/xiaomimimix4.html走Fastboot刷机。流程也没有网上文章说的麻烦,一个刷机包就可以搞定整个刷机流程,不需要多余的软件提示:刷机有风险,操作需谨慎。
刷机流程必要前提
使用小米助手备份整个手机
打开 开发者模式-勾选USB调试
解锁BL
准备一个有魔法的WIFI
手机电量在70%以上
数据线最好直插电脑USB口,过程中不要移动手机,防止断流
1. 解锁BL这一部分按照网上的说明,一步步操作即可。解锁: https://miuiver.com/how-to-unlock-xiaomi-phone/
2. 下载欧版MIUI包欧版官网地址:https://xiaomi.eu
进入欧版MIUI官网的MIX4专区 ...
Http状态码说明
Http 状态码类型
类别
含义
1XX
Informational(信息性状态码)
接收的请求正在处理
2XX
Success(成功状态码)
请求正常处理完毕
3XX
Redirection(重定向状态码)
需要进行附加操作以完成请求
4XX
Client Error(客户端错误状态码)
服务器无法请求
5XX
Server Error(服务器错误状态码)
服务器处理请求出错
HTTP 状态码含义
状态码
含义
100
客户端应当继续发送请求。这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝。客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应。服务器必须在请求完成后向客户端发送一个最终响应。
101
服务器已经理解了客户端的请求,并将通过Upgrade 消息头通知客户端采用不同的协议来完成这个请求。在发送完这个响应最后的空行后,服务器将会切换到在Upgrade 消息头中定义的那些协议。 只有在切换新的协议更有好处的时候才应该采取类似措施。例如,切换到新的HTTP 版本比旧版本更有优势,或者切换到 ...
社交场景下,好友表的设计原理和方式
好友的概念和场景在社交场景中,好友的关系场景无处不在,如何设计一个最优的表结构,来实现高效的存储和快速的查询尤为重要。在数据库的好友设计中。共同好友的概念。针对互相都为好友的情况,会带来以下的操作和查询:
建立互相好友关系
删除互相好友关系
获取某个用户的好友列表
判断两个用户是否为好友
我们拿两个用户来举例说明场景 Alice(ID=5)和 Bob(ID=3)
Two-row model
使用两条记录来标识双向好友,Alice的好友为Bob;Bob的好友为Alice,插入两条userid关系
12345CREATE TABLE friendship ( user1_id INTEGER NOT NULL, user2_id INTEGER NOT NULL, PRIMARY KEY (user1_id, user2_id));
建立好友关系
12345INSERT INTO friendship (user1_id, user2_id) VALUES ((3, 5), (5, 3));| user1_id | user2_id || 3 ...