0%

你们服务器怎么部署上线?大公司会有一套完整的适合他们自己的专业部署上线流程,小团队怎么搞?Jenkins是一个很好的选择,一个功能强大的平台,以及各种丰富的插件,让中小团队的部署更加方便人性化。

本文不会很系统的讲从0开始配置一个Job,主要是记录一些关键功能,并持续更新,供以后备忘。

阅读全文 »

数据库的事务具有原子性,要么都成功,要么都失败。但是两个事务之间会怎么相互影响呢?事务A需要修改某条数据,事务B正好要读取或者也要修改这条数据,两个事务会有怎么样的表现呢?

本文中描述的相关知识点,都是基于InnoDB引擎下。

本文中涉及到的MySQL栗子中,左侧MySQL连接为事务A,右侧MySQL连接为事务B。

并发事务产生的数据问题

我们可以简单理解为,一个完整的事务有以下三个步骤:start -> CURD -> commit,所以上述问题中,事务B进行读取或者修改事务A修改的数据,会有以下几种场景:

阅读全文 »

本文中描述的相关知识点,都是基于InnoDB引擎下,阅读本文之前,建议先了解B+树相关知识。

索引是个啥

如果你要去图书馆找本书,有两种方式:

  • 一本一本的找;
  • 通过书所属类别确定藏书片区,根据书名首字母确定书架,然后一本一本的找。

第二种方式中,把所有书的所属类别,书名首字母这两个属性提取出来供大家做第一轮第二轮查找,从而确定一个小范围,再进行遍历查找。此时提取出来的书的类别,书名首字母,即使索引。

阅读全文 »

阅读本文之前,建议先了解二叉树相关知识

B树

B树也是一颗“有序”的树,因此他的查找,编辑操作也是对数时间复杂度,与二叉查找树不同的是,B树的节点可以有多个孩子节点,从几个到几千个,所以相同的节点数,B树的的高度会比二叉查找树小很多。

B树的一些基本概念定义:

红黑树中的NIL叶子节点是有意义的,B树种的NIL叶子节点没什么意义,因此下文中,统一将最底层,无子节点的节点称之为叶子节点。

  • B树所有节点中,子节点个数最大的值,我们称之为B树的阶,用m表示;
  • 每个节点最多有m棵子树;
  • 除根节点和叶子节点以外,其他每个分支节点至少有$ceil(m/2)$棵子树;
  • 如果一棵B树不止包含一个节点(根节点)的话,则根节点至少有两棵子树;
  • B树的所有叶子节点都在同一层上;
  • 每个非叶子节点,包含有n个关键字和n+1个节点,假设$k_i$表示第i个关键字,$p_i$表示第i个节点,则:
    • $ki<k{i+1}$;
    • $pi$为根节点的子树上的所有关键字大于$k{i-1}$,小于$k_i$。
阅读全文 »

nginx,虽然不是专业的运维,不需要熟悉得很透彻,但是了解一下基本的使用姿势,还是很有必要的。因此记录下来,并持续更新,供以后备忘。

本文主要是从一个后端开发的角度,记录一些nginx常用的配置方式,点到为止,不深究原理,不深究细节。

基本命令

  • nginx -s stop:快速关闭Nginx,可能不保存相关信息
  • nginx -s quit:平稳关闭Nginx,保存相关信息
  • nginx -t:测试配置文件语法的正确性
  • nginx -s reload:重新加载nginx的配置,服务不会中断
阅读全文 »

I/O模型概述

前面的Linux用户空间与内核空间简述中讲到,进程运行的时候分为用户态和内核态,用户态的程序是无法直接操作I/O设备读取数据的,需要通过系统调用来读取设备数据到内核buf,然后将数据拷贝回用户空间的buf。

整个数据请求过程,有两个关键步骤

  • 内核等待I/O设备准备好数据(比如等待完整的数据到达网卡设备,然后复制到内核中的某个buf)
  • 将数据从内核buf拷贝到用户空间的buf

上述两步,即是UNIX网络编程中提到的,一个输入操作通常包括的两个不同阶段。另外还介绍了五种I/O模型如下。

阅读全文 »

系统调用

Linux系统中,有一组用于实现系统功能的子程序,称为系统调用。

这些系统调用并不直接对用户的应用程序提供接口,而是通过C语言函数库,进行了一些封装和扩展,例如文件操作的open,read,write;Socket操作的bind,accept,send等等。

内核空间,用户空间

现代操作系统一般都将运行空间划分为两个,用户空间和内核空间。不同的空间,拥有自己的内存地址范围,在32位操作系统中,一般将最高的1G字节划分为内核空间,供内核使用,而将较低的3G字节划分为用户空间,供各个进程使用。

阅读全文 »