自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 线程池学习之线程池的类型

线程池是并发编程中用于管理和复用线程的一种技术,它可以根据需要创建新线程,也可以复用已存在的线程,从而减少了线程的创建和销毁所带来的开销。线程池有多种类型,每种类型适用于不同的场景。

2024-11-02 19:35:57 612

原创 线程池学习之执行流程、拒绝策略、线程池状态

线程池(Thread Pool)是一种管理和复用线程的机制,它在多线程编程中被广泛使用,主要目的是提高线程的利用率和性能,减少线程创建和销毁的开销。线程池的执行流程通常包括提交任务、判断当前存活线程数是否小于核心线程数、判断工作队列是否已满、判断当前存活线程数是否达到最大线程数、任务执行与线程回收几个步骤;

2024-11-02 18:36:58 649

原创 事务的隔离级别

事务的隔离级别是数据库管理系统(DBMS)中用于控制并发事务之间如何相互影响的机制。不同的隔离级别提供了不同程度的并发性和数据一致性保证。下面将讲解四种主要的事务隔离级别,按低到高开始说起。

2024-10-24 19:29:41 548

原创 什么是代理模式?

Java中的代理模式是一种结构型设计模式,它允许通过代理对象来控制对另一个对象的访问。这种模式在Java中有着广泛的应用,特别是在需要增强对象功能、控制访问权限或实现某些特定行为时。下面会对Java代理模式进行详细解释。

2024-10-23 21:45:51 1250

原创 MySQL优化方法总结

根据应用需求,适当调整MySQL的配置参数,如max_connections(最大连接数)、innodb_buffer_pool_size(InnoDB缓冲池大小)、key_buffer_size(MyISAM缓冲区大小)等。7.包含了ORDER BY、GROUP BY、DISTINCT 这些查询的语句,WHERE 条件过滤出来的结果集请保持在1000行以内,否则SQL会很慢。对于读多写少的数据库,启用查询缓存可以提高查询性能。将数据表进行垂直分割,将数据量大的字段分离出来,以减少表的宽度,提高查询性能。

2024-10-21 23:32:15 1163

原创 浅拷贝与深拷贝

浅拷贝:只复制对象本身和它的直接属性值,但不复制这些属性值所引用的对象。深拷贝:不仅复制对象本身和它的直接属性值,还递归地复制这些属性值所引用的所有对象。

2024-10-21 22:38:22 658

原创 ArrayList和LinkList的区别

ArrayList基于动态数组实现,而LinkedList基于链表结构实现。随机访问速度:ArrayList支持随机访问,可以通过索引快速访问元素,访问速度快,而LinkedList则需要从头节点开始遍历,因此随机访问速度较慢。插入和删除操作:在ArrayList中进行插入和删除操作时,需要移动操作点之后的所有元素,因此效率较低。而在LinkedList中,插入和删除操作只需要改变相邻节点的指针,因此效率较高。

2024-10-20 19:43:11 797

原创 Java 中 String、StringBuffer 和StringBuilder的用法及区别

特征String是否可变不可变可变可变线程安全安全安全不安全性能低(频繁操作)中(有同步开销)高适用场景不需要频繁修改字符串内容多线程环境下需要频繁修改字符串内容单线程环境下需要频繁修改字符串内容选择哪个类取决于具体的使用场景和性能需求。如果字符串内容不需要修改,使用 String 是最好的选择;如果需要在多线程环境下修改字符串内容,使用 StringBuffer;如果只需要在单线程环境下修改字符串内容,使用 StringBuilder 会获得更好的性能。

2024-10-20 19:14:23 595

原创 死锁产生原因与死锁解决办法

死锁是指集合中的每一个进程都在等待只能由本集合中的其他进程才能引发的事件,那么该组进程是死锁的。换句话说,此时执行程序中两个或多个进程发生永久堵塞(等待),每个进程都在等待被其他进程占用并堵塞了的资源。(比如说你去面试,面试官说解释一下死锁我就给你offer,你对面试官说给我offer我就给你解释死锁。现在,你和面试官都陷入了等待状态。因为你们都需要对方释放的资源(回答问题或给offer)才能继续下一步,这种情况就是死锁。

2024-10-19 18:59:48 1022

原创 乐观锁和悲观锁

悲观锁假设在数据访问时冲突会频繁发生,因此每次访问数据时都会先加锁,以确保其他线程无法访问这段数据,直到操作完成后才释放锁。乐观锁和悲观锁是并发控制中的两种重要机制,它们分别基于不同的假设和策略来处理多线程或多进程环境下的数据访问和修改问题。缺点:由于每次访问数据都需要加锁和解锁,会导致性能开销较大,特别是在并发量高的情况下,容易造成锁竞争和死锁问题。悲观锁采取主动加锁的策略,以防止数据被其他线程修改;乐观锁假设在数据访问时冲突不会频繁发生,因此不会主动加锁,而是在更新数据时进行检查,以确保数据的一致性。

2024-10-19 18:25:49 616

原创 Redis学习之Redis持久化

Redis 的持久化是指将 Redis 内存中的数据保存到磁盘上,以确保在服务器停机或发生故障时,数据不会丢失。Redis 提供了多种持久化机制,可以根据具体的应用场景和需求来选择合适的方式。将当前数据状态进行保存,快照形式,存储数据结果,存储格式简单,关注点在数据。将数据的操作过程进行保存,日志形式,存储操作过程,关注点在数据的操作过程。AOF会将 redis 执行过的所有写指令记录下来,在下次 redis 重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了。

2024-10-18 23:07:49 1118

原创 Redis学习之分布式锁

分布式锁(Distributed Lock)是分布式系统或不同系统实例之间用于控制对共享资源访问的一种同步机制。在分布式环境中,由于多个进程或线程可能运行在不同的机器上,传统的单机锁(如Java中的synchronized关键字或ReentrantLock)无法有效地工作,因为它们只能控制单个JVM内的同步。分布式锁的核心目标是确保在分布式系统中的多个客户端之间,对共享资源的访问是互斥的,即同一时间只有一个客户端能够访问该资源。

2024-10-16 20:08:29 1026

原创 Redis学习之三种删除策略以及逐出算法

在每一次淘汰循环中,新随机出来的key列表会和淘汰池中的key列表进行融合,淘汰掉最旧的一个key之后,保留剩余的较旧的key列表放入淘汰池中留待下一个循环。Redis的逐出算法(Eviction Algorithm)是指当Redis内存使用达到预设的最大限制(由maxmemory配置)时,为了腾出空间给新数据,Redis会根据一定的策略临时删除部分已有数据的机制。放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键:如果没有过期,就返回该键。

2024-10-13 19:51:47 1142

原创 Redis学习之缓存预热、缓存雪崩、缓存击穿、缓存穿透

redis中的数据过期了,但是数据库中一定存在这个数据,在数据库中查询出来这个数据后,再将其放入到redis中,假设布隆过滤器判断这个数据不存在,则直接返回这种方式优点在于节约内存空间,存在误判,误判原因在于:布隆过滤器走的是哈希思想,只要哈希思想,就可能存在哈希冲突。redis这么高,如果大量的请求同时过来访问这种不存在的数据,这些请求就都会访问到数据库,简单的解决方案就是哪怕这个数据在数据库中也不存在,我们也把这个数据存入到redis中去,这样,下次用户过来访问这个不存在的数据,那么在。

2024-10-08 22:32:28 1038

原创 SpringBoot 自动配置原理

SpringBoot自动配置是指Spring Boot能够根据项目中添加的依赖、配置文件和类路径下的类自动配置Spring应用程序,极大地简化开发者的配置工作,提高开发效率。SpringBoot的自动配置是通过注解实现的,它会自动根据你添加的jar依赖来配置你的Spring应用。需求:自定义,要求当导入redis坐标时,SpringBoot自动创建Jedis的Bean参考:可以参考mybatis启动类的应用实现步骤:(1)创建。

2024-10-02 22:04:47 3311

原创 Java每日一题之交换数组中的数据

题目:定义一个数组,按照要求进行数组顺序的交换。交换前:1,2,3,4,5,6。交换后:6,5,4,3,2,1。

2024-09-29 09:30:00 471

原创 ElasticSearch 倒排索引

倒排索引(Inverted Index),也常被称为反向索引、置入档案或反向档案,是一种用于快速查找文档或文档集合中包含特定词汇的数据结构。在倒排索引中,索引不是由记录来确定属性值,而是由属性值(即单词或关键词)来确定记录(即文档)的位置,因此得名“倒排”。,也就是全表扫描,随着数据量增加,其查询效率也会越来越低。根据非索引字段,或者索引字段中的部分词条查找时,只能全表扫描。则相反,是先找到用户要搜索的词条,根据词条得到保护词条的文档的。虽然要先查询倒排索引,再查询索引,但是无论是词条、还是文档。

2024-09-27 17:20:01 1009

原创 埃拉托斯特尼筛法求一定范围内质数(素数)

简称‌埃氏筛或爱氏筛,是一种由希腊数学家埃拉托斯特尼所提出的一种简单检定素数的算法。这种方法通过筛选自然数来找出一定范围内的所有素数。具体做法是:先把N个自然数按次序排列,1不是质数,也不需要筛选。然后从2开始,把2留下,把2的倍数剔除;接着是3,把3留下,把3的倍数剔除;然后是5,把5留下,把5的倍数剔除;以此类推,不断重复这个过程,直到筛选出所有的素数。

2024-09-25 15:28:56 264

原创 Java每日一题之判断是否为质数(素数)

题目:输入一个正整数n,判断该整数是否是质数(素数)。质数的定义:如果一个整数只能被1和本身整除,那么这个数就是质数。否则这个数叫做合数。(比如 13=1*13,13是质数,4= 1*4= 2*2, 4就是一个合数了)

2024-09-25 02:11:31 708

原创 Spring Bean的生命周期

Spring Bean的生命周期是指Bean在Spring(IoC)容器中从创建到销毁的整个过程。这个过程包含了多个阶段,每个阶段都扮演着特定的角色,确保Bean能够按照预期的方式被创建、配置、使用并最终销毁。Spring Bean的生命周期大体上分为三个阶段Bean的实例化阶段:Spring框架会取出BeanDefinition的信息进行判断当前Bean的范围是否是singleton的, 是否不是延迟加载的,是否不是FactoryBean等,最终将一个普通的singleton的。

2024-09-22 19:48:59 1316

原创 Spring循环依赖

循环依赖指的是两个或多个bean之间通过构造函数或字段(setter方法)注入相互依赖,形成了一个闭环。举例:类A依赖类B,类B也依赖类A,这种情况就会出现循环依赖。如图1所示。图1循环依赖在设计和实现Spring应用程序时可能导致问题,因为Spring的默认依赖注入方式可能无法直接解决这种依赖关系。循环依赖还可能会导致内存溢出。

2024-09-17 01:55:15 992

原创 Linux常用命令

7、rm 删除文件或目录,执行rm指令可删除文件或目录,如想要删除目录必须加上参数"-r",否则的话预设只会删除文件。rm:删除命令,-r:表示递归删除,f:表示强制删除 ,/*:表示的是根目录下所有文件。19、chown 改变某个文件或目录所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。20、chmod 用来变更文件或目录的权限。4、touch 使用touch指令可以更改文件或目录的日期时间,包括存取时间和更改时间(注意:如果文件不存在则创建文件)。

2024-08-09 00:07:03 381

空空如也

空空如也

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

TA关注的人

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