SF
seven97
seven97
注册登录
关注博客
注册登录
主页
关于
RSS
周末了,写个转码经历流水账
seven97_top
1 月 11 日
阅读 3 分钟
212
我是普通学校出身,硕士期间自学Java,秋招最终斩获 12 个 offer,包含中大厂、初创公司、国企 等各类型公司。自学路上遇到不少问题,但最终结果还是满意的,最终是在北京某互联网厂从事一线开发。
《深入理解Mybatis原理》MyBatis数据源与连接池详解
seven97_top
1 月 9 日
阅读 19 分钟
83
MyBatis数据源DataSource分类MyBatis把数据源DataSource分为三种:UNPOOLED 不使用连接池的数据源POOLED 使用连接池的数据源JNDI 使用JNDI实现的数据源相应地,MyBatis内部分别定义了实现了java.sql.DataSource接口的UnpooledDataSource,PooledDataSource类来表示UNPOOLED、POOLED类型的数据源。对于JNDI类型的数据源Da...
《深入理解Mybatis原理》Mybatis插件机制&分页机制原理
seven97_top
1 月 9 日
阅读 23 分钟
227
比较简单,只有3个方法。 MyBatis默认没有一个拦截器接口的实现类,开发者们可以实现符合自己需求的拦截器。下面的MyBatis官网的一个拦截器实例:
《深入理解Mybatis原理》MyBatis动态SQL原理
seven97_top
1 月 7 日
阅读 8 分钟
253
引入我们在使用mybatis的时候,会在xml中编写sql语句。比如这段动态sql代码: {代码...} mybatis底层是如何构造这段sql的?关于动态SQL的接口和类SqlNode接口,简单理解就是xml中的每个标签,比如上述sql的update,trim,if标签: {代码...} SqlSource Sql源接口,代表从xml文件或注解映射的sql内容,主要就是用于创建Boun...
《深入理解Mybatis原理》MyBatis的sqlSession执行流程
seven97_top
1 月 6 日
阅读 19 分钟
253
正如其名,Sqlsession对应着一次数据库会话。由于数据库会话不是永久的,因此Sqlsession的生命周期也不应该是永久的,相反,在你每次访问数据库时都需要创建它(当然并不是说在Sqlsession里只能执行一次sql,你可以执行多次,当一旦关闭了Sqlsession就需要重新创建它)。
《深入理解Mybatis原理》MyBatis初始化机制详解
seven97_top
2024-12-31
阅读 8 分钟
252
主要构件及其相互关系主要构件:主要的核心部件解释如下:SqlSession: 作为MyBatis工作的主要顶层API,表示和数据库交互的会话,完成必要数据库增删改查功能Executor:MyBatis执行器,是MyBatis 调度的核心,负责SQL语句的生成和查询缓存的维护StatementHandler: 封装了JDBC Statement操作,负责对JDBC statement 的操...
JDBC 底层原理
seven97_top
2024-12-30
阅读 7 分钟
337
JDBC(Java DataBase Connectivity)是Java和数据库之间的一个桥梁,是一个「规范」而不是一个实现,能够执行SQL语句。JDBC由一组用Java语言编写的类和接口组成。各种不同类型的数据库都有相应的实现,注意:本文中的代码都是针对MySQL数据库实现的。
Spring事务管理深度解析-从实践到原理
seven97_top
2024-12-26
阅读 31 分钟
347
基于AOP面向切面的,它将具体业务与事务处理部分解耦,代码侵入性很低,所以在实际开发中声明式事务用的比较多。声明式事务也有两种实现方式,一是基于TX和AOP的xml配置文件方式,第二种就是基于@Transactional注解了。
如何控制bean的加载顺序?
seven97_top
2024-12-26
阅读 6 分钟
237
springboot遵从约定大于配置的原则,极大程度的解决了配置繁琐的问题。在此基础上,又提供了spi机制,用spring.factories可以完成一个小组件的自动装配功能。
AOP中动态代理详解
seven97_top
2024-12-24
阅读 28 分钟
270
在生成代理对象的过程中,目标对象不变,代理对象中的方法是目标对象方法的增强方法。可以理解为运行期间,对象中方法的动态拦截,在拦截方法的前后执行功能操作。
AOP 面向切面编程的实现原理
seven97_top
2024-12-23
阅读 25 分钟
266
AOP是基于IOC的Bean加载来实现的,所以理解Spring AOP的初始化必须要先理解Spring IOC的初始化。然后就能找到初始化的流程和aop对应的handler,即parseCustomElement方法找到parse aop:aspectj-autoproxy的handler(org.springframework.aop.config.AopNamespaceHandler)
从底层源码深入分析Bean的实例化
seven97_top
2024-12-19
阅读 39 分钟
326
Spring 容器可以管理 singleton 作用域 Bean 的生命周期,在此作用域下,Spring 能够精确地知道该 Bean 何时被创建,何时初始化完成,以及何时被销毁。
Spring中的循环依赖是怎么个事?
seven97_top
2024-12-17
阅读 4 分钟
371
首先,有两种Bean注入的方式:构造器注入和属性注入。对于构造器注入的循环依赖,Spring处理不了,会直接抛出BeanCurrentlylnCreationException异常。对于属性注入的循环依赖单例模式下,是通过三级缓存处理来循环依赖的。非单例对象的循环依赖,则无法处理。单例模式下的属性依赖先来看下这三级缓存 {代码...} 第一层缓...
从底层源码深入分析Spring的IoC容器初始化过程
seven97_top
2024-12-16
阅读 38 分钟
266
Spring是如何实现将资源配置(以xml配置为例)通过加载,解析,生成BeanDefination并注册到IoC容器中的?这主要会经过以下 4 步:
Spring框架IoC核心详解
seven97_top
2024-12-12
阅读 16 分钟
422
IoC(Inversion of Control:控制反转) 是一种设计思想,而不是一个具体的技术实现。IoC 的思想就是将原本在程序中手动创建对象的控制权,交由 Spring 框架来管理,由Spring容器管理bean的整个生命周期。通俗来说就是IoC是设计思想,DI是实现方式。
Spring AOP基础、快速入门
seven97_top
2024-12-10
阅读 16 分钟
200
AOP,面向切面编程,作为面向对象的一种补充,将公共逻辑(事务管理、日志、缓存、权限控制、限流等)封装成切面,跟业务代码进行分离,可以减少系统的重复代码和降低模块之间的耦合度。切面就是那些与业务无关,但所有业务模块都会调用的公共逻辑。
全网最详细的Spring入门教程
seven97_top
2024-12-09
阅读 15 分钟
222
Spring的一个最大的目的就是使JAVA EE开发更加容易。同时,Spring之所以与Struts、Hibernate等单层框架不同,是因为Spring致力于提供一个以统一的、高效的方式构造整个应用,并且可以将单层框架以最佳的组合揉和在一起建立一个连贯的体系。可以说Spring是一个提供了更完善开发环境的一个框架,可以为POJO(Plain Ordinary...
认识Redis集群
seven97_top
2024-12-05
阅读 13 分钟
209
写并发:Redis单实例读写分离可以解决读操作的负载均衡,但对于写操作,仍然是全部落在了master节点上面,在海量数据高并发场景,一个节点写数据容易出现瓶颈,造成master节点的压力上升。
Redis探秘Sentinel(哨兵模式)
seven97_top
2024-12-03
阅读 5 分钟
352
复制:复制是高可用Redis的基础,哨兵和集群都是在复制基础上实现高可用的。复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复。缺陷:故障恢复无法自动化;写操作无法负载均衡;存储能力受到单机的限制。
一文聊清楚Redis主从复制原理
seven97_top
2024-12-02
阅读 4 分钟
275
从上述几个维度的对比可以发现,同样是缓存,但集中式缓存所承担的使命是完全不一样的,业务对集中式缓存的存储容量、可靠性、承压性等方面的诉求也是天壤之别,不可等同视之。以Redis为例:
Redis中常见的延迟问题
seven97_top
2024-11-27
阅读 6 分钟
235
首先设置Redis的慢日志阈值,只有超过阈值的命令才会被记录,这里的单位是微妙,例如设置慢日志的阈值为5毫秒,同时设置只保留最近1000条慢日志记录:
Redis中的分布式锁(步步为营)
seven97_top
2024-11-26
阅读 20 分钟
103
分布式锁指的是,所有服务中的所有线程都去获取同一把锁,但只有一个线程可以成功的获得锁,其他没有获得锁的线程必须全部等待,直到持有锁的线程释放锁。
Redis究竟为什么这么快?
seven97_top
2024-11-25
阅读 2 分钟
124
完全基于内存,数据存在内存中,绝大部分请求是纯粹的内存操作,非常快速,跟传统的磁盘文件数据存储相比,避免了通过磁盘IO读取到内存这部分的开销。
Redis中有事务吗?有何不同?
seven97_top
2024-11-22
阅读 2 分钟
115
Redis事务是指将多条命令加入队列,一次批量执行多条命令,每条命令会按顺序执行,事务执行过程中不会被其他客户端发来的命令所打断。也就是说,Redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。
万字长文带你深入Redis底层数据结构
seven97_top
2024-11-21
阅读 29 分钟
166
Redis 的键值对中的 key 就是字符串对象,而 value 就是指Redis的数据类型,可以是String,也可以是List、Hash、Set、 Zset 的数据类型。
Redis中常见的数据类型及其应用场景
seven97_top
2024-11-20
阅读 10 分钟
118
Redis中的数据类型指的是 value存储的数据类型,key都是以String类型存储的,value根据场景需要,可以以String、List等类型进行存储。
Mysql篇-语句执行计划详解(explain)
seven97_top
2024-11-18
阅读 8 分钟
132
概述使用 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 分钟
120
概述undo log(回滚日志):是 Innodb 存储引擎层生成的日志,实现了事务中的原子性,主要用于事务回滚和 MVCC。redo log(重做日志):是 Innodb 存储引擎层生成的日志,实现了事务中的持久性,主要用于掉电等故障恢复;binlog (归档日志):是 Server 层生成的日志,主要用于数据备份和主从复制;回滚日志(undo log...
Mysql篇-Buffer Pool中的三大链表
seven97_top
2024-11-12
阅读 6 分钟
93
为什么要有 Buffer Pool?虽然说 MySQL 的数据是存储在磁盘里的,但是也不能每次都从磁盘里面读取数据,这样性能是极差的。要想提升查询性能,那就加个缓存。所以,当数据从磁盘中取出后,缓存内存中,下次查询同样的数据的时候,直接从内存中读取。为此,Innodb 存储引擎设计了一个缓冲池(Buffer Pool),来提高数据库...
Mysql数据类型面试题15连问
seven97_top
2024-11-11
阅读 5 分钟
125
MySQL 中的整数类型可以使用可选的 UNSIGNED 属性来表示不允许负值的无符号整数。使用 UNSIGNED 属性可以将正整数的上限提高一倍,因为它不需要存储负数值。
1
(current)
2
下一页
1
(current)
下一页