【linux】swap交换分区

swap分区通常被称为交换分区,这是一块特殊的硬盘上的空间,即当实际内存不够用的时候,操作系统会从内存中取出一部分暂时不用的数据放在交换分区中,从而腾出一些内存空间,等到那些应用程序使用这些数据时,再从交换分区中恢复到内存空间。不应该把它当作物理内存的扩展。

使用交换分区的优点是应用程序实际可以使用的内存空间远远超过系统的物理内存,缺点是如果频繁地读写硬盘,会显著降低操作系统的运行效率。

一般交换分区的容量应该大于物理内存大小,建议是内存的两倍,但不超过2G。

所以说如果物理内存足够的话,完全不需要交换分区。

阅读全文 »

【数据结构】字符串哈希

先看一下这道题:

用substr肯定超时,这道题可以用字符串哈希。

大致思路是:

把字符串映射成一个P进制的数来表示,例如字符串ABCD,那么可以令A=1,B=2,C=3,D=4,...,那么hash(ABCD)=1P3+2P2+3P1+4P0hash(ABCD)=1*P^{3}+2*P^{2}+3*P^{1}+4*P^{0}

阅读全文 »

【数据结构】Trie树(存储字符串)

Trie通常是用于字符串字典的插入和存储,所有包含相同前缀的字符串所在Trie树的同一条路径,直到字符不同后分叉,例如:

good和google两个字符串的公共前缀是goo,那么在Trie树中,它们用的是同一条前缀路径goo。

例题:

维护一个字符串集合,支持两种操作:

                
                  
                  

阅读全文 »

【容器】04 namespace

namespace为进程创建独立隔离的环境,隔离后的每个namespace看上去像是一个独立的linux系统。

进程结构体中的namespace指针

一个进程可以属于多个namespace,在task_struct中有一个指向namespace结构体的指针nsproxy。

struct nsproxy{
    atomic_t count;

                
                  
                  

阅读全文 »

蚁群、遗传、微粒群

蚁群算法

蚁群算法ACO是一种智能算法,它由一群无智能或轻微智能的个体,通过相互写作表现出智能行为,从而为求解复杂问题提供了一个新的可能性。

蚁群算法是一种仿生学算法,是由自然界中蚂蚁觅食的行为而启发的。在自然界中,蚂蚁觅食过程中,蚁群总能够按照寻找到一条从蚁巢和食物源的最优路径。

假如蚁群中所有蚂蚁的数量为m,所有城市之间的信息素用矩阵pheromone表示,最短路径为bestLength,最佳路径为bestTour。每只蚂蚁都有自己的内存,内存中用一个禁忌表(Tabu)来存储该蚂蚁已经访问过的城市,表示其在以后的搜索中将不能访问这些城市;还有用另外一个允许访问的城市表(Allowed)来存储它还可以访问的城市;另外还用一个矩阵(Delta)来存储它在一个循环(或者迭代)中给所经过的路径释放的信息素;还有另外一些数据,例如一些控制参数(α,β,ρ,Q),该蚂蚁行走完全程的总成本或距离(tourLength),等等。假定算法总共运行MAX_GEN次,运行时间为t。

阅读全文 »

【k8s】卷

k8s中卷是pod的一个组成部分,它不是一个独立的对象,所以不能单独创建和删除。
pod中所有容器都可以使用卷,但必须先将它挂载在每个需要访问它的容器中。
每个容器可以在其文件系统的任意位置挂载卷。

可创建挂载的卷的类型有多种:

【k8s】k8s环境搭建

kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。

这个工具能通过两条指令完成一个kubernetes集群的部署:

# 创建一个 Master 节点
kubeadm init


                
                  
                  

阅读全文 »

【linux】/proc和/sys文件系统

/proc

Linux系统上的/proc目录是一种文件系统,即proc文件系统。与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些文件来改变内核的运行状态。其实例如ps、top等很多命令正是从proc系统中读取信息。

基于/proc文件系统如上所述的特殊性,其内的文件也常被称作虚拟文件,并具有一些独特的特点。例如,其中有些文件虽然使用查看命令查看时会返回大量信息,但文件本身的大小却会显示为0字节。此外,这些特殊文件中大多数文件的时间及日期属性通常为当前系统时间和日期,这跟它们随时会被刷新(存储于RAM中)有关。

为了查看及使用上的方便,这些文件通常会按照相关性进行分类存储于不同的目录甚至子目录中,如/proc/scsi目录中存储的就是当前系统上所有SCSI设备的相关信息,/proc/N/中存储的则是系统当前正在运行的进程的相关信息,其中N为正在运行的进程(可以想象得到,在某进程结束后其相关目录则会消失)。

大多数虚拟文件可以使用文件查看命令如cat、more或者less进行查看,有些文件信息表述的内容可以一目了然,但也有文件的信息却不怎么具有可读性。不过,这些可读性较差的文件在使用一些命令如apm、free、lspci或top查看时却可以有着不错的表现。

阅读全文 »

【容器】Docker架构、核心概念

Docker架构

Docker采用C/S架构,通过socket/RESTful API进行通信。

Docker daemon

Docker daemon作为服务端守护进程,接受处理客户端请求并管理Docker对象,例如images、containers、networks和volumes,同时守护进程还可以与其他守护进程通信以管理Docker服务。

默认监听本地unix:///var/run/docker.sock套接字,只允许本地root访问,通过-H来修改监听方式。

阅读全文 »