自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

韩浪的博客

大道至简,臻于至善

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

原创 使用java-tracer画方法内部逻辑的时序图

java-tracer功能介绍java-tracer是一个利用JVMTI技术实现的java方法调用轨迹录制的工具,它能帮我们绘制方法调用的时序图,利用时序图结合源码,我们可以很容易地理解一些框架的运行逻辑及细节结果样例如下链接即是一个简单的spring注入的时序图https://fengzhongke.github.io/pages/spring.html源码地址github地址:...

2019-09-04 00:15:44 1612 1

原创 利用jvm-sandbox画服务依赖图和时序图

jvm-sandbox功能jvm-sandbox是一个java动态字节码注入的工具,使用非常灵活,项目主页https://github.com/alibaba/JVM-Sandbox,它的原理是通过JVM-TI技术,利用asm修改字节码的能力,实现对运行时系统切入动态逻辑,具体使用介绍可以查看其主页说明。service-trace使用service-trace是一个使用jvm-sandbox...

2019-08-06 23:16:00 1788

原创 简单单机版限流器

在高并发系统设计的时候,限流器是一个很重要的工具,现在的分布式框架大多集成了限流器如何手撸一个简单限流器呢限流种类限制并发数:即限制同一时刻的请求数,例如限制1w的并发,就是说一个请求来了我们检查一下当前正在运行的请求,如果数量不超过1w我们就放行限制qps:限制时间段内的请求数,例如限制qps为1w,就是说一秒钟最多有1w个请求放行限制并发数对于第一种我们需要一个信号量,请求开始...

2019-12-06 16:35:08 527

原创 sequence生成器写法

sequence场景在分布式环境下,有的时候我们需要给每一个单元生成一个唯一id,在并发量不是很大的时候,数据库的自增主键是一个不错的选择,但是当数据量非常大,或者并发非常高的时候,自增的方式就会成为瓶颈,于是我们可以用sequence的方式。sequence方式其实也是一种自增的方式,只不过我们是批量自增,每次从数据库请求一个数据段,用完了之后再请求一段,以达到减小数据库访问量的目的方案设...

2019-09-07 00:48:01 1280

原创 利用shell命令和浏览器优化jstack的结果显示

jstack现状当我们用jstack排查线程栈问题的时候,我们经常会遇到许多相同的线程栈,尤其是当我们使用了线程池或者系统框架使用了线程池的时候,许多重复的栈桢充满着整个屏幕,想要找到我们需要的信息比较麻烦执行:jstack 12321结果:"qtp837692250-110" #110 prio=5 os_prio=31 tid=0x00007fdc80c4d000 nid=0x77...

2019-08-06 00:08:48 270

原创 利用java-tracer来录制方法调用过程

介绍对于程序开发一般要从两个角度去考虑,业务开发更关注功能逻辑实现,是一个业务问题;技术开发则需要关注性能稳定性,是一个纯技术问题。功能逻辑是一个大话题,涉及思维方式,业务需求,比较复杂,不太好量化,但是对于性能稳定性,却是一个技术领域的问题,对性能的追求是一个码农应有的素质。要想对性能有所追求,就要对系统有所了解,项目开发不是一个独立的事件,大的工程往往依赖很多人很多工具的辅助才能完成。正常...

2019-05-11 00:33:42 1018

原创 ASM静态代码解析方法依赖及生成方法调用流程图方法

系统依赖系统开发,随着功能不断完善,体量渐渐增大,分模块抽象,复用工具等;涉及复杂的业务逻辑的时候,也会引入外部服务,外部工具;业务开发追求的是功能的完整性和快速迭代,但是在分析系统可用性可靠性的时候,我们往往需要找到一些系统的薄弱点,及被依赖点依赖排查在java开发中,最细粒度的依赖就是方法级依赖,有了方法级依赖,就可以拓展到系统,平台级依赖大多数时候,我们都是靠撸代码来找出方法间的依赖...

2019-05-10 20:37:00 3468

原创 classLoader原理及自定义ClassLoader

ClassLoader功能类的加载JVM运行的时候,当用到一个类的时候,需要把类字节码文件加载到内存并生成运行时数据结构,其中classLoader的角色必不可少classLoader加载一个类的时候,会调用其如下方法public Class<?> loadClass(String name) throws ClassNotFoundException { return...

2019-05-10 20:34:53 1120

原创 asm代码解析看java字节码结构

根据asm对字节码的解析,可以分析出.class文件的字节码结构结构示意图如下4个byte为cafe babe,2个byte为minor 和major常量池分两部分,2个byte的常量池大小和内容2个byte的access flag,2个byte的class名,2个byte的super class名,2个byte的interface数量,及interface2个byte的field数...

2018-11-29 01:17:36 1135

原创 java日志框架原理(一)

日志代理框架常用的一些日志工具一般打日志,有许多种选择,像slf4j, log4j, logback, jul(java.util.logging.Logger), SimpleLog(System.err), commons-logging等。这些大致可以分为两类,代理类和工具类,其中代理类为slf4j和commons-logging,其它的为工具类。其中代理类不负责具体的日志打印,实际打印...

2018-10-11 01:35:00 3474

原创 入侵java进程的方法

需求当我们线上程序运行的时候,难免会遇到一些业务问题,在排查问题的时候我们会去看日志,查看一些函数输入输出来定位问题;然而许多时候,我们在项目开发的时候并没有留下足够的日志来排查问题,这时候就需要一些特殊的方法来排查,比如远程debug,重新增加日志重启服务,或者用btrace等工具来排查,各种工具都有各自的优点和使用的场景,具体不足本篇暂不讨论,本文只介绍一种新的简单的工具,这个工具可以提供...

2018-05-21 23:54:39 1081 1

原创 java函数式编程

java8终于引入了函数式编程,函数式编程即对lambda(λ)表达式的运用,熟练运用λ表达式,我们实现功能的思路会变得更清晰,写起代码来也可以更简捷,下面来认识和学习一下λ一、认识λ表达式,对于λ表达式,我们看到的使用得最多的就是集合的操作了,下面看几个例子List list = Arrays.asList("abc", "bcd", "cdef");List lengthLi

2018-01-28 22:42:53 177

原创 java远程调用中的RMI构建远程服务

在程序设计中,我们经常会遇到多进程交互,多进程协同工作,分布式任务处理等这样的场景,在这些场景中我们都会涉及到远程通信与远程调用,下面我们用java提供的rmi远程调用来构建一个远程服务一、RMI用法 java语言提供了一种很简便的远程调用,就是RMI,下面我们来看一下RMI的用法 首先,我们定义一个接口/** * 这个接口必须继承自java.rmi.Remote */p

2016-08-19 01:27:47 897

原创 java线程状态切换

java中多线程是非常重要的一块内容,在线程执行过程中会经历不同的线程状态,当然这个线程状态只是在java层面的 线程状态在java.lang.Thread.State这个枚举类中定义了 NEW:新线程还未start RUNNABLE:正在运行中 BLOCKED:线程阻塞住 WAITING:线程在等待被唤醒 TIMED_WAITING:有时效地在等待被唤醒,过时自动唤

2016-08-17 00:21:12 198

原创 线程安全随机队列

有的时候,在某些场景下,我们需要这么一个队列 1、这个队列是线程安全的 2、来了最新元素我们需要把最新元素放入队列,如果队列满了,我们需要把队尾的元素给remove掉 3、我们需要随机读取这个队列中的一个元素于是我们可以利用java现有的对象来完成,例如LinkedBlockingQueue 它能保证线程安全,符合第一点 它提供了操作的保证,即当队列满的时候,插入元素会报异常,能保证队列的

2016-08-16 23:28:50 792

原创 jdbc与mybatis及spring

分别以jdbc,mybatis,spring-jdbc,spring-mybatis访问数据库

2015-07-16 21:25:48 758

原创 java代理机制

代理在java语言中应用非常广泛,一个对象的功能借助另一个有相同功能的对象来完成,功能业务逻辑不变,这样可以添加一些额外的“轻逻辑”进去这里的轻逻辑是指一些通用逻辑,比如在一个代理方法调用之前之后加一些日志,或者在执行数据库操作之前之后做一些事务处理java代理分为两种:静态代理和动态代理,静态代理就是在编译成字节码之前代理就已经发生了,动态代理就是字节码加载到内存的时候,根据是否需要再代

2015-06-08 22:48:01 294

原创 spring ioc

spring的三种注入方式

2015-06-08 21:25:13 279

原创 java程序通过命令行执行

用惯了各种方便的ide之后,我们时常忘了程序它本来的面貌,许多时候都是没有关系,但是如果想探究具体细节,用命令行执行代码也是有一定的必要性的。#!/bin/shjava_home=/usr/binproj_home=/home/admin/proj_1cp=.for j_file in `find $proj_home/lib`docp=$cp:$j_filedon

2015-05-18 19:28:10 890

空空如也

空空如也

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

TA关注的人

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