![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
后端技术
文章平均质量分 91
剑小纯
这个作者很懒,什么都没留下…
展开
-
JVM小册(1)------jstat和Parallel GC日志
JVM小册(1)------jstat和Parallel GC日志一. 背景在生产环境中,有时候会遇到OOM的情况,抛开Arthas 等比较成熟的工具以外,我们可以使用java 提供的jatat和jps、jmap等工具来帮助我们排查问题和定位原因,本系列小册先简单记录一下实际使用方式,后续对JVM进行分析.二. 场景举例比如目前有一台服务器,部署了一个java服务,我们为它分配的堆内存如下:#最大堆内存4G,最小2G, 一般来说建议这2个参数设置成一样的,减少因为GC以后动态内存扩容对系统造成的开原创 2021-04-30 15:30:38 · 601 阅读 · 3 评论 -
Stream使用技巧(1)------数据处理技巧
Stream使用技巧(1)------数据处理技巧一. 背景作为java8新特性之一的Stream API为开发者带来了极大的便利,它可以对我们需要操作的集合进行非常复杂的操作,以活的我们想要的结果.本文不会告诉你什么是Stream,毕竟网上花里胡哨的使用教程已经让我应接不暇,本系列博文只是记录一些Stream的使用技巧,便于方便的查找和参考.本博文会无限更新,有新的使用方法会逐渐添加进来,如果有小伙伴有新奇的使用技巧,也可以发出来一起分享.本文中默认使用的对象user如下: @Data原创 2021-03-13 17:52:09 · 485 阅读 · 1 评论 -
mybatis&plus系列------Mysql的JSON字段的读取和转换
mybatis&plus系列------Mysql的JSON字段的读取和转换一. 背景在平常的开发中,我们可能会有这样的需求:业务数据在存储的时候,并不是以mysql中的varchar丶int等格式来存储的,而是使用json格式.这样做的好处是当数据结构有变化或者需求变化时,我们不用再添加字段,方便扩展.那么mysql中json格式的数据我们使用mybatis或者mybatisplus读取以后,肯定是希望转换成对象或者对象集合的,本篇博文就记录一下使用mybatis读取json格式的数原创 2021-03-13 15:46:52 · 15378 阅读 · 10 评论 -
RocketMq灰皮书(三)------MQ使用
RocketMq灰皮书(三)------MQ使用在使用MQ之前,我们回顾一下前两篇博文的内容.我们大致了解了RocketMQ的四个概念,分别是:Producer,Consumer,Message和Broker我们在本地的Windows10系统上,部署了RocketMQ和其后台系统在本篇博文中,我们会使用使用SpringBoot构建两个微服务,一个作为生产者,一个作为消费者,通过RocketMQ传递消息,了解在Java中使用RocketMQ的方法.一. SpringBoot整合RocketMQ原创 2021-02-18 16:10:41 · 2516 阅读 · 0 评论 -
RocketMq灰皮书(二)------本地部署启动MQ
RocketMq灰皮书(二)------本地部署启动MQWindows10本地部署RocketMQ在上一篇文章中,我们对rocket的几个基本概念进行了介绍,也了解了业内几大消息中间件的区别.在本篇博文中,我们进行RocketMQ的本地部署.1. 下载安装首先我们可以去RocketMQ的官网去下载源码: 官网点这里打开官网可以看到很精美的概述,我们需要了解的地方有2个,都在上图中标记了出来:Documentation 关于rocket使用的文档介绍Blog 社区的更新博文简单的原创 2021-02-10 10:55:36 · 823 阅读 · 0 评论 -
RocketMq灰皮书(一)------选型&RocketMQ名词
RocketMq灰皮书(一)------选型&RocketMQ名词一. MQ选型对比目前业内常用的MQ框架有一下几种:KafkaRabbitMQRocketMQ除此之外,还有ActiveMQ等,但是ActiveMQ目前使用已经很少了,在一些老项目中可能还能看到,因此在这里不做赘述.(1) Kafka优点:高吞吐量在常规机器下,使用Kafka,一台机器可以达到每秒十几万的QPS.高性能消息发送性能很高,达到毫秒级别.高可用支持集群部署,部分机器宕机依然可原创 2021-02-09 14:42:17 · 206 阅读 · 1 评论 -
SpringCloud初级学习(四)------Ribbon负载均衡
SpringCloud初级学习(四)------Ribbon负载均衡前言在前面的博文中,我们创建了helloword-cloud的工程来使用了Eureka的服务注册,现在,我们的服务已经注册到Eureka了,接下来我们来使用消费者访问服务,在这里SpringCloud为我们提供了Ribbon来对客户端的请求进行负载均衡.正文1. Ribbon是什么?SpringCloud Ribbon是...原创 2019-10-18 00:29:52 · 242 阅读 · 0 评论 -
Maven之pom.xml文件中的Build配置
Maven之pom.xml文件中的Build配置前言在日常的开发中,我们经常使用maven来管理和构建我们的项目,即使现在使用了各种springboot等方便快捷的框架,jar包的引入也是通过maven来进行的,因此有必要了解pom.xml文件中的没一项配置.正文mave的相关插件首先,关于maven我们要有一定的认识:maven能帮我们构建工程,管理jar包,编译代码,还能帮我们自...原创 2019-03-08 17:29:50 · 40484 阅读 · 4 评论 -
属性文件操作:Properties和ResourceBundle
属性文件操作:Properties和ResourceBundle前言最近在看gitee上的一个java项目的时候,看到了坐着写的一个工具类,有一些疑问,看了网上的资料以后,在这里记录一下.正文1. Properties与ResourceBundle这两个类都可以读取属性文件中以key/value形式存储的键值对,ResourceBundle读取属性文件时,操作相对简单.2. Prope...原创 2019-03-13 16:10:18 · 434 阅读 · 0 评论 -
Java知识荟萃(为什么实现Serializable接口&volatile关键字解析&对象生死状态)
Java知识荟萃(2019年5月14日)无敌码农Java对象为什么要实现Serializable接口Serializable接口没有任何方法或者字段,只是用于标识可系列化的语义.实现了Serializable接口的类可以被ObjectOutputStream转换为字节流,同时也可以通过ObjectInputStream再将其解析为对象.下面通过代码来讲一个对象保存到文件,并读取的过程:p...原创 2019-05-14 17:55:24 · 489 阅读 · 0 评论 -
Java集合------HashMap底层原理(1.7)
Java集合------HashMap底层原理(1.7)前言在java集合中,Map是一种特殊的集合,原因在于这种集合容器并不是保存单个元素,而是保存一个一个的Key-Vaue键值对.HashMap是基于哈希表的Map接口的实现,在项目开发中使用广泛,下面就对HashMap的源码进行解析.正文HashMap的特点HashMap是基于哈希表的Map实现.HashMap底层采用的是Ent...原创 2019-03-25 18:27:16 · 857 阅读 · 1 评论 -
Java集合------LinkedHashMap底层原理
Java集合------LinkedHashMap底层原理前言在集合中,除了常用的HashMap,还有今天我们要说的LinkedHashMap.为什么会有LinkedHashMap这个集合呢?因为我们在迭代HashMap的时候是无序的,我们希望有一个有序的map来方便我们的使用,这个时候就有了LinkedHashMap.正文首先,LinkedHashMap通过维护一个运行于所有条目的双向链...原创 2019-03-27 09:36:05 · 22849 阅读 · 10 评论 -
Java集合------HashMap(1.8)
Java集合------HashMap(1.8)前言在之前的博文中,我们对JDK1.7中的HashMap源码进行了分析,在JDK1.8以后,HashMap又进行了一些优化.为什么要优化呢?其实很明显的一个地方就是:当Hash冲突严重时,在桶上形成的链表就会越来越长,这样在查询的时候效率就会越来越低;时间复杂度为O(N).下面我们就来看看在java1.8中,HashMap是怎么进行优化...原创 2019-03-27 11:01:04 · 660 阅读 · 0 评论 -
微信公众号开发(三)------消息的接收与回复
微信公众号开发(三)------消息的接收与回复前言现在,我们已经封装好了各种消息对应的javaBean,下面就可以实现消息的识别,以及对各类消息的回复.正文我们查看微信的官方文档可以看到:当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上。请注意:1、关于重试的消息排重,推荐使用msgid排重。2、微信服务器在五秒内收不到响应会断掉连...原创 2019-01-22 17:56:58 · 1008 阅读 · 0 评论 -
微信公众号开发(二)------封装普通消息和事件
微信公众号开发(二)------封装普通消息和事件前言在上一篇博文中我们已经对微信公众号进行了接入,接入了公众号,我们的服务器就要处理很多来自己用户的请求,在这里,我们可以梳理一下公众号的逻辑:首先,用户向微信服务器发送消息微信服务器接受到用户的消息处理之后,通过我们配置的URL和Token来找到我们的服务器,并以xml的形式向第三方服务器发送消息.第三方服务器获取消息之后,解析消息,...原创 2019-01-22 17:22:00 · 551 阅读 · 0 评论 -
微信公众号开发(四)------access_token的获取和保存
微信公众号开发(四)------access_token的获取和保存前言在前面的文章中,我们封装了各种消息和事件,并对公众号用户的消息做了简单的处理.在微信公众号上,除了这些功能以外,我们还可以通过微信提供的API接口来获取更多的信息,要使用这些接口,就需要使用一个全局的token------access_token,在微信的官网,有对于access_token的描述access_toke...原创 2019-01-24 11:14:11 · 7913 阅读 · 4 评论 -
Spring注解汇总
Spring注解汇总Spring中注解一览:导入组件@Configuration告诉Spring这是一个配置类,相当于原来的.xml或者.properties配置文件@Bean相当于原来.xml文件中的标签,代表向容器中注入一个JavaBean,该注解作用在方法上,方法的返回值代表Bean的类型,方法名(或者注解的属性)代表Bean的id.可以在注解中指定该Bean的初始化方...原创 2018-12-27 14:07:15 · 375 阅读 · 0 评论 -
Java8新特性(四)------日期API
Java8新特性(四)------日期API前言在Java8以前,我们使用时间和日期的时候,一般都是用Date类,Date与其他的辅助运算类,比如Calendar和格式化的DateFormat,这几个类足够完成我们平时的功能要求,但是,这些类最大的一个缺点都是,他们都是线程不安全的.在Java8中,为了解决这个问题,Java8加入了一套全新的日期API,切是线程安全的.本文我们就一起来学习一下...原创 2018-12-10 17:50:51 · 140 阅读 · 0 评论 -
java8新特性(一)------Lambda表达式
java8新特性(一)------Lambda表达式前言博主之前一直接触的是java7或者6版本的jdk,一直听说java8新特性中很多东西比较好用,也一直有想去了解的想法,最近刚好有时间去研究一下,记录在这里.正文1. Lambda表达式的概念lambda表达式是一个匿名函数,即没有函数名的函数,它需要函数式接口的支持.所谓函数式接口,就是有且只有一个抽象方法,但是可以有多个非抽象方...原创 2018-11-27 09:28:02 · 229 阅读 · 0 评论 -
java8新特性(二)------Stream API
java8新特性(二)------Stream API前言在Java8中有两个比较重大的改变,一个是上一篇博文中说到的Lambda表达式,还有一个就是Stream API.Stream是Java8中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作.使用Stream API对集合数据进行操作,就类似于使用SQL执行的数据库查询.也可以使用St...原创 2018-11-29 14:26:45 · 195 阅读 · 0 评论 -
Java集合------ConcurrentHashMap(1.7)
Java集合------ConcurrentHashMap(1.7)前言在前面的文章中,我们了解了JDK1.7和1.8下的HashMap.但是了解了HashMap以后我们发现,无论是1.7还是1.8,JDK都没有对它做任何的同步操作,所以会出现并发问题,甚至出现死循环导致系统不可用.因此JDK推出了专项专用的ConcurrentHashMap,该类位于java.util.concurrent...原创 2019-04-01 14:41:50 · 682 阅读 · 0 评论 -
ElasticSearch(4)------查询文档
ElasticSearch(4)------查询文档前言了解了ElasticSearch的基本常识以后,我们来看一下怎么查询我们保存好的文档数据.正文1. 基本查询格式:GET /index/type/_search?q=属性名:值如:GET /index/type/_search?q=name:wangwu表示查询文档中name属性为wangwu的文档.也可以在查询结果中进行排序...原创 2019-04-29 11:15:47 · 350 阅读 · 0 评论 -
ElasticSearch(5)------ElasticSearch原理
ElasticSearch(5)------ElasticSearch原理前言在前面的博文中,我们一起在Kibana中对ElasticSearch中的查询文档的语法进行了了解,在本文中,我们来看一下ElasticSearch底层的一些容错原理,主备切换等.正文1. 分片,primary shard和replica shardElasticSearch是一个分布式的搜索引擎,在我们创建索引...原创 2019-05-05 10:59:37 · 252 阅读 · 0 评论 -
SpringCloud初级学习(三)------Eureka服务注册和发现
SpringCloud初级学习(三)------Eureka服务注册和发现前言在前面的工程模块的基础上,我们来进行SpringCloud系列的学习.在这篇文章中,我们将学习Eureka的使用.正文1. Eureka是什么?Eureka是Netfix的一个子模块,是一个基于REST的服务,用于实现服务至今的发现和故障转移.在微服务中,服务的注册和发现是很重要的,有了服务注册和发现,只需要...原创 2019-06-18 16:48:36 · 371 阅读 · 0 评论 -
SpringBoot学习(番外篇一)------使用shell命令或bat文件优雅启动SpringBoot项目
SpringBoot学习(番外篇)------使用shell命令或bat文件优雅启动SpringBoot项目前言在之前的博文中,我们一起探究了SpringBoot的使用以及和通用的技术栈进行整合,使用SpringBoot开发确实非常的便利.那么我们在开发完成了SpringBoot应用,并打包成jar以后,就要在Linux或者Windos Server服务器部署,一般来说我们可以使用java -...原创 2019-06-25 19:58:19 · 6706 阅读 · 3 评论 -
SpringCloud初级学习(二)------工程搭建与模块关系
SpringCloud初级学习(二)------工程搭建与模块关系前言在上一篇博文中,我们了解了SpringCloud的由来和一些国内的使用情况,在在本篇博文中,我们将搭建一个简单的微服务工程来一步步的使用SpringCloud.本文中设计的过程代码详见github:https://github.com/xiaoyao2246/hellowword-cloud正文1. 工程关系在微服务...原创 2019-06-17 16:26:32 · 433 阅读 · 0 评论 -
Dubbo(1)------搭建环境并使用
Dubbo(1)------搭建环境并使用前言Dubbo是阿里巴巴公司开源的一个优秀的RPC服务框架,它可以和Spring无缝集成.对其作用相信很多java开发者都有所了解,所以我们直接来开始使用.正文1. 了解架构,搭建环境在Dubbo的官方有这样一个图:以上是Dubbo的架构图,上图各节点的解释如下:节点角色说明Provider暴露服务的服务提供方C...原创 2019-06-03 16:24:32 · 222 阅读 · 0 评论 -
SpringCloud初级学习(一)------SpringCloud简介
SpringCloud初级学习(一)------SpringCloud简介前言随着IT行业的不断发展,我们从原来的单一应用,慢慢发展到了现在的SOA分布式应用架构,近几年,微服务的概念更是一度走红,越来越多的公司开始使用微服务技术栈来部署自己的应用,因此,了解微服务相关的技术栈,是提高我们自身价值的不二之选.在这个系列的博文中,我们将对SpringCloud微服务技术栈做一个初步的学习,了解一...原创 2019-06-12 17:56:10 · 866 阅读 · 0 评论 -
阻塞消息队列(1)------生产消费者模式实现
生产消费者模式实现------阻塞消息队列前言目前的java技术栈越来越丰富,除了平时用的Spring等还有各种中间件可以选择,相信MQ大家都用过,这次就来写一个简单的消息队列,希望有助于对MQ底层的理解吧.正文1. 涉及知识volatile关键字AtomicIntegerBlockingQueue以上知识点不明白的地方均可在各大博客自行研究,当前博主也有类似博文,有兴趣的可以...原创 2019-05-23 10:07:41 · 532 阅读 · 0 评论 -
github小技巧
github小技巧正文① 常用词watch: 会持续收到该项目的动态fork: 复制某个项目到自己的Github仓库star: 类似于点赞clone: 将项目下载到本地follow: 关注你感兴趣的坐着,会受到他们的动态② in关键词限制搜索范围xxx关键词 in:name或description或readmexxx in:name项目名包含xxxxxx in:descrip...原创 2019-05-30 10:19:15 · 556 阅读 · 0 评论 -
多线程(1)------ThreadPoolExecutor底层原理
多线程(1)------线程池前言池化技术在我们的项目中是使用很频繁的,除了之前数据库的连接池,还有处理任务的线程池,在本文中将会来研究线程池的使用和原理.正文人类认识事物的方式有以下几步:是什么,能干什么,怎么用,原理.所以本文将通过以上几步来逐步学习.1. 线程池是什么?在以前的单线程项目中,我们执行业务逻辑的流程是串行化的,一个main方法,然后依次调用其他的方法,这整个执...原创 2019-05-24 17:52:53 · 589 阅读 · 0 评论 -
Java知识荟萃(cookie、session、token)
Java知识荟萃(2019年5月10日)程序员私房菜cookie、session、token的区别HTTP请求的无状态的,每次请求都是一个新的HTTP协议,对于服务器来说,并不清楚客户端的身份.发展到后来,购物或者登陆,是需要对访问者的身份进行确认的.1. Cookiecookie实际上就是浏览器里面能永久保存的一种数据,它由服务器生成,发送给浏览器,浏览器把cookie以k-v的方式...原创 2019-05-10 15:34:30 · 278 阅读 · 0 评论 -
ElasticSearch(6)------Java应用操作ElasticSearch
ElasticSearch(6)------Java应用操作ElasticSearch前言在前面的博文中,我们在Kibana中对ElasticSearch中的文档数据进行了各种查询和添加,下面我们来看看怎么在java中连接ElasticSearch操作文档正文1. 创建java工程首先,我们创建一个maven工程,在这里我们使用IDEA来开发,在pom文件中引入ElasticSearc...原创 2019-05-06 17:55:30 · 3462 阅读 · 0 评论 -
ElasticSearch(3)------版本控制和数据类型
ElasticSearch(3)------版本控制和数据类型前言一般来说,我们使用ElasticSearch是为了减轻数据库的压力,那么大量的并发时,ES会怎么保证数据的一致性呢?在ElasticSearch内部,又是怎么存储数据的呢?正文1.版本控制ElasticSearch采用了乐观锁来保证数据的一致性.也就是说,当用于对Document进行操作时,并不需要对document做加锁...原创 2019-04-25 14:48:03 · 301 阅读 · 0 评论 -
SpringBoot学习系列(十八)------SpringBoot与Spring Security
SpringBoot学习系列(十七)------SpringBoot与Spring Security前言权限校验和授权认证是我们日常项目中不可获取的两个功能模块,在目前市面上,有apache旗下的shiro和Spring团队的Spring Security两款安全框架是比较流行了,既然我们使用的是SrpingBoot,那就来看一下如何使用SpringSecurity吧!正文1. 创建一个S...原创 2018-11-19 17:48:41 · 2011 阅读 · 0 评论 -
SpringBoot学习系列(二十)------SpringBoot和SpringCloud
SpringBoot学习系列(十九)------SpringBoot和SpringCloud前言SpringCloud是Spring全家桶中的一员,它是一个分布式的整体解决方案。Spring Cloud 为开发者提供了在分布式系统(配置管理,服务发现,熔断,路由,微代理,控制总线,一次性token,全局琐,leader选举,分布式session,集群状态)中快速构建的工具,使用Spring ...原创 2018-11-22 10:30:46 · 298 阅读 · 0 评论 -
日志框架的使用------SLF4j+logback(上)
前言日志是我们在开发中经常用到的,以前一直看文档,了解使用,今天将日志框架的东西回顾一下,写个博文加深理解.正文目前市面上有很多的日志框架:JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j等,在这些众多的框架中,要想选择适合自己项目的日志框架,就要对日志的体系有一定的了解.日志分为抽象层和实现层,一般来说,我们调用的都是抽象层的方法,具体在程...原创 2018-09-28 11:05:37 · 857 阅读 · 0 评论 -
java技巧------在spring中使用配置使用定时任务
前言 在项目中,经常会使用到定时任务来完成某个功能,在这里做个记录.正文 spring中的定时任务使用很简单,只需要创建一个对应的类,在类中的execute方法中写好对应的逻辑,并且在spring的配置文件中配置好即可,具体代码实例如下:public class CloseOverPayJDTask { protected static final Logge...原创 2018-09-14 14:50:40 · 221 阅读 · 0 评论 -
异步通知之多线程实现
前言 在项目中要经常使用异步通知来和其他项目进行通信,多线程只是异步通知的一种实现方式,示例代码如下正文//创建一个有线程池 ExecutorService fixedThreadPool = Executors.newFixedThreadPool(MAX_THREADS); fixedThreadPool.execute(new Ru...原创 2018-09-14 14:42:15 · 1146 阅读 · 1 评论 -
java发送post请求
@Override public boolean queryTradeFlowByJD(String flowno) { logger.info("==QueryTradeFlow=="); //String jdApiUrl = "http://192.168.110.24:8066/api/order"; HttpPost post ...原创 2018-09-14 14:34:26 · 365 阅读 · 0 评论