- 博客(44)
- 收藏
- 关注
原创 MySQL 索引介绍与索引优化的简单介绍
在 MySQL 的性能优化体系里,索引是最重要、也最容易被误用的一环。很多慢查询并不是因为 SQL 写得有多复杂,而是因为没有合理使用索引;也有很多线上事故,表面看是“数据库慢了”,本质上却是索引设计不合理、查询条件失效、索引过多导致写入性能下降。如果把数据库比作图书馆,那么表数据就是一本本书,索引就是目录。没有目录,你要找一本书只能一本本翻;有了目录,你可以迅速定位到目标内容。但目录也不是越多越好,目录太多不仅占空间,还会让每次新增、修改、删除都变慢。索引(Index)是一种帮助数据库快速定位数据。
2026-04-18 18:52:50
145
原创 JDK中Map接口的底层实现
HashMapnullnullHashMapTreeMapnullHashtablenullnull:其他实现要么扩展它的结构(如额外维护链表),要么换用不同的内部结构(如TreeMap使用红黑树)。则在HashMap思路之上加入并发控制、细粒度锁,从而在多线程下仍能提供可扩展的性能。
2026-04-14 14:50:45
355
原创 工厂模式、代理模式与单例模式的介绍
设计模式是软件开发中经过验证的解决方案,它们帮助我们解决常见的软件设计问题。单例模式(Singleton Pattern)工厂模式(Factory Pattern)和代理模式(Proxy Pattern)。单例模式是创建型设计模式,其核心思想是确保一个类只有一个实例,并提供一个全局访问点。这种模式在需要控制资源访问、避免重复创建对象等场景中非常有用。核心特点唯一性:一个类只能创建一个实例对象全局访问:通过静态方法获取实例,整个应用程序共享该实例延迟加载(可选):在需要时才创建实例,节省资源。
2026-04-07 16:24:42
503
原创 Mysql中的undo log和redo log, bin log的介绍
MySQL通过三种日志机制实现数据安全:undolog记录事务操作用于回滚,保证原子性;redolog采用WAL机制先写日志后持久化,确保崩溃恢复;binlog记录逻辑变更,支持主从复制。主从复制包含同步(全部从库确认)、异步(不等待)和半同步(部分从库确认)三种策略,其中半同步在1主2从时只需1个从库确认即可,兼顾性能与可靠性。日志机制与复制策略共同保障了MySQL的数据一致性和高可用性。
2026-03-24 10:51:56
241
原创 死锁的产生与解决
互斥使⽤: 即当资源被⼀个线程使⽤(占有)时,别的线程不能使⽤不可抢占: 资源请求者不能强制从资源占有者⼿中夺取资源,资源只能由资源占有者主动释放。请求和保持: 即当资源请求者在请求其他的资源的同时保持对原有资源的占有。循环等待: 即存在⼀个等待队列:P1占有P2的资源,P2占有P3的资源,P3占有P1的资源。这样就形成了⼀个等待环路。
2026-03-17 17:13:33
53
原创 Java多线程介绍
1.所有数据存储在"主内存中", 当线程需要进行数据操作时要先将数据从"主内存"中拿出来.2.线程拥有自己的"工作内存", 线程将数据从"主内存"中拿出来后存放到自己的"工作内存", 进行处理当结束之后再将数据存回"主内存"中.利用这种内存机制,我们就可以解决多线程所引起的问题。
2026-03-14 21:09:58
63
原创 线程的创建与启动等问题
volatile关键字用于修饰变量,当一个线程修改了volatile修饰的变量的值,其他线程能够立即看到最新的值,从而避免了线程之间的数据不一致。在创建线程时需要重写线程的run()方法相当于只是给线程写了一个要执行的逻辑, 然后再调用start()方法才能运行线程执行代码.这个用volatile变量作为线程的执行条件, 当这个变量发生改变时就停止这个线程的运行.通过继承Java的Thread类来创建线程。Java中的线程池也可以创建线程。
2026-02-02 18:20:46
294
原创 分布式锁的概念
在分布式系统中, 每个服务器都是一个单独的进程, 因为进程之间的执行顺序又是随机的, 很容易导致严重问题.以买票系统为例, 如果没有分布式锁的话, 由于进程的随机性, 可能会导致一张票卖给两个人引发"超卖"问题. 所以引入分布式锁来解决:用Redis进行"加锁"的具体流程。
2026-01-31 14:19:18
679
原创 Redis介绍(10)-缓存
Redis的用途广泛, 但最常用的用途是用于数据库中作为"缓存", 因为数据库的访问数据慢, 而Redis将数据存放在内存中等优点, 很适合作为数据库的缓存进行快速访问数据。
2026-01-29 16:18:45
875
原创 Redis介绍(8)-集群(1)
分布式系统中, 常常因为数据量过多而导致储存空间不够的情况, 此时我们需要引入多个主节点存储数据;例如一共又1tb的数据, 用一个主节点承担1tb的数据成本太大, 所以我们引入了四个主节点, 每个主节点各自承担256g的数据. 并为每个主节点配置多个从节点, 这样就大大减少了内存成本.
2026-01-27 14:50:47
322
原创 Redis介绍(7)-哨兵机制
当主节点因意外下线时, 从节点虽然可以继续接收读取数据的请求, 但无法晋升为主节点, 无法代替主节点的功能, 需要手动将从节点进行晋升, 十分麻烦. 而解决了这一问题。
2026-01-25 14:27:20
270
原创 Redis介绍(5)-主从复制(1)
在分布式系统中, 往往会遇到"单节点"问题, 这个问题是指: 在一台物理服务器上, 只有一个服务器程序运行. 这样导致的问题包括但不限于: 处理请求并发量降低. 当一个服务器崩溃时,业务流程将中断造成不可逆的损失.将所有的服务器程序分为"主"和"从"两种服务器.1. 在配置⽂件中加⼊ slaveof {masterHost} {masterPort} 随 Redis 启动⽣效。2. 在 redis-server 启动命令时加⼊ --slaveof {masterHost} {masterPort} ⽣效。
2026-01-23 15:31:18
625
原创 Redis介绍(4)-认识Redis的事务
Redis虽然是"非关系型数据库"但也存在"事务"的概念. 我们可以以MySql数据库的事务特点来进行对比学习。
2026-01-21 20:22:26
418
原创 Redis的简单介绍(2)-处理过期Key的策略
当为Redis的某一个Key设置了一个过期时间. 当过期时间到了的时候, Redis是怎么知道哪些Key过期了并用什么方法删除这些Key的呢?主要有两种方式来进行删除。
2026-01-21 12:23:11
147
原创 Redis简单介绍(3)-持久化的实现
因为Redis是将数据存放在内存中的, 而内存中的数据是容易丢失的,使用持久化可以有效地避免因进程退出造成数据丢失问题, 当下次重启时利⽤之前持久化的⽂件即可实现数据恢复。
2026-01-20 18:31:24
818
原创 Redis的简单介绍(1)
Redis的数据存储是按照键值对的形式进行存储(key-value).即一个键对应一个值.但需要注意的是key的数据类型只能是string类型. 不一样的是value的类型有下列几种常见的类型.
2025-12-29 23:45:22
286
原创 归并排序的简单介绍
时间复杂度:O(NlogN). 不管最坏还是最好情况都一样. 因为始终都是一直将序列分成2部分,且2部分的元素个数一样.空间复杂度:O(N). 用到了一个临时数组存放排完序的元素.是稳定排序。
2025-12-14 16:07:11
323
原创 快速排序的简单介绍
这三种方法的最终结果虽然一样, 但中途产生的结果却不一定一样. 选择题考到时需要一个一个方法尝试.时间复杂度:最坏情况为O(N^2), 平均情况下是O(NlogN);空间复杂度:最坏情况下为O(N), 平均情况下是O(logN);不稳定排序。
2025-12-13 15:11:19
559
原创 选择排序的简单介绍
每⼀次从待排序的数据元素中选出最⼩(或最⼤)的⼀个元素,存放在序列的起始位置,直到全部待 排序的数据元素排完。下面是对直接选择排序的改进,但时间复杂度没有改变.:创建多个新的变量.
2025-12-09 16:24:34
177
原创 Spring AOP 的个人理解
Aspect Oriented Programming(⾯向切⾯编程)例如想要对自己代码中所有方法添加某一个功能, 一个一个添加太麻烦, 所以对这种功能进行AOP的处理让所有方法都实现这一功能。
2025-11-29 10:43:55
462
原创 Spring IoC和 DI注入
Spring 是包含了众多⼯具⽅法的 IoC 容器,而IoC是一种思想. 简单来说IoC的思想是将控制权进行反转, 将原来需要由程序员手动创建的对象交由spring自动创建管理.如果A对象需要B对象,B对象需要C对象.利用这一思想可以降低代码复杂度, 提高开发效率.
2025-11-15 16:50:48
498
原创 Mybatis中实现动态sql的方法
xml格式和注解的方式都可以使用标签来实现动态sql且两者可以共存.但xml用标签更为推荐文章使用到的数据库类型。
2025-10-27 19:58:33
300
原创 JVM的垃圾回收机制
在Java程序运行时会出现一个类的实例化对象在后续代码的执行中没有再被使用到,这样的类对象就是一种"垃圾",需要及时清理以免占用额外的系统资源如何定义"垃圾"的方法(垃圾扫描机制):JVM的垃圾回收机制需要有一个额外的线程一直扫描对象,所以十分消耗系统资源为每个类对象添加一个类计数器,当它在某处被引用时就会+1,当引用失效时就会-1.类计数器结果为0时就判定此时的类对象为"垃圾".缺点:可能会出现循环引用的情况a.t = b;b.t = a;a = null;b = null;
2025-10-06 09:42:00
447
原创 几种进程调度的策略
进程在被计算机调度运行时会遵从某种策略,从大的方面来看分为和进程不能剥夺另一个正在运行的进程的cpu的使用权,只有等运行的进程主动放弃cpu才行.如(进程执行完毕,进程在等待其他资源'...)进程可以剥夺其他正在运行进程的cpu的使用权,当计算机的调度器发现有更高优先级的进程进入时会将cpu的使用权给更高优先级的进程。
2025-09-29 15:38:08
340
原创 创建一个web项目的基本步骤(JavaEE版)
点击设置找到plugin(插件),下载smart tomcat打开配置\点击新建配置,选择tomcat。
2025-09-14 12:00:25
352
原创 HTTP协议格式的简单介绍
下载fiddler软件可以进行抓包,观察到HTTP的交互情况(具体安装过程已略过)(1):左侧窗⼝显⽰了所有的 HTTP请求/响应, 可以选中某个请求查看详情(2):http的请求的信息,点击上方一栏的RAW可观察原始数据形式(3):http的响应信息,点击上方一栏的RAW可观察原始数据形式。
2025-09-09 10:22:45
376
原创 URL(统一资源定位器)的简单介绍
通过url的标准格式可以看到,有些特殊符号有特定意义,如:&,#,/等等.但当我们需要表示这些有含义的特殊符号或汉字时就需要进行url encode(转码),避免出现歧义。位于#号后面的部分,此部分不会发送到服务器,而是由浏览器进行处理,这个最常见的用法是用于标识某一个内容属于那一部分,就像书中的目录一样.用于在应用层之间进行通信的协议.最常见的是https://的https的协议,但http的协议现在不是很常见了。一个服务器可能有很多的资源,带层次的文件路径表示了需要访问的资源在服务器的哪个部分。
2025-09-01 17:57:29
524
原创 DNS系统的简单介绍
DNS是一种可以将域名(可以理解为网址例如:www.baidu.com)转化为IP地址的应用层协议,因为域名更方便人们去记忆,更有利于传播.
2025-08-25 23:32:41
325
原创 TCP协议如何实现可靠传输
在建立连接是发送方会发送一个特殊的包syn(在数据报结构中的syn位为1表示),然后接收方接收到之后会发送一个带有syn和ack的包(syn和ack位同时为1)给发送方,之后发送方发出一个ack作为回答给接受方,完成上述步骤则建立完成。当A的数据传给B时,B有可能不会立即返回ACK而是等一会返回,这样的好处是给B一定的时间让它处理更多的数据,使缓冲区剩余空间更大,A进而发送的数据就可以更多(窗口更大)TCP协议的数据的形式是以字节流的形式传输的,当在传输多个数据的过程中可能会产生"粘包"问题。
2025-08-15 10:39:20
594
原创 传输层中的TCP协议数据报结构的简单介绍
例如,接收方未接收到1001-2001的数据,但接收了2001-3001的数据,那么接收就会返回ack包提示1001-2001的数据未发送,但依旧会接收后续的数据,如果1001-2001的数据还未接收到,那么返回的ack会一直提醒1001-2001的数据未发送。:在传输过程中,有时接收方无法迅速处理发送方的数据,那么就会造成缓冲区的堵塞,所以会根据缓冲区的剩余空间在ack包中提醒发送方调整发送数据的速度(调整窗口大小),当缓冲区已满就会在ack中让发送方停止发送数据.如图所示,TCP的数据报组成格式由。
2025-08-15 08:56:26
934
原创 TCP/IP协议各个分层的主要特点
TCP/IP协议采用四层架构实现网络通信:应用层直接面向用户程序,定义HTTP、FTP等数据传输格式;传输层通过TCP/UDP协议确保端到端传输可靠性;网络层使用IP协议负责数据包路由和寻址;网络接口层处理物理网络连接和帧封装。各层分工明确,如同快递系统:应用层是客户程序,传输层关注收发地点,网络层规划最佳路径,网络接口层处理相邻节点传输。这种分层设计屏蔽了底层硬件细节,使开发者只需关注上层逻辑实现。
2025-08-13 10:32:49
428
原创 java网络编程UDP和TCP简单使用
UDP是一种利用数据报(Datagram)的一种数据传输方式,数据报由报头(地址)和载荷(实际内容)组成UDP的传输不需要建立连接即可传输数据提高了传输速率,但带来的负面影响是可能会导致和TCP是利用字节流(Input stream/output stream)的数据传输方式,它的传输需要建立单独的连接才能传输数据,带来的好处是此文只说明了UDP和TCP服务器的最基础的使用方法,包含有EChoSever(回显服务器).
2025-08-06 14:10:30
365
原创 Java多线程编程中阻塞队列的基本实现
Java中的阻塞队列是以一个循环数组队列作为基础并加上锁实现(以下代码为简单实现,官方源码必然更严谨,合理,仅供参考)//定义队列的头节点//定义尾接点//size表示当前队列的长度//自定义的入队列方法//当size等于队列总长度时证明此时数组已经满了,线程进行wait等待//此处用while进行队列已满判断,是要确保线程被唤醒后一定会满足条件,避免虚假唤醒与多线程竞争//入元素,每入一个元素tail+1.tail++;
2025-06-01 15:34:36
416
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅