自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

锦瑟年华,逐梦之人

学会并且能够应用新知识是最好的镇静剂!

原创 Linux tail 命令与日志查找应用场景技巧

前言tail是Linux中的一个常用命令,用于查看文件尾部的内容,它与head命令相对应。我们常用它来查看日志文件,通过-f参数可实时看文件的最新内容。tail命令格式与参数格式tail [选项...] [文件...]tail [-F | -f ] [-q] [-c # | -n #] [file ...]注:其中 # 代表数字的意思。参数解释参数解释-f--follow[={name|descriptor}], 跟踪文件的增长,并实时输出所增长的数据;缺省选项参数

2020-08-02 12:05:40 759 1

原创 Mysql explain 命令

前言MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息。通过该命令看出 mysql 是如何执行该条 sql 的,可以通过分析索引,表结构等方面来优化你的慢查询语句。用法EXPLAIN 命令用法十分简单, 在 SELECT 语句前加上 Explain 就可以了, explain + sql 语句, 例如:EXPLAIN SELECT * FROM blog WHERE blog_id > 10;执行结果如下mysql

2020-07-26 18:22:06 1621

转载 分布式系统中接口的幂等性

阅读目录业务场景接口幂等性幂等性实现方式Token机制数据库去重表Redis实现状态机总结业务场景公司有个借贷的项目,具体业务类似于阿里的蚂蚁借呗,用户在平台上借款,然后规定一个到期时间,在该时间内用户需将借款还清并收取一定的手续费,如果规定时间逾期未还上,则会产生滞纳金。用户发起借款因此会产生一笔借款订单,用户可通过支付宝或在系统中绑定银行卡到期自动扣款等方式进行还款。还款流程都走支付系统,因此用户还款是否逾期以及逾期天数、逾期费等都通过系统来计算。但是在做订单系统的时候,遇到这样一个业务场景,

2020-07-23 22:26:02 151

转载 MySql中delimiter的作用

阅读目录MySql中delimiter的作用例子先说结论MySql中delimiter的作用Mysql 中默认命令的终止符是; , 但有时候,不希望MySQL这么做,因为你输入的sql 语句可能要包含多句,句中也包含了;, 这时候就要使用delimiter换终止符啦!例子默认情况下,delimiter是分号;。在命令行客户端中,如果有一行命令以分号结束,那么回车后,mysql将会执行该命令。如输入下面的语句mysql> select * from test_table;然后回车,那么

2020-07-22 23:39:37 70

转载 XSS跨站脚本漏洞

阅读目录1 XSS漏洞原理解析2 XSS攻击类型3 反射型XSS3.1 分析反射型XSS4 存储型XSS4.1 分析存储型XSS5 DOM型XSS5.1 分析DOM型XSS1 XSS漏洞原理解析XSS跨站脚本攻击(Cross Site Scripting,简称为XSS) 是一种针对web网站安全的漏洞攻击技术,恶意攻击者利用网站程序对用户输入过滤不足,在网站中插入对用户有影响的恶意脚本代码(通常是js或html等脚本代码),当用户使用浏览器打开浏览该网页时,恶意代码就会在用户浏览器上执行,从而盗取用户

2020-07-11 12:59:22 162

转载 git 上的分支命名规范

master(主分支,永远是可用的、稳定的、可直接发布的版本,不能直接在该分支上开发)develop(开发主分支,代码永远是最新,所有新功能以这个分支来创建自己的开发分支,该分支只做只合并操作,不能直接在该分支上开发)feature-xxx(功能开发分支,在develop上创建分支,以自己开发功能模块命名,功能测试正常后合并到develop分支)release(预发布分支,在合并好feature分支的develop分支上创建,主要是用来提测的分支,修改好bug并确定稳定之后合并到develop和ma.

2020-07-11 09:49:25 172

转载 mysql中insert into和replace into以及insert ignore用法区别:

mysql中常用的三种插入数据的语句:insert into表示插入数据,数据库会检查主键,如果出现重复会报错;replace into表示插入替换数据,需求表中有PrimaryKey,或者unique索引,如果数据库已经存在数据,则用新数据替换,如果没有数据效果则和insert into一样;insert ignore表示,如果中已经存在相同的记录,则忽略当前新数据;下面通过代码说明之间的区别,如下:create table testtb( id int not null primary

2020-07-03 23:54:30 92

转载 linux后台执行命令:&和nohup

阅读目录前言& 方式执行命令nohup 方式执行命令操作程序相关命令`2>&1`解析前言当我们在终端或控制台工作时,可能不希望由于运行一个作业而占住了屏幕,因为可能还有更重要的事情要做,比如阅读电子邮件。对于密集访问磁盘的进程,我们更希望它能够在每天的非负荷高峰时间段运行(例如凌晨)。为了使这些进程能够在后台运行,也就是说不在终端屏幕上运行,有几种选择方法可供使用。& 方式执行命令当在前台运行某个作业时,终端被该作业占据, 可以在命令后面加上& 实现后台运行。例

2020-06-29 17:38:37 103

转载 如何验证下载的文件

阅读目录介绍先决条件文件验证如何工作验证下载的文件可确保您下载的内容是您的想法。在本教程中,您将了解到什么是文件验证,为什么它很重要,以及如何使用命令行工具在各种操作系统上进行验证。介绍您可能已经下载了一些开源软件,例如Linux发行版ISO,并且在下载链接旁边有一个用于下载文件校验和的链接。 你有没有想过那个校验和链接是干什么的? 该校验和用于验证刚刚下载的文件的完整性。2016年2月20日,受欢迎的Linux发行版Linux Mint网站遭到黑客入侵 ,用于安装发行版的ISO受到了损害。 在发现

2020-06-26 10:39:50 175

转载 Shiro 动态权限管理和Redis缓存

阅读目录问题描述第一个问题解决步骤第二个问题的解决步骤总结问题描述之前我们整合Shiro,完成了登录认证和权限管理的实现,登录认证没什么说的,需要实现AuthorizingRealm中的doGetAuthenticationInfo方法进行认证,但是我们在实现doGetAuthorizationInfo权限控制这个方法的时候发现以下两个问题:第一个问题:我们在ShiroConfig中配置链接权限的时候,每次只要有一个新的链接,或则权限需要改动,都要在ShiroConfig.java中进行权限的修

2020-06-21 16:31:05 251

转载 @RequestBody的使用

阅读目录基础知识介绍示例详细说明`@RequestBody`与前端传过来的`json`数据的匹配规则解析json数据大体流程概述全面的结论提示: 建议一定要看后面的@RequestBody的核心逻辑源码以及六个重要结论!本文前半部分的内容都是一些基本知识常识,可选择性跳过。声明:本文是基于SpringBoot,进行的演示说明。基础知识介绍@RequestBody主要用来接收前端传递给后端的json字符串中的数据(请求体中的数据的);GET方式无请求体,所以使用@RequestBody接收数据时

2020-06-20 23:47:35 139

原创 获取当前请求的ip地址

问题描述通常服务端用request获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的,除了服务端通过了nginx, Apache, Squid等反向代理软件这种情况就不能获取到客户端的真实IP地址了。使用反向代理服务器时,访问服务器是反向代理服务器访问的,反向代理服务器再将得到的结果返回给真实的请求方。所以这种情况直接使用request.getRemoteAddr();这个方法得到的是代理工具的ip地址, 并不是真正的请求方的地址。例如,当我

2020-06-19 21:55:49 201

转载 Shiro更改用户信息同时更改subject中的信息

阅读目录问题描述解决问题描述当更改用户信息的时候,发现subject却还是原来的信息,解决没有直接的办法更改,只能给当前用户切换身份,切换一个认证信息给安全管理器。当更改用户信息后,调用setUser方法,UserInfo是原来放在SimpleAuthenticationInfo中的对象,realName是原来realm的名字。public class ShiroUtils { public static Subject getSubjct(){ return Sec

2020-06-19 12:23:16 361

原创 解决在springboot测试中@value 获取server.port=-1情况

阅读目录问题描述原因问题描述application.yml部分配置配置项如下:server: port: 8080domain: localhost配置项对应的类代码如下:@Component@Datapublic class SiteConfig { //域名 @Value("${domain:#{null}}") private String domain; //端口号 @Value("${server.port:#{8081}}")

2020-06-18 11:42:50 509

转载 http预请求options

在有很多情况下,当我们在js里面调用一次ajax请求时,在浏览器那边却会查询到两次请求,第一次的Request Method参数是OPTIONS,还有一次就是我们真正的请求,比如get或是post请求方式。查阅相关的资料之后发现, 这是浏览器对复杂跨域请求的一种处理方式,在真正发送请求之前, 会先进行一次预请求, 就是我们刚刚说到的参数为OPTIONS的第一次请求, 它的作用是用于试探性的服务器响应是否正确, 即是否能接受真正的请求, 如果在options请求之后获取到的响应是拒绝性质的,例如500等ht

2020-06-15 20:27:20 116

原创 slf4j + log4j2 的使用
原力计划

阅读目录前言快速使用引入依赖排除依赖冲突配置文件日志打印代码log4j2的优点log4j2.xml配置文件说明前言log4j2是 log4j 的进化版本,并提供了许多 logback 可用的改进,同时解决了 Logback 体系结构中的一些固有问题。本文将从slf4j+log4j2的快速使用开始,然后介绍log4j2的优异性能以及log4j2配置文件相关的详细说明。log4j2 官网文档:https://logging.apache.org/log4j/2.x/快速使用引入依赖如果是Spr

2020-06-12 23:13:22 256

转载 alpha、beta、rc各版本区别

很多软件在正式发布前都会发布一些预览版或者测试版,一般都叫“beta版”或者 “rc版”,特别是开源软件,甚至有“alpha版”,下面来解释一下各个版本的意思。alpha版:内部测试版。α是希腊字母的第一个,表示最早的版本,一般用户不要下载这个版本,这个版本包含很多BUG,功能也不全,主要是给开发人员和 测试人员测试和找BUG用的。beta版:公开测试版。β是希腊字母的第二个,顾名思义,这个版本比alpha版发布得晚一些,主要是给“部落”用户和忠实用户测试用的,该版本任然存 在很多BUG,但是相对alp

2020-06-12 12:38:06 93

转载 门面模式

阅读目录案例分析门面模式的结构结合代码分析门面模式的实现一个系统可以有几个门面类为子系统增加新行为门面模式的优点门面模式在Tomcat中的使用在阎宏博士的《JAVA与模式》一书中开头是这样描述门面(Facade)模式的:门面模式是对象的结构模式,外部与一个子系统的通信必须通过一个统一的门面对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。案例分析现代的软件系统都是比较复杂的,设计师处理复杂系统的一个常见方法便是将其“分而治之”,把一个系统划分为几个较小的子系统。如果把医院作为一个子系

2020-06-07 19:53:02 77

转载 防止form表单重复提交的几种方案

阅读目录前言form重复提交场景解决方案一:前端利用JavaScript防止表单重复提交二:利用Session防止表单重复提交参考前言如果网速比较慢的情况下,用户点击的提交发现半天没有反映,于是又重新点击了几次提交按钮,这就造成了重复提交的问题。那么在我们的开发中必须解决这种重复提交的问题。比如有个需要用户填写用户名和密码然后提交到后台进行登录验证的一个提交,重复提交主要体现如下几种场景:form重复提交场景场景1:在网络延迟的情况下让用户有时间点击多次submit按钮导致表单重复提交。具体行为

2020-05-30 15:41:17 137

转载 @Validated和@Valid的区别

Spring Validation验证框架对参数的验证机制提供了@Validated(Spring’s JSR-303规范,是标准JSR-303的一个变种),javax提供了@Valid(标准JSR-303规范),配合BindingResult可以直接提供参数验证结果。其中对于字段的特定验证注解比如@NotNull等网上到处都有,这里不详述。在检验Controller的入参是否符合规范时,使用@Validated或者@Valid在基本验证功能上没有太多区别。但是在分组、注解地方、嵌套验证等功能上两个有所不

2020-05-29 10:09:44 176

转载 领域驱动设计系列文章3 —— 有选择性的使用领域驱动设计

领域驱动设计系列文章通过现实例子显示领域驱动设计的威力浅析VO、DTO、DO、PO的概念、区别和用处有选择性的使用领域驱动设计阅读目录前言影响选择的因素领域驱动设计的缺点选择使用领域驱动设计的导性原则前言本系列的第一篇博文抛砖引玉,大谈领域驱动设计的优势,这里笔者还是希望以客观的态度,谈谈领域驱动设计的缺点及其不适合使用的场景,以让读者可以有选择性的使用领域驱动设计。影响选择的因素我们知道,没有最好,只有最合适,设计也是一样。因此,所谓设计,就是以你和你的团队的知识、经验和智慧,全面充.

2020-05-28 16:36:27 321

转载 领域驱动设计系列文章2 —— 浅析VO、DTO、DO、PO的概念、区别和用处

阅读目录前言概念模型VO与DTO的区别VO与DTO的应用DTO与DO的区别DTO与DO的应用DO与PO的区别DO与PO的应用总结前言本篇文章主要讨论一下我们经常会用到的一些对象:VO、DTO、DO和PO。由于不同的项目和开发人员有不同的命名习惯,这里我首先对上述的概念进行一个简单描述,名字只是个标识,我们重点关注其概念。概念VO(View Object):视图对象,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。DTO(Data Transfer Object):数据传输对象,

2020-05-28 16:35:05 112

转载 领域驱动设计系列文章1 —— 通过现实例子显示领域驱动设计的威力

阅读目录问题描述案例分析面向过程的设计方式(贫血模型)面向过程的领域驱动设计方式(充血模型)问题描述曾经参与过系统维护或是在现有系统中进行迭代开发的软件工程师们,你们是否有过这样的痛苦经历:当需要修改一个Bug的时候,面对一个类中成百上千行的代码,没有注释,千奇百怪的方法和变量名字,层层嵌套的方法调用,混乱不堪的结构,不要说准确找到Bug所在的位置,就是要清晰知道一段代码究竟是做了什么也非常困难,最终,改对了一个Bug,却多冒出N个新Bug;同样的情况,当你拿到一份新的需求,需要在现有系统中添加功能的

2020-05-28 16:33:31 447

转载 浅谈常见的七种加密算法及实现

阅读目录前言正文1. 数字签名2. 加密和解密2.1. 加密2.2. 解密3. 对称加密和非对称加密3.1. 对称加密3.2. 非对称加密4. 常见的签名加密算法4.1. MD5算法4.2. SHA1算法4.3. HMAC算法4.4. AES/DES/3DES算法4.4.1. DES算法4.4.2. 3DES算法4.4.3. AES算法4.5. RSA算法4.6. ECC算法5. 各种加密算法对比5.1. 散列算法比较5.2. 对称加密算法比较5.3. 非对称加密算法比较5.4. 对称算法与非对称加密算法5

2020-05-27 23:29:13 215

转载 html base64 img 图片显示

阅读目录前言Data URI scheme用例利弊前言大家可能注意到了,网页上有些图片的src或css背景图片的url后面跟了一大串字符,比如:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAYAAABIdFAMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHhJREFUeNo8zjsOxCAMBFB/KEAUFFR0Cbng3nQPw68ArZdAlOZppPFIBhH5EAB8

2020-05-27 21:26:32 181

转载 SpringBoot中使用Swagger2构建强大的API文档

原文标题:Spring Boot 2.x基础教程:使用Swagger2构建强大的API文档作者:程序猿DD_链接:http://blog.didispace.com/spring-boot-learning-21-2-2/阅读目录前言准备工作整合Swagger2添加文档内容API文档访问与调试代码示例其他参考前言随着前后端分离架构和微服务架构的流行,我们使用Spring Boot来构建RESTful API项目的场景越来越多。通常我们的一个RESTful API就有可能要服务于多个不同的开发人.

2020-05-27 13:44:21 67

转载 Spring Boot 定时任务 @Scheduled

阅读目录前言Java 定时任务的几种实现方式创建定时任务@Scheduled详解总结前言项目开发中经常需要执行一些定时任务,比如在每天凌晨,需要从 implala 数据库拉取产品功能活跃数据,分析处理后存入到 MySQL 数据库中。类似这样的需求还有许多,那么怎么去实现定时任务呢,有以下几种实现方式。Java 定时任务的几种实现方式基于 java.util.Timer 定时器,实现类似闹钟的定时任务使用 Quartz、elastic-job、xxl-job 等开源第三方定时任务框架,适合分布式项

2020-05-25 10:30:57 109

转载 Spring中@Async用法总结

阅读目录引言何为异步调用?常规的异步调用处理方式@Async介绍如何在Spring中启用@Async@Async的使用基于@Async无返回值调用基于@Async返回值的调用基于@Async调用中的异常处理机制@Async调用中的事务处理机制总结引言在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的,但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在Spring 3.x之后,就已经内置了@Async来完美解决这个问题,本文将完成介绍

2020-05-24 10:53:48 67

原创 Redis key前缀的设计与使用

阅读目录采用模板方法模式进行设计前缀空间RedisPrefixKey 接口RedisBasePrefixKey 抽象类UserKey 实现类(自定义)改造RedisUtil工具类的方法具体使用参考在Java web开发中,redis的使用已非常频繁了,大规模的使用也延伸了一些问题,例如:我定义了一个redis key name 存放的值为用户昵称,而这时同事定义一个key 也叫name,存放的是商品名字,那么冲突再所难免,为了解决这一问题,合理的设计redis key前缀 成为了迫切的需求。我们一起来看看

2020-05-22 09:48:08 294

转载 模板方法模式

阅读目录模板方法模式的结构结合代码分析模板方法模式中的方法模板方法基本方法默认钩子方法命名规则使用场景模板方法模式在Servlet中的应用在阎宏博士的《JAVA与模式》一书中开头是这样描述模板方法(Template Method)模式的:模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。模板方法模式的结构模板方

2020-05-21 21:09:30 67

原创 Ajax发送Post请求,后端控制器使用重定向页面没有自动跳转
原力计划

阅读目录问题描述原因解析解决方法携带参数进行重定向RedirectAttributes的使用使用RedirectAttributes携带参数进行重定向例子小疑惑问题描述前端的form表单提交,Ajax发送了一个post请求,后端控制器方法处理后,进行页面跳转时,发现无法进行自动跳转。前端代码:<form action="" method="post" id="form1"><!-- 此处省略form表单中的内容--> <button id="regbtn" t

2020-05-12 11:01:35 524 5

原创 Java 获取含有中文字符字符串的字节长度

由于Java是基于Unicode编码的,因此,一个汉字的长度为1,而不是2。 但有时需要以字节单位获得字符串的长度。例如,“123abc长城”按字节长度计算是10,而按Unicode计算长度是8。 为了获得10,需要从头扫描根据字符的Ascii来获得具体的长度。1. 中文正则表达式目前,网上查到的资料有这两种:(1) [\u4e00-\u9fa5] : 匹配所有中文。(2)[^\x00-\xff]: 匹配所有非ASCII的字符。比如,有一个字符串是中文状态的括号(), 使用第一个正则表达式是不会被

2020-05-10 22:54:32 101

翻译 Spring @Controller 和@RestController注解

阅读目录1.概述2. Spring MVC @Controller3. Spring MVC @RestController1.概述在本快速入门教程中,我们将讨论Spring MVC中@Controller和@RestController注解之间的区别。第一个注解@Controller用于传统的Spring控制器,并且很长时间以来一直是框架的一部分。另一个注解@RestController是是为了简化的RESTful Web服务的创建在Spring 4.0引入了。这是一个便利的注解,它将@Contr

2020-05-09 20:17:30 74

转载 Lambda 表达式有何用处?如何使用?

阅读目录什么是Lambda?Lambda表达式有什么作用?Lambda配合Optional可以使Java对于null的处理变的异常优雅答主对Java比较熟悉,就用Java来讲一讲吧。什么是Lambda?我们知道,对于一个Java变量,我们可以赋给其一个“值”。如果你想把“一块代码”赋给一个Java变量,应该怎么做呢?比如,我想把右边那块代码,赋给一个叫做aBlockOfCode的Ja...

2020-04-26 16:33:15 83

转载 JAVA 8 函数式接口 - Functional Interface

阅读目录什么是函数式接口(Functional Interface)函数式接口用途关于@FunctionalInterface注解函数式接口里允许定义默认方法函数式接口里允许定义静态方法函数式接口里允许定义java.lang.Object里的public方法JDK中的函数式接口举例参考资料什么是函数式接口(Functional Interface)其实之前在讲Lambda表达式的时候提到过,所...

2020-04-26 10:13:14 86

转载 IDEA 中使用.ignore插件忽略不必要提交的文件

最近初学Git,而且在使用的IDE是IntelliJ IDEA,发现IDEA在提交项目到本地仓库的时候,会把.idea文件夹中的内容也提交上去,这里面放的是一些项目的配置信息,包括历史记录,版本控制信息等。可以不传到Git上面去。这个时候就需要编写.gitignore文件来忽略提交这些文件。在IDEA中有一个插件.ignore可以帮我们做这件事。安装步骤先来看下如何安装。点击File-&g...

2020-04-24 20:05:02 90

原创 IDEA中使用SpringBoot 热启动

在开发过程中,当写完一个功能我们需要运行应用程序测试,可能这个小功能中存在多个小bug,我们需要改正后重启服务器,这无形之中拖慢了开发的速度增加了开发时间,SpringBoot提供了spring-boot-devtools,使我们在更改应用和配置文件的时候,自动重启应用!配置步骤打开pom.xml文件添加依赖<dependency> <groupId>org...

2020-04-23 11:07:27 138

转载 动态语言和静态语言的区别

静态类型语言与动态类型语言有三个名词容易混淆:Dynamic Programming Language (动态语言或动态编程语言)Dynamically Typed Language (动态类型语言)Statically Typed Language (静态类型语言)FantasySoft在他文章中所提到的动态语言与静态语言实际上指的就是动态类型语言与静态类型语言。动态语言,准确地...

2020-04-21 20:57:02 102

原创 ubuntu 禁止外部ping和允许ping方法

一、前言在日常网络服务器的维护和使用过程中,ping命令是最为常用的一个检测命令,它所使用的是ICMP协议。但是为了保护主机,很多时候我们需要禁止ICMP协议,即禁止用户ping操作,在这种情况下,终端再使用ping命令检测,服务器是不会再做出任何响应。Linux默认是允许Ping响应的,系统是否允许Ping由2个因素决定的:A、内核参数B、防火墙需要这2个因素同时允许才能允许Ping,...

2020-04-05 10:11:58 613

转载 ubuntu 防火墙相关命令

1.查看防火墙当前状态sudo ufw status2.开启防火墙sudo ufw enable3.关闭防火墙sudo ufw disable4.查看防火墙版本sudo ufw version5.默认允许外部访问本机sudo ufw default allow6.默认拒绝外部访问主机sudo ufw default deny7.允许外部访问53端口sudo ufw all...

2020-04-05 09:41:44 88

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