自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

haoxiaoyong1014的博客

天生我才必有用

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

原创 记一次生产中使用CompletableFuture遇到的坑

在业务开发中为了提升接口速度都会使用到多线程异步编程,在多线程异步编程中使用不当或者不了解其中的原理很容易入坑,本篇文章就是记录了多线程异步编程生产环境使用CompletableFuture遇到的坑。

2022-11-15 09:15:17 1553 4

原创 利用Nacos作为配置中心动态修改线程池

这篇文章的主要核心原理都来自于这个开源项目dynamic-tp,可以说是对这个开源项目的源码分析,也是对这个开源项目中涉及到的技术点进行学习总结。从这篇文章中能学到的技术点,也就是从这个dynamic-tp开源项目中学习到的技术点(这里只列举了这个项目的冰山一角):以下都是对dynamic-tp这个开源项目进行了简化,首先看一下我的Nacos配置以及配置类:上面这个技术点就不用多说了吧,yml文件配置的内容会映射到类中,多个的话会映射成集合的形式。介绍完了基础的配置,那我们开始介绍核心一点东西:监听N

2022-08-20 10:17:05 1328

原创 优雅的解决SimpleDateFormat线程不安全问题

解决SimpleDateFormat线程不安全问题;当我们使用SimpleDateFormat的parse()方法的时候,parse()方法会先调用Calendar.clear()方法,然后调用Calendar.add()方法,如果一个线程先调用了add()方法,然后另一个线程调用了clear()方法;这时候parse()方法就会出现解析错误;如果不信我们可以来个例子:public class SimpleDateFormatTest { private static SimpleDateFo

2021-05-30 18:37:01 481

原创 程序员应该知道的操作系统知识--基础篇(三)

程序员应该知道的操作系统基础知识在多线程并发环境下,经常出现一些意想不到的错误,例如数值的累加,错的原因可能涉及到计算机原理以及JAVA方面的一些知识。下面我们就先从CPU的多级缓存开始说起;CPU缓存缓存存在的意义:CPU缓存存在的意义分两点(局部性原理):时间局部性:如果某个数据被访问,那么在不久的将来它很可能被再次访问。空间局限性:如果某个数据被访问,那么与它相邻的数据很快也可能被访问。我们先来认识一下整体结构,看一张图片,如下:CPU Core : CPU核心Cache :

2020-12-28 18:31:33 279

原创 程序员应该知道的操作系统知识--基础篇(二)

程序员应该知道的操作系统知识上一篇文章我们介绍了冯诺依曼模型,这一篇我们趁热打铁介绍一下程序的执行过程程序的执行过程我们还是先来看一张图程序计数器(PC)和指令寄存器类似一个映射关系,PC中存放的是指令的内存地址,指令寄存器中存放的是内存地址对应的真实指令;首先,CPU 读取 PC 指针指向的指令,将它导入指令寄存器。具体来说,完成读取指令这件事情有 3 个步骤:CPU 的控制单元操作地址总线指定需要访问的内存地址(简单理解,就是把 PC 指针中的值拷贝到地址总线中)。CPU 通知内存设

2020-12-22 14:08:45 242

原创 程序员应该知道的操作系统知识--基础篇(一)

程序员应该知道的操作系统知识–基础篇(一)首先我们先思考一个问题,程序在操作系统中是怎么执行的? 程序执行的原理是什么?图灵机的构造想要学懂程序执行的原理,就要从图灵机说起了。它在计算机科学方面有两个巨大的贡献:第一,它清楚地定义了计算机能力的边界,也就是可计算理论;第二,它定义了计算机由哪些部分组成,程序又是如何执行的。我们先来看一看图灵机的内部构造:图灵机拥有一条无限长的纸带,纸带上是一个格子挨着一个格子,格子中可以写字符,你可以把纸带看作内存,而这些字符可以看作是内存中的数据或者程序。

2020-12-20 21:05:40 367 1

原创 SpringBoot 使用 Redis Geo 实现查找附近的位置-附近的人功能

SpringBoot 使用 Redis Geo 实现查找附近的位置6个操作命令Redis 命令描述GEOADD增加某个地理位置的坐标GEOPOS获取某个地理位置的坐标GEODIST获取两个地理位置的距离GEORADIUS根据给定地理位置坐标获取指定范围内的地理位置集合GEORADIUSBYMEMBERl根据给定地理位置获取指定范围内的地理位置集合GEOHASH获取某个地理位置的 geohash 值GEOADD该命令格式:geoadd

2020-09-20 14:22:46 2937

原创 ELK安装时错误记录

ELK安装时错误记录错误1:error='Cannot allocate memory' (errno=12)解决方法:由于elasticsearch默认分配jvm空间大小为2g,需要改小一点vim config/jvm.options -Xms2g → -Xms512m-Xmx2g → -Xmx512m错误2:can not run elasticsearch as root解决方法:在 Linux 环境中,elasticsearch 不允许以 root 权限来运行!所以需要

2020-09-10 15:07:59 451

原创 ELK日志分析系统搭建以及集成SpringBoot日志收集

ELK安装步骤简单介绍ElasticSearch:用于存储日志信息。Logstash:用于收集、处理和转发日志信息。Kibana:提供可搜索的Web可视化界面。准备工作安装JDKElasticsearch7 自带jdk11,如果没有安装jdk, es7使用缺省jdk11如果已安装,使用已安装的jdk,低于11有警告,但不影响使用。但是在安装Logstash还是需要java环境,所以建议还是安装一下jdk11安装jdk过程省略安装Elasticsearch#下载elastic

2020-09-10 15:06:21 942

原创 关于使用this.getClass().getResource()获取文件时遇到的坑

最近在工作中遇到需要读取配置文件,然后第一想法就是将文件放到项目的resources目录下,然后使用:String fileName = "config/zh.md"String path = this.getClass().getResource("/").getPath() + fileName;System.out.println(path);// D:/example/exam01/target/classes/config/zh.md在IDE工具中开发及Debug时一切都正常,但是打

2020-07-19 22:09:20 25499 1

原创 springboot集成第三方swagger-bootstrap-ui美化文档样式

springboot-swagger-enhance此 demo 主要演示如何集成第三方的 swagger 来替换原生的 swagger,美化文档样式。本 demo 使用swagger-bootstrap-ui启动项目,访问地址 http://host:{host}:host:{port}/doc.htmlUI增强同时,swagger-bootstrap-ui在满足以上功能的同时,还提供了文档的增强功能,这些功能是官方swagger-ui所没有的,每一个增强的功能都是贴合实际,考虑到开发者的实际开发

2020-05-14 17:34:43 7574

原创 SpringBoot自定义Starter 并制作一个简单的图床

SpringBoot自定义starter 并制作一个简单的图床上篇博客中讲述了从SpringBoot源码到自己封装一个Starter,而并没有写一个真正的业务场景,这篇博客将自定义starter 添加第三方组件(阿里云OSS);并根据自定义的starter制作一个图床;项目结构:oss-spring-boot-project│ README.md│ pom.xml └───...

2020-04-01 23:01:46 636 1

原创 从SpringBoot源码到自己封装一个Starter

这篇博客主要讲述一下springboot怎么给我们简化了大量的配置,然后跟着源码自己封装一个Starter,首先我们需要从两个地方来说,第一就是springboot的起步依赖,第二就是springboot自动装配;起步依赖我们在创建一个springboot工程时需要引入spring-boot-starter-web这个依赖;<dependency> <groupId...

2020-03-20 18:09:07 4361

原创 谈谈美股熔断和服务熔断Hystrix

首先说一下最近比较火热的美股熔断,美股熔断究竟是什么意思?先看看维基百科:熔断机制(英语:Circuit breaker / Trading curb)指的是在股票市场的交易时间中,当价格波动的幅度达到某一个限定的目标(熔断点)时,对其暂停交易一段时间的机制。此机制如同保险丝在电流过大时候熔断比较相似,故而得名。熔断机制推出的目的是为了防范,给市场更多的冷静时间,避免恐慌情绪蔓延导致市场波动...

2020-03-17 21:04:21 1028

原创 别人那没有的工具类

检查一个对象中的参数值是否为空public class ValidUtils { public static <T> JSONObject inspect(T t, String requireParams) { JSONObject jsonResult = new JSONObject(); jsonResult.put("code", ...

2020-03-06 18:15:53 206

原创 springboot整合分布式任务调度xxl-job

此 demo 主要演示了 Spring Boot 如何集成 XXL-JOB 实现分布式定时任务,并提供绕过 xxl-job-admin 对定时任务的管理的方法,包括定时任务列表,触发器列表,新增定时任务,删除定时任务,停止定时任务,启动定时任务,修改定时任务,手动触发定时任务。xxl-job-admin调度中心克隆 调度中心代码$ git clone https://github.c...

2020-01-13 09:33:46 1622

原创 一道java JDK面试题引发的思考

这道面试题所设计的知识点:传值和传引用的区别装箱和拆箱java的内存模型反射面试题需求:主方法定义两个Integer变量,并赋值,然后通过一个swap()方法交换变量的值,请写出swap()中的实现public static void main(String[] args) { Integer a = 1; Integer b = 2; System.ou...

2019-12-23 17:33:33 232

原创 深入学习JVM(一) -- 理解java虚拟机内存模型

深入理解java虚拟机内存模型JVM 整体架构简单回顾例如我们写了一个简单的HelloWorld程序,我们想让他运行起来,首先需要javac命令,把他编译成字节码文件,然后通过java命令放到java虚拟机里面去运行,这里如果我们将代码放到windows系统运行或者放到Linux系统下去运行,其实底层执行的是机器码(0101010),不同的操作系统底层的机器码不同,例如我们将代码放到wind...

2019-11-12 14:55:47 187

原创 基于Netty Spring Boot仿微信聊天项目

基于Netty仿微信聊天项目功能需求登录/注册个人信息通讯录搜索好友添加好友好友聊天技术架构–后端开发工具:IDEA框架:Spring Boot、MyBatis、Spring MVC、FastDFS、Netty数据库:mysql后端项目地址: https://github.com/haoxiaoyong1014/chat-software技术架构–前端...

2019-10-15 10:43:26 3427 7

原创 EhcacheCache和Redis做mybatis二级缓存对比

源码:使用EhcacheCache做二级缓存使用redis做二级缓存我们都知道无论是使用redis做二级缓存,还是使用EhchcheCache做二级缓存,都需要去实现Cache接口,并实现其中的方法;使用EhchcheChche做二级缓存mybatis帮我们实现了,我们只需要引入相应的maven 依赖(坐标)即可;而使用Redis做二级缓存我们需要自己去实现Cache接口;Cache接口中...

2019-09-15 15:37:53 668

原创 使用redis做mybatis的二级缓存

使用redis做mybatis的二级缓存application.properties在application.properties文件中配置Redis,Mybatis,开启Mybatis二级缓存等server.port=8084spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&charact...

2019-09-14 17:51:43 1589

原创 AOP+自定义注解+策略模式 记录操作日志,避免过多的if else

演示案例代码首先看下业务需求:如图所示,就是将用户的操作行为记录到日志表中,而且有些内容是动态的,如图是六种操作,但是后期肯定是要增加的,也就是说就这六种需要记录到日志表中,日志表所对应的对象是AnalysisMessage,标题,内存,接收时间,对应对象中字段名为title,content,create_time;看到需求的第一眼就想到AOP来实现;但是只是使用AOP的会写一些if els...

2019-09-08 17:51:50 674

原创 Netty 解决粘包拆包

While parsing a protocol message, the input ended unexpectedly in the middle of a field. This could mean either that the input has been truncated or that an embedded message misreported its own length...

2019-05-29 15:19:42 2338

原创 SpringBoot整合Netty并使用Protobuf进行数据传输

我只是给代码注入灵魂;官方地址: https://github.com/google/protobuf高效的编码方式 Google Protocol我们在编写网络应用程序的时候需要注意codec(编解码器),因为数据在网络中传输的都是二进制字节码数据,而我们拿到的目标数据往往不是字节码数据,因此在发送数据时就需要编码,收到数据时需要解码codec 的组成部分有两个:decoder(解码器...

2019-05-27 23:40:15 3218 2

原创 基于Netty手写 RPC

手写RPC整体分析RPC(Remote Procedure Call),即远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络实现的技术。常见的RPC 框架有: 源自阿里的Dubbo,Spring 旗下的Spring Cloud,Google 出品的grpc 等等。将上面的12个步骤整理为下面9个步骤:1,服务消费方(Client)以本地调用方式调用服务2...

2019-05-27 19:42:35 718 1

原创 java 优化过多的 if else 策略模式

在编码中经常会遇到过多的 if else ,就会显得代码很臃肿,分支比较多,这种情况肯定是不建议用if-else的,维护起来不是很方便,而且容易出现 bug,下面看下如何解决满屏的 if else;我项目中的场景: 我们有一个需求是实名认证,但是实名认证有很多种方式,例如: 人脸识别,实名认证四要素(姓名,身份证,手机号,银行卡,主要针对企业),实名认证三要素(姓名,身份证,手机号), 实名认证...

2019-04-15 10:49:11 8596 3

原创 MySQL数据库备份&还原-shell脚本

手动备份使用mysqldump:备份一个数据库mysqldump -hhostname -uusername -pmypwd databasename > /path to backup/bakname.sql备份并压缩mysqldump -hhostname -uusername -pmypwd databasename | gzip > /path to bac...

2019-03-25 15:17:16 3789

原创 Netty结合webSocket做聊天案例

Netty的介绍就不在这里阐述了,前面也写过关于Netty的文章:Netty(一) springboot整合Netty做心跳检测Netty(二) springboot 整合netty编写时间服务器Netty(三) Netty 之传输文件这里不做过多的介绍,代码有响应的注释,首先添加依赖: &amp;lt;dependency&amp;gt; &amp;lt;groupId&amp;gt;io...

2019-03-16 16:26:07 1045 1

原创 Spring Spring Boot 实战,- 全局异常处理

异常处理当我们开发过程中或者说一个web程序在运行中,由于用户操作不当,或者说程序中存在的bug,有大量的异常需要处理,有些异常要告知开发人员,有些异常要提示用户,在很久之前我们处理全局异常通常都定义一个异常基类,然后每个Controller去继承这个异常基类,虽然这种方式可以解决问题,但是极其不灵活,因为动用了继承机制就只为获取一个默认的方法,这显然是不好的。在探寻spring的异常处理机...

2019-03-11 20:20:23 801

原创 重新认识RabbitMQ【全】

rabbitmq-stu个人认为学习一个技术需要系统的学习,同时学习完之后记得回顾,不然太容易忘记,这个案例同时也是我的学习笔记,其中包括:Work queues 工作模式publish/subscribe工作模式 (又称发布订阅模式)Routing工作模式topics工作模式(通配符模式)在rabbitmq-stu有四个子模块:整合 rabbitmq-springboot...

2019-01-27 13:41:40 295

原创 redis可视化管理后台

Redis的后台管理最终展示效果图环境springboot 2.0.1.RELEASEredis Lettuce版本前端 Vue.js目前java操作redis的客户端有jedis跟Lettuce。在springboot1.x系列中,其中使用的是jedis,但是到了springboot2.x其中使用的是Lettuce。因为我们的版本是springboot2.x系...

2018-11-16 17:41:59 2588

原创 (Netty三) Netty 之传输文件

Netty 文件传输在之前的项目中介绍了springboot整合 netty做心跳检测springboot 整合netty编写时间服务器这次通过 Netty 传递文件此项目地址:   https://github.com/haoxiaoyong1014/netty-file项目依赖 &amp;lt;dependency&amp;gt; &amp;lt;groupId&amp;gt;io.netty&amp;lt;/...

2018-11-15 17:07:33 10257 8

原创 springboot2整合Quartz持久化定时任务管理界面

此案例在天降风云博主的基础上进行了补充Quartz提供两种基本作业存储类型。第一种类型叫做RAMJobStore,第二种类型叫做JDBC作业存储。在默认情况下Quartz将任务调度的运行信息保存在内存中,这种方法提供了最佳的性能,因为内存中数据访问最快。不足之处是缺乏数据的持久性,当程序路途停止或系统崩溃时,所有运行的信息都会丢失比如我们希望安排一个执行100次的任务,如果执行到50次时系...

2018-10-24 09:50:19 19622 36

原创 Netty(二) springboot 整合netty编写时间服务器

这个例子与上个例子( springboot 整合netty做心跳检测)最大的不同就是,服务端发送包含32位整数的消息,而不接收任何请求,并在发送消息后关闭连接。因为我们将忽略任何接收到的数据,一旦建立连接就发送消息,这次我们不能使用channelRead()方法。 相反,我们应该重写channelActive()方法。项目依赖:&lt;dependency&gt; &lt;group...

2018-10-22 10:41:04 919

原创 Netty(一) springboot整合Netty做心跳检测

Netty介绍Netty是一个NIO客户端服务器框架,可以快速轻松地开发协议服务器和客户端等网络应用程序。它极大地简化并简化了TCP和UDP套接字服务器等网络编程。“快速简便”并不意味着最终的应用程序会受到可维护性或性能问题的影响。Netty经过精心设计,具有丰富的协议,如FTP,SMTP,HTTP以及各种二进制和基于文本的传统协议。因此,Netty成功地找到了一种在不妥协的情况下实现易于开...

2018-10-19 11:13:16 11271 6

原创 mac 安装 solr

mac 安装 solr在终端输入: brew install solr就直接安装了,但是不巧的是我的 mac 上没有安装 Homebrew 所以这个命令就不能使用接下来就 安装Homebrew安装Homebrew其实也非常的简单 打开终端,输入以下命令:ruby -e &quot;$(curl -fsSL https://raw.githubusercontent.com/Ho...

2018-09-14 15:35:59 2790

原创 Vue 自定义富文本编辑器 tinymce 支持导入 word 模板

自定义富文本编辑器分为前端项目和后端项目两个部分,首先先说一下前端项目前端前端项目地址: https://github.com/haoxiaoyong1014/editor-ui编辑器名称: tinymce前端采用的 vue.js至于Vue 中怎么集成 tinymce 编辑器参考: https://segmentfault.com/a/1190000012791569其中关...

2018-09-13 10:03:10 28703 24

原创 根据 redis 实现商品排行榜

前言 排行榜作为互联网应用中几乎必不可少的一个元素,其能够勾起人类自身对比的欲望,从而来增加商品的销量。排行榜的实现方式基本大同小异,大部分都基于 Redis 的有序集合 sorted set 来实现。本文通过了商品销售排行榜这一模型,来进行演示,同时您还可以根据本文章实现 文章的点赞排行, 积分排行等.. 项目Github地址:https://github.com/haoxiaoyong...

2018-08-09 11:20:14 9083

转载 看完让你彻底搞懂Websocket原理

看完让你彻底搞懂Websocket原理本文为转载,尊重原作者的著作版权。偶然在知乎上看到一篇回帖,瞬间觉得之前看的那么多资料都不及这一篇回帖让我对 websocket 的认识深刻有木有。所以转到我博客里,分享一下。比较喜欢看这种博客,读起来很轻松,不枯燥,没有布道师的阵仗,纯粹为分享。废话这么多了,最后再赞一个~一、websocket与httpWebSocket是HTML5出的东西...

2018-07-16 20:04:08 233

原创 使用itext5 验证PDF文件中的签名证书有效性-验签

实例代码地址:https://github.com/haoxiaoyong1014/testarea-itext5验证签名模块代码位置: testarea-itext5/src/test/java/mkl/testarea/itext5/signature/VerifySignature.java一,实际需求: 用户上传带有签署证书的pdf文件,我们进行验证证书的真实性,有效性以...

2018-07-01 01:55:27 15619 12

空空如也

空空如也

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

TA关注的人

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