摘要: 基于java的注解处理器写了个自动植入业务追踪日志的工具,目前snapshot版本已上线,欢迎体验和提出意见,感谢! 原文档(建议直接阅读这个):LogTrace使用指南 建议的版本号: jdk:8、9、10、11 gradle:7+ Part1: 解决的问题 本产品尝试解决以下场景的问题:假设现在 阅读全文
posted @ 2023-11-20 11:51 是胖虎捏 阅读(89) 评论(0) 推荐(0) 编辑
摘要: 编译时注解处理器在《深入理解Java虚拟机》一书中有一些介绍(前端编译篇有提到),但一直没有机会使用,直到碰到这个需求,觉得再合适不过了,就简单用了一下,这里做个记录。 原文写于2021年2月8日。 一、需求 我们为公司提供了一套通用的JAVA组件包,组件包内有不同的模块,这些模块会被打成jar包, 阅读全文
posted @ 2023-08-17 01:16 是胖虎捏 阅读(82) 评论(0) 推荐(0) 编辑
摘要: 一、在计算机中数据是如何进行计算的? 1.1:java中的byte型数据取值范围 我们最开始学习java的时候知道,byte类型的数据占了8个bit位,每个位上或0或1,左边第一位表示符号位,符号位如果为1表示负数,为0则表示正数,因此要推算byte的取值范围,只需要让数值位每一位上都等于1即可。 阅读全文
posted @ 2020-03-10 00:51 是胖虎捏 阅读(1252) 评论(1) 推荐(1) 编辑
摘要: 🐜 版本信息: 🐞 JDK:1.8+ 🐌 IDEA:2019.3 🐝 插件项目基于gradle构建。 🦟 知识背景:swing 🦇 参考文档: http://www.jetbrains.org/intellij/sdk/docs/tutorials/build_system/prereq 阅读全文
posted @ 2019-12-13 12:52 是胖虎捏 阅读(12690) 评论(5) 推荐(6) 编辑
摘要: 🌏 环境: 🌳 JDK11 🌱 IDEA 2019.03 🌾 Resilience4j 0.13.2 🍃 知识依赖:juc,位图 一、什么是熔断 在分布式系统中,各服务间的相互调用更加频繁,上下游调用中充满了可能性,一个服务可能会被很多其他服务依赖并调用,在这个过程中如果某个服务由于某种原 阅读全文
posted @ 2019-12-10 21:58 是胖虎捏 阅读(3363) 评论(0) 推荐(2) 编辑
摘要: 前言 目前工作中用到的分布式缓存技术有redis和memcached两种,缓存的目的是为了在高并发系统中有效降低DB的压力,但是在使用的时候可能会因为缓存结构设计不当造成一些问题,这里会把可能遇到的坑整理出来,方便日后查找。 一、常用的两种缓存技术的服务端特点 1.1:Memcache服务端 Mem 阅读全文
posted @ 2019-10-24 23:01 是胖虎捏 阅读(843) 评论(2) 推荐(0) 编辑
摘要: 基于依赖程序的版本信息:HikariCP:3.3.1 驱动程序mysql-connector-java:8.0.17 上一篇:Druid是如何管理数据库连接的 零、类图和流程图 开始前先来了解下HikariCP获取一个连接时类间的交互流程,方便下面详细流程的阅读。 获取连接时的类间交互: 图1 一、 阅读全文
posted @ 2019-08-28 00:18 是胖虎捏 阅读(6398) 评论(1) 推荐(1) 编辑
摘要: 基于依赖程序的版本信息:druid:1.1.16 驱动程序mysql-connector-java:8.0.17 下一篇:HikariCP是如何管理数据库连接的 零、类图&流程预览 下方流程中涉及到的类、属性、方法名均列在这里:Druid-类图-属性表 ←该表格用来辅助理解下面的流程图和代码,不用细 阅读全文
posted @ 2019-08-28 00:16 是胖虎捏 阅读(10916) 评论(10) 推荐(9) 编辑
摘要: 一、关于BeanPostProcessor 1.1:它是什么? 首先它是一个接口,定义了两个方法: public interface BeanPostProcessor { @Nullable //所有bean初始化之前触发该方法 default Object postProcessBeforeIn 阅读全文
posted @ 2019-07-16 23:34 是胖虎捏 阅读(3465) 评论(0) 推荐(0) 编辑
摘要: 最近公司有个需求需要借助InfluxDB实现(或者更准确的说,使用该数据库可以更容易的实现),因此稍微看了下这个数据库,把比较重要的一些东西先简单记录一下,日后如果踩坑,也会继续在下面补充。 零、下载&安装 官方地址:https://portal.influxdata.com/downloads/ 阅读全文
posted @ 2019-06-21 00:09 是胖虎捏 阅读(3381) 评论(1) 推荐(0) 编辑
摘要: 上一篇介绍了jvm的内存模型,本篇将介绍虚拟机中最为复杂的一部分:垃圾收集,本篇会从垃圾回收前的准备工作到后面的收集阶段的方式以及HotSpot虚拟机对这些工作的实现做个较为系统的记录,方便自己以后查找阅读。 一、栈帧、变量类型、引用分析 讲解垃圾收集器的实现之前,结合之前讲的jvm内存区域划分,先 阅读全文
posted @ 2019-05-07 09:29 是胖虎捏 阅读(515) 评论(0) 推荐(0) 编辑
摘要: 本篇文章基于上一篇,只针对数据采集做介绍,会提供一个SDK的实现和使用,会做实现方案的介绍,具体详细介绍下面边框加粗的部分: 一、数据采集 接着拿上一篇里的例子来说,把例子里的图贴过来: 图1 简单回顾下上图,一次API调用,完成上面各个业务服务的调用,然后聚合所有服务的信息,然后Redis_02的 阅读全文
posted @ 2019-04-15 22:20 是胖虎捏 阅读(2805) 评论(1) 推荐(0) 编辑
摘要: 一、分布式链路追踪可以做什么? 1.1:简单集群架构&微服务架构 先来看下最简单的网站集群架构图: 图1 在这个图里,存在从1~n个服务器,通过负载均衡器SLB进行请求分发,在每个服务器里,都做同一件事情。 现在来看下这个系统的具体业务逻辑(就是图1中每台服务器执行的逻辑,这里是假设其中一个业务接口 阅读全文
posted @ 2019-04-11 08:56 是胖虎捏 阅读(9740) 评论(3) 推荐(0) 编辑
摘要: 一、JAVA程序执行流程 JAVA程序执行的基本流程(基于HotSpot): 图1 二、内存模块划分 2.1:程序计数器 程序计数器是一块较小的内存空间,是当前线程执行字节码的行号指示器,字节码解释器就是通过改变这个计数器的值来获取下一条需要执行的字节码指令,其中分支、循环、跳转和异常处理,线程恢复 阅读全文
posted @ 2019-04-06 09:50 是胖虎捏 阅读(420) 评论(0) 推荐(0) 编辑
摘要: 注:本篇文章例子基于上一篇进行:Java NIO学习与记录(七): Reactor单线程模型的实现 前言:单线程Reactor模型的缺点 紧接着上篇Reactor单线程模型的例子来,假设Handler的read那里的处理方式延迟5s,当做是业务性能瓶颈,改变下原来的Handler,让其read方法在 阅读全文
posted @ 2019-04-01 23:46 是胖虎捏 阅读(3074) 评论(2) 推荐(3) 编辑
摘要: 一、Selector&Channel 1.1:各种channel 写这个模型需要提前了解Selector以及Channel,之前记录过FileChannel,除此之外还有以下几种Channel: ServerSocketChannel:用于监听新的TCP连接的通道,负责读取&响应,通常用于服务端的实 阅读全文
posted @ 2019-03-27 21:59 是胖虎捏 阅读(2921) 评论(10) 推荐(5) 编辑
摘要: 一、前言 开始之前,你需要准备的环境: Linux系统机器或者虚拟机一台,里面需要安装的软件:git、jdk、perl。 二、简单介绍 java性能分析火焰图的所做的事情就是能够分析出java程序运行期间存在的性能问题,因为某段代码拖慢整个程序执行是不允许的,因此靠火焰图的绘制和分析就可以找出类似的 阅读全文
posted @ 2019-03-22 19:42 是胖虎捏 阅读(7170) 评论(2) 推荐(0) 编辑
摘要: 上一篇说的是基于操作系统的IO处理模型,那么这一篇来介绍下服务器端基于IO模型和自身线程的处理方式。 一、基于BIO下的线程处理模式 这种处理模型是基于阻塞IO进行的,上一篇讲过,阻塞IO会阻塞每一个IO操作,直到事件就绪,下面来看下阻塞IO下的服务端线程模型: 图1 如上图所示,该线程模型基于阻塞 阅读全文
posted @ 2019-03-20 23:12 是胖虎捏 阅读(3027) 评论(0) 推荐(1) 编辑
摘要: 在开始介绍NIO Reactor模式之前,先来介绍下操作系统的五种I/O模型,了解了这些模型,对理解java nio会有不小的帮助。 前言:一次网络请求的流程 先来看下一个服务端处理一次网络请求的流程图: 图1 一、图1解析 1.1:内核空间&用户空间 内核空间:指操作系统运行时用于程序调度、虚拟内 阅读全文
posted @ 2019-03-19 13:53 是胖虎捏 阅读(937) 评论(0) 推荐(0) 编辑
摘要: 一、线程池的Future模式 在了解java8的CompletableFuture之前,先通过Future来解决一个问题,看个例子: 假设现在有一个网站,首页有顶部Banner位、左边栏、右边栏、用户信息几大模块需要加载,现在出一个接口,要求包装并吐出这几大模块的内容 先来抽象一个首页接口对象: p 阅读全文
posted @ 2019-03-14 22:50 是胖虎捏 阅读(2214) 评论(0) 推荐(0) 编辑