自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

罗罗的1024

做个幸福的小吃货

  • 博客(225)
  • 资源 (1)
  • 收藏
  • 关注

原创 Flyway使用教程

Flyway是一款开源的数据库版本管理工具,可以实现管理并跟踪数据库变更,支持数据库版本自动升级,而且不需要复杂的配置,能够帮助团队更加方便、合理的管理数据库变更。

2024-05-05 10:28:44 164

原创 MDC使用手册精讲

MDC(Mapped Diagnostic Context,映射调试上下文)是 log4j 和 logback 提供的一种方便在多线程条件下记录日志的功能。MDC 中包含的内容可以被同一线程中执行的代码所访问,当前线程的子线程也会继承其父线程中的 MDC 的内容。我们日志用的是 slf4j + logback,看看。

2024-04-16 21:30:27 466 1

原创 页缓存(PageCache)和预读机制(readahead )

假设用户线程请求读取磁盘上文件 A 的 offset 为 0-3KB 范围内的数据,由于磁盘的基本读写单位为 page(4KB),于是操作系统至少会读 0-4KB 的内容,这恰好可以在一个 page 中装下,但是操作系统出于局部性原理,会选择将相邻磁盘块 offset [4KB,8KB)、[8KB,12KB) 以及 [12KB,16KB) 都加载到PageCache,于是额外在PageCache中申请了 3 个 page用于缓存。

2024-04-15 21:59:31 486

原创 Lua脚本使用手册(Redis篇)

Lua是一种功能强大的,高效,轻量级,可嵌入的脚本语言。它是动态类型语言,通过使用基于寄存器的虚拟机解释字节码运行,并具有增量垃圾收集的自动内存管理,是配置,脚本和快速原型设计的最佳选择。

2024-04-14 14:31:51 1130 1

原创 cron表达式使用手册

Cron表达式中的通配符是用于指定时间范围的特殊字符,使得表达式的编写更加灵活和方便。我们在使用定时调度任务的时候,最常用的就是cron表达式。通过cron表达式来指定任务在某个时间点或者周期性执行。周(1-7),星期一到星期天。时,要留意是否支持这个语法。秒(0-59)(可选)

2024-04-14 01:02:13 432

原创 Linux--swap分区

早期的Linux由于内存不足,于是想把内存中暂不使用的程序或者数据存放到磁盘中,而磁盘中的这个区域就叫做内存交换分区(swap),此时系统就腾挪出了更多的内存为各个进程服务,而当系统需要访问swap上存储的内容时,再将swap上的数据加载到内存中,这就是我们常说的swap out和swap in,通常伴随着大量的IO。我早期就遇到过一个现场问题,应用进程被自动 kill 掉了,现在想来很有可能是没有配置swap分区,在内存不够时导致触发OOM killer。

2024-04-13 17:31:12 245

原创 布隆过滤器

它先对key使用多个hash函数进行计算,得到多个不同的hash值,再拿数组长度进行对多个hash值取模得到多个位置,将这几个位置置为1,表示这个key存在。还有一个问题,由于bit位可能存在多key共享的情况,所以对key进行删除时,bit位不能进行reset操作。我们常说redis的缓存穿透,即同一时间,大量请求请求一个不存在的key,导致请求全部打到了DB,给DB造成了巨大压力。,所以存在一定的误判率,即实际没有的key经过hash计算,得出的结果却是存在。用springboot示例。

2024-04-13 13:07:42 476

原创 微服务支持平台--限流算法

限流算法。

2024-04-11 11:31:36 415

原创 Mybatis--TypeHandler使用手册

场景:想保存user时 teacher自动转String ,不想每次保存都要手动去转String;从DB查询出来时,也要自动帮我们转换成Java对象。看看mybatis内置的类型处理器,这就是为什么一些Java的数据类型不用我们手动转换的原因。我们可以参考String,看他是怎么处理的,发现都是通过原生的jdbc来处理的。创建SqlSessionFactory的时候扫描并注册。经过测试,完全没有问题,插入数据库时,自动转。我们结合springboot来看,启动容器。容器启动完成,测试一下。

2024-04-02 01:08:51 507

原创 mybatis标签解析教程

包结构中,script -> xmltags 便是这些动态标签对象,我们在看看这些动态的tag的关系,如下。我们在mapper的xml文件中,使用动态SQL,那么这些标签。我们看看这些标签处理器,都实现了NodeHandler接口。标签示例,解析的时候根据xml中node的名称。名称获取对应的Handler,也就是。现在那么是如何解析这些的呢?SqlNode类如下。我们看到是直接走父类。

2024-03-30 13:27:11 231

原创 mybatis-插件使用手册

实现Interceptor接口,根据方法签名@Signature声明需要拦截的方法type= Executor.class, //上面说的四种类型之一method = "query", //方法名称args = {MappedStatement.class ,Object.class, RowBounds.class, ResultHandler.class, CacheKey.class, BoundSql.class}), //方法参数@Override。

2024-03-24 17:02:48 229

原创 mybatis注解---@SelectProvider 使用手册

实现自己的UserSqlProvider,拼接SQL(参数最好是占位符#{},防止sql 注入)并返回。注解 @SelectProvider 示例如下,其他@XXXProvider 参照即可。

2024-03-24 13:10:38 378

原创 线程池,我的异常呢?

线程池的异常处理,我们常用execute() 和 submit() 方法进行任务提交,submit 需要通过返回值手动去获取异常,而execute 则会把异常直接输出到控制台,所以在编写代码时,应避免异常逃逸出run() 方法之外。如果没有注意,异常逃逸,我们还是能够进行捕获的。通过实现Thread.UncaughtExceptionHandler接口,在线程由于未捕获的异常而即将消亡时,便会自动调用uncaughtException方法进行兜底。

2024-03-16 13:06:49 179

原创 关于请求头参数名自动转换小写概要

目前暂时没有想到好的解决方案,暂时请求头中参数名全部小写。

2024-02-20 18:17:37 315

原创 mysql触发器的简单使用

insert触发器在insert语句执行之前(before)或者执行之后(after)执行,在insert触发器代码内,可以引用一个名为"delete触发器在delete语句执行之前(before)或者执行之后(after)执行,在insert触发器代码内,可以引用一个名为"update触发器在update语句执行之前(before)或者执行之后(after)执行,在update触发器代码内,可以引用一个名为"在before insert 触发器中,NEW 中的值可以被更新。" 的虚拟表,访问被插入的行。

2024-01-11 15:45:20 802

原创 Maven下载依赖的顺序及配置文件说明

如果依赖项在某个仓库中找到了,Maven 会将其下载到本地仓库,并在后续构建过程中直接使用本地仓库中的依赖,以加快构建速度和确保依赖项的一致性。私有仓库(私服):如果在本地仓库中未找到依赖项,Maven 会按照项目的 pom.xml 文件中配置的 元素指定的顺序依次搜索私有仓库。其他远程仓库:如果在项目的 pom.xml 文件中配置了其他远程仓库地址,并且中央仓库、私有仓库和本地仓库都没有所需的依赖项,Maven 会按照 中指定的顺序依次搜索这些自定义远程仓库。Maven的配置文件说明。

2023-07-19 18:30:52 4576

原创 脚本:新增表或者字段

脚本:新增表或者字段。

2023-07-12 11:32:03 1170

原创 SQL的 ISNULL 函数

Sybase的IsNull有两个参数MySQL的IsNull只有一个参数。

2022-07-20 12:55:08 1961 1

原创 ThreadLocal讲义

按照上面的流程,我们知道了,线程变量的值是存储在entry的value中,而threadlocal实例被WeakReference装饰,也就是当发生GC时,threadlocal实例将自动被清除,如果这个threadlocal实例被GC回收了,可是entry中的value属性值却和真实的内存对象存在。发现如果一直都是同一个threadlocal在get、set,是不会清除key为null的entry的,也就是说,是存在内存泄漏的可能的。问题二线程变量存储在哪里?...

2022-07-17 21:39:01 878

原创 Arthas的常见用法

场景生产环境下某接口报错,但是这个接口存在多个if-else分支,又因为日志在某种情况下没有打印出来,光看代码无法知道方法的调用栈,就无法准确定位。在使用watch的时候,一个接口,如果被频繁的调用,有时候根本来不及看到自己想观察的内容,现在想过滤指定的name以便看到我想观察的。场景生产环境下,代码中关键日志信息的日志级别低于配置文件配置的日志级别,不想出替换文件重启服务。场景看方法的入参时,只想观察自己的调用,过滤不相关的调用。方法内部调用路径,并输出方法路径上的每个节点上耗时。......

2022-07-15 00:54:26 1236

原创 重写equals为什么要重写hashcode

先了解下object 类实例假设在业务上,我们认为名字相同的便是同一个人猜想如果不重写 会发生什么下面看看map的put操作发生了什么?我们发现当有冲突时,判断的顺序如下由于我们认为名字相同的便是同一个人当 的时候,先比较 student1 和 student2 的 值,由于 student1 和 student2 是不同的对象,他们的 方法是调用的 方法,比较的是对象的地址,很明显,下面这个方法算出来的hash是不相等的hash值不相等,也不是T

2022-07-14 01:38:21 214

原创 设计模式之组合模式

组合(Composite Pattern)模式的定义:允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式来处理个别对象以及对象的组合。属于结构型设计模式。在组合模式中,整个树形结构中的对象都属于同一种类型,带来的好处就是用户不需要辨别是树枝节点还是叶子节点,可以直接进行操作,给用户的使用带来极大的便利创建一个接口或者抽象类,作为根节点创建一个已经实现或者继承根节点的类,作为树枝节点(在某些情况下也是叶子节点),用来管理和组织树枝节点类图如下.........

2022-07-13 21:11:54 202

原创 Linux目录--proc详解

proc简介Linux 内核提供了一种进程信息虚拟文件系统(Process information virtual file system) ,简称 proc,通过 proc 这个虚拟的文件系统,可以在运行时访问内核(core)内部数据结构、改变内核的某些参数设置。如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。proc 放置的数据都是在内存当中,例如系统内核、进程、外部设备的状态及网络状态等。因为这个目录下的数据都是在内存当中,所以本身不

2022-06-29 13:22:32 830

原创 Java基础之细说枚举

当我们使用关键字 创建一个枚举类型时,他具有如下特性编译后的代码通过汇编指令,发现了枚举类型除了我们自己定义的方法外,还有如下方法此外,默认是继承了 Enum 类型,并且用 final 修饰.....................

2022-06-26 22:12:36 295

原创 TCP的四次挥手过程

TCP的四次挥手过程客户端和服务端都可以主动释放连接这里以客户端示例情景一:还有数据存在(四次挥手)客户端发送FIN标识到服务端,告知服务端我要释放连接服务端收到FIN标识,知道了客户端想断开连接,于是马上检查是否还有数据发送给客户端,如果还有数据没有发送,就发送ACK标识告诉客户端:等一会,你还有数据在我这里待所有数据发送完毕后,服务端发送FIN标识给客户端,告诉客户端,现在已经没有数据了,我要关闭连接啦客户端收到服务端的FIN标识,知道服务端现在就要关闭连接了,于是就发送ACK标识,

2022-04-25 13:28:37 865

原创 拼接hql时,新增字段没有出现在构造方法中

问题描述在使用hibernate拼接hql时,新增字段竟然没有出现在构造方法中(下面是简化版,真实情况要复杂的多)//实体类public class Tmd { private String CBh; private Integer NSjzzaqxx; //private String CAjysly;//新加字段 public static final String cTmdConstructorFields = "(CBh,NSjzzaqxx)"; //public static fi

2022-04-18 13:24:30 568

原创 详解TCP的三次握手

前置条件在开始三次握手之前,我们先看看TCP头部结构,如下了解一下什么是序列号和确认号Sequence number表示的是我方(发送方)这边,这个packet的数据部分的第一位应该在整个data stream中所在的位置。(注意这里使用的是“应该”。因为对于没有数据的传输,如ACK,虽然它有一个seq,但是这次传输在整个data stream中是不占位置的。所以下一个实际有数据的传输,会依旧从上一次发送ACK的数据包的seq开始)Acknowledge number表示的是期望

2022-04-13 21:00:24 8724 5

原创 可恶,IE中的window.open()

简介现在我要在IE中弹出一个新的页面(没有地址栏,状态栏,工具条,菜单栏等),并且在页面关闭之后还要触发一个事件打开页面利用 window.open() 来打开一个新的页面,虽然设置了系类参数,可是打开的页面仍有地址栏,状态栏等,经查阅资料和询问高工及架构师,出于安全性考虑,ie禁止打开无地址栏状态栏的网址,但是可以通过设置ie的配置,和把ip地址加入到信任站点即可解决这个问题。var win = window.open("", "_blank", "fullscreen=no,location

2022-02-11 11:09:24 1415

原创 SPI 使用手册

什么是SPISPI的全名为Service Provider Interface,当服务的提供者,提供了服务接口的一种实现之后,在jar包的META-INF/services/目录里同时创建一个以服务接口命名的文件。该文件里就是实现该服务接口的具体实现类。而当外部程序装配这个模块的时候,就能通过该jar包META-INF/services/里的配置文件找到具体的实现类名,并装载实例化,完成模块的注入。public interface IService { String getServiceName

2021-12-23 23:17:13 656

原创 吐血整理MapStruct

MapStructMapSturct 是一个生成类型安全,高性能且无依赖的 JavaBean 映射代码的注解处理器(annotation processor)1、产生背景我们知道拷贝bean可以使用apache的BeanUtils和spring 提供的BeanUtils,阿里巴巴规范明确规定不要使用Apache的BeanUtils,不论是Apache或者是Spring,他们都是基于反射的,而反射的会有大量的属性拷贝,就会占据cpu,可以效率不是太高。而 MapStruct 是在编译时就已经生成了相应的

2021-12-19 23:13:26 1596

原创 网络数据传输问题和解决方式

重要数据在网络中的传输如果是公开裸露的,可以想象我们发消息,打电话,输入银行卡密码,岂不是随意便能被他人获取,那么什么问题以及该怎么解决呢?下面是数据产生的四个问题:窃听,篡改,假冒,事后否认产生了这些问题,又该如何解决呢?下面是常用的解决方案问题解决方法窃听加密假冒消息认证码、数字签名篡改消息认证码、数字签名事后否认数字签名对于加密技术,存在很多,MD5,SHA-1,SHA-2(推荐使用)等等,基于hash函数的加密技术是不可逆的,且长度是相同的

2021-12-03 23:05:13 3998

原创 设计模式之观察者模式

定义观察者模式是一种对象行为模式,定义了对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式。被观察者public interface WeatherState { //注册天气显示板块 WeatherState register(WeatherDashborad weatherState); //移除天气显示板块 void remove(WeatherDashborad weathe

2021-11-25 12:22:32 166 1

原创 InnoDB之MVCC精讲

什么是MVCCMVCC,也叫多版本并发控制,是一个”为了提升并发性能“而提出来的一个概念。它没有正式的规范,每个存储引擎和数据库系统实现的方式都是有差异的。实现原理保存某一时刻数据的快照InnoDB版MVCC实现原理每一行记录后面有两列,一列保存行的创建时间,一列保存行的过期时间(删除时间),创建时间和删除时间指的是“系统版本号”MVCC的优缺点优点: 保存这两个系统版本号,使得大多数读操作可以不用加锁缺点:保存这两个系统版本号需要额外的存储空间、检查和维护工作MVCC只在隔离级别

2021-11-14 18:55:12 1266

原创 双括号初始化的影响

简介我们在开发中偶尔会遇到一些小伙伴使用双括号“{{}}”来进行map或者list的初始化,类似下面示例这样示例public class MapTest { Map<String,Object> map = new HashMap<String,Object>(){ { put("1","one"); } }; List<Integer> list = new ArrayList<

2021-11-10 21:57:41 717

原创 记一次线上问题:Unsupported major.minor 52.0

原因总结JDK版本的问题;编译时的jdk和线上的JDK版本不一致怎么解决把编译时的jdk版本号转换成线上的jdk版本确定编译jdk这里我介绍用class文件确定选择某一个class文件用notepad++打开,如果是下面这样,就安装 Hex editor 插件然后按Ctrl+Alt+Shift+H ,便会转换成16进制前8个字节 ca fe ba be 是固定的,挨着后面的4个字节 00 00 是次版本号,次版本号后面的4个字节00 32 是jdk的版本号便可以

2021-10-28 14:04:33 202

原创 设计模式之构造者模式

定义建造者模式(Builder Pattern)也叫做生成器模式,其定义如下:Separate the construction of a complex object from its representation so that the same construction process can create different representations.(将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。)示例以构建一个人示例,灵魂是必须有的,肢体可有可无,哈

2021-10-15 00:43:09 323

原创 设计模式之装饰器模式

定义装饰模式(Decorator Pattern)是一种比较常见的模式,其定义如下:Attach additionalresponsibilities to an object dynamically keeping the same interface.Decorators provide a flexiblealternative to subclassing for extending functionality.(动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵

2021-10-13 01:49:26 209

原创 深入解析spring的@Component注解扫描

在这之前我们先要了解一下ConfigurationClassPostProcessor这个类,它实现了PriorityOrdered,BeanDefinitionRegistryPostProcessor等接口public class ConfigurationClassPostProcessor implements BeanDefinitionRegistryPostProcessor,PriorityOrdered, ResourceLoaderAware, ApplicationStartupAw

2021-10-07 03:18:44 1032

原创 设计模式之门面模式

门面模式(Facade Pattern)定义门面模式(Facade Pattern)也叫做外观模式,是一种比较常用的封装模式,其定义如 下:Provide a unified interface to a set of interfaces in a subsystem.Facade defines a higher-level interface that makes the subsystem easier to use.(要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个

2021-09-27 20:44:49 206

原创 设计模式之策略模式

策略模式定义策略模式(Strategy Pattern)是一种比较简单的模式,也叫做政策模式(Policy Pattern)。策略模式指定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。策略模式使用的就是面向对象的继承和多态机制。策略模式的三个角色Context封装角色它也叫做上下文角色,起承上启下封装作用,屏蔽高层模块对策略、算法的直接访问,封装可能存在的变化。Strategy抽象策略角色策略、算法家族的抽象,通常为接口,定义每个策略或算法必须具有的方法和属性Concrete

2021-09-25 16:40:02 235

layui 项目实战.md

一个又一个夜晚,踩过 layui 一个又一个坑,特此纪念

2021-03-26

空空如也

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

TA关注的人

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