自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux中的常见的几种安装软件的方式

【代码】Linux中的常见的几种安装软件的方式。

2024-03-30 17:52:09 239

原创 #!/bin/sh和#!/bin/bash的区别

时,脚本将由系统默认的 Shell 来执行,可能是 Bourne Shell 的实现,也可能是其他兼容的 Shell。前言:都是脚本文件中的 shebang(也称为 hashbang)行,用于指定脚本文件的解释器。,通常是 Bourne Shell 或其兼容版本,比如 Bash 的兼容模式。如果脚本中仅使用了标准的 Shell 功能,使用。是更加通用的做法,因为在大多数系统中都会有默认的 Bourne Shell 或其兼容版本。一般来说,如果脚本中使用了 Bash 特有的功能或语法,应该使用。

2024-03-30 17:44:55 943

原创 Java中的Launcher

在 Java 应用程序启动时,Launcher 会先加载核心类库,然后根据用户提供的类路径和命令行参数来初始化应用程序的运行环境,最终调用用户定义的 main 方法启动应用程序的执行。总之,Launcher 在 Java 中扮演着核心的启动角色,负责加载 Java 运行时环墋、初始化虚拟机,并启动用户的 Java 应用程序。在 Java 中,rt.jar包中的sun.misc.Launcher 是指导 Java 应用程序启动的关键组件。

2024-03-16 12:16:02 408

原创 简单实现个责任链

类:具体的过滤器实现类,分别实现了自己的过滤逻辑,并根据条件判断是否继续传递给下一个过滤器。7.测试类:当请求的数据content为不过滤OneFilter会放行到下个过滤器执行。方法中创建一个匿名抽象类的过滤器实例,并开始责任链的传递处理。,在该方法中通过责任链的方式依次调用下一个过滤器进行处理。类:封装了请求对象,包括全局过滤器列表和请求内容。,并且提供了一个匿名抽象类实现了抽象方法。抽象类:实现了获取下一个过滤器的方法。接口:定义了处理请求的方法。接口:定义了过滤器的方法。

2024-03-14 15:01:24 343

原创 AQS中的CLH

这种方式可以保证在多线程并发访问时,所有请求锁的线程能够按照先来先服务的顺序获取锁,并且能够有效避免死锁和饥饿等问题。AQS(AbstractQueuedSynchronizer)是 Java 中用于实现锁和同步器的基础框架,它使用了一种名为 CLH(Craig, Landin, and Hagersten)的队列算法。因此,AQS 中使用 CLH 队列算法来实现同步器的加锁和释放,从而达到了高效、公平、可扩展的效果。这种方式可以保证所有请求锁的线程按照先来先服务的顺序获取锁,从而达到公平性的效果。

2024-03-10 15:46:04 336

原创 消息队列常见问题

第一种,一般是把异常的消息保存的消息表中,然后定时查看表中消息的状态,如果发送失败就重试。解决:大致思路就是,在发送消息的时候,可以根据相同的key,比如说业务主键,来确定这条消息打入到同一个queue中,然后这个queue也指定一个consumer来消费。也就是说,消息丢失的问题。这里,我们先从消息队列的大致的架构上,我们了解到,大致分为生产者,MQ自身(broker),以及消费者。就kafka而言,设置ack=all,当所有的replica写入成功,才算做写入成功,如果没有成功,就无限重试。

2024-03-08 22:43:06 653

原创 modprobe: FATAL: Module nf_conntrack_ipv4 not found

原因:linux内核版本不兼容,当前内核版本5.4.270-1.el7.elrepo.x86_64。场景:k8s环境搭建时,需要安装ipvs的功能时报错。解决:把其中的nf_conntrack_ipv4替换成。

2024-03-04 20:37:37 503

原创 mybatis的缓存机制

一级缓存:二级缓存:

2024-02-28 22:24:33 548

原创 mbatis应用到的设计模式

BaseExecutor和SimpleExecutor,还有BaseTypeHandler和所有的子类,例如:IntegerTypeHandler。mybatis核心,MapperProxy、ConnectionLogger使用JDK动态代理,excutor.loader包使用了cglib。例如Log的mybatis接口和它对jdbc、log4j等各种日志框架的适配实现。例如Cache包中的cache.decorators子包中各个装饰者的实现。sqlNode和各个子类ChooseSqlNode。

2024-02-27 22:07:51 768

原创 mybatis架构

包含新增、删除、查询、修改接口。其调用方式大致分为两种:一种是基于statementId,一种是基于Mapper接口。另外还维护配置信息的接口。,大致四个方面:参数映射、SQL解析、SQL执行、以及结果处理和映射。:配置加载、事务管理、连接池管理、缓存机制。那么展开解释每层职责。

2024-02-26 21:54:12 908

原创 七种设计原则

通过抽象(接口或抽象类)是各个类或模块实现彼此独立,互不影响,实现模块间的松耦合(面向接口或面向抽象)。也可以理解为,由传统的高层次依赖低层次,或抽象依赖具体实现的反转,即具体依赖于抽象,低层次依赖于高层次。指的是如果使用继承来进行功能扩展的化,不要在子类中去改变父类已经实现的方法。而实通过添加新的方法去扩展父类的功能。说的是类的职责要单子。(面向对象编程中,最核心最基础的一个原则,所有设计模式都是围绕这一原则去实践)对原有的类不做修改,只做扩展。指的是接口的功能要尽量的少。不要一个接口包含太多的功能。

2024-02-24 22:53:01 448 1

原创 自定义持久层框架的思路

一、首先从使用者,也就是项目本身考虑:我们肯定是要引用自定义持久层框架的jar包。那么这里,若想让持久层框架奏效,那么首先得配置吧。思路开始之前,考虑我们为什么做一个这样的框架,答案肯定是为了使用方便。那么怎么就使用方便了。这里先回顾一下,梦开始的时候,使用jdbc完成的一次查询。二、就自定持久层框架本身来讲,其实就是对jdbc代码进行了封装。根据以上的jdbc的查询链路。

2024-02-23 22:14:34 522

原创 利用netty手写rpc框架

这里采用JDK原生的基于接口的动态代理f发。2.客户端:(订阅消费)

2024-02-22 22:09:02 369

原创 flink-cdc使用小结

在flink控制台里把自定义函数的jar包生成一个对应的函数;利用flink-table的TableFunction表函数。

2024-02-21 21:44:29 719

原创 Elasticsearch中可避免的坑

如果没有elasticseach对应的版本的ik,可以下载相近版本ik,并把ik里的properties文件的elaticsearch.version改成应用版本即可。8.默认查询前一万条数据,如果分页导致查询一万条之后的数据,需要设置。6.得分排序时,必需要匹配查询,

2024-02-20 21:53:28 1725

原创 Spring中的@Async作用及使用

前言:@Async 是 Spring 框架提供的一个注解,用于标识一个方法是异步执行的。当一个方法被 @Async 注解修饰时,Spring 将会在方法调用时创建一个。默认情况下,Spring 使用线程池来管理异步方法的执行。默认情况下,Spring 会创建一个新的事务来执行异步方法。通常适用于执行非阻塞、耗时较长的操作,如网络调用、IO 操作等。如果方法需要返回结果,可以使用 Future。来执行该方法,而不是在当前线程中同步执行。,并处理可能抛出的异常。来包装异步操作的结果。来控制事务的传播行为。

2024-02-19 21:28:22 1472 1

原创 netty中的channelRead()与channelRead0()区别

而writeAndFlush()源码中的write()方法是异步执行的,若其正在处理 msg,而此时 SimpleChannelInboundHandler 中的 channelRead()方法执行完毕了,则会将 msg 给释放了。:在netty的api使用中,一般我们自定义处理器类的时候,会继承ChannelInboundHandlerAdapter或者SimpleChannelInboundHandler。而我们在重写channelRead0()方法的时候,有时场景需要处理接收的信息并发回给对端。

2024-02-18 20:55:42 943 1

原创 @Configuration(proxyBeanMethods = false)

Configuration(proxyBeanMethods = false) 是 Spring Framework 5.2开始提供的一个注解,用于标记一个类为配置类。这个注解通常与其他注解(如 @Bean、@ComponentScan、@Import 等)一起使用,用于声明和定义应用程序的配置信息。当 proxyBeanMethods 设置为 true(默认值)时,Spring 会对这些方法进行代理,返回的是代理对象。proxyBeanMethods 是 @Configuration 注解的一个属性,

2024-02-17 12:24:15 1078 1

原创 @RefreshScope作用及使用

@RefreshScope作用及使用

2024-02-17 12:17:15 626 1

原创 用redis时模拟指定key的存放目录

用redis时模拟指定key的存放目录。

2024-02-16 16:04:23 382 1

原创 @ConditionalOnMissingBean作用及使用

在这个例子中,@ConditionalOnMissingBean(type = "com.example.MyService") 意思是:只有当 Spring 容器中不存在类型为 MyService 的 Bean 时,才会创建 myService Bean。

2024-02-16 15:54:25 544 1

原创 @PostConstruct作用

在上面的示例中,init() 方法被 @PostConstruct 注解标记,表示它是对象的初始化方法。当 MyBean 对象被创建后,容器会自动调用 init() 方法,并打印出 "MyBean 初始化完成" 的消息。@PostConstruct 注解用于标记对象的初始化方法,在对象创建后执行一些初始化操作,并在依赖注入完成后提供一个回调机制。@PostConstruct 是 Java EE 的一个注解,

2024-02-16 15:43:23 483 1

原创 @Lazy(value = false)

在 Spring 框架中,@Lazy(false) 是一个用于延迟加载的注解。它可以应用于 Bean 的定义上,用于指示 Spring 容器在启动时立即实例化该 Bean,而不是等到第一次使用时再进行实例化。这种延迟加载的机制可以提高应用程序的启动速度和内存使用效率,避免了不必要的资源浪费。

2024-02-16 15:29:48 412 1

原创 @SpringQueryMap作用及用法

具体来说,@SpringQueryMap注解将会扫描方法参数中的字段或属性,将与查询参数同名的参数值赋值给对应的字段或属性。这样就可以方便地将多个查询参数组合成一个对象,从而简化参数传递和处理过程。@SpringQueryMap是Spring-cloud-openfeign-core包中的一个注解,用于微服务之间的调用,使用于HTTP的get请求将请求参数映射到一个Java对象上。

2024-02-16 12:51:41 590 1

原创 MySQL中的explain某个查询语句后的结果解释

index:完全扫描索引,而不是从数据文件中读取行。作用:可以用于查看一个查询语句的执行计划。eq_ref:使用唯一索引查找相关的行。range:使用索引查找一定范围内的行。const:通过索引一次查找一行数据。ref:使用非唯一索引查找相关的行。all:完全扫描表,而不是使用索引。其中,type列是最重要的列之一。system:只有一行记录的表。

2024-02-16 12:16:15 356 1

原创 easyExcel的使用

ExcelProperty(value = {DevImportConstant.HEAD_WARNING.TEMPLATE_0, "设备地址"},index = 2) //value中的集合包含有头和字段名,按照字段值之前的行数进行存放,index标识索引第几列,从0开始第一列。例如,可以使用 sheet() 方法指定要读取或写入的表单,使用 head() 方法指定对象属性和 Excel 列的映射关系等。// 处理 Excel 中读取到的数据。// 处理完毕后执行的操作。

2024-02-16 12:09:10 1009 1

原创 lombok的注解@SneakyThrows

在Java中,有两种类型的异常:检查型异常(Checked Exceptions)和非检查型异常(Unchecked Exceptions)。检查型异常需要明确的被捕获或者抛出,而非检查型异常则不需要。在编写代码时,如果你不想因为某个检查型异常而在方法中添加throws声明或者使用try-catch语句,那么你可以使用@SneakyThrows注解。@SneakyThrows是Lombok库中的一个注解,它可以。

2024-02-16 11:51:24 354 1

原创 java中某个类是否实现serializable有何区别

被标记为transient的字段不会被序列化,即在对象被序列化时,这些字段的值将被忽略。在Java中,实现Serializable接口的类可以被序列化,这意味着。此外,有一些特殊情况下,某些字段可能不希望被序列化,可以使用。

2024-02-16 11:44:20 360 1

原创 关系数据库查询时,关联表后添加条件,与在where添加条件的区别

例如:SELECT COUNT(*) AS total。

2024-02-16 11:36:21 384 1

原创 redis中的redLock

当一个客户端要获取锁时,会向 N 个独立的 Redis 实例上分别执行 SET 操作,设置相同的锁键(key)、唯一标识符(value)和过期时间(expire time)。RedLock 是一个用于分布式锁的算法,它可以在多个独立的节点上协调并获取一个全局唯一的锁。:释放锁时,客户端需要向所有 N 个 Redis 实例发送 DEL 操作,确保所有节点上的锁都被正确释放。利用多个独立的 Redis 实例来实现分布式锁,通过协调这些实例之间的竞争来确保锁的可靠性。不过中文官网上的内容没有。

2024-02-16 11:13:02 511 1

原创 MySQL中的tinyint(1)和tinyint(4)的区别

注意:显示宽度对于存储的值没有影响,只是在查询结果中显示时的格式控制。

2024-02-16 10:30:13 568 1

原创 mybatis在spring使用时常用的配置

map-underscore-to-camel-case:将数据库字段名中的下划线转换为 Java 实体类中的驼峰式命名法。例如,数据库表中的 first_name 字段将被转换为实体类中的 firstName 属性。 shrink-whitespaces-in-sql:在 SQL 语句中缩小空格。通常情况下,MyBatis 在处理 SQL 语句时会删除多余的空格和换行符,以减小 SQL 语句的大小,提高执行效率。如果你想开启这个功能,可以将该配置项设置为 true。

2024-02-16 10:27:38 369

原创 http中的get和post请求的区别

GET 请求通过 URL 传递参数,而 POST 请求通过请求体 (Request Body) 传递参数。因此 GET 请求的参数会显示在 URL 中,而 POST 请求的参数不会显示在 URL 中,更加安全。 GET 请求通常用于获取资源,而 POST 请求通常用于提交数据。因为 GET 请求的参数会显示在 URL 中,所以它们的长度有限制,而 POST 请求则没有这个限制。 GET 请求是幂等的,即多次请求结果相同,不会对资源产生影响;而 POST 请求不是幂等的,即多次请求可能会对资源产生不同的影

2024-02-16 10:19:18 344

原创 Spring集成redis,并使用自带的缓存注解

true时清除名称为role_details下的所有key。当指定key时,添加key=#key,这个key为方法中的某个参数名。若不存在,则添加名称为manu_details, key为manu_details::roleId的缓存。注意,这里的key为方法总的参数名,key的值为方法的返回值。注意这个使用的场景一般是和业务关联不大,并发量不大,用户不频繁访问时采用的全部删除的策略。1. 引入spring-boot-starter-data-redis的包,标识的方法,可以实时更新缓存。

2024-02-16 10:10:52 441

原创 Java的BIO、NIO、AIO模型

NIO方式适用于连接数目多且连接比较短(轻操作) 的架构, 比如聊天服务器, 弹幕系统, 服务器间通讯,编程比较复杂, JDK1.4 开始支持。2、channel 会注册到 selector 上,由 selector 根据 channel 读写事件的发生将其交由某个空闲的线程处理。同步非阻塞,服务器实现模式为一个线程可以处理多个请求(连接),客户端发送的连接请求都会注册到。1、IO代码里read操作是阻塞操作,如果连接不做数据读写操作会导致线程阻塞,浪费资源。同步阻塞模型,一个客户端连接对应一个处理线程。

2023-11-27 22:24:47 869

空空如也

空空如也

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

TA关注的人

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