Sql Optimize

本文主要讲关于SELECT语句的优化问题. 会涉及到一些关于表索引的知识. 性能 很简单, 你每建立一个索引, 数据库就会根据索引类型,帮你建立一个索引数据结构(B+树非常常用). NOTE:B+树 B+树对范围查询和直接查询都很在行. 直接查询的时间复杂度均为O(log), 也就是用的二分法, 具体为什么就去看B+树的数据结构, 在看B+树之前最好先看B树, 不然东西太多消化不了. ...

2020年11月19日 · 4 分钟 · 1991 字 · sdttttt

Go的map的个什么结构

实际上Go的map和Java7之前的HashMap, 非常相似。都是Array + LinkedTable的结构。 结构 map数据结构由runtime/map.go/hmap定义: 1 2type hmap struct { 3 count int // 当前保存的元素个数 4 ... 5 B uint8 // 指示bucket数组的大小 6 ... 7 buckets unsafe.Pointer // bucket数组指针,数组的大小为2^B 8 ... 9} bucket数据结构由runtime/map.go/bmap定义: ...

2020年11月13日 · 1 分钟 · 437 字 · sdttttt

Impl and Dyn on Rust

我们先来看这样一段代码: 1 2impl View for Button { ... } 3 4impl View for Text { ... } 我们看到Button和Text都实现了View属性, 抽象是一种不错的设计程序的方法, 帮助我们透明化的使用外部提供的API. 然后我们可能会下意识的写出下面的代码: ...

2020年11月12日 · 2 分钟 · 567 字 · sdttttt

2020-10-22

昨天算是完成了第一个前端上需求.来讲讲成果吧. (其实根本无关紧要) 看了SVN记录,整个项目第一次提交是在2018年. (立项的时间感觉肯定更早) 整体技术使用的基本时原生JS(没有ES6) + Jquery. 项目代码风格凌乱. 肯定有好几个人接手过了. ...

2020年10月22日 · 1 分钟 · 374 字 · sdttttt

RocketMQ 3.3.4 Broker

差不多可以看消息队列的源码了。 在下从gitee上找到了rocketmq的早期版本(3.2.2), 坏消息是这个2014年的项目里没有单元测试极少, 调试会比较困难. 好消息是这个时候的RocketMQ还没开源多久,里面有很多中文注释。看起来会很舒服。 ...

2020年10月13日 · 2 分钟 · 799 字 · sdttttt

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

Blog Upgrade

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

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

Thread Pool Executor 运行细节

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

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

Stack by Rust implement

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