自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

wenyixicodedog的博客

wenyixicodedog的博客

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

原创 nacos配置中心动态刷新原理分析(server端)

在之前上一篇文章中我们一起看了nacos配置中心动态刷新client端的长轮询逻辑监听、事件发布变更配置和client端怎么和SpringBoot整合。所以,本篇我们主要来看nacos服务端是怎么处理客户端长轮询监听配置变更和主动推送变更配置的。

2022-04-30 23:42:33 1037

原创 nacos配置中心动态刷新原理分析【客户端】

通过配置中心,可以使得配置标准化、格式统一化。当配置信息发生变动时,修改实时生效,无需要重新重启服务器,可以实时去调整相关对应的业务。

2022-04-25 23:06:28 7028 2

原创 美团Cat监控集成Hystrix线程池链路分析

CAT(Central Application Tracking)是一个实时和接近全量的监控系统,它侧重于对Java应用的监控,在中间件(MVC、RPC、数据库、缓存等)框架中得到广泛应用,为业务线提供系统的性能指标、健康状况、监控告警等。

2022-04-17 19:39:49 878

原创 Tomcat线程池监控及线程池原理分析

当有新任务时,Tomcat的线程池核心线程如果已经创建完了,Tomcat会尽最大努力开启新的非核心线程去执行新任务,而JUC的ThreadPoolExecutor则是入队,等待队列满了再创建新的非核心线程去执行任务。

2022-03-27 22:42:55 9045

原创 HystrixCommand使用及创建线程池问题

①、groupKey的默认值是使用@HystrixCommand标注的方法所在的类名 ②、commandKey的默认值是@HystrixCommand标注的方法名,即每个方法会被当做一个HystrixCommand ③、threadPoolKey没有默认值,和groupKey保持一致

2022-03-19 22:47:00 1796

原创 一次服务端大面积接口响应时间骤增问题排查

1. 有时候即使沟通其他部门,查看他们的接口耗时情况,即使他们的接口耗时正常,但是,也并不一定就表示是我们的问题,有可能问题出在网络链路中(nginx等)。2. http调用重试机制还是要根据具体的业务场景进行使用,不能盲用。3. 接口耗时超时时间要度量好,不宜过大不宜过短。4. 问题排查要仔细而全面,不能放过任何蛛丝马迹,在没有确定证据之前不能想当然判定哪里有问题或者决定一个想法,一旦确定问题,处理要果断。

2022-03-19 00:21:17 6006

原创 记一次服务端内存泄漏排查之旅(第二篇)

本次线上内存泄漏表现出来(接到报警通知)是在上上周末,当大家都沉浸在周末的闲暇时光的时候,突然工作群接到运维通知说监控到我们的服务爆出一些500的错误,一时间,小组哗然,大家忙着看各种监控指标是否正常,发现内存大量被占用,居高不下释放不掉,cup持续飙高,接口耗时也非常严重。

2022-03-13 20:47:37 855

原创 二叉树的遍历-前序、中序、后序、层次 Java

二叉树结构: static class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int val) { this.val = val; } }前序遍历: 递归: static void traverseTreeNodePreRecursion(TreeNode root) { i

2021-10-31 21:48:59 157

原创 SpringBoot配置MessageConvert,取消字段首字母大写自动转小写

方式一:@Beanpublic HttpMessageConverters fastJsonHttpMessageConverters() { //1.定义一个Convert转换消息的对象 FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter(); //2.设置特性 //非线程安全,确保执行一次 TypeUtils.compatibleWithFieldNam.

2021-10-22 14:05:53 631

原创 Java代码开发规范

声明:本文基于《阿里巴巴代码规约-嵩山版》,在自己理解的基础上稍有扩展,希望帮到需要的朋友。1、POJO 类中的任何布尔类型的变量,都不要加 is 前缀,否则部分框架解析会引起序列化错误。说明:在MySQL 建表约定表达是与否的变量采用 is_xxx 的命名方式,所以,需要在<resultMap>设置从 is_xxx 到 xxx 的映射关系。反例:定义为基本数据类型 Boolean isDeleted 的属性,它的方法也是 isDeleted(),框架在反向解析的时候,“误以为”对应

2021-10-21 11:55:33 748

原创 Java程序猿面试分享

1、过往项目经历,项目亮点,遇到什么难题,怎么解决的,有没有其他解决方案。讲讲项目架构以及做了哪些高可用方案设计2、MQ( ROCKETMQ)项目中使用场景,ROCKETMQ架构原理3、ROCKETMQ是怎么保证消息不丢失的,业务中消息消费幂等性是怎么保证的,场景。4、REDIS做缓存怎么保证缓存不被穿透、击穿。5、怎么防止商品超卖,阐述处理流程。6、数据库存储原理,做过哪些优化,怎么优化、索引合并、最左匹配原则,mvcc。。7。数据库ICP优化8、JVM使用的那种垃圾收集器,分

2021-10-19 23:10:00 107

原创 程序猿面试分享(偏基础部分)

1、synchronized怎么实现的?锁升级过程。2,Reentrant怎么实现的,相比于synchronized有哪些特性,可重入、非公平竞争是怎么实现的。3、线程池得七个参数都是在什么阶段使用到。4、countdownlatch执行过程。5、gc算法有哪些,各自得优缺点。6、cms的执行四个阶段,每个阶段做了什么事情。年轻代回收怎么触发的老年代回收(卡表是怎么新建、更新引用关系的)。7、new object创建一个对象做了那些事情(1、查询这个对象是否已经创建,2、分配内存3、初始化)第.

2021-10-19 23:09:08 98

原创 朋友阿里面试分享

朋友阿里面试分享,base杭州,已发offer:阿里达摩院面试:1、ConcurrentHashMap,HashMap原理,1.7和1.8的区别。2、怎么设计一个秒杀系统,瞬时高并发设计,限流设计。3、分布式锁Redisson加锁原理,锁失败,锁续期,公平锁,非公平锁,集群模式下有哪些问题。4、Redis阻塞队列。5、Java中锁有哪些,锁升级过程,锁原理。6、spring bean处理器,生命周期,bean循环依赖。7、jvm年轻代,老年代垃圾收集算法,对象何时进入到老年代

2021-10-19 23:05:52 452

原创 记一次JVM内存泄漏问题及解决(第一篇)

这里定义的ThreadExecutorConfig.thirdServiceExecutor()只是一个类的静态static方法,所以在调用这个类的静态thirdServiceExecutor()方法的时候,每次都是new 一个新对象ThreadPoolTaskExecutor

2021-08-15 23:19:24 2028

原创 Java获取本地IP地址

public static String getLocalAddress() { try { // Traversal Network interface to get the first non-loopback and non-private address Enumeration<NetworkInterface> enumeration = NetworkInterface.getNetworkInterfaces();.

2021-08-14 14:12:16 483 1

原创 jvm性能问题排查常用命令

1、查看进程下线程信息ps p 1 -L -o pcpu,pid,tid,time,tname,cmd,pmem,rss,wchan:30,psr,stat标准格式说明符:代码 头部 描述 %mem %MEM 进程占用物理内存的百分比 args COMMAND 输出命令及其全部参数 cmd CMD alias args comm COMMAND 仅输出可执行文件的名字 command COMMAND a

2021-07-24 16:16:42 498

原创 kibana message 显示日志行不全,被截断

kibanamessage显示日志行不全,被截断怎么解决:在kibana的management=>advancesetting里设置truncate:maxHeight为0。

2021-07-13 11:45:40 1974 4

原创 springboot 设置跨域

package com.alibaba.repeater.console.start.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.web.cors.CorsConfiguration;import org.springframework.web.cors.

2021-03-26 12:53:35 257

原创 Java多线程 之 Semaphore源码分析

​目录 1、背景介绍 2、运行实例 3、源码分析一、背景介绍信号量(Semaphore),也被称为信号量,是在多线程环境下使用的一种工具类, 它负责协调各个线程, 以保证它们能够以一定数量地、正确、合理的使用公共资源。 每一个线程获取到一个计数信号量后,计数信号量就会减1,知道计数信号量为0,表示计数信号量已经不可用了,在许可可用前会阻塞每一个 acquire()。。拿到信号量的线程可以进入代码,否...

2020-11-30 00:24:51 164 1

原创 seata源码初始启动报错(protobuf)

seata,前身fescar,是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。seata源码导入到idea中第一次启动server端的时候,编译会报错如下:很明显就是protobuf包下generated不存在,其实这是由于seata的serializer项目么有编译造成的,只需要我们idea下载安装Protobuf Support插件,然后重启idea,然后

2020-11-28 22:31:26 1029

原创 netty writeAndFlush源码分析

​目录 一、 背景 二、源码一、背景writeAndFlush,顾名思义,就是写入(发送缓冲区)并且刷新,熟悉netty编码的同学对这个方法一定不会感到陌生,这方法既能将数据写到发送缓存中,也能刷新到channel中。二、源码以在动态长度解码器那节中使用的例子为入口,我们进入到writeAndFlush看看其执行逻辑。public class LengthFieldBasedFrameDecoderTestClient {...

2020-11-28 21:48:05 568

原创 netty零拷贝之CompositeByteBuf

目录一、背景简介二、netty零拷贝一、背景简介在TCP网络数据传输过程中,数据包有可能被分割为独立的几个数据包进行发送,对于服务器接收端来说,单个的数据包是没有任何意义的,只有将这些数据包组合到一起,才能接收后解码然后提供给我们的业务层进行处理,而在数据报价进行整合的过程中,零拷贝做的工作就是避免或者减少内存区域中数据的复制次数,进而提高程序的响应性能。二、netty零拷贝netty对于零拷贝有几种不同的形式,其本质上都是讲两个或者多个Byte...

2020-11-02 23:17:40 896

原创 netty ByteOrder大小端

ByteOrder直译的意思就是字节序。在计算机网络二进制传输的过程中,字节存在两种序列化顺序:高位字节序和低位字节序。高位字节序:高位字节在前,低位字节在后(内存地址低位在前,高位地址在后)。低位字节序:低位字节在前,高位字节在后(内存地址低位在前,高位地址在后)。netty中默认字节序是大端字节序,即字节高位在前,低位在后,符合人类的书写习惯。ByteOrder类也比较简单,只存在返回高位还是低位的ByteOrder和描述ByteOrder的name字段。 public fina.

2020-11-02 23:15:05 1774

原创 netty粘包拆包之LengthFieldBasedFrameDecoder解码器

​目录 一、 背景简介 二、应用 三、源码一、背景简介LengthFieldBasedFrameDecoder 基于长度字段解码器,是一个非常灵活、强大的解码器,他能够根据我们动态配置的参数对接收到的消息进行动态解码,以满足实际的业务需求。当解码具有消息头长度字段表示该消息主体或整个消息的长度的二进制消息时,它是特别有用的。二、应用在这里先简单看下LengthFieldBasedFrameDecoder类中的核心字段。这些字...

2020-10-31 23:05:10 750

原创 netty粘包拆包之DelimiterBasedFrameDecoder解码器

​目录 一、 背景简介 二、应用 三、源码一、背景简介DelimiterBasedFrameDecoder 基于自定义分隔符解码器,他能够按照我们自定义的特殊符号或者字符作为分隔符对接收到的消息进行分段解码,在服务端接收到信息进行解析的时候DelimiterBasedFrameDecoder的构造方法需要传递两个参数maxFrameLength和可变长参数delimiters,maxFrameLength用来限制对接收到的数据进行解...

2020-10-25 12:03:07 3972 1

原创 Mac 安装 brew

mac下安装和使用brew安装brew执行以下命令即可安装brew最新版本(https://github.com/Homebrew/install)/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/H...

2020-10-24 23:27:46 1689 1

原创 netty粘包拆包之LineBasedFrameDecoder解码器

​目录 一、背景简介 二、应用 三、源码一、背景简介LineBasedFrameDecoder基于回车换行符解码器,他能够按照我们输入的回车换行符(\r or \r\n)对接收到的消息进行解码,在服务端接收到信息进行解析的时候LineBasedFrameDecoder的构造方法需要传递一个参数maxLength,用来限制对接收到的数据进行解码的时候一次解码的最大长度。如果在解码的过程中对传递的数据搜索到了换行符,那么换行符之前的数据(...

2020-10-22 00:39:16 1273 2

原创 netty粘包拆包之FixedLengthFrameDecoder解码器

​目录 一、背景简介 二、应用 三、源码一、背景简介FixedLengthFrameDecoder固定长度解码器,他能够按照我们指定的固定长度(frameLength)对接收到的消息进行解码,如果我们接收到的消息字节数等于frameLength,则认为是一次完整的消息传输,如果我们接收到的消息字节数小于frameLength,则服务端在decode()处理的时候会返回null,所以客户端在传输数据的时候如果消息字节数小于frameL...

2020-10-18 14:04:47 1739

原创 netty源码之ByteBuf详解

目录 一、背景简介 二、ByteBuf和ByteBuffer对比 三、源码 一、背景简介ByteBuf,顾名思义,就是字节缓冲区,是Netty中非常重要的一个组件。熟悉jdk NIO的同学应该知道ByteBuffer,正是因为jdk原生ByteBuffer使用比较复杂,某些场景下性能不是太好,netty开发团队重新设计了ByteBuf用以替代原生ByteBuffer。 二、ByteBuf和ByteBuffer对比...

2020-10-18 02:03:43 427 1

原创 netty单线程模型

​目录 一、netty简介 二、netty线程模型 一、netty简介Netty是由JBOSS提供的一个java开源框架,用以提供异步的、事件驱动的网络应用程序框架和工具,快速开发高性能、高可靠性的网络服务器和客户端程序。也就是说,Netty 是一个基于NIO的客户、服务器端的编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户、服务端应用。Netty相当于简化和流线化了网络应用的编程开发过程,例如:基于...

2020-10-01 01:14:06 813

原创 IDIntellij idea用快捷键生成序列化id

File -> Settings -> Editor -> Inspections -> 搜索Serialization issues ,找到Serializable class without 'serialVersionUID' ->打上勾,Apply->OK新建JavaDTO,然后 Alt+EnterEnter确认生成OK。...

2020-09-08 00:06:50 278

原创 idea 设置多少字符自动换行

2020-09-08 00:04:33 911

原创 多线程开发常用的集合操作

在实际开发中,一般使用java.util.concurrent包中的相关类如果使用List集合, 就是使用java.util.concurrent.CopyOnWriteArrayList如果使用Set集合,不需要排序, java.util.concurrent.CopyOnWriteArraySet如果使用Set集合,需要排序, java.util.concurrent.ConcurrentSkipListSet如果使用Map集合,不需要根据键排序, java.util.concu...

2020-09-08 00:02:49 273

转载 Zookeeper 登录安全验证

前言由于之前的服务都是在内网,Zookeeper集群配置都是走的内网IP,外网不开放相关端口。最近由于业务升级,购置了阿里云的服务,需要对外开放Zookeeper服务。问题Zookeeper+dubbo,如何设置安全认证?不想让其他服务连接Zookeeper,因为这个Zookeeper服务器在外网。查询官方文档:Zookeeper 是 Apacahe Hadoop 的子项目,是...

2020-08-16 22:45:48 14165

原创 idea 返回上次光标所在位置

IDEA 快速返回上次查看代码的位置在IDEA中可以使用快捷键返回,默认是ctrl+alt+方向键(Windows系统)在IDEA中查看当前设置的快捷键 (Back和Forward) (Mac系统)注意:如果快捷键不生效,很有可能是和其他软件快捷键冲突,解决冲突即可。...

2020-08-16 22:45:26 9066 1

原创 idea去掉thymeleaf模板变量取值时显示的红色波浪线

idea去掉thymeleaf 模板变量取值时显示的红色波浪线:把这个检查去掉就行了。

2020-08-16 22:43:56 943

原创 Mac 清除dns缓存

sudo dscacheutil -flushcache

2020-08-16 22:43:43 582

原创 MacOS 微信截图 无法正常使用

1、打开系统偏好设置,找到安全与隐私2、点击隐私,找到屏幕录制,将截图软件添加进去即可

2020-08-16 22:43:27 6935 1

原创 深入理解JVM之 07——JVM内存分配和回收策略

引言 Java技术体系中所提倡的自动内存管理最终可以归结为自动化地解决两个问题:给对象分配内存以及回收分配给对象的内存。对象的内存分配,从大方向讲就是在堆上分配,对象主要分配在新生代的Eden区上,当然分配的规则并不是固定的,其细节取决于使用的是哪一种收集器组合,还有虚拟机中与内存相关的参数的设置。垃圾收集器组合一般就是Serial+Serial Old和Parallel+Ser...

2020-08-16 17:58:21 228

原创 深入理解JVM之 06——一文揭秘JAVA七种垃圾收集器

前言 如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商、版本的虚拟机所提供的垃圾收集器都可能会有很大差别,并且一般都会提供参数供用户根据自己的应用特点和要求组合出各个年代所使用的收集器。接下来讨论的收集器基于JDK1.7 Update 14 之后的HotSpot虚拟机(在此版本中正...

2020-08-16 17:58:11 236

空空如也

空空如也

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

TA关注的人

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