自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

k的博客

成长经历

  • 博客(303)
  • 资源 (3)
  • 收藏
  • 关注

原创 org.apache.commons.lang3#StringUtils.containsAny踩坑

StringUtils.containsAny(“ahbatctdp”, “http”)等价于StringUtils.containsAny(“ahbatctdp”, “h”,“t”,“t”,“p”)了。要么用containsAny时,指定多个搜索串。可以看到,将http转成了数组去传参,那么。这一句,输出true。要么用contains。

2026-01-27 14:18:42 14

原创 线程并行控制CompletableFuture

定位不同:传统线程池是“线程管理工具”,负责执行任务;是“异步编程工具”,基于线程池实现异步流程编排(回调、组合、异常处理)。结果处理不同:传统线程池只能阻塞获取结果;支持非阻塞的异步回调,主线程不被卡。能力边界不同:传统线程池无任务组合、优雅异常处理能力;内置这些能力,是对传统线程池+Future的增强。新手小贴士:实际开发中,不会用替代传统线程池,而是结合使用——用自定义线程池管理线程(避免默认池耗尽),用编排异步任务(回调、组合)。默认的commonPool。

2026-01-25 16:56:17 598 1

原创 POI操作excel示例

POI自己有些东西不是很熟悉。记录一下。

2026-01-06 11:41:10 182

原创 修改表字段长度,导致应用接口整体耗时增加问题分析

摘要: 在MySQL 5.6环境中修改表A的VARCHAR字段长度时,触发全表重建导致MDL锁争用。由于接口B的并发请求占满连接池(maxActive=8),阻塞了接口C的数据库操作,使其响应时间从300ms激增至10s。监控显示IOPS飙升,但仅影响同服务器的B/C接口。根本原因是5.6版本的DDL会强制拷贝含LONGTEXT的30万数据行,且连接池配置过小无法缓冲并发请求。教训:大表DDL需在低峰期进行,并提前评估连接池容量与版本特性(如Online DDL在5.6的局限性)。

2025-12-29 10:53:36 216

原创 mysql字符集不同导致报错

相同的数据,存入到不同的表里面,报错。字段类型都是longtext。表A字符集是utf8mb4,表B是utf8。插入表A正常,插入表B报错.发现是有个字段存了“𬊤”,导致报错。

2025-11-28 21:19:33 97

原创 固态硬盘SSD和机械硬盘HDD

固态硬盘ssd读写快,贵, 数据恢复难度大。机械硬盘hdd稍慢,便宜,摔一下容易坏,但是数据恢复难度低。

2025-11-19 21:58:09 350

原创 装饰器模式和代理模式

装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。装饰器模式通过将对象包装在装饰器类中,以便动态地修改其行为。

2025-11-17 22:01:07 234

原创 过滤器模式、责任链模式

意图:用于将对象的筛选过程封装起来,允许使用不同的筛选标准动态地筛选对象。命令模式,是将“请求”封装为对象。而过滤器,是将“对象的筛选过程”封装。

2025-11-16 22:11:41 383

原创 建造者模式、适配器模式、桥接模式

建造者模式是一种创建型设计模式,它的主要目的是将一个复杂对象的构建过程与其表示相分离,从而可以创建具有不同表示形式的对象。

2025-11-16 21:40:51 473

原创 状态设计模式和策略设计模式

如果这是面向对象的代码而不是状态机的,在状态间分享代码的方式是通过继承。当开火动画结束,我们弹出开火状态,然后下推自动机自动转回之前的状态。对于每个现有状态,我们需要另一个她持枪状态:站立,持枪站立,跳跃,持枪跳跃, 你知道我的意思了吧。当她拿着枪的时候,她还是能做她之前的任何事情:跑动,跳跃,跳斩,等等。不但增加了大量的状态,也增加了大量的冗余: 持枪和不持枪的状态是完全一样的,只是多了一点负责射击的代码。状态设计模式:关注 “对象内部状态的自然流转”,行为随状态自动切换,状态间可能有依赖(如流程步骤)

2025-11-12 23:17:12 1282

原创 单例设计模式

单例是指,整个JVM或者spring容器内唯一。一个JVM可以有多个spring容器。实际中,有些地方对性能、内存、线程安全敏感的,所以衍生出了不同的单例实现。将一个类的构造方法设置成私有,然后暴露出一个静态变量即可。spring容器内唯一,bean默认就是单例的。JVM唯一: 不被spring容器管理的单例。饿汉式-多线程安全,但是可能浪费内存。

2025-11-11 21:30:45 192

原创 原型设计模式

原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式之一。

2025-11-10 21:40:27 714

原创 观察者设计模式

当然,“从桥上掉落”和物理引擎相关, 但我们并不想看到在处理撞击代码的线性代数时, 有个对unlockFallOffBridge()的调用是不?它存储了玩家可以完成的各种各样的成就,比如“杀死1000只猴子恶魔”,“从桥上掉下去”,或者“一命通关”。我们喜欢的是,照旧,让关注游戏一部分的所有代码集成到一块。观察者模式是一种行为型设计模式,它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,其所有依赖者都会收到通知并自动更新。此时最坏的结果是新加入的或移除的,不能及时通知或处理,但总比死锁好。

2025-11-10 00:08:51 237

原创 享元设计模式

1000 个士兵中,“造型”“血量”“攻击力” 是完全一样的(固定属性),但每个士兵的 “位置” 不同(动态变化)。假设你在开发一款战争游戏,屏幕上需要显示 1000 个相同造型的士兵(比如都是 “步兵”),每个士兵会在不同位置移动、攻击。外部状态(外部化):每个士兵独有的属性,比如 “位置”,不存储在共享对象里,而是单独记录(比如存在一个 “位置列表” 中)。内部状态(共享):所有士兵都一样的属性,比如 “造型”“血量”“攻击力”,只需要保存一份,让所有士兵共享。

2025-11-09 21:55:33 234

原创 命令设计模式

定义:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化; 对请求排队或记录请求日志,以及支持可撤销的操作。假设手柄上有BCX等按钮,默认的功能如下。玩家按下按键之后,执行对应的操作。如果,支持按键自定义行为呢?首先想到的是,保存按键和对应的行为。用户按下的时候,来判断即可。在命令中传入player,是因为玩家的属性不同,那么跳跃、移动的力度、方式也可能不同。命令模式还能用来对请求排队或记录请求日志,以及支持可撤销的操作。因为每一个命令,都会调用execute(),在这个方法里面,

2025-11-08 16:53:58 228

原创 子线程如何得到父线程的值ThreadLocal

因为在new Thread()的时候,会初始化inheritableThreadLocals。后续线程都是复用的,自然不会再次赋值inheritableThreadLocals。子线程无法获取ThreadLocal里面的值。因为ThreadLocal本身就是线程隔离的。模拟场景:用户登录之后,发起业务调用,业务场景会使用线程池。需要把用户信息透传到子线程中。那么使用InheritableThreadLocal呢?只会输出0,1,2,没有后续的值。

2025-11-03 11:08:24 196

原创 设计模式-工厂模式

工厂模式,它诞生的本质是为了应对软件系统中对象创建的复杂性、变化性,以及提高代码的可维护性和扩展性。当系统中对象的创建逻辑可能频繁变化(例如实现类替换、创建流程调整)时,工厂模式能显著降低修改成本,让代码更健壮。你在写物流相关的代码。有很多载具,他们可以运输货物。根据SOLID原则,代码很多地步不符合。如果运输类型再增加,只能增加if-else,和开闭原则冲突;如果不同载具的deliver()方法的入参不同,有的需要3个,有的需要四个,那么就是高层依赖于低层模块,违反依赖倒置;

2025-10-29 17:41:03 365

原创 mysql的事务、锁以及MVCC

一般默认是RR,即可重复读。如果是互联网公司,为了避免锁等待,一般是RC。读未提交(Read Uncommitted)会导致脏读。读到了其他事务还没提交的数读已提交RC(Read Committed)一个事务只能读取到其他事务已经提交的更改。会导致不可重读:由于另一个事务提交的影响,导致两次读取的结果不一样。可重复读RR(Repeatable Read)默认的隔离级别。在这个级别下,保证在同一个事务内,多次读取的结果是一致的。但是会有幻读问题,幻读是一种特殊的不可重复读。

2025-10-29 14:35:34 1254

转载 本地mysql数据库密码忘了

来自:https://blog.csdn.net/asdfwxy/article/details/148687841。

2025-09-05 23:07:28 90

原创 通过QPS和并发数定位问题

​​线程池阻塞​​:若使用同步线程模型(如Tomcat默认配置),线程池会被占满,新请求进入等待队列,最终导致队列溢出(RejectedExecutionException)。​​数据库连接池耗尽​​:若每个请求依赖数据库操作,连接池会被占满,触发CannotGetJdbcConnectionException。​​内存溢出​​:积压的请求可能导致内存中对象堆积,频繁触发GC甚至OutOfMemoryError。每秒到达300个请求,但系统每秒只能处理16个,意味着 ​​每秒积压284个请求​​。

2025-05-13 18:58:16 337

原创 表加字段如何不停机

在执行数据库修改语句前,建议先查询是否存在阻塞的事务,以确保操作顺利进行。可以通过查询INNODB_TRX、INNODB_LOCKS和INNODB_LOCK_WAITS表来获取相关信息。对于大表添加字段的操作,耗时取决于表的数据量和并发情况,通常需要几分钟。为了在不影响业务的情况下添加字段,可以通过拦截器实现不停机操作。具体步骤包括:上线代码、复制表结构、配置Nacos、等待配置更新、添加字段、删除配置、同步数据并删除备份表。拦截器会拦截INSERT语句,将数据写入备份表,确保在添加字段时不影响业务。

2025-05-11 10:59:45 305

原创 git 代码回退操作

第一个reset,是完全把代码回退。适合回退本地个人分支。比如选择hard,然后再强制推送到未保护的分支,实现代码完全回退。相当于你由A该成了B,然后push到了远端,在手动的把代码改回去,然后commit掉,只剩下push了。是把你之前修改的,又改了回来,然后你再push就可以了。第二个,适合有保护性分支的代码回退。

2025-02-24 18:43:21 542

原创 DIP的实际举例

SOLID原则。依赖倒置原则(DIP)的核心是高层模块不应该依赖于低层模块,二者都应该依赖于抽象(接口或抽象类)例如,随着业务的发展,订单总金额的计算规则可能需要根据不同的客户类型或促销活动进行调整。如果最初没有使用接口来抽象计算逻辑,那么可能需要直接修改具体的业务代码,这会增加代码的修改风险和维护成本。而使用接口可以方便地实现不同的计算策略,通过依赖注入等方式进行切换,提高系统的灵活性和可扩展性。接下来我们逐步优化,把他变得满足SRP和OCP、DIP原则了。

2025-02-22 21:06:18 798

原创 mybatis @MapKey(“id“)的坑

sql层的写法如下,本来返回一个map,现在用了mapkey指定id再次map一下。本地还特地验证过,没问题的。在生产上打印了日志,发现该map也是有对应的key的。这段代码生产上报空指针。用的3.5.6版本。

2025-01-23 12:23:02 241

原创 @DS datasource多线程环境下的问题

原因:该版本下,保存数据源的类使用的是InheritableThreadLocal,所以子线程创建的时候,会继承父线程的东西。mybatis-plus的@DS注解,在多线程情况下,导致动态数据源切换有问题。但是也有人觉得使用threadlocal的版本是bug。解决:切换一下版本即可,其他版本使用threadlocal。

2024-11-16 17:07:57 383

原创 文件分块上传

讲了理论,接下来写一个简单的demo,可以实现暂停和恢复上传。核心就是分块上传,可以把代码里面的数据都放到数据库里即可。

2024-10-08 10:20:30 318

原创 idea git stash失败,用shelve替换

不知道啥原因,直接用git bash工具可以stash,出现如下,点击确定。但是idea还是不行。

2024-09-12 19:43:20 419

原创 java 反射

总结一下,方便自己查看按照步骤来:获取class对象,然后实例化,然后调用实例化对象的哪一个方法或者得到他的哪一个变量。

2024-09-01 16:03:24 424

原创 Guarded Suspension 保护性暂定模式 以及嵌套死锁问题

Predicate:保护条件。只有保护条件为真(或为假),才去真正执行目标动作。GuardAction : 抽象了目标动作(里面的call()方法),并关联了目标动作所需的保护条件(predicate)。意思是,如果predicate为真,才去调用call(),否者就去阻塞。当然阻塞和唤醒都是通过Blocker实现的。它的作用是判断保护条件并阻塞调用的线程;唤醒阻塞的线程/*** 在保护条件成立时立即执行目标动作。* 否则阻塞当前线程,直到保护条件成立*//**

2024-08-31 23:59:16 348

原创 Java 线程实现暂停、中止

用户可以开启任务,暂停任务和中止任务。用户开启任务后,可以随时暂停或者中止。暂停后又可以回到原进度继续运行。

2024-08-31 20:49:36 1642

原创 apache httpclient速成

导入依赖。

2024-08-25 20:01:40 1374

原创 索引排序以及explain

explain和索引排序的一些常见问题

2024-07-31 17:23:58 1120

原创 ==和equals的区别以及为什么重写hashcode

equals一般是比较对象的地址,但是具体分析,如integer里面的equal,就是用里面的基本数据类型int的值取比较的。(new Integer这种不生效)这样,生成的两个对象用==就相等了。且两个对象,用equals是相等的,但是hashcode是不相等的。hashcode一样(hash冲突时),euqlas不一定相等,因此,这两个一般需要同时重写。,这和我们的认知相违背。既然这俩对象相等,那么就应该是同一个key。那么会出现:在put时,这两个对象被放到了0和1两个位置,但。

2024-07-29 17:59:36 324

原创 java 字符串a+b到底生成几个对象?

字符串常量池保存在堆里面。为了节约空间,如果常量池里面有,就不需要创建对象,只需要返回常量池里面的引用;如果常量池没有,就先创建常量池里面的对象(方便其他地方用到),然后在堆里面在新建一个对象。

2024-07-29 17:33:14 565

原创 表字段优化

这一章主要是讲表字段的一些优化和陷阱。

2024-07-29 16:28:56 1074

原创 Netty HTTPS服务端高并发宕机案例

导致NioSocketChannel泄漏的可能原因有两个。(1)代码有缺陷,HTTPS客户端关闭连接之后,服务端没有正确关闭连接。(2)服务端负载比较重,客户端超时之后的断连和重连速度超过服务端关闭连接速度,导致服务端的NioSocketChannel发生积压。随着积压数的增加,导致占用的内存快速增加,频繁GC使得服务端处理更慢,积压更严重,最终导致OOM异常。在贴一个NIO的客户端、服务端的模型。不要忘了客户端也可以连接多个服务器,可以用多路复用来增加吞吐量。

2024-07-21 13:24:30 1536 1

原创 IO模型和NIO、BIO、AIO和reactor模型

发现有时经常搞混BIO和reactor模型的关系。这里记录下。

2024-07-21 10:59:58 999

原创 netty channelReadComplete和channelRead执行时机

当收到一个完整的应用层消息报文,channelRead会被触发一次。每次读取完Socket的接收缓冲区的报文,channelReadComplete会被触发一次。

2024-07-21 00:08:44 1308

原创 netty中的异步以及promise分析

Netty,所有的网络I/O操作都是异步执行的。netty 中的API操作,大都是异步的,会返回一个future,如有必要,我们需要监听该future的处理结果 或者同步阻塞等待异步的返回结果。这个基础就是多线程交互:一个线程发生了变化,如何通知另一个线程呢?下面看一下常见的方法或问题。

2024-07-21 00:02:49 1746

原创 ByteBuf释放注意的问题

ByteBuf释放注意的问题

2024-07-20 08:09:20 1367

微信记账前端;微信小程序

微信记账前端

2022-03-16

wav简易音乐播放器java实现

用Java简单实现了WAV音乐播放器的功能,比如添加歌曲,添加歌词,上一首,下一首,随机播放,暂停,顺序播放,进度条,控制音量等简单功能。

2020-03-30

YALE数据库图片训练集

YALE数据库[5]是由耶鲁大学计算视觉与扼制中心创立,包括15位志愿者,每个人有11张不同姿势、光照和表情的图片,共计165张图片,图片均为80*100像素的BMP格式图像。我们将整个数据库分为两个部分,每个人的前5幅图片作为网络的训练使用,后6副图片作为测试使用。

2021-06-28

空空如也

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

TA关注的人

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