自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 【SpringBoot】接口参数校验

前言 在我们编写后端接口时,不能相信用户给我们的东西,我们需要尽可能的将所有特殊情况考虑到,并且给出回避方案。例如: /** * 用户BO */ @Data public class UserBo { // 年龄 private Integer age; // 性别 private String name; } /** * 测试接口 */ @PostMapping public void saveUser(@RequestBody UserBo userBo) {

2021-09-25 15:10:07 624

原创 使用log4jdbc输出sql操作

文章目录前言特性配置依赖配置 application添加 log4jdbc.log4j2.properties添加 logback.xml 前言 log4jdbc 是一个 JDBC 驱动器,能够记录 SQL 日志和 SQL 执行时间等信息。log4jdbc 使用 SLF4J(Simple Logging Facade)作为日志系统。 特性 支持 JDBC3 和 JDBC4 。 支持现有大部分 JDBC 驱动。 易于配置(在大部分情况下,只需要改变驱动类名并在 jdbc url 中加上:log4jdbc,设

2021-09-19 20:05:08 1312

原创 RESTful 风格接口书写方式

文章目录1 使用 RESTful 风格接口书写方式1.1 简介1.2 五种请求方式1.3 需要注意的问题1.4 对照学习2 GET 请求参数详解2.1 参数拼接于路径中2.2 以键值对形式拼接于路径中2.2.1 普通单个参数2.2.2 普通多个参数2.2.3 自定义参数名称2.2.4 可缺省参数2.2.5 默认值参数2.2.6 接收数组参数2.2.7 使用 map 接收参数2.2.8 使用对象接收参数 1 使用 RESTful 风格接口书写方式 1.1 简介 RESTful 的核心思想就是,客户端发出的数据

2021-08-22 13:30:39 2959

原创 使用 docker 安装并部署 redis

安装 redis docker pull redis 安装后可以执行 docker images 指令查看是否安装成功。 truedei@truedei:~$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE redis latest 987b78fc9e38 10 days a.

2021-07-31 22:09:35 264

原创 【vue-cli3】各版本 sass-loader 配置全局变量

V8 以下版本 找到vue.config.js文件,如果没有的话,则自己在根目录新建一个即可 在文件内编写如下代码: module.exports = { css: { loaderOptions: { sass: { data: `@import "@/styles/variable.scss";` } } } } V8 以上 V10 以下版本 找到vue.config.js文件,如果没有的话,则自己在根目录新建一个即可 在文件内编写

2021-07-19 08:45:53 1185

原创 CSS 引入字体

文章目录涉及知识@font-face特点用法属性解析font-family用法简单应用更多应用网络/本地引入本地引入网络引入引入其他格式字体引入系列字体 涉及知识 @font-face @font-face 定义一个用于文本显示的自定义字体。详细内容可以参考 MDN文档 。 特点 可以自定义字体名称和与名称对应的字体文件 可以消除用户对电脑字体的依赖 可以用于字体图标的引入 用法 @font-face { font-family: "myFont"; src: url("/fonts/OpenS

2021-07-18 21:24:27 10805

原创 【SpringBoot】OSS 对象存储的应用

前言 对象存储文档完善,内容复杂。这里博主只做简单上传和使用签名URL进行临时授权的操作讲解。 参考:阿里云文档 前置工作 依赖引入 pom.xml 中引入阿里云 OSS 依赖: <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.10.2</version>

2021-07-17 09:51:32 291

原创 【Mybatis Puls】Mapper 请求后返回 Ipage<T> 类型数据

前言 在自定义 mapper 时,查询多条数据可以通过 List<T> 来接收多条数据,但是上述方法没有分页。我们现在更多使用的是分页查询,所以就需要新的方法了。 实现方法 @Select("select * from comment") IPage<CommentListVO> getAllComments(Page<?> page); 在方法参数中添加 Page<?> page 可以使返回值自动封装为 Ipage 对象。 当然它也适合多参数: @Sele

2021-07-17 09:08:13 3317

原创 服务器的负载均衡(解决高并发问题)

什么是负载均衡 当一台服务器的性能达到极限时,可以通过服务器集群来提高网站的整体性能。在服务器集群中需要有一台服务器充当调度者的角色,将其接收到的请求分发给不同的服务器去处理。 在这个过程中,调度者如果可以合理分配任务,那么就能保证后端服务器将性能充分发挥,使服务器集群的整体性能最优化。 实现方法 HTTP 重定向 过程描述 当用户向服务器发起请求时,请求首先被集群调度者截获;调度者根据某种分配策略,选择一台服务器,并将选中的服务器的 IP 地址封装在 HTTP 响应消息头部的 Location 字段中

2021-06-27 15:03:44 1306

密码找回功能设计

保存密码 密码永远都要哈希保存。 对密码使用哈希算法,将哈希值保存进数据库。为了增加随机性,防止彩虹表这一类的工具,计算哈希的时候,每个用户都有一个不一样的盐值(salt),也会同时保存进数据库。 哈希是单向运算,无法还原,所以即使哈希值泄漏,一般来说,也不会暴露用户的原始密码。 密码重置 重置密码的时候,要给出一个链接,让用户到网页上自己修改密码。 重置链接由于是明文传播,而且直接修改密码,所以必须有失效时间。一般来说,可以设成10分钟失效。 重置密码的时候,识别用户最好依靠邮件地址,而不是用户名。 如果

2021-06-20 15:32:35 357

原创 【UI】关于如何画设计稿(基础篇)

这里写目录标题前言精炼对齐重复详尽设计的四个基础原则简介亲密性原则对齐原则重复原则对比原则 前言 设计是自己的一个爱好,平时看了许多相关的内容,做了许多功课,到现在也有了一些成果。介于自己的并非专业人员,我没有将自己这些年做设计的经验分享出来。但是一直将自学的知识藏在心里,不与人交流,是始终没有办法进步的。今后我会把自己设计相关的经验分享出来,与大家一同探讨,也希望我的这些经验可以给设计小白带来一些帮助。 这里推荐大家一本书:《写给大家看的设计书》,写的很不错,属于必读书籍的那类了。 精炼 这里给0基础设计

2021-06-07 10:07:48 1668

原创 【springboot】使用 javax.mail 发送邮件

目录引入依赖配置信息发送邮件工具类使用方法 之前用过 springboot 自带的发送邮件,发送一个简单邮件需要11s+,而使用 javax.mail 只需要不到2s,暂时不清楚原因。 引入依赖 在项目的根目录下的 pom.xml 中加入以下内容: <!--邮件发送--> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId>

2021-05-23 10:24:04 2050 1

原创 【nvue】分段滚动长列表相关问题

文章目录下拉刷新触底加载分段滚动长列表页面结构 首先参考文档为uni-app官方文档和weex官方文档。 吐槽一下,可能是因为有 weex 官方文档的存在,uni-app 在 nvue 这块有些文档写的很简洁 =。= nvue 是 uni-app 基于 weex 改进的原生渲染引擎,全称为 native vue,简称 nvue。在学习伊始我忽视了 nvue 的重要性,初次运行大量的爆红让我退缩了(没有认真读文档T T),导致后期重构代码。 重点来了,nvue 有哪些是让我认为是很重要的功能呢?如下:

2021-05-16 11:55:38 1461

原创 【vue】列表渲染实战心得及方案推荐

渲染 在做列表数据渲染的时候需要先构思好合适的数据结构,合适的数据结构能够方便页面的构建、功能实现、后期维护。我列举了下面几种列表渲染的数据结构: 注意:数据列表里的每一项数据都推荐有id,在vue中的列表渲染中key值绑定为数据id,这样可以方便之后的数据更新。Vue官方文档 数组形式 如果是简短的数据列表,没有复杂的操作(增删改),没有下拉刷新和触底加载、分页查询(数据分页查询),那么推荐直接使用数组形式: dataList: [ { id: 0, name:

2021-04-30 20:28:12 371 1

原创 【Vue】watch的深度监听和nextTick的用法

Vue watch的深度监听 watch监听有两种方式:普通监听、深度监听。 他们的区别是: 普通监听只能监听变量值的变化(如Boolean、Number、String等),不能监听数组和变量属性的改变。 写法上的区别: watch:{ // 普通的watch监听 a(val, oldVal){ console.log("a: "+val, oldVal); }, // 深度监听,可监听到对象、数组的变化 b:{

2021-04-25 15:09:59 1614

原创 【Vue】事件修饰符

Vue 事件修饰符 Vue 事件修饰符 前言 事件修饰符们 stop prevent capture self once passive 顺序 绑定空函数 前言 事件修饰符是比 event.preventDefault() 或 event.stopPropagation() 更“好”的写法,事件修饰符能够更轻松的实现前面两种方法的功能。事件修饰符能够让我们只需考虑纯粹的数据逻辑,而不是去处理 DOM 事件细节。 事件修饰符们 stop <!-- 阻止单击事件继续传播 --> &l

2021-04-18 14:07:39 175

原创 Vue watch() 的用法和 nextTick的用法

Vue watch的深度监听 watch监听有两种方式:普通监听、深度监听。 他们的区别是: 普通监听只能监听变量值的变化(如Boolean、Number、String等),不能监听数组和变量属性的改变。 写法上的区别: watch:{ // 普通的watch监听 a(val, oldVal){ console.log("a: "+val, oldVal); }, // 深度监听,可监听到对象、数组的变化 b:{

2021-04-11 11:48:55 1398

原创 uni-app(app端)元素样式问题

前言 uni-app不支持使用js控制元素样式,仅支持获取样式。 解决方法 动态绑定class 向目标元素动态绑定class,然后给该class添加css样式。 如html部分: <userInfo :class="{'show': scrollSwitch}"></userInfo> 动态绑定style 向该元素直接绑定样式,此方法好处是可以使用变量。 如html部分: <view :style="{ 'width': lW + 'px',

2021-03-28 14:43:09 2896

原创 前端优化 - externals 实现运行时加载依赖

webpack(vue-cli 自带) 中的 externals 配置选项提供了从输出的 bundle 中排除依赖的方法。防止将某些(自己配置)依赖打包,而是在项目运行时(runtime)从外部加载这些依赖。 最直观的:减小 vue 项目 build 后的体积。 配置 index.html 配置项目中的 public/index.html 文件,在其中的 head 标签中添加如下: <!-- 使用CDN的CSS文件 --> <% for (var i in htmlWebpackPlu

2021-01-23 21:39:31 1139 1

原创 REST 和 RESTful API 区别

REST REpresentational State Transfer 直接翻译:表现层状态转移 REST 描述的是在网络中 client 和 server 的一种交互形式;REST 本身不实用,实用的是如何设计 RESTful API(REST风格的网络接口) RESTful API 路径 在RESTful架构中,每个网址代表一种资源(resource),所以网址中不能有动词,只能有名词,而且所用的名词往往与数据库的表格名对应。 如: https://api.example.com/v1/zoos ht

2021-01-16 21:30:41 323

原创 Linux(CentOS7.8)安装 mysql8.0

首先做好安装前准备 下载 Red Hat Enterprise Linux 7 / Oracle Linux 7(x86,64-bit)的 RPM Bundle 包: mysql-8.0.22-1.el7.x86_64.rpm-bundle.tar 可以下载到本地,也可以下载到服务器上。 后面执行的文件操作使用了 WinSCP 可视化工具,大家可以自行安装或者是使用命令操作。 卸载 mariadb 为什么卸载 mairadb ? 以前的 Linux 系统中数据库大部分是 MySQL,不过自从甲骨..

2020-11-29 10:11:33 234

原创 Linux(CentOS7.8)安装某程序(以 mysql 为例)前准备

执行查询命令检查是否安装过某程序: [root@localhost /]# rpm -qa | grep mysql 如果安装过: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jh8XpENN-1606611593745)(E:\笔记\Daily\2020-11\day27.assets\image-20201128153048995.png)] 执行删除命令: [root@localhost /]# rpm -e --nodeps mysql-libs-5.1.73..

2020-11-29 09:09:12 164

原创 Swagger引入及使用

引入依赖(官方依赖) <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.7.0</version> </dependency> <dependency> <groupId>io.springfox</gr

2020-11-22 11:40:57 1848

原创 Ant-Design-Vue 自定义上传和图片预览功能

前端页面代码部分 <template> <a-upload list-type="picture-card" :customRequest="imgAdd" :remove="imgDel" :file-list="fileList" @preview="handlePreview" @change="handleChange"> <div v-if="fileList.length < 9">

2020-11-03 21:15:26 11148 3

原创 vue中assets与static文件夹的区别

static 该目录下的资源不会被 webpack 处理,它们会被直接复制到最终的打包目录下(默认地址是 dist/static),所以引用时需要使用绝对路径。 这是通过在 config.js 文件中的 build.assetsPublicPath 和 build.assetsSubDirectory 链接来确定的。 该目录下文件的绝对路径写法:/static/[filename] assets 该目录下的文件会被 webpack 打包,引用时需要使用相对路径或者模块路径。 动态引用路径时写法:requir

2020-10-31 15:58:04 836

原创 阿里图标库iconfont的使用(font-cclass方式、symbol方式、动态创建方法)

iconfont的使用 font-class引用 特点 兼容性良好,支持ie8+,及所有现代浏览器。 使用class来定义图标,替换图标时,只需要修改class里面的unicode引用。 本质上是使用字体,所以多色图标不支持。 使用方法 网络引用 第一步:拷贝项目下面生成的fontclass代码: //at.alicdn.com/t/font_8d5l8fzk5b87iudi.css 第二步:挑选相应图标并获取类名,应用于页面: <i class="iconfont icon-xxx

2020-10-31 15:41:29 2462

原创 OPTIONS预检请求

作用 在 CORS 中,可以使用 OPTIONS 方法发起一个预检请求,以检测实际请求是否可以被服务器所接受。 options请求具备以下特性: 选项 是否允许 备注 Request has body No 没有请求体 Successful response has body No 成功的响应有响应体 Safe Yes 安全 Idempotent Yes 密等性,不变性,同一个接口请求多少次都一样 Cacheable No 不能缓存 Allowed in HTML for

2020-10-11 14:52:01 1219

原创 自定义注解的定义与使用

注解的定义 **注解是一种用来修饰类、方法、变量、参数、包且不会对所修饰的代码产生直接影响的元数据形式。**属于java的一种数据类型,和类、接口、数组、枚举类似。 自定义注解并应用的步骤 定义——自定义标记 配置——把标记打在需要用到的程序代码中 解析——在编译期或运行时检测到标记,并进行特殊操作 基本语法 注解在Java中,与类、接口、枚举类似,因此其声明语法基本一致,只是所使用的关键字有所不同@interface。在底层实现上,所有定义的注解都会自动继承java.lang.annotation.A

2020-10-04 15:53:55 483

原创 PO、BO、VO、POJO、DTO(TO)、DAO的区别

PO(persistent object 持久对象) 有时也被称为Data对象,对应数据库中的entity,可以简单认为一个PO对应数据库中的一条记录。 在hibernate持久化框架中与insert/delet操作密切相关。 PO中不应该包含任何对数据库的操作。 BO(business object 业务对象) 业务对象主要作用是把业务逻辑封装为一个对象。这个对象可以包括一个或多个其它的对象。 比如一个简历,有教育经历、工作经历、社会关系等等。我们可以把教育经历对应一个PO,工作经历对应一

2020-09-13 17:56:46 973

原创 JWT(Json Web Token)原理

JWT流程 客户端向服务器发起登陆请求,post登陆数据 服务端验证身份,将用户标识符打包生成 JWT, 并且返回给客户端 客户端发起获取用户资料请求,把刚刚拿到的 JWT 一起发送给服务器 服务器发现数据中有 JWT ,进行验证 服务器返回该用户的用户资料 JWT分析 头部 Header 头部有两部分信息,形式如下: { "alg": "RS256", "typ": "JWT" } alg: 声明加密的算法 typ: 声明类型 然后对该json进行base64编码,成为Head...

2020-09-06 15:40:50 157

原创 【PS】分频法磨皮

修复小瑕疵 给图层添加黑白调整图层,降低红色通道亮度,使皮肤瑕疵暴露出来。 使用修补工具等,修复小的瑕疵。 分出高低频图层 将黑白图层去除 将照片图层复制两次,分别命名为“高频-纹理”、“低频-色调”。 将高频图层隐藏,对低频图层进行高斯模糊,模糊值设置到大致看不到皮肤的纹理为止。 将高频图层显示并选定,图像-应用图像。图层选择低频图像,混合为减去,缩放2,补偿值128。 进行磨皮 将高频图层的模式设置为线性光。 选定低频图层,向需要处理的地方用套索工具选出,进行模糊,根据效果选择合适的

2020-08-27 09:24:11 659

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除