mageek 发布的文章

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


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

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

Docker生产环境实践指南

Docker生产环境实践指南 (豆瓣) https://book.douban.com/subject/26825958/

前面docker的基本概念和一些核心原理都看的差不多了,那么现在该关注一下具体的生产环境的使用方法了。

亮点:

  • 在生产环境中运行docker与在其它环境中相比,最主要的差异是需要在其安全性与稳定性上投入更多的注意力
  • 书中提到docker 容器与宿主机是通过IPtables实现的nat转换来进行通信,这点官网有说明 Docker container networking,然后就说了不适宜网络吞吐量有很高要求的应用(但是可以禁用Docker的NAT来提升网络性能),但是docker已经做出了一些努力,效果并不差,见:1,2,3
  • 书中对于docker相关常见的概念解释得非常清晰易懂,这一部分尤其适合初学者
  • docker生产环境最好的方式是将应用程序及其依赖预先打包成一个镜像,而包含数据库凭证等铭感信息在运行时动态添加(安全起见);常见流程是开发机上打包并推送到仓库,然后服务器从仓库拉取镜像,这种用例简单但是从工作流和安全角度看并不理想,更标准的做法是使用持续集成 / 持续交付系统在应用程序代码或者dockerfile发生变化时自动从新构建镜像


数据结构与算法——常用高级数据结构及其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并发编程实战相比更新一些,读起来也更容易一些。


GitLab+Jenkins+Rsync+PM2实现Node项目的持续集成与自动部署


前言

最原始的软件开发流程是,在本地搭建好环境,进行开发测试,然后去服务器上搭建环境,手动上传代码,运行测试,然后启动服务。实际上,近些年来出现了很多的工具,使得这些步骤可以自动化,大大降低人工出错的概率,提高生产效率。下面,我就把GitLab+Jenkins+Rsync+PM2实现的Node项目的持续集成以及自动部署的实验过程记录下来。

搭建环境

需要两台服务器作为演示,A主要进行代码管理、构建和分发,B主要运行实际应用。我这边系统使用的是Debian系的。