- 博客(27)
- 资源 (9)
- 收藏
- 关注
原创 Spring - AOP 之 cglib 实现原理
AOP - CGLIBhttps://blog.csdn.net/yhl_jxy/article/details/80633194import net.sf.cglib.core.DebuggingClassWriter;import net.sf.cglib.proxy.Enhancer;public class Client { public static void main(String[] args) { // 代理类class文件存入本地磁盘方便我们反编译查看源码
2021-01-25 00:25:32
269
原创 Java - CAS 使用详解
CAS 基本用法https://blog.csdn.net/Hsuxu/article/details/9467651CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(B)当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做public static void main(String[] args) { //主内存中 atomicInteger 的初始值为 5 AtomicInteger atomicInteger = new AtomicInt
2021-01-25 00:22:38
645
原创 Apollo - Server Http 接口文档
Apollo - Server Http 接口文档https://ctripcorp.github.io/apollo/#/zh/usage/other-language-client-user-guideConfigFileController 带缓存的Http接口从Apollo读取配置接口会从缓存中获取配置,适合频率较高的配置拉取请求,如简单的每30秒轮询一次配置// 使用 Guava 对配置信息进行缓存private Cache<String, String> localCach
2021-01-21 20:29:15
1256
原创 JVM - GC垃圾收集器
对象引用判断https://blog.csdn.net/sunjin9418/article/details/796036511> 引用计数算法给对象中添加一个引用计数器,每当有一个地方引用它时,计数器就加1,当引用失效时,计数器就减1;任何时刻计数器都为0的对象是不可能在被使用的。## 引用计数算法无法对象之间循环引用的问题2> GC Roots可达性分析算法通过“GC Roots”对象作为起始点,从这些节点向下搜索,搜索走过的路径称为引用链(Reference Chain
2021-01-13 21:26:16
143
原创 SpringCloud - @RefreshScope 原理及使用
Spring Cloud @RefreshScope 原理及使用https://www.cnblogs.com/javastack/p/12049139.htmlRefreshScope(org.springframework.cloud.context.scope.refresh)是spring cloud提供的一种特殊的scope实现,用来实现配置、实例热加载Singleton和Prototype是硬编码的,并不是Scope子类。 Scope实际上是自定义扩展的接口protecte.
2021-01-06 21:47:54
1378
原创 SpringGateway - Redis限流组件之Lua脚本&Java实现
在Spring Cloud Gateway中,限流作为网关最基本的功能,Spring Cloud Gateway官方就提供了RequestRateLimiterGatewayFilterFactory这个类,适用Redis和lua脚本实现了令牌桶的方式。具体实现逻辑在RequestRateLimiterGatewayFilterFactory类中,lua脚本在Scripts文件夹下:request_rate_limitter.lualocal tokens_key = KEYS[1]local
2021-01-05 00:12:50
806
4
原创 RocketMQ - Producer端 Broker故障选择机制
Broker故障转移机制Mq在发送端引入了Broker故障转移机制,能够在某个Broker异常时,根据当次请求RT时间,预估出Broker的故障持续时间,在这段持续时间内暂时屏蔽该Broker,将消息发往其他Broker,参考https://blog.csdn.net/hosaos/article/details/99624467Producer.send 实现在默认的消息发送方法前会调用 selectOneMessageQueue 方法无论消息发送成功或是抛出异常都会调用 updateFaultI
2020-12-30 22:24:00
614
原创 RocketMQ - MessageOffset
ConsumeFromWherehttps://blog.csdn.net/prestigeding/article/details/96576932对于一个新的消费组,无论是集群模式还是广播模式都不会存储该消费组的消费进度,可以理解为-1keyremarkCONSUME_FROM_LAST_OFFSET默认策略,从该队列最尾开始消费,即跳过历史消息CONSUME_FROM_FIRST_OFFSET从队列最开始开始消费,即设置从最小的 Offset开始读取CONSU
2020-12-30 20:32:07
573
原创 RocketMQ - NameSrv
Namesrv 功能简介NameServer负责维护Producer和Consumer的配置信息、状态信息,并且协调各个角色的协同执行。通过NameServer各个角色可以了解到集群的整体信息,并且他们会定期向NameServer上报状态NamesrvStartup.main() 启动流程// NamesrvConfig 默认配置// private String rocketmqHome = System.getProperty(MixAll.ROCKETMQ_HOME_PROPERTY, Sys
2020-12-29 20:47:38
446
原创 SpringBoot - 启动流程分析
SpringBoot-spring.factories# PropertySource Loadersorg.springframework.boot.env.PropertySourceLoader=\org.springframework.boot.env.PropertiesPropertySourceLoader,\org.springframework.boot.env.YamlPropertySourceLoader# Run Listenersorg.spring.
2020-12-28 00:07:59
212
原创 Java - 堆外内存
Java NIO学习笔记四(零拷贝详解)_拿笔小星的博客-CSDN博客_零拷贝NIO DirectByteBufferJava NIO引入了用于通道的缓冲区的ByteBuffer。 ByteBuffer有三个主要的实现:HeapByteBuffer在调用ByteBuffer.allocate()时使用。 它被称为堆,因为它保存在JVM的堆空间中,因此你可以获得所有优势,如GC支持和缓存优化。 但是,它不是页面对齐的,这意味着如果你需要通过JNI与本地代码交谈,JVM将不得不复制到对齐的缓冲区
2020-12-28 00:05:25
90
原创 JVM - ElasticSearch 默认虚拟机配置参考
## JVM configuration################################################################## IMPORTANT: JVM heap size#################################################################### You should always set the min and max JVM heap## size to the sam
2020-12-15 21:20:12
412
原创 JVM - StackSize & ThreadCount
https://www.cnblogs.com/leeego-123/p/12124939.htmlJVM 内存参数设置: java -Xmx3550m -Xms3550m -Xmn2g -Xss128k-Xmx3550m:设置JVM最大可用内存为3550M.-Xms3550m:设置JVM促使内存为3550m.此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存.-Xmn2g:设置年轻代大小为2G.整个堆大小=年轻代大小 + 年老代大小 + 持久代大小.持久代一般固定大小为
2020-12-15 21:16:10
690
原创 JVM - JIT即时编译
https://blog.csdn.net/shenwansangz/article/details/95601232在部分商用虚拟机中(如HotSpot),Java程序最初是通过解释器(Interpreter)进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为“热点代码”。为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器(Just In Time Compiler,即JI
2020-12-15 21:14:40
97
原创 JVM - 栈上分配 & TLAB
Java对象内存分配方式https://www.cnblogs.com/BlueStarWei/p/9358757.html(1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。(2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。(3) 从堆上分配,亦称动态内存分配。程序在运行的时候用mal
2020-12-15 21:11:42
167
原创 Java - Object wait() 方法之虚假唤醒spurious wakeup
Object wait():使一个线程处于等待状态,释放CPU和锁资源Causes the current thread to wait until either another thread invokesThe current thread must own this object's monitor. // 否则: IllegalMonitorStateException(正在等待的对象没有锁)In other words, waits should always occur in loo
2020-12-02 22:40:08
321
原创 JVM - Class文件结构和类加载
Oracle 官网定义Class 文件: https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.htmlTheClassFileStructureAclassfile consists of a singleClassFilestructure:ClassFile { u4 magic; u2 minor_version; u2 ...
2020-11-29 23:57:50
112
原创 Nginx反向代理 VSCode Server :Websocket 自动关闭(code:1006)
NGINX 反向代理 VSCode Server 出现错误 :Websocket 自动关闭(code:1006)实际上是Nginx 缺少 WebSocket 代理的原因vscode.conf 完整配置如下:upstream vscode { server 127.0.0.1:9000; #VSCode Server}#VSCode Server Err:1006 解决方案: https://www.cnblogs.com/qianxunman/p/13656874.html#
2020-11-25 23:36:05
8344
1
原创 JVM - GC垃圾回收算法
一 垃圾回收概述垃圾回收(Garbage Collection,GC)引起大家的关注,是从1995 年 Java 发布后开始的。事实上,GC 作为计算机科学领域非常热的研究话题之一,最早可以追溯到 1959 年的夏天,起初是用用来简化 Lisp 内存管理的。在接下来60余年的时间里, 通过 Cheney、Baker 等大师的不断努力,GC 的世界里出现了标记清除、复制、分代、增量回收等一系列 GC 算法,基于这些算法,又出现了种类繁复的垃圾回收器。GC 的定义首先我们来看一下...
2020-11-16 20:49:07
209
原创 SkyWalking Agent 实现原理
微内核架构SkyWalking Agent 采用了微内核架构(Microkernel Architecture),那什么是微内核架构呢?微内核架构也被称为插件化架构(Plug-in Architecture),是一种面向功能进行拆分的可扩展性架构。在基于产品的应用中通常会使用微内核架构,例如,IDEA、Eclipse 这类 IDE 开发工具,内核都是非常精简的,对 Maven、Gradle 等新功能的支持都是以插件的形式增加的。如下图所示,微内核架构分为核心系统和插件模块两大部分。在上图展
2020-11-12 09:19:07
9262
2
原创 Byte Buddy 入门教程
为什么需要运行时代码生成我们知道,Java 是一种强类型的编程语言,即要求所有变量和对象都有一个确定的类型,如果在赋值操作中出现类型不兼容的情况,就会抛出异常。强类型检查在大多数情况下是可行的,然而在某些特殊场景下,强类型检查则成了巨大的障碍。例如,在对外提供一个通用 jar 包时,我们通常不能引用用户应用中定义的任何类型,因为当这个通用 jar 包被编译时,我们还不知道这些用户的自定义类型。为了调用用户自定义的类,访问其属性或方法,Java 类库提供了一套反射 API 帮助我们查找未知类型,以及调
2020-11-11 15:06:10
2399
1
原创 OpenTracing 简介
自从 Google Dapper 的论文发布之后,各大互联网公司和开源社区开发的分布式链路追踪产品百花齐放,同时也给使用者带来了一个问题,各个分布式链路追踪产品的 API 并不兼容,如果用户在各个产品之间进行切换,成本非常高。而 OpenTracing 就完美的解决了这个问题,OpenTracing 通过提供平台无关、厂商无关的 API,帮助开发人员能够方便地添加(或更换)追踪系统。Trace 简介一个 Trace 代表一个事务、请求或是流程在分布式系统中的执行过程。OpenTrac..
2020-11-11 14:56:55
1180
原创 Archlinux 安装步骤
开始真正的安装前,必须检测网络是否连接。因为安装必须联网进行下载。输入ping baidu.com如果网络连接失败,应连接成功,否则安装无法进行。步骤1:硬盘分区:fdisk /dev/sda分区格式化:mkfs.ext4 /dev/sda1.分区挂载:mount /dev/sda1 /mnt步骤2:
2015-04-14 20:20:35
492
转载 java 数据库事务的处理
java事务的处理(原文:http://zhenchengchagangzi.iteye.com/blog/1159493)java的事务处理,如果对数据库进行多次操作,每一次的执行或步骤都是一个事务.如果数据库操作在某一步没有执行或出现异常而导致事务失败,这样有的事务被执行有的就没有被执行,从而就有了事务的回滚,取消先前的操作..... 注:在Java中使用事务
2015-03-31 11:12:52
658
原创 Android给support_v4.jar包添加源码和doc文档
http://stackoverflow.com/questions/12628439/how-can-i-enable-javadoc-for-the-android-support-library/12629379#12629379I created a file android-support-v4.jar.properties in the libs folder.
2015-03-25 23:51:29
475
原创 Java生成复杂word/pdf解决方案
常见的导出word的方案1、Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁。使用Jacob自带的DLL动态链接库,并通过JNI的方式实现了在Java平台上对COM程序的调用。DLL动态链接库的生成需要windows平台的支持。2、 Apache POI包括一系列的API,它们可以操作基于MicroSoft OLE 2
2015-03-13 11:22:30
4143
转载 java awt 实现简单的验证码图片的生成
import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.util.Random;impor
2015-01-08 11:28:11
760
vscode-server-3.6.2 vscode 服务端 linux amd版本
2020-11-13
slik subversion命令行的svn工具 dos环境
2015-03-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人