自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

maybe的博客

自信,真诚,信任,热情,克制

  • 博客(127)
  • 资源 (5)
  • 收藏
  • 关注

原创 Base64、AES、MD5的区别与应用

字符集是由a-z,A-Z,0-9以及+/一共64个常见字符组成的,2*6=64(其实还有一个=号用于位不足时补位用,所以base64常见都是以=结尾)通常一个字符8bit,则3个字符需要24bit;base64则使用6bit表示一个字符,24bit表示4个字符。那么一串二进制数据或从文本获取字节数据后,无论原始字符串是什么,都可以使用base64将二进制数据用常见的字符组成一段可显示的文本。但由于每个字符bit变少,所以编码后文本会变长,可能会需要更大的带宽。

2023-09-21 17:51:16 468

原创 Spring之ResourceLoader

Spring功能点系列第一篇,恢复学习、恢复学习、恢复学习

2022-06-08 19:21:11 800 1

原创 重新理解spring IOC

一直以来自认为对于spring有一些自己的理解,但最近在写一个开源的缓存框架。开发starter时遇到一些瓶颈,查资料过程中发现一篇不错的文章,觉得讲的挺有道理,这里写点笔记记录一下。依赖注入dependency injection一直认为的spring依赖注入方式有3种,其实官方写的只有两种:DI exists in two major variants:Constructor-based dependency injectionandSetter-based dependency i...

2021-05-22 23:05:10 212 1

原创 真正意义的spring boot starter

在当前spring cloud体系下依赖SDK阶段实现的分布式微服务中,通常会把一些架构级的功能提到一个单独的包来开发。然后打包SDK供其他微服务依赖使用。接触到一些项目和网上一些文章写的starter的autoConfiguration都是使用的@configuration注解进行注入的。如果使用@configuration或者@component组件直接注入,就会导致所有服务强依赖问题。比如SDK中有两个功能:redis分布式锁 druid数据源集成这里不讨论分包的问题哈。假设就放在了一

2021-04-07 15:39:41 256

转载 转载:ELK filebeat原生处理日志时间

本文转载自:【BigManing的博客】学习防丢http://blog.csdn.net/qq_27818541/article/details/108063235前言项目有个需求:filebeat(v7.7)采集日志的时间替换为日志时间。通过调研,网上都是通过logstash来转换的,大概如下步骤(原理):filter{ grok{ // 1 取出时间值 给 一个新字段 patterns_dir => "./patterns" match =.

2021-03-31 16:54:02 2057

原创 mybatis plus 多种批处理方式对比测试

最近有个需求,一张主表4张子表,主表添加数据后,4张子表分表要批量新增多条记录。比如:Person insert一条记录;childOne,childTwo,childThree,childFour4张表分别添加10条记录。由此引发的批量操作的几种方式的性能测试。搭建一个测试spring boot2.4.4项目mybatis依赖<dependency> <groupId>com.baomidou</groupId>

2021-03-31 00:14:38 2015 1

原创 ignite分布式内存数据库在springboot中应用

ignite是一个分布式内存数据库,每一个ingite服务即一个节点。在ignite中不区分master、slave,节点间互相平等,支持横向扩展,只要有足够多的节点,支持PB级数据存储。数据支持内存、内存+原生持久化、内存+第三方DB持久化多种不同策略。作为缓存可用于关系型数据库的缓存层。缓存提供...

2021-03-26 16:28:39 2545 4

原创 Dubbo自定义扩展filter

DUBBO版本:2.7.0Dubbo的扩展点是带@SPI注解的,比如:@SPIpublic interface Filter { /** * do invoke filter. * <p> * <code> * // before filter * Result result = invoker.invoke(invocation); * // after filter * return .

2021-03-09 09:36:16 792

原创 spring cloud + feign 和 dubbo 两种框架下的无业务代码侵入的日志trace方案

新公司架构对外提供http接口服务,内部微服务间采用Dubbo进行通信。因为服务拆的非常散,HTTP到RPC服务之间的日志完全独立不利于排查问题。所以开发了一个小功能,trace日志追踪。正好之前也开发过spring cloud系的相同功能,来分别记录一下。通用内容:日志框架logback日志输出格式中加入traceId的输出 <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG.

2021-03-09 09:05:20 923 3

原创 巨大的JVM知识点思维导图

之前总结过的一份JVM思维导图,分享一下。撑撑博客数量,哈哈。。图太大了,无法上传,传一份文字版吧。需要图的可以移步类加载子系统 加载 字节码文件通过加载器CLassLoader加载到内存元空间 ClassLoader BootstrapClassLoader 启动类加载器,顶级类加载器,负责加载JDK核心包rt.jar等,由C编写,所以在java中没有类与之对应,无法获取。...

2020-12-22 20:47:55 318 3

原创 Zookeeper Version3.6.2 MAC部署

记录一下本机mac安装zk的过程下载https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz解压目录:/Users/wangmeng/环境变量vim .bash_profileexport ZOOKEEPER_HOME=/Users/wangmeng/apache-zookeeper-3.6.2-binso...

2020-12-22 20:12:23 285 1

原创 数据结构 之 链表

概念在物理上不连续的、通过节点间的引用形成的数据结构。所以在内存里链表是零散分配的。并不是连续内存空间。链表又细分为单向链表和双向链表,主要区别在于Node节点,单向链表只持有后驱节点的引用;而双向链表持有前驱节点和后驱节点两个引用。链表操作的时间复杂度增由于链表是通过Node节点的前驱和后驱节点引用实现的,当添加一个新的元素,无论添加到第几位。都只需要在被添加位的前驱节点的next指针指向被添加Node,将原来的Node作为被添加Node的next节点即可。无需遍历整个..

2020-11-13 16:20:15 149 1

原创 数据结构 之 数组

概念有限个相同类型变量的有序集合使用一块连续的内存区域,进行顺序存储访问时通过下标进行访问数组的下标是什么即:偏移量offset如果数组的首元素为a,a[0]即偏移量为0的位置。为什么下标从0开始下标为偏移量,所以如果从1开始第一个元素的偏移量为0.依此类推每次都要进行一次-1的减法操作。从0开始减少一次减法操作,性能达到极致。数组操作的时间复杂度增尾部添加,那么只需要在最后一位添加上新的元素即可,所以时间复杂度为O(1)。 头部添加或中间添加...

2020-11-13 15:57:58 135

原创 RabbitMQ使用及延迟队列的实现

很久没写新的博客了,今天来回溯一下项目里关于RabbitMQ相关的内容吧。选用RabbitMQ的原因在我们的微服务项目里,为了更好的分析系统功能点性能、功能使用频率、加速问题追踪排查。我们设计在gateway收集请求、返回信息,将数据发送到请求分析系统。系统设计时考虑如下几个问题:不希望gateway的性能被请求分析系统(analysis)的消费能力所限制。所以需要gateway和请求分析系统之间解耦。 并且由于gateway的访问量巨大,如果直接发送到请求分析系统,analysis.

2020-11-13 15:41:32 517

原创 JAVA基础 之 volatile

Volatile-线程共享变量Volatile在汇编代码中添加lock前缀,lock会做两件事:将当前CPU的cache line中的数据写会系统内存。 写回内存的操作会使其他CPU里缓存了该内存地址的数据无效。进一步剖析:CPU为了提高处理速度先将数据载入L1 l2 l3缓存中再进行处理对声明了volatile的变 量进行写操作,JVM就会像CPU发送一条Lock前缀的指令,该指令会将变量的当前cache line数据写回系统内存。这时其他CPU中加...

2020-09-08 09:19:36 117

原创 mysql 事务一直running问题排查

遇到一个线上问题,应用执行sql报错,排查mysql:select * from information_schema.innodb_trx;select * from information_schema.INNODB_LOCKS;select * from information_schema.INNODB_LOCK_WAITS;select * from processlist;发现在trx表中存在一个事务trx_strated已经很长时间了,占用了很多表。怀疑是事务开启未commit

2020-08-05 17:01:47 3176 1

原创 JVM--GC及垃圾回收器

-XX:PrintGC。 打印简单GC日志 大对象直接进入老年代 -XX:MaxTenuringThreshold 设置晋升老年代的年龄。默认15,超过年龄的进入老年代 -XX:PretenureSizeThreshold 设置直接进入老年代的内存大小阀值。(只对DefNew和PreNew有效) -XX:+UseTLAB/-XX:-UseTLAB. +:使用TLAB线程内存区。加速对象分配。堆上分配内存会遇到并发分配问题。影响效率;使用TLAB使线程独立使用内存区域,加快内存分配。目前测试是默认开.

2020-08-03 16:47:03 152 2

原创 JVM--偏向锁

定义在对象的对象头信息里。所以它也最轻。当线程获取对象的偏向锁时,对象头的Mark word中会记录当前偏向的线程,所以mark word里存在线程信息,偏向方式是没有竞争时取消当前线程的同步操作。但又不能因为偏向失去锁的意义,所以竞争时,重新偏向其他线程。所以偏向锁在竞争少时能提高性能,竞争多时偏向锁多线程间切换,起不到偏向的作用。书本解释偏向锁mark word格式23位偏向锁线程|2位偏向锁时间戳|4位对象年龄|1(偏向锁固定位)|01(表示可偏向/未锁定)核心思...

2020-08-03 16:46:55 561

原创 JVM--轻量级锁

当出现频繁竞争时,对象的偏向锁失效,JVM会尝试获取对象的轻量级锁。轻量级锁实现是一个biasedObjectLocking对象,对象内部有一个biasedlock对象和被锁的对象内存地址指针。而biaedlock内部又是存在一个字段,用来备份被锁的对象的mark word。这时候被锁对象的对象头mark word 格式:ptr ...00 locked最后两位00表示对象持有轻量级锁...

2020-08-03 16:46:46 292

原创 JVM--类加载

步骤加载-连接-初始化其中连接又分为验证-准备-解析三步加载类接收:通过全限定名获取二进制数据流,即通过文件系统读入一个class后缀的文件或解析jar、zip包归档文件得到class文件。还有一些奇葩方法例如将二进制数据放入db通过db读取,或者通过http接收。 解析:解析类的二进制数据流为方法区内的数据结构 创建:创建Class类实例类加载器ClassLoader分类BootStrap ClassLoader启动类加载器,由C实现并且在java中没有对象...

2020-08-03 16:46:39 80

原创 JVM--hotspot虚拟机

内存布局分3个部分:1.对象头第一部分是对象自身运行数据Mark Word(hashcode、GC分代年龄、锁状态)。这是一个非固定数据结构,以便在极小的空间储存尽量多的信息。 另一部分是类型指针Class MetaData Adress,指向类的元数据,确定类型。 如果是数组还有一个array length记录数组长度。2.实例数据储存真正信息,即代码中定义的各种类型的字段,包括继承来的父类属性。3.对齐填充hotspot要求对象的起始地址必须是8字节...

2020-08-03 16:46:27 157

原创 Dockerfile

FROM <base Image> RUN <命令行命令> shell模式; RUN [‘可执行文件’] exec模式 CMD 同RUN,两者执行时机不同。RUN是在docker build时执行;CMD是在docker run时执行 多个CMD指令只有最后一个生效 CMD中指令会被docker run 命令行参数重指定要运行的程序覆盖 ENTRYPOINT 同CMD,但是不会被docker run 命令行参数执行应用程序所覆盖 多个ENTRYPOINT也仅最后一个...

2020-08-03 16:46:14 75

原创 Docker 指令

docker,应用容器引擎,可打包应用、依赖、环境等到一个轻量级可移植的容器中进行发布。 docker运行dockerFile构建的docker镜像,然后在docker里以容器的形式运行。所以当没有run了一个镜像,那么就会在docker里创建一个容器。我们可以通过start或者stop启动或停止容器的运行。当不需要了后,可以使用ps -a 查看所有容器,使用docker rm删除容器;如果连镜像都不需要了,可以使用docker rmi 删除镜像。 docker pull <imageName&.

2020-08-02 18:12:26 99 1

原创 JAVA 反射原理

jvm在启动时,会加载classPtah下的所有class文件为二进制流,读取到jvm中每个class文件在通过加载 连接 初始化后,会在jvm的元数据区存入对应的类的元数据。java反射利用的正是这一点,通过获取当前执行线程的lcassloader一般也就是app classloader然后通过这个类加载器获取到传入了全限定名的类的元数据。包括属性方法等信息,在运行期间可以实现动态调用方法。...

2020-08-02 18:12:19 117

原创 JAVA 注解原理

注解是一种特殊的接口元注解@Target 注解的作用目标。如字段、类、方法、注解等。ElementType.TYPE:允许被修饰的注解作用在类、接口和枚举上 ElementType.FIELD:允许作用在属性字段上 ElementType.METHOD:允许作用在方法上 ElementType.PARAMETER:允许作用在方法参数上 ElementType.CONSTRUCTOR:允许作用在构造器上 ElementType.LOCAL_VARIABLE:允许作用在本地局部..

2020-08-02 18:12:12 197

原创 Mysql—请求时序

请求−−>缓存−−>解析器−−>预处理器−−>查询优化器−−>将解析树生成执行计划−−>执行计划调用存储引擎API执行 −−>索引或查询数据表−−>响应数据缓存一个对英文大小写敏感的hash表。对sql做hash运算,精确匹配。 缓存命中,则不执行后续解析、预处理、优化。但在返回数据前会校验权限。sql解析器将sql解析按关键字解析成解析树,然后校验:是否存在错误的关键字 关键字顺序是否正确 引号是否匹配...

2020-08-02 18:12:01 198

原创 Mysql—线程状态

sleep,等待客户端发送新请求 query,正在执行查询或者正在发送结果到客户端 locked ,正在等待表锁,mysql服务器级别锁。Innodb的行锁属于存储引擎级别锁,不在此范围内 sorting result,正在对结果排序 还有其他状态不常见...

2020-08-02 18:11:54 82

原创 Mysql--索引基础

索引三星系统如果索引能够将数据相关的行放到一起,则获得一星。即索引将数据排序、区域集中、可以减少IO复杂度。 索引的数据顺序和查询的排列顺序一致。根据最左前缀原则,如果索引建立1,2,3;查询使用3,2,1;则不会使用到索引。所以索引建立要和查询排序一致。 索引中的列包含了查询中全部需要的列(即select 后面要查询的列),如Innodb根据一个普通索引查询主键值(select id from table where name = ‘wm’)。普通索引中保存了聚簇索引的值。而只查询聚簇索引值.

2020-08-02 18:11:48 80

原创 Mysql—前缀/后缀索引

前缀索引针对blob、text、很长的varchar字段,mysql不支持索引他们的全部长度。需建立前缀索引 前缀索引应该足够长,使前缀索引的选择性趋紧于索引整个列的选择性。 前缀索引又不能太长,降低索引的大小,减少空间占用。 Alter table tableName add key/index (column(X)). 缺点:无法应用于order by 和 group by,也无法做覆盖扫描。计算合适前缀长度方法:先计算比对整列统计数和前缀列统计数select coun..

2020-08-02 18:11:24 2435

原创 Mysql—库、表创建

创建数据库即在数据目录下创建一个子目录创建表即在子目录中创建一个.frm文件保存该表定义查看表定义show table status like ‘order’ 查询information_schema表优化表索引optimize table清除可变列varchar这类的列因为修改而占用的多余空间清除因为删除数据导致的页的碎片化...

2020-08-02 18:11:12 65

原创 DB设计—范式化和反范式化

范式化--schema设计趋向于符合三范式优点更少或者没有数据冗余 因为第1点,所以数据更新只更新一个字端。意味着更快的更新速度。 表体积更小 查询多数无需distinct去重缺点表数量更多 因为第1点,需要建立更多的索引 多数查询都需要多表关联!!! 因为第3点,关联查询极有可能导致索引无效反范式化优点数据在一个表,避免关联查询的性能消耗 减少多表建立索引开销 最差情况:查询时全表扫描,也大概率是顺序IO;比关联查询的随机IO快...

2020-08-02 18:11:04 179

原创 Mysql—聚簇索引

在B-tree基础上改造为B+tree 节点页保存叶子页引用 叶子页上保存整行数据 叶子页上也有节点页上的索引及索引的行数据 叶子页之间互有引用 Innodb默认主键位聚簇索引;如果没有主键、有唯一性索引,则使用唯一索引做聚簇索引;如果也没有唯一性索引则默认建立一个隐藏主键做聚簇索引 MyISAM主键则不是聚簇索引,只是普通唯一性索引。 如果有需要聚簇在一起的数据,使用该字段做聚簇索引;否则尽可能使用无意义自增列做聚簇索引。优点物理上连续 顺序IO 可视为“数据表”,索引..

2020-08-02 18:10:43 205

原创 Mysql—单列索引

即建立索引时使用一个列 字段不能是表达式一部分 字段不能是函数的参数

2020-08-01 20:44:10 113

原创 Mysql—hash索引

将被索引的列进行hash计算,形成一个散列表,用于精确查找,不支持范围、排序、group by查找。自定义hash索引即自己实现hash计算和存储。在表中添加一个列,用来保存要被索引的字段的hash值。添加时对字段进行hash计算保存。当今高并发的场景下,不推荐mysql中进行条件判断、函数运算。所以不推荐使用,...

2020-08-01 20:43:34 195

原创 Mysql—存储引擎

Innodb存储引擎支持事务,所以崩溃后可以通过事务日志恢复数据。数据存储在Innodb黑盒的表空间tablespace数据和索引存放在单独的文件中实现了标准的四个隔离级别默认RR,通过MVCC+间隙锁防止幻读间隙锁MVCC会锁定涉及到的数据行间隙锁会对索引中,间隙进行锁定,防止幻影行的插入回表Innodb主键为聚集索引,聚集索引的节点上存放了整行数据。其他索引为非聚集索引,非聚集索引叶子结点只存放聚集索引。回表即:当通过非聚集索...

2020-08-01 20:42:59 69

原创 Mysq—整数类型

tinyint 8bit -128-127/0-255 smallint 16bit mediumint 24bit int 32bit 21亿左右/42亿左右 bigint 64bit 9223...

2020-08-01 20:42:17 113

原创 Mysql—事务日志提交事务

存储引擎修改数据时只修改内存拷贝,再把该修改行为记录到磁盘上的事务日志中。而不是每次都将修改的数据本身持久化到磁盘。事务日志记录属于追加行为,顺序IO,而直接持久化数据本身需要频繁挪动硬盘磁头,属于随机IO。顺序IO比随机IO快很多。事务日志持久化后,内存中数据可以慢慢的刷回磁盘中。称之为预写式日志。如果事务只持久化到了事务日志并未刷回磁盘服务器崩溃,当数据库重启时会自动刷回这部分数据。...

2020-08-01 20:41:31 268

原创 Mysql--Innodb的MVCC

MVCC—多版本并发控制原理:保存数据在某个时间点的快照。即不同时间点开启的多个事务,对于同一张表的同一个数据看得到有可能都不一样。Innodb的MVCC实现每行记录后面保存两个隐藏列,一个保存行的创建时间,一个保存行过期时间,虽然说是时间,但其实他们存储的是系统版本号。个人猜测是时间戳的毫秒数。 每当开启一个新的事务系统版本号会进行递增。也就是时间戳递增。当前系统版本号也会作为当前事务版本号。 SELECT会附加查询条件:a,查询行创建时间字段小于当前事务版本号的数据。保...

2020-08-01 20:40:50 143

原创 Mysql—锁

锁分类读锁read lock=共享锁 shared lock多个客户端可以在同一时间读取同一资源写锁white lock=排他锁 exclusive lock当某个线程获取到写锁时将阻塞其他线程获取读锁和写锁,直到放开。 写锁优先级高, 写锁插队,写锁请求会插队到读锁队列前面,而读锁请求不能插队到写锁前面。锁粒度表锁阻塞对表的所有增删改操作 强制表锁,例如Alter等ddl行锁最大程度支持并发 只在存储引擎层面实现...

2020-08-01 20:40:14 71

原创 Mysql—数据类型基础

数据允许范围内使用更小的数据类型占用更少的磁盘、内存、CPU缓存;消耗的Cpu时钟周期更少。尽可能选择简单数据类型简单数据类型占用更少CPU时钟周期。字符串的检验规则和排序规则更复杂。例如:状态字段使用整型代替状态字符串 使用Mysql内置的时间代替字符串保存时间。 用整型存储IP地址。避免字段可为NULLNull值会占用额外的存储空间。innodb会使用单独的bit来存储Null值。有NULL值的列建立索引,会导致固定大小的索引列变...

2020-08-01 20:39:01 96

mybatis plus 5种批量操作性能测试

测试在单元测试中

2021-03-31

springboot 2.4.4 集成ignite

ignite集成及使用ignite实现分布式缓存、分布式锁、消息订阅发布、关系型数据库缓冲层等demo

2021-03-26

JVM知识点总结的思维导图

JVM总结

2020-12-22

spring-cloud-consul.zip

spring cloud consul注册中心,微服务间openfeign调用 ,附带windows 64位版consul 以及启动文件

2019-06-04

springboot+mybatis+mysql

基于JDK1.8+spring boot+mybatis+mysql项目。同时配置了日志,fastjson替换jackson,使用了mybatis分页框架,使框架分页变的非常简单。

2018-09-27

空空如也

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

TA关注的人

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