heroku部署指南

heroku提供的免费网站可以用于构建个人网站,非常适用于实验性质或是简单的博客系统。但是网上的文档大多数是拷贝的,没有一个完整或者靠谱的文章,本文会详细说明自已在搭建的过程中遇到的各种问题及解决办法。

……

阅读全文

一文读懂Back Pressure

最近经常看到back-pressure这个词,所些想要深入了解一下,以下是学习的一点心得。

什么是back-pressure

back-pressure这个词是来源于工程概念,当气流或液体在管道中运输时,由于管道变细或者受到其他阻碍,导致出现了下游向上游的逆向压力,这种情况就称为back pressure,也称作向后的压力。

在计算机行业,back pressure 通常用来描述当数据在传输中由于下层的buffer满了,导致上层服务无法继续接收数据的现象。

……

阅读全文

为什么我们需要'5个为什么'?

最近工作生活很忙,忙什么呢?忙着解决各种问题,像消防员一样跑到各个地方救火。当静下心来想这些问题的时候我突然意识到这些问题都彻底解决了吗?以后还会发生吗?他们发生的根本原因是什么?有没有一劳永逸的解决办法?不知道大家有没有这种忙着解决各种问题的经历,如果有的话下面的’5个为什么’方法论可能会帮你从根本上解决那些问题。

……

阅读全文

添加一行日志还要重启服务器?

在工作中我们经常会遇到以下问题:

  • 有个方法的入参没有打印,不知道用户输入了什么
  • 有个错误日志没有打印堆栈,只是打印了error.getMessage(),不知道上下文
  • 某个接口响应时间很慢,不知道哪一步有问题
  • 不知道是在哪一步创建了很大的ArrayList,或都HashMap

等等这一系列的问题,如果你没有遇到过这样的问题,停下来想一想要如何解决呢?
如果你遇到过这样的现象,那么你又是如何解决的呢?加日志然后重启服务器吗?

本文就是要介绍一个神器让你不用重启服务器就可以解决以上问题,它就是Btrace,以下是一个简单的demo,我们一起来看下Btrace的强大功能。

……

阅读全文

Javassist入门之其他特性

泛型

Javassist 的低级别 API 完全支持 Java 5 引入的泛型。但是,高级别的API(如CtClass)不直接支持泛型。

Java 的泛型是通过擦除技术实现。 编译后,所有类型参数都将被删除。 例如,假设您的源代码声明一个参数化类型 Vector

……

阅读全文

Javassist入门之ClassPool简介

ClassPool对象是CtClass对象的容器。 一旦创建了一个CtClass对象,它将被记录在ClassPool中,这是因为编译器当编译由该ClassPool对象引用的源代码时,可能稍后需要访问该ClassPool对象。

例如,假设一个新方法getter()被添加到表示Point类的CtClass对象中。之后,该程序尝试编译源代码,包括在Point中的getter()方法调用,并使用编译的代码作为方法的主体,这将被添加到另一个类Line。如果表示Point的CtClass对象丢失,则编译器无法编译getter()方法调用。请注意,原始类定义不包括getter()。因此,为了正确编译这种方法调用,ClassPool必须在程序执行时包含CtClass的所有实例。

……

阅读全文

Javassist入门之字节码接口

Javassist 还提供了用于直接编辑类文件的低级级 API。 使用此 API之前,你需要详细了解Java 字节码和类文件格式,因为它允许你对类文件进行任意修改。

如果你只想生成一个简单的类文件,使用javassist.bytecode.ClassFileWriter就足够了。 它比javassist.bytecode.ClassFile更快而且更小。

……

阅读全文

Javassist入门之类加载器

如果提前知道哪些类必须修改,那么修改类的最简单的方法如下:

  1. 通过调用ClassPool.get()获取一个CtClass对象,
  2. 修改它
  3. 在该CtClass对象上调用writeFile()或toBytecode()来获取修改的类文件。

如果在加载时才能确定一个类是否被修改,用户必须使Javassist与类加载器协作。Javassist可以与类加载器一起使用,以便在加载时可以修改字节码。 Javassist的用户可以定义自己的类加载器版本,但也可以使用Javassist提供的类加载器。

……

阅读全文

Javassist入门之自我检查和定制

CtClass提供了自我检查的方法。Javassist的自我检查的能力与Java反射API兼容。CtClass提供了getName(),getSuperclass(),getMethods()等等。CtClass还提供了修改类定义的方法。它允许添加一个新的字段,构造函数和方法。构造方法体也是可能的。

方法由CtMethod对象表示。CtMethod提供了几种修改方法定义的方法。请注意,如果方法是从超类继承的,那么表示继承方法的相同CtMethod对象代表在该超级类中声明的方法。CtMethod对象对应于每个方法声明。

……

阅读全文