自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

chenyi406的博客

chenyi406的博客

  • 博客(33)
  • 收藏
  • 关注

原创 Hibernate Validator参数验证

之前使用自定义注解结合Spring AOP实现了一个@NotNull注解,注解作用于Controller层的方法中,对传入参数进行拦截判断是否为空。在后续开发使用中发现仅仅对参数进行是否为空判断是远远不够的,还包含其他的验证:字符串长度、邮箱格式、手机号格式等等。由此找到Hibernate Validator提供的一些注解。常用注解如下:@NotBlank(message =) 验证字符串非null,且长度必须大于0@Email 被注释的元素必须是电子邮箱地址@Length(min=,max=) 被

2020-06-16 13:57:13 574

原创 @Resource与@Autowired

@Autowired@Autowired 属于Spring中的注解,使用必须有spring的依赖@Autowired 是根据类型进行装配(byType),默认情况下装配的对象必须存在,如果允许为null的话需要设置 @Autowried(required=false)如果想使用名称装配可以结合@Qualifier注解使用(@Autowried @Qualifier(“xxx”)) ...

2020-03-11 00:34:14 334

原创 常见排序算法02--冒泡排序

核心思想重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。排序流程将序列当中的左右元素,依次比较,若果左边元素比右边元素大,则交换,保证右边的元素始终大于左边的元素;( 第一轮结束后,序列最后一个元素一定是当前序列的最大值;)对序列当中剩下的...

2020-03-07 23:26:30 155

原创 常见排序算法01--直接插入排序

核心思想将数组中的所有元素依次跟前面已经排好的元素相比较,如果选择的元素比已排序的元素小,则交换,直到全部元素都比较过。排序流程因此,直接插入排序可以用两个循环完成:第一层循环:遍历待比较的所有数组元素;第二层循环:将本轮选择的元素依次与该元素前面已经排好序的元素相比较,如果选择的元素大于前一位元素则交换;举例说明排序数组 [16,12ᴬ,14,7,12ᴮ,8] (注:12ᴬ与12ᴮ...

2020-03-05 00:47:13 148

原创 配置MySQL允许远程连接

默认情况下,MySQL只允许本地登录,如果要开启远程连接,需要修改/etc/mysql/my.conf文件。一、修改/etc/mysql/my.confbind-address = 127.0.0.1 #改为bind-address = 0.0.0.0二、为需要远程登录的用户赋予权限1、新建用户远程连接mysql数据库grant all on . to admin@’%’ iden...

2020-03-02 00:11:03 280

原创 Redis-事务

redis事务可以一次执行多个命令,是一组命令的集合。一个事务中的所有命令都会被序列化,按顺序的串行执行,执行中不会被其他命令插入,不允许加塞。常用命令:MULTI #标记一个事务块的开始EXEC #执行所有事务块的命令DISCARD #放弃执行事务块的所有命令UNWATCH #取消WATCH命令对所有key的监视WATCH key [key]...

2020-03-01 14:58:36 98

原创 Redis持久化

Redis 的读写都是在内存中,所以它的性能较高,但在内存中的数据会随着服务器的重启而丢失,为了保证数据不丢失,我们需要将内存中的数据存储到磁盘,以便 Redis 重启时能够从磁盘中恢复原有的数据,而整个过程就叫做 Redis 持久化。Redis 持久化的几种方式快照方式(RDB, Redis DataBase)将某一个时刻的内存数据,以二进制的方式写入磁盘;文件追加方式(AOF, App...

2020-03-01 01:12:19 165 1

原创 Redis常用配置项

redis.conf文件为配置文件单位# it in the usual form of 1k 5GB 4M and so forth:## 1k => 1000 bytes# 1kb => 1024 bytes# 1m => 1000000 bytes# 1mb => 1024*1024 bytes# 1g => 1000000000 bytes#...

2020-02-29 15:33:37 138

原创 Redis常用命令

Redis键(key)1.keys查找并返回所有符合给定模式 pattern 的 key命令格式: KEYS patternpattern通配符:?:任一字符;*:任意多个字符[ae]:匹配a或e;[^e]:匹配非e[a-b]:匹配a-b之间(含)的字符\ :字符转义127.0.0.1:6379> keys k?1) "k2"2) "k1"3) "k3"2. ...

2020-02-29 01:00:23 374

原创 @Component @Repository @Service @Controller

@Component@Component 相当于实例化类的对象,其他三个注解可以理解为@Component的子注解或细化。 在annotaion配置注解中用@Component来表示一个通用注释用于说明一个类是一个spring容器管理的类,此类将有spring扫描并加入容器参与IOC。即就是该类已经拉入到spring的管理中了。通过在 classpath 中通过自动扫描方式把组建纳入 sprin...

2020-02-27 18:13:25 96

原创 Java中线程池

线程池的优点:1、降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。2、提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。3、提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。获取线程池的三个方法: //创建一个定长线程池,可控制线程最大并发数,超出的...

2020-02-22 16:35:00 209

原创 Spring boot websocket项目打包时报错

Spring boot 开发中,在使用了WebSocket的项目时,运行没有任何错误,但是打包的时候报一下错误。在此记录解决方案。Caused by: java.lang.IllegalStateException: javax.websocket.server.ServerContainer not available at org.springframework.util.Assert.s...

2019-12-27 21:11:04 415

原创 java-方法的参数传递机制

java-方法的参数传递机制1.先看以下代码/** * java-方法的参数传递机制 * * @author chenyi * Create on 2019/10/16 */public class Exam { public static void main(String[] args) { int i = 1; String str =...

2019-12-27 21:03:47 149

原创 spring boot 配置允许跨域

简单概述什么是跨域跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,这里跨域是广义的。其实我们通常所说的跨域是狭义的,是由浏览器同源策略限制的一类请求场景。浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域。跨域的访问会带来许多安全性的问题,比如,cookie 一般用于状态控制,常用于存储登录的信息,如果允许跨域访问,那么别的网站只需要一段脚本就可以获取你的...

2019-12-26 21:04:45 201

原创 spring boot 配置拦截器

一、定义拦截器定义拦截器,需要实现 HandlerInterceptor 接口。HandlerInterceptor 接口是 Spring Boot 提供的拦截器的父类。该接口中有三个方法。preHandle、postHandle、afterCompletion。preHandle:某个 URL 匹配到对应的 Controller 中的某个方法,且在这个方法执行之前。该方法可以决定是否将请求...

2019-12-26 20:54:45 102

原创 Java发送HTTP请求

Java实现发送HTTP请求,包含GET、POST、POST(json格式参数)package com.chenyi.quickstart.common;import java.io.*;import java.net.HttpURLConnection;import java.net.URL;import java.util.Map;/** * HTTP请求工具类 * GET...

2019-12-26 20:17:14 129

原创 @JsonSerialize注解

@JsonSerialize此注解用于属性或者getter方法上,用于在序列化时嵌入开发者自定义的代码。较常用的是对Double、Float类型进行保留小数操作、Date日期类型格式化score分数保留两位有效数字/** * @author chenyi * Create on 2019/9/10 */@Data@ToStringpublic class Score { ...

2019-12-26 16:45:43 3142

原创 封装接口数据返回结果集

在前后端完全分离的项目当中,为了方便与前端人员的数据交互,定义返回结果集,封装数据、状态码、错误信息。定义接口状态码枚举类/** * 接口处理状态code和description 枚举 */public enum ResponseCode { ERROR(500, "ERROR"),//错误,服务器出BUG SUCCESS(200, "SUCCESS"),//请求成功 ...

2019-12-26 16:23:48 1262

原创 二叉树遍历

二叉树遍历可以使用深度优先遍历和广度优先遍历,深度优先又可以分为前序、中序、后序三种方式遍历,每种方式都可以通过递归和非递归方法实现。一、深度优先递归遍历:前序遍历算法:先遍历根结点再递归遍历左子树最后递归遍历右子树首先访问根结点A;遍历A结点的左子树,B结点。B结点有子结点,再按照前序遍历方式遍历,先访问根结点,即B;遍历B结点左子树,D结点;D结点没有子结点,遍历B结点...

2019-12-18 19:12:16 99

原创 MyBatis中 #{} 与 ${} 的区别

#{} 在一定程度上防止了SQL注入使用#{}入参,MyBatis会生成PrepareStatement并且可以安全地设置参数(=?)的值。因为sql语句已经预编译好了,传入参数的时候,不会重新生产sql语句。安全性高。JDBC中PreparedStatement是我们很熟悉的Statement的子类,它的对象包含了编译好的SQL语句。这种“准备好”的方式不仅能提高安全性,而且在多次执行同一个...

2019-12-09 16:48:39 136

原创 Spring data MongoDB PageRequest 方法弃用

如:Pageable pageable =new PageRequest(page, size, sort);点进PageRequest方法,可以看到 已经加了@Deprecated…/** @deprecated */@Deprecatedpublic PageRequest(int page, int size, Sort sort) {super(page, size);th...

2019-12-05 08:42:03 249

原创 MySQL索引

一、什么是索引MySQL官方对索引的定义为:索引是帮助MYSQL高效获取数据的数据结构。其本质是数据结构。可以简单理解为“排好序的快速查找数据结构”:在数据之外,数据库系统还维护这满足特定查找算法的数据结构,这些数据结构以某种方式指向数据。...

2019-12-04 21:55:57 301

转载 MySQL---存储引擎

存储引擎:数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以 获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。MySql的核心就是存储引擎。InnoDB存储引擎InnoDB 事务型数据库的首选引擎,支持事务安全表(ACID),支持...

2019-12-04 19:51:55 126

原创 ArrayList线程不安全-笔记

List list = new ArrayList();实际上底层new了一个Object类型的数组。数组的初始大小为10,当list的大小超过10的时候会进行扩容,扩容大小为原值的一半。拷贝的方法用的Arrays.copyOf(araryNew, araryNew.length)方法。ArrayList在多线程下不安全。会出现java.util.ConcurrentModificationn...

2019-12-03 08:42:43 327

原创 设计模式01--单例模式

单例模式单例模式保证了系统内存中该类只存在一个对象,节省了系统资源,对于一些需要频繁创建销毁的对象,使用单例模式可以提高系统性能当想实例化一个单例类的时候,必须要记住使用相应的获取对象的方法,而不是使用new单例模式使用的场景:需要频繁的进行创建和销毁的对象、创建对象时耗时过多或耗费资源过多 即:重量级对象 ,但又经常用到的对象、工具类对象、频繁访问数据库或文件的对象 比如数据源、sess...

2019-11-27 11:31:52 128

原创 Nginx相关知识收纳总结

1、什么是Nginx?Nginx一款高性能HTTP服务器和反向代理服务器;也是一个IMAP、POP3、SMTP代理服务器;Nginx的设计不像传统的服务器那样使用线程处理请求,而是一个更加高级的机制—事件驱动机制,是一种异步事件驱动结构。2、Nginx的一些特性(1) 跨平台:可以在大多数Unix like 系统编译运行。而且也有Windows的移植版本;(2) 配置异常简单:非常的简单,...

2019-11-26 19:53:10 249

原创 Spring boot 集成mina框架

一、Apache mina框架是什么?https://baike.baidu.com/item/Apache%20MINA\二、如何集成并使用mina框架1.引入pom依赖 <dependency> <groupId>org.apache.mina</groupId> <artifact...

2019-11-11 22:12:14 2615

原创 Springboot使用WebSocket无法注入service的解决方法

因为websocket需要开一个自己的线程,如果采用注解的话就是把它当做一个普通的组件放在容器里,调用的时候会一直在spring的线程里,而不是自己独立的线程。所以无法注入service.解决方法:spring-boot启动类@SpringBootApplication@MapperScan("com.hiramgames.dao")public class Hiramgames...

2019-11-11 15:14:26 1481

原创 javaScript 中const,var,let的区别

1.const定义的变量不可以修改,而且必须初始化。1 const b = 2;//正确2 // const b;//错误,必须初始化 3 console.log('函数外const定义b:' + b);//有输出值4 // b = 5;5 // console.log('函数外修改const定义b:' + b);//无法输出 2.var定义的变量可以修改,如果不初始化会输出unde...

2019-11-11 15:07:15 78

原创 Spring boot全局异常统一处理@RestControllerAdvice

@RestControllerAdvice注解定义全局处理异常类,可以返回JSON格式提示信息1、使用方法import com.zytech.mobile.common.ServerResponse;import org.springframework.web.HttpRequestMethodNotSupportedException;import org.springframework...

2019-11-11 15:03:25 402

原创 使用Spring AOP、自定义注解实现对Request传参拦截

使用Spring boot开发项目与前端人员对接接口时由于在调试,经常传来null、undefined、NaN等非法参数,于是利用spring 的自定义注解以及AOP实现简单的传入参数拦截。一、使用方法 /** * 登录 * 当参数是实体类时,通过 参数名.属性名 的方式注解参数 */ @CheckParam(params = {"user.stuN...

2019-11-11 14:43:24 1912

原创 IDEA警告:SQL dialect is not configured

IDEA能自动检查拼接的sql语句的语法正确性。消除大黄色警告的方法:在报警告的地方,按下快捷键Alt+Enter–>Generic,设置其dialect。

2019-11-10 20:50:30 331

原创 java之volatile

1.volatile是什么?volatile是java虚拟机提供的轻量级的同步机制。(1)保证可见性(2)不保证原子性(3)禁止指令重排

2019-11-06 17:19:25 97

空空如也

空空如也

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

TA关注的人

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