代码改变世界

随笔档案-2013年09月

红黑树并没有我们想象的那么难(下)

2013-09-29 16:22 by 捣乱小子, 4029 阅读, 收藏, 编辑
摘要: 上、下两篇已经完成, 希望能帮助到大家.红黑树并没有我们想象的那么难(上):http://daoluan.net/blog/?p=2057红黑树并没有我们想象的那么难(下):http://daoluan.net/blog/?p=2112SGI STL map 实现概述根据上一节的红黑树分析, 结合 sgi stl map 的实现, 看看红黑树的源码是如何实现的. 以下主要以代码的注释为主. sgi stl map 底层实现是_Rb_tree类, 为了方便管理,_Rb_tree 内置了_M_header, 用于记录红黑树中的根节点, 最小节点和最大节点. 在插入删除中都会对其进行维护. 找到一. 阅读全文

红黑树并没有我们想象的那么难(上)

2013-09-26 11:01 by 捣乱小子, 39798 阅读, 收藏, 编辑
摘要: <红黑树并没有我们想象的那么难> 上、下两篇已经完成, 希望能帮助到大家. 红黑树并没有我们想象的那么难(上) 红黑树并没有我们想象的那么难(下) 红黑树并没有想象的那么难, 初学者觉得晦涩难读可能是因为情况太多. 红黑树的情况可以通过归结, 通过合并来得到更少的情况, 如此可以加深对红黑树的理解. 阅读全文

Django 源码小剖: 响应数据 response 的返回

2013-09-23 23:30 by 捣乱小子, 3475 阅读, 收藏, 编辑
摘要: 响应数据的返回在 WSGIHandler.__call__(self, environ, start_response) 方法调用了WSGIHandler.get_response() 方法, 由此得到响应数据对象 response. 如今所要做的, 便是将其返回给客户端. 在Django 源码小剖: 初探 WSGI中,简要的概括了请求到来时 django 自带服务器的执行关系, 摘抄如下:make_server() 中 WSGIServer 类已经作为服务器类, 负责接收请求, 调用 application 的处理, 返回相应;WSGIRequestHandler 作为请求处理类, 并已经配 阅读全文

Django 源码小剖: 更高效的 URL 调度器(URL dispatcher)

2013-09-22 00:22 by 捣乱小子, 1567 阅读, 收藏, 编辑
摘要: 效率问题django 内部的 url 调度机制说白了就是给一张有关匹配信息的表, 这张表中有着 url -> action 的映射, 当请求到来的时候, 一个一个(遍历)去匹配. 中, 则调用 action, 产生相应数据返回; 不中, 则会产生 404 等的错误, 而 django 中有内置 404 等错误响应方法.这种方法和 MFC 里 message map 差不多, 从项目实践(特别是配置 urls.py 文件)就可以猜到大概是这样一种工作模式.注意上面关于 django url 调度机制的白话描述中的「一个一个」, 这里就有效率上的问题了. 倘若业务逻辑不复杂, 且访问量不高, 阅读全文

Django 源码小剖: URL 调度器(URL dispatcher)

2013-09-15 22:26 by 捣乱小子, 3175 阅读, 收藏, 编辑
摘要: 在刚开始接触 django 的时候, 我们尝试着从各种入门文档中创建一个自己的 django 项目, 需要在 mysite.urls.py 中配置 URL. 这是 django url 匹配处理机制的一小部分.URL 调度器详解django url 匹配处理机制主要由一下模块实现: django.conf.urls 和 django.core.urlresolver.py. 有需要摘取上一节中的代码:# BaseHandler.get_response() 的定义# 处理请求的函数, 并返回 responsedef get_response(self, request): "Retu 阅读全文

Django 源码小剖: 初探中间件(middleware)

2013-09-14 00:36 by 捣乱小子, 4906 阅读, 收藏, 编辑
摘要: 因为考虑到文章的长度, 所以BaseHandler 的展开被推迟了. 在BaseHandler 中隐藏着中间件的信息, 较常见的SessionMiddleware 就已经默认安装. BaseHandler 的展开主要是以代码为主, 但已经加入了注释; 文章的最后附一张美图 .最后, 祝程序员们节日快乐, 别太宅了 ;)BaseHandler 详解BaseHandler 在 django.core.handlers.base.py 中定义, 有两个核心的成员方法不得不提, 里面就涉及了中间件的信息, 照抄如下(有点长, 但已经加入注释):# 好经典的 handlerclass BaseHandl 阅读全文

Django 源码小剖: 应用程序入口 WSGIHandler

2013-09-11 22:32 by 捣乱小子, 5988 阅读, 收藏, 编辑
摘要: WSGI 有三个部分, 分别为服务器(server), 应用程序(application) 和中间件(middleware). 已经知道, 服务器方面会调用应用程序来处理请求, 在应用程序中有真正的处理逻辑, 在这里面几乎可以做任何事情, 其中的中间件就会在里面展开.Django 中的应用程序任何的 WSGI 应用程序, 都必须是一个start_response(status, response_headers, exc_info=None) 形式的函数或者定义了 __call__ 的类.而django.core.handlers 就用后一种方式实现了应用程序: WSGIHandler. 在这 阅读全文

Django 源码小剖: Django 中的 WSGI

2013-09-06 22:31 by 捣乱小子, 6034 阅读, 收藏, 编辑
摘要: Django 其内部已经自带了一个方便本地测试的小服务器, 所以在刚开始学习 Django 的时候并不需搭建 apache 或者 nginx 服务器.Django 自带的服务器基于 python wsgiref 模块实现的, 其百分之七八十的代码都是 wsgiref 中的代码, 只重写了一部分, 所以 Django 自带的服务器测试写个 helloworld 就好了.Django 内置服务器在 django.core.servers 和 django.core.handlers, 这两者共同来实现.先看看 django.core.servers. 下面是目录结构:E:\DECODE-DJANG 阅读全文

Django 源码小剖: 初探 WSGI

2013-09-04 18:59 by 捣乱小子, 5983 阅读, 收藏, 编辑
摘要: python 作为一种脚本语言, 已经逐渐大量用于 web 后台开发中, 而基于 python 的 web 应用程序框架也越来越多, Bottle, Django, Flask 等等.在一个 HTTP 请求到达服务器时, 服务器接收并调用 web 应用程序解析请求, 产生响应数据并返回给服务器. 这里涉及了两个方面的东西: 服务器(server)和应用程序(application). 势必要有一个合约要求服务器和应用程序都去遵守, 如此按照此合约开发的无论是服务器还是应用程序都会具有较大的普遍性. 而这就好像在计算机通信的早期, 各大公司都有属于自己的通信协议, 如此只会让市场杂乱无章, 宁愿 阅读全文