自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 PostgreSQL基本介绍及数据类型

PostgreSQL是一个功能强大的的关系型数据库。底层基于C实现。PostgreSQL的开源协议和Linux内核版本的开源协议是一样的。。BDS协议,这个协议基本和MIT开源协议一样,说人话,就是你可以对PostgreSQL进行一些封装,然后商业化是收费。PostgreSQL的名字咋来的。之前叫Ingres,后面为了解决一些ingres中的一些问题,作为后面的ingres,就起名叫postgre。PostgreSQL版本迭代的速度比较快,现在最新的正式的发布版本,已经到了15.RELEASE。

2024-06-30 14:12:54 414

原创 Apache ShardingSphere实战与核心源码剖析

Apache ShardingSphere实战与核心源码剖析1.数据库架构演变与分库分表介绍1.1 海量数据存储问题及解决方案如今随着互联网的发展,数据的量级也是成指数的增长,从GB到TB到PB。对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求。阿里数据中心内景( 阿里、百度、腾讯这样的互联网巨头,数据量据说已经接近EB级) 使用NoSQL数据库, 通过降低数据的安全性,减少对事务的支持,减少对复杂查询的支持,来获取性能上的提升。NoSQL并不是万能的

2024-06-10 22:40:36 1044

原创 Redis持久化总结

命令,则会把当前内存中已有的数据弄成二进制存放在aof文件中,这个过程模拟了rdb生成的过程,然后Redis后面有其他命令,在触发下次重写之前,依然采用AOF追加的方式。以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中的命令达到恢复数据的目的。操作系统控制的写回:每个写命令执行完,只是先把日志写到 AOF 文件的内存缓冲区,由操作系统决定何时将缓冲区内容写回磁盘,通常同步周期最长30秒。每秒写回:每个写命令执行完,只是先把日志写到 AOF 文件的内存缓冲区,每隔一秒把缓冲区中的内容写入磁盘;

2023-12-29 17:44:24 864

原创 Redis缓存穿透、缓存雪崩、缓存缓存击穿

大量请求访问没有缓存的key,指查询一个一定不存在的数据,由于缓存不命中,请求会穿透到数据库,导致数据库压力过大。

2024-05-22 16:50:51 432

原创 Mybatis自定义TypeHandler

我们可以自己实现这个BigDecimal的类型转换器,比如我这里自定义了一个BigDecimal类型转换器,默认将查询的结果小数点后面的0去掉。这样,Mybatis就会在需要处理MyCustomType类型的字段时,使用我们自定义的TypeHandler进行类型转换。在Mybatis的配置文件中,我们需要注册自定义的TypeHandler。其实Mybatis默认提供了一些基本类型的类型转换器,我们可以参照这些类型转换器去自定义。然后在Mybatis数据源的配置类中,注入Handler的包扫描路径就可以了。

2024-05-01 11:42:58 876 1

原创 线上真实案例之执行一段逻辑后报错Communications link failure

1.问题发现在开发某个项目的一个定时任务计算经销商返利的功能时,有一个返利监测的调度,如果某一天返利计算调度失败了,需要重新计算,这个监测的调度就会重新计算某天的数据。在UAT测试通过,发布生产后,发现过几天就报错了,报错日志如下:Fetched SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@6d2b4a] from current transaction==> Preparing: delete from

2024-04-20 13:32:48 390

原创 JDK1.8新特性

JDK8新特性​ Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机,Java 仍是企业和开发人员的首选开发平台课程内容的介绍了解Java发展史Lambda表达式接口的增强函数式接口方法引用Stream APIOptional新时间日期API其他新特性一、Java发展历史1. Java的发展历史​ Sun公司在1991年成立了一个称为绿色计划(

2024-04-16 22:14:20 452

原创 Mybatis一级缓存有时有而有时没有的问题

1.在Mybatis执行增加、修改或者删除操作时,会清空当前的sqlSession的缓存2.如果在执行一系列查询和更新操作时,虽然在中间的某个步骤可能执行了更新操作,清空过缓存,但是要注意是不是与之前的sqlSession不一样,如果不一样,那么原来sqlSession里的缓存还在,这种情况可以从调试日志中看到比如等日志。

2024-03-30 10:14:36 686

原创 多线程执行一半后不往后走的坑

首先演示一个简单的场景。采用提交线程的方式,直接在多线程中执行的某个地方抛出一个异常。调用的地方:发现一直卡在那,没有任何错误日志。多线程调用的地方:发现控制台会打印错误日志了:上面是我遇到问题后,演示的一个简单例子。下面来看我遇到的真实的场景。

2024-03-26 21:41:38 420

原创 Java泛型方法和泛型参数之美

使用泛型的好处:1.提升了程序的健壮性和规范性2.编译时,检查添加元素的类型,提高了安全性3.减少了类型转换的次数,提高效率。

2024-03-25 14:51:06 1193

原创 巧用泛型接口抽取简化代码

Java泛型是一种强大的编程特性,它可以在编译时提供类型安全性,并且可以使代码更加灵活和可重用。

2024-03-24 22:01:50 998

原创 分页多线程处理大批量数据

因为需要从一个返利明细表中获取大量的数据,生成返利报告,耗时相对较久,作为后台任务执行。但是后台任务如果不用多线程处理,也会要很长时间才能处理完。另外考虑到数据量大,不能一次查询所有数据在内存中处理,为了防止内存溢出,分页查询数据,然后分批次多线程处理。

2024-03-20 13:01:16 747

原创 Spring事务传播行为总结

事务传播行为介绍Spring中的7个事务传播行为:​。

2024-03-17 19:19:07 241

转载 Spring事务管理@Transactional注解的那些事儿~挺好玩的

本文引用了另外一位博主的文章,觉得写的非常好,借鉴学习下。

2024-03-17 11:04:00 31

原创 从嵌套事务的日志看MyBatis的sqlSession生命周期

这里先执行一个查询,然后更新操作。查询的方法是一个事务A,后面执行更新操作的方法updateTest因为采用了声明式事务,会重新开启事务,这里记为是事务B。

2024-03-17 10:52:03 549 1

原创 MyBatis plus自动生成代码

这是官网中的说明:3.相关配置说明参考官网:MyBatis-Plus代码生成器配置#可选配置方法说明示例dbQuery(IDbQuery)数据库查询new MySqlQuery(),只在SQLQuery下生效schema(String)数据库 schema(部分数据库适用)mybatis-plustypeConvert(ITypeConvert)数据库类型转换器new MySqlTypeConvert(),只在SQLQuery下生效keyWords

2024-03-16 21:33:01 1117

原创 Spring Transactional注解失效的几种典型场景及解决办法

这个方法非常简单,只需要新加一个Service方法,把@Transactional注解加到新Service方法上,把需要事务执行的代码移到新方法中。如上,如果是在同一个类中调用被@Transactional注解的方法,那么也不会生效,因为调用的是this对象的方法,而不是代理对象的方法。事务方法add中,调用了事务方法doOtherThing,但是事务方法doOtherThing是在另外一个线程中调用的。同理,如果方法用final修饰,也是没法被动态代理的类重写的,因此注解也会失效。

2024-03-15 23:10:16 1337 1

原创 调用Mybatis plus中的saveBatch方法报找不到表的问题

也就是,我们在创建 SqlSessionFactory 时候设置的 setMapperLocations, 设置路径下的所有mapper.xml 对应的实体都会保存对应的数据库配置。表实际是存在的,且发现其他的方法都没有问题,包括save、update等单个的方法,都是正常的。在用Mybatis plus开发的项目中,用自带的API批量保存的方法saveBatch操作时,发现报没有找到表的错误。需要将其中的一个数据源对应的mapper文件映射的路径改一下,改成和另一个数据源配置的路径不同,就可以了。

2024-03-07 21:47:50 627

原创 MyBatisPlus入门教程

MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window) 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

2024-03-03 16:08:39 690

原创 JAVA基础之反射

案例:美团外卖 —付款 —》要么用微信支付 要么用支付宝支付多态确实可以提高代码的扩展性,但是:扩展性没有达到最好。怎么没有达到最好:上面的分支,还是需要手动的删除或者添加。解决办法:反射机制。

2024-03-03 15:40:09 773

原创 设计模式之结构型模式

我们已经学习过了设计模式中的创建型模式. 创建型模式主要解决对象的创建问题,封装复杂的创建过程,解耦对象的创建代码和使用代码.单例模式用来创建全局唯一对象工厂模式用来创建不同但是相关类型的对象(继承同一父类或者接口的一组子类),由给定的参数来决定创建哪种类型的对象.建造者模式是用来创建复杂对象,可以通过设置不同的可选参数,定制化地创建不同的对象.原型模式针对创建成本比较大的对象,利用对已有对象进行复制的方式进行创建,以达到节省创建时间的目的.从本节课开始我们来学习结构型设计模式, 结构型模式主

2024-02-17 16:35:19 1136

原创 设计模式之创建型模式

1 ) 定义单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一,此模式保证某个类在运行期间,只有一个实例对外提供服务,而这个类被称为单例类。单例模式也比较好理解,比如一个人一生当中只能有一个真实的身份证号,一个国家只有一个政府,类似的场景都是属于单例模式。2 ) 使用单例模式要做的两件事保证一个类只有一个实例为该实例提供一个全局访问节点3 ) 单例模式结构1 ) 单例的定义单例设计模式保证某个类在运行期间,只有一个实例对外提供服务,而这个类被称为单例类。

2024-02-15 21:09:40 1413

原创 JAVA后端上传图片至企微临时素材

上传企微临时素材,对应企微api文档链接:https://developer.work.weixin.qq.com/document/path/90253。为了实现同一资源文件,一次上传可以多次使用,这里提供了素材管理接口:以media_id来标识资源文件,实现文件的上传与下载。在使用企业微信API接口中,往往开发者需要使用自定义的资源,比如发送本地图片消息,设置通讯录自定义头像等。调用企微api上传图片文件到企微临时素材方法,对应上面的。获取token的方法,对应上面的。

2024-02-02 11:20:18 1540

原创 并发编程(九)——集合相关面试问题

TreeNode中不但包含了红黑树的parent,left,right,red之外,还有维护的prev,以及继承自父类的next。而且在ConcurrentHashMap的有参构造中,虽然可以穿度一个负载因子的参数,但是无法修改他,在有参构造的逻辑里,仅仅是拿着传入的loadFactor计算初始数组的长度。在协助扩容前,有几个判断,主要是判断扩容是否结束,以及协助扩容的线程是否已经达到最大值的这两个判断,这两个判断没有将扩容标识戳做左移操作,就直接与sizeCtl做判断了,这种判断是没有任何意义的。

2024-01-31 14:15:29 391

原创 ThreadLocal使用及应用场景分析

定义提供线程局部变量;一个线程线程局部变量在多个线程中,分别有独立的值(副本)。特点简单(开箱即用)、快速(无额外开销)、安全(线程安全)。场景多线程场景(资源持有、线程一致性、并发计算、线程安全等场景)。实现原理Java中用哈希表实现。应用范围几乎所有提供多线程特征的语言。

2024-01-22 09:20:33 892

原创 系统问题排查定位流程

在分析故障原因时,通常可从一个或一系列症状入手,对它们进行跟踪以发现问题发生的原因。如果是一系列症状,也必须选定其中的一个作为切入点。切入点,一定是要那种可以量化的东西,而不能是“也许”、“估计”、“负荷高”这类的字眼。换句话说,出现这些字眼,表示问题没有辅证。寻找问题中,错误日志即是一种简单易行、快速有效的手段,通过查看错误日志往往能一针见血地迅速解决问题。换句话说,能直接通过业务的程序日志定位问题的,就不要麻烦全面排查的方式。

2024-01-21 21:23:31 1466

原创 并发编程(八)——异步编程

FutureTask是一个可以取消异步任务的类。FutureTask对Future做的一个基本实现。可以调用方法区开始和取消一个任务。一般是配合Callable去使用。异步任务启动之后,可以获取一个绑定当前异步任务的FutureTask。可以基于FutureTask的方法去取消任务,查看任务是否结果,以及获取任务的返回结果。FutureTask内部的整体结构中,实现了RunnableFuture的接口,这个接口又继承了Runnable, Future这个两个接口。

2024-01-19 12:39:31 448

原创 IDEA中启动项目报堆内存溢出或者没有足够内存的错误

【代码】IDEA中启动项目报堆内存溢出或者没有足够内存的错误。

2024-01-17 22:37:10 3231

原创 IDEA怎么用Devtools热部署

大家知道在项目开发过程中,有时候会改动页面数据或者修改数据结构,为了能使改动的代码生效,往往需要重启应用查看改变效果,这样会相当耗费时间。重启应用其实就是重新编译生成新的Class文件,这个文件里记录着和代码等对应的各种信息,然后Class文件被虚拟机的ClassLoader重新加载。而热部署正是利用了这个特点,它监听到如果有Class文件改动了,就会创建一个新的ClaassLoader进行加载该文件,经过一系列的过程,最终将改动的结果呈现在我们眼前。

2024-01-17 14:13:03 919

原创 js原生方式发送http请求

事件处理程序中,我们判断请求的状态和返回的状态码,如果都符合条件,就将返回的数据进行处理并输出;onloadend:当请求结束时触发,无论请求成功(load)还是失败(abort 或 error)。可以将body里面所有的json数据传到后端,后端再进行解析。方法指定要发送的请求的URL和类型(此处为GET请求)。onprogress:当请求接收到更多数据时,周期性触发。的不同值,代表了不同的状态。, 就可以访问从服务器返回的数据了。onload:请求成功完成时触发。方法监听返回结果,也是可以的。

2024-01-16 22:49:22 950

原创 并发编程(七)——JUC并发工具

CountDownLatch就是JUC包下的一个工具,整个工具最核心的功能就是计数器。如果有三个业务需要并行处理,并且需要知道三个业务全部都处理完毕了。需要一个并发安全的计数器来操作。CountDownLatch就可以实现。给CountDownLatch设置一个数值。可以设置3。每个业务处理完毕之后,执行一次countDown方法,指定的3每次在执行countDown方法时,对3进行-1。主线程可以在业务处理时,执行await,主线程会阻塞等待任务处理完毕。

2024-01-14 21:58:42 225

原创 设计模式之六大设计原则

古人云: 有道无术,术可求.有术无道,止于术.而设计模式通常需要遵循一些设计原则,在设计原则的基础之上衍生出了各种各样的设计模式。设计原则是设计要求,设计模式是设计方案,使用设计模式的代码则是具体的实现。设计模式中主要有六大设计原则,简称为SOLID ,是由于各个原则的首字母简称合并的来(两个L算一个,solid 稳定的),六大设计原则分别如下:​1、单一职责原则(Single Responsibitity Principle)​2、开放封闭原则(Open Close Principle)​。

2024-01-14 12:56:14 1508 1

转载 Http Post请求被强制转换为Http Get请求

2、客户端收到302之后,通过https向服务端发起了新的请求。今天在开发一个服务的时候,发现用postman造的post请求,到了服务端变成了get请求。于是打开wireshark抓包。版权声明:本文为CSDN博主「tong_master」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。大多数http客户端(包括浏览器)会将引起302的原有的post请求转化为get请求发出去(其实这是将302当做303来处理)。于是怀疑是客户端在处理302时,自动重新发起了get请求。

2024-01-12 22:56:12 274

原创 IDEA无法解析jdk自带的类的解决办法

最后试了这种办法,重新选择一个项目可用的jdk,比如我这里项目需要的jdk版本是1.8,开始选择的1.8.0_291这个版本(报错的时候),现在选的是1.8.0_45这个版本,发现错误马上消失了,也不用重启IDEA。找不到,我们知道jdk自带的类是不用import包的,这里报错了,IDEA会提示你去导入类,其实这个提示也不是真正的解决办法,因为IDEA也没有这么智能,告诉你是jdk出了问题。我查看网上的资料,试过很多办法,都不行,比如清除缓存重启等,发现都不行。重新选择jdk后,之前的这些错误都消失了。

2024-01-11 22:16:01 1065

原创 window环境下mysql8安装

​ Mysql的安装可以直接从mysql的官网下载msi文件或者压缩包进行安装,如果选择msi的方式安装直接下一步安装就好,如果选择zip压缩包的方式需要执行一些特殊的命令进行初始化以及服务的启动。​ 因为我本人的PC上已经安装了mysql5.7的版本,因此选择zip的方式进行mysql8的安装,如果你的电脑上没有安装过任何mysql的版本,直接选择msi的文件双击运行即可,此处不再赘述。

2024-01-10 22:59:56 395

原创 CentOS7环境下安装mysql8

安装好centos系统之后,系统默认自带mariadb数据库,因为存在类库的冲突,因此要先卸载mariadb。

2024-01-10 21:22:57 960

原创 HashMap源码解析

正是因为这样巧妙的 rehash 方式,既省去了重新计算 hash 值的时间,而且同时,由于新增的 1bit 是 0 还是 1 可以认为是随机的,在 resize 的过程中保证了 rehash 之后每个桶上的结点数一定小于等于原来桶上的结点数,保证了 rehash 之后不会出现更严重的 hash 冲突,均匀的把之前的冲突的结点分散到新的桶中了。例如:原来集合的元素个数是 6 个,那么 6/0.75 是8,是 2 的n次幂,那么新的数组大小就是 8 了。5 是假设计算出来的原来的索引。

2024-01-09 15:47:37 1368

原创 分布式事务总结

XA规范:总之一句话:就X/Open DTP 定义的 事务协调者与数据库之间的接口规范(即接口函数),事务协调者用它来通知数据库事务的开始、结束以及提交、回滚等。XA 接口函数由数据库厂商提供。

2024-01-07 22:16:43 372

原创 并发编程(六)——并发集合

红黑树是一种特殊的平衡二叉树,首选具备了平衡二叉树的特点:左子树和右子数的高度差不会超过1,如果超过了,平衡二叉树就会基于左旋和右旋的操作,实现自平衡。每个节点必须是红色或者黑色。根节点必须是黑色。如果当前节点是红色,子节点必须是黑色所有叶子节点都是黑色。从任意节点到每个叶子节点的路径中,黑色节点的数量是相同的。当对红黑树进行增删操作时,可能会破坏平衡或者是特性,这是红黑树就需要基于左旋、右旋、变色来保证平衡和特性。

2024-01-06 17:51:37 412

原创 并发编程(五)——线程池

首先ThreadPoolExecutor中,一共提供了7个参数,每个参数都是非常核心的属性,在线程池去执行任务时,每个参数都有决定性的作用。但是如果直接采用JDK提供的方式去构建,可以设置的核心参数最多就两个,这样就会导致对线程池的控制粒度很粗。所以在阿里规范中也推荐自己去自定义线程池。手动的去new ThreadPoolExecutor设置他的一些核心属性。自定义构建线程池,可以细粒度的控制线程池,去管理内存的属性,并且针对一些参数的设置可能更好的在后期排查问题。

2024-01-06 17:31:40 995

typora安装包 markdown编辑器

typora安装包

2024-07-21

我的常用热键配置AutoHotKey

开发人员常用热键AutoHotKey配置,可以节省很多时间,提高工作效率

2024-07-20

windows hot key

windows 下常用的热键脚本配置

2024-06-27

版本管理及项目构建和maven的介绍使用

1.svn版本管理。 2.项目构建的方式,主要介绍Ant和maven,重点介绍maven。 包含Ant的简介及常用任务,maven的简介、环境配置、maven项目开发,maven依赖、maven仓库等概念以及maven生命周期和maven插件、聚合和继承等。 3.推荐的书籍

2024-01-26

23种设计模式精讲总结

23种设计模式总结,分别对应三种大的类型:创建型模式、结构型模式、行为型模式。包含其定义和类图。 速记口诀如下: 创建型:单抽元建厂 结构型:外侨(桥)组元戴(代)配饰 行为型:责令解放(访),观摩(模)对(迭)策,介忘台(态)

2024-01-14

Git学习笔记/常用命令总结

Git常用命令的总结,适用于Git初学者和需要用到Git工具的开发人员。 内容包括: 1.Git安装配置 2.Git工作流程 3.Git工作区、暂存区和版本库等概念 4.Git创建仓库 5.Git基本操作 6.Git分支管理 7.Git查看提交历史 8.Git标签 9.Git远程仓库 10.Git服务器搭建

2024-01-10

Linux常用命令技能提升

linux技能提升文档。 包含初级和中高级,主要适用于做后端开发的人员,也可以供做运维的人员学习。 命令主要包含后端程序员开发过程中的日志查找以及日志、进程、网络、简单的脚本编写、端口转发、抓包等相关命令。

2024-01-09

空空如也

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

TA关注的人

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