自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java语法day1

2、给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。1、给你一个整数数组 nums ,数组中的元素 互不相同。返回该数组所有可能的子集(幂集)。4、将下列(A、B、C、D)哪个代码替换下列程序中的【代码】不会导致编译错误(A )你可以按 任意顺序 返回解集。1、派生类调用基类的构造器必须用到的关键字(C)【LeetCode题号:78.子集】【中等】【LeetCode题号:77. 组合】【中等】2、以下哪个接口的定义是正确的( D)3、关键字super的作用是(D )

2024-05-01 00:00:31 367 1

原创 Centos7 安装Git、使用

不能管理这个文件:因为还没有添加到暂存区,暂存区没有提交到本地仓库。手动解决冲突,删除冲突代码,然后重新add 和commit。目录里面的叫(仓库)版本库。是其余分支的冲突代码。所在的目录叫工作区,, 因为我们还没有进行。是当前分支的冲突代码,

2024-04-30 18:19:22 1037 2

原创 Centos 安装docker

【代码】Centos 安装docker。

2024-04-30 16:36:19 660

原创 Centos 7 安装 Redis

但是如果是Centos 7,redis 默认的是。如果是Centos 8 直接。② 针对配置文件创建符号链接。进程 id 可以通过上面的。

2024-04-30 15:40:35 615

原创 我的博客系统自动化测试设计

4、查看详情:在我的博客列表页,点击第一条最新添加的博客,进入博客详情页面,展示当前博客的标题、内容、发布时间以及阅读量等信息。5、修改博客:在我的博客博客列表页面点击修改博客按钮,那么会进入博客编辑页,此时编辑页的标题以及正文的内容就是我所点击的博客的标题和正文。3、写博客:在我的博客列表页面,点击写博客按钮,进入添加博客页面,输入博客标题以及博客内容,点击发布文章,这个时候会弹窗“6、删除博客:在我的博客列表页面,点击每个博客对应的删除按钮,则会删除该博客,并且文章数量-1;1、注册:在登陆页面点击“

2024-04-28 18:46:39 572

原创 自动化测试

【代码】自动化测试。

2024-04-27 19:11:46 257

原创 接口、抽象类、普通类

不可以的。final的类不能被重写和继承,而abstract的类是抽象类,本身没有实现,只能通过子类来实现,也就是说必须被继承。抽象类中不能有static,final,private修饰的方法被static修饰的方法属于类,是类自己的东西,不是给子类来继承的private的访问权限是本类中,子类继承父类后,是无法重写private修饰的方法的抽象类不能被实例化(初学者很容易犯的错),如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。

2024-04-27 13:41:07 932

原创 spring的跨域问题

跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全防止恶意网站窃取数据。1、协议不同,如 http 和 https;2、域名不同;3、端口不同。

2024-04-23 18:04:06 438

原创 实现自定义注解、实现自定义幂等性注解

添加 Spring AOP 依赖。创建自定义注解。创建一个新的 Java 注解类,通过@interface关键字来定义,并可以添加元注解以及属性。@Target(ElementType.METHOD) //表示作用于方法上@Retention(RetentionPolicy.RUNTIME) // 表示这个注解在运行时是可见的,这样 AOP 代理才能在运行时读取到这个注解编写 AOP 拦截(自定义注解)的逻辑代码。@Aspect@Component// 方法执行前的处理。

2024-04-23 16:58:51 1125 1

原创 SpringBoot 如何获取HttpServletRequest 简称 Request对象

如果还需要注入response,代码就更繁琐了。而对于方法2,不仅可以在Controller中注入,还可以在任何Bean中注入,包括Service、Repository及普通的Bean。注入的对象不限于request:除了注入request对象,该方法还可以注入其他scope为request或session的对象,如response对象、session对象等;减少代码冗余:只需要在需要request对象的Bean中注入request对象,便可以在该Bean的各个方法中使用,与方法1相比大大减少了代码冗余。

2024-04-22 18:27:40 627

原创 Spring Boot 如何实现缓存预热

监听 ContextRefreshedEvent 或 ApplicationReadyEvent 等应用上下文初始化完成事件。

2024-04-22 18:10:44 1189

原创 Spring Boot 自动装配执行流程

Spring Boot 自动装配执行流程如下:

2024-04-22 18:05:04 485 1

原创 Springboot 常见注解

是 Spring Boot 中一个关键的注解,它的主要作用是利用 Spring Boot 的自动配置机制来简化应用配置。这个注解背后的工作原理涉及几个重要的组件和概念,这些帮助 Spring Boot 在不需要过多配置的情况下,智能地配置 Spring 应用程序。告诉 Spring Boot “查看你的类路径,基于你找到的类(比如有无某些特定的库),智能地默认配置你的 Spring 应用”。是 Spring Boot 的一个核心注解,主要用于开启自动配置和组件扫描,是一个便捷的注解,汇集了。

2024-04-21 20:43:09 977

原创 测试JAVA 测开

依据需求将输入(特殊情况下会考虑输出)划分为若干个等价类,从等价类中选出一个测试用例,如果这个测试用例测试通过,则认为所代表的等价类测试通过,这样就可以用较少的测试用例达到尽量多的功能覆盖,解决了不能穷举测试的问题。:如果原因为真,那么结果必定为真, 例如:动物园运来大熊猫,动物园一定有大熊猫。无效等价类:不满足用户需求的输入集合,无效等价类。有效等价类:满足用户需求输入集合有效等价类。:2个原因中有一个为真时,结果就为真。:只有2个原因都为真,那么结果为真。:只有原因为假,结果才为真。

2024-04-18 17:35:30 375

原创 回文链表leecode

【代码】回文链表leecode。

2024-04-18 11:50:08 309

原创 虚拟线程和普通线程

Java 中的虚拟线程,也叫做协程或“轻量级线程”,它诞生于 JDK 19(预览 API),正式发布于 JDK 21,它是一种在 Java 虚拟机(JVM)层面实现的逻辑线程,不直接和操作系统的物理线程一一对应,因此它可以减少上下文切换所带来的性能开销。

2024-04-12 21:33:17 284

原创 JUC下面常见的锁

当调用 await() 方法的时候,如果 state 不为 0,那就证明任务还没有执行完毕,await() 方法就会一直阻塞,也就是说 await() 方法之后的语句不会被执行。直到count 个线程调用了countDown()使 state 值被减为 0,或者调用await()的线程被中断,该线程才会从阻塞中被唤醒,await() 方法之后的语句得到执行。让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活。

2024-04-12 20:59:52 295

原创 JAVA 并发编程JUC 锁策略

具体来说,每次进行 CAS 操作时,不仅需要比较要修改的内存地址的值与期望的值是否相等,还需要比较这个内存地址的版本号是否与期望的版本号相等。悲观锁总是假设最坏的情况,认为共享资源每次被访问的时候就会出现问题,例如共享数据被修改等,所以每次在获取资源操作的时候都会上锁,这样其他线程想拿到这个资源就会阻塞直到锁被上一个持有者释放。乐观锁总是假设最好的情况,认为共享资源每次被访问的时候不会出现问题,线程可以不停地执行,无需加锁也无需等待,只是在提交修改的时候去验证对应的资源数据是否被其它线程修改了(

2024-04-12 19:49:24 351

原创 并发编程-线程安全:volatile、Lock、synchronized、CAS、ABA、AQS

AQS(AbstractQueuedSynchronizer)是一个用于实现各种同步器的抽象类,是 JUC(java.util.concurrent)并发包中的核心类之一,JUC 中的许多并发工具类和接口都是基于 AQS 实现的。它提供了一种基于队列的、高效的、可扩展的同步机制,是实现锁、信号量、倒计时器等同步器的基础。同步器:同步器指的是用于控制多线程访问共享资源的机制。同步器可以保证在同一时间只有一个线程可以访问共享资源,从而避免了多线程访问共享资源时可能出现的数据竞争和不一致性问题。

2024-04-12 16:53:00 1005

原创 线程池的执行流程

先判断当前线程数是否大于核心线程数?如果结果为 false,则新建线程并执行任务;如果结果为 false,则把任务添加到任务队列中等待线程执行,否则则判断当前线程数量是否超过最大线程数?如果结果为 false,则新建线程执行此任务,否则将执行线程池的拒绝策略。DiscardOldestPolicy:忽略最早的任务,最先加入队列的任务。CallerRunsPolicy:把任务交给添加此任务的(main)线程来执行(使用当前调用的线程来执行此任务);DiscardPolicy:忽略此任务,忽略最新的一个任务;

2024-04-12 12:47:12 331

原创 常见线程池的创建方式

类创建线程池提供了几个不同参数的构造方法,这 7 个参数分别是:corePoolSize:核心线程数。是指线程池中长期存活的线程数。maximumPoolSize:最大线程数。线程池允许创建的最大线程数量,当线程池的任务队列满了之后,可以创建的最大线程数。最大线程数不能小于核心线程数,否则会报错keepAliveTime:空闲线程存活时间。当线程池中没有任务时,会销毁一些线程,销毁的线程数=maximumPoolSize(最大线程数)-corePoolSize(核心线程数)。

2024-04-12 12:29:36 772

原创 重写 equals 时为什么一定要重写 hashCode

hashCode 和 equals 两个方法是用来协同判断两个对象是否相等的,采用这种方式的原因是可以提高程序插入和查询的速度,如果在重写 equals 时,不重写 hashCode,就会导致在某些场景下,例如将两个相等的自定义对象存储在 Set 集合时,就会出现程序执行的异常,为了保证程序的正常执行,所以我们就需要在重写 equals 时,也一并重写 hashCode 方法才行。

2024-04-12 10:27:19 714

原创 实现创建线程的五种写法

【代码】实现创建线程的五种写法。

2024-04-12 00:53:31 189

原创 进程和线程的区别

线程可以看作是轻量级的进程,一个进程中包含了多个线程,因此多个线程间可以共享进程资源。如上图所示,堆和方法区是可以共享的区域,而程序计数器和栈是每个线程私有的。

2024-04-12 00:32:23 157

原创 双亲委派模型

双亲委派模型是 Java 类加载器的一种工作机制。类加载器有很多种,当我们想要加载一个类的时候,具体是哪个类加载器加载呢?这就需要提到双亲委派模型。类使用委托模型来搜索类和资源。每个实例都有一个相关的父类加载器。需要查找类或资源时,实例会在试图亲自查找类或资源之前,将搜索类或资源的任务委托给其父类加载器。虚拟机中被称为 ""的内置类加载器本身没有父类加载器,但是可以作为实例的父类加载器。ClassLoader 类使用委托模型来搜索类和资源。

2024-04-12 00:23:53 849

原创 Java 类加载过程

加载(Loading)阶段是整个“类加载”(Class Loading)过程中的一个阶段,它和类加载 Class Loading 是不同的,一个是加载 Loading 另一个是类加载 Class Loading,所以不要把二者搞混了。验证是连接阶段的第一步,这一阶段的目的是确保 Class 文件的字节流中包含的信息符合《Java虚拟机规范》的全部约束要求,保证这些信息被当作代码运行后不会危害虚拟机自身的安全。是类加载的最后一步,这一步 JVM 才开始真正执行类中定义的 Java 程序代码(字节码)。

2024-04-11 20:43:10 383

原创 有哪些场景会触发类的加载?

需要注意的是,类的加载是按需进行的,即在运行时根据实际需要来加载。,尽可能避免不必要的类加载和资源消耗。

2024-04-11 20:22:58 176

原创 JVM 垃圾收集器

Parallel Scavenge/Parallel Old:吞吐量优先的垃圾回收器【JDK8 默认的垃圾回收器】;ZGC:停顿时间超短(不超过 10ms)的情况下尽量提高垃圾回收吞吐量的垃圾收集器【JDK 15 之后默认的垃圾回收器】(从 JDK9 开始,CMS 收集器已被弃用),ParNew:多线程的垃圾回收器(Serial 的多线程版本);G1:可控垃圾回收时间的垃圾收集器【JDK 9 之后默认的垃圾回收器】;Serial Old:Serial 收集器的老年代版本,采用。

2024-04-11 19:37:36 485

原创 JVM 垃圾回收算法

因为对象分为两种:绝大多数对象都是朝生夕灭的,也就是用完一次之后就不用了,而剩下一小部分对象是要重复使用多次的,将不同的对象划分到不同的区域,不同的区域使用不同的算法进行垃圾回收,这样可以大大提高 Java 虚拟机的工作效率。不同区域不同算法在分代算法中对于不同区域采用的具体算法也是不同的,新生代存放的大部分数据是朝生夕灭的,所以新生代使用的是。,如果标记-清除可以满足需要那么就使用效率更好的标记-清除算法,如果标记-清除算法不能满足需要就使用标记-整理算法。:标记清除后会产生大量不连续的内存碎片。

2024-04-11 18:43:08 589

原创 Java常见的设计模式

模板方法模式是最常用的设计模式之一,它是指定义一个操作算法的骨架,而将一些步骤的实现延迟到子类中去实现,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。适配器模式是一种结构型设计模式,它允许开发人员将一个类的接口转换成另一个类的接口,以满足客户端的需求。比如在 Spring 中,FactoryBean 就是一个工厂模式的实现,使用它的工厂模式就可以创建出来其他的 Bean 对象。定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。

2024-04-11 16:26:55 486

原创 Redis 主从复制实现

接着,主服务器将 replication buffer 缓冲区里所记录的写操作命令发送给从服务器,从服务器执行来自主服务器 replication buffer 缓冲区里发来的命令,这时主从服务器的数据就一致了。这里有一点要注意,主服务器生成 RDB 这个过程是不会阻塞主线程的,因为 bgsave 命令是产生了一个子进程来做生成 RDB文件的工作,是异步工作的,这样 Redis 依然可以正常处理命令。响应命令的意图是采用全量复制的方式,也就是主服务器会把所有的数据都同步给从服务器。基于长连接的命令传播。

2024-04-11 11:00:50 782

原创 Redis数据持久化 AOF RDB

如果频率太低,两次快照间一旦服务器发生宕机,就可能会比较多的数据丢失;如果频率太高,频繁写入磁盘和创建子进程会带来额外的性能开销。

2024-04-08 22:26:39 905

原创 RabbitMQ 消息重复消费问题

【代码】RabbitMQ 消息重复消费问题。

2024-04-08 15:48:36 321

原创 MQ死信队列&&延迟队列

消息的存活时间到了队列满了(是哪一个消息会成为死信?等待最久的消息会成为死信消息消费被拒绝了,或者给rabbitmq返回ack,并且requeue设置为false默认情况下,rabbitmq 对死信的处理就是直接丢弃如果在创建某个队列的时候,给队列设置了死信队列,那么此时如果一个消息成为了死信,那么对rabbitmq就会吧这个死信存储在死信队列中。import org/**/*** 死信交换机} /*** 正常的交换机。

2024-04-08 15:26:41 384

原创 selenium自动化测试

版本要与Chrome浏览器版本一致。绝对路径:/html 不常用。相对路径+索引 ,索引下标。

2024-03-28 22:41:02 277

原创 多个线程交替打印ABC

多个线程交替打印ABC

2024-03-20 10:40:49 183

原创 有序链表转换二叉搜索树

【代码】有序链表转换二叉搜索树。

2024-03-19 18:16:52 156

原创 快速排序QuickSort

快速排序

2024-03-19 14:11:16 293

原创 单例模式:双重效验锁的懒汉实现方式

单例模式:双重效验锁的懒汉实现方式

2024-03-19 10:31:02 419

原创 二叉树的前序遍历

前序遍历

2024-03-19 09:05:33 166

空空如也

空空如也

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

TA关注的人

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