Skip to content

Instantly share code, notes, and snippets.

@wutingjia
wutingjia / 数据库索引.md
Last active March 13, 2019 12:47
数据库索引

MySQL 5.5之前版本默认的存储引擎是MyISAM,5.5之后,MySQL默认的存储引擎是InnoDB。 MyISAM使用B-Tree实现主键索引、唯一索引和非主键索引。 InnoDB中非主键索引使用的是B-Tree(B树)数据结构,而主键索引使用的是B+Tree。

B树的出现所要解决的问题是:在进行大量数据的操作中,不可能一下子将数据都读进内存。因此频繁的对磁盘进行读写,I/O读写速度严重的影响了性能,B树正是为了减少对磁盘的读写次数。

以下是一个5阶B树,叶子节点没有画出,叶子节点将指向记录

由于网上对此的解释都比较拗口且术语都用的不一致,对于新手比较难以理解,以下将使用更加通俗的语言解释。

@wutingjia
wutingjia / 批量.md
Last active May 30, 2019 12:23
批量

主要使用spring batch+quartz进行批量的处理与控制

Spring Batch

层次结构


(运行时的元数据储存在jobRepository中)。
JobRepository: 提供之所有持久机制。提供对于JobLauncher, Job, Step的CRUD。@EnableBatchProcessing 将会自动提供JobRepository。
JobLauncher: 是一个简单的接口,其中的run方法接受Job, JobParameters作为参数,用于启动批量。
ItemReader: 提供Step中业务数据的输入。
ItemWriter: 提供Step中业务数据的输出。

@wutingjia
wutingjia / Spring事务处理.md
Last active March 12, 2019 06:23
Spring事务处理

事务处理.png
首先可以自己选择自己的数据源连接池等。
以JDBC和mybatis为例,使用DataSourceTranscationManager,不管哪种Manager都是PlatformTransactionManager的具体实现类。
使用注解方式:

@Bean("myDataSource")
DataSource DataSource(){
  return new DataSource();//类似
}
@wutingjia
wutingjia / mockServer.md
Last active February 22, 2019 11:58
mockServer

对于http协议和tcp协议分别在两个不同的端口进行监听。
在rpc调用的方法中,包装一层发送到mock的地址,其boolean值可以配置在application.yml中方便切换,在代码中使用${}占位符进行注入。

HTTP

//@RestController 层

@PostMapping(path="/mock/**")
	public String mockHttp(@RequestBody String body,@RequestHeader Map<String, String> header) {
		return getRes(body, header, "", "");
	}
@wutingjia
wutingjia / SAXReader.md
Created February 22, 2019 10:35
SAXReader

是一个用来读写xml的api,需要导入dom4j-full.jar。
示例代码:

SAXReader saxReader = new SAXReader(); //简单的创建方式,也可通过工厂获取
FIle file=new File("xx.xml");
Document doc=saxREadser.read(new FileInputStream(xmlFile));//read方法可以接受各种常用的流,比如字节流
List nodes=doc.selectNodes("/data/node1");//可以直接返回指定节点
Element rootElement=doc.getRootElement();//获取报文的根节点
List elements=doc.getRootElement().elements();//获取报文的根节点之下一层的所有节点
Element element=doc.getRootElement().elements().get(0);//获取报文的根节点之下一层的所有节点中的第一个节点。
@wutingjia
wutingjia / Spring切面.md
Last active April 2, 2019 13:47
Spring切面

AOP术语

通知(Advice)
定义了 切面是什么以及何时使用。有五种类型的通知Before、After、After-returning、After-throwing、Around。
连接点(Join point)
定义了 应用 通知 的时机。是在应用执行过程中能够插入切面的一个点。 切点(Pointcut)
定义了 何处。匹配 通知 所要 织入 的一个或多个 链接点。
切面(Aspect)
切面是通知和切点的结合。
引入(Introduction)

@wutingjia
wutingjia / Spring装配Bean.md
Last active February 6, 2019 12:10
Spring装配Bean

自动化装配bean

@Component 类级注解 表明该类是一个组件类,将它识别为一个bean,需要通过开启组建扫描才能发现。
对于@Component注解的bean的名字,默认是驼峰,可以是使用@Component("xxx")指定名称

可以专门创建一个配置类,该类有注解 @Configuration 引导类启动会先去加载配置类;@ComponentScan 开启组件扫描,默认扫描与配置类相同的包,查找带有@Component的类
@ComponentScan("xxx")value属性指定包的名称,多个包可以用@ComponentScan(basepackages={"xxx","xxx"})。但是字符串没有编译器检查,@ComponentScan(basepackages={aaa.class,bbb.class}),aaa与bbb两个类所在的包会作为被扫描的包。

将bean注入 可以在属性或者方法上使用@Autowired,如果是方法自动传入参数

java代码装配bean

@wutingjia
wutingjia / 集中式日志分析方案.md
Last active July 28, 2021 01:38
集中式日志分析方案

使用技术:Filebeat + kafka + logstash + elasticsearch + kibana
(日志采集) (传输) (数据收集整理) (数据存储搜索分析) (数据分析可视化)

Logger

这里使用slf4j+logback的组合,首先需要注意是否与某些依赖继承的log4j冲突,需要把它exculusion,如果存在,slf4j会报找到多个binding的实现,然后会自己选取一种。
slf4J 是 简单日志门面(simple logger facade),并没有具体的日志实现,只提供一组接口,这样用户就无需,因为不同的底层实现而编写不同的代码。
首先需要依赖logback-classic和slf4j-api。如果使用的是log4j还需要slf4j-log4j12 作为连接。
对于logback其配置文件为resource下的logback.xml。
配置例如:

<logger name="ELKLogger" level="DEBUG" additivity="true">
@wutingjia
wutingjia / Spring-Cloud-Config(本地文件系统配置).md
Last active February 28, 2019 01:07
Spring-Cloud-Config(本地文件系统配置)

Spring-Cloud-Config 提供在分布式系统中客户端与服务端的外部配置支持。在Config Server端 你可以有一个集中的地方存放与管理其他所有服务的外部配置。
其依赖为 spring-cloud-starter-config,服务端依赖为 spring-cloud-config-server. 客户端依赖为 spring-cloud-config-client.

1、应用程序配置文件的命名约定{application}-{profile}.yml。
2、config-server本身也是一个微服务,在它的启动类上使用注解@EnableConfigServer。
3、在微服务(配置服务端)的配置文件(bootstrap)中的关键配置:
每次更改完记得重启服务器

spring:  
  profiles:  
@wutingjia
wutingjia / Spring-Cloud-Netflix-Hystrix.md
Last active April 2, 2019 11:29
Spring-Cloud-Netflix-Hystrix

需要导入的依赖

org.springframework.cloud spring-cloud-starter-hystrix

在引导类添加注解 @EnableCircuitBreaker 如果不添加,不会收到警告和错误信息,但是断路器不起作用。

断路器模式

@HystrixCommand 方法级注解。 Spring框架会将 该注解 标记的方法进行包装为命令。将使用新的线程池对其进行调用。往往是对远程调用或者数据库操作的方法进行注解。