SF
seven97
seven97
注册登录
关注博客
注册登录
主页
关于
RSS
从底层源码深入分析Bean的实例化
seven97_top
2024-12-19
阅读 39 分钟
594
Spring 容器可以管理 singleton 作用域 Bean 的生命周期,在此作用域下,Spring 能够精确地知道该 Bean 何时被创建,何时初始化完成,以及何时被销毁。
Spring中的循环依赖是怎么个事?
seven97_top
2024-12-17
阅读 4 分钟
528
首先,有两种Bean注入的方式:构造器注入和属性注入。对于构造器注入的循环依赖,Spring处理不了,会直接抛出BeanCurrentlylnCreationException异常。对于属性注入的循环依赖单例模式下,是通过三级缓存处理来循环依赖的。非单例对象的循环依赖,则无法处理。单例模式下的属性依赖先来看下这三级缓存 {代码...} 第一层缓...
从底层源码深入分析Spring的IoC容器初始化过程
seven97_top
2024-12-16
阅读 38 分钟
509
Spring是如何实现将资源配置(以xml配置为例)通过加载,解析,生成BeanDefination并注册到IoC容器中的?这主要会经过以下 4 步:
Spring框架IoC核心详解
seven97_top
2024-12-12
阅读 16 分钟
676
IoC(Inversion of Control:控制反转) 是一种设计思想,而不是一个具体的技术实现。IoC 的思想就是将原本在程序中手动创建对象的控制权,交由 Spring 框架来管理,由Spring容器管理bean的整个生命周期。通俗来说就是IoC是设计思想,DI是实现方式。
Spring AOP基础、快速入门
seven97_top
2024-12-10
阅读 16 分钟
425
AOP,面向切面编程,作为面向对象的一种补充,将公共逻辑(事务管理、日志、缓存、权限控制、限流等)封装成切面,跟业务代码进行分离,可以减少系统的重复代码和降低模块之间的耦合度。切面就是那些与业务无关,但所有业务模块都会调用的公共逻辑。
全网最详细的Spring入门教程
seven97_top
2024-12-09
阅读 15 分钟
446
Spring的一个最大的目的就是使JAVA EE开发更加容易。同时,Spring之所以与Struts、Hibernate等单层框架不同,是因为Spring致力于提供一个以统一的、高效的方式构造整个应用,并且可以将单层框架以最佳的组合揉和在一起建立一个连贯的体系。可以说Spring是一个提供了更完善开发环境的一个框架,可以为POJO(Plain Ordinary...
认识Redis集群
seven97_top
2024-12-05
阅读 13 分钟
399
写并发:Redis单实例读写分离可以解决读操作的负载均衡,但对于写操作,仍然是全部落在了master节点上面,在海量数据高并发场景,一个节点写数据容易出现瓶颈,造成master节点的压力上升。
Redis探秘Sentinel(哨兵模式)
seven97_top
2024-12-03
阅读 5 分钟
558
复制:复制是高可用Redis的基础,哨兵和集群都是在复制基础上实现高可用的。复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复。缺陷:故障恢复无法自动化;写操作无法负载均衡;存储能力受到单机的限制。
一文聊清楚Redis主从复制原理
seven97_top
2024-12-02
阅读 4 分钟
425
从上述几个维度的对比可以发现,同样是缓存,但集中式缓存所承担的使命是完全不一样的,业务对集中式缓存的存储容量、可靠性、承压性等方面的诉求也是天壤之别,不可等同视之。以Redis为例:
Redis中常见的延迟问题
seven97_top
2024-11-27
阅读 6 分钟
427
首先设置Redis的慢日志阈值,只有超过阈值的命令才会被记录,这里的单位是微妙,例如设置慢日志的阈值为5毫秒,同时设置只保留最近1000条慢日志记录:
Redis中的分布式锁(步步为营)
seven97_top
2024-11-26
阅读 20 分钟
240
分布式锁指的是,所有服务中的所有线程都去获取同一把锁,但只有一个线程可以成功的获得锁,其他没有获得锁的线程必须全部等待,直到持有锁的线程释放锁。
Redis究竟为什么这么快?
seven97_top
2024-11-25
阅读 2 分钟
276
完全基于内存,数据存在内存中,绝大部分请求是纯粹的内存操作,非常快速,跟传统的磁盘文件数据存储相比,避免了通过磁盘IO读取到内存这部分的开销。
Redis中有事务吗?有何不同?
seven97_top
2024-11-22
阅读 2 分钟
251
Redis事务是指将多条命令加入队列,一次批量执行多条命令,每条命令会按顺序执行,事务执行过程中不会被其他客户端发来的命令所打断。也就是说,Redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。
万字长文带你深入Redis底层数据结构
seven97_top
2024-11-21
阅读 29 分钟
316
Redis 的键值对中的 key 就是字符串对象,而 value 就是指Redis的数据类型,可以是String,也可以是List、Hash、Set、 Zset 的数据类型。
Redis中常见的数据类型及其应用场景
seven97_top
2024-11-20
阅读 10 分钟
288
Redis中的数据类型指的是 value存储的数据类型,key都是以String类型存储的,value根据场景需要,可以以String、List等类型进行存储。
Mysql篇-语句执行计划详解(explain)
seven97_top
2024-11-18
阅读 8 分钟
294
概述使用 explain 输出 SELECT 语句执行的详细信息,包括以下信息:表的加载顺序sql 的查询类型可能用到哪些索引,实际上用到哪些索引读取的行数Explain 执行计划包含字段信息如下:分别是 id、select_type、table、partitions、type、possible_keys、key、key_len、ref、rows、filtered、Extra 12个字段。通过explain e...
Mysql篇-三大日志
seven97_top
2024-11-14
阅读 7 分钟
293
概述undo log(回滚日志):是 Innodb 存储引擎层生成的日志,实现了事务中的原子性,主要用于事务回滚和 MVCC。redo log(重做日志):是 Innodb 存储引擎层生成的日志,实现了事务中的持久性,主要用于掉电等故障恢复;binlog (归档日志):是 Server 层生成的日志,主要用于数据备份和主从复制;回滚日志(undo log...
Mysql篇-Buffer Pool中的三大链表
seven97_top
2024-11-12
阅读 6 分钟
238
为什么要有 Buffer Pool?虽然说 MySQL 的数据是存储在磁盘里的,但是也不能每次都从磁盘里面读取数据,这样性能是极差的。要想提升查询性能,那就加个缓存。所以,当数据从磁盘中取出后,缓存内存中,下次查询同样的数据的时候,直接从内存中读取。为此,Innodb 存储引擎设计了一个缓冲池(Buffer Pool),来提高数据库...
Mysql数据类型面试题15连问
seven97_top
2024-11-11
阅读 5 分钟
274
MySQL 中的整数类型可以使用可选的 UNSIGNED 属性来表示不允许负值的无符号整数。使用 UNSIGNED 属性可以将正整数的上限提高一倍,因为它不需要存储负数值。
一起了解早期使用的各种垃圾收集器
seven97_top
2024-11-07
阅读 5 分钟
294
以上是 HotSpot 虚拟机中的 7 个垃圾收集器,连线表示垃圾收集器可以配合使用。并行收集: 指多条垃圾收集线程并行工作,但此时用户线程仍处于等待状态。并发收集: 指用户线程与垃圾收集线程同时工作(不一定是并行的可能会交替执行)。用户程序在继续运行,而垃圾收集程序运行在另一个CPU上吞吐量: 即CPU用于运行用户...
一文夯实垃圾收集的理论基础
seven97_top
2024-11-05
阅读 15 分钟
272
给对象中添加一个引用计数器,每当有一个地方引用它,计数器就加 1;当引用失效,计数器就减 1;任何时候计数器为 0 的对象就是不可能再被使用的。
说说Java的类加载机制?究竟什么是双亲委派模型?
seven97_top
2024-11-04
阅读 15 分钟
383
官方总结:Java类加载器(英语:Java Classloader)是Java运行时环境(Java Runtime Environment)的一部分,负责动态加载Java类到Java虚拟机的内存空间中。类通常是按需加载,即第一次使用该类时才加载。由于有了类加载器,Java运行时系统不需要知道文件与文件系统。
对象一定分配在堆中吗?聊聊TLAB和逃逸分析技术
seven97_top
2024-10-31
阅读 2 分钟
368
TLAB是虚拟机在堆内存的eden划分出来的一块专用空间,是线程专属的。在虚拟机的TLAB功能启动的情况下,在线程初始化时,虚拟机会为每个线程分配一块TLAB空间(包含在 Eden 空间内),只给当前线程使用,这样每个线程都单独拥有一个空间,如果需要分配内存,就在自己的空间上分配,这样就不存在竞争的情况,可以大大提升...
深入理解Java中的FutureTask:用法和原理
seven97_top
2024-10-30
阅读 15 分钟
769
这里先讲一下什么是异步?异步是指起多个线程,多个线程之间互不干扰,各自执行各自的任务,在代码中可能书写顺序有先有后,但有可能写在后面的线程会比写在前面的线程先执行任务,异步对应并行的概念,常见的异步操作有线程池、Callable、completeFuture等。
聊聊jvm的内存结构, 以及各种结构的作用
seven97_top
2024-10-29
阅读 14 分钟
667
JVM 内存布局规定了 Java 在运行过程中内存申请、分配、管理的策略,保证了 JVM 的高效稳定运行。不同的 JVM 对于内存的划分方式和管理机制存在着部分差异。这也就是常说的运行时数据区
史上最全ThreadLocal 详解
seven97_top
2024-10-28
阅读 9 分钟
1.2k
线程本地变量。当使用 ThreadLocal 维护变量时, ThreadLocal 为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程。
Tomcat线程池详解,为什么SpringBoot最大支持200并发?
seven97_top
2024-10-22
阅读 3 分钟
606
A:SpringBoot 应用并发处理请求数主要由两个因素影响,使用的 Servlet容器(默认使用 Tomcat,常用的还有 jetty、undertow) 和 配置项。所以在默认配置下,SprigBoot 应用可以并发处理 200 请求。
一文夯实并发编程的理论基础
seven97_top
2024-10-21
阅读 11 分钟
489
java当中的共享变量;都放在主内存当中,如类的成员变量(实例变量),还有静态的成员变量(类变量),都是存储在主内存中的。每一个线程都可以访问主内存;
1
2
(current)
上一页
2
(current)
下一页