自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

黄太洪的博客

Talk is cheap,show me the code

  • 博客(59)
  • 资源 (2)
  • 收藏
  • 关注

原创 使用Docker+Gitlab+Docsify搭建公司内部文档服务

文档服务使用Docker+Gitlab+Docsify搭建文档服务Docker环境配置安装Docker,Link:Centos7上安装配置Docker安装Docker Compose,Link:Docker Compose安装与简单使用编写DockerFile.onbuild文件,并使用该文件构建出基础镜像供后续使用FROM node:10-alpineRUN np...

2019-06-15 18:23:05 9316

原创 Spring Security规则配置及端点(EndPoint)保护详解

匹配规则HttpSecurity.antMatcher(...)表示该安全规则只针对参数指定的路径进行过滤HttpSecurity.requestMatchers同上,唯一区别是可以接受多个参数【两者不能同时使用】HttpSecurity.authorizeRequests()该方法用于配置权限,如hasAnyRole、access(...).authorizeRequests().an...

2019-04-25 11:18:38 5470

原创 Maven JAR包冲突问题排查及解决方案

前言写这篇文章的初衷是因为今天在使用mvn dependency:tree命令时,突然想起一年前面试阿里的一道面试题。面试题是说假设线上发生JAR包冲突,应该怎么排查?我那时候的回答是IDEA有个Maven Helper的插件,可以帮忙分析依赖冲突,然后还有一种办法是如果一个类import的时候提示两个地方可导入,那就说明有冲突。现在回头想想确实太不专业了,以下是一次JAR包冲突的一个比较正规...

2018-08-17 15:23:05 29259 5

原创 死磕Netty源码之Netty编解码源码解析

前言Netty的底层是基于TCP实现的,TCP协议在传输数据的过程中一个完整的业务可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,因此我们需要考虑Netty的粘包拆包问题源码分析Netty提供了拆包的基类ByteToMessageDecoder,如果我们为引用程序添加了解码器每次从TCP缓冲区读到数据都会调用到ByteToMessageDecode...

2018-07-14 20:26:12 1176

原创 死磕Netty源码之内存分配详解(四)PoolArena全局内存分配

内存分配 关于我:http://huangth.com GitHub地址:https://github.com/RobertoHuang 免责声明:本系列博客并非原创,主要借鉴和抄袭闪电侠,占小狼等知名博主博客。如有侵权请及时联系全局分配内存池的初始阶段线程是没有内存缓存的,所以最开始的内存分配都需要在全局分配区进行分配全局分配区的内存构造和线程私有分...

2018-07-14 20:25:20 1135

原创 死磕Netty源码之内存分配详解(三)PoolThreadCache线程缓存内存分配

内存分配 关于我:http://huangth.com GitHub地址:https://github.com/RobertoHuang 免责声明:本系列博客并非原创,主要借鉴和抄袭闪电侠,占小狼等知名博主博客。如有侵权请及时联系线程私有分配在介绍PoolArena内存分配结构分析的时候提到内存分配会先从线程缓存里分配,这个线程缓存其实就是PoolThre...

2018-07-14 20:24:46 2294 1

原创 死磕Netty源码之内存分配详解(二)PoolArena内存分配结构分析

前言在应用层通过设置PooledByteBufAllocator来执行ByteBuf的分配,但是最终的内存分配工作被委托给PoolArena。由于Netty通常用于高并发系统所以各个线程进行内存分配时竞争不可避免,这可能会极大的影响内存分配的效率,为了缓解高并发时的线程竞争,Netty允许使用者创建多个分配器(Arena)来分离锁提高内存分配效率 关于我:http://huangth....

2018-07-14 20:23:09 1552

原创 死磕Netty源码之内存分配详解(一)(PooledByteBufAllocator)

前言为了避免频繁的内存分配给系统带来负担以及GC对系统性能带来波动,Netty4使用了内存池来管理内存的分配和回收,Netty内存池参考了Slab分配和Buddy分配思想。Slab分配是将内存分割成大小不等的内存块,在用户线程请求时根据请求的内存大小分配最为贴近Size的内存快,减少内存碎片同时避免了内存浪费。Buddy分配是把一块内存块等量分割回收时候进行合并,尽可能保证系统中有足够大的连续...

2018-07-14 18:52:51 5295

原创 死磕Netty源码之ChannelPipeline源码解析(二)

前言在上一篇博客中我们介绍了Pipeline数据结构以及节点的相关操作,在这一篇博客中将介绍Pipeline的事件传播 关于我:http://huangth.com GitHub地址:https://github.com/RobertoHuang 免责声明:本系列博客并非原创,主要借鉴和抄袭闪电侠,占小狼等知名博主博客。如有侵权请及时联系事件传播i...

2018-07-14 12:15:12 700

原创 死磕Netty源码之ChannelPipeline源码解析(一)

前言ChannelPipeline数据管道是ChannelHandler数据处理器的容器,负责ChannelHandler的管理和事件的拦截与调度 关于我:http://huangth.com GitHub地址:https://github.com/RobertoHuang 免责声明:本系列博客并非原创,主要借鉴和抄袭闪电侠,占小狼等知名博主博客。如有侵权请及时联系...

2018-07-11 22:31:26 1577

原创 死磕Netty源码之新连接接入源码解析

前言本博客主要是介绍Netty在新连接接入后的相关处理 关于我:http://huangth.com GitHub地址:https://github.com/RobertoHuang 免责声明:本系列博客并非原创,主要借鉴和抄袭闪电侠,占小狼等知名博主博客。如有侵权请及时联系新连接建立新连接建立可以分为以下三个步骤1.检测到有新的连接2.将新...

2018-07-11 21:46:47 999

原创 死磕Netty源码之Reactor线程模型详解(二)NioEventLoop的执行

前言在上一篇博客介绍了NioEventLoop的启动流程,这篇博客将介绍NioEventLoop的执行流程 博客地址:http://huangth.com GitHub地址:https://github.com/RobertoHuang 免责声明:本系列博客并非原创,主要借鉴和抄袭闪电侠,占小狼等知名博主博客。如有侵权请及时联系NioEventLoop执行Ni...

2018-07-08 13:38:44 955

原创 死磕Netty源码之Reactor线程模型详解(一)NioEventLoop的启动

前言Netty中最核心的就是Reactor线程,对应Netty中的代码就是NioEventLoop。NioEventLoop是通过NioEventLoopGroup进行维护的,所以在介绍NioEventLoop前我们先介绍一下NioEventLoopGroup 博客地址:http://huangth.com GitHub地址:https://github.com/RobertoH...

2018-07-08 13:32:37 1204

原创 死磕Netty源码之服务端启动源码解析

前言本博客讲述的是Netty是如何绑定端口、启动服务。启动服务的过程中你将会了解到Netty各大核心组件 博客地址:http://huangth.com GitHub地址:https://github.com/RobertoHuang 免责声明:本系列博客并非原创,主要借鉴和抄袭闪电侠,占小狼等知名博主博客。如有侵权请及时联系服务端启动DEMO先从一个简单的服务端...

2018-07-08 12:47:23 876 1

原创 (九) RabbitMQ实战教程(面向Java开发人员)之SpringBoot整合RabbitMQ

SpringBoot整合RabbitMQ使用SpringBoot整合RabbitMQ非常简单,它极大程度的简化了开发成本,使用SpringBoot整合RabbitMQ需导入如下依赖<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId

2018-03-19 20:44:28 2190 6

原创 (八) RabbitMQ实战教程(面向Java开发人员)之RabbitMQ实现异步RPC

RabbitMQ实现异步RPC本系列博客源码GIT地址:https://github.com/RobertoHuang/RGP-RABBITMQ.gitRabbitMQ Java Client服务端步骤:1.服务端监听一个队列,监听客户端发送过来的消息2.收到消息之后调用RPC服务得到调用结果3.从消息属性中获取reply_to,correlation_id属性,把调用结果发送给reply_to

2018-03-19 20:01:42 1705 1

原创 (七) RabbitMQ实战教程(面向Java开发人员)之RabbitMQ常用属性详解

RabbitMQ常用属性详解Alternate ExchangeAlternate Exchange简称AE,当消息不能被正确路由时,如果交换机设置了AE则消息会被投递到AE中,如果存在AE链则会按此继续投递,直到消息被正确路由或AE链结束消息被丢弃。通常建议AE的交换机类型为Fanout防止出现路由失败,如果一个交换机指定了AE那么意为着该交换机和AE链都无法被正确路由时才会触发消息返回Rabbi

2018-03-19 18:06:48 1486 1

原创 (六) RabbitMQ实战教程(面向Java开发人员)之RabbitMQ消息的可靠性

消息可靠性在项目中使用RabbitMQ时,我们可能会遇到这样的问题:如一个订单系统当用户付款成功时我们往消息中间件添加一条记录期望消息消费者修改订单状态,但是最终实际订单状态并没有被修改成功。遇到这种问题我们排查的思路如下:1.消息是否已经成功发送到消息中间件2.消息是否有丢失的情况 消息是否已经被消费成功在生产环境下是不容许出现消息投递/消费错误的情况的,因为这可能会对企业产生巨大的损失,本博客

2018-03-18 21:56:55 3224

原创 (五) RabbitMQ实战教程(面向Java开发人员)之RabbitMQ异常处理

RabbitMQ异常处理使用JAVA客户端整合RabbitMQ进行的许多操作都会抛出异常,我们可以自定义异常处理器进行处理,比如我们希望在RabbitMQ消费消息失败时记录一条日志,又或者在消息消费失败时发送一则通知等操作本系列博客源码GIT地址:https://github.com/RobertoHuang/RGP-RABBITMQ.gitRabbitMQ Java Client1.创建连接工具类

2018-03-18 00:37:33 3052

原创 (四) RabbitMQ实战教程(面向Java开发人员)之@RabbitListener消息消费

使用RabbitListener注解进行消息消费在前一篇博客中我们往MessageListenerContainer设置了MessageListener进行消息的消费,本篇博客将介绍一种更为简单的消息消费方式:使用@RabbitListener注解方式。使用RabbitListener进行消息的消费步骤如下:1.在启动类上添加@EnableRabbit注解2.在Spring容器中托管一个Rabbi

2018-03-13 17:48:23 16950

原创 (三) RabbitMQ实战教程(面向Java开发人员)之Spring整合RabbitMQ

Spring整合RabbitMQ(Spring AMQP)Spring AMQP是对AMQP协议的抽象和封装,从官方网站上得知它是由两个项目组成的(spring-amqp和spring-rabbit)。在使用Spring整合RabbitMQ时我们主要关注三个核心接口(MessageListenerContainer、RabbitAdmin以及RabbitTemplate)RabbitAdmin: 用

2018-03-13 15:58:27 3645 1

原创 (二) RabbitMQ实战教程(面向Java开发人员)之Rabbit Java Client

RabbitMQ Java Client在介绍完RabbitMQ基本概念后,我们使用Java代码来模拟一套生产者和消费者的模型。Talk is cheap,直接上代码了(在Demo工程中我会尽可能的应用上常用的方法,但由于篇幅有限所以无法在代码中体现不同交换机的用法,还请多多见谅)相关代码1.创建连接工厂工具类public class ConnectionFactoryUtils { pub

2018-03-12 14:02:44 7109 1

原创 (一) RabbitMQ实战教程(面向Java开发人员)之RabbitMQ相关概念介绍

前言因为项目组需要对RabbitMQ的使用进行优化,所以系统化的学习了RabbitMQ,记录下来希望能帮助到后续使用RabbitMQ的同学少走弯路。在阅读本博客前我希望您已经对RabbitMQ有了基本的了解,因为本篇博客不是从0到1的讲解RabbitMQ,同时本篇博客主要面向Java开发人员,因此不会涉及到运维相关知识,该系列博客大致分为如下几个模块1.RabbitMQ相关概念介绍2.Rabbit

2018-03-12 11:15:47 10302 6

原创 03.Spring IOC源码深度解析之默认标签的解析

标签解析在Spring的XML配置里面有两大类声明,一个是默认的如<bean id=”test” class=”test.TestBean” />,另一类就是自定义的如<tx:annotation-driven />,两种标签的解析方式差异是非常大的。parseBeanDefinitions方法就是用来处理使用哪种方式解析标签,判断是否默认命名空间还是自定义命名空间的办法是使用node.getNam

2017-12-27 20:55:27 651

原创 01.Spring源码深度解析之IDEA源码阅读环境搭建

前言相信大部分人在面试过程中都会被问到是否阅读过Spring源码 Spring底层如何实现 Spring使用了哪些设计模式等问题,通常遇到这种问题我是直接选择死亡。因为开始我觉的花时间去研究一门框架不如多学习几个开源框架性价比来的高,可能花几天时间你能用一个新框架撸码,但是花几天时间研究Spring真的研究不出什么道来,不过渐渐的我发现程序员如果想自身的核心竞争力除了增加知识的广度外更重要的是能在某

2017-12-22 13:59:10 5680

原创 前辈分享的经典语句

一个人的心态很重要 心量小的人 芝麻大小的事情也能在心里翻江倒海 心量大的人 即使在危机面前也能镇定自若 同样一件事情 掀起的波澜大小缺因人而异 有一句话很好 用于技术人员我觉得尤其合适 想要成为一棵大树 就不要去和草争一个人的成就 不可以用金钱来衡量 而是一生中 你善待过多少人 有多少人怀恋你 成功并非单指事业 无论是爱好或职业上的成功都只是成就 成功应该是多元化的 如人的一生

2017-12-21 19:49:46 1087

原创 Java日志记录框架Logback配置详解(企业级应用解决方案)

前言Logback是现在比较流行的一个日志记录框架,它的配置比较简单学习成本相对较低,所以刚刚接触该框架的朋友不要畏惧,多花点耐心很快就能灵活应用了。本篇博文不会具体介绍Logback搭建过程,如果你是Logback初学者,强烈建议阅读Logback常用配置详解,它对Logback的配置介绍的非常的详细,相信你看完这篇博客后会对Logback有一定的了解,然后再回头看下面的内容收获会更大企业级应用常

2017-07-19 22:38:57 4523

原创 IntelliJ IDEA详细配置和使用教程(适用于Java开发人员)

前言正所谓工欲善其事必先利其器,对开发人员而言若想提高编码效率,一款高效的开发工具是必不可少的,相信看到该博客的朋友们都已经对IntelliJ IDEA有所了解了,所以此处就不对IntelliJ IDEA进行介绍,而是直接阐述在实际开发中应用场景。博主使用的IntelliJ IDEA版本为IntelliJ IDEA 2017,因为博主是一名Java开发工程师,所以以下内容均以Java为主。(相信有不

2017-07-12 22:59:23 184433 28

原创 Hibernate批量处理操作(批量查询 批量删除)

前言此处以一个Student案例进行演示1.批量查询1.1 批量查询Dao层代码public List<Student> excuteBatchQuery(String sql, Map<String, List<Object>> map) { Session session = this.getSessionFactory().getCurrentSession(); SQLQue

2017-06-27 20:49:10 3465

原创 Linux 最常用命令和知识汇总(含思维导图)

下图是个人整理了一个Linux常用命令和知识点的汇总图片,能满足Java开发工程师基本需求,内容主要分为四部分,Linux介绍,Linux目录结构,Linux常用命令及vim详解。源文件百度云分享地址为:http://pan.baidu.com/s/1qXCLk4k 提取码为:pvez,如链接失效,可联系我获取该文件,下载通过Xmind打开即可。另外推荐一个Linux命令大全网站:http://ma

2017-06-08 09:07:35 6995 19

原创 Spring Security4.0.3源码分析之FilterChainProxy执行过程分析

在类org.springframework.web.filter.DelegatingFilterProxy的doFilter方法中可以看到,过滤器执行流程实际上是让委托执行实际的doFilter操作@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain filterCh

2017-06-07 14:03:36 1446

原创 Spring Security4.0.3源码分析之authentication-manager标签解析

最近在学习安全框架spring Security,想弄清楚其中实现的具体步骤,于是下定决心,研究一下Spring Security源码,这篇博客的目的是想把学习过程记录下来。学习过程中主要参考了http://dead-knight.iteye.com/category/220917大神的博客,然后在其基础上,进行更详细的说明authentication-manager在标签配置文件中的定义一般如下:

2017-05-09 23:05:45 2243

原创 Spring Security4.0.3源码分析之http标签解析

最近在学习安全框架Spring Security,想弄清楚其中实现的具体步骤,于是下定决心,研究一下Spring Security源码,这篇博客的目的是想把学习过程记录下来。学习过程中主要参考了http://dead-knight.iteye.com/blog/1511389大神的博客,然后在其基础上,进行更详细的说明在FilterChainProxy初始化的过程中,大概描述了标签解析的一些步骤,但

2017-05-09 22:43:43 2429

原创 Java调整图片大小合并PNG图片生成ICON(保持背景透明)

1.调整图片大小代码/** * * 功能描述: <br> * 〈调整图像到固定大小〉 * * @param srcImageFile 源图像文件地址 * @param descImageFile 缩放后的图像地址 * @param width 缩放后的宽度 * @param height 缩放后的高度 * @param isPadding

2017-05-09 00:09:00 4932

原创 Java动态代理机制详解(JDK动态代理与CGLIB动态代理区别)

代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问。代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理。在讲述动态代理前,我们先通过一个例子了解一下什么是静态代理,这里以事务控制为例。1.静态代理1.1 pom.xml文件配置<properties> <!-- Spring --> <spring.version>4.

2017-05-08 23:04:16 938

原创 Hibernate DetachedCriteria方式分页查询返回总记录数

最近在使用Hibernate进行分页查询的时候,发现Hibernate分页有一个瓶颈,就是只能访问查询对应的记录,并不能返回符合条件的总条数,网上给的很多策略都是再写一个方法,通过HQL查询总记录数,个人感觉这种方式太复杂了,如果涉及到复杂查询的时候,HQL也不好写,既然Hibernate是个这么流行的ORM框架,我相信它肯定提供了对应的方式,所以尝试了下,发现如下方式更为人性化。1.通过设置Pro

2017-05-03 23:40:25 6906 1

原创 FastDFS分布式文件系统简介及单机版安装步骤详解

FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储,文件同步,文件访问(文件上传,文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站,视频网站等等。FastDFS为互联网量身定制,充分考虑了冗余备份,负载均衡,线性扩容等机制,并注重高可用,高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传,下载等

2017-05-03 21:12:46 1061

原创 ActiveMQ单机版的安装与使用详细教程

首先简单的介绍一下MQ,MQ英文名MessageQueue,中文名也就是大家用的消息队列,干嘛用的呢,说白了就是一个消息的接受和转发的容器,可用于消息推送。ActiveMQ是由Apache出品的,一款最流行的,能力强劲的开源消息总线。ActiveMQ是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,它非常快速,支持多种语言的客户端和协议,而且可以非常容易的嵌入到企业的

2017-05-01 13:09:00 1793

原创 Spring Security4.0.3源码分析之FilterChainProxy初始化

最近在学习Spring Security,想弄清楚其中实现的具体步骤,于是下定决心,研究一下Spring Security源码,这篇博客的目的是想把学习过程记录下来。学习过程中主要参考了http://dead-knight.iteye.com/blog/1511389大神的博客,然后在其基础上,进行更详细的说明,现在让我们带着问题来学习Spring Security。1.Spring Securit

2017-04-28 00:11:08 2897 2

原创 Redis持久化原理及配置详解(RDB方式和AOF方式)

Redis的强大功能很大程度上是由于其将所有数据都存储在内存中。为了使Redis在重启后仍能保证数据不丢失,需要将数据从内存中以某种形式持久化到硬盘中。Redis支持两种持久化方式,一种是RDB方式,一种是AOF方式。可以单独使用其中一种或两种结合使用。(持久化即将数据保存到磁盘,机器宕机或者重启数据不丢失,存储到内存中的数据会丢失)1.RDB方式持久化1.1 RDB的概念 RDB方式是通过快照方

2017-04-27 11:33:53 7030

JProfiler9入门教程

JProfiler9入门教程

2019-04-12

Zookeeper图形化客户端工具ZooInspector

Zookeeper图形化客户端工具ZooInspector

2019-04-09

空空如也

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

TA关注的人

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