自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 复习MySQL

聚簇索引:数据与索引放到一块,B+树的叶子节点保存了整行数据,有且只有一个非聚簇索引(二级索引):数据与索引分开存储,B+树的叶子节点保存对应的主键,可以有多个通过二级索引找到对应的主键值,然后到聚簇索引中查找整行数据,这个过程就是回表覆盖索引是指二级索引中已经包含了查询需要的所有字段,查询时直接从索引里拿数据,不用再回表原本server层干的话交给了引擎层干这叫”下推“,索引下推是针对联合索引的,它是在存储引擎层根据索引条件先进性过滤,再进行回表,来减少回表次数。

2026-03-13 23:17:37 520

原创 深入了解JVM

线程分配时优先从子的TLAB拿内存,不够的话从Eden区申请新的,如果对象太大就直接在Eden区装配,绕过TLAB。因为根据统计新生代中的90%以上的对象活不过第一次GC,意味着每次Minor GC只需要预留10%给存活对象就够了,这个比例就是在空间利用率和晋升老年代的风险之间取得平衡,可以通过。比如生了8字节,但下一个对象要16字节,这时候得申请新的TLAB,那老的TLAB里的8字节就浪费了。新对象优先在Eden区分配,满了就会触发Minor GC,存活的放到幸存区,两个幸存区轮流用。

2026-03-13 23:12:18 245

原创 计算机网络

HTTP 1.0到1.1的核心升级:解决连接成本问题,使用长连接,同一个TCP连接可以复用。在建立TCP连接时,需要通过三次握手来建立。在断开TCP连接时,需要通过四次挥手来断开。HTTP 1.1到2.0的升级。

2026-03-13 23:09:28 373

原创 CAS和AQS相关问题

底层基于ReentrantLock + Condition实现,内部有一个count计数器和一个generation代,线程调用await()时获取锁,然后计数器-1,计数器不为0则会阻塞当前线程,如果减为0,说明最后一个线程到达,先执行barrierAction进行回调,再执行condition.signalALL()唤醒所有线程,然后重置计数器,更新generation开启下一轮。线程调用acquire(),如果许可数大于0,计数器-1,线程继续执行,如果许可数等于0,则线程则会阻塞等待。

2026-02-25 22:17:46 598

原创 ConcurrentHashMap

Node节点的value属性和next属性使用volatile修饰,保证修改value和新增节点时的对其他线程可见性使用table数组作为synchronized的锁来保证写操作的安全当头节点为null时,使用CAS操作来保证数据锁能正确的写入。

2026-02-25 22:09:55 478

原创 多线程复习doge

单例模式(线程安全的)饿汉创建的时间比较早,是在类加载的时候就创建出来了懒汉创建的时间比较迟,是在首次使用的时候才创建的通常情况下使用懒汉,效率高但是有线程安全问题。

2026-02-09 21:52:10 284

原创 集合复习doge

回答:主要原因是 CPU 缓存的影响。ArrayList 的数据在内存里是连续存放的,访问时缓存命中率高,搬运数据用的 System.arraycopy 也是高度优化的原生方法。LinkedList 虽然插入本身是 O(1),但首先得定位到插入位置,这个遍历过程是 O(n),而且每访问一个节点就可能触发一次缓存缺失。实测在中间位置插入大量数据,ArrayList 往往比 LinkedList 更快。只有在头部频繁插入删除时,LinkedList 才有优势。

2026-02-09 21:48:47 795

原创 基础复习doge

布隆过滤器的原理是用bit数组+多哈希实现的一种概率性数据结构,用来快速判断一个元素是不是在集合中。而查询元素时,同样经过哈希得到多个位置,只要有一个位置是0,元素一定没有在,全是1也未必在,存在一定误判率,但不会放过不存在的数。String 是不可变的,底层的 char 数组被 final 修饰,一旦创建就定死在那了。零拷贝指的是应用程序在需要把内核中的一块区域数据转移到另一块区域时,不需要先复制到用户空间再转移到目标内核区域去了,而是直接实现转移。在建立TCP连接时,需要通过三次握手来建立。

2026-02-09 21:46:08 326

原创 MySQL复习

控制,该参数是唯一核心,取值为0/1/2,生产环境禁止0,生产首选 1(默认),普通库可选 2,性能比1显著提升,避免了每次fsyn()开销,在安全上无数据丢失,最多丢失1秒内的已提交事务。第一,隐藏字段,里面有事务id,来记录每一次操作的事务id,还有回滚指针,指向这一个记录的上个版本。会的,MVCC的多版本留存是表膨胀的根本诱因,在高更新/高删除的场景下,大量过期版本未被及时清除。是重做日志,记录的是事务提交时数据页的物理修改,是用来实现事务的。不同的隔离级别的快照读是不一样的,最终的访问结果不一样。

2026-01-28 20:39:23 647

原创 redis哨兵和缓存

当A判定B为PFAIL后,和其他节点进行沟通,当数目超过总集群个数的一半,那么B就被彻底判定为故障节点了。实时生成才涉及,redis服务器首次介入之后,服务器里是没有数据的,此时所有的请求都打给mysql,通过独立的进程进行的,不负责储存数据,只是对其他的redis-server进程起到监控的效果。查询的某个key,在redis中没有,mysql也没有,这个key也不会被更新到redis中。如果redis中查到了,就直接返回;先通过离线的方式,通过一些统计的途径,先把热点数据找到一批,导入到redis中。

2026-01-25 21:51:35 684

原创 redis事务和主从模式

由于从节点的数据都是时刻和主节点保持一致的,因此其他客户端从从节点这里读取数据和从节点读取数据没有去别的,后续有客户端来读取数据就可以从上述节点随机挑一个节点来提供读取数据服务。主从节点在建立复制连接后,主节点会把自己收到的修改操作,通过tcp长连接的方式,源源不断的传输给从节点,从节点就会根据这些请求来同时修改自身的数据,从而保持和主节点数据的一致性。本来,在主节点保存一堆数据,引入从节点之后就是要把从节点上面的数据复制出来,放到从节点,后续主节点这边对于数据有任何修改都会把这样的修改给同步到从节点上。

2026-01-25 21:47:00 764

原创 redis持久化

按照aof的方式,每一个请求/操作都记录入文件,在触发aof重写之后,就把当前内存的状态按照rdb的二进制格式写入新的aof文件中,后续再进行的草早,仍然是按照aof文本的方式追加文件后面。硬盘上顺序读写数据的是比较快的,随机访问则速度很慢,AOF是每次把新的操作写入原有文件的末尾,属于顺序写入。子进程只需要内存中的当前数据获取出来,以AOF的格式写入到一个新的AOF文件中。这个复制出来的克隆体(子进程)的内存中的数据就是和“本体”一样的。硬盘的数据只是在redis重启的时候用来回复内存中的数据的。

2026-01-24 12:08:12 748

原创 多线程复习

针对扩容操作做出了单独的优化,原本HashMap扩容时需要把所有的元素都拷贝一遍,而ConcunrrentHashMap则是把扩容中一次搬运操作分成多次,每次只搬运一部分数据,避免这单次操作过于卡顿。充分利用了CAS特性,把一些不必要加锁的环节给省略加锁了,比如需要用变量记录hash表中的元素个数,此时就可以使用原子操作(CAS)修改元素个数。将连续多次对同一个对象加锁、解锁的操作,合并为一次范围更大的加锁操作,从而减少锁的获取和释放次数,提升性能。

2026-01-21 20:13:54 415

原创 多线程复习

而实际情况下无法知道一个代码这两类的占比是多少,因此需要根据代码的实际场景,通过实验的方式对程序进行性能测试,测试中不断修改线程数目,看哪种情况下符合要求。如果M和A的值相同,就把M和B的值进行交换,交换的本质是为了把B的值赋给A,主要参数:核心线程数,最大线程数,空闲存活时间,工作队列,拒绝策略。CAS(M,A,B)其实是一个cpu指令,是原子性的。饿汉创建的时间比较早,是在类加载的时候就创建出来了。懒汉创建的时间比较迟,是在首次使用的时候才创建的。这是锁的一种特性,是一类锁,不是具体的锁。

2026-01-19 19:29:03 252

原创 redis数据结构

如果有两个客户端并发的发起请求,redis服务器就会串行/顺序的执行这多个命令。redis能够使用单线程模型很好的工作的原因在于它的逻辑性都是短平快,不太消耗cpu资源也不太消耗多核。Redis中的字符串直接就是按照二进制数据的方式存储,存的是啥,取得就是啥。弊端:redis要特别小心,避免某个操作时间长,阻塞了其他命令的执行。同一个数据类型,背后可能的编码实现是不同的,会根据特定场景优化。redis的key都是字符串,但value的类型是存在差异的。数据结构:redis承诺给你的,也可以理解成数据类型。

2026-01-13 23:36:53 493

原创 redis通用命令

一个redis中可能同时存在很多很多的key,这些key中很大部分都有过期时间,此时的redis服务器咋知道哪些key已经过期要被删除,哪些key还没过期?虽然有了上述两种策略,但整体效果一般, 仍然可能会有很多过期的key被残留,没有及时删除掉,redis对上述进行补充还提供了一系列的==内存淘汰策略。把时间划分成很多小段,每个小段都挂着一个链表,每个链表都代表一个要执行的任务。引入redis的缺点是会更慢,但是有了redis之后就可以把数据单独存储,redis的key的过期策略是怎么实现的?

2026-01-10 02:13:06 824

原创 JVM的类加载和垃圾回收

也就是把“符号引用”(文件偏移量)替换成“直接引用 ”(内存地址),因为在文件中不涉及到内存地址,因此初始化的语句会被设置为一个”文件的偏移量“,通过偏移量就能找到这个字符串所在的位置。而这里的可达性分析都是周期性进行的,当前某个对象是否是垃圾,是随着代码的执行会发生改变的。//这里只是分配内存空间,还没有初始化呢,此时这个空间上的内存的数值就是全0的。有一组线程周期性的扫描我们代码中所有的对象出发,尽可能的进行访问的遍历,复制算法:通过复制的方式,把有效的对象归类在一起,再统一释放剩下的空间。

2026-01-08 17:58:32 890

原创 JVM 内存区域划分

虚拟机栈和程序计数器都是每个线程都有一份,JVM进程中有10个线程就会有10个虚拟机栈,也会有10个程序计数器(每个线程各自有一个),堆和元数据区只有一份。如果是顺序执行的代码下一条代码就是指令地址递增,而如果是循环/条件代码,下一条就可能跳转到一个比较远的位置。栈帧里就包含了方法的入口,方法返回的位置,方法的形参,方法的返回值,局部变量。常见误点:t这个变量是一个引用类型的变量,存的是对象的地址,不是对象本身。随着一条一条的指令的执行,程序计数器的值都会自动更新去指向下一条指令。

2026-01-07 14:32:26 279

原创 上传图片功能

UUID.randomUUID():生成全球唯一的 32 位标识符(含横线),避免多用户上传同名文件时覆盖原有文件,是文件重命名的常用方案(也可使用时间戳 + 随机数)。mkdirs():能创建多级目录(如 D:/upload/pics/2026/01),即使上级目录不存在,也会递归创建所有不存在的目录,是文件上传场景的首选。mkdir():仅能创建单级目录(如 D:/upload),若上级目录(如 D:/upload)不存在,创建失败;

2026-01-05 21:30:58 173

原创 项目学习收获

是 Java 8 引入的中的方法,用于。

2026-01-05 21:03:39 215

原创 加密和解密

HASH加密:不可逆 MD5,SHA26。将指定的类型转化为存放在数据库支持的类型。例如:手机号-自动的进行加密-存放数据库。对称加密:AES,3ES (密钥)明文–>>HASH–>>加密结果。明文+密钥–>>加密结果。加盐HASH 盐:随机数。

2026-01-01 22:33:12 259

原创 Spring AOP

• @AfterReturning:返回后通知,此注解标注的通知⽅法在⽬标⽅法后被执⾏,有异常不会执⾏。• 代码⽆侵⼊:不修改原始的业务⽅法,就可以对原始的业务⽅法进⾏了功能的增强或者是功能的改变。• @After:后置通知,此注解标注的通知⽅法在⽬标⽅法后被执⾏,⽆论是否有异常都会执⾏。• @Around:环绕通知,此注解标注的通知⽅法在⽬标⽅法前,后都被执⾏。• @Before:前置通知,此注解标注的通知⽅法在⽬标⽅法前被执⾏。@Aspect // 声明这个类是一个切面。AOP 面向切面编程。

2025-11-18 20:32:16 238

原创 配置文件&&层级调用

SpringBoot支持三种配置文件tomcat是一个web服务器,用来启动发布web项目Springboot把tomcat进行了集成、properties语法:server.port:改端口号用配置来写参数这样避免数字写死,便于更改声明一个对象,然后用spring提供的@Value(" { }")来连接yml语法:@ConfigurationProperties来给对象赋值,从配置文件中来读取对象缺点:不适合复杂的配置文件(yml/properties)↓。

2025-11-02 19:52:50 752

原创 Spring IoC&&Di

spring是包含了众多工具方法的IoC容器。

2025-10-28 21:23:43 391

原创 spring boot

tomcat是一个web服务器,对http协议进行封装,默认端口号是8080,servlet容器。可选参数,没传时为null。特别适合在Web开发中处理可选参数和可能为空的数值。被@SpringBootApplication修饰的就是启动类。默认支持所有 HTTP 方法(GET、POST 等)用法:1. 既可以修饰类,又可以修饰方法。@RequestParam的作用:重命名。Spring mvc是一个web框架。http的常用请求:get和post。访问路径是:类路径+方法路径。启动失败:端口号冲突。

2025-10-19 21:27:13 187

原创 多线程_5 阻塞队列

当队列满时(size == data.length),调用 wait() 进入等待状态。:服务器B作为消费者,按照自身处理能力(例如每秒1000个)从队列中取出请求处理。当队列空时(size == 0),调用 wait() 进入等待状态。当成功放入元素后,调用 notify() 唤醒可能在等待的消费者。当成功取出元素后,调用 notify() 唤醒可能在等待的生产者。典型的生产者-消费者模式的实现,是互相唤醒的。:队列吸收了请求峰值,避免B服务器被冲垮。1.基于数组 2.基于链表。

2025-10-14 23:07:01 388

原创 多线程4_线程安全

同样它也能解决线程饿死问题:某个或某些线程长期无法获得所需的资源(如 CPU 时间、锁、内存等),导致其任务始终无法执行的现象。notify() 是 “发通知”,而 wait() 后的代码需要等通知到达、重新拿到锁后才会执行。把构造方法设置为private ,强制了其他人使用这个类的时候就不会创造出多个对象。指的是一个线程连续针对一把锁,加锁两次不会出现死锁,允许线程重复获取已持有的锁。而join是影响到线程结束的先后,哪个线程调用join那个阻塞。但懒汉方式存在安全问题,即会读取,又会修改。

2025-10-12 17:25:09 264

原创 多线程3_中断,等待和状态

本文总结了Java多线程编程中的关键概念。重点包括:1) 线程中断机制,通过标志位或interrupt()方法协作终止线程;2)线程等待使用join()方法;3)6种线程状态及其转换;4)线程安全问题源于随机调度、共享变量和非原子操作;5)使用synchronized解决同步问题。特别指出中断不是强制终止而是协作机制,线程需自行处理中断,而synchronized通过锁机制确保原子性,避免多线程并发修改导致的竞态条件。

2025-10-03 23:16:55 520

原创 多线程2-

操作系统中对于多个线程的调度顺序是不确定的,“随机”的(并不是数学上的)取决于操作系统对线程调度的模块具体实现。垃圾回收,资源统计,远程方法调用。多态则是在封装的基础上再进一步,多态则是不需要你知道当前的是啥类。封装的本质是使调用者不用了解类的细节,降低学习和使用的成本。sleep是Thread的类方法 Tread.sleep。前台线程没有执行结束,此时整个进程,是一定不会结束的。Thread对象的生命周期要比系统中的内核线程还要长。后台线程不结束不影响整个进程的结束。

2025-10-02 20:40:47 350

原创 mysql多表操作

这样就满足了 “即使部门不匹配,也保留符合年龄条件的员工信息” 的需求。exists来判断是否有对应限定条件的语句,如果有数据结果那么就会输出。当需要一个表的所有数据时就要用到左连接查询。=any和in的作用在大多是情况下是一样的。子查询就是包含select嵌套的查询。)中,也能查询到该员工的信息,需要将。

2025-10-02 00:23:48 186

原创 异常+多线程

本文摘要了Java字符串、异常处理、进程管理和多线程相关内容。字符串部分介绍了String的value和hash属性、常量池机制及常用方法;异常处理说明了try-catch-finally结构及throws的用法;进程管理解释了PCB描述和双向链表组织方式;多线程部分重点对比了进程与线程的区别,包括资源共享、调度单位等特性,并说明了start()和run()方法的差异。全文涵盖了Java编程中字符串操作、异常处理和多线程开发的核心知识点。

2025-09-28 23:48:22 421

原创 clone接口的使用

/ 直接使用,更简洁。:如果忘记强制转换,编译就会报错。object 是所有的类的父类。// 使用时不需要强制转换。:调用者不需要关心类型转换。:使用时不需要强制转换。

2025-09-26 23:01:10 262

原创 杂鱼......

抽象类。

2025-09-24 18:35:00 339

原创 ....杂

order by来设定你想按哪个字段那种方式来排序。多个对象具有的属性进行抽取,通过子类继承父类的属性。查询以第二个字为寇的所有商品。

2025-09-24 16:55:18 279

原创 学习杂记...

this。

2025-09-24 15:07:48 340

原创 QaQ学习日记

通过类类型来创建对象的过程叫做类的实例化new关键词 ,来实例化一个对象Dog就是一个引用 指向了Dog对象。

2025-09-23 21:53:19 173

空空如也

空空如也

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

TA关注的人

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