自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(128)
  • 资源 (4)
  • 问答 (1)
  • 收藏
  • 关注

原创 spring状态机

由状态机的几个要素我们也可以知道,在一个复杂的业务流程过程中,有多种数据状态,多种处理动作,以及多种维度的角色。一个状态机定义以后,在某个状态下就只接收固定的Event,也就是执行指定的操作,这样流程就能按照预期定义的那样流转,不会出现乱入的情况,执行了一些在某状态下不允许执行的操作,也就是说,状态的流转都是在控制范围,不会超出预设的状态空间。在百科的解释中,我们可以提炼出状态机的几个要素:存储状态,逻辑电路,预先设定的状态转移路径,外部来的信号,内置的特定操作等。-对象内部状态不同会有不同的行为。

2023-07-06 11:28:43 2176 1

原创 关于SimpleDateFormat格式化无法精确到微妙、纳秒的处理

问题背景:根据时间字段拉取数据,由于平时测试环境时间字段都是DATE类型精度为0,用SimpleDateFormat格式化为yyyy-MM-dd hh:mm:ss然后拼接sql查询没有问题;但是前几天别人提供的数据为timestamp精度设置为6时间如:2022-01-21 11:07:18.123456,采用上面这种格式化日期后丢失精度导致数据缺失。面向百度编程。。。结果大家都说后面秒要几位小数就写几个S 于是乎我改成了yyyy-MM-dd hh:mm:ss.SSSSSS结果格式化出

2022-05-20 11:02:23 3159

转载 InnoDB原理篇:如何用好索引

前言现在聊聊,我们如何用好索引InnoDB中索引分类我们都知道InnoDB索引结构是B+树组织的,但是根据数据存储形式不同可以分为两类,分别是聚簇索引与二级索引。ps:有些同学还听过非聚簇索引和辅助索引,其他它们都是一个意思,本文统一称为二级索引。聚簇索引聚簇索引默认是由主键构成,如果没有定义主键,InnoDB会选择非空的唯一索引代替,还是没有的话,InnoDB会隐式的定义一个主键来作为聚簇索引。其实聚簇索引的本质就是主键索引。因为每张表只能拥有一个主键字段,所以每张表只有一

2022-04-06 09:09:58 245

转载 InnoDB原理篇:Change Buffer是如何提升索引性能的

前言相信很多小伙伴设计索引时,考虑更多的是索引是否能覆盖大部分的业务场景,却忽略了索引的性能。什么?不同的索引,性能还不一样?是的,这要从change buffer说起。Change Buffer是什么MySQL在启动成功后,会向内存申请一块内存空间,这块内存空间称为Buffer Pool。Buffer Pool内维护了很多内容,比如缓存页、各种链表、redo log buff、change buffer等等。回到正题,change buffer是用来干嘛的?当索引字

2022-03-31 11:20:55 323

转载 InnoDB原理篇:为什么使用索引会变快

前言大家好,我是阿星。本文就接上一篇文章【InnoDB原理篇:聊聊数据页变成索引这件事】来聊聊索引。建议看完上篇文章再看本篇,食用效果最佳。索引假设给你一本非常厚的《Java编程思想》阅读,没有目录,你想快速找到某一个章节的知识点,那估计得找一会了,如果有目录就不一样。索引其实就是为了提高数据查询的效率,就像书的目录一样,对于数据库的表而言,索引其实就是它的目录。二叉搜索树索引的实现种类繁多,比如常见的有序数组、哈希表、树等,不同的结构都有自己的适用场景和局限性,在数据库领域

2022-03-31 11:16:46 87

转载 InnoDB原理篇:聊聊数据页变成索引这件事

前言大家好,我是阿星,真.好久不见。我们从上一篇文章【InnoDB 对 Buffer Pool 的奇思妙想】中得知,每个缓存页对应一个数据页。正好就以数据页为起点,来聊聊InnoDB的索引。数据页我们都知道平时执行crud的时候,都会从磁盘上加载数据页到Buffer Pool的缓存页里去,更新缓存页后,由异步线程刷回磁盘的数据页。所以MySQL进行数据操作的最小单位是数据页,接下来就分析分析,数据页到底长什么样。每个数据页默认16kb的大小,数据页由多个部分组成,如下图所

2022-03-31 11:15:16 88

转载 InnoDB对Buffer Pool的奇思妙想

前言大家好,我是阿星,又跟大家见面了。相信很多小伙伴在面试中都被问过「为什么要用缓存?」,大部分人都是回答:「减少数据库的磁盘IO压力」。但是MySQL真的有如此不堪吗?每次增删改查都要去走磁盘IO吗?今天就聊聊InnoDB对Buffer Pool的奇思妙想。Buffer Pool先梳理出问题,再思考如何解决问题。假设我们就是InnoDB,我们要如何去解决磁盘IO问题?这个简单,做缓存就好了,所以MySQL需要申请一块内存空间,这块内存空间称为Buffer Pool。

2022-03-31 10:49:26 90

转载 redo log和binlog之间的破事

前言阿星在前面两篇文章都详细聊过redo log与binlog,有兴趣的朋友可以去看看前面两篇文章: 聊聊redo log是什么? 你必须知道的binlog日志 今天就来聊聊InnoDB是如何保证redo log与binlog两份日志之间的逻辑一致。两阶段提交redo log(重做日志)让InnoDB存储引擎拥有了崩溃恢复能力。binlog(归档日志)保证了MySQL集群架构的数据一致性。虽然它们都属于持久化的保证,但是则重点不同。在执行更新语句过程,会记录.

2022-03-31 10:47:15 181 1

转载 还有人不知道binlog?

前言上篇阿星详细聊了redo log(重做日志),但是在MySQL数据库中还有一种二进制日志叫binlog(归档日志)。redo log它是物理日志,记录内容是“在某个数据页上做了什么修改”,属于InnoDB存储引擎。而binlog是逻辑日志,记录内容是语句的原始逻辑,类似于“给ID=2这一行的c字段加1”,属于MySQL Server层。binlog不管用什么存储引擎,只要发生了表数据更新,都会产生binlog日志。那binlog到底是用来干嘛的?可以说MySQL数据库的数

2022-03-31 10:45:34 205

转载 聊聊redo log是什么

前言说到MySQL,有两块日志一定绕不开,一个是InnoDB存储引擎的redo log(重做日志),另一个是MySQL Servce层的binlog(归档日志)。只要是数据更新操作,就一定会涉及它们,今天就来聊聊redo log(重做日志)。redo logredo log(重做日志)是InnoDB存储引擎独有的,它让MySQL拥有了崩溃恢复能力。比如MySQL实例挂了或宕机了,重启时,InnoDB存储引擎会使用redo log恢复数据,保证数据的持久性与完整性。上一篇中阿.

2022-03-31 10:42:37 288

转载 浅谈MySQL InnoDB的内存组件

前言MySQL中执行一条SQL语句,相应表数据的读写都是由存储引擎去做(更新数据、查询数据)。在这个过程,存储引擎需要决策一些事情 数据是从内存查还是从硬盘查 数据是更新在内存,还是硬盘 内存的数据什么时候同步到硬盘 所以存储引擎会按照内部逻辑与内存、硬盘交互。我们可以按需选择存储引擎,比如常见的InnoDB、MyISAM、Memory等等。众多存储引擎中,InnoDB是最为常用的,从MySQL5.5.8版本开始,InnoDB是默认的存储引擎。...

2022-03-31 10:23:05 109

转载 揭开MySQL面纱,显露架构

前言目前大部分的后端开发人员对MySQL的理解可能停留在一个黑盒子阶段。对MySQL基本使用没什么问题,比如建库、建表、建索引,执行各种增删改查。所有很多后端开发人员眼中的MySQL如下图所示导致在实际工作中碰到MySQL中死锁异常、SQL性能太差、异常报错等问题时,直接百度搜索。然后跟着博客捣鼓就解决了,可能自己都没搞明白里面的原理。为了解决这种知其然而不知其所以然的问题,阿星的重学MySQL系列会带着大家去探索MySQL底层原理的方方面面。这样大家碰到MySQL的一些异常

2022-03-31 10:19:01 87

转载 MySQL架构详解

首先声明本系列纯转载分享给大家共同学习,绝对的通俗易懂,看完之后直呼牛X!!!!揭开MySQL面纱,显露架构 浅谈MySQL InnoDB的内存组件 聊聊redo log是什么 还有人不知道binlog? redo log和binlog之间的破事 InnoDB对Buffer Pool的奇思妙想 InnoDB原理篇:聊聊数据页变成索引这件事 InnoDB原理篇:为什么使用索引会变快 InnoDB原理篇:如何用好索引 InnoDB原理篇:Change Buffer是如何提升索引性能的在此

2022-03-31 10:16:18 59

原创 记一次@Transactional+@Async造成的事务不回滚问题

最近改造前两年的一个项目,一个版本发布的功能,需要操作3-4张表,使用的mybatis-plus做的持久化。原有逻辑:后台接收到publish请求,接入service1实现层。service1方法添加了@Transactional执行方法:1、add版本记录方法,默认发布版本状态为执行中2、修改最新版本时间方法3、service2的数据备份,由于该操作涉及三张表且数据量大比较耗时,所以在此方法上添加了@Async注解异步执行service2数据备份方法中执行方法:1、备份表1

2021-12-28 17:29:39 2066 1

原创 记一次@Transactional事务回滚的问题

这两天部门组织系统测试,忍不住再次夸赞下测试组的小姐姐们真是心细啊!!!!一个简单的任务复制功能,就是copy一条数据库的现有数据进行一些处理后然后作为一条新的数据插入数据库。实现类方法添加了@Transactional(rollbackFor = Exception.class),过程中涉及两个张表:插入动作流程如下:结果由于最后一步insert table2的时候发生异常(我可以说不是我的bug吗),导致事务回滚,结果他只把最后两步的操作回滚了,碰到ddl就终止了,这个操作之前确实没..

2021-09-26 17:19:32 244

原创 记一次mybatis-plus数据自动填充爆露出来的多线程的问题

技术背景:spring boot+mybatis-plus做公共字段填充(MetaObjectHandler),之前项目没有接入用户系统故用户名填充都是使用的默认值,最近公司整合统一网关,接入用户信息,单例模式使用ThreadLocal<Map<String, String>> threadLocal记录当前登陆用户信息,一切看似正常,用户信息获取都正常填充记录入库。但是测试组细心的小姐姐发现有一个接口调用的过程中发生用户名被还原成默认值的情况,一开始还不信。仔细观察发

2021-09-26 16:59:32 624 1

原创 HikariPool配置详解

HikariPool 较佳配置 hikari: connection-timeout: 60000 validation-timeout: 3000 idle-timeout: 60000 login-timeout: 5 max-lifetime: 60000 maximum-pool-size: 10 minimum-idle: 10 read-only: falsehikari 各参数解释 https://github.com/.

2021-04-27 14:27:16 12348

原创 Java后台http client实现文件上传

最近接到一个需求,需要用到后台去调用远程服务器的文件上传接口实现文件上传,用到了httpClient的MultipartEntityBuilder实现。maven引用 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpcore</artifactId> &l

2021-04-21 13:54:37 1953

转载 Java执行shell命令传参带空格

Runtime.getRuntime().exec(cmdstring);如果此时cmdstring中的参数(例如cp文件时文件名)含有特殊符号空格,此时就会出现错误,因为源码会按照一些特殊字符(" \t\n\r\f",注意到其中含有空格)去切分cmdstring变为数组,所以有空格会导致错误,这种情况可以用命令数组实现,就是把cmdstring里的东西自己放到数组里,就不用源码去切分了就不会有问题,例:abc af.zip为一个文件名cmdstring=“cp abc af.zip dir”这..

2021-04-13 17:12:23 821

原创 ReentrantLock和Synchronized的区别和原理和示例

相似点:两个都是可重入锁,它们都是加锁方式同步,而且都是阻塞式的同步,也就是说当如果一个线程获得了对象锁,进入了同步块,其他访问该同步块的线程都必须阻塞在同步块外面等待,而进行线程阻塞和唤醒的代价是比较高的(操作系统需要在用户态与内核态之间来回切换,代价很高,不过可以通过对锁优化进行改善)。功能区别:相同点:1.它们都是加锁方式同步;2.都是重入锁;3. 阻塞式的同步;也就是说当如果一个线程获得了对象锁,...

2021-03-26 12:20:38 126

转载 保姆级 Java 后端线上问题排查常用命令收藏

内存瓶颈 CPU瓶颈 网络瓶颈 磁盘瓶颈 应用瓶颈 总结 内存瓶颈freefree是查看内存使用情况,包括物理内存、交换内存(swap)和内核缓冲区内存。free -h -s 3表示每隔三秒输出一次内存情况,命令如下[1014154@cc69dd4c5-4tdb5~]$freetotalusedfreesharedbuff/cacheavai...

2021-03-24 09:10:03 144

转载 Java对象的生命周期

java对象的生命周期包括 创建、使用、回收 三个过程,本文将详细剖析每个过程。一、对象的创建当运行时执行代码遇到new指令、反序列化、反射、克隆时会创建新的对象。创建对象的过程如下图:java虚拟机创建对象的过程-流程图.jpg对象创建过程中重要步骤的几点说明:分配内存:分配内存方式由两种,分别是指针碰撞和空闲列表。指针碰撞是指将内存划分为空闲的和用过的两块,这两块之间有一个指针作为分界点,当分配内存时将指针往空闲内存块移动。空闲列表是由虚拟机维护一个列表,记录哪块内存..

2021-03-20 11:02:35 244

转载 java全局锁和对象锁以及synchronized,ReentrantLock,Atomic 使用场景描述

对象锁:/*** 全局锁,对象锁的区别* @author Z7M-SL7D2**/class Person{ private static int COUNT = 10; // 同一时间只允许一个线程吃 public synchronized void eat() { System.out.print("开始吃 "); COUNT--; System.out.print(" 吃东...

2021-03-20 09:05:01 768

转载 java常用重构技巧

基本原则1. 尽量在合适的场合使用单例使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面:第一,控制资源的使用,通过线程同步来控制资源的并发访问;第二,控制实例的产生,以达到节约资源的目的;第三,控制数据共享,在不建立直接关联的条件下,让多个不相关的进程或线程之间实现通信。2. 尽量避免随意使用静态变量要知道,当某个对象被定义为static变量所引用,那么GC通常是不会回收这个对象所占有的内存,如public c

2021-03-17 14:35:39 1282

转载 spring中常用的几种设计模式

1、简单工厂模式又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得bean对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定。如下配置,就是在 HelloItxxz 类中创建一个 itxxzBean。<beans> <bean...

2021-03-11 14:36:08 309

转载 通俗易懂的spring讲解

spring 的优点?1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦2.可以使用容易提供的众多服务,如事务管理,消息服务等3.容器提供单例模式支持4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能5.容器提供了众多的辅助类,能加快应用的开发6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等7.spring属于低侵入式设计,代码的污染极低8.独立于各种应用服务器9.spring的DI机制降低了业务对象替换...

2021-03-10 22:24:09 767

转载 数据库索引原理及优化

一、摘要本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引,至于哈希索引和全文索引本文暂不讨论。二、常见的查询算法及数据结构为什么这里要讲查询算法和数据结构呢?因为之所以要建立索引,其实就是为了构建一种数据结构,可以在上面应用一种高效的

2021-03-10 09:40:47 95

转载 springMVC启动过程详解

SpringMVC启动过程详解(li)  通过对SpringMVC启动过程的深入研究,期望掌握Java Web容器启动过程;掌握SpringMVC启动过程;了解SpringMVC的配置文件如何配置,为什么要这样配置;掌握SpringMVC是如何工作的;掌握Spring源码的设计和增强阅读源码的技巧。目录1.Web容器初始化过程2.SpringMVC中web.xml配置3.认识ServletContextListener4.认识ContextLoaderListener5.Disp

2021-03-08 12:08:02 1452

原创 记一次spring boot升级跨域问题的坑

当前使用版本spring boot2.4.0,跨域配置如下:package com.geostar.job.admin.conf;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.web.cors.CorsConfiguration;import org.springf

2021-03-03 15:14:01 2518 3

转载 redis数据类型深入浅出

最大感受,无论从设计还是源码,Redis都尽量做到简单,其中运用到的原理也通俗易懂。特别是源码,简洁易读,真正做到clean and clear,这篇文章以unstable分支的源码为基准,先从大体上整理Redis的对象类型以及底层编码。当我们在本文中提到Redis的“数据结构”,可能是在两个不同的层面来讨论它。第一个层面,是从使用者的角度,string,list,hash,set,sorted set第二个层面,是从内部实现的角度,属于更底层的实现, ht(dict),raw,embstr,...

2021-03-02 18:07:26 179

转载 分布式系统唯一ID生成方案汇总

系统唯一ID是我们在设计一个系统的时候常常会遇见的问题,也常常为这个问题而纠结。生成ID的方法有很多,适应不同的场景、需求以及性能要求。所以有些比较复杂的系统会有多个ID生成的策略。下面就介绍一些常见的ID生成策略。1. 数据库自增长序列或字段最常见的方式。利用数据库,全数据库唯一。优点:1)简单,代码方便,性能可以接受。2)数字ID天然排序,对分页或者需要排序的结果很有帮助。缺点:1)不同数据库语法和实现不同,数据库迁移的时候或多数据库版本支持的时候需要处理。2)在单.

2021-03-02 16:21:59 122

原创 Java获取近几天的时间

/** * 获取过去或者未来 任意天内的日期数组 * @param intervals intervals天内 * @return 日期数组 */ public static ArrayList<String> test(int intervals ) { ArrayList<String> pastDaysList = new ArrayList<>(); ...

2021-03-01 11:06:11 697

原创 char和数字对应转换

package main;/*** Java中将一个字符与对应Ascii码互转* 1 byte = 8bit 可以表示 0-127*/public class GetCharAscii { /*0-9对应Ascii 48-57 *A-Z 65-90 *a-z 97-122 *第33~126号(共94个)是字符,其中第48~57号为0~9十个阿拉伯数字 */ public static void main(String[] ar...

2021-02-27 19:03:06 4308

转载 springmvc的简介与原理

springmvc的简介与原理1.springmvc是什么 springmvc全称是spring web mvc,是spring框架一部分,是一个mvc的框架,和struts2一样是一个表现层框架。12.springmvc架构原理2.1.mvc在b/s系统中应用 mvc:是一种设计模式。设计模式理解为最佳实践。 b/s:早期大部分系统是c/s结构,是一种客户/服务器架构,和b/s(客户/服务器架构),b/s结构中客户端指的是浏览器。 web系统是一种b/s系

2021-01-20 18:02:18 353

转载 JAVA设计模式总结之23种设计模式

一、什么是设计模式 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多...

2021-01-20 15:10:22 221

转载 Kafka如果丢了消息,怎么处理的?

Kafka存在丢消息的问题,消息丢失会发生在Broker,Producer和Consumer三种。BrokerBroker丢失消息是由于Kafka本身的原因造成的,kafka为了得到更高的性能和吞吐量,将数据异步批量的存储在磁盘中。消息的刷盘过程,为了提高性能,减少刷盘次数,kafka采用了批量刷盘的做法。即,按照一定的消息量,和时间间隔进行刷盘。这种机制也是由于linux操作系统决定的。将数据存储到linux操作系统种,会先存储到页缓存(Page cache)中,按照时间或者其他条件进行刷盘(..

2020-12-30 10:36:26 154

转载 Maven 打包失败,提示 “POM for xxx is missing, no dependency information available“

问题描述Maven 打包失败,但开发环境可以看到 Jar 包。 提示[WARNING] The POM for xxx is missing, no dependency information available 提示Could not resolve dependencies for project yyy: Failure to find xxx in zzz was cached in the local repository 如图:原因定位 代码问题 新建小项目...

2020-12-18 11:29:43 3527 1

原创 flinkx本地IDE调试记录

本文使用idea作为示例:执行Launcher.main方法之前需要配置执行参数,如下图所示:选中Edit进去在Program arguments参数项中设置参数值为:-mode local -job D:\wdja-test\flinkx\jobs\pg-es.json -pluginRoot D:\wdja-test\flinkx\plugins -flinkconf D:\flink\flink-1.11.1\conf以上启动命令不清楚的可以参考作者上篇文章...

2020-12-14 17:59:13 529

原创 flinkx local模式踩坑记录

1、下载源码,首次下载idea编译会报错,编译找不到DB2、达梦、gbase、ojdbc8等驱动包解决办法:在$FLINKX_HOME/jars目录下有这些驱动包,可以手动安装,也可以使用插件提供的脚本安装:```bash## windows平台./install_jars.bat## unix平台./install_jars.sh```编译打包:mvn clean package -Dmaven.test.skip=true2、把编译后的三个文件加bin/li

2020-12-11 14:26:22 916

原创 flinkx运行任务配置详解

一个完整的Flinkx任务脚本配置包含 content, setting两个部分。content用于配置任务的输入源与输出源,其中包含reader,writer。而setting则配置任务整体的环境设定,其中包含restore,speed,errorLimit,dirty,log。具体如下所示:{ "job" : { "content" :[{ "reader" : { ...... }, "writer" : { ...... }

2020-12-11 14:19:24 1881

demoCsv.zip

数据组同事需要一个小工具帮组他们处理一些数据。首先他们的原数据是csv文件的,需要我们把里面的数据和别的系统里面的数据逐条匹配完善后返回给他们一个csv文件。原数据的csv一般3-5万条数据量(单列的)。 这是源代码,可以参考里面的代码和处理方式。

2019-10-12

struts-2.5.16.rar

struts版本升级,最近有个老系统需要升级到struts-2.5版本所需相关jar包整理。

2019-05-24

elasticsearch浏览器head插件

elasticsearch可视化界面插件,谷歌浏览器打开设置,点击扩展程序,直接拖进去即可使用。

2019-05-24

Fivegame.zip

五子棋源码,可以供刚入门的同鞋参考学习,这也是我看的第一个安卓项目,共同学习共同学习。

2019-05-24

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

TA关注的人

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