<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[GDUT_Trim的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/GDUT_Trim</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; GDUT_Trim]]></copyright><item><title><![CDATA[MyBatis（技术NeiMu）：核心处理层（Executor）]]></title><link>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121983059</link><guid>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121983059</guid><author>GDUT_Trim</author><pubDate>Thu, 16 Dec 2021 20:25:29 +0800</pubDate><description><![CDATA[回顾Executor模板方法BaseExecutor一级缓存一级缓存简介一级缓存的管理CacheKey如何生成重载的query方法update方法的细节一级缓存清空的情况事务相关操作的细节
回顾
前面我们看了MyBatis的StatementHandler，而StatementHandler是用于跟数据库进行交互的，并且完成调用ResultSetHandler完成结果集的映射，并且StatemenHandler采用了一个装饰者模式，实际上得到的所有StatementHandler都是RoutingStat.]]></description><category></category></item><item><title><![CDATA[计网总结（网络层）]]></title><link>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121958470</link><guid>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121958470</guid><author>GDUT_Trim</author><pubDate>Wed, 15 Dec 2021 18:10:10 +0800</pubDate><description><![CDATA[网络层总结（IP协议簇）知识点网络层主要的协议IP地址形式的发展IPV4数据报格式路由算法无子网划分时的路由算法出现子网划分时的路由算法形成超网之后的路由算法网络层的协议ARP协议ICMP协议路由选择协议内部网关协议RIPOSPF外部网关协议BGPIPV6IPV4如何过渡到IPV6
网络层总结（IP协议簇）
知识点
知识点如下

ARP、ICMP、ICGP协议，重点在于ARP和ICMP
IP地址的分类、IP地址组成、IP地址的演化
IPV4数据报格式
无子网划分的路由器的分组转发算法
子网划分、子网划分之.]]></description><category></category></item><item><title><![CDATA[计网总结（传输层）]]></title><link>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121958445</link><guid>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121958445</guid><author>GDUT_Trim</author><pubDate>Wed, 15 Dec 2021 18:07:35 +0800</pubDate><description><![CDATA[知识点多路复用与解复用UDPTCP可靠传输的实现RDT停止等待协议连续ARQ协议GBN协议SR协议GBN协议与SR协议的区别TCP实现可靠传输GBN的实现SR的实现流量控制拥塞控制TCP的报文段TCP的可靠连接为什么是三次握手，两次行不行，四次、五次呢？TCP的连接释放
传输层在网络层提供的服务基础上，实现了端对端之间的服务
知识点

UDP
TCP
UDP和TCP如何实现复用和解复用
TCP如何实现可靠传输、流量控制、拥塞控制
TCP的连接建立与连接拆除，通俗来说就是三次握手、四次挥手

总的来说，能把.]]></description><category></category></item><item><title><![CDATA[MyBatis（技术NeiMu）：核心处理层（StatementHandler）]]></title><link>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121893726</link><guid>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121893726</guid><author>GDUT_Trim</author><pubDate>Sun, 12 Dec 2021 21:20:40 +0800</pubDate><description><![CDATA[回顾StatementHandlerRoutingStatementHandlerBaseStatementHandlerParameterHandlerDefaultParameterHandlerSimpleStatementHandler创建Statement执行查询执行修改PrepareStatementHandler创建Statement执行查询执行修改绑定实参CallableStatementHandler
回顾
StatementHandler
StatementHandler接口是MyBa.]]></description><category></category></item><item><title><![CDATA[# MyBatis（技术NeiMu）：核心处理层（ResultSetHandler）]]></title><link>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121893677</link><guid>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121893677</guid><author>GDUT_Trim</author><pubDate>Sun, 12 Dec 2021 21:11:16 +0800</pubDate><description><![CDATA[回顾ResultSetHandlerDefaultResultSetHandlerhandlerResultSets方法ResultSet的迭代过程ResultSetWrapper构造方法映射
回顾
前面我们已经了解了MyBatis的整个初始化过程，与SQL节点的解析与SQL节点的SQL是如何与实参进行绑定起来、如何根据实参进行动态拼接，下面来看一下MyBatis是如何处理结果集的
ResultSetHandler
MyBatis会根据SQL映射配置文件中定义的映射规则，比如resultMap标签、res.]]></description><category></category></item><item><title><![CDATA[MyBatis（技术NeiMu）：核心处理层（SqlNode和SqlSource）]]></title><link>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121893475</link><guid>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121893475</guid><author>GDUT_Trim</author><pubDate>Sun, 12 Dec 2021 21:08:58 +0800</pubDate><description><![CDATA[回顾SqlNode与SqlSourceSqlSource组合模式OGNL表达式OgnlCacheDynamicContextContextMapSqlNodeMixedSqlNodeStaticSqlNodeTextSqlNodeSqlSourceBuilderParameterMappingTokenHandlerParameterMappingBoundSqlDynamicSqlSource总结一下动态SQL的解析拓展：${}和#{}的区别RawSqlSource
回顾
前面我们已经看了整个MyBat.]]></description><category></category></item><item><title><![CDATA[MyBatis（技术NeiMu）：核心处理层（SQL映射配置文件解析：select、insert、update、delete标签的解析）]]></title><link>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121893351</link><guid>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121893351</guid><author>GDUT_Trim</author><pubDate>Sun, 12 Dec 2021 20:57:15 +0800</pubDate><description><![CDATA[回顾buildStatementFromContextSqlSourceMappedStatementMapperStatementBuilder的parseStatementNode方法刷新缓存与使用缓存解析include标签解析selectKey标签LangDriverNodeHandler解析SQL总结一下Mapper的解析过程绑定Mapper接口处理incomplete*集合
回顾
前面我们已经看了SQL映射配置文件上的一些核心标签是如何解析的了，同时也认识了二级缓存的构建过程，下面来看一下对于s.]]></description><category></category></item><item><title><![CDATA[MyBatis（技术NeiMu）：核心处理层（SQL映射配置文件解析）]]></title><link>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121893132</link><guid>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121893132</guid><author>GDUT_Trim</author><pubDate>Sun, 12 Dec 2021 20:49:27 +0800</pubDate><description><![CDATA[回顾XMLMapperBuilder判断SQL映射文件是否已经解析过解析mapper标签解析cache子标签解析cache-ref子标签解析parameterMap子标签解析resultMap子标签ResultMapping对象ResultMap对象其他标签的处理constructor标签的处理Resolve处理解析SQL子标签
回顾
上一章我们已经分析了，MyBatis是如何进行初始化的了，采用建造者模式去创建出Configuration，创建者主要是XMLConfigBuilder，指挥者为SqlSe.]]></description><category></category></item><item><title><![CDATA[MyBatis（技术NeiMu）：核心处理层（MyBatis的初始化）]]></title><link>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121893048</link><guid>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121893048</guid><author>GDUT_Trim</author><pubDate>Sun, 12 Dec 2021 20:35:11 +0800</pubDate><description><![CDATA[回顾核心处理层MyBatis初始化建造者模式初始化！BaseBuilder！XMLConfigBuilderparseConfiguration解析Properties标签解析settings标签加载vfs加载logImpl解析typeAlias标签解析plugins节点解析objectFactory标签解析ObjectWrapperFactory标签解析reflectorFactory标签对settings剩下的子标签的解析解析environments标签解析databaseIdProvider标签解析.]]></description><category></category></item><item><title><![CDATA[浅谈缓存与数据库的一致性问题]]></title><link>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121546648</link><guid>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121546648</guid><author>GDUT_Trim</author><pubDate>Thu, 25 Nov 2021 20:24:06 +0800</pubDate><description><![CDATA[前言
面试经常问缓存与数据库的数据如何保持一致性，很有必要研究一下这个问题，首先提前声明，以下分析都是要基于提高吞吐量的前提下进行，要是抛弃吞吐量这个前提，最直接的办法就是上分布式锁，让所有读写请求都串行化，肯定可以解决了数据库的一致性问题，但吞吐量就很显然会下降！
本质
个人觉得，解决缓存与数据库不一致性的问题可以细分为下面这两个问题

操作数据库肯定是更新数据，那么操作缓存是更新数据还是删除数据呢？
先操作数据库还是先操作缓存呢？

下面我们逐个问题进行分析
Cache的写机制和读机制
我们首先要对现在]]></description><category></category></item><item><title><![CDATA[MyBatis（技术NeiMu）：基础支持层（类型转换、日志模块与类加载模块）]]></title><link>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121457353</link><guid>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121457353</guid><author>GDUT_Trim</author><pubDate>Sun, 21 Nov 2021 18:21:30 +0800</pubDate><description><![CDATA[回顾MetaObject类型转换TypeHandlerTypeHandlerRegistry注册TypeHandler对象TypeAliasRegistry注册别名日志模块设计模式——六大原则日志适配器类加载模块ResolverUtilIsAAnnotatedWithVFS
回顾
上一篇分析了几个反射工具，还有对类数据的封装MetaClass，对实例数据的封装ObjectWrapper和创建ObjectWrappe的ObjectWrapperFactory
MetaObject
ObjectWrapper.]]></description><category></category></item><item><title><![CDATA[# MyBatis（技术NeiMu）：基础支持层（Transaction与Binding）]]></title><link>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121457181</link><guid>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121457181</guid><author>GDUT_Trim</author><pubDate>Sun, 21 Nov 2021 18:08:51 +0800</pubDate><description><![CDATA[回顾TransactionJdbcTransaction获取连接提交、回滚、关闭ManagedTransactionTransactionFactoryJdbcTransactionFactoryManagedTransactionFactorybinding模块MapperRegistry注册Mapper与对应的MapperProxyFactory获取Mapper接口的代理对象MapperProxyFactoryMapperProxyPlainMethodInvokerMapperMethodSqlCo.]]></description><category></category></item><item><title><![CDATA[MyBatis（技术NeiMu）：基础支持层（DataSource）]]></title><link>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121457045</link><guid>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121457045</guid><author>GDUT_Trim</author><pubDate>Sun, 21 Nov 2021 17:56:15 +0800</pubDate><description><![CDATA[回顾DataSourceDataSourceFactoryUnpooledDataSourceFactoryPooledDataSourceFactoryJndiDataSourceFactoryJNDIUnpooledDataSourcegetConnectioninitializeDriverDriverManager.getConnectionconfigureConnectionPooledDataSourcePooledConnectionPoolStatePooledDataSource的其他.]]></description><category></category></item><item><title><![CDATA[MyBatis（技术NeiMu）：基础支持层（Property工具集）]]></title><link>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121456950</link><guid>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121456950</guid><author>GDUT_Trim</author><pubDate>Sun, 21 Nov 2021 17:46:11 +0800</pubDate><description><![CDATA[回顾Property工具集PropertyTokenizerPropertyNamerPropertyCopierMetaClassbuildPropertyhasGetter和hasSetterObjectWrapper和ObjectWrapperFactoryObjectWrapperCollectionWrapperBaseWrapperresolveCollectiongetCollectionValuesetCollectionValueObjectWrapperFactory
回顾
上一篇分析.]]></description><category></category></item><item><title><![CDATA[MyBatis（技术NeiMu）：基础支持层（解析器模块与反射模块）]]></title><link>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121456698</link><guid>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121456698</guid><author>GDUT_Trim</author><pubDate>Sun, 21 Nov 2021 17:38:27 +0800</pubDate><description><![CDATA[回顾基础支持层解析器模块XPathParsercommonConstructorcreateDocumenteval方法针对evalString的特殊处理反射模块Reflector和ReflectorFactoryReflectorgetDefaultConstructor方法addGetMethods方法addSetMethods方法addFields方法最后的处理ReflectorFactoryfindForClass
回顾
前面我们已经认识了MyBatis的整体架构，下面就从下往上去了解一下具体的细.]]></description><category></category></item><item><title><![CDATA[MyBatis（技术NeiMu）：基础支持层（类型转换模块与ObjectFactory）]]></title><link>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121456619</link><guid>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121456619</guid><author>GDUT_Trim</author><pubDate>Sun, 21 Nov 2021 17:23:49 +0800</pubDate><description><![CDATA[回顾类型转换模块TypeParameterResolver解析字段类型的——resolveFieldType解析方法参数列表中各个参数的类型——resolverParamTypes解析方法返回值的类型——resolverReturnTyperesolveTypeType接口resolverParameterizedTyperesolverTypeVarObjectFactorycreate(Class type)create(Class type,List......)处理集合接口确定好类型后创建对象
回.]]></description><category></category></item><item><title><![CDATA[MyBatis（技术NeiMu）：整体架构]]></title><link>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121456489</link><guid>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121456489</guid><author>GDUT_Trim</author><pubDate>Sun, 21 Nov 2021 17:19:10 +0800</pubDate><description><![CDATA[ORMMyBatis的整体架构基础支持层核心处理层接口层
ORM
什么是ORM呢？
首先我们来认识一下JDBC，JDBC是Java与数据库交互的统一API，其实JDBC分为两组API

一组是面向Java应用程序开发人员的API
另一组是面向数据库驱动程序开发人员的API

这两组怎么进行区分呢？
前者是一个标准的Java API，是独立于各个数据库厂家来实现的；而后者则是交由数据库驱动开发人员用于编写数据库驱动的，是前者的底层支持，不同的数据库会有不同的API
回顾正题
ORM是指Object Rela.]]></description><category></category></item><item><title><![CDATA[Spring（二十）：ObjenesisCglibAopProxy]]></title><link>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121127874</link><guid>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121127874</guid><author>GDUT_Trim</author><pubDate>Wed, 03 Nov 2021 18:52:01 +0800</pubDate><description><![CDATA[回顾ObjenesisCglibAopProxy拦截器链如何形成自定义拦截CglibMethodInvocation
回顾
上一章仔细分析了Spring对于JDK代理的代理类的invoke方法，也填下了之前没有接触AOP导致循环依赖未彻底弄明白的坑，下面就认识一下Spring对于Cglib代理是如何实现的
ObjenesisCglibAopProxy

仍然都是由ObjenesisCglobAopProxy创建的

可以看到其构建方法仅仅只是初始化了父类而已
拓展：这里拓展一下之前是如何使用Cglib代理.]]></description><category></category></item><item><title><![CDATA[Spring（十八）：AOP——寻找匹配的增强器]]></title><link>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121109786</link><guid>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121109786</guid><author>GDUT_Trim</author><pubDate>Tue, 02 Nov 2021 21:40:34 +0800</pubDate><description><![CDATA[回顾返回AbstractAdvisorAutoProxyCretorfindAdvisorsThatCanApplyAopUtilscanApply方法AOP——创建切面createProxy方法封装Advisors创建代理creatAopProxt
回顾
上一篇，我们已经看了如何AOP如何对标签进行解析，并且生成了一系列的增强器，比如建言增强器、同步实例化增强器、DeclaredParent增强器，但找到这些增强器并不一定都适用，还要进行匹配的
返回AbstractAdvisorAutoProxyCre.]]></description><category></category></item><item><title><![CDATA[Spring（十九）：AOP代理——JdkDynamicAopProxy、填坑：AOP代理与上循环依赖]]></title><link>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121109488</link><guid>https://blog.youkuaiyun.com/GDUT_Trim/article/details/121109488</guid><author>GDUT_Trim</author><pubDate>Tue, 02 Nov 2021 21:29:31 +0800</pubDate><description><![CDATA[回顾JdkDynamicAopProxy曝光代理对象拦截器链的执行填坑：AOP曝光与创建Bean时的曝光getProxy
回顾
之前我们已经详细说明了Bean是如何被代理的，最终Bean会被解析成JdkDynamicAopProxy或者ObjenesisCglibAopProxy对象了，对应JDK代理和Cglib代理，下面就来仔细看看这两个对象吧
还是回到之前DefaultAopProxyFactory的createAopProxy

这里的config已经有了之前解析出来的增强器和拦截器了（一个总的数组.]]></description><category></category></item></channel></rss>