自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 存储过程、存储函数与触发器详解(MySQL 案例)

存储过程、存储函数与触发器详解(MySQL 案例)

2025-03-25 16:43:50 448

原创 数据库的视图有什么用?

数据库的视图(View)是一种虚拟表,它的内容由查询定义,并不实际存储数据,而是动态生成。视图的主要作用如下:

2025-03-25 11:52:50 663

原创 MySQL里的锁有哪些

MySQL 的锁机制是实现并发控制的核心,不同层级的锁适用于不同场景,以下是对其锁类型的系统分类及详细说明:

2025-03-24 19:03:03 1123 2

原创 MySQL是怎么保障ACID特性的

MySQL(尤其是InnoDB存储引擎)通过多种机制保障事务的ACID特性,以下是其核心实现原理:

2025-03-24 16:22:15 898

原创 分库之后,如果id是自增id,应该怎么解决id冲突问题?

在分库分表架构中,如果每个分库使用数据库自增 ID(如 MySQL 的 `AUTO_INCREMENT`),会导致不同分库生成的 ID 重复。以下是解决 ID 冲突的 **6 种核心方案**,适用于不同场景:

2025-03-23 14:54:01 817

原创 分库分表是怎么分的?

分库分表主要是有水平拆分和垂直拆分,具体又分为分库和分表:

2025-03-23 14:39:20 596

原创 MyCat中常见的几种分片策略

MyCat的常见几种分片策略:范围分片,取模分片,Hash分片,枚举分配,子串分片,固定Hash分片,字符串Hash分片,日期分片,自然月分片。当然不仅于此,具体参考MyCat文档。

2025-03-23 13:47:52 480

原创 MySQL中怎么分析性能?

MySQL中主要有4种方式可以分析数据库性能,分别是慢查询日志,profile,Com_xxx和explain,具体如下:

2025-03-23 11:55:59 476

原创 SQL中的索引是什么

在 SQL 中,索引(Index)是一种用于加速数据检索的数据库对象,通过建立特定的数据结构(如 B+树、哈希表等),帮助数据库系统快速定位目标数据。以下是关于索引的详细分类、工作原理、使用场景和最佳实践:

2025-03-22 15:25:30 792

原创 MySQL的事务隔离级别

MySQL 的事务隔离级别是数据库管理系统(DBMS)中用于控制事务并发访问数据时 数据一致性 和 并发性能 的核心机制。以下是 MySQL 支持的 4 种标准事务隔离级别及其实现原理:

2025-03-22 15:04:46 876

原创 SQL的DCL,DDL,DML和DQL分别是什么

SQL(Structured Query Language)包括以下四种主要语言类别,分别用于不同的数据库操作:

2025-03-22 14:38:34 943

原创 SQL索引失效的场景有哪些

SQL优化里面主要是围绕索引来展开的,SQL优化的一大重点就是避免索引失效,因为索引失效就会导致全表扫描,数据量很大的情况下能明显感受到查询速度的降低。下面说说索引失效的各种场景。

2025-03-22 11:57:38 338

原创 SQL优化主要有哪些方式

避免回表查询,要知道一个表只有一个聚集索引,其他的都是辅助索引,聚集索引一般是主键索引,聚集索引的叶子节点存储行数据,非聚集索引的叶子节点存储主键值。遵循最左前缀法则,避免索引失效。要尽量做到覆盖索引,覆盖索引是指索引包含查询所需的所有字段,查询的字段中尽可能不包含id和where条件以外的字段,如果有的话可以考虑是否可以和where条件中的字段建立联合索引,避免回表查询,因为如果查询的字段不在当前索引中的时候,where条件中会把符合的数据id筛选出来,然后再次通过id去查询相应的字段,导致性能降低。

2025-03-21 22:44:15 719

原创 数据库的左连接,右连接,全外连接,自连接,内连接的区别

从语法层面上看,全外连接full outer join左连接是left outer join右连接是right outer join内连接是inner join自连接是自身表与自身表进行的左右连接,需要注意的是并没有左内连接和右内连接。

2025-03-21 21:35:38 549

原创 MySQL配置主从复制教程(MySQL8)

据库在进行DDL和DML语句操作时,会被记录到binlog的日志文件里,而读取这里面的日志就可以知道数据库进行过哪些DDL和DML操作,这是主数据库的日志,从数据库经过相关配置可以实时获取到这份日志,通过IO线程把这份日志里需要同步的内容写入到从数据库的中继日志里,注意这里是写入中继日志,并不是直接写入数据库。然后SQL线程再从中继日志文件里获取日志信息,读取到相关的DDL和DML操作然后再执行同步操作。

2025-03-20 22:44:12 360

原创 Llinux安装MySQL教程

本文讲解Linux系统下MySQL从安装到使用的详细过程。

2025-03-20 00:12:42 207

原创 使用数据库和缓存的时候,是如何解决数据不一致的问题的?

读写双删相对出现数据不一致的概率比较低,但也并不是一定的,如果在A线程删除缓存之后,更新数据库之前,此时有另一个线程B进来进行读操作,因为B的缓存未命中直接访问数据库,然后又会把数据写入缓存,此时缓存里的数据就是更新前的数据,但是A依然会进行更新数据库的操作,然后就导致数据库的数据和缓存不一致,当线程C来访问的时候,因为缓存命中,所以直接读到了旧数据。在应用里负责管理缓存,读取时先查缓存,如果命中了则返回缓存,如果未命中就查询数据库,然后返回缓存,返回缓存的同时把数据给写入缓存中。

2025-03-07 00:00:06 673

原创 聚集索引和非聚集索引(聚簇索引和非聚簇索引)

聚集索引也称为聚簇索引,指的并不是一种索引而是一种存储结构,以MySQL为例,InnoDB引擎的存储结构方式就是聚簇索引的,它的文件会有2个,1个文件是.frm后缀的文件,也就是Frame,存储的是表结构,另一个文件是.ibd后缀的,InnoDB Data文件,存储的是表索引和数据。:聚集索引的索引和数据都放同一个文件中,而非聚集索引的索引与结构是分开的,查询的时候聚集索引可以直接根据索引拿到数据,而非聚集索引则是需要先从MYI中获取索引,再到MYD中获取数据,所以聚集索引的查询会更快一些。

2025-03-03 13:23:54 194

原创 Redis缓存击穿,缓存雪崩和缓存穿透的介绍和解决方案

缓存击穿,雪崩和穿透的区别以及解决方案。

2025-03-03 13:00:46 336

原创 Kafka在Windows系统使用delete命令删除Topic时出现的问题

下面来说说刚刚的问题导致的连锁问题,delete之后Kafka窗口会被自动关掉,此时如果再启动Kafka,可能会闪退,解决方案就是把Kafka配置文件(server.properties)的log.dirs路径下的文件夹删掉,如果还是闪退的话把Zookeeper配置文件(zookeeper.properties)的dataDir路径下的文件也删掉,这样子就可以启动Kafka了。在使用Windows的Kafka时,想要删除某一个主题,发现使用了delete之后会一直报警告。先创建2个topic。

2025-02-21 23:22:21 422

原创 安装Docker的时候报错

然后再执行安装docker的命令即可(其实大多数下载出现的问题都是配置错误或无效产生的)。在一台新的虚拟机里安装docker的时候报错了,执行命令如下。

2024-11-27 20:18:12 532

原创 在CentOS系统中安装工具包的时候报错的解决方法

三是yum仓库的问题,默认的仓库时国外的仓库,可能会受到一些科学的限制,所以国内安装工具的话最好把仓库换成国内仓库,比如使用阿里云镜像源。把系统下【/etc/yum.repos.d/CentOS-Base.repo】文件里的内容给更新成最新的阿里云镜像源信息。因为可能会有变动,所以自行网上搜索阿里云镜像源的CentOS-Base.repo配置,找一个比较新的配置更新即可。二是DNS解析错误,需要更新DNS配置,我推测这种现象概率较小所以我直接尝试了第三种解决方案。如果网络正常那就往下尝试。

2024-11-27 19:42:01 490

原创 jdk版本与环境变量配置的版本不一致问题

如果两个路径都不在的话,在cmd窗口输入【where java】 命令查看java的位置,我的也正是这种情况,在【C:\Program Files (x86)\Common Files\Oracle\Java\javapath】下面找到了这三个文件。要么在【C:\Windows\System32】下,要么在【C:\ProgramData\Oracle\Java\javapath】下,找到【java.exe,javaw.exe,javaws.exe】这3个文件,把它们删掉。

2024-10-06 15:22:07 557

原创 怎么使用nginx把80端口代理到想要的端口?

先介绍一下域名访问的默认端口,如果是直接输入一个域名通过http访问,那默认端口就是80,比如访问http://example.com,大家都是程序员,肯定知道这必然会访问一个默认端口的,而80就是http的默认端口,所以访问http://example.com相当于访问了http://example.com:80。但是服务运行在其他端口,那应该怎么处理呢?最近研究了一下云服务器搭建Halo博客,为了好好体验开发者的快乐,所以我把之前装的Hexo博客直接干掉了,重装了系统,宝塔面板也决定弃用。

2024-09-18 22:28:05 1159

原创 请求转发和重定向的区别

请求转发是服务内部间调用,对用户不可见,而重定向是访问另一个URL,用户能够直观观察到变化。

2024-09-18 22:05:18 344

原创 怎么安装docker-compose

如果原来/usr/local/bin/目录下有docker-compose文件,会提示是否需要覆盖,输入y覆盖即可。使用下列命令下载docker-compose(可选择其他版本)现在使用docker-compose可以测试一下是否安装成功。然后把该文件移动到/usr/local/bin/并重命名。显示如上信息则代表安装成功。

2024-09-17 14:40:38 510

原创 CentOS安装docker

添加docker稳定的仓库(国内访问官方源可能失败,所以使用阿里云的仓库)安装的时候会问需不需要继续的时候,输入y继续,最后等待即可。在倒数第二行可以看到已经修改成功了,现在可以正常拉取镜像了。注意:如果例子里的镜像用不了了,更换其他可用的源。改完镜像源之后,重启docker。

2024-09-17 13:54:02 893

原创 华为的仓颉和ArkTS这两门语言有什么区别

在运行时实例内存隔离的基础上,ArkCompiler通过共享运行实例中的不可变或者不易变的对象、内建代码块、方法字节码等技术手段,优化了并发运行实例的启动性能和内存开销。了解TypeScript的朋友都应该知道,其实TypeScript就是JavaScript的改进版本,是JS的超级,现在又出了个ArkTS,说是TS的超集。ArkTS的官网介绍说,ArkTS是TypeScript的进一步强化版本,简单来说就是包含了TS的风格,但是做了一些改进。而且,还说了是原生智能化,天生原场景,仔细关注这句话【

2024-09-15 23:59:26 3182

原创 Java网络编程怎么通过TCP和UDP实现

先介绍一下TCP和UDP两种连接方式的区别,TCP连接是类似于打电话一样的,你拨一个已经存在的号码,然后对方接听了你们就可以进行通话,彼此间是一个连通状态,这种方式可靠性很好,你说的话对方都能回复,你能判断对方是否接收到你的消息。而UDP则类似于发信息和发邮件一样的方式,朝着某个地址发数据,对方收不收得到也不管,这种方式可靠性较低,数据有丢失风险并且自身也不会知道。

2024-09-15 22:52:23 511

原创 Lambda表达式介绍

Lambda是JDK8的新特性之一,提供了更简洁的代码写法。下面先来看看Lambda表达式是怎么样的下面举个例子,创建对象执行一下可以看到都被正常输出了。对于只有一个需要实现的方法的接口来说,这种接口就叫函数式接口。Lambda表达式是针对函数式接口进行的拓展,具体实现方式需要根据抽象方法的定义来实现。比如ExampleA里的run方法,并没有参数,而且没有返回值,则可以把写一个空括号代表参数列表,然后->指向方法体,方法体内部可以写具体的自定义逻辑。执行的时候通过example调run方法即可。

2024-09-15 12:33:34 436

原创 Java使用CGLIB代理出现ExceptionInInitializerError异常,应该怎么解决?

Java使用CGLIB代理出现ExceptionInInitializerError异常,应该怎么解决?

2024-09-15 11:36:45 724

原创 Java中的静态代理,JDK代理和CGLIB代理的区别

静态代理就是常用的聚合方式,这种方式用来代理很简单,但是扩展性较差,如果需要代理多个方法,需要在代理类里把多个方法都写出来,而动态代理就没这种问题。JDK代理是基于接口实现的,原理其实是动态生成一个子类去实现这个接口,所以需要代理的对象必须实现某个接口,并且需要代理的方法必须是接口里定义过的抽象方法。CGLIB代理是基于类去实现的,当需要代理的类无法使用JDK代理的时候就可以使用CGLIB代理,另外需要代理的类必须不能使用final修饰,因为CGLIB实质上是通过继承需要代理的类,然后在子类中重写

2024-09-15 11:35:32 2237

原创 介绍Java中的不可变类,分析String,StringBuffer和StringBuilder的区别

不可变类指的是使用final修饰的类,并且类中的所有需要供外部使用的属性都是private final修饰的,确保对象创建后无法被修改,因此也不会提供set方法,需要调用构造器把所有字段都初始化完毕。并且,包含的get方法返回的也不能是原对象,为了避免字段不被篡改所以get方法返回的都是new一个新对象返回副本。下面展示一个不可变类的定义:先创建两个引用的类Father和Mother,用亲属关系来体现...

2024-09-15 01:14:54 813

原创 Java中Integer的缓存池是怎么实现的?

可以看到low是-128,high虽然并没有在定义的时候赋值,但是执行静态代码块的时候把127赋值给了high,这就是缓存的数据范围。**保存了从-128到127的数据,所以我们创建Integer对象时如果在这个区间,其实使用的都是缓存对象,所以使用==判断是true,反之为false,这边使用的是设计模式中的享元模式。使用基本数据类型int定义的值肯定相等,但是Integer是引用数据类型,而且-129不在缓存区里,所以应该是false。从结果上看,说明128也并不在Integer的缓存区里。

2024-09-14 23:59:24 522

原创 Java为什么中的浅拷贝和深拷贝的区别

先说说拷贝的具体含义,拷贝就是把对象复制一份一模一样的。是只复制了对象和值,如果浅拷贝中有其他引用类型的对象,那就不会被拷贝,而是和拷贝源使用同一个对象,指向同一地址,此时其中一个对象修改子对象中的字段变量了,会影响到另一个对象。是把子对象一起执行复制操作,如果其中还有更多一级的引用类型对象,也会被递归复制,而不是和源对象指向同一地址。

2024-09-14 23:35:04 700

原创 多线程状态下的安全问题是怎么解决的?

在多线程状态下,如果同时对一个共享变量进行操作,那么很可能会出现安全问题,比如最常见的买票问题:细心的朋友发现了,序号为50的票居然被卖了3次???那岂不是3个买票的人要打起来了。而且这还是只有3个站点售票的情况,如果售票的站点更多,岂不是会更加容易出错?这是因为创建的线程同时访问计数器,可能会导致计数器不一致,还有一些问题这里并没有体现出来,比如说序号为0的票也被卖了出去,或者大家都在抢同一张票,谁也不放手,导致出现死锁。这就是典型的卖票问题。那么我们应该怎么避免这种情况呢?

2024-09-13 23:33:21 246

原创 Java是怎么实现多线程的?有哪几种方式?

先介绍一下多线程,是为了帮助我们高效进行处理程序的一个必要手段,平时放在main方法里执行的普通方法,其实都是执行的单线程操作,这个线程也就是程序的主线程。在主线程的基础上,我们可以创建出一些新的线程,可以称为子线程或者分线程,并且能够控制线程的数量,多个线程同时执行的效率自然要高于单线程,这也就是为什么需要使用多线程。

2024-09-13 22:33:36 372

原创 Java的类为什么不能多继承,而接口却可以多实现?

Java的类为什么不能多继承,而接口却可以多实现?

2024-09-10 21:05:07 211

原创 Java是序列化和反序列化是什么,怎么实现?

序列化是把Java对象转化成字节流,反序列化就是把字节流转化成Java对象,字节流是什么呢?就是存储文件的二进制文件。我们在计算机上所存储的一切东西都是以二进制形式存在的,都是由数不清的0和1组成的,我们看到的其实是计算机加工处理后的数据。

2024-09-10 20:46:06 521

原创 简单谈谈方法重载和方法重写(编译时多态和运行时多态)

简单谈谈方法重载和方法重写(编译时多态和运行时多态)

2024-09-07 17:49:47 412

空空如也

空空如也

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

TA关注的人

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