MyBatis 源码分析

其实很早就想写一篇 iBatis 的源码分析了, 不过有段时间去学习 Go 了, Java 就放下了, 最近 重新捡起 Java 就把以前没填的坑,填一下. Init 现在开始正片. 首先是 iBatis 的初始化工作.我们看下面的代码: 1// `BlogDataSourceFactory`的主要作用: 通过你的配置文件, 初始化一个DataSource 2DataSource dataSource = BlogDataSourceFactory.getBlogDataSource(); 3// JdbcTransactionFactory一个New就能得到, 没什么依赖条件 4TransactionFactory transactionFactory = new JdbcTransactionFactory(); 5// Environment要你交出数据源和事务工厂还有你的环境是开发还是生产 6Environment environment = new Environment("development", transactionFactory, dataSource); 7// Configuration有基本上你所有的配置 8Configuration configuration = new Configuration(environment); 9// 添加你的mapper到配置列表中, 等会我们去分析它 10configuration.addMapper(BlogMapper.class); 11// 通过你的配置类,让我们初始化一个SqlSessionFactory! 我们终于进入正题了!! 12// 可能你觉得很快... 其实本人在这里面分析还是花了很长时间 13SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration); 好, 上文有说configuration.addMapper(BlogMapper.class)这个方法, 现在我们来分析一下它. ...

2020年09月10日 · 9 分钟 · 4031 字 · sdttttt

GoSyncPool

今天在看Sentinel-golang源码的时候发现sentinel在内部使用了sync.Pool该结构体.看到Sync和Pool的我第一反应想到应该是线程池之类的东西.在实际看过原理之后发现并不是这样的. ...

2020年09月03日 · 2 分钟 · 578 字 · sdttttt

B Tree

这篇文章以数据库存储的数据结构来引出本文的重点B树,以及后面还有另一种数据结构B+树. 试想, 如果你想持久化大量的数据在硬盘上, 同时还希望能高效的查询和修改他们, 你会怎么做, 使用哪种数据结构. 数组和链表, 他们的缺点很明显, 我们寻找数据需要遍历整个数据结构, 试想一下你的数据库中有50PB的数据, 这个开销是我们无法接受的. ...

2020年08月30日 · 2 分钟 · 999 字 · sdttttt

Blog Upgrade

这几天修改了这个Blog的主题, 加载速度应该是更快了, 而且优化了整个项目的自动部署. 取消了双仓库的部署策略, 在部署任务的执行上也用上了异步. 现在每次修改完成后的生成以及部署的速度比以前快了大概40%左右.但是访问Github Page的速度还是一如既往的的满.

2020年08月29日 · 1 分钟 · 129 字 · sdttttt

Thread Pool Executor 运行细节

先说说线程池本身, 由于线程资源本身在计算机中比较昂贵, 创建和销毁都有相当的开销, 所以在一些处理简单但是并发量大的场景使用一个请求对应一个线程的是不明智的选择. ThreadPoolExecutor是Java中线程池的一种实现. 构造函数如下: ...

2020年08月25日 · 1 分钟 · 418 字 · sdttttt

Raft实现的思考

比较Raft算法和Paxos算法之后,确实能感受到Raft算法更加接近正常人的思维逻辑, Paxos反而比较专业? 本文会说一些Raft算法实现上的一些考量, 我目前还没有正式开始开发Raft的实现. 文中所有的内容仅供参考. ...

2020年06月25日 · 1 分钟 · 290 字 · sdttttt

Red Black Tree

半年前在研究HashMap的时候已经学习过红黑树的规则原理了. 不过现在又遇到就忘记是怎么实现的了.(只知道这玩意是用来平衡树的) 这次就把这个数据结构做一个了断. 性质 性质1:每个节点要么是黑色,要么是红色。 性质2:根节点是黑色。 性质3:每个叶子节点(NIL)是黑色。 性质4:每个红色结点的两个子结点一定都是黑色。 性质5:任意一结点到每个叶子结点的路径都包含数量相同的黑结点。 满足这5个性质就能保证红黑树是平衡的. ...

2020年05月25日 · 2 分钟 · 924 字

Stack by Rust implement

2020年05月20日 · 0 分钟 · 0 字

Tree by Rust implement

2020年05月20日 · 0 分钟 · 0 字

一致性哈希算法

第一代分布式系统采用的是中心化的系统,对于存贮大量数据的分布式系统来说它的缺点就是中央节点成为了整个个分布式系统的单点故障. 第二代分布式系统,节点之间通行采用的是广播,每个节点都向自己相连的所有节点进行询问,被询问的节点如果不知道这个文件在哪里,就再次进行广播……如此往复,直至找到所需文件。请求变多就意味着会产生广播风暴,这会严重占用带宽和系统资源。 ...

2020年04月27日 · 5 分钟 · 2120 字