小凯Alex
码龄8年
关注
提问 私信
  • 博客:132,362
    132,362
    总访问量
  • 87
    原创
  • 2,050,630
    排名
  • 59
    粉丝
  • 0
    铁粉
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:加拿大
  • 加入CSDN时间: 2017-04-25
博客简介:

小凯的博客

查看详细资料
个人成就
  • 获得35次点赞
  • 内容获得11次评论
  • 获得181次收藏
创作历程
  • 33篇
    2020年
  • 59篇
    2019年
成就勋章
TA的专栏
  • Flink源码解读系列
    5篇
  • 数据库
    3篇
  • k8s
    9篇
  • Docker
    5篇
  • zookeeper
  • 分布式存储
    1篇
  • 面试专栏
  • Hadoop生态
    1篇
  • 数据结构与算法
    5篇
  • 分布式系统
    13篇
兴趣领域 设置
  • 大数据
    hadoophivestormspark
创作活动更多

超级创作者激励计划

万元现金补贴,高额收益分成,专属VIP内容创作者流量扶持,等你加入!

去参加
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

Effective Modern C++读书笔记 (二) 智能指针,move和 forward

auto 的理解变量使用auto进行声明的时候,auto扮演了模板的角色.变量的类型说明符(const , & )则是ParamTypeauto x = 27;const auto cx = x;const auto & rx = cx;//x,rx,cx类型的推导就相当于每个声明都用一个理想化的模板来推导template<typename T> //理想化的模板用来推导x的类型void func_for_x(T param);func_for
原创
发布博客 2020.10.08 ·
829 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

Effective Modern C++ 读书笔记(一) 类型推导

Deducing Types模板类型推导template<typename T>void f(ParamType param);编译期间,编译器使用expr进行两个类型推导,一个是针对T,另外一个是针对ParamType的。两个类型通常不同。因为ParamType通常包括对const和reference的修饰如:template<typename T>void f(const T& param);模板类型T的推导不仅仅取决于实参,也取决于ParamTyp
原创
发布博客 2020.08.29 ·
316 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

DDIA第三章读书笔记 数据存储与检索(olap相关摘取)

索引索引可以加快读取速度。那为啥不对所有数据建索引呢建索引会带来额外的空间开销写数据的时候,需要更新索引。任何类型的索引都会降低写速度哈希索引bitcask存储引擎内存中维护hashmap,kv分别对应key和其在数据文件的字节偏移量。所以在文件中追加新的kv对的时候,还需要更新hashmap来反映刚写入数据的偏移量。比较适合key数量较少(足够全部放在内存中),但是value数量频繁更新,数量庞大的情况。value数据量可以超过内存大小(靠一次磁盘io加载数据)如果都只追加到一个文件
原创
发布博客 2020.07.11 ·
507 阅读 ·
0 点赞 ·
1 评论 ·
0 收藏

JDK源码阅读计划(Day16) j.u.c之Semaphore

注释阅读Semaphore是计数信号量,允许N个线程同时访问资源。然而Semaphore并不会创建相应的许可证object,它内部仅仅是维护一个计数量。acquire操作会阻塞线程,除非拿到许可证才能继续进行。release操作会添加许可证,让线程去竞争这个许可证。Semaphore默认计数为1,相当于一个二元信号量,可以当作Lock来使用。可以实现为公平和非公平模式继承关系/* * 信号量,适合多个线程一起工作,即在某个时间段,可以有多个线程同时持有锁(线程数量受许可证总量限制) *
原创
发布博客 2020.05.13 ·
253 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

JDK源码阅读计划(Day15) j.u.c 之 LockSupport

基于JDK11LockSupport我们参考啃透JAVA并发先跑一个demopublic static void main(String[] args) { Thread t = new Thread(()->{ LockSupport.park(); System.out.println("Start working"); }); //t线程开始运行 t.start();
原创
发布博客 2020.05.12 ·
205 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

JDK源码阅读计划(Day14&15) AQS

JDK11AQS若被请求的共享资源空闲,则会把当前请求资源的线程设置为有效的工作线程,并且把共享资源设置为锁定状态。如果被请求的共享资源被占用,就把线程封装为Node加入到一个虚拟队列中,具体是通过CLH队列锁的方式实现。JDK并发包中的CountDownLatch,ReentrantLock,ThreadPoolExecutor,Semaphore,ReentrantReadWriteLock 都是继承自AbstractQueuedSynchronizer这个抽象类,其本质使用一个双向链表维护一个
原创
发布博客 2020.05.10 ·
241 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

JDK源码阅读计划(Day13) ConcurrentSkipListMap & 跳表学习

跳表上图可以看到,一个有序单链表,查找某元素的平均时间复杂度为O(n)跳表本质上是在有序链表上建立多层索引,以实现二分查找。以空间换时间的思想,实现增删查改平均时间复杂度为O(lgn)而skipList的结构可能有2种:第一种是每个结点会指向向右和向下的结点,像ConcurrentSkipListMap就是这么设计的 /** * Index nodes represent the levels of the skip list. */ // 跳表索引,存储右侧跟下侧
原创
发布博客 2020.05.09 ·
231 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

JDK源码阅读计划(Day12) BitSet

JDK11BitMap原理&使用场景用一个bit来存放一个状态的容器。由于对内存占用少,适合用于处理大规模数据和数据状态不多的情况。毕竟一个bit只对应两个状态。图来自ref假设原来有个int数组[1,2,3,6,7]需要用5*32bit=160bit来保存存储空间。但如果把元素的值作为下标每个下标用一个bit来表示,如0表示不存在该元素,1表示存在。那么只需要在内存空间开辟一...
原创
发布博客 2020.05.08 ·
234 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

JDK源码阅读计划(Day11) LinkedHashMap

继承图如下LHM与HashMap/* * LinkedHashMap是有序Map,也是HashMap的子类,其基础结构与HashMap一致 * 这里有序的含义是说其遍历顺序与元素加入的顺序有关 * 该Map中的元素按其加入的顺序,维护一个双向链表,为其额外建立了前后链接 * * 普通情况下,LinkedHashMap的遍历操作中,元素顺序就是其加入到Map时的顺序 * acces...
原创
发布博客 2020.05.06 ·
197 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

JDK源码阅读计划(Day10) ConcurrentHashMap 扩容,计数部分

扩容Hash表的扩容一般分为:哈希数组的扩容一般是建立一个原来数组大小两倍的数组,通常由单线程完成数据迁移把旧数组中的各个槽的结点重新分配到新的table中。通常涉及到Key值的rehash而HashMap与ConcurrentHashMap并不会重新计算每个key的hash值,而是数组扩容后,新的索引要么在原idx,要么在idx+n(n为扩容前数组容量)这种处理方式的好处:方便多...
原创
发布博客 2020.05.05 ·
283 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

(CMU15-721) An Empirical Evaluation of In-Memory MVCC 论文阅读笔记

不好意思大部分是英文,点进来的应该都是master PHD了吧?这部分是15721第三课的课堂笔记,发现就是相当于把这篇论文讲了一遍。如果只读论文的话还是挺难的。。Multi-version concurrency controlDefinitionDBMS maintains multiple physical versions of a single logical object in ...
原创
发布博客 2020.05.04 ·
1724 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

(CMU15-721) An Evaluation of Concurrency Control with One Thousand Cores 论文阅读笔记

摘要CPU核数的增多,给并发控制带来了巨大的压力。该论文实验环境为1024核,并且尝试了七种并发控制的方法,但都失败了。启示我们,面对多核芯片应该要重新设计数据库的架构导论现如今的CPU速度提升往往是靠增大核数,而不是提高单核的处理能力。那么对应的给数据库的并发控制带来了非常大的压力,性能的瓶颈在于多个线程之间的竞争与调度。本文的主要贡献:对于7种并发控制策略扩展性的讨论第一篇在...
原创
发布博客 2020.05.03 ·
2466 阅读 ·
0 点赞 ·
2 评论 ·
0 收藏

JDK源码阅读计划(Day9) ConcurrentHashMap 非扩容,计数部分

JDK11我们可以看到ConcurrentHashMap实现了ConcurrentMap,Serializable这两个接口并且继承了AbstractMap这个抽象类。实现与提供的操作和HashMap类似,都是哈希数组+链表/红黑树,但是key和value不能为null,并且是线程安全的,然而又不像HashTable用synchroinze锁表来保证线程安全,那样做的话效率太低了。重要成员...
原创
发布博客 2020.05.03 ·
231 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

JDK源码阅读计划(Day8) HashMap 红黑树部分

红黑树打开尘封已久的算法导论,好好翻开第13章…红黑树的性质是一种二叉搜索树,可以保证在最坏情况下基本动态集合操作的时间复杂度为O(lg n)每个节点增加一个用于表示颜色的存储位红黑树能确保没有一条路径会比其他路径长2倍每个节点属性: color,key,left,right,parent如果结点没有子节点或者父节点,指针可以设为NULL根节点和叶节点是黑色的对于每个节点,从该...
原创
发布博客 2020.05.01 ·
229 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

CMU15-721 《What’s really new with NewSQL》论文阅读笔记

Study Notes on Course1Video-bilibiliCourse TopicsFocus on internals of single nodes in-memory database system.Not distributed Systems.论文阅读笔记《What’s really new with NewSQL》NoSQL传统关系模型与强事务保证制约...
原创
发布博客 2020.05.01 ·
963 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

JDK源码阅读计划(Day7&8) HashMap 非红黑树部分

JDK11版本今天看到篇文章如何阅读JDK源码,受益良多今后读源码应该带着问题来读,而不是为了读而读!思考问题既要横向比较(HashMap,ConcurrentHashMap或者其他map之间的区别),也要纵向比较(不同JDK版本的HashMap有什么变化)先提出几个面试经常提到的问题,再带着问题来阅读:1.HashMap是线程安全的吗?如果不是,不安全体现在哪里?2.HashMap的...
原创
发布博客 2020.04.30 ·
275 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

JDK源码阅读计划(Day6) AbstractMap & AbstractSet

JDK11AbstractMappublic abstract class AbstractMap<K,V> implements Map<K,V> {Map的抽象类实现,那有哪些Map继承了这个抽象类呢?EnumMapHashMapIdentityHashMapLinkedHashMapWeakHashMapTreeMap未来一周的计划就是把这些...
原创
发布博客 2020.04.29 ·
195 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

JDK源码阅读计划(Day5) Collections

JDK11CollectionsCollection与Collectioons的区别我想很多面试题都会遇到最大的不同就是前者是这个接口,是List和Set这两个子接口的顶级接口。后者是个容器工具方法类。/* * Tuning parameters for algorithms - Many of the List algorithms have * two imple...
原创
发布博客 2020.04.28 ·
223 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

JDK源码阅读计划(Day4) Collection,List,AbstractCollection & AbstractList

JDK11Collection接口public interface Collection<E> extends Iterable<E> {作为一元容器的顶级接口,实现类包括线性表(List,Queue,Stack)和集合(Set)List能够包含重复的元素,Set包含的是不重复元素Bags和multisets可以直接实现该接口Set和List子接口继承了Co...
原创
发布博客 2020.04.27 ·
212 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

JDK源码阅读计划[Day3] AbstractStringBuilder,StringBuffer,StringBuilder

JDK11代码参考的是 https://github.com/kangjianwei/LearningJDK/blob/master/src/java/lang/String.javaAbstractStringBuilder这个类方法挺多的,1700多行,只挑一些重要而且陌生的记录下/** * A mutable sequence of characters. * <p>...
原创
发布博客 2020.04.26 ·
194 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏
加载更多