1. 简介Swagger是基于 OpenAPI 规范(OpenAPI Specification,OAS)构建的开源接口文档自动生成工具,可以让开发人员快速设计、构建、记录以及使用 Rest API。
目前由2.0版本和3.0版本,2.0版本在2017年停止维护。
Swagger 主要包含了以下三个部分:
Swagger Editor:基于浏览器的编辑器,编写OpenAPI 规范。
Swagger UI:将编写的 OpenAPI 规范呈现为交互式的 API 文档。
Swagger Codegen:它可以通过为 OpenAPI规范定义的任何 API 生成服务器存根和客户端 SDK 来简化构建过程。
2. SpringFoxhttps://github.com/springfox/springfox
是 spring 社区维护的一个非官方项目,是一个开源的API Doc的框架,Marty Pitt编写了一个基于Spring的组件swagger-springmvc,用于将swagger集成到springmvc中来, 它的前身是swagger-springmvc,可以将我们的Control ...
1. Java实现多线程的方式1.1 继承Thread继承Thread,重写run方法,创建实例,执行start方法
12345678910111213public class ThreadTest extends Thread { @Override public void run() { System.out.println(Thread.currentThread().getName() + "正在运行"); } public static void main(String[] args) { ThreadTest threadTest = new ThreadTest(); threadTest.start(); System.out.println("=============="); }}
1.2 实现Runnable自定义类实现Runnable,实现run方法,创建Thread类,使用R ...
JDK8下载官方下载地址:https://www.oracle.com/java/technologies/downloads/#java8
Linux下载jdk-8uxxx-linux-x64.tar.gz
上传解压
使用Xshell或其它工具连接linux服务器
在usr/local目录下新建java文件夹(mkdir java),使用rz将jdk的压缩包上传至该文件夹下
如果没有rz命令,使用yum -y install lrzsz进行安装
tar -zxvf jdk-8uxxx-linux-x64.tar.gz
配置环境变量
vim /etc/profile,如果没有vim命令,先安装:yum -y install vim*
在最后加上如下配置,版本号根据具体情况修改
1234JAVA_HOME=/usr/local/java/jdk1.8.0_291CLASSPATH=$JAVA_HOME/lib/PATH=$PATH:$JAVA_HOME/binexport PATH JAVA_HOME CLASSPATH
source ...
数据结构,一种或多种特定关系数据元素集合
逻辑结构
集合结构:元素间没有联系,但存在于同一个集合中
线性结构:元素间存在一对一的关系
树形结构:元素间存在一对多的关系
图形结构:元素间存在多对多的关系
物理结构
顺序存储结构:元素的存储地址是连续的
链式存储结构:元素存储的地址不连续,通过引用指针来找到关联的元素
算法,计算机用来解决问题的方法
时间复杂度对算法消耗时间的分析,称为时间复杂度分析
时间频度T(n)
一个算法所消耗的时间和代码执行次数成正比
执行次数越多消耗的时间越多
一个算法的语句执行的次数被称为时间频度T(n)
例如:计算1-10000的和
方式一
1234int sum=0;for(int i=1;i<=10000;i++){ sum+=i;}
使用for循环计算,计算时间频度是T(n) = n+1,最后一次循环也要判断所以+1,常数项可以省略,所以T(n) = n;
方式二
1int sum=(1+10000)*10000/2;
使用公式计算,时间频度是T(n) = 1;
算法 ...
mongoDB 执行事务,需要mongodb的集群模式,需要搭建一个mongo集群
1. docker搭建伪集群如果需要支持mongo的事务,需要集群模式,这里搭建一个简单的伪集群做事务测试
编写配置文件
vim /dockerData/mongo/config/mongod.conf
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647# mongod.conf# for documentation of all options, see:# http://docs.mongodb.org/manual/reference/configuration-options/# Where and how to store data.storage: dbPath: /data/db journal: enabled: true# engine:# mmapv1:# wiredTiger:# where to write logging data.sy ...
1. 简介mongoDB是非关系型数据库,存储类似json格式数据
2. docker安装2.1 docker搭建单节点123456789docker run -d \ --name mongo \ -p 27017:27017 \ -v /dockerdata/mongo/data:/data/db \ -v /dockerdata/mongo/backup:/data/backup \ -v /dockerdata/mongo/conf:/data/configdb \ -e MONGO_INITDB_ROOT_USERNAME=root \ -e MONGO_INITDB_ROOT_PASSWORD=aacopy.cn \ mongo --auth
2.2 docker搭建伪集群如果需要支持mongo的事务,需要集群模式,这里搭建一个简单的伪集群做事务测试
编写配置文件
vim /dockerData/mongo/config/mongod.conf
123456789101112131415161718192021222324252627282930313 ...
1. 设计思路
获取需要更新的记录
获取当前记录的版本号
更新时带上历史版本号作为条件,当原始版本没变时,才能更新成功
更新时,同时对历史版本号+1
如果版本已经变过了,就不会更新成功
2. 代码示例2.1 数据库新建一个测试表1234567CREATE TABLE `goods` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL, `num` bigint(20) DEFAULT NULL, `version` int(11) DEFAULT '1', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
2.2 创建一个springboot项目2.3 导入maven依赖12345678910111213141516171819202122232425 ...
1. OLTP和OLAP1.1 OLTP
联机事务处理系统,全称:Online Transaction Processing
是对数据库的增删改查操作
对事物支持,要求响应时间快,
主要面向业务开发,数据量相对较少,GB级别
Mysql,Oracle
1.2 OLAP
联机分析处理系统,全称:Online Analytical Processing
支持复杂的分析查询,做出响应的决策作用
可操作的查询数据量非常大,可以到TB级别
主要面向风控,BI,数字大屏等方面
Hive,ClickHouse
2. 列式存储2.1 行存储 传统的OLTP数据库基本都是行存储,一行数据连续存储的磁盘中,适合随机的增删改查操作,可以通过添加索引加快查询效率。如果需要查询全部记录的某个字段,需要读取全部行记录,效率低下
2.2 列式存储 以列为单位存储数据,比如存储一批数据,先批量存储第一列字段,再存储第二列…,查询时,只会扫描需要涉及到的列,不会全表扫描,可以大大减少磁盘IO,列式存储在聚合统计方面性能远远优于行存储,不过更新成本会比行存储更高,一般适合海量数据的读多写少的场景,适用于OLA ...
当现有skywalking无法满足现有统计需求时,需要自定义统计维度,或者对自研中间件进行监控,可以通过添加skywalking的插件来实现无侵入的添加功能
执行步骤:
创建一个自定义插件项目
pom文件继承apm-sdk-plugin
继承ClassInstanceMethodsEnhancePluginDefine,用于设置需要拦截的类
实现InstanceMethodsAroundInterceptor,用于对拦截的类进行额外功能扩展
添加skywalking-plugin.def,指定插件拦截类路径,skywalking启动时会加载该类
maven打包,并把打好的包放在agent\plugins目录下面
重启服务
(1)maven依赖
12345678910111213141516171819202122<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" ...
Skywalking实现如果需要我们对每个方法的执行添加打印执行时间,一般可以通过AOP的方式来实现,对每个方法做环绕通知的切面,这种方式有一个问题就是,如果后续还有一些其他需求需要在方法执行前做统计,比如打印HTTPRequest中的请求地址,请求参数等信息,就需要重新编写aop,编译部署上线。
skywalking使用0侵入的方式来扩展Java程序的功能,具体实现就是使用了Java插桩技术。
字节码插桩字节码插桩实际就是在代码运行期间对字节码进行修改,比如动态代理,或者java Agent
skywalking就是通过javaAgent实现的字节码增强,启动方式:
启动jar包时,需要添加额外的运行参数
1-javaagent:D:\tool\apache-skywalking-apm-bin-es7\agent\skywalking-agent.jar -Dskywalking.agent.service_name=skywalking-learn -Dskywalking.collector.backend_service=192.168.80.128:11800
skywa ...