黄老师

Life Note


  • 首页

  • 标签

  • 归档

  • 搜索

RocketMQ小笔记

发表于 2021-01-09 | 分类于 技术 | 阅读次数:

RocketMQ小笔记

6种消息类型

  • 普通消息
  • 顺序消息
  • 广播消息
  • 延时消息
  • 批量消息
  • 事务消息


2种消费模式

  • 集群消费:一个Group ID内只消费一次
  • 广播消费:一个Group ID内所有Consumer都消费
阅读全文 »

ThreadLocal内存泄露知识点详解

发表于 2021-01-09 | 分类于 技术 | 阅读次数:

ThreadLocal内存泄露知识点详解

1、ThreadLocal常规用法

1
2
3
4
5
6
7
8
9
10
public class ThreadLocal<T> {

public static <S> ThreadLocal<S> withInitial(Supplier<? extends S> supplier);

public void set(T value);

public T get();

public void remove();
}

java.lang.ThreadLocal中只有4个public方法,非常清晰。

  • withInitial:是更灵活的set能力,支持传入一个方法,以方法的返回值作为ThreadLocal的初始值。
  • set:设置Value到当前线程的ThreadLocal中去。
  • get:获取当前线程存储在ThreadLocal中的Value。
  • remove:移除当前线程ThreadLocal存储的Value。

注:ThreadLocal是一个变量对象,一个ThreadLocal是一个存储位置。如果线程需要多个存储位置,则创建多个ThreadLocal。

阅读全文 »

手把手教你Java字节码Demo

发表于 2021-01-01 | 分类于 技术 | 阅读次数:

手把手教你Java字节码Demo

接触中间件的开发来说,了解像Pinpoint(https://github.com/naver/pinpoint)、BTrace(https://github.com/btraceio/btrace)、阿里的JVM-SANDBOX(https://github.com/alibaba/jvm-sandbox)、Java在线问题诊断工具**Greys**(https://github.com/oldmanpushcart/greys-anatomy)等,都是通过字节码技术,无侵入的干预到Java应用程序。很清爽又很实用。


今天就记录字节码的两种实现demo,作为入门了解。


Java Agent的最常用方式:

  • 一种是premain方式:它属于静态注入。即在Java应用程序启动时,在类加载器对类的字节码进行加载之前对类字节码进行“再改造”来做功能增强(例如实现AOP)
  • 一种是:HotSpot独有的attach方式(JDK1.6才出现),它能实现动态注入,对已经运行的Java应用的类进行字节码增强。
阅读全文 »

CGLIB中常用API

发表于 2020-12-31 | 分类于 技术 | 阅读次数:

CGLIB

CGLIB,即Code Generation Library,是一个开源项目。Github地址:https://github.com/cglib/cglib。

CGLIB的github简介:CGLIB - 字节码生成库,是用于生成和转换Java字节码的高级API。它被AOP、测试、数据访问框架用于生成动态代理对象和拦截字段访问。

CGLIB提供两种类型的JAR包:

  • cglib-nodep-x.x.x.jar:使用nodep包不需要关联ASM的jar包,jar包内部包含ASM的类库。
  • cglib-x.x.x.jar:使用此jar包需要另外提供ASM的jar包,否则运行时报错,建议选用不包含ASM类库的jar包,可以方便控制ASM的。

本文中使用的CGLIB依赖为:

1
2
3
4
5
6
7
8
9
10
11
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib-nodep</artifactId>
<version>3.2.10</version>
</dependency>

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.22</version>
</dependency>
阅读全文 »

解决homebrew长时间停在Updating Homebrew 这个步骤

发表于 2020-12-19 | 分类于 工具 | 阅读次数:

在国内的网络环境下使用 Homebrew 安装软件的过程中可能会长时间卡在 Updating Homebrew 这个步骤。

例:执行 brew install composer 命令

1
2
➜  ~ brew install composer
Updating Homebrew... # 如果碰到长时间卡在这里,参考以下 2 种处理方法

阅读全文 »

slf4j MDC是个好东西

发表于 2020-12-19 | 分类于 技术 | 阅读次数:

slf4j MDC是个好东西

简介

MDC 全拼 Mapped Diagnostic Contexts,是SLF4J类日志系统中实现分布式多线程日志数据传递的重要工具。

同时,用户也可利用MDC将一些运行时的上下文数据打印出来。


什么意思呢?

常规情况下,写打日志的代码时,一般都是log.info、log.warn、log.error将想要打的日志进行拼装和格式化,打到日志输出中。MDC能干什么呢?能在不改动log.xxx打日志代码的情况下,在最终的日志输出的指定位置打印额外的信息。而这,就是靠MDC进行传递实现的。

阅读全文 »

Java 生成随机数的 5 种方式

发表于 2020-12-16 | 分类于 技术 | 阅读次数:

先说结论

试测数据:

  • 基于常见场景:在一个数据范围区间内生成随机数。
  • 1000万的随机数范围,for循环生成50万个随机数。无其他额外操作。
SDK包 性能耗时 评价
java.util.Random 9毫秒 1、编写简单,方法较多,也快速。很多SDK包都基于此扩展。
2、随机性重度依赖seed的情况,seed一样,分配的随机数和顺序一样。
3、线程不安全。
ThreadLocalRandom 8毫秒 1、继承于java.util.Random
2、与线程绑定,一个线程一个,多线程下安全。
3、seed情况部分借助于线程的内存地址等随机信息,来提升随机性。
Math.Random 14毫秒 1、用法上比较费劲,只能生成double。
2、内部有借用java.util.Random
SecureRandom 142毫秒 线程安全,seed不可预测(借助于系统中的随机事件信息)
Apache#RandomDataGenerator 54毫秒 API比较丰富,特殊场景下考虑。
it.unimi.dsi#XoRoShiRo128PlusRandom 17毫秒 偏门的三方包。比较快。线程不安全。
阅读全文 »

你不得不知的Spring事务失效 8 大原因

发表于 2020-12-15 | 分类于 工具 | 阅读次数:

1、数据库引擎不支持事务


这里以 MySQL 为例,其 MyISAM 引擎是不支持事务操作的,InnoDB 才是支持事务的引擎,一般要支持事务都会使用 InnoDB。


根据 MySQL 的官方文档:

https://dev.mysql.com/doc/refman/5.5/en/storage-engine-setting.html

从 MySQL 5.5.5 开始的默认存储引擎是:InnoDB,之前默认的都是:MyISAM,所以这点要值得注意,底层引擎不支持事务再怎么搞都是白搭。

阅读全文 »

分布式系统 之 分布式事务问题

发表于 2020-11-29 | 分类于 技术 | 阅读次数:

分布式系统 之 分布式事务问题


1、你怎么分享分布式事务?


分布式事务问题是分布式系统绕不开的技术话题。

“谈谈你对分布式事务的理解”、“分享下你团队在分布式事务上的解决方案”、“你用过哪几种分布式事务的中间件”?在技术交流/面试中很容易讨论到这些个话题,得到的反馈大概率是这样的:

  • “额~~ ~~ ~~ ~~”,一时语噻 《《《 平时没有梳理和认知分布式事物的问题,一时不知如何组织语言。
  • “我们没有使用分布式事务”《《《 分布式事务裸奔状态。
  • “我知道有CAP和BASE理论,分别是XXX意思” 《《《 “学院派”选手,不够接地气。
  • “我们没用分布式事务,但有做补偿方案,XXX” 《《《 有意识和思考,可以。
  • “我们在个别特殊业务上,用了XXX中间件方案” 《《《 有数据、有实践心得,可以。
  • etc……
阅读全文 »

一文就明白Java并发编程

发表于 2020-11-15 | 分类于 技术 | 阅读次数:

《一文就明白Java并发编程》

一文系列 之 并发编程。

行文3万余字,包含了多线程方方面面的知识点,相信对你会有所帮助!



黄老师


[TOC]



1、进程&线程

虽然大家肯定知道进程、线程的概念,但在介绍整篇文章前还是需要再陈述下,保证行文信息量的连贯性。


image-20201011114411757

Linux系统中线程的位置
阅读全文 »
12…4
黄老师

黄老师

38 日志
3 分类
49 标签
RSS
  • API5
  • API命名1
  • API版本1
  • API规范1
  • API设计原则1
  • DataSource1
  • Dubbo4
  • Git1
  • HTTP1
  • Hexo3
  • JStorm1
  • JVM3
  • Java11
  • MySQL1
  • Netty1
  • REST2
  • RESTful1
  • RPC4
  • RocketMQ1
  • SQL1
  • Spring3
  • Storm1
  • ThreadLocal1
  • WEB1
  • Web1
  • cglib1
  • homebrew1
  • slf4j1
  • 事务2
  • 内存2
  • 内存泄露1
  • 分布式1
  • 分布式事务1
  • 分析图1
  • 多线程1
  • 大数据1
  • 字节码2
  • 实时计算1
  • 工作观1
  • 并发1
  • 数据库4
  • 数据库事务1
  • 日志框架1
  • 研发1
  • 索引1
  • 错误码1
  • 随机数1
Links
  • Hexo.io
  • Dubbo.io
© 2021 黄老师