十大经典排序算法

0、算法概述0.1 算法分类十种常见排序算法可以分为两大类: 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。 0.2 算法复杂度 排序方法 时间复杂度(平均) 时间复杂...

Read more

蓄水池抽样算法(Reservoir Sampling)

一、问题给定一个数据流,数据流长度N很大,且N直到处理完所有数据之前都不可知,请问如何在只遍历一遍数据(O(N))的情况下,能够随机选取出m个不重复的数据。这个场景强调了3件事: 数据流长度N很大且不可知,所以不能一次性存入内存。时间复杂度为O(N)。随机选取m个数,每个数被选中的概率为m/N。 第1点限制了不能直接取N内的m个随机数,然后按索引取出数据。第2点限制了不能先遍历一遍,然后分块存...

Read more

加密算法、非对称加密算法和 Hash 算法

对称加密(Symmetric Cryptography),又称私钥加密对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key),这种方法在密码学中叫做对称加密算法。对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。对称加密通常使用的是相对较小的密钥,一般小于256 bit。因为密钥越大,加...

Read more

Linux通过PID查看进程完整信息

通过ps及top命令查看进程信息时,只能查到相对路径,查不到的进程的详细信息,如绝对路径等。 先通过top查看进程PID 这时,我们需要通过以下的方法来查看进程的详细信息: Linux在启动一个进程时,系统会在/proc下创建一个以PID命名的文件夹,在该文件夹下会有我们的进程的信息,其中包括一个名为exe的文件即记录了绝对路径,通过ll或ls –l命令即可查看。 ll /proc/PID...

Read more

MySQL的事务的四大特性和隔离级别

事务就是一组原子性的SQL语句,或者说一个独立的工作单元。事务内的SQL语句,要么全部执行成功,要么全部执行失败。 1、事务的四大特性(ACID) 原子性(atomicity): 一个事务必须视为一个不可分割的最小单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行成功其中的一部分操作,这就是事务的原子性。一致性(consistency): 数据总是从一...

Read more

Nginx和PHP之间是怎样通信的

FastCGI原理FastCGI是一个运用于Http Server和动态脚本语言间通信的接口,多数流行的Http Server都支持FastCGI,包括Apache、Nginx和lighttpd等。同时,FastCGI也被许多脚本语言支持,其中就有PHP。FastCGI接口方式采用C/S结构,可以将HttP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。当H...

Read more

Linux Shell逻辑运算符和表达式详解

Shell 基本上是一个命令解释器,类似于 DOS 下的 command。它接收用户命令(如 ls 等),然后调用相应的应用程序。较为通用的 Shell 有标准的Bourne shell (sh)和C shell (csh)。很多时候在写 Shell 脚本的时候都容易遗忘部分逻辑运算符和表达式的写法,因此摘录如下,留待不时之需查询使用。Shell 逻辑运算符涉及以下几种类型,只要适当选择,可以...

Read more

OSI七层模型与TCP/IP五层模型

一、OSI参考模型以太网最基本也是重要的知识——OSI参考模型。 1、OSI的来源OSI(Open System Interconnect),即开放式系统互联。 一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互连模型。ISO为了更好的使网络应用更为普及,推出了OSI参考模型。其含义就是推荐所有公司使用这个规范来控制网络。这样所有公司都有相同的规范,就能互联了。 2...

Read more

使用Nginx过滤网络爬虫

现在的网络爬虫越来越多,有很多爬虫都是初学者写的,和搜索引擎的爬虫不一样,他们不懂如何控制速度,结果往往大量消耗服务器资源,导致带宽白白浪费了。 其实Nginx可以非常容易地根据User-Agent过滤请求,我们只需要在需要URL入口位置通过一个简单的正则表达式就可以过滤不符合要求的爬虫请求: ... location / { if ($http_user_...

Read more

Git Stash使用笔记

1.使用git stash 保存当前的工作现场, 那么就可以切换到其他分支进行工作,或者在当前分支上完成其他紧急的工作,比如修订一个bug测试提交。 2.如果一个使用了一个git stash,切换到一个分支,且在该分支上的工作未完成也需要保存它的工作现场。再使用git stash。那么stash 队列中 就有了两个工作现场。 3.可以使用git stash list。查看stash队列。 ...

Read more