Springboot整合异步邮件服务
Springboot整合异步邮件服务
在很多场景都需要使用到用户和系统的其他交互如:验证码。。。此时可以选择短信或者邮件的形式,但是短信业务需要收费,所以我们就近选择邮件服务
1.导入依赖12345<!--spring boot mail 集成jar--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId></dependency>
2.配置邮件服务1234567891011121314151617# 邮件设置spring: mail: host: smtp.qq.com username: 1447250889@qq.com # 邮箱账号 password: dsadadasdada # 授权码(在邮箱开启pop3和smtp后会给你) properties: mail: sm ...
LayUI和Springboot的基本使用
LayUI是一款非常好用的动态前端库
主要提供丰富的动作组件,区别于Boostrap静态库缺乏js支持
1.首先聊聊前后端交互的几种方式:
前后端耦合开发,后端根据请求生成在前端模板。
半耦合,我现在大部分的状态,后端根据用户请求生成在前端模板,但是没有数据。前端利用ajax再获取数据填充页面。
前后端分离,纯RestFul风格开发。用户和前端交互,前端使用三大框架(vue,aj,react),通过http协议向后端请求数据填充页面,同时完成权限管理和用户的交互。后端只负责根据请求返回对应的数据(多用一个公用的包装类进行包装,传输json)
2.所以,我们今天聊到的LayUI就是属于半耦合开发
用户请求 —> 后端渲染前端模板 —> LayUI利用ajax获取数据,并填充生成页面 —> 返回用户
使用LayUI和Springboot实现作业的显示和删除1.首先是后端返回模板:12345678910111213141516171819/** * 某个项目详情页面 * @param model * @param userId * @param wo ...
Springboot整合Kaptcha支持验证码
Kaptcha
Kaptcha,是Google开源的一个可高度配置的实用验证码生成工具。
1.在Springboot中导入:12345 <dependency> <groupId>com.github.penggle</groupId> <artifactId>kaptcha</artifactId> <version>2.3.2</version></dependency>
2.添加Kaptcha的配置规则
可用xml也可以Class (此处采用Class配置)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748package kid1999.upload.config;import com.google.code.kaptcha.impl.DefaultKaptcha;import com.google.code.kaptcha.util.Co ...
MyBatis,Spring与前端之间的时间格式
1.首先是MySQL与Java的时间格式对应图
2.四种时间格式的选择
date 只有年月日
datetime 最完整 也是最占内存的
timestamp 较完整,但是最大上限是2038年
time 只表示时间
year 只表示年
3.在Spring中自动时间的转换12345678910111213141516171819202122232425262728package kid1999.upload.model;import com.baomidou.mybatisplus.annotation.IdType;import com.baomidou.mybatisplus.annotation.TableId;import com.baomidou.mybatisplus.annotation.TableName;import com.fasterxml.jackson.annotation.JsonFormat;import lombok.Data;import org.springframework.format.annotation.DateTimeFormat;impor ...
SpringBoot整合FastDFS
SpringBoot 整合 FastDFS 实现文件上传打包下载FastDFS
FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
1.FastDFS的安装
参照 baidu | Google
docker 安装
2.使用fastdfs-client操作FastDFS123456789101112<!-- fastDFS --><dependency> <groupId>com.github.tobato</groupId> <artifactId>fastdfs-client</artifactId> <version>1.26.7</version></dependency><dependency> <groupId>commons-io</grou ...
素数筛法
埃式筛法
O(n*logn)
原理: 利用一个数组保存0-n的数据,未访问过的就是素数,每次素数从素数N开始,依次递加晒除非素数,直到最后剩下的都是素数
123456789101112埃式 筛法public int countPrimes(int n) { int res = 0; boolean[] flag = new boolean[n+1]; for(int i=2;i<n;i++){ if(!flag[i]) res++; for(int j=2*i;j<n;j+=i){ flag[j] = true; } } return res;}
欧式筛法
O(n)
原理: 在埃式筛法的基础上排除那些重复筛选的计算.
prime数组 中的素数是递增的,当 i 能整除 prime[j],那么 iprime[j+1] 这个合数肯定被 prime[j] 乘以某个数筛掉。因为i中含有prime[j], prime[j] 比 p ...
二分模板
二分模板
有单调性一定可以二分,可以二分的,不一定具有单调性
1.整数二分模板12345678910111213141516171819202122232425262728293031323334353637bool check(int x) {/* ... */} // 检查x是否满足某种性质// 区间[l, r]被划分成[l, mid]和[mid + 1, r]时使用:int bsearch_1(int l, int r){ while (l < r) { int mid = l + r >> 1; if (check(mid)) r = mid; // check()判断mid是否满足性质 else l = mid + 1; } return l;}// 区间[l, r]被划分成[l, mid - 1]和[mid, r]时使用:int bsearch_2(int l, int r){ while (l < r ...
快速幂
1. a ^ b : 题链接12345678910111213141516171819a ^ b = a * a * a * a * a .....把 指数b 化作二进制 = a ^ 1 * a ^ 2 * a ^ 4 ....// 例如: 求 m^k % ppublic static int qmi(int m, int k, int p){ int res = 1, t = m; while(k > 0){ if( (k&1) == 1){ res = res * t % p; } t = t * t % p; //t^1 t^2 t^4 ... k = k>>1; } return res % p;}
2. a * b : 题链接12345678910111213141516a * b = a + a + a + a + a .....把 指数b 化作二进制 = a * 1 + a * 2 + a * 4 ....// 例如: 求 m*k % ppublic static in ...
背包模板
1. 简介
0-1背包问题 : 对于物品而言只能选择1个或者0个两种情况(选不选)
完全背包 : 对于物品而言可以无限制选取,也可以不选
多重背包 : 对于某物品而言最多能够选择从s个,同样也可不选
混合背包 : 有些物品可以选择1,有些物品可以选择无数个,有些物品只能选择是s[i]个.即:01背包+完全背包+多重背包
二维费用背包 : 在重量的基础上增加空间的限制
分组背包:多重背包的普遍版本 一些物品捆绑在一起,每一组物品中只能选择其中的一个物品s[i]
贪心 : 对于物品只需要价值比最大,物品可分
1. 0-1背包 参考dp 解释 : 前i个物品在空间为j的情况下的 (最值)
1.朴素版普通0-1背包: dp[i][j] = max(dp[i-1][j] , dp[i-1][j−w[i]] + v[i])1234567891011121314151617181920212223242526272829import java.util.Scanner;public class Main { public static void main(String[] arg ...
最小公倍数与最大公因数
1.求两个数最大公约数欧几里得算法
12345678public static int gcd(int x,int y){ if(x>y){ int tmp = x; x = y; y = tmp; } return x == 0 ? y : gcd(y%x,x);}
2.求两个数最小公倍数在求的最大公约数的基础上
1234//求a、b的最小公倍数int lcm(int a, int b){ return a*b/gcd(a, b);}
即lcm(a,b) * gcd(a,b) = a * b