自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(42)
  • 问答 (1)
  • 收藏
  • 关注

原创 RabbitMQ 客户端源码系列 - Channel

前言续上次分享 RabbitMQ 客户端源码系列 - Connection ,继续分享Channel相关的源码分析 (com.rabbitmq:amqp-client:4.8.3)友情提醒:本次分享适合的人群,需要对 RabbitMQ 有一定的了解Channelshttps://www.rabbitmq.com/channels.htmlRabbitMQ client Demo基于上次 Java Client Connecting to RabbitMQ Demo 针对 Rabbi

2022-03-31 19:19:30 2347

原创 RabbitMQ 客户端源码系列 - Connection

前言本次方木打算直接上干货分享 RabbitMQ Java 客户端一系列的源码分析 (com.rabbitmq:amqp-client:4.8.3)ps: 最近接收到公司的任务就是阅读和分析 spring-rabbit、amqp-client,因此打算一同和大家分享 amqp-client。由于 RabbitMQ 是 Erlang 语言开发(暂时没有对这块分享的计划)友情提醒:本次分享适合的人群,需要对 RabbitMQ 有一定的了解RabbitMQ Getstarted: https://w

2022-03-28 21:21:14 2636

原创 canal 入门篇

canal 入门篇

2022-03-12 23:19:58 4344

原创 阿里开源流控框架 - Sentinel入门介绍

大家好,我是方木前言限流一直就是一个比较热门而又老旧的话题,但是作为应对高并发的手段之一,限流的热度一直都在。提到限流框架,很多人可能会想到Guava的Ratelimiter,或者Netflix的concuurency-limits,又或者Spring官方出品的Hystrix(已经停止维护了)和替代Hystrix的Resilience4j。那么,如果必须要我选择一款限流的框架,那就是它 - SentinelSentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流

2022-03-08 23:28:37 3457

原创 2022 Java面试题合集

📝 2022最新Java面试题合集☕ 包括 Java 集合、JVM、多线程、并发编程、设计模式、SpringBoot、SpringCloud、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat、Python、HTML、CSS、Vue、JavaScript、大数据、BATJ 大厂面试题等等技术栈!🎉 整理不易,真心希望能够帮助到大家!(持续完善更

2022-03-06 22:02:26 1030

原创 彻底搞懂JVM的垃圾回收器

大家好,我是方木前言之前方木就带大家聊聊 JVM 垃圾回收机制(GC) 中的 JVM那些事之垃圾回收算法,今天继续带着大家来聊聊 JVM 垃圾回收机制(GC) 中的垃圾回收器,垃圾回收算法 可以简单的理解为 理论知识,垃圾回收器 则可以认为是 具体实现。由于Java虚拟机规范并没有对垃圾收集器如何实现进行明确的规定,所以不同的JVM厂商以及不同虚拟机版本所提供的垃圾收集器都可能会有较大的差别,并且一般也都会提供对应的参数,供用户根据自己的应用特点组合出各个内存区块,主要是新生代、老年代所使用的收集器。

2022-03-06 21:07:13 405

原创 彻底搞懂JVM的垃圾回收算法

大家好,我是方木~今天方木就带大家聊聊 JVM 垃圾回收机制(GC) 中的垃圾回收算法,开发 Java 的小伙伴,不用像开发 C++ 的小伙伴一样,需要代码执行垃圾回收(Java 程序中不再需要使用的内存空间进行回收), 但是作为合格 Java 开发,还是需要了解 JVM垃圾回收机制,不至于遇到 堆内存不足、OOM、频繁GC等问题 不知所措。对象存活性判断垃圾收回的前提需要 判断对象存活性,常用的对象存活性判断方法有引用计数法与可达性分析,不过由于引用计数法无法解决对象循环引用的问题,因此主流的 JV

2022-03-03 21:05:30 515

原创 2022 Java最新面试题合集

2022最新Java面试题合集,包括 Java 集合、JVM、多线程、并发编程、设计模式、SpringBoot、SpringCloud、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat、大数据、阿里巴巴等大厂面试题等等技术栈!文末获取所有面试题资源Java集合容器什么是集合集合的特点集合和数组的区别使用集合框架的好处常用的集合类有

2022-03-03 19:57:36 7076

原创 Java动态代理机制之JDK动态代理

前言代理模式(Proxy Pattern)是23种常用的面向对象软件的设计模式之一,作用是为其他对象提供一种代理以控制对这个对象的访问,直白说就是中间商或代购如图,client发起请求到接口,正常是通过接口实现类impl来调用方法完成请求,但是增加了代理类后,可以直接用proxy的实例来调用interface的实现类的方法,并且可以增加额外的功能。为什么要增加一层代理类呢,有两个优点:隐藏和保护接口实现类, 控制对接口实现类对象的直接访问可以增加新的功能实现,提高了系统的可扩展性而

2022-03-02 21:13:21 473

原创 彻底搞懂Netty的线程模型

前言Netty是基于异步的事件驱动的高性能网络框架和工具,常见的分布式中间件底层都有涉及到Netty。要学习netty线程模型,先了解三种IO模型,这样理解netty线程模型和IO模型更轻松。BIO同步阻塞IO模型一个线程负责连接,多线程则为每一个接入开启一个线程一个请求一个应答请求之后应答之前客户端会一直阻塞NIO同步非阻塞I/O基于IO多路复用技术的“非阻塞同步”IO模型。简单来说,内核将可读可写事件通知应用,由应用主动发起读写操作;AIO异步非阻塞IO,AIO 引入异步通道的

2022-03-01 22:39:30 3689 1

原创 Java线上环境OOM问题排查

这次跟大家分享的是如何解决线上环境OOM问题

2022-02-28 22:31:51 2285

原创 EFAK - Kafka可视化管理工具

前言什么是EFAKEFAK(Eagle For Apache Kafka,以前称为 Kafka Eagle)EFAK是开源可视化和管理软件。可以查询、可视化、监控kafka集群,是将 kafka 的集群数据转换为图形可视化的工具。为什么要用EFAK Apache Kafka 没有正式提供监控系统或页面。 开源Kafka监控系统功能太少或暂停维护。 现有的监控系统难以配置和使用。 一些监控系统无法满足与现有IM的集成,如微信、钉钉等。 安装下载可以在

2022-02-27 23:47:12 7268 2

原创 MySQL最重要的日志-binlog详解

前言什么是binlogmysql中有各种类型的日志,记录了mysql包括启动、运行、连接、更改等各种操作,而binlog就是其中最重要的一种日志,它记录了MySQL所有数据的变更,并以二进制的形式存储在磁盘上binlg记录了所有的表结构变更(CREATE、ALTER TABLE…)以及表数据修改(INSERT、UPDATE、DELETE…),以事件形式记录,还包含语句所执行的消耗的时间官网对事件的解释为:二进制日志中存储的内容称之为事件,每一个数据库更新操作(Insert、Upd...

2022-02-24 23:24:18 1582

原创 Elasticsearch高可用之集群脑裂问题详解

前言什么是脑裂问题ES在主节点上产生分歧,产生多个主节点,从而使集群分裂,使得集群处于异常状态。这个现象叫做脑裂。脑裂问题其实就是同一个集群的不同节点对于整个集群的状态有不同的理解,导致操作错乱,类似于精神分裂举个栗子:下图是一个有两个节点的elasticsearch集群。集群维护一个单个索引并有一个分片和一个复制节点。节点1在启动时被选举为主节点并保存主分片(在下面的schema里标记为0P),而节点2保存复制分片(0R)这时如果在两个节点之间的通讯中断了(网络问...

2022-02-22 22:59:15 2386

原创 Maven Helper,一款快速解决Maven依赖冲突的IDEA插件

前言Maven是个广泛使用的依赖管理工具,但是日常开发中,我们经常会遇到因为Maven的依赖机制导致的Jar包冲突。举个例子,如果你的项目中使用了两个Jar包,分别是A和B。现在A需要依赖另一个Jar包C,B也需要依赖C。但是A依赖的C的版本是1.0,B依赖的C的版本是2.0。这时候,Maven会将这1.0的C和2.0的C都下载到你的项目中,这样你的项目中就存在了不同版本的C,这时Maven会依据依赖路径最短优先原则,来决定使用哪个版本的Jar包,而另一个无用的Jar包则未被使用,这就是所谓...

2022-02-22 08:53:27 6955 1

原创 Vue.js安装及引入iview组件库

Vue安装在项目中使用Vue的方式有两种,一种是通过CDN引入Vue.js<!-- 开发环境版本,包含了有帮助的命令行警告 --><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><!-- 生产环境版本,优化了尺寸和速度 --><script...

2019-04-20 17:59:15 5835 1

原创 实现发送Http请求的两种方法

最近开发微信公众号平台时,需要使用到HTTP请求发送的方法,所以撸了两种出来,属于工具类的范畴,也可以直接使用RestTemplate,简单粗暴,上手极快 使用原生HttpURLConnection public class HttpClientTest { /** * Get请求 * @param httpUrl * @return *...

2018-12-20 11:53:06 10637

原创 SpringMVC中DispatcherServlet源码的流程分析

DispatcherServlet是Spring MVC的核心内容,理解它的具体服务流程对于中高级应用开发是不可缺少的,下面将通过对源码进行注释来分析下DispatcherServlet的流程处理 doService 作为分发请求的方法,doService方法的作用和servlet中的doService作用类似,接收http请求,然后提供对应的服务 /** * Exposes ...

2018-12-10 10:09:26 309

原创 MySQL Explain 使用及参数详解

MySQL常见的性能瓶颈一般都是出现在CPU和I/O上,即在数据装入内存中或磁盘上读取数据时,CPU发生了饱和或装入数据过大,内存容量不足,磁盘I/O性能被限制。这时候就要使用到Explain关键字来进行分析和调优。 基本使用 Explain关键字可以用来模拟优化器执行SQL查询语句,从而了解SQL语句的处理方式,来达到分析查询语句或表结构的性能瓶颈。通过Explain可以获得表...

2018-12-09 16:33:42 1201

原创 MySQL存储过程插入数据过慢处理方法

在使用存储过程进行千万条数据的插入的时候,插入效率在每分钟七千条左右,这样算下来,需要几十个小时,所以找了一下优化的方法,除了对存储过程本身的优化,还有就是修改了MySQL的配置文件的部分参数我做了以下几个参数的修改innodb_log_file_size = 1024M日志组中的每个日志文件的大小,设置较大的值可以减少脏数据刷新到磁盘的次数innodb_log_buffer_s...

2018-12-07 08:44:31 7496

原创 Spring Boot(七):使用RabbitMQ实现消息通信

消息队列(MQ)是一种应用程序对应用程序的通信方法,常用于解决分布式系统中应用耦合、异步消息、流量削锋等问题,实现高性能、高可用、可伸缩和最终一致性架构问题。MQ是消费者-生产者模型的一种实现,一端不断写入消息队列中,另一端读取、订阅队列中的消息。RabbitMQ 是一个开源的AMQP(高级消息队列)实现,服务器端用 Erlang 语言编写,支持多种客户端语言,包括Java、Python、C、...

2018-11-29 09:22:09 1150

原创 个人面试常见问题整合(Java开发)

技术点面试:开发中Java用的比较多的数据结构有哪些?谈谈你对hashmap的理解,底层的基本实现,hashmap是怎么解决碰撞问题的,是线程安全的吗?hashtab是线程安全的,还有线程安全的map吗?currenthashmap是怎么实现线程安全的?对链表了解吗?ArrayList和LinkedList的区别?list如何去重?什么情况下需要重写hashcode? 了解异常吗?运行时异常...

2018-11-13 15:56:50 340 1

原创 Jmeter启动错误及解决方案

最近使用Jmeter做压力测试时,遇到了几个启动错误,如下(mac环境)第一个:Unrecognized VM option 'MaxMetaspaceSize=256m'原先以为是Jmeter的参数配置出问题,MaxMetaspaceSize设置不正确,在修改了Jmeter配置文件后发现依然错误,后找到问题原因:维护老项目使用了JDK7版本,使用的Jmeter是通过brew instal...

2018-11-12 14:14:10 21964 1

原创 Mac实现多个版本的JDK环境切换

最近维护老项目需要用到jdk7,恰逢又换了mac,所以记录下mac中切换不同版本jdk的操作,步骤如下打开terminal,输入 open .bash_profile 打开文件,没有的话就使用vi命令创建一个 配置jdk环境# JDK1.7export JAVA_7_HOME='/Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/...

2018-10-24 08:28:34 6323 1

原创 基于SpringBoot2.0构建的种子项目

个人开发的基于SpringBoot2.0构建的种子项目,配置了通用Mapper、Service接口,以及使用FreeMarker模板引擎实现了代码生成器,可用于中小项目的快速开发。技术选用Spring Boot Mybatis tk.Mybatis PageHelper FastJson Druid FreeMarker代码结构├── README.md├── pom...

2018-10-23 15:26:39 905 2

原创 Java线程池总结

线程是个吃资源大户,如果没有很好地管理线程,容易造成许多问题,所以线程池应运而生 为什么要使用线程池 1. 降低系统资源损耗,线程的创建、运行、销毁都需要消耗系统资源,通过线程池可以达到线程的复用,避免无用的消耗2. 提高响应速度,任务到达时可以直接使用线程,不需要再等待线程的创建3. 提高线程的可管理性 线程池执行逻辑 逻辑顺序:核心线程——&gt;阻塞队列——&...

2018-10-16 20:08:36 267

原创 Docker安装及常用命令

Docker是什么 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次...

2018-10-08 11:10:30 193

原创 Spring Cloud(三):断路器Hystrix和Hystrix Dashboard

Netflix创造了一个可调用的库来实现断路器模式,即Hystrix组件,在微服务架构中,一个API网关控制请求发送到不同的服务中,如下图所示,各个客户端通过API网关发送请求到各个服务当一个服务挂掉的时候,会导致通信出现问题。当请求这个服务的次数达到一定阈值时(Hystrix中的默认值为5秒内出现20次故障),电路打开,不进行通话。在错误和开路的情况下,开发人员可以进行服务的修复。 ...

2018-09-30 10:00:11 275

原创 Spring Cloud(二):服务消费(Feign)与负载均衡

Feign是一个声明式Web Service客户端。使用Feign能让编写Web Service客户端更加简单, 它的使用方法是定义一个接口,然后在上面添加注解,同时也支持JAX-RS标准的注解。Feign也支持可拔插式的编码器和解码器。Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。Feign可以与Eureka和...

2018-09-28 11:57:14 305

原创 Spring Cloud(一):使用Eureka进行服务注册与发现

作为分布式架构开发的一种选择,Spring Cloud利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud是各类框架的集合,这一点和Spring Boot是一样的,因为Spring Cloud就是基于Spring Boot搭建...

2018-09-27 12:39:40 674

原创 Spring Boot(六):集成Shiro实现权限控制

Shiro是Apache旗下的一款产品,是一个强大且易用的Java安全框架,执行身份验证、授权、密码学和会话管理。Shiro在日常工作开发中并不少见,因为相较于Spring Security成熟但是复杂的开发体系而言,Shiro的上手只需要几天,而且在授权和验证的配置上比较简单。 Shiro整体架构 Shiro的整体架构如下图:Subject:即“当前操作用户”。泛指当前操作的事...

2018-09-25 15:35:33 221

原创 Spring Boot(五):集成Redis和使用Redis实现缓存共享

Redis(REmote DIctionary Server)是一个key-value存储系统,是当下互联网公司最常用的NoSQL数据库之一。支持存储的value类型有string、list、set、zset(sorted set --有序集合)和hash。Redis的数据是存储在内存中的,通过磁盘的高速写入存储数据,存储速度和多种数据类型是Redis的两大优点,同时还有操作的原子性,以及它的通用...

2018-09-16 20:52:47 1639

原创 反射实例:ORM搭建

反射机制是Java给开发者留下的后门之一,让开发者可以通过API去动态获得被封装的属性和方法,很多框架的功能都是基于反射实现的,像Hibernate、Mybatis、Spring(这个是真的多)。今天就手写一个ORM最基础的实现,也就是Java对象和数据库表之间的映射。项目使用SpringBoot搭建,其实用什么都一样,只不过SpringBoot本身配置都写好了,创建也快,习惯了= =po...

2018-09-12 20:27:09 392

原创 Java类加载过程图解

朋友给我发了一道有意思的题目,如下为什么用.class的方式加载类和以Class.forName()的方式加载的结果不同呢,原因很简单,就是类加载过程的不同。这就扯到基础理解上了,就是Java是如何加载一个类的呢?上图是我绘制的整个Java类加载过程。首先是编译期,将Java源文件也就是敲好的代码通过编译,转换成.class文件,也就是字节码文件(byte),然后经过传输传...

2018-08-22 16:52:36 12681 5

原创 Spring Boot(四): 集成 Swagger2 展现在线接口文档

前后端分离的大趋势下,后端除了要开发,最重要的就是编写API文档了。但是,由于开发任务的不断增加,接口增加过多,这给API的编写造成一定的难度,使得文档整合的越来越杂糅。所以,Swagger 就是用来解决这一问题的工具。开发人员不用再提供文档,只需要给出一个Swagger 地址,就可以让需要调用到接口的人员在线获取数据,测试接口功能,可以说是非常便利了。 增加Swagger2 的依赖 ...

2018-08-21 09:49:13 1277

原创 Spring Boot(三): 集成Mybatis和Druid实现增删改查

查了很多教程和博客,基本都是把Spring Boot和Spring Data JPA放在一起用,个人用不惯JPA,所以直接Mybatis了,毕竟现在大部分人用的都是Mybatis,这章主要是写一个基础表的增删改查首先搭建一个Spring Boot项目,项目结构和启动类如下然后是pom.xml引入我们需要的包&lt;?xml version="1.0" encoding="UTF-...

2018-08-10 10:40:30 1966 1

原创 Spring Boot(二): 使用DevTools实现热部署

Spring Boot提供了许多开发工具包,其中就包括实现热部署功能,我们在第一篇中构建的项目里添加的DevTools包就是用来干这个的。如果构建项目时没有添加DevTools的话,那就需要手动导入这个包。添加依赖打开pom.xml文件,添加如下配置&lt;dependency&gt; &lt;groupId&gt;org.springframework.boot&lt;/gr...

2018-08-08 16:54:41 317

原创 Spring Boot(一): 快速构建web项目

前言Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。Spring Boot 使用特定的配置来构建生产就绪型的项目,坚持“‘约定大于配置’”的理念,减少之前开发过程中繁琐的配置。总结四个字就是:特别方便(๑•̀ㅂ•́)و✧本文构建的项目是Spring Boot2.x版本,由于2.x版本和1.x版本出入较大,本系列也算是...

2018-08-08 15:48:54 11720

原创 深入解析HashMap源码(二)

接上章   深入解析HashMap源码(一) ,我们来看HashMap中一些核心的成员方法 hash方法 static final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h &gt;&gt;&gt; 16); }ha...

2018-08-06 09:58:55 276

原创 ThreadLocal的使用及实现原理

ThreadLocal直译是本地线程,但实际上它的译名是线程局部变量(ThreadLocalVariable)。ThreadLocal诞生的目的是隔离不同线程所使用的变量,官方对它的解释是:“提供了线程局部变量,是独立于变量的初始化副本”,也就是说它可以实现将某一个变量隔离在某个线程内,其它的线程无法访问和使用这个变量。我们先来做一个测试,先不使用ThreadLocal,创建三个线程pu...

2018-08-03 17:23:16 1841 1

空空如也

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

TA关注的人

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