自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小海子的博客

keep learning

  • 博客(81)
  • 资源 (10)
  • 问答 (3)
  • 收藏
  • 关注

原创 异步编程生产实践

介绍异步编程的实现,并对CompletableFuture做简单介绍。

2022-11-06 23:39:17 508 1

原创 RabbitMQ进阶技术回顾

RabbitMQ进阶技术回顾,包括消息入队列、死信队列等实战操作

2022-11-02 00:11:24 216

原创 SpringBoot读取配置文件

前言最近入职了新公司也接触了几个项目。由于单体项目居多数,生产和测试环境使用外置配置文件的方式启动SpringBoot。虽然在此前也接触过上述启动方式,但在使用操作过程中,也出现了知识盲区,导致在晚上上线的时候耽误了很多时间,并产生误判。综上所述,针对SpringBoot外部参数配置做出如下记录。如果错误欢迎指正,谢谢!使用在开始之前,先说说我之前如何启动一个SpringBoot项目的。配置文件在Jar包内当只有一个application.properties或application.yml文件

2022-04-05 17:31:20 1332

原创 Redis高可用-集群环境搭建

本篇将在Centos系统中以tar包方式部署Redis(伪)集群逐步创建下载安装包并解压 ,再编译mkdir -p /tmp/redis_clustercd redis_clusterhttps://repo.huaweicloud.com/redis/redis-5.0.0.tar.gztar -zxvf redis-5.0.0.tar.gzmv redis-5.0.0 rediscd redis && make在redis_cluster目录中创建每个节点的文

2022-01-24 18:10:44 866

原创 Redis高可用-主从复制及原理

主从环境搭建从镜像源下载安装包wget https://repo.huaweicloud.com/redis/redis-5.0.0.tar.gz解压后编译# 解压tar -zxvf redis-5.0.0.tar.gz# 文件夹重命名(非必须)mv redis-5.0.0 redis# 新建文件夹,用于保存配置文件和日志mkdir con log# 进入redis目录cd redis/# 编译make编译之后在src目录下出现相关命令修改主Master节点配

2021-12-29 08:00:00 254

原创 基于Docker、Jenkins实现自动化部署

概述最近在写一个基于SpringBoot的小项目,由于每次部署到服务器都需要经历几个繁琐的过程,随在自己的服务器上安装了Jenkins和Docker实现自动化部署。至此,将整个过程记录如下。安装与配置Jenkins安装JDK和Maven此处呢内容自行安装,不做描述访问官网 下载即可(若下载速度太慢,从华为云镜像站下载即可)个人倾向于使用war包部署,放在Tomcat-webapp目录下启动即可注意:将war包放在webapp目录下启动是会提示ClassNotFound等异

2021-12-23 22:57:40 2296

原创 Java中的深拷贝与浅拷贝

前言这段时间在看《设计模式之禅》这本书,其中讲到了原型模式,可说老实话在此之前我从来没听说过还有这种模式的存在,是我孤陋寡闻了!在阅读了相关文章后,引出了深拷贝和浅拷贝,之前了解过这个知识点的,到现在完全没有印象了。就此,做出如下简述。正文在说深拷贝和浅拷贝之前先了解Java中的Cloneable接口该接口与java.util.RandomAccess接口一样,仅起标识作用。实现此接口并重写clone()方法,即可实现类的拷贝功能。不管是深拷贝(非必须)还是浅拷贝都依赖于此接口。浅拷贝浅拷贝(

2021-12-18 23:28:46 1062

原创 java中的阻塞队列

前言在去年的面试过程中,被面试官问道“阻塞队列”这个问题,因为当时并没有对此问题进行深入理解,只是按照自己的理解说明了该问题,最后面试结果也不太好,今天对该问题进行简要的面试并记录如下;如有错误,欢迎指正。什么是阻塞队列在数据结构中,队列遵循FIFO(先进先出)原则。在java中,Queue接口定义了定义了基本行为,由子类完成实现,常见的队列有ArrayDeque、LinkedList等,这些都是非线程安全的,在java 1.5中新增了阻塞队列,当队列满时,添加元素的线程呈阻塞状态;当队列为空时,获取

2021-06-14 18:16:38 304 1

原创 Spring中的@Transactional注解

前言在上周的开发中,遇到了事务相关的问题,测试环境正常但部署到正式环境就抛出异常,又连续加班几天解决了此问题,现对该问题作出复盘并回顾之前的知识点。如有错误,欢迎指正。什么是事务数据库的事务是一种机制、一个操作序列,包含了数据库操作命令。事务把所有的命令做为一个整体一起向系统提交或撤销操作请求,即这一组命令要么成功,要么失败。事务的4个特性(ACID):原子性事务是一个完整的操作。事务内的各元素是不可分割的。事务中的元素必须作为一个整体提交或回滚。如果事务中的任何元素失败,整个事务将失败。

2021-06-06 15:39:32 437 1

原创 Java线程池的使用及工作原理

前言在日常开发过程中总是以单线程的思维去编码,没有考虑到在多线程状态下的运行状况。由此引发的结果就是请求过多,应用无法响应。为了解决请求过多的问题,又衍生出了线程池的概念。通过“池”的思想,从而合理的处理请求。本文记录了Java中线程池的使用及工作原理,如有错误,欢迎指正。什么是线程池?线程池是一种用于实现计算机程序并发执行的软件设计模式。线程池维护多个线程,等待由调度程序分配任务以并发执行,该模型提高了性能,并避免了由于为短期任务频繁创建和销毁线程而导致的执行延迟。线程池要解决什么问题?说到

2021-05-26 23:24:10 243 2

原创 四数之和 | 算法

题目给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。思路四数之和与之前的三数之和、两数之和存在共通性,即:都要确定左边界和右边界在此题中,首先设置第一个数a在数组的最左端,第二个数b在a+1位置,第三个数left在b+1位置,第四个数right在nums.length-1的位置。若left小于right,通过left和ri

2021-04-11 15:47:31 867

原创 基于JavaFX开发数据库表文档生成工具

背景在前期的项目交付过程中,需要开发人员准备很多文档给甲方,例如:系统设计文档、部署文档、数据库文档等,其中数据库在交付阶段已经稳定,准备文档更多是复制、黏贴的事情。随即便有了这个想法,开发一个工具方便后面的使用。目前该工具只支持MySQL数据库,后续会慢慢补充。如果在使用过程中出现任何报错或者有更好的建议,请在Issues中提出体验下载在releases界面下载最新版程序,如果是Windows系统下载exe应用,其他平台请下载jar文件,使用java -jar dbDoc.jar命令启动程序使

2021-04-10 14:47:56 167

原创 服务器未联网情况下安装MySQL数据库

简介在某些情况下在服务器是不能连接网络的,这时就无法通过yum安装MySQL数据库,但好在国内国内的很多镜像站提供了包下载功能,可以把包下载到本地后通过U盘或者光驱进行安装。在些日子我就遇到了这种情况,先将整个安装过程记录如下。具体操作安装依赖在无网环境下安装MySQL需要先安装所需的依赖包。下载成功后,进入文件夹内执行rpm -ivh *.rpm --nodeps --force即可。下载安装包从官方网站下载安装包太慢了,推荐使用国内的镜像源,例如:华为开源镜像站、清华大学开源软件镜像站等。以

2021-03-21 14:22:47 2561 7

原创 LeetCode-数组刷题

两数之和 public int[] twoSum(int[] nums, int target) { Map<Integer, Integer> map = new HashMap<>(nums.length); for (int i = 0; i < nums.length; i++) { int n = target - nums[i]; if (map.containsKey(n))

2021-03-07 23:37:42 97

原创 源码分析-LinkedHashMap

继承关系通过上图可以看出LinkedHashMap直接继承了HashMap接口,实现了Map接口,间接实现了Cloneable和Serializable接口构造方法LinkedHashMap拥有四个构造方法,由于直接继承了HashMap,具体实现由此父类决定在这几个构造方法之前存在一个重要的属性accessOrder,其决定了在迭代LinkedHashMap时是以访问顺序还是以插入顺序进行 /** * The iteration ordering method for thi

2021-03-02 00:24:27 155

原创 源码分析-HashMap

原文链接前言在日常工作中高频次使用HashMap这个数据结构,且在上次的求职过程中也遇到了相关的面试题。今晚通过阅读源码了解该数据结构的内部设计。JDK版本1.8.0_231正文继承关系HashMap继承了AbstractMap类,实现了Map Cloneable Serializable接口。Map接口包含一些常用的操作方法Cloneable 表示可以进行拷贝Serializable表示实现了序列化构造方法HashMap类存在4个构造方法1.HashMap(int initia

2021-02-26 01:45:33 112 1

原创 Java虚拟机-Class类文件的结构

点击查看原文Class类文件的结构Class文件是一组以8个字节为基础单位的二进制流,各个数据严格按照顺序紧凑地排列在文件之中,中间没有添加任何分隔符。文件格式采用一宗类似于C语言结构体的伪结构来存储数据,这种伪结构只要两种数据类型:无符号数和表无符号数:属于基本的数据类型,以u1、u2、u4、u8来分别表示一个字节、2个字节、4个字节和8个字节的无符号数。无符号数可以用来描述数字、索引引用、数量值或者按照UTF-8编码构字符串值表:是由多个无符号数或者其他表作为数据项构成的符合数据类型,所

2021-02-03 00:17:05 146

原创 Java虚拟机-经典垃圾回收器

原文链接上图列举了七种作用于不同分代的垃圾收集器,如果两个收集器存在连线就说明可以搭配使用。收集器所处的区域表示它所属的年轻代还是老年代属于年轻代的回收器Serial收集器简单高效且内存消耗小,适用于客户端模式下的虚拟机该收集器是一个单线程工作的。意思是当它在进行垃圾回收时,必须暂停其他所有工作线程,直至它收集结束。Serial和Serial Old收集器的运行过程如图所示:ParNew收集器Serial收集器的的多线程版本,除了同时使用多个线程进行垃圾回收之外其余行为与Serial收集器

2021-01-31 22:45:12 121

原创 Java虚拟机-垃圾回收

原文链接回收的是什么?答:运行程序中没有任何指针引用的对象,这个对象就是需要被回收的垃圾垃圾回收算法标记阶段在GC执行垃圾回收之前,首先需要区分出内存中那些是存活的对象,那些是已经死亡的对象。只有被标记为已死亡的对象,GC才会在执行垃圾回收时,释放掉其存活所占用的内存空间。此过程被称为垃圾标记阶段当一个对象已经不再被任何的存活对象继续引用时,就可以宣判为已经死亡判断对象存活的有两种方式:引用计数算法和可达性分析算法引用计数算法(Reference Counting)描述:对每一个对象

2021-01-14 22:32:40 107

原创 Java虚拟机-类的加载过程及双亲委派机制

原文链接类的加载过程加载通过全类名获取类的二进制字节流将字节流所代表的静态存储结构转化为方法区的运行时数据结构在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的方法入口从何处获取字节流:从本地磁盘获取从网络获取运行时计算生成(动态代理)从其他文件生成(JSP文件)从加密文件中获取链接验证目的:确保Class文件的字节流中包含的信息符合《JAVA虚拟机的》全部约束要求,保证这些信息被当做代码运行后不会危害虚拟机自身的安全验证的四

2021-01-02 21:26:30 99

原创 Java虚拟机-运行时数据区

简图线程私有区域:虚拟机栈、本地方法栈和程序计数器线程共享区域:堆和方法区(元空间区)线程私有区域程序计数器作用:读取程序计数器的值来选取下一条字节码指令,并完成分支、循环、跳转、异常处理、线程回复等程序计数器是一个很小的内容空间,可以看做是当前线程所执行的字节码的行号指示器。在Java虚拟机的概念模型中,字节码解释器工作是通过改变这个计时器的值来选取下一条需要执行的字节码指令,他是程序控制流的指示器,分支、循环、跳转、异常处理、线程回复等基础功能都需要依赖这个计数器来完成每个线

2020-12-13 23:37:41 110

原创 Nginx反向代理与负载均衡

原文链接:https://www.haicheng.website/passages/nginx-basics/简介Nginx是一款轻量级的Web服务器和反向代理服务器及电子邮箱代理服务器。Nginx主要提供反向代理、负载均衡、动静分离等服务。安装Nginx从镜像网站选择合适的Nginx版本并复制其地址,在服务器端使用wget命令下载wget https://mirrors.huaweicloud.com/nginx/nginx-1.16.1.tar.gz解压压缩文件tar -zxv

2020-12-09 01:03:19 177

原创 基于Java的网站内容管理系统(SpringBoot版)

项目地址:https://github.com/longhaicheng/heron项目说明基于SpringBoot的网站内容管理系统可视化的管理定时任务model、mapper、mapper.xml代码生成器系统运行监控功能概述用户管理角色管理定时任务管理基于MinIO的文件管理基于Quartz的定时任务管理登录日志管理邮箱重置密码安装执行打包命令mvn clean package -DskipTests -e ,target目录下生成heron.tar.gz文件

2020-12-06 13:04:37 964

原创 Java在Linux环境下执行MySQL命令无法获取结果的问题

背景最近项目中包含一些导出功能,一些功能需要多表查询才可以满足需求,也有一些数据仅是单表查询。在此之前想到过两种方案,第一种是查询出数据后通过EasyExcle写入文件,另一种是使用MySQL自带的导出功能。但在尝试第二种方案时遇到一些问题,记录如下。问题在执行单表导出的过程中,我使用了MySQL自带的命令完成。即在代码中通过字符串拼接命令。例如:即便是这条语句通过Java程序调用还是会执行失败。失败的原因有两个:通过Java代码调用命令会出现程序卡死,导致后面的程序无法执行,需要手动处理命

2020-11-28 22:31:14 511 1

原创 使用Nginx和Xshell,微信本地开发不再难

背景最近在了解微信订阅号方面的内容,项目没开始就遇到了一个尴尬的问题。内网穿透工作怎么选。目前市面上有各种各样的内容穿透工具,比如:ngrok,natapp,花生壳、网穿云等,既有免费的也有付费的。已经足以满足微信方面的业务开发。自己也去逐个了解了一下,也发现了一些很讨厌的问题。例如:套取个人信息;先要你的手机号,再要你的微信号,我也想不通,要我手机号干什么[吐了]免费工具提供的域名不固定,每次断网会出现新的域名,每次都要更新微信平台的配置,太麻烦了在之前的工作中,由于本地是无法直连服务器的,要

2020-11-06 01:29:47 355

原创 Logback配置与运用

背景从毕业到现在参加工作已经有两年了,在这两年期间,经历的几个大项目和一些小项目,每个项目都涉及到日志这个模块。存在的意义无非就是两个:记录业务日志,方便后期排查问题以日志上的形式记录业务数据,并将日志文件推送第三方每次接手一个新项目,就会先问有没有配置日志,如果没有配置日志模块,那么排查问题就是一个很恼火的问题,不清楚请求参数是什么,走了哪个判断,调用第三方接口的参数和返回结果是什么,一切的问题都需要一步一步的调试且耗时耗力。自从意识到这个问题后,每次写代码都会加入日志,并将请求参数,返回结果

2020-10-18 15:22:37 488 2

原创 基于MinIO Java SDK完成文件上传

简介最近在写项目的时候,使用了富文本编辑器wangEditor,其中有一个功能是图片上传,因为之前已经有一个搭建好的MinIO服务且提供了Java SDK,在实现这个功能的时候也踩了一下坑,将该功能记录如下。整合wangEditor在Thymeleaf中整合wangEditor需要js文件,我使用的是CDN引入 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title&gt

2020-10-07 13:57:57 3200 3

原创 MinIO:建立个人的对象存储服务

前言之前使用七牛云的对象存储服务,每月有固定的流量价格也便宜,加之有开源的上传工具(如:PicGo)。在Windows上的操作十分便捷,日常写博客所需的图片拖拽上传即可。在前一阵子逛掘金的时候发现了MinIo,虽说部署之后在访问速度上没有优势,但好歹也是免费,拿来把玩一番。部署官方文档中说明了在常见平台的安装方法,例如:docker、Windows、MacOS和Linux。这里我会安装在自己的Linux服务器上,发行版为CentOS 7.4 64bit with ARM。虽说MinIO可以集群部署,但

2020-09-09 00:44:54 1729

原创 Java8日期和时间类在实际开发中的使用

目录前言一、基本使用前言最近在重构之前的一个老项目,其中包含一个统计模块,需要把存储在MongoDB的数据通过接口显示在后端管理系统中。这些数据大多是以时间为单位进行存储,例如:collectionName_202009collectionName_20200910,在老系统中对时间的处理使用Date类,简单了解了其中的时间工具类,深感繁琐并决定使用Java8中的LocalDateTime和LocalDate重构此代码。一、基本使用获取当前时间 // 2020-08-23T20:14:56.

2020-08-24 09:54:16 312

原创 Java虚拟机初探

简介就在上周,我完成了自毕业以来的第一次跳槽。期间经历了一些笔试和面试,考察内容无外乎是Java基础知识,Java高级特性,Java虚拟机,MySQL数据库和缓存相关的问题。这其中最让我手足无措的是Java虚拟机这部分内容,在此之前我并没有系统的学习过,也没有主动去了解它,基本上是随查随用。可这种方式不能长久的记忆,随通过《深入理解Java虚拟机:JVM高级特性与最佳实践(第三版)》进行系统的学习,并将此书包含的知识点记录如下,如有错误,请指出。主体第一部分 Java内存区域与溢出异常运行时数据区

2020-07-17 01:09:22 132

原创 Java中主要数据结构的实现原理及扩容机制

说明Java版本:1.8.0_231ArrayList底层由Object数组实现,具有数组的所有特性,实现了RandomAccess接口支持随机访问,非线程安全类型Object[] elementData;构造方法创建一个空数组 public ArrayList() { this.elementData = DEFAULTCAPACITY_EM...

2020-04-14 23:13:41 428

原创 SpringSecurity认证流程源码解析

前言经过一周的学习对SpringSecurity框架有了基本的认识,并写出了一个基于JWT认证的小模块,通过对源代码的debug大致了解了此框架的认证流程,并做如下记录。正文在开始了解SpringSecurity认证流程之前,先看看在认证过程中涉及到的几个重要类。org.springframework.security.core.Authentication该接口是认证实体,包含将要认...

2020-04-12 19:46:38 409

原创 SpringSecurityGet请求可以响应,Post请求无法响应返回403 Forbidden

背景在学习SpringSecurity的时候同一一个接口,Get请求有响应,但POST请求就没有响应返回403Forbidden ,最后在官方文档FAQ找到了解决方法解决方法意思是:post无响应与CSRF有关,解决这个问题的方法有两种:客户端提供Token关闭CSRF(官方不推荐)文档地址:I get a 403 Forbidden when performing a POS...

2020-04-05 15:43:45 1243

原创 Maven Assembly自定义打包插件

前言在之前的项目中,一个项目被不同的package划分,util负责各种工具类,exception负责异常处理还有mapper等完成各自的内容,项目需要发布时,通过mvn package产生一个jar包或war包进行全量发布。若util包中的一个类出现问题,则需要再次进行全量发布(直接替换class文件这个粗暴的方式就不说了)。通过阅读几个开源项目代码,发现了一个比较不错的包结构设计方式:将原本...

2020-03-20 19:16:59 487

原创 再学Maven

前言因为疫情的原因,最近都是远程办公。此前没有系统的学习过Maven,在项目中只是做添加依赖,删除依赖等基本操作,在看公司项目代码时,突然看不懂pom文件的内容了,一些关键字都不知道是干什么的;遂通过B站找了些教程做以下记录。正文这篇文章的主要关注点是聚合工程中maven是如何实现依赖管理,依赖继承、依赖排除等。关于父pom以下文件展示了一个父pom所需的常用配置<?xml ve...

2020-02-26 14:30:45 99

原创 《HTTP权威指南》笔记

简介2020年春节假期被被新型冠状病毒阻止了,呆在家里太无聊了。就读书充实自己吧!这份笔记后买你会不断补充完整,笔记一本书不是一天就能看完的。原文地址一HTTP中资源的定义方式URI(Uniform Resource Identifier): 统一资源标识符URL(Uniform Resource Locator): 统一资源定位符URN(Uniform Resource Name)...

2020-02-04 18:18:18 458 1

原创 《深入浅出MySQL》笔记

《深入浅出MySQL》存储引擎的选择MyISAM特性:不支持事务不支持外键优点:访问速度快,对事物完整性没有要求或者以SELECT、INSERT为主的可以使用InnoDB自动增长列外键约束RESTRICT:字表存在记录,限制父表更新NO ACTION:同上CASCADE:父表执行更新或者删除操作时,字表执行同样动作SET NULL:父表执行更...

2019-12-31 09:50:37 195

原创 SpringBoot整合通用Mapper插件实现单表无SQL

前言在看之前的代码时,总是在接口层和XML文件之前来回跳转,看的头都晕了,在阅读一个开源项目时,作者使用了通用Mapper插件来完成单表的CRUD,再配合MBG,就可以生成简洁的代码并实现单表无SQL使用这里使用SpringBoot整合该插件,SpringBoot版本为2.1.7.RELEASE添加POM依赖 <dependency> ...

2019-10-18 00:49:01 340

原创 常用资源下载

资源下载列表,后面持续补充资源来自网络,侵权立即删jdk-8u172-linux-x64.tarapache-jmeter-5.1elasticsearch-6.5.3JRebel for IntelliJ插件GrepConsole

2019-08-06 16:56:32 214 3

原创 HttpClient请求https接口出现‘unable to find valid certification path to requested target’异常

背景今天通过HttpClient请求一个外部接口时,出现SSLHandshakeException异常,通过查询并解决了问题,现做记录以HTTP POST方式调用外部接口public class HttpClientUtil { public static JSONObject httpPost(String url, String strParam,String appid, ...

2019-04-28 16:16:06 10125

服务器无网状态下安装MySQL数据库

首先执行install_rpm.sh,安装必要的依赖 再执行install_mysql.sh,安装MySQL数据库

2021-03-21

dubbotest.zip

Apache Dubbo is a high-performance, Java based open source RPC framework.

2020-01-07

httpclient请求oauth服务器中的token

使用HttpClient获取oAuth2.0中的、token及refreshToken

2018-07-23

dailyCheck

Spring Boot整合Mybatis使用JQuery DataTables表格插件展示数据。Spring Boot整合Mybatis使用JQuery DataTables表格插件展示数据。Spring Boot整合Mybatis使用JQuery DataTables表格插件展示数据。Spring Boot整合Mybatis使用JQuery DataTables表格插件展示数据。Spring Boot整合Mybatis使用JQuery DataTables表格插件展示数据。Spring Boot整合Mybatis使用JQuery DataTables表格插件展示数据。

2018-07-03

Spring Boot统一异常处理类

Spring Boot统一异常处理类,BaseResponse类就两个字段code和message。经测试,可以捕获所以异常,并返回指定json数据

2018-04-18

图书管理系统(功能没有做完)

使用SSS(Spring、Spring MVC、Spring JDBC)完成的图书管理系统功能不完善。不喜勿喷!

2018-01-02

实现了部分功能的图书管理系统,不喜勿喷!

使用Spring、Spring MVC、Spring JDBC实现的图书管理系统!只实现了部分功能

2017-12-29

java解析json数据

通过jsononject和jsonarray解析json数据,并实现完整的输出

2017-12-29

Spring MVC点击链接,跳转到指定页面

这是一个SpringMVC的初始项目。单击index.jsp页面的超链接,跳转到success.jsp界面。自己两三次都没有发现其中的问题,终于在今天发现了问题所在。希望可以帮助大家

2017-11-09

Mysql官方数据库实例

Mysql官方数据库实例

2017-08-14

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

TA关注的人

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