踩坑记录:CDN 开启强制 https 之后返回重定向次数过多的问题

一、问题描述 搭了一个开源图床,因为备案的原因部署在海外。访问速度太慢准备上 CDN(有一个已备案的域名),但是在部署 CDN 的途中就出现了各种问题。鼓捣了几天终于解决了,记录下踩坑记录和解决方案。 软件环境: 图床是直接用 docker 部署了,没有再手动去折腾 lnmp 环境了,别人已经准备好的 docer 环 ... 阅读更多

排序算法五:堆排序

一、堆排序原理 通过最大堆的性质可以知道:一个堆中最大的元素总是在堆顶的,即数组下标 0 的位置。基于这一点,我们可以每次都把堆中的最大值提取出来,放到当前数组的后面。然后重新构建最大堆,重复这个过程,以此来完成一个数组的排序。 例如,一个已知的最大堆为: 把最大的元素 16 提取出来,放到最后。然后重新建 ... 阅读更多

数据结构之堆

一、堆 堆是一种数据结构,通常通常所说的堆即二叉堆。二叉堆是一个数组,可以被看成一个完全二叉树,如下图所示: 他在数组中的表现形式为: 通过数组很容易得到每个父节点和其子节点的关系,假设数组的起始下标为 0,那么有:

因此可以直接在程序 ... 阅读更多

排序算法七:计数排序

一、计数排序 其基本思想为:假设 n 个输入的元素中的每一个都是在 0 到 k 之间的一个整数,对于每一个输入元素 x,确定小于 x 的元素个数,直接把 x 放在它输出的数组中的位置上。例如有 17 个元素小于 x,则 x 就应该在数组的第 18 个位置上。当有几个元素相同时,这一方案就要略作修改,不能都放在同一个位置上。 计数排序需 ... 阅读更多

进程和线程的区别

一、两者对比 进程是最小的资源分配单位,线程是最小的执行单位: 每个进程至少有一个线程,任务的执行都是由线程来完成,也就是说,线程时进程运行时的实体。 线程运行时依赖进程中分配的资源,一个进程可以有多个线程,但是每个线程只属于一个进程。 进程之间相互独立,线程之间数据共享: 每个进程拥有自己独立的地 ... 阅读更多

给 alpine 的 docker 镜像添加 bash 支持

alpine 是一个轻量级的 linux 系统,由于太轻量了,目前被广泛用于 docker 镜像的制作上了 (最新版的 docker 镜像才 5M) 。 体积小就有缺点了,缺点就是内部除了基本的命令以外,大部门的功能都不支持,默认连 bash 都没有。需要自己手动添加并重新构建。 1. 基于 alpine:3.8 添加 bash ... 阅读更多

linux 可执行程序 elf 文件分析及进程的内存分布情况

一、 ELF 文件 ELF(Executable and Linkable Format) 文件是 linux 下的二进制可执行文件,它同时兼容可执行文件和可链接文件。 一个 ELF 文件包含两个部分:一个固定长度的文件头和多个可扩展的数据块。其中,文件头是整个可执行文件的总地图,描述了整个文件的组织结构。可扩展 ... 阅读更多