自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 收藏
  • 关注

原创 一文搞懂分库分表算法,通俗易懂(基因法、一致性 hash、时间维度)

原因也很好理解,拿我改造过后的雪花算法来说,变量只有累加位,累加 bit 位只留 5 位,也就是最大累加 2 的 5 次方(32),累加到 4(00100)时一切正常 00100 正常参与或运算,累加到 36(100100)时,二进制有 6 位,和我们规定的 5 位超了一位,有效参与到计算的实际上是 00100,这时候变量累加位也一致了,恰好此时第 100100 的第一位 1 参与或运算对结果没影响,此时的订单号是不是就重复了!其他年的数据同理比对迁移,这个迁移好办对整个库迁移,直接改配置文件就行。

2024-04-09 17:35:57 1193

原创 mysql水平分表方案 mysql水平分表查询方法

原文地址:mysql水平分表方案 mysql水平分表查询方法。

2024-04-09 13:50:53 1365

原创 MYSQL索引的种类

如果使用联合索引,那么where条件也要尽量根据联合索引的顺序来,如果不按照顺序来,索引也同样会用到,但是在执行前,SQL优化器也会将条件调整为联合索引的顺序,既然可以直接避免这种情况,就没必要再让SQL优化器去处理,毕竟处理也是有开销的。(索引的存储和数据的存储是分开的,也就是说找到了索引,但是没有找到数据,需要根据索引上的值在回表查询,所以非聚簇索引也叫辅助索引。创建主键的时候会自动给主键添加索引,且该索引为唯一索引,即主键一定是唯一索引,但是一张表里可以有多个唯一索引,所以唯一索引不一定是主键。

2024-04-08 14:18:09 500

原创 MySQL/Oracle数据库优化总结(非常全面)

MySQL数据库优化的八种方式(经典必看)引言:关于数据库优化,网上有不少资料和方法,但是不少质量参差不齐,有些总结的不够到位,内容冗杂偶尔发现了这篇文章,总结得很经典,文章流量也很大,所以拿到自己的总结文集中,积累优质文章,提升个人能力,希望对大家今后开发中也有帮助1、选取最适用的字段属性MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小。

2024-04-03 15:08:08 880

原创 MySQL数据库的四种隔离级别

由于另一个事务的修改,那么第一个事务两次读到的数据可能不一样,这样就发生了在一个事务内两次读到的数据是不一样的,因此称为不可重复读,即原始读取不可重复。又称无效数据的读出,是指在数据库访问中,事务T1将某一值修改但是还未提交,然后事务T2读取该值,此后T1因为某种原因撤销对该值的修改并提交,这就导致了T2所读取到的数据是无效的,值得注意的是,脏读一般是针对于update操作的。弱一致性:提交的更新操作不一定立即会被读操作读到,这种情况会存在一个不一致窗口,指的是读操作可以读到最新值的一段时间。

2024-04-02 10:41:30 237

原创 JAVA8 常用的stream方法

16.A List B List 根据两对象实体的id,对A进行去重。13.返回 对象集合以类属性一降序 属性二升序 注意两种写法。14.返回 对象集合以类属性一降序 属性二降序 注意两种写法。15.返回 对象集合以类属性一升序 属性二降序 注意两种写法。11返回 对象集合以类属性一降序排序 注意两种写法。12.返回 对象集合以类属性一升序 属性二升序。9.取出一组对象的某个属性组成一个新集合。10.返回 对象集合以类属性一升序排序。6.根据某个属性分组,汇总某个属性。7.根据某个属性添加条件过滤数据,

2024-02-22 11:00:40 347

原创 idea的高效使用及快捷键

首先是使用ctrl+w选中rabbitTemplate这个文本,然后依次使用5次alt+j快捷键,逐个选中,这样五个文本就都被选中并且高亮起来了,这个时候就可以直接批量修改了。先将焦点定位到双引号里面,使用 alt+enter 快捷键弹出 Inject Language 视图,并选中 Inject language or reference。可以先使用alt+F1,弹出Select in视图,然后选择Project View中的Project,回车,就可以立刻定位到类的位置了。

2024-02-22 10:41:19 659

原创 接口返回状态码

303 请参阅其它 — 可在另一 URI 下找到对请求的响应,且应使用 GET 方法检索此响应。415 介质类型不受支持 — 服务器拒绝服务请求,因为不支持请求实体的格式。305 使用代理 — 必须通过位置字段中提供的代理来访问请求的资源。无响应 — 已接收请求,但不存在要回送的信息。301 已移动 — 请求的数据具有新的位置且更改是永久的。400 错误请求 — 请求中有语法问题,或不能满足请求。302 已找到 — 请求的数据临时具有不同 URI。501 未执行 — 服务器不支持请求的工具。

2024-02-22 10:38:48 360

原创 Hashmap完整解析

首先来说,哈希碰撞的概率还是很小的,大部分情况下都是一个桶装一个 Node,即便发生碰撞,都碰撞到一个桶的概率那就更是少之又少了,所以链表长度很少有机会能到 8 ,如果链表长度到 8 了,那说明当前 HashMap中的元素数量已经非常大了,那这时候用红黑树来提高性能是可取的。每次扩容为之前的两倍。ableSizeFor这个方法就有意思了,先把初始参数减 1,然后连着做或等于和无符号右移操作,最后算出一个接近的 2 的幂次方,下图演示了初始参数为 18 时的一系列操作,最后得出的初始大小为 32。

2024-02-22 10:38:07 279

原创 bean的生命周期完整解析

如果bean实现了DisposableBean接口,Spring将调用它的destory()接口方法,同样,如果bean使用了destory-method 声明销毁方法,该方法也会被调用。在传统的Java应用中,bean的生命周期很简单,使用Java关键字 new 进行Bean 的实例化,然后该Bean 就能够使用了。相比之下,Spring管理Bean的生命周期就复杂多了,正确理解Bean 的生命周期非常重要,因为Spring对Bean的管理可扩展性非常强,下面展示了一个Bean的构造过程。

2024-02-22 10:37:17 373

原创 Redis的持久化机制

AOF 文件没被 rewrite 之前(文件过大时会对命令进行合并重写),可以删除其中的某些命令(比如误操作的 flushall))是指用数据集快照的方式半持久化模式)记录 redis 数据库的所有键值对,在某个时间点将数据写入一个临时文件,持久化结束后,用这个临时文件替换上次持久化的文件,达到数据恢复。(1)数据安全,aof 持久化可以配置 appendfsync 属性,有 always,每进行一次命令操作就记录到 aof 文件中一次。(1)只有一个文件 dump.rdb,方便持久化。

2024-02-22 10:32:31 266

原创 IOC和AOP

比如业务A和业务B现在需要一个相同的操作,传统方法我们可能需要在A、B中都加入相关操作代码,而应用AOP就可以只写一遍代码,A、B共用这段代码。在实际开发中,比如商品查询、促销查询等业务,都需要记录日志、异常处理等操作,AOP把所有共用代码都剥离出来,单独放置到某个类中进行集中管理,在具体运行时,由容器进行动态织入这些公共代码。Spring依赖注入的方式主要有四个,基于注解注入方式、set注入方式、构造器注入方式、静态工厂注入方式。IoC容器:具有依赖注入功能的容器,可以创建对象的容器。

2024-02-22 10:32:00 309

原创 Redis的数据类型及应用场景

Key仍然是用户ID, value是一个Map,这个Map的key是成员的属性名,value是属性值,这样对数据的修改和存取都可以直接通过其内部Map的Key(Redis里称内部Map的key为field), 也就是通过 key(用户ID) + field(属性标签) 就可以操作对应属性数据了,既不需要重复存储数据,也不会带来序列化和并发修改控制的问题,很好的解决了问题。因为list是有序的,适合根据写入的时间来排序,如:最新的***,消息队列等。2,2.1 Redis的基本数据类型:List的应用场景。

2024-02-22 10:30:55 532

原创 循环依赖问题---三级缓存

此时返回A中,A此时能拿到B的对象顺利完成自己的初始化阶段2、3,最终A也完成了初始化,进去了一级缓存singletonObjects中,而且更加幸运的是,由于B拿到了A的对象引用(lambda),所以B现在hold住的A对象完成了初始化。A首先完成了初始化的第一步,并且将自己提前曝光到singletonFactories(三级缓存)中,此时进行初始化的第二步,发现自己依赖对象B,此时就尝试去get(B),发现B还没有被create,所以走create流程。(2)同一个map结构,能否包含同名的两个对象?

2024-02-22 10:28:41 262

原创 RocketMQ

2、重试时间间隔:Product是立刻重试,而Consumer是有一定时间间隔的。若想保证 Broker 端不丢消息,保证消息的可靠性,我们需要将消息保存机制修改为同步刷盘方式,即消息存储磁盘成功,才会返回响应。为了进一步提高消息的可靠性,我们可以采用同步的复制方式,master节点将会同步等待 slave 节点复制完成,才会返回确认响应。消息重试分为两种:Producer发送消息的重试和 Consumer消息消费的重试。消息系统,对于未确认的消息,采用按规则重新投递的方式进行处理。

2024-02-22 10:27:25 367

原创 Mysql数据库优化

主要是为了保证数据的完整性,举个例子,一个用户在操作一张表,其他用户也想操作这张表,那么就要等第一个用户操作完,其他用户才能操作,表锁和行锁就是这个作用。11.在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。3,应尽量避免在 where 子句中使用!=或<>操作符, MySQL只有对以下操作符才使用索引:<,<=,=,>,>=,BETWEEN,IN,以及某些时候的LIKE。

2024-02-21 23:23:54 538

原创 数据库相关MYSQL

对于内存4G左右,可设为256M或384M,通过查询show status like ‘key_read%’,保证key_reads / key_read_requests在0.1%以下最好。原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。注意索引失效情况:模糊查询like前缀没有%,最左原则,当or左右查询字段只有一个是索引,在索引字段上使用运算not,<>,!持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

2024-02-21 23:23:23 360

原创 Mysql存储引擎

如果只有INSERT和SELECT操作,可以选择Archive,Archive支持高并发的插入操作,但是本身不是事务安全的。如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存在内存中的Memory引擎,MySQL中使用该引擎作为临时表,存放查询的中间结果。InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键,上图也看到了,InnoDB是默认的MySQL引擎。MEMORY存储引擎将表中的数据存储到内存中,未查询和引用其他表数据提供快速访问。

2024-02-21 23:22:48 114

原创 Volatile关键字

第二点,不保证原子性,咱们n++的底层操作不是原子性的,会有三个过程,读取,修改,写入。首先第一点,保证可见性,也就是说,加了volatile的变量,咱们线程A对变量进行更新后,会立即将最新值刷入主存,那么线程B每次使用变量之前,都从主存刷新,本质上是通过内存屏障来实现。它确保指令重排序时,不会把后面的指令排到内存屏障之前,同样也不会把前面的指令排到内存屏障之后,也就是说,执行到内存屏障这句指令时,前面的操作都已经完成。典型的使用场景DCL;volatile是Jvm提供的轻量级的同步机制,有以下三大特点。

2024-02-21 23:21:50 141

原创 线程池的作用

DiscardOldestPolist:不抛异常,尝试和最先开始的线程争抢资源,失败则丢失。newFixedThreadPool(int nThreads),创建固定大小的线程池。threadFactory:线程工厂(默认为defaultThreadFactory)newSingleThreadExecutor(),创建单个线程的线程池。newCacheThreadPool,创建大小可变的线程池。IO密集型:根据程序中大型Io耗时线程,保持大于等于。线程复用,控制最大的并发数,方便管理线程。

2024-02-21 23:20:45 193

原创 IOC与AOP的底层实现

AOP称之为面向切面编程,是IOC的扩展实现,他可以在不改变咱们原代码结构的基础上进行横向的功能扩展,像一些日志的打印,权限的控制等等,他的底层实现思想是动态代理,动态代理分为两类,一类是JDK动态代理,一类是CGLIB动态代理,JDK是基于实现类进行功能增强,CGLIB是基于继承方式进行功能增强。aop是ioc的一个扩展功能,先有的ioc,再有的aop,只是在ioc的整个流程中新增的一个扩展点而已:BeanPostProcessor。1、代理对象的创建过程(advice,切面,切点)

2024-02-21 23:20:12 363

原创 对象的创建过程

如果确定一个对象的作用域不会逃逸出方法之外,那可以将这个对象分配在栈上,这样,对象所占用的内存空间就可以随栈帧出栈而销毁。在一般应用中,不会逃逸的局部对象所占的比例很大,如果能使用栈上分配,那大量的对象就会随着方法的结束而自动销毁了,无须通过垃圾收集器回收,可以减小垃圾收集器的负载。多线程向eden区分配对象时,必须做线程同步(抢占位置),因此出现TLAB优化,为每个线程分配自己区域。markword(对象头) --8字节 所记录信息:1:锁,2:hachCode,3:GC相关。

2024-02-21 23:19:41 158

原创 双写一致性

业务代码更新数据库,将key值存入binlog日志当中,将生成的binlog日志传入订阅binlog系统(canal),订阅系统提取出key值在非业务员代码中执行删除操作,删除失败,存入到消息队列,再次传回至非业务代码删除。咱们知道,mysql读写,读的效率要比写的效率要高,这种情况发生的唯一可能就是,线程B更新操作要快于线程A读取操作,那么才有可能线程B删除缓存,才会在线程A 写入缓存之前,这种情况发生的概率非常之小。线程B读取缓存,没有,去数据库读取旧值,并更新到缓存。第一,更新缓存,再更新数据库。

2024-02-21 23:18:48 276

原创 SpringBoot的自动装配原理

非常关键的方法,来完成整个spring应用程序的启动,在自动装配过程中,会调用invokeBeanFactoryPostProcessor方法,在此方法中主要是对ConfigurationClassPostProcessor类的处理,这是BFPP的子类也是BDRPP的子类,@Import的注解都解析到,然后在processlmport方法中对Import的类进行分类,此处主要识别的时候。能,前面的处理逻辑包含了上下文对象的创建,banner的打印,异常报告期的准备等各个准备工作,方便后续来。

2024-02-21 23:17:49 421

原创 GC如何判断对象可以被回收

从GcRoot开始向下搜索,搜索所走过的路径被称为引用链,当一个对象到GcRoot没有任何引用链相连时,则证明此对象是不可用的,那么虚拟机就可以判定回收。三色标记(01,10,11)在对象头(MarkWord),mw包含三个信息,第一类锁信息,第二类HashCode,第三类GC。G1 摒弃分代模型,采用分区模型(随着内存的增大,年轻代,老年代的GC时间增长)(区大小:1,2,4,8,16,32M)刚刚诞生的对象存在于新生代,进行多次YGC没有清除的对象存在老年代,根据不同年代采取不同的算法,分代算法。

2024-02-21 23:17:13 366

原创 JVM内存调优参数

XX:NewRatio=n:设置年轻代和年老代的比值。-XX:ParallelGCThreads=n:设置并发收集器年轻代收集方式为并行收集时,使用的cPU数。java -XX:+PrintFlagsFinal | wc -l : 查看-XX所有命令个数。-XX:ParallelGCThreads=n:设置并行收集器收集时使用的cPU数。-XX:GCTimeRatio:=n:设置垃圾回收时间占程序运行时间的百分比。-XX:MaxPermSize=-n:设置持久代大小。-Xmx:最大堆大小。

2024-02-21 23:16:25 233

原创 常见垃圾回收器

XX:+UseParallelGC Parallel Scavenge+Parallel Old(1.8默从)[Ps+SerialOld]默认情况下不会是这种选项,HotSpot会根据计算及配置和JDK版本自动选择收集器。Linux中没找到默认GC的查看方法,而windows中会打DUseParallelGC。Linux下1.8版本默从的垃圾回复器到底是什么?这个组合已经很少用(在某些版本中已经废弃)常见垃圾回收器组合参数设定:(1.8)1.8.0222默认Ps+Po。通过GC的日志来分辨。

2024-02-21 23:15:05 144

原创 MYSQL事务隔离级别

读已提交:任何事事务都a不能读到未提交事务,只能读取到事务提交后的数据,事务A开启,并进行两次查询,在两次查询间隙中,事务B开启,并进行值的修改且提交,导致第一次查询和第二次不一样,出现在当前事务中不可重复读现象,幻读。读未提交:任何事务都可以读到其他事务未提交的数据,一个事务开启后进行查询,另一个事务开启并更新值,但未提交,这个时候事务A能够读取到未提交数据,会造成脏读现象,不可重复读,幻读。再进行删除操作,由于tom已经没了,被定义为删除,故只有Jerry,此时删除是对于Jerry删。

2024-02-21 23:14:30 268

原创 Docker镜像及容器命令

镜像命令容器命令其他常用命令查看元数据进入容器文件拷贝命令列表

2023-12-28 23:30:25 339 1

原创 Docker安装软件

部署Es。

2023-12-28 23:28:18 319 1

原创 Docker数据卷

1.容器数据卷的使用2.mysql的数据同步3.具名和匿名挂载4.数据卷之dockerFiledocker inspect [container_id]5.数据卷容器

2023-12-28 23:26:30 380 1

原创 Dockerfile

1.准备镜像文件,tomcat压缩包和jdk压缩包。构建自己的centos。构建自己的tomcat。

2023-12-28 23:16:57 374 1

原创 MYSQL事务隔离级别

next-key锁是mysql默认的锁,是记录锁和在此索引记录之前的gap上的锁的结合,这个锁的作用是为了防止幻读,导致主从复制的不一致。幻读:假设数据库有id为1,2两条数据,事务A进行二次查询,事务B在间隙中将id为3的数据插入并提交事务,两次查询结果都为两条,这时事务a并不知道有第三条数据,也进行插入,从而产生报错。串行化:多个事务之间按照顺序执行,加锁保证串行化,保证了事务不会出现幻读,但性能很低 脏读:读到了事务未提交的值。mvcc解决了快照读的幻读,间隙锁解决了当前读的幻读。

2023-12-28 23:11:13 371 1

原创 接口返回状态码

【代码】接口返回状态码。

2023-12-28 23:06:06 486 1

原创 路由与Vuex

一. VueRouterVue Router 是 Vue.js 官方的路由管理器。它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌。1.1 安装npm install vue-router --save1.2 配置路由信息新建一个文件夹叫做router,然后在里面定义一个index.js文件,在该文件中配置路由信息:import Vue from 'vue'im...

2019-12-19 09:53:50 124

原创 Vue 组件基础

VUE一. 开发工具VUE开发环境个人推荐使用VS code, 然后安装特定的插件即可开发,可用插件如下:Vetur —— 语法高亮、智能感知、Emmet等EsLint—— 语法纠错Auto Close Tag —— 自动闭合HTML/XML标签Auto Rename Tag —— 自动完成另一侧标签的同步修改Path Intellisense —— 自动路劲补全HTML CS...

2019-12-17 15:17:59 326

原创 再谈微服务

@TOC微服务的概念概述微服务架构是一种架构思想,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。它的主要作用是将功能分解到离散的各个服务当中,从而降低系统的耦合性,并提供更加灵活的服务支持。概念把一个大型的单个应用程序和服务拆分为数个甚至数十个的支持微服务,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服务等级协议。定义围绕业务领域组件来创建应用,这些应用可独立地进行...

2019-12-16 20:07:05 126

空空如也

空空如也

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

TA关注的人

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