自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 收藏
  • 关注

原创 一步步排查解决java.lang.NoSuchFieldError 和 NoSuchMethodError问题

今天遇到了一个问题(如题),我在思考要不要记录下,最终决定写一个简单的小记录。我感觉大牛必备的两个技能:1、设计别人想不到的架构 2、解决别人无可奈何的问题。遇到下面这个问题会有四种人。(第四种人看完整篇文章)1、如果你之前没有遇到过,你会越查越崩溃;2、如果你之前遇到过,解决了,可能在比较明显的情况下会能快速定位,但是在很多情况下,查了好久之后你会怀疑自己说的到底对不对。3、第三种人遇到过这个问题,查了半天查不到,然后就一顿胡乱操作最后莫名其妙的好了、或者别人给解决、在差劲一点的就换个.

2020-08-21 17:17:25 17516

原创 缓存更新的套路深入理解

作为一个刚刚入行两年的小菜鸟,刚刚推出业务研发序列。面对新环境、新项目中无处不在的NoSQL,参考大佬的文章自己总结一下。大家有什么想法欢迎积极交流套路总表1. 经典方法 – Cache Aside Pattern1.1 为什么这样的方案会是经典方法呢?1.2 当前方案存在问题和场景1.3 其他方法和场景场景1–写操作先删除Redis再操作数据库场景2–写操作后增加更新Redis数据Read/Write Through PatternWrite Behind Caching Pattern1. .

2020-08-06 14:01:10 347

原创 RabbitMq消息丢失解决方案

1、消息丢失的三种原因生产者:生产者写消息失败、消息发送到RabbitMq但是内部接收失败。消息队列:RabbitMq出现宕机,接收到的消息还在内存中,没有来得及消费,就会导致内存中的数据被搞丢啦。消费者:消费者还没有来的急处理就发生了宕机。1、解决消息丢失的方案。1)解决生产者丢失 1、RebbitMq事务 缺点:事务机制是同步机制,生产者发送消息会同步阻塞卡主等待...

2020-01-03 17:08:51 1405

转载 12 | 他山之石:高性能内存分配器 jemalloc 基本原理

在上节课,我们介绍了强大的 ByteBuf 工具类,ByteBuf 在 Netty 中随处可见,那么这些 ByteBuf 在 Netty 中是如何被分配和管理的呢?接下来的我们会对 Netty 高性能内存管理进行剖析,这些知识相比前面的章节有些晦涩难懂,你不必过于担心,Netty 内存管理的实现并不是一蹴而就的,它也是参考了 jemalloc 内存分配器。今天我们就先介绍 jemalloc 内存分配器的基本原理,为我们后面的课程打好基础。背景知识jemalloc 是由 Jason Evans.

2020-12-15 20:37:56 2202 1

转载 11 | 另起炉灶:Netty 数据传输载体 ByteBuf 详解

在学习编解码章节的过程中,我们看到 Netty 大量使用了自己实现的 ByteBuf 工具类,ByteBuf 是 Netty 的数据容器,所有网络通信中字节流的传输都是通过 ByteBuf 完成的。然而 JDK NIO 包中已经提供了类似的 ByteBuffer 类,为什么 Netty 还要去重复造轮子呢?本节课我会详细地讲解 ByteBuf。为什么选择 ByteBuf我们首先介绍下 JDK NIO 的 ByteBuffer,才能知道 ByteBuffer 有哪些缺陷和痛点。下图展示了 ByteBu

2020-12-08 21:53:40 1740

转载 07 | 接头暗语:如何利用 Netty 实现自定义协议通信?

既然是网络编程,自然离不开通信协议,应用层之间通信需要实现各种各样的网络协议。在项目开发的过程中,我们就需要去构建满足自己业务场景的应用层协议。在上节课中我们介绍了如何使用网络协议解决 TCP 拆包/粘包的底层问题,本节课我们将在此基础上继续讨论如何设计一个高效、可扩展、易维护的自定义通信协议,以及如何使用 Netty 实现自定义通信协议。通信协议设计所谓协议,就是通信双方事先商量好的接口暗语,在 TCP 网络编程中,发送方和接收方的数据包格式都是二进制,发送方将对象转化成二进制流发送给接收方...

2020-12-08 21:18:01 684

转载 08 | 开箱即用:Netty 支持哪些常用的解码器?

在前两节课我们介绍了 TCP 拆包/粘包的问题,以及如何使用 Netty 实现自定义协议的编解码。可以看到,网络通信的底层实现,Netty 都已经帮我们封装好了,我们只需要扩展 ChannelHandler 实现自定义的编解码逻辑即可。更加人性化的是,Netty 提供了很多开箱即用的解码器,这些解码器基本覆盖了 TCP 拆包/粘包的通用解决方案。本节课我们将对 Netty 常用的解码器进行讲解,一起探索下它们有哪些用法和技巧。在本节课开始之前,我们首先回顾一下 TCP 拆包/粘包的主流解决方案。并梳..

2020-12-08 21:17:12 224

转载 09 | 数据传输:writeAndFlush 处理流程剖析

在前面几节课我们介绍了 Netty 编解码的基础知识,想必你已经掌握了 Netty 实现编解码逻辑的技巧。那么接下来我们如何将编解码后的结果发送出去呢?在 Netty 中实现数据发送非常简单,只需要调用 writeAndFlush 方法即可,这么简单的一行代码究竟 Netty 帮我们完成了哪些事情呢?一起进入我们今天这节课要探讨的主题吧!Pipeline 事件传播回顾在介绍 writeAndFlush 的工作原理之前,我们首先回顾下 Pipeline 的事件传播机制,因为他们是息息相关的。根据.

2020-12-08 21:13:38 2563

转载 10 | 双刃剑:合理管理 Netty 堆外内存

本节课我们将进入 Netty 内存管理的课程学习,在此之前,我们需要了解 Java 堆外内存的基本知识,因为当你在使用 Netty 时,需要时刻与堆外内存打交道。我们经常看到各类堆外内存泄漏的排查案例,堆外内存使用不当会使得应用出错、崩溃的概率变大,所以在使用堆外内存时一定要慎重,本节课我将带你一起认识堆外内存,并探讨如何更好地使用它。为什么需要堆外内存在 Java 中对象都是在堆内分配的,通常我们说的JVM 内存也就指的堆内内存,堆内内存完全被JVM 虚拟机所管理,JVM 有自己的垃圾回收算法,对

2020-12-08 21:08:51 576

原创 kafka、activemq、rabbitmq、rocketmq区别介绍

1、先说一下消息队列的常见使用场景吧,其实场景有很多,但是比较核心的有3个:解耦、异步、削峰解耦:现场画个图来说明一下,A系统发送个数据到BCD三个系统,接口调用发送,那如果E系统也要这个数据呢?那如果C系统现在不需要了呢?现在A系统又要发送第二种数据了呢?A系统负责人濒临崩溃中。。。再来点更加崩溃的事儿,A系统要时时刻刻考虑BCDE四个系统如果挂了咋办?我要不要重发?我要不要把消息存起来?头发都...

2020-01-03 11:02:18 108

空空如也

空空如也

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

TA关注的人

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