
冷知识
文章平均质量分 82
冷知识
刻苦的樊同学
希望和博客的大牛们一起进步,欢迎批评指正!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java手写一个简单的sql解析执行器
是 Java 中处理正则表达式的基础方法,通过它可以将字符串形式的正则表达式编译成Pattern对象,进而使用Matcher对象进行匹配操作。掌握其用法可以方便地实现复杂的字符串匹配和处理逻辑。这句代码通过正则表达式解析简单的 SQLSELECT查询语句,提取关键部分(字段、表名、条件),并忽略大小写。它在实现简单的 SQL 解析器时非常有用。方法是 Java 正则表达式中非常重要的工具,用于提取匹配的子字符串。通过指定捕获组的索引,可以方便地获取正则表达式中定义的各个部分的内容。原创 2025-08-14 09:29:46 · 66 阅读 · 0 评论 -
Shell第一弹资料
理解Shell是什么理解Shell脚本是什么理解为什么学习Shell脚本(Shell脚本程序的作用)linux系统默认的Shell解析器通过编写Shell命令发送给linux内核去执行, 操作就是计算机硬件. 所以Shell命令是用户操作计算机硬件的桥梁,Shell是命令, 类似于windows系统Dos命令Shell是一个门程序设计语言, Shell里面含有变量, 函数, 逻辑控制语句等等sh解析器执行方式语法:sh 脚本文件。原创 2025-08-13 16:19:24 · 718 阅读 · 0 评论 -
openGauss报错:Too many open files,解决方案
从上面的信息可以看出系统级默认限制是1024个,那我们就更改一下这里的数量,设置为DefaultLimitNOFILE=65535:524288,更新后重启数据库。通过上面的步骤一般情况下是可以解决问题的,但是现在我们重启服务后,发现问题依然存在,此时我们查看看一下数据库进程。从上面的数据信息可以得到openGauss的进程ID是180483,下面我们统计一下该进程的打开数量。到此问题找到了,进程实际限制的1024个,但是实际打开了1274个,故报此错误。你也可以指定特定的用户名来仅对特定用户生效。原创 2025-08-13 16:17:14 · 120 阅读 · 0 评论 -
使用PDFBox封装一个简单易用的工具类快速生成pdf文件-非原创
以起始位置至终点一条线,线宽以垂直于起始至终止连线方向发散,例如线宽20,起始位置(0,10),终止位置(500,10)则线实际所占位置为(0,0),(0,20),(500,0),(500,20)所围成的长方形区域。第一个参数 a={3,5} 3表明虚线宽度为3,5表明虚线间隔为5。当a={3}时表明虚线宽度为3,间隔为3。文档左下角为坐标原点,x轴向右从0增加,y轴向上增加。字的位置以左下角为原点向右上方发散。图位置以左下角为原点向右上方发散。2.otf类型字体加载。第二个参数0表明虚线。原创 2025-08-13 16:14:54 · 429 阅读 · 0 评论 -
Netty 对 Java NIO 空轮询问题的处理
摘要: Java NIO在Linux平台使用epoll机制时存在空轮询问题,表现为Selector.select()在没有可处理IO事件时不断被唤醒,导致CPU占用100%。该问题源于底层epoll在socket异常终止(RST)时返回POLLHUP/POLLERR事件,但JDK未在SelectionKey中定义异常事件类型,导致上层无法处理。解决方案包括:JDK层面新增异常事件或扩大事件映射;应用层通过重建Selector(如Netty采用计数器统计空轮询次数,超过阈值512次时重建Selector)来规原创 2025-08-13 16:13:05 · 410 阅读 · 0 评论 -
计算机原理之Linux操作系统(持续完善ING)
操作系统,是计算机科学中的皇冠,它作为一个平台,几乎集结了计算机科学里面的所有知识,如硬件,算法,架构,能够写出一个操作系统的人,无一不是行业里的翘楚或大神级人物,像Linux的创始人Torvalds,Android的创始人安迪·鲁宾,苹果早期电脑系统的开发者史蒂夫-沃兹尼亚克,哪一个不是牛逼的闪闪发光,让人膜拜。核心思想是:只要保存下当前程序执行现场,包括PC值、各寄存器值,那么不管CPU现在执行其他什么程序,都能恢复到上次程序执行的现场,并按照之前的执行顺序继续执行,就当什么事情也没有发送过一样。原创 2025-08-13 16:09:27 · 545 阅读 · 0 评论 -
异步执行获取不到登录态的问题排查(RequestContextHolder.getRequestAttributes()子线程获取问题)
由于是SSO统一认证,因此远程调用必须有登录状态,而我们的登录会话保存在当前请求(也就是主线程)的HttpServletRequest中,通过RequestContextHolder.getRequestAttributes().getRequest()来获取,而通过查看源码,发现RequestAttributes对象是存在ThreadLocal线程本地变量的,那问题可想而知了,问题根本原因就是,创建的子线程无法获取到会话信息,因为会话信息存在在主线程的本地变量里。实际获取到的是空的,然后查看了源码。原创 2025-08-13 16:08:33 · 382 阅读 · 0 评论 -
jstack命令示例(CPU100%&死锁排查流程)
转载自:https://www.cnblogs.com/MuXinu/p/17388443.html。原创 2025-08-13 16:07:20 · 625 阅读 · 0 评论 -
线上服务挂掉的原因排查过程(springboot服务突然不可用)
接口调用时响应很久都没返回,还有一种现象是,出现out of memory错误后,应用占用cpu低,用jstat -gc 进程id查看GC也没有异常,看起来一切都正常,但偏偏无法响应请求。分析结果:请求连接超过了默认的10000,队列阻塞无法接收新的请求。这个接口是HttpRequest发起的远程调用接口,服务部署之后的前段时间是运行正常的,接口正常调用的,过若干天之后,接口就调不通了,状态码400,基于对400错误的理解,就是服务调用方出现了问题,经过百度得出结论。原创 2025-08-13 16:06:21 · 250 阅读 · 0 评论 -
自行研发一个大数据运维中台(拖拉拽自定义算子自动构建成flink算子链并运行)
开发开源的算子肯定是不能用的,只能直接提交到flink平台上,要想在自己平台拖拉拽,只能自己定义一套规则,让开发自定义算子时去遵循这套规则。Class<?Class<?Class<?还有一个自定义注解,用于标注自定义算子的特征信息/*** 名称*/String name() default "未命名";/*** 描述*/String desc() default "开发人员太懒,什么描述也没有";/*** 图标名字*/原创 2025-08-12 14:42:27 · 743 阅读 · 0 评论 -
NIO 是不是就是IO多路复用?NO
似乎从互联网起源,BIO、NIO 的话题就从未间断,无论是平时还是面试。那么他们到底是什么?希望你看完这个文章彻底理解这些概念,同时这边文章也使用 Java 代码实现一个 I/O 多路复用的实例,最后到 I/O 原理。原创 2025-08-12 14:41:07 · 566 阅读 · 0 评论 -
springboot使用redis&lua脚本实现分布式限流starter
由于后续要使用lua脚本来做权限控制,所以必须自定义一个redisTemplate,此处如果不自定义redisTemplate,则执行lua脚本时会报错。原创 2025-08-12 14:35:07 · 383 阅读 · 0 评论 -
Java解决单机环境下多数据源的事务问题
在自定义数据源中注入上边那两个多数据源,维持多数据源执行事务期间用到的连接列表,在自定义数据源中添加事务相关业务,既在获取 连接的地方将 Connection 缓存到 ThreadLocal 中使用了@Primary。原创 2025-08-12 14:33:00 · 206 阅读 · 0 评论 -
Java基于解释器模式实现定义一种简单的语言功能示例
解释器模式:就是给定一个语言的文法表示,并且定义一个解释器,用来解释语言中的句子。解释器模式描述了怎样在有了一个简单的文法后,使用模式设计解释这些语句。原创 2025-08-12 14:03:01 · 300 阅读 · 0 评论 -
手写一个Callable和FutureTask,异步线程执行并得到结果,了解其原理
/ 1. 创建callable@Override// 模拟执行耗时 3秒try {return new User("用户" + new Date().getTime(), "29");// 2.创建futureTask// 3.放到线程中执行// 4.获取返回结果// 5.打印最后,这里是用wait和notify模拟的,还可以使用LockSupport来实现。原创 2025-08-07 10:41:04 · 518 阅读 · 0 评论 -
LangChain4j最新版教学知识库实战
官网:https://docs.langchain4j.dev/LangChain4j的目标是简化与Java应用程序集成大模型。特性:统一API:LLM提供程序(如openai或阿里百炼)和嵌入(向量)存储(如redis或ES)使用专有API。LangChain4j提供了一个统一的API,以避免为每个API学习和特定的API。要实验不同的LLMs存储或嵌入的存储,您可以在他们之间轻松切换,而无需重新编写代码。LangChain4j目前支持15+热门LLM和20+嵌入模型。原创 2025-08-07 10:18:56 · 365 阅读 · 0 评论 -
计算机组成原理和计算机网络的复习
一台可以正常使用的电脑,除了齐全的硬件,还要有完善的软件,两者是相辅相成的,硬件指的就是硬件,很多朋友以为软件指的就是我们使用的操作系统,其实电脑主板上面还有一个系统,这也就是我们说的BIOS系统,这个系统我们一般情况下用不到的,正常是在安装系统,硬件超频的时候才能用得到,BIOS其实是英文Basic Input Output System的缩写,意思是基本输入输出系统,它是电脑启动时加载的第一个软件,它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序。原创 2024-11-14 10:20:16 · 1022 阅读 · 0 评论 -
深入浅出MappedByteBuffer多线程 Map映射 快速处理大文件
java io操作中通常采用BufferedReader,BufferedInputStream等带缓冲的IO类处理大文件,不过java nio中引入了一种基于MappedByteBuffer操作大文件的方式,其读写性能极高,本文会介绍其性能如此高的内部实现原理。内存管理MMU:CPU的内存管理单元。物理内存:即内存条的内存空间。虚拟内存:计算机系统内存管理的一种技术。原创 2024-11-14 10:18:30 · 1034 阅读 · 0 评论 -
实现一个任务调度引擎系统
【代码】实现一个任务调度引擎系统。原创 2024-11-14 10:13:55 · 400 阅读 · 0 评论 -
难难难难难难难!美团追魂七连问!关于Object o = new Object()创建对象的问题
看下图,比如thread1第一次进来,判断是否为空,为空,拿到锁之后创建对象,但是创建对象有三步(申请空间,初始化,关联),但是这里发生了指令重排序,申请了空间,并进行了关联,但此刻并未初始化(对象有了,数据为空),此时thread2进来了,判断是否为空,不为空,不为空的话,直接就拿走对象用了,其实这个对象的数据都是未初始化的数据,因此就错了。有同学想问,字符串的长度不一样长,为何字节一直是4个字节?默认压缩,占4个字节,不压缩占8个字节,实例数据有多少就占多少,类型指针指向创建的类,此处指针指向。原创 2024-11-14 10:07:43 · 442 阅读 · 0 评论 -
自己手动写一个红黑树&&红黑树原理分析
*2.左旋:**以某个结点作为支点(旋转结点),其右子结点变为旋转结点的父结点,右子结点的左子结点变为旋转结点的右子结点,左子结点保持不变。**3.右旋:**以某个结点作为支点(旋转结点),其左子结点变为旋转结点的父结点,左子结点的右子结点变为旋转结点的左子结点,右子结点保持不变。但左子树和右子树的黑结点的层数是相等的,也即任意一个结点到到每个叶子结点的路径都包含数量相同的黑结点(性质5)。由于插入的结点是红色的,当插入结点的黑色时,并不会影响红黑树的平衡,直接插入即可,无需做自平衡。原创 2024-11-14 10:06:24 · 620 阅读 · 0 评论 -
自己手动写一个基于LinkedList的消息队列(监听机制&&实时消费)
其实到这里,消息注册和消息消费已经实现了,但是我们想要做到的是一个可以自动消费消息的队列,所以思路是,我们要在项目启动时,就将消费者处于就绪状态,提供者发送消息后,消费者可以实时进行消费。首先我们想要设计一个方案的时候,要先捋清楚思路,想一下现有的,别人已经实现的方案,然后思考自己如何才能实现。我们看到,当项目启动的时候,消费者已经处于就绪状态,队列中没有消息,所以处于堵塞状态,当监听到消息后,立马工作进行消费。可以看到,提供者第一次注册消息时,将队列唤醒,并注册到队列中,消费者监听到消息,立马开始工作。原创 2024-11-14 10:05:19 · 419 阅读 · 0 评论 -
自己手动写一个HashMap
【代码】自己手动写一个HashMap。原创 2024-11-14 10:04:30 · 434 阅读 · 0 评论 -
手写一个@Transactional注解,实现事务回滚
*** 自定义事务注解* 空注解,用来标识*//*** 将自定义的事务注解,使用AOP的方式,来增强它的功能*/@Aspect@Component@Autowired/*** 让标记着@myTransactional注解的方法,不直接调用,而是在该方法前后增加代码,增强该方法功能。原创 2024-11-14 10:03:14 · 305 阅读 · 0 评论 -
手撸一个ThreadPool线程池(源码简化版)
线程池由任务队列和工作线程组成,它可以重用线程来避免线程创建的开销,在任务过多时通过排队避免创建过多线程来减少系统资源消耗和竞争,确保任务有序完成。更多介绍参考文章:https://www.imooc.com/article/51147B站视频地址:https://space.bilibili.com/512437822。原创 2024-11-13 10:28:41 · 387 阅读 · 0 评论 -
Apache Camel的认识和应用详解
apache camel官网:https://camel.apache.org/apache camel 是轻量级ESB框架(什么是ESB框架?endpoint,所谓的endpoint,就是一种可以接收或发送数据的组件。可以支持多种协议,如jms,http,file等。processor,它是用来处理具体业务逻辑的组件。route,用来路由,指示数据从哪里来到哪里去,中间用哪个processor处理。原创 2024-11-13 10:28:00 · 3532 阅读 · 0 评论 -
Netty实现FTP服务器(少点儿罗嗦,多点儿干货)
【代码】Netty实现FTP服务器(少点儿罗嗦,多点儿干货)原创 2024-11-13 10:27:06 · 445 阅读 · 0 评论 -
手写一个AQS队列同步器锁 高仿AbstractQueuedSynchronizer抽象队列同步器 AQS同步器核心原理剖析(自旋+LockSupport+CAS)
现在有一个场景,就是很经典的减库存高并发的场景,以下是伪代码//查询库存//如果库存数量>0,库存减1//如果库存数量<0,减库存失败假如数据库的库存数量是5,如果是高并发的情况下(30个线程同时减库存),没有加synchronize同步锁,结果将如何?结果是,下单成功的数量远远大于5,为什么?原创 2024-11-13 10:24:47 · 760 阅读 · 0 评论 -
记一次springboot下载Excel模板,Excel表损坏问题
当前开发一个Excel表模板下载功能,模板读取和模板下载都是么有问题的,但打开Excel表示提示,文件已损坏。{db.url},那么如果配置了db.url=aaa的话,在项目编译的时候,就会自动的把${db.url}替换为aaa。问题根因是在maven编译时Excel模板表就已经被损坏了,下载一个已经被损坏的Excel表肯定是无法打开的。这里就有新问题了,为啥Excel表在编译后会被损坏,这里就涉及到maven resource标签的使用。主要用来替换项目中的资源文件(.properties)当中的。原创 2024-11-13 10:24:00 · 403 阅读 · 0 评论 -
用JAVA实现大文件上传及显示进度信息
文章转自:https://www.cnblogs.com/darkprince/p/5114936.html原创源码(参考):https://gitee.com/fanjiangfeng/UploadBigFile我的源码:https://gitee.com/fanjiangfeng/xxx_edu。原创 2024-11-13 10:20:38 · 1510 阅读 · 0 评论 -
Linux_Shell脚本的艰辛之路(初级篇)
定义变量:变量名=变量值,变量名必须以字母或下划线开头,区分大小写 ip=1引用变量:$变量名 或 ${变量名}查看变量:echo $变量名 set(所有变量:包括自定义变量和环境变量)取消变量:unset 变量名作用范围:仅在当前shell中有效环境变量:方法一:export dir=/home/test方法二:export dir 将自定义变量转换成环境变量变量名或变量名或变量名或{变量名}原创 2024-11-13 10:09:32 · 588 阅读 · 0 评论 -
对Jar包的启动指定Jre环境(用于配置单体应用或单机版项目)
一个Java应用用到的JRE版本可能不同,也没毛病,可是如果换一台机器就要装一次环境,换一台装一次,太累了,确实太累了。今天就说一个贼简单的方法,来实现spring boot 应用指定jre 环境 启动,不依赖于java_home 或 path。第一种是在jar包的同一目录下建一个config文件夹,然后把配置文件放到这个文件夹下。elasticsearch-1.0.jar >> 这个是我springboot 的应用了。jre1.8.0_151 >> 这个是我的应用yila依赖的环境。原创 2024-11-12 10:31:30 · 733 阅读 · 0 评论 -
Linux搭建Jenkins持续集成并给出连接gogs仓库对springboot工程自动部署的所需内容
Linux安装Jenkins:https://www.cnblogs.com/wintest/p/12182067.htmlJenkins可选插件为空怎么办?如果在插件列表找不到插件或者安装插件失败,可以选择手动下载插件并在高级页进行上传。这里maven-plugin.hpi文件就是下载手动上传安装的。Linux安装配置Maven:https://blog.csdn.net/zjh_746140129/article/details/79017448。原创 2024-11-12 10:30:47 · 434 阅读 · 0 评论 -
python爬虫从基础到实战一站式服务
问题:什么是selenium?selinium和爬虫之间具有怎样的关联?便捷的获取网站中动态加载的数据便捷实现模拟登录基于浏览器自动化的一个模块(可以直接操作浏览器,类似无人驾驶去自动驾驶的效果)selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题 selenium本质是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等,来拿到网页渲染之后的结果,可支持多种浏览器。原创 2024-11-12 10:29:40 · 870 阅读 · 0 评论 -
file和multipartfile相互转化及其poi提取图片
上传的excel其中有一个byte数组转为MultipartFile的过程。原创 2024-11-12 10:28:47 · 500 阅读 · 0 评论 -
写一个自己的platEntity模块-自定义加密注解实现dao层和数据库交互时对指定属性进行加解密
有一些场景,比如新增一个用户,实体类User类其中密码字段是要加密之后存储到数据库的,我们平时的操作是什么?从前台传来的password字段取出并手动进行加密,然后存入User表,取出的时候还需要进行解密,然后返回明文密码的列表。platEntity简化了这一切加解密的过程,使用platEntity之后再也不用手动加解密,只需要一个注解就可以实现复杂的逻辑,而且使用灵活方便,可以控制加密方式,是否加密,返回的列表中的字段值是否要解密。原创 2024-11-12 10:26:31 · 318 阅读 · 0 评论 -
request请求的body中的参数(json对象)只能取出一次,参数丢失问题的解决方式(防sql注入过滤器的应用)
在项目即将上线的渗透测试报告中检测出了sql注入的问题,关于这个问题的解决方案,最初的思路是写一个全局的过滤器,对所有请求的参数进行过滤拦截,如果存在和sql注入相关的特殊字符则拦截掉,具体细节展开以下讨论!(当然要提供一个白名单,白名单里的请求不给予过滤)原创 2024-11-12 10:25:47 · 548 阅读 · 0 评论 -
干掉了传统if-else的竟然是它!太长见识了![策略模式的具体实现]
Inherited凡事都有他的两面性,if-else多层嵌套和也都有其各自的优缺点:if-else的优点就是简单,想快速迭代功能,逻辑嵌套少且不会持续增加,if-else更好些,缺点也是显而易见,代码臃肿繁琐不便于维护。策略模式 将各个场景的逻辑剥离出来维护,同一抽象类有多个子类,需要使用if-else 或者 switch-case 来选择具体子类时,建议选策略模式,他的缺点就是会产生比较多的策略类文件。原创 2024-11-12 10:25:12 · 290 阅读 · 0 评论 -
基于python的opencv的学习和实战
版本说明:这里使用的python版本是3.8.3,opencv版本4.4.0,opencv-contrib-python版本是4.5.1.48(都是高版本,所以会踩坑,虽然LZ会踩坑,但总会把问题解决掉的)pip命令直接安装检验方法(这里的版本是4.4.0)还需要安装配套使用的opencv-contrib-python(最好版本一致)原创 2024-11-12 10:24:18 · 773 阅读 · 0 评论 -
手写springboot属于自己的starter源码
创建独立的Spring应用内嵌Tomcat、Jetty或Undertow(无需部署war包)提供自用的starter来简化构建配置提供指标监控、运行状况检查和外部化配置没有代码生成,也不需要XML配置(约定大于配置)在我们的日常开发工作中,经常会有一些独立于业务之外的配置模块,我们经常将其放到一个特定的包下,然后如果另一个工程需要复用这块功能的时候,需要将代码硬拷贝到另一个工程,重新集成一遍,麻烦至极。如果我们将这些可独立于业务代码之外的功配置模块封装成一个个starter。原创 2024-11-11 10:29:10 · 902 阅读 · 0 评论