Skip to content

Instantly share code, notes, and snippets.

@wutingjia
wutingjia / javaagent.md
Created October 19, 2019 11:33
javaagent

javaagent

核心接口:ClassFileTransformer

public class MyClassTransformer implements ClassFileTransformer {

    /*实现ClassFileTransformer接口中的唯方法。
     *用于对类的转换,每加载个类都会调用这个函数。
     * classfileBuffer 是这个类的二进制形式,即所说的操作字节码就是操作这个字节数组。
@wutingjia
wutingjia / JVM_DEBUG.md
Created October 5, 2019 13:03
JVM_DEBUG

JVM_DEBUG

Java内存区域及溢出异常

java程序的运行过程中,jvm所管理的内存将会包含以下几个运行时数据区域。

程序计数器

解释:可以看作当前线程所执行的字节码的行号指示器,在概念模型里,字节码解释器就是通过改变这个技术器的值来选取下一条需要执行的字节码指令。

关于@Pointcut的思考。

最近在写微服务公共组件的切面时,被要求切点表达式最好可以通过各服务配置文件外部读取的方式获得。

最后发现使用SpringAop说比较难以实现的,根本原因如下:

@Pointcutvalue值需要一个编译期常量。

1、编译期简单来说就是从源码打包到jar包的过程,之后的运行期自然是类加载运行的过程。
2、编译期常量会在编译的时候直接将实际值编译成自己文件,即在编译期就能找到常量的值。
3、spring-aop的原理(除了运行时织入)就是在编译时就将其转换为经过切面代理的字节文件。

@wutingjia
wutingjia / kafkaClient.md
Last active May 31, 2019 01:06
kafkaClient

Kafka-Clients

1、添加依赖

<dependency>
  <groupId>org.springframework.kafka</groupId>
  <artifactId>spring-kafka</artifactId>
  <version>2.1.4.RELEASE</version>
</dependency>
<dependency>
@wutingjia
wutingjia / Skywalking.md
Last active May 31, 2019 02:50
Skywalking

Skywalking

skywalking 是一个全链路监控系统,用于分析和串起微服务间的各种指标。主要有三部分构成:探针、后端、前端UI. 1、探针 探针就是一个agent,随着spring容器的启动而一起启动。类似AspectJ通过操作字节码达到效果。 agent.config:

agent.service_name=${SW_AGENT_NAME} #显示的服务名
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES} #后端的Ip地址
logging.level=${SW_LOGGING_LEVEL:DEBUG}
@wutingjia
wutingjia / 类加载机制.md
Created March 18, 2019 13:33
类加载机制

1

@wutingjia
wutingjia / linux常用.md
Created March 18, 2019 12:57
linux常用

查看所有文件(包括隐藏文件):ll -a
创建文件:touch [filename]
在不注销重新登陆的情况下使修改的配置文件生效:source [filename]
在用户目录下的隐藏文件.bashrc中配置环境变量例如export JAVA_HOME=/JAVA/jdk1.8.0_190

redis是key-value,其中的value可能是map,这个map中键为了避免歧义被称为field
需要强一致性的数据不应该使用缓存。

redis为什么快

  • 它是基于内存的操作,CPU不是redis的瓶颈,可以轻松处理每秒几十万的请求。
  • redis是单线程省去了很多上下文线程切换的时间。 从而不需要各种锁的性能消耗。增加性能可以使用单线程多进程的集群方案。
  • 全程使用Hash结构,对一些数据储存进行了优化比如压缩表和跳表。
  • redis使用多路复用技术。非阻塞IO内部采用epoll。

redis的过期策略

定期删除+惰性删除:

@wutingjia
wutingjia / mysql自动分区.md
Last active June 21, 2021 12:29
mysql自动分区

手动分区

对于需要定时分区的表,必须先进行一次手动分区。
对于新建的表,在建表语句后添加:

partition by range(partition_key)( #对于基于日期分期 推荐使用 to_days(pdate) to_days函数会将日期类型转化为int值提高效率
  partition p20190301 values less than (to_days('2019-03-02')), # 分区名字 一般习惯以p开头后面接日期
  partition p20190302 values less than (to_days('2019-03-03'),
);

对于已经存在的表创建分区: