分类 编程 下的文章

MySQL InnoDB 锁——官方文档翻译


个人认为学习MySQL最好的书面材料莫过于官方文档了,它不仅详细介绍了方方面面的使用方法,还讲解了原理,让你知其然并且知其所以然。这里就把官网的InnoDB Locking这一小节翻译过来,抛砖引玉。

InnoDB锁类型包括


一文理清21种设计模式:用实例分析和对比


设计模式无论是对于最底层的的编码实现还是较高层的架构设计都有着重要的指导作用。所谓光说不练假把式,今天我就把项目中常见的应用场景涉及到的主要设计模式及其相关设计模式总结一下,用实例分析和对比的方式在一片文章中就把最常见的21种设计模式梳理清楚。

Redis发布订阅

在项目中常常使用redis的发布/订阅功能,用来实现进程间通信甚至IM等业务。
使用 jedis 实现频道订阅的模式一般如下:

try( Jedis jedis =  RedisClient.getJedis() ) {
    JedisPubSub listener = new MySubListener();
    // 订阅
    jedis.subscribe(listener, "channel");
}


数据结构与算法——常用高级数据结构及其Java实现


前文 数据结构与算法——常用数据结构及其Java实现 总结了基本的数据结构,类似的,本文准备总结一下一些常见的高级的数据结构及其常见算法和对应的Java实现以及应用场景,务求理论与实践一步到位。

跳跃表

跳跃列表是对有序的链表增加上附加的前进链接,增加是以随机化的方式进行的,所以在列表中的查找可以快速的跳过部分列表。是一种随机化数据结构,基于并联的链表,其效率可比拟于红黑树和AVL树(对于大多数操作需要O(logn)平均时间),但是实现起来更容易且对并发算法友好。redis 的 sorted SET 就是用了跳跃表。

性质:

  1. 由很多层结构组成;
  2. 每一层都是一个有序的链表,排列顺序为由高层到底层,都至少包含两个链表节点,分别是前面的head节点和后面的nil节点;
  3. 最底层的链表包含了所有的元素;
  4. 如果一个元素出现在某一层的链表中,那么在该层之下的链表也全都会出现(上一层的元素是当前层的元素的子集);
  5. 链表中的每个节点都包含两个指针,一个指向同一层的下一个链表节点,另一个指向下一层的同一个链表节点;


数据结构与算法——常用排序算法及其Java实现


数据结构与算法——常用数据结构及其Java实现
经过前面文章的铺垫,我们巩固了基础数据结构的知识,接下来就可以进入算法的巩固阶段了。首先我们来看常见的排序算法。

冒泡排序

原理:依次比较相邻的两个数,将小数放在前面(左边),大数放在后面(右边),就像冒泡一样
具体操作:第一趟,首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后,这样第一趟下来最大的数就在最后一位了。然后还是从第一个数开始重复第一趟步骤比较,但是这次不比较最后一个数了,第二趟结束后第二大的数就在倒数第二位......以此类推,直至全部排序完成。
所有代码在这,关键代码如下:


后端好书阅读与推荐(续三)


后端好书阅读与推荐系列文章:
后端好书阅读与推荐
后端好书阅读与推荐(续)
后端好书阅读与推荐(续二)
后端好书阅读与推荐(续三)

这里依然记录一下每本书的亮点与自己读书心得和体会,分享并求拍砖。

实战Java高并发程序设计

实战Java高并发程序设计 (豆瓣) https://book.douban.com/subject/26663605/

这本书是国产书籍里面质量较高的一本了(很多国产书都是东拼西凑或者敷衍了事),作者从实际出发,结合理论,讲的很有逻辑,而且还有很多形象的手绘,和那本Java并发编程实战相比更新一些,读起来也更容易一些。