自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(348)
  • 资源 (6)
  • 问答 (2)
  • 收藏
  • 关注

原创 No space left on device

删除掉/home这个节点下面比较占内存的文件即可。

2024-05-07 09:02:38 2276

原创 解决Oracle锁表的方法

在实际工作中,并发量比较大的项目,经常会出现锁表的问题,下面我将复现这个问题,并给出解决方法。

2024-04-24 11:33:02 4012

原创 CountDownLatch使用错误+未最终断开连接导致线程池资源耗尽

我设置了CountDownLatch对线程的协作做出了一些限制,但是我发现运行一段时间以后便发现定时任务不运行了。报错以后定时任务不运行了这是线程运行的状态,一直在等待状态并没有被释放,因此没有再执行任务。

2024-04-23 09:50:49 4240

原创 换行符导致字符串无法匹配

然后我用接口调的时候发现了异常,这个数据的前面有个换行符,但是用navicat之类的工具是看不出来的,因此对于备注这种东西最好用like来进行sql匹配。但是我使用navicat查看列表的时候并没有发现什么异常。我运行一句sql的时候,发现对应的字段查询不出结果。

2024-04-22 17:55:15 4073

原创 fastjson转换json时默认将属性第一个字母转小写

我新建了一个实体类,但是实体类的首字母是大写的,但是使用fastjson后打印的,Json字符串首字母却是小写的,这是fastjson的一个bug实体类: Json字符串:实体类上使用@JSONField注解以后就变正常了。代码修改如下:运行效果:

2024-04-19 16:52:14 4176

原创 SpringBoot日志打印控制

【代码】SpringBoot日志打印控制。

2024-04-11 11:40:02 5057

原创 未提交事务直接返回,导致连接池资源耗尽

我所撰写的代码如下,在使用编程式事务的时候,我未提交或回滚事务就直接返回,因为连接池默认连接数的大小是10,所以到第十一次的时候连接池就会使用完,导致任务无法进行。接口无法给予响应。

2024-04-11 11:15:36 4981

原创 未设置超时时间导致线程池资源耗尽,排查过程

我们一般认为线程处于blocked状态的时候线程才是处于阻塞状态,但是这个状态只是对于计算机来说的。对于我们来说,只要业务不执行了,线程就是处于阻塞状态的,因此任何状态下的线程对于业务来说都是阻塞的。

2024-04-10 16:57:15 5235 2

原创 Connection pool exhausted - try increasing ‘maxPoolSize‘ and/or ‘borrowConnectionTimeout‘ on the Dat

使用Atomikos这个插件配置参数AtomikosDataSourceBean时忘记配置MinPoolSize,MaxPoolSize,BorrowConnectionTimeout这三个参数,导致连接池资源耗尽。调接口时反应及慢,迟迟不响应,之后提示下面的报错。

2024-03-29 17:31:36 6290

原创 ORACLE常用SQL语句

【代码】ORACLE常用SQL语句。

2024-03-14 22:11:51 4943

原创 Atomikos常见问题

运行代码后事务不生效,即使发生了错误也无法回滚,数据仍然插入成功。此时事务生效,都没有插入成功。

2024-02-22 10:00:28 7179

原创 你们见过最老的项目有多老,我负责的项目在我没出生前就运行了

2024-02-19 15:06:13 7213

原创 使用C++从零开始,自己写一个MiniWeb

初始化可以分为五步:1、网络通讯初始化===>>>2、创建套接字===>>>3、绑定端口===>>>4、绑定套接字===>>>5、创建监听队列。浏览器发起新的访问时,会向服务器端发送一个请求报文。请求报文由4四个部分组成:请求行、请求头部行、空行、请求数据。在http.cpp最上面引入依赖,并撰写main方法,打印错误日志的方法。4、右击源文件,点击添加,新建http.cpp文件。2、选择空项目并点下一步(切记不能选错项目类型)3、填写项目名称和路径,点击创建即可。1、打开VS点击创建新项目。

2024-02-11 21:19:21 9643

原创 发现推特bug,建议加大应用启动时申请的内存并退位让贤,让我管理推特

发现推特bug,建议加大应用启动时申请的内存并退位让贤,让我管理推特

2024-01-29 10:55:01 6978

原创 MySQL中的free链表,flush链表,LRU链表

你在执行增删改的时候,如果发现数据页没缓存,那么必然会基于free链表找到一个空闲的缓存页,然后读取到缓存页里去,但是如果已经缓存了,那么下一次就必然会直接使用缓存页。反正不管怎么样,你要更新的数据页都会在Buffer Pool的缓存页里,供你在内存中直接执行增删改的操作。接着你肯定会去更新Buffer Pool的缓存页中的数据,此时一旦你更新了缓存页中的数据,那么缓存页里的数据和磁盘上的数据页里的数据,是不是就不一致了?这个时候,我们就说缓存页是脏数据,脏页。

2023-08-28 15:05:37 8235

原创 MySQL中的Buffer Pool

一、概述一、概述Buffer Pool是数据库的一个内存组件,里面缓存了磁盘上的真实数据,然后我们的Java系统对数据库执行的增删改操作,其实主要就是对这个内存数据结构中的缓存数据执行的。我们先来看一下下面的图,里面就画了数据库中的Buffer Pool内存组件。

2023-08-27 17:05:37 7504

原创 MySQL执行更新的流程

引擎要执行更新语句的时候 ,比如对“id=10”这一行数据,他其实会先将“id=10”这一行数据看看是否在缓冲池里,如果不在的话,那么会直接从磁盘里加载到缓冲池里来,而且接着还会对这行记录加独占锁。

2023-08-27 16:30:56 8018

原创 死锁产生的4个必要条件

1 . 产生死锁的必要条件:(1)互斥条件:进程要求对所分配的资源进行排它性控制,即在一段时间内某资源仅为一进程所占用。(2)请求和保持条件:当进程因请求资源而阻塞时,对已获得的资源保持不放。(3)不剥夺条件:进程已获得的资源在未使用完之前,不能剥夺,只能在使用完时由自己释放。(4)环路等待条件:在发生死锁时,必然存在一个进程–资源的环形链。解决死锁的基本方法2 . 预防死锁:(1)资源一次性分配:一次性分配所有资源,这样就不会再有请求了:(破坏请求条件)

2023-08-19 22:19:25 7341

原创 线程池原理

线程池,按照配置参数(核心线程数、最大线程数等)创建并管理若干线程对象,没有任务的时候,这些线程都处于等待空闲状态。如果有新的线程任务,就分配一个空闲线程执行。如果所有线程都处于忙碌状态,线程池会创建一个新线程进行处理或者放入队列(工作队列)中等待。

2023-08-19 22:04:29 8006

原创 池化技术介绍

提前保存大量的资源,以备不时之需以及重复使用。池化技术应用广泛,如内存池,线程池,连接池等等。内存池相关的内容,建议看看 Apache、Nginx 等开源 web 服务器的内存池实现。由于在实际应用当做,分配内存、创建进程、线程都会设计到一些系统调用,系统调用需要导致程序从用户态切换到内核态,是非常耗时的操作。因此,当程序中需要频繁的进行内存申请释放,进程、线程创建销毁等操作时,通常会使用内存池、进程池、线程池技术来提升程序的性能。

2023-08-19 21:41:27 7021

原创 服务的拆分

标准是按照业务的关联程度来决定,关联比较密切的业务适合拆分为一个微服务,而功能相对比较独立的业务适合单独拆分为一个微服务。以社交App为例,你可以认为首页信息流是一个服务,评论是一个服务,消息通知是一个服务,个人主页也是一个服务。

2023-08-19 21:01:40 7102

原创 Java编译器中的优化技术

Java中的热点代码主要有两类,包括:1、被多次调用的方法。2、被多次执行的循环体。前者很好理解,一个方法被调用得多了,方法体内代码执行的次数自然就多,它成为热点代码是理所当然的。而后者则是为了解决当一个方法只被调用过一次或少量的几次,但是方法体内部存在循环次数较多的循环体,这样循环体的代码也被重复执行多次,因此这些代码也应该认为是“热点代码”。对于这两种情况,编译的目标对象都是整个方法体,而不会是单独的循环体。

2023-07-26 22:31:26 7210

原创 自己动手写一个编译器

Pcode 是 TinyC 编译器的中间代码,是本人参考 pascal 编译器的中间代码 pcode 、并结合逆波兰表达式(后缀表达式)的逻辑后,设计出的一种非常简单的、基于栈和符号表的虚拟代码。Pcode 虚拟机是一个用来运行 Pcode 命令的、假想的机器,它包括:一个代码区(code)、一个指令指针(eip)、一个栈(stack)、一个变量表(var_table)、一个函数表(func_table)以及一个标签表(label_table)。

2023-07-25 14:38:14 10928

原创 封装hiredis成dll包,为老项目提供redis网络支持

1、需要下载window8.1的SDK否则无法下载2、平台工具集需要使用Visual Studio 2015(v140)

2023-07-19 15:37:19 7314

原创 封装cpp-httplib成dll包,为老项目提供http网络支持

公司内某些老的项目不支持https或者http1.1的一些新功能,需要开发对应的SDK供其调用,以便维护老项目。

2023-07-19 08:40:31 7705

原创 环形链表(快慢指针)

给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递。仅仅是为了标识链表的实际情况。如果链表中存在环 ,则返回 true。否则,返回 false。

2023-07-12 21:38:42 7026

原创 通过反射机制获取父类在内的所有属性字段

我之前写的通过反射拿到接口入参是这样写的,但是这样写有一个问题,就是无法获得父类的参数信息,导致日志无法打印出全部参数。

2023-07-12 21:03:10 8354

原创 Web项目中耗时操作,用异步请求,减少请求等待时间,使用Redis保证操作幂等性

最近项目中碰到了一个接口需要比较耗时的操作,但是我们公司前后端交互的网关设置了超时时间。因此我需要设置出一个方案保证给用户比较快的响应,又保证任务执行了。因此我采用了,下面的操作方式。客户端发送请求后,我会先去Redis中检查是否还有任务在执行,如果有则不开启异步线程,如果没有则开启异步线程进行数据的业务操作。下面就是我写的伪代码。

2023-07-09 22:31:27 7228

原创 Redis 为什么这么快?

决定 Redis 请求效率的因素主要是三个方面,分别是网络、cpu、内存。在网络层面,Redis 采用多路复用的设计,提升了并发处理的连接数,不过这个阶段, Server 端的所有 IO 操作,都是由同一个主线程处理的这个时候 IO 的瓶颈就会影响到 Redis 端的整体处理性能。所以从 Redis6.0 开始,在多路复用及层面增加了多线程的处理,来优化 IO 处理的能力不过,具体的数据操作仍然是由主线程来处理的,所以我们可以认为 Redis 对于数据 IO的处理依然是单线程。

2023-07-04 09:36:31 6815

原创 Spring Bean 作用域的定义

3、request,用来定义一个作用范围仅在 request 中的 Bean,也就是说在每次 HTTP。4、session,用来定义一个作用范围仅在 session 中的 Bean,也就是说在每次 HTTP。2、prototype,用来定义一个 Bean 为多例,也就是说在每次请求获取 Bean 的时都会。5、globalSession,用来定义一个作用范围仅在中的 Bean。的一个实例对象,Spring 中的 Bean 默认都是单例的。重新创建实例,因此每次获取到的实例对象都是不同的。

2023-07-03 17:21:07 7245

原创 Nacos 配置更新的工作流程

Nacos Client 端需要获取服务端变更的配置,前提是要有一个比较, 也就是拿客户端本地的配置信息和服务端的配置信息进行比较。一旦发现和服务端的配置有差异,就表示服务端配置有更新,于是把更新的配置拉到本 地。在这个过程中,有可能因为客户端配置比较多,导致比较的时间较长,使得配置同步较慢的问题。所谓长轮训,(如图)就是客户端发起一次轮训请求到服务端,当服务端配置没有任何变更的时候,这个连接一直打开。进行判断,服务端会逐个比较这些配置中 md5 不同的 key,把存在更新的 key 返回给。

2023-07-02 14:46:39 7301

原创 零拷贝原理

须要经过几个拷贝的过程。从磁盘中读取目标文件内容拷贝到内核缓冲区,CPU 控制器再把内核缓冲区的数据赋值到用户空间的缓冲区中, 接着在应用程序中,调用 write() 方法,把用户空间缓冲区中的数据拷贝到内核下的 Socket Buffer 中。最后,把在内核模式下的 SocketBuffer 中的数据赋值到网卡缓冲区(NIC Buffer)网卡缓冲区再把数据传输到目标服务器上。在这个流程中,数据只经历了两次拷贝就发送到了网卡中,并且减少了 2 次 cpu 的上下文切换,对于效率有非常大的提高。

2023-07-01 15:39:47 7018

原创 Java的SPI

不过,在Java里面并没有提供实现,因为不同的数据库厂商,会有不同的语法和实现。所以只能由第三方数据库厂商来实现,比如Oracle是oracle.jdbc.OracleDriver,mysql是com.mysql.jdbc.Driver. 然后在应用开发的时候,根据集成的驱动实现连接到对应数据库。然后第三方可以实现这个接口来完成功能的扩展和实现。实例化会造成性能开销,并且加载一些不需要用到的实现类,会导致内存资源的浪费,在这个目录下,以接口的全限定名命名的配置文件,文件内容是这个接口的实现类。

2023-07-01 11:58:23 7153

原创 String、StringBuffer、StringBuilder 区别

最后是 StringBuilder,它比 StringBuffer 的性能高,因为 StringBuffer 加了同步锁。String 内部的 value 值是 final 修饰的,所以它是不可变类。所以每次修改 String 的值,StringBuffer 和 StringBuilder 是可变类,字符串的变更不会产生新的对象。String 的性能是最的低的,因为不可变意味着在做字符串拼接和修改的时候,需要重新。String 是不可变类,所以它是线程安全的。StringBuilder 不是线程安全的。

2023-07-01 11:36:37 7042

原创 受检异常和非受检异常

所以,除了 Error 和 RuntimeException 及派生类以外,其他异常都是属于受检异常,所谓的受检异常,表示在编译的时候强制检查的异常,这种异常需要显示的通过。而非受检异常,表示在编译器可以不需要强制检查的异常,这种异常不需要显示去捕捉。比如数据库异常、文件读取异常,这些异常是程序无法提前预料到的,但是一旦出现问。Exception 表示程序中的异常,可能是由于程序不严谨导致的,比如。这种异常和程序本身无关,所以不需要检查,属于非受检异常。行时异常,也是属于非受检异常。

2023-07-01 11:28:19 7200

原创 new String(“abc“)到底创建了几个对象?

1. 如果 abc 这个字符串常量不存在,则创建两个对象,分别是 abc 这个字符串常量,首先,这个代码里面有一个 new 关键字,这个关键字是在程序运行时,根据已经加载。象引用,如果拿不到,就会在堆内存里面创建一个”abc”的 String 对象。abc”的引用,所以只需要从常量池获取对应的引用就可以了,不需要再创建。的字符串成员变量是 final 修饰的,所以它是一个字符串常量。然后,在这个 String 的构造方法里面,传递了一个“abc”的定义,因为字符串常量池里面已经存在了字面量。

2023-07-01 11:24:38 6916

原创 JDK 动态代理为什么只能代理有接口的类?

嗯,这个问题的核心本质,是 JDK 动态代理本身的机制来决定的。首先,在 Java 里面,动态代理是通过 Proxy.newProxyInstance()方法来实现的,它需 要传入被动态代理的接口类。2. 在 Java 里面,类的继承关系的设计,更多的是考虑到共性能力的抽象,从而提高。动态代理的实现规范),所以就导致 JDK 里面的动态代理只能代理接口,而不能代理。代码的重用性和扩展性,而动态代理也是在做这样一个事情,它封装了动态代理类。口的,那这个时候,JDK 动态代理确实无法满足。

2023-07-01 11:14:25 7268

原创 fail-safe 机制与 fail-fast 机制分别有什么作用

由于迭代时是对原集合的拷贝进行遍历,所以在遍历过程中 对原集合所作的修改并不能被迭代器检测到比如这种情况 , 定义了一个 CopyOnWriteArrayList,在对这个集合遍历过程中,对集合元素做修改后,不会抛出异常,但同时也不会打印出增加的元素。Fail-fast : 表示快速失败,在集合遍历过程中,一旦发现容器中的数据被修改了,会立刻抛ConcurrentModificationException 异常,从而导致遍历失败,像这种情况。

2023-06-30 17:26:24 7184

原创 ThreadLocal使用与原理

ThreadLocal叫做线程变量,意思是ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的,也就是说该变量是当前线程独有的变量。ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。ThreadLoal 变量,线程局部变量,同一个 ThreadLocal 所包含的对象,在不同的 Thread 中有不同的副本。这里有几点需要注意:因为每个 Thread 内有自己的实例副本,且该副本只能由当前 Thread 使用。

2023-06-30 15:46:00 7599

原创 EasyExcel时间处理时的bug,希望阿里不要不识好歹,尽快修复这个bug。

我使用阿里的EasyExcel进行数据导入,但是我发现它录入的时间和表格上的数据不一样。Excel中录入的时间是7:30:00和21:20:00,但是实际读取的数据是7:30:00 上午,9:20:00 下午,导致我数据录入失败。

2023-06-30 10:37:20 7095

PB6.5学习资料,内含参考书目

PB6.5学习资料,内含参考书目

2024-03-08

Linux版本的nasm安装包

Linux版本的nasm安装包

2023-07-25

智慧社区管理文件,可作为学年论文项目,也可作为练手项目

项目使用技术:springboot+vue+element+js+axios+html5+bootstrap+shiro+maven,涉及到初级的增删改查功能。

2022-05-23

常见java面试题部分附解析

常见java面试题部分附解析

2022-05-23

批量发送邮件的脚本,适合较小的机构进行邮件批量发送

批量发送邮件的脚本,适合较小的机构进行邮件批量发送

2022-03-20

利用python在boss网页版上自动与合适的候选人打招呼

利用python在boss网页版上自动与合适的候选人打招呼,简单易用减少HR工作量

2022-03-20

图书管理系统,该系统运用java驱动mysql,内含大量基础操作,阅读代码有利于提升基础操作水平。

图书管理系统,该系统运用java驱动mysql,内含大量基础操作,阅读代码有利于提升基础操作水平。

2022-03-20

最新版 JDBC,版本号为mysql-connector-java-8.0.16

最新版 JDBC可以用java操作数据库

2022-03-20

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

TA关注的人

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