自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(56)
  • 资源 (2)
  • 收藏
  • 关注

原创 Keepalived实现Nginx(Docker)高可用

Keepalived实现Nginx(Docker)高可用1、在两台服务器上准备Docker的Nginx容器随便拉一个版本的nginxdocker pull nginx:1.12.2创建nginx容器docker run -d --name nginx:1.12.2创建/mydata/nginx/conf目录,并将nginx容器中的nginx.conf文件拷贝到该路径下,修改目录权限mkdir -p /mydata/nginx/confdocker cp nginx:/etc/nginx/

2022-05-14 23:12:13 864

原创 ELK部署以及使用

ELK部署以及使用ELK实际上是三个工具的集合,Elasticsearch + Logstash + Kibana,这三个工具组合形成了一套实用、易用的监控架构,很多公司利用它来搭建可视化的海量日志分析平台。ELK部署Dockerdocker是目前非常流行的容器化技术,可以非常方便快捷的部署服务,解决项目部署时的环境问题,实现“一次封装,到处运行”,我们采用docker可以快速的部署ELK。Docker-composeDocker Compose是一个用于定义和运行多个docker容器应用的工具

2022-04-12 23:16:08 4448

原创 Redis集群搭建

Redis集群搭建搭建redis集群的场景方式有:客户端分区,在客户端根据hash计算将数据保存到那个redis节点,该方案的代表有redis sharding。优点是不使用第三方中间件,分区逻辑可控,配置简单,节点之间无关联,容易线性扩展,灵活性高;缺点是客户端无法动态增删节点,需要自行维护分发逻辑,节点之间无连接共享,会造成连接浪费(需要连接多个redis),而且一旦有节点宕机,会导致服务不可用。代理分区,类似于mysql使用sharding-proxy,客户端连接redis代理,由代理实现分区

2022-04-05 22:19:05 1261

原创 Mysql主从复制配置

Mysql主从复制配置准备两台服务器,服务器的IP地址分别为192.168.56.101、192.168.56.102,在两台服务器上分别使用Docker部署Mysql,Master部署在192.168.56.101服务器,Slave部署在192.168.56.102服务器,实现Mysql主从同步功能。一、Docker部署MysqlMaster节点sudo docker run -p 3306:3306 --name mysql-master \-v /mydata/mysql/master/

2022-03-29 22:21:11 1436

原创 11、队列

队列在日常工作中使用的没有集合多,但是同样特别重要,我们平时使用到的线程池、读写锁、消息队列等等技术和框架,底层原理都是队列J,队列是很多高级 API 的基础,学好队列,对自己深入 Java 学习非常重要。AVA中常用的队列有LinkedBlockingQueue、ArrayBlockingQueue、SynchronousQueue、DelayQueue,下面简单介绍下这四种队列各种的特别以及应用场景。本文只做队列的入门级学习,不具体研究源码。Queue接口Queue接口是队列最基础的接口,基本所有的

2022-02-28 21:58:56 312

原创 10、并发集合类

ArrayList、LinkedList等List类集合,以及HashMap、TreeMap、LinkedHashMap等Map类集合,都是线程不安全的,当作为共享变量时,在多线程并发环境下存在线程安全问题,为此,JAVA提供了线程安全的集合,List类集合有Vector、Collections.synchronizedList、CopyOnWriteArrayList,Map类集合有Hashtable、Collections.synchronizedMap、ConcurrentHashMap。List类

2022-02-26 23:39:24 186

原创 自定义注解校验List集合数据

实现功能:自定义注解实现对信息封装类中的List集合中的元素信息校验,并支持通过注解属性指定是否允许集合为空。自定义注解@Target(FIELD)@Retention(RUNTIME)@Constraint(validatedBy = StringListValidator.class)public @interface StringList { // 检验失败时的错误提示信息 String message() default "字符串格式错误"; // 集合为空时的错

2022-02-25 20:35:42 2219

原创 10、并发集合类

ArrayList、LinkedList等List类集合,以及HashMap、TreeMap、LinkedHashMap等Map类集合,都是线程不安全的,当作为共享变量时,在多线程并发环境下存在线程安全问题,为此,JAVA提供了线程安全的集合,List类集合有Vector、Collections.synchronizedList、CopyOnWriteArrayList,Map类集合有Hashtable、Collections.synchronizedMap、ConcurrentHashMap。List类

2022-02-24 23:22:59 669

原创 09、HashSet、TreeSet、LinkedHashSet 源码解析

Set类集合通过组合不同的Map,实现各种Set的功能,HashSet组合的是HashMap,TreeSet组合的是TreeMap,而LinkedHashSet则是继承HashSet,HashSet和TreeSet之所以采用组合而不是继承的方式,是因为:继承表示父子类是同一个事物,而 Set 和 Map 本来就是想表达两种事物,所以继承不妥,而且 Java 语法限制,子类只能继承一个父类,使用继承后续难以扩展;组合更加灵活,可以任意的组合现有的基础类,并且可以在基础类方法的基础上进行扩展、编排等,而且

2022-02-19 00:39:02 167

原创 08、Map源码面试题

1、 Map 数据结构类问题1、 说一说 HashMap 底层数据结构HashMap的底层数据结构是数组+链表+红黑树,之所以采用这种结构,是因为数组通过下标查询的速度很快,方便快速查找,时间复杂度是O(1),数组的默认大小是16;当向HashMap中put()元素时,会先根据key计算数组的下标index(计算方式是(n-1) & hash,n是数组的长度,hash是key的hashcode),通过index获取数组的值,如果值不为null就说明hash冲突了,会接着寻找以该数组元素为头节点

2022-02-18 23:23:56 231

原创 07、集合之TreeMap和LinkedHashMap

07、集合之TreeMap和LinkedHashMapTreeMapTreeMap的底层数据接口是红黑树,由于红黑树的左小右大的特性,所以TreeMap中的元素会自动根据key进行排序,在初始化TreeMap时,可以传自定义的排序器comparator,如果没有传排序器会默认使用key的compareTo()方法进行比较。因为底层使用的时红黑树,所以TreeMap的get()、put()、remove()方法的时间复杂度都是O(log(n))。排序的两种方式实现comparable接口,通过com

2022-02-17 22:03:20 489

原创 06、集合之HashMap

06、集合之HashMapJDK7与JDK8 HashMap的比较HashMap的结构?链表与红黑树之间的转换?为什么是6和8(跳过7是为了避免链表和红黑树之间的频繁切换)扩容的细节?扩容之后数据的迁移?https://blog.csdn.net/Lammonpeter/article/details/104271481?spm=1001.2014.3001.5501...

2022-02-17 22:02:52 108

原创 05、List常见面试题

1、说说你自己对 ArrayList 的理解?很多面试官喜欢这样子开头,考察对 ArrayList 有没有总结经验,介于 ArrayList 内容很多,建议先回答总体架构,再从某个细节出发作为突破口,比如这样:ArrayList 底层数据结构是个数组,其 API 都做了一层对数组底层访问的封装,比如说 add 方法的过程是……(这里可以引用我们在 ArrayList 源码解析中 add 的过程)。一般面试官看你回答得井井有条,并且没啥漏洞的话,基本就不会深究了,这样面试的主动权就掌握在自己手里面了,如

2022-02-13 12:34:59 227

原创 04、集合之LinkedList

底层架构LinkedList底层数据架构是双向链表,整体架构如下图所示:从架构图可以得知:链表中的每个元素节点叫Node,每个Node由prev、item、next三部分组成,item中存放元素的值,prev指向前一个节点,next指向后一个节点;LinkedList中有两个成员变量first和last,first指向头节点,last指向尾节点,如果LinkedList为空,first和last都指向null;头节点的prev指向null,尾节点的next也指向null;因为是双向链表,理论

2022-02-12 22:46:21 282

原创 03、集合之ArrayList

ArrayList的底层数据结构是数组,数组的默认长度是10。需要注意的是,当使用new ArrayList()的方式创建了ArrayList集合时,数组的长度为0,只有当调用了add()方法后,数组的长度才会变成默认长度10。基本概念ArrayList中有几个非常重要的成员变量需要我们注意下,①elementData 是真正用于存储数据的数组;②DEFAULT_CAPACITY 表示数组的初始大小,默认是 10;③size 表示当前数组中的元素数量,类型 int,没有使用 volatile

2022-02-12 00:42:18 1237

原创 02、Java常用关键字

static关键字static意思是静态的、全局的,一旦被修饰,说明被修饰的东西在一定范围内是共享的,谁都可以访问,这时候需要注意并发读写的问题。1、修饰的对象static可以修饰成员变量、方法和代码块。修饰成员变量当static修饰成员变量时,如果该变量是public,表示该变量任何类都可以直接访问,无需初始化类,直接使用类名的方式就可以访问。这时候要特别注意线程安全的问题,当多个线程同时对共享变量进行读写时,很有可能出现并发问题,如我们定义了public static List<St

2022-02-09 17:38:59 467

原创 01、String、Long源码解析

String1、不变性不变性指的是值一旦被初始化,就不能再被改变,如果值被修改了,就会生成新的类,内存的物理地址会被改变。String之所以具有不变性的原因:String类被final修饰,所有String类不能被继承,也就是说任何对String的操作方法都不会被继承覆写;String中保存数据的是一个char类型的数组,该数组也被final修饰了,也就是说一旦给String变量赋值了,内存地址是绝对无法再被修改的,而且该数组被private修饰,外部无法访问到该数组变量,只能通过String类

2022-02-07 21:15:14 294

原创 IDEA使用Docker插件搭建Eureka集群

IDEA使用Docker插件搭建Eureka集群实现的功能:1、利用Linux服务器上的Docker将本地Eureka项目打包成镜像,并自动上传到Linux服务器上,同时创建Docker容器(本机上不需要安装Docker环境)2、搭建Eureka集群(在三台Linux服务器上部署Eureka,并相互注册)3、在Eureka中使用Spring Security,访问Eureka页面需要输入账号和密码,增加Eureka的安全性一、准备工作1、编写Eureka项目正常搭建Eureka项目即可,

2021-08-28 16:07:20 544

原创 IDEA优雅的使用Mybatis

安装Free Mybatis Plugin插件,参考:idea 安装 mybatis 插件安装了Free Mybatis Plugin插件之后,可以在DAO中定义好接口之后,直接按住Alt+Enter组合键进入对应的Mapper.xml文件中当我们需要自己写SQL语句时,在接口的形参前面加上@Param注解,注解中写上参数名,这样在mapper.xml中就可以直接通过#{参数名...

2020-04-11 12:22:07 231 1

原创 java.lang.ClassNotFoundException: org.springframework.data.repository.config.RepositoryConfiguration

java.lang.ClassNotFoundException: org.springframework.data.repository.config.RepositoryConfigurationDelegate导入Redis依赖包之后启动项目报java.lang.ClassNotFoundException: org.springframework.data.repository.conf...

2020-03-12 23:31:40 2741 3

转载 JavaScript中for in 与for of的区别

参考文章:for in 和for of的区别

2020-02-27 13:25:26 274

原创 Koa中使用Sequelize操作数据库

第一步:安装koa、koa-router、sequelize、mysql2,mysql2是mysql的驱动包,如果使用的是其他的数据库,就改用其他数据库的驱动包package.json中依赖的版本:"dependencies": { "bcryptjs": "^2.4.3", "koa": "^2.7.0", "koa-router": "^7.4.0", ...

2020-02-26 17:04:15 1132

原创 微信小程序中通过Basic Auth传递token

npm导入用于Base64加密的工具包js-base64// package.js"dependencies": { "js-base64": "^2.5.2"}微信小程序中,将token放入到Authorization中import {Base64} from "js-base64"Page({ data: { }, onGetClassicLatest(...

2020-02-26 12:35:55 1313

原创 NodeJS中token生成与认证

导入依赖koa、koa-router、basic-auth、jsonwebtoken// package.json"dependencies": { "basic-auth": "^2.0.1", "jsonwebtoken": "^8.4.0", "koa": "^2.7.0", "koa-router": "^7.4.0" }生成token...

2020-02-25 21:04:41 1326

原创 await与async的作用及用法

await与async的作用及用法async和await被称作是异步的终极解决方案await有两个作用,一是作为求值关键字,二是将异步操作变成同步操作;如果方法中使用了await,那么在方法前面必须加上async作为求值关键字,await后面可以跟Promise或表达式,可以直接获取Promise中的值或表达式的值后面跟Promiseapp.use(async (ctx, n...

2020-02-23 13:52:18 5951

原创 koa中使用require-directory实现路由自动注册

koa中使用require-directory实现路由自动注册koa中使用require-directory实现路由自动注册第一步:导入依赖,使用npm导入koa、koa-router、require-directory第二步:在主程序中加入路由自动注册的代码const Koa = require("koa");const requireDirectory = require("...

2020-02-22 22:30:44 2197

原创 自定义注解实现密码的校验以及参数错误的全局异常处理

自定义注解实现密码的校验以及参数错误的全局异常处理编写自定义注解@Documented@Retention(RetentionPolicy.RUNTIME)// 注解的作用目标,ElementType.TYPE表示只能作用在类上@Target(ElementType.TYPE)// 注解校验的关联类@Constraint(validatedBy = PasswordValidat...

2020-02-21 00:00:22 632

原创 根据目录结构自动生成路由前缀

根据目录结构自动生成路由前缀自定义RequestMappingInfopublic class AutoPrefixUrlMapping extends RequestMappingHandlerMapping { // 基础包路径 @Value("${api.base.package.path}") private String apiBasePackagePa...

2020-02-14 13:18:54 432

原创 通过实体类获取对应数据表的主键字段名

通过实体类获取对应数据表的主键字段名前提:数据表中的主键不是联合主键实体类的主键字段上有@Id主键,并且有@Column注解,且@Column注解中的name字段中存放了对应数据表的主键字段名实体类示例:@Entity@Table(name="user")public class User { // 数据表的主键字段 @Id @Column(name="id"...

2019-05-16 16:03:11 3115

原创 CKeditor粘贴截图

CKeditor粘贴截图CKeditor默认是支持截图粘贴的,不过需要我们进行配置一、CKeditor配置在CKeditor的config.js中加入以下配置// 配置粘贴的图片的上传路径config.uploadUrl="/home/uploadPasteImage"; // 添加图片粘贴插件config.extraPlugins="imagepaste";二、后台代码@...

2019-05-08 16:41:11 697

原创 CKeditor自定义右键菜单

CKeditor自定义右键菜单一、在CKeditor的plugins目录中加入自定义的插件我加入的是自定义的图片裁剪插件Cropper,目录结构如下:二、在CKeditor的配置文件config.js中加入自定义的插件加入自定义的插件,如果有多个自定义的插件,中间已逗号分割// 加入自定义的插件config.extraPlugins = 'cropper';三、效果图此时,在C...

2019-05-08 16:10:43 1797

原创 nginx常用命令

启动nginx start nginx重启nginx nginx -s reload停止 nginx -s stop查看nginx开启的进程 tasklist /fi “imagename eq nginx.exe”停止nginx的进程 taskkill /f /pid 16900 /pid 19012...

2019-05-08 11:41:03 163

转载 JAVA——反射工具类

JAVA——反射工具类通过方法名调用方法import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;/** * 反射相关辅助方法 * @author Louis * @date Aug 19, 2018 */public class ReflectionUtils {...

2019-03-14 11:08:53 1190

原创 SpringBoot上传文件到服务器

SpringBoot上传文件到服务器一、客户端1、定义上传文件信息封装类public class UploadFileStatus { /*文件名字*/ private String fileName; /*文件类型,包括img,video,html,preview_html等*/ private String fileType; /*文件路径,用于...

2019-02-20 10:01:08 15442 21

原创 CKeditor图片上传配置和自定义文件上传插件

CKeditor图片上传配置和自定义文件上传插件一、图片上传的配置在CKeditor的config.js文件中添加图片上传的配置CKEDITOR.editorConfig = function( config ) { config.plugins = 'basicstyles,' + 'bidi,' + 'blockquote,' + 'clipboard,' + 'c...

2019-01-09 16:34:29 2411

原创 MySQL笔记(一):基础知识

MySQL笔记(一):基础知识####1、GBK中一个汉字占2个字节,一个字母占一个字节;UTF-8中一个汉字占3个字节,一个字母占一个字节在Mysql中进行验证:查看Mysql客户端的编码方式:select variables like '%char%';查看字符串的字节长度,length()方法获取的是字节的长度:select length('张三丰hello');MySQL...

2019-01-07 14:19:06 222

原创 MySQL笔记(二):存储过程、函数、流程控制

MySQL笔记(二):变量、存储结构、函数、流程控制变量MySQL中 的变量分为系统变量和自定义变量,系统变量分为全局变量和会话变量,自定义变量分为局部变量和用户变量一、系统变量作用域:①全局变量作用域:服务器每次启动将为所有的全局变量赋初始值,针对于所有的会话(连接)有效,但不能跨重启,如果想重启之后依然生效就要手动修改配置文件②会话变量作用域:只针对当前会话有效,并且不能跨重启使...

2019-01-07 13:24:05 254

原创 SpringBoot + Jenkins + Docker + Git自动化部署

SpringBoot + Jenkins + Git自动化部署1、Jenkins安装到Jenkins的官网:http://jenkins.io下载jenkins.war文件然后将jenkins.war文件上传到Linux服务器,执行jar -jar jenkins.war命令启动Jenkins在浏览器中输入http://服务器IP:8080访问Jenkins在页面上如何授权码进入Jenk...

2019-01-04 14:05:20 975

原创 Thymeleaf高级用法

Thymeleaf高级用法1、复选框其中statusList与表单中的th:object中的元素绑定,所以用*{}取出,statusList的类型是ListmstProblemStatusList是从后台传过来的,所以用${}取出2、下拉框&lt;select class="form-control" th:field="*{status.statusId}"&gt; &lt;op...

2018-12-28 11:51:08 1614

原创 Spring Boot自定义拦截器和转换器

Spring Boot自定义拦截器和转换器自定义的拦截器要实现HandlerInterceptor接口,并且要将拦截器添加到Spring Boot容器中1、用户登陆校验拦截器拦截器:/** * 判断用户是否登陆的拦截器 * Created by Administratoron 2018/12/14 **/public class VisitInterceptor implement...

2018-12-28 11:46:23 482

任亮电商系统数据库脚本以及测试数据和源码

包含任亮电商系统的数据库脚本以及测试数据和项目源码

2019-03-20

空空如也

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

TA关注的人

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