- 博客(43)
- 收藏
- 关注
原创 MySQL为什么选择使用B+树作为索引结构?
而 Hash 索引是根据 hash 算法来定位的,难不成还要把 1 - 499 的数据,每个都进行一次 hash 计算来定位吗?哈希表是键值对的集合,通过键(key)即可快速取出对应的值(value),因此哈希表可以快速检索数据(接近 O(1))。本质也是一个二叉树(自平衡二叉树),在大数据量的情况下,层级比较深,会导致树的高度较高,检索速度慢。非叶子节点会存储数据,每页存储的键值对变少,导致树的层次变深,,从而增加I/O次数,使得效率低下。2.在分析别的数据结构的劣势(二叉树可能退化成链表,b树)
2024-12-26 03:06:39
579
原创 MySQL索引的最左前缀匹配原则是什么?
where a > 1, b = 2, c = 3 会停止匹配, 所谓的停止匹配指的是:a可以用上联合索引,但是b和c却不行。例如联合索引(a,b,c),MySql在进行查找时会先匹配a,然后依次是b和c,跳过最左侧的索引将无法使用该联合索引,MySql的最左前缀匹配原则是使用联合索引时,查询条件必须从联合索引的最左侧开始匹配,如果一个联合索引包含多列,则查询条件必须包含第一列,然后是第二列,依次类推。例如:联合索引(a,b,c) 正常使用联合索引的情况:where a=1,b=2,c=3。
2024-12-26 02:22:42
378
原创 MySQL三层B+树能存多少数据
每个节点就是一个页,页是MySql InnoDB引擎中最小的存储单元,一个页里面有一个页目录,存储的是多个 索引键和子节点指针的组合。
2024-12-26 00:42:25
900
原创 MySQL 的索引类型有哪些?(多角度分类)
字段长度比较大时,如果创建普通索引,在进行like模糊查询时效率比较低,这时可以创建全文索引,基于倒排索引,类似于搜索引擎。指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。索引列中的值必须是唯一的,但是允许NULL值。在文本类型如BLOB、TEXT或者很长的VARCHAR列上创建索引时,可以使用前缀索引,数据量相比普通索引更小,可以指定索引列的长度,但是数值类型不能指定。MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和NULL值。
2024-12-25 00:34:17
304
原创 MySQL 的存储引擎有哪些?它们之间有什么区别?
InnoDB:像一个全面的“数据库管理员”,处理事务、维护索引,还支持崩溃后恢复。MyISAM:像一个“档案员”,专注于读取已有数据,不处理复杂的事务。Memory:像一个“临时演讲者”,快速回忆(缓存)但不持久,适合短期任务。InnoDB :MySQL5.5.5后默认引擎。MyISAM:MySQL5.5.5前默认引擎。MySQL8.4版本一共提供了10个引擎。
2024-12-25 00:23:04
299
原创 MySQL InnoDB 引擎中的聚簇索引和非聚簇索引相关面试题
什么是聚簇索引和非聚簇索引?(重点在于叶子节点存储上的差异,个数,应用场景) 聚簇索引:数据和索引存储在一起,叶子节点存储的是数据行,(非叶子节点存储的是索引键值指向子节点(即下一级页面)的指针)聚簇索引必须有,而且只能有一个非聚簇索引:数据和索引分开存储,叶子节点存储的是索引键的值和指向数据行的指针(如行ID或行位置),(存储的是索引键值和指向子节点(即下一级页面)的指针),查询数据时一般需要进行回表查询。非聚簇索引可以有多个。
2024-12-25 00:00:42
710
原创 ArrayList源码分析、扩容机制面试题,数组和List的相互转换,ArrayList与LinkedList的区别
ArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增长。在添加大量元素前,应用程序可以使用ArrayList底层API的 ensureCapacity()操作来增加 ArrayList 实例的容量。这可以减少递增式再分配的数量。
2024-12-15 17:39:04
1329
原创 Spring Aop+自定义注解实践(待完善日志)
首先我们先创建一个自定义注解类/***/Spring Aop+自定义注解实践(待完善日志)@Target注解,自定义注解生命周期
2024-11-22 19:47:45
1096
原创 AI大模型如何重塑软件开发流程:传统与AI参与的对比分析
需求分析:分析用户需求,明确项目目标。系统设计:设计软件架构和组件。编码:根据设计文档编写代码。测试:对软件进行测试,确保质量。部署:将软件部署到生产环境。维护:对软件进行持续的维护和更新。AI大模型正在重塑软件开发的流程和模式,带来了效率的提升和成本的降低。然而,这也伴随着数据隐私、模型可解释性等挑战。通过采取适当的应对策略,我们可以充分利用AI技术的优势,推动软件开发行业的进步。
2024-11-22 14:55:25
415
原创 基本数据类型和包装类型的区别、缓存池、自动拆箱装箱(面试题)
基本数据类型和包装类型的区别、缓存池、自动拆箱装箱(面试,是Integer包装类型且数据范围在 -128~127 之间,因此直接从IntegerCache(Integer缓存池)会直接返回常量池中数据的引用,而不是创建对象,超过这个范围时会创建新的对象。Java 在自动装箱时,对于值在-128到127之间的int类型,会直接返回一个已经缓存的Integer 对象,而不是创建新的对象。创建了两个不同的对象,==比较的是内存地址。包装类型:比较时,==比较的是对象的内存地址,而equals()比较的是对象的值。
2024-11-12 23:43:29
941
原创 Synchronized锁、锁的四种状态、锁的升级(偏向锁,轻量级锁,重量级锁)
Synchronized【对象锁】采用互斤的方式让同一时刻至多只有一个线程能持有【对象锁】,其它线程再想获取这个【对象锁】时就会阻塞住。synchronized方法和synchronized块。
2024-11-06 13:44:09
1678
1
原创 JMM内存模型(面试回答)
JMM内存模型,JMM三大特性(面试回答)JMM就是Java内存模型(java memory model)。因为在不同的硬件生产商和不同的操作系统下,内存的访问有一定的差异,所以会造成相同的代码运行在不同的系统上会出现各种问题。所以Java内存模型(JMM)屏蔽掉各种硬件和操作系统的内存访问差异,以实现让 Java 程序在各种平台下都能达到一致的并发效果。原子性:可见性:一个线程对共享变量的修改,能够被其他线程看到。通过volatile关键字、锁(如synchronized)来实现可见性。有序性:程序的
2024-11-05 22:54:33
540
原创 线程池的创建方式、执行流程、拒绝策略
线程池中的线程执行完毕后,并不会立即被销毁,而是会被线程池回收并重新放入线程池中,等待下一次的任务分配。假设有三个线程在执行任务,线程1、线程2、线程3,此时线程1的任务执行完毕,又提交了一个任务4,任务4是使用线程1执行,还是会创建一个新的线程4执行呢?(临时线程的创建条件是:核心线程都被占用,任务队列也满,此时又有新的任务提交则会创建临时线程执行任务)临时线程的创建条件是:核心线程都被占用,任务队列也满,此时又有新的任务提交则会创建临时线程执行任务。线程池中的线程分为两种类型:核心线程和非核心线程。
2024-11-04 17:20:41
778
原创 线程状态的转换,sleep()、yield()和wait()方法的区别,join()方法的作用,打断线程的3种方式、volatile关键字
使当前线程进入休眠状态(TIMED_WAITING状态),wait()的调用必须先获取wait()对象的锁,而sleep则无此限制,方法执行后会释放对象锁,允许其它线程获得该对象锁(我放弃cpu,但你们还可以用)进入 wait 状态的线程能够被 notify 和 notifyAll 线程唤醒,而 sleep 状态的线程不能被 notify 方法唤醒;sleep()不获取sleep()对象的锁也可以使用,sleep()如果并不会释放对象锁线程状态的转换,sleep()、yield()和wait()方法的区别,
2024-11-04 17:07:28
756
原创 数据库三范式(1NF、2NF、3NF)
1NF(第一范式)定义:确保每一列都是原子值,即是不可分割的基础数据项。2NF(第二范式)定义:在满足1NF的基础上,消除非主键字段对主键字段的部分(函数)依赖。3NF(第三范式)定义:在满足2NF的基础上,消除非主键字段对主键的传递依赖。
2024-11-02 19:07:47
1348
原创 SQL优化经验大全(表设计优化,索引优化,索引创建规则、索引失效场景,sql语句优化,主从复制,分库分表)面试题
1.表的设计优化2.索引优化3.sql语句优化4.主从复制、读写分离5.分库分表。SQL优化经验大全(表设计优化,索引优化,索引创建规则、索引失效场景,sql语句优化,主从复制,分库分表)面试题
2024-11-02 00:55:04
1097
原创 MySQL超大分页怎么优化处理?limit 1000000,10 和 limit 10区别?覆盖索引、面试题
::覆盖索引加子查询优化思路:分页查询时通过创建覆盖索引提高性能,再通过覆盖索引加子查询的形式进行优化举例:假设有一个 表,结构如下:我们想要获取从第 1000001 条到第 1000010 条记录的用户名字(即分页)优化前的 SQL 查询全表扫描:这个查询没有使用子查询,因此 MySQL 必须从第一条记录开始,扫描直到跳过前 1000000 条记录,然后返回接下来的 10 条记录。性能问题:当表中的记录数非常大时,这种方式会导致显著的性能下降,因为数据库需要遍历大量的记录,导致高的 IO 开
2024-11-01 12:44:48
880
原创 Spring 框架中常见的注解(Spring、SpringMVC、SpringBoot)
还有@Recourse:相当于@Autowired+@Qualifier@Value : 用于将配置文件中的值注入到Bean的字段中。@Bean : 用于在配置类中声明一个Bean。@Lazy : 用于延迟加载Bean。
2024-11-01 00:01:17
461
原创 Spring Bean的生命周期
什么是Bean的生命周期?(1)Spring其实就是一个管理Bean对象的工厂,它负责对象的创建,对象的销毁等。(2)所谓的生命周期就是:对象从创建开始到最终销毁的整个过程。(3)为什么要知道Bean的生命周期?bean的生命周期7步分析Spring容器在进行实例化时,会将xml配置的的信息(注解也是同理)封装成一个BeanDefinition对象,Spring根据BeanDefinition来创建Bean对象,里面有很多的属性用来描述Bean。其中比较重要的是:beanClas
2024-10-31 23:34:40
421
原创 Spring AOP(定义、使用场景、用法、3种事务、事务失效场景及解决办法、面试题)
3.2.1 添加依赖前置通知 @Before:通知方法会在目标方法调用之前执行后置通知 @After:通知方法会在目标方法返回或者抛出异常后调用返回之后通知 @AfterReturning:通知方法会在目标方法返回后调用抛异常后通知:@AfterThrowing:通知方法会在目标方法爬出异常之后调用环绕通知:@Around:通知包裹了被通知的方法,在被通知的方法通知之前和调用之后执行自定义的行为实现通知方法也就是在什么时机执行什么方法@Aspect // 当前类是一个切面。3种事务、事务失效场景及解决办法
2024-10-31 08:30:00
2478
原创 Spring中的单例bean是线程安全的吗?
★确定。spring中的@Scope注解默认是singleton即bean是单例的,可以手动设置为prototype变成多例的。
2024-10-30 16:32:51
368
原创 MySQL中,如何定位慢查询?定位到的慢SQL如何分析?
介绍一下当时产生问题的场景(我们当时的一个接口测试的时候非常的慢,压测的结果大概5秒钟)1..我们系统中当时采用了运维工具(Skywalking),可以监测出所有接口的执行执行时间并排序。2.在mysgl中开启了慢日志查询,我们设置的值就是2秒,一旦sgl执行超过2秒就会记录到日志中(调试阶段开启慢查询日志,生产阶段不开启)
2024-10-29 23:53:52
441
原创 Springboot自动装配原理
在项目启动的时候,Spring Boot框架会自动读取META-INF/spring.factories配置文件中org.springframework.boot.autoconfigure.所配置的配置类,然后将其中所定义的bean根据条件注解所指定的条件来决定是否需要将其导入到Spring容器中。
2024-10-29 17:40:43
262
原创 SpringMVC执行流程(视图阶段JSP、前后端分离阶段)、面试题
SpringMVC执行流程只需要在hander上添加@ResponseBody注解即可,内部会通过HttpMessageConverter来将返回结果转为JSON并响应。简化请求参数和响应结果,请求参数会被简化为hander需要的参数,响应结果会被封装到response中和上面非前后端分离的SpringMVC请求流程大致相同,区别在于。后端向前端返回一个JSON字符串,不需要视图解析器渲染。将逻辑视图渲染为真正的页面,缓存hander方法和地址。
2024-10-29 16:03:50
540
原创 Spring三级缓存解决循环依赖?构造方法的循环依赖问题解决(原理、详细过程、面试题)
Spring三级缓存解决循环依赖?构造方法的循环依赖问题解决 原理循环依赖是两个或者多个Bean相互持有对方的引用或者自己依赖自己,导致无法进行(属性)依赖注入,造成死循环。循环依赖分为3种情况1.A、B相互依赖2.A、B、C相互依赖3.A 自己依赖自己一级缓存:存放完全实例化的bean二级缓存:存放未完全实例化的bean(没有依赖注入的bean)三级缓存:存放创建bean的工厂(主要为了支持AOP)1.提前曝光的Bean引用二级缓存用于存放那些已经实例化但还未完全初始化(属性注入未完成)的Bean。
2024-10-29 00:59:52
1385
原创 为什么重写equals()时一定要重写hashCode()?
equals()的时一定要重写hashCode如:String a = "123456",String b = "123456",在 equals 方法看来,两个字符串的内存地址不相等,所以仍然会判定为不相等,所以需要去重写 equals 方法,只有重写了equals 方法之后,我们再去判断 a 和 b,此时判断结果就会相等。equals()和 hashCode()是 Object 类中的两个基础方法,Object 中的 equals( )和hashCode( ),使用==判断,即比较两个对象的地址值。
2024-10-21 16:19:33
1809
原创 Java字符串比较的三种方式(相等比较,大小比较)
equals() 方法将逐个地比较两个字符串的每个字符是否相同。如果两个字符串具有相同的字符和长度,它返回 true,否则返回 false。对于字符的大小写,也在检查的范围之内。
2024-10-10 22:44:45
4710
原创 阿里云ECS服务器被攻击,植入挖矿程序的处理历程(您的云服务器由于被检测到对外攻击,已阻断该服务器对其它服务器端口(TCP:22)的访问)、ssh远程端口的修改
您的云服务器(xxx.xxx.x.xx)由于被检测到对外攻击,已阻断该服务器对其它服务器端口(TCP:22)的访问,阻断预计将在2024-10-02 05:39:24时间内结束,请及时进行安全自查。
2024-10-01 10:44:30
1581
2
原创 redis三种集群方案详解(主从复制、哨兵模式、分片集群)
redis三种集群方案详解(主从复制、哨兵模式、分片集群)主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点。默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,可以搭建主从集群,实现读写分离。
2024-09-28 20:30:01
1318
原创 分布式锁三种实现方式(数据库,redis,Zookeeper)redisson、看门狗watchdog机制、redlock红锁、AP、CP思想
分布式锁的三种实现方式(数据库,redis,Zookeeper)redisson、看门狗watchdog机制、redlock红锁、AP、CP思想SETNX key val:当且仅当key不存在时,set一个key为val的字符串,返回1;若key存在,则什么都不做,返回0。# 添加锁,NX是互斥、EX是设置超时时间Redisson是一个java操作Redis的客户端,提供了大量的分布式数据集来简化对Redis的操作和使用,2. redis实现分布式锁如何合理的控制锁的有效时长?
2024-09-23 08:30:00
1189
原创 Mysql索引的数据结构、聚簇(集)索引、非聚簇(集)索引、回表查询、覆盖索引、索引的使用原则、B树,B+树,面试题
在MySQL数据库中,索引是一种特殊的数据结构,它帮助数据库 快速找到存储在表中的数据。就像书的目录一样,索引不是数据本身,而是一个指向数据的快速通道。索引通常使用B+树这种数据结构来实现,它允许数据库以非常高效的方式进行搜索、排序和访问数据。2. 索引的底层数据结构MySQL默认使用的索引 底层数据结构是B+树将数据存储与索引放到了一块,索引结构的叶子节点保存了行数据tip:聚簇索引又叫聚集索引、二级索引又叫(非聚簇(集)索引)将数据与索引分开存储,索引结构的叶子节点关联的是对应的主键。
2024-09-22 23:13:13
1122
原创 redis的八种数据淘汰策略、适用场景、LRU、LFU算法
当Redis中的内存不够用时,此时在向Redis中添加新的key,那么Redis就会按照某一种规则将内存中的数据删除掉,这种数据的删除规则被称之为内存的淘汰策略。最近最少使用。用当前时间减去最后一次访问时间,这个值越大则淘汰优先级越高。例如:key1是在3s之前访问的, key2是在9s之前访问的,删除的就是key2最少频率使用。会统计每个key的访问频率,值越小淘汰优先级越高。例如:key1最近5s访问了4次, key2最近5s访问了9次, 删除的就是key1。
2024-09-22 16:05:14
3355
原创 redis数据过期策略(惰性删除、定期删除)
面试官:假如redis的key过期之后,会立即删除吗?Redis对数据设置数据的有效时间,数据过期以后,就需要将数据从内存中删除掉。可以按照不同的规则进行删除,这种删除规则就被称之为数据的删除策略(数据过期策略)。惰性删除、定期删除。
2024-09-21 21:16:47
572
原创 详谈redis数据持久化(RDB、AOF)
详谈redis数据持久化 RDB和AOF持久化原理什么是RDB什么是AOF redis做为缓存,数据的持久化是怎么做的?两种持久化方式有什么区别这两种方式,哪种恢复的比较快持久化,顾名思义,指的是将短暂的、易失的数据转化为长时间保存,且不易丢失的格式。在数据库的语境中,持久化常常指的是将内存中的数据保存到硬盘或其他长期存储介质中,从而确保即使在系统崩溃、断电或其他突发事件中,数据也不会丢失。
2024-09-21 18:03:14
1169
原创 redis:双写一致的原理、解决方案和面试回答(延时双删、分布式锁、异步通知MQ、canal)
双写一致性的原理和解决方案(延时双删、分布式锁、异步通知MQ/canal)一定要结合面试题回答,分为两种情况:1.一致性要求高的 ,2.允许延迟一致的双写一致性:当修改了数据库的数据也要同时更新缓存的数据,缓存和数据库的数据要保持一致。
2024-09-18 04:41:05
1768
原创 Linux安装ElasticSearch和Kibana
但是我使用的是7.17.23版本的ElasticSearch和Kibana,而ik分词器github只有7.17.18版本的,进入logs目录修该文件所属用户和所属组(下面的keep是你准备启动ES的非管理员用户)i插入,ESC退出编辑模式,:W保存但不退出,:WQ退出编辑模式并保存(千万别忘:)ik分词器不分linux和windows版本,可以windows下载后,放入。温馨提示:不同的版本安装可能有差异,请各位注意,还有就是。所有索引和搜索的功能,但是它的目的是通过简单的。是一个开源的高扩展的分布式。
2024-09-05 04:30:24
1002
原创 Docker配置阿里云镜像加速器
由于运营商网络原因,会导致您拉取Docker Hub镜像变慢,甚至下载失败。为此,阿里云容器镜像服务ACR提供了官方的镜像加速器,从而加速官方镜像的下载。
2024-09-02 01:32:28
651
原创 多线程最全笔记
匿名内部类写法看到这里,请你说出三种线程的创建方式和不同点(各自的特点)?3.常用APILock锁是JDK5版本专门提供的一种锁对象,通过这个锁对象的方法来达到加锁,和释放锁的目的,使用起来更加灵活。1.首先在成员变量位子,需要创建一个Lock接口的实现类对象(这个对象就是锁对象)2.在需要上锁的地方加入下面的代码lk.lock();// 加锁//...中间是被锁住的代码...// 解锁。
2024-08-24 01:49:05
1075
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人