摘要: 本文从实现原理的角度比较了python的列表和链表的性能差异, 并且通过LRU算法,实现一个最大堆等实例来阐明如何正确地使用它们. 一. 从归并排序说起 归并排序是分治法的一个经典实现案例, 我特别喜欢. 在维基百科里面, 使用python实现的归并排序实例如下: def mergeSort(num 阅读全文
posted @ 2021-01-02 22:25 终末之冬 阅读(1833) 评论(0) 推荐(0) 编辑
摘要: 本文的内容是如何通过二叉树实现一个最大堆, 实现原理方面参考了Python的heap模块. 此外, 在正式项目上, 我还是建议你使用python自带的heap完成, 它只提供最小堆, 但是可以通过对所有元素取反或者重写__lt__方法实现最大堆. 一. 堆的数据结构 1. 数据结构分析 堆的本质就是 阅读全文
posted @ 2021-01-02 22:19 终末之冬 阅读(1143) 评论(0) 推荐(0) 编辑
摘要: 本文需要读者有一定的魔方基础, 最起码也要达到十秒内还原二阶魔方的水平, 并且手上最好有一个二阶魔方, 否则文中的很多东西理解不了. 另外, 这里使用的算法是我自己写着玩的, 如果你需要更成熟和专业的算法, 可以看这个. 本文最终得到的程序效果如下: 一. 问题分析 1. 魔方的数据结构 要使用程序 阅读全文
posted @ 2020-12-17 20:19 终末之冬 阅读(3304) 评论(2) 推荐(1) 编辑
摘要: 本文的内容是如何编写代码, 让计算机来解决SixPack拼图问题. 使用语言为Golang, 没有什么干货. 一. 问题分析 最近从朋友那里拿到了一副拼图, 据说难度高达九级, 它大概长这样: 这幅拼图的目标是把八片拼图依次填满六个不同的空白位置. 八片拼图的每片都是由八个1x1大小的方块结合而成, 阅读全文
posted @ 2020-12-16 15:35 终末之冬 阅读(2212) 评论(0) 推荐(0) 编辑
摘要: 本文使用python实现一个简单的HTTP连接池, 该连接池支持多线程, 能够设置连接数量, 并拥有自动清理空闲连接等功能. 其中, 客户端部分的代码来自于《用python实现一个HTTP客户端》这篇文章. 一. 连接池的原理 首先, HTTP连接是基于TCP连接的, 与服务器之间进行HTTP通信, 阅读全文
posted @ 2020-07-30 20:45 终末之冬 阅读(1975) 评论(1) 推荐(0) 编辑
摘要: 本文用python在TCP的基础上实现一个HTTP客户端, 该客户端能够复用TCP连接, 使用HTTP1.1协议. 一. 创建HTTP请求 HTTP是基于TCP连接的, 它的请求报文格式如下: 因此, 我们只需要创建一个到服务器的TCP连接, 然后按照上面的格式写好报文并发给服务器, 就实现了一个H 阅读全文
posted @ 2020-06-19 21:56 终末之冬 阅读(817) 评论(3) 推荐(0) 编辑
摘要: 一.什么是WSGI WSGI全称Web Server Gateway Interface, 即web服务器网关接口. 如图所示的http服务器, web服务器负责面向客户端接受请求和返回响应, web应用负责处理请求, 因此二者需要进行交互, web服务器将请求数据传给web应用, web应用执行完 阅读全文
posted @ 2020-05-29 21:08 终末之冬 阅读(324) 评论(0) 推荐(0) 编辑
摘要: 本文从源码层面讲解tornado实现HTTP服务器的原理, 使用的tornado版本为1.0.0, 它的代码量比较少, 便于我们找到其核心部分. 在这里可以下载1.0.0版本的tornado. 一.基本流程 使用下面的代码实现一个最简单的tornado服务器: import tornado.http 阅读全文
posted @ 2020-05-01 12:08 终末之冬 阅读(699) 评论(0) 推荐(0) 编辑
摘要: 一.实现思路 本文讲解如何使用python实现一个简单的模板引擎, 支持传入变量, 使用if判断和for循环语句, 最终能达到下面这样的效果: 渲染前的文本: <h1>{{title}}</h1> <p>十以内的奇数:</p> <ul> {% for i in range(10) %} {% if 阅读全文
posted @ 2020-04-29 18:45 终末之冬 阅读(2412) 评论(0) 推荐(1) 编辑
摘要: 本篇文章主要是对asyncio和相关内容的补充, 以及一个异步爬虫实例. 这个系列还有另外两篇文章: 从零开始学asyncio(上) 从零开始学asyncio(中) 一. 使用同步代码 上一篇文章已经讲到, 使用asyncio模块的基本套路是, 把要执行的代码写成协程函数的形式, 在函数内部IO操作 阅读全文
posted @ 2020-01-08 20:05 终末之冬 阅读(787) 评论(0) 推荐(1) 编辑