自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

日复一日,年复一年

活着就不错了

  • 博客(51)
  • 问答 (1)
  • 收藏
  • 关注

原创 MinStack + Implement Queue using stacks = MinQueue

LeetCode上有两道关于Stack的题目:Implement Queue using StacksMin Stack其中MinStack有个变体题目是MinQueue,简单地来说就是要实现Queue的常用操作,并使获取Queue中的最小值操作所需的时间复杂度为常数。由于直接套MinStack的Solution在MinQueue上是行不通的,因此可以先实现MinStack,再用MinStac

2017-12-17 18:20:27 434

原创 Python __slots__ and __dict__

Python对象中一般会有一个__dict__属性,负责存储对象的属性,当为对象动态地赋予属性时,也是在__dict__中添加该属性:In [44]: class PythonObject(object): ...: pass ...:In [45]: o = PythonObject()In [46]: o.__dict__Out[46]: {}In [47]: o.ne

2017-08-29 20:57:29 937

原创 PAT 1004 Counting Leaves (30) Python

题目代码A family hierarchy is usually presented by a pedigree tree. Your job is to count those family members who have no child.InputEach input file contains one test case. Each case starts with a line co

2017-07-17 23:40:28 678

原创 PAT 1003 Emergency(25)Python

题目描述1003. Emergency (25)As an emergency rescue team leader of a city, you are given a special map of your country. The map shows several scattered cities connected by some roads. Amount of rescue teams

2017-07-16 15:10:31 783 1

原创 利用Python Mock模拟OJ test case

场景需要在刷OJ的过程中,最常见的就是从stdin里面读取输入了,然后把结果输出到stdout上供OJ判断结果。一般来说,在本地写完程序之后都会手动输入一遍test case,观察输出结果之后发现不对劲,再手动输入一遍test case。。。作为一个搞笑的程序员,啊呸,不是,高效的程序员,简直不能忍受一次又一次地手动输入test case,能不能每次debug完之后一键跑数据呢?而且能不能让自己额外

2017-07-07 15:41:45 914

原创 PAT 1002 A+B for Polynomials (25) Python

题目描述1002. A+B for Polynomials (25)This time, you are supposed to find A+B where A and B are two polynomials.InputEach input file contains one test case. Each case occupies 2 lines, and each line contai

2017-07-07 12:36:36 896

原创 Leetcode 303 Range Sum Query - Immutable Python题解

题目大意输入一个数组,给定两个数组的索引i和j(i <= j),计算从索引i到j的和。 原题链接:303. Range Sum Query - Immutable题解一开始的时候我打算在初始化的时候用一个二维数组存储所有结果值,然后每次获取和的时候直接访问缓存的二维数组即可。 理想很美好,现实很扑街,惨遭MLE。class NumArray(object): def __init__(se

2017-05-19 23:24:52 904

原创 LeetCode 146 LRUCache Python题解

LRUCache全名为Least Recently Used,即最近最少使用算法,是操作系统中发生缺页中断时常用的一种页面置换算法。根据局部性原理,最近使用的数据块很有可能继续被频繁使用,因此当Cache已满的时候,LRUCache算法会把最久未使用的数据块替换出去。对于LRU算法主要实现两个操作:访问数据块 将访问的数据块更新为最近访问,并返回访问的数据块。 添加数据块 如果Cache还有

2017-04-18 19:02:13 4960

原创 使用不同的SSH密钥执行git命令

一般来说,通过Git命令对远程仓库进行操作的时候,都需要经过身份验证,常用的身份验证方式有两种:HTTPSSSH为了省去每进行一次Git操作就要输入用户名和密码的麻烦(HTTPS协议),相信大部分人都是使用SSH协议进行身份验证。SSH协议的使用也很简单,在本地生成一个公钥私钥对,再把公钥上传到SSH服务器(这里以github.com为例),每次对远程服务器进行操作的时候,本地生成一些随机的字

2017-04-13 16:18:57 1243

原创 动态规划-矩阵链乘法

问题给定一个n个矩阵的序列(即矩阵链,n = <A1A_{1}, A2A_{2}, …, AnA_{n}>),并计算n个矩阵序列的乘积(S = A1A_{1}A2...A_{2}...AnA_{n})。由于矩阵的乘法是满足结合律的,所以可以通过任意的添加括号明确计算的顺序。不同位置的括号对矩阵乘法的计算代价会产生巨大影响,以矩阵链n = <A1A_{1}, A2A_{2}, A3A_{3}>为例,其

2017-04-08 20:47:01 542

原创 Django Form 实践总结

在业务开发中,表单验证是较为重要的一环,经过验证后的数据才能存储进数据库。其中,表单验证不仅包括对恶意数据的检测,还包括了对业务逻辑上的一些检测。之前笔者对Django Form的源码进行了一些浅显的分析,经过一段时间的使用以后,积累了一些使用的经验因此写下这篇博客来备忘。关于Django Form源码分析的传送门如下: Django Form源码分析之BaseForm验证逻辑 Django

2017-01-25 23:39:02 4264 1

原创 Django类视图与Mixin

在上一篇Django处理http请求流程剖析中,笔者详细地说明了Django框架是如何根据WSGI协议处理一个Http请求的。其中,处理开发者自行定义的View的代码如下:# django.core.handlers.base.py# 路由解析resolver_match = resolver.resolve(request.path_info)callback, callback_args,

2016-12-31 23:56:29 5855

原创 Django处理http请求流程剖析

在详细介绍Django处理http请求的各个关键的流程点之前,笔者先简要的提及一下整个流程让各位同学有一个总体的认识。在接受一个Http请求之前的准备 启动一个支持WSGI网关协议的服务器监听端口等待外界的Http请求,比如Django自带的开发者服务器或者uWSGI服务器。服务器根据WSGI协议指定相应的Handler来处理Http请求,并且初始化该Handler,在Django框架中由框架

2016-12-31 20:56:32 5520

原创 Django时区详解

引言相信使用Django的各位开发者在存储时间的时候经常会遇到这样子的错误:RuntimeWarning: DateTimeField received a naive datetime while time zone support is active. 这个错误到底是什么意思呢?什么是naive datetime object?什么又是aware datetime object?在Django配

2016-12-08 09:13:43 9956 1

原创 Django Signals实践与源码分析

引言Signals是Django提供的一种用于提高代码可读性和复用的一种机制,熟悉的开发者可以把Django提供的Signals机制视为一种发布/订阅模式,一个Signal可以有多个订阅者,当一个Signal发出的时候,所有订阅了该信号的订阅者都会收到该信号并运行。 笔者一开始的时候以为Django Signals是一种异步机制,但在阅读Signals的源码以后发现它是同步机制,并且能保证线程安全

2016-11-14 15:07:07 1886

原创 可靠数据传输原理

引言众所周知,TCP协议是一个面向连接,可靠的传输层的协议,而IP协议是不可靠的网络层协议,IP协议能做到的就是“尽力而为的”交付分组,即不能确保分组一定能从发送方到达接受方,那么TCP协议是如何在不能信赖的网络层上建立可靠的连接确保对方能准确无误的收到分组呢?在深入了解TCP协议之前,需要先熟悉一些基本的可靠数据传输原理,本文是笔者在阅读《计算机网络:自顶向下方法》中的传输层后做下的笔记总结。注意

2016-11-12 13:23:20 5803

原创 django.contrib.auth之authenticate函数源码分析

引言django提供了一个默认的auth系统用于用户的登录和授权,并提供了一定的扩展性,允许开发者自行定义多个验证后台,每个验证后台必须实现authenticate函数,并返回None或者User对象。默认的后台是django.contrib.auth.backends.ModelBackend,该后台通过用户名和密码进行用户的验证,以settings.AUTH_USER_MODEL作为模型。但是在

2016-11-04 23:50:15 3465 1

原创 Django contenttypes框架详解

什么是Django ContentTypes?Django ContentTypes是由Django框架提供的一个核心功能,它对当前项目中所有基于Django驱动的model提供了更高层次的抽象接口。 然而,对于Django ContentTypes不熟悉的人来说,上面这句话说了跟没说一样,因此,笔者将一步一步解释Django ContentTypes在Django框架中做了什么,以及如何使用Dj

2016-11-02 22:50:11 8479 2

原创 使用Django发送邮件

引言在日常开发中,通过程序来实现对邮箱的操作是一个很常见的应用场景。比如:通过邮件来确认用户注册后台管理人员针对用户的反馈发送邮件通过邮箱来重置用户密码那么,笔者简单介绍一下如何使用Django实现邮件的发送。 PS:笔者在这里推荐一篇掘金的文章是关于邮箱的登录注册的设计细节,其中一些细节考虑的挺好的,在设计的时候可以用来参考。 传送门:干嘛又要邮箱登录啊?—现代登录系统的结构设计准备电

2016-10-27 14:25:54 5934

原创 从零开始自动部署Django项目(四): 在Docker中部署Django项目

引言在前面几篇从零开始自动部署Django项目的系列文章中,主要是解决了本地开发机和远程开发服务器的代码同步问题,但是并没有解决开发环境上的同步问题。前几天,笔者就遇到了“在本地上跑的好好的呀”这样的问题,因此开始研究Docker试着能否解决这个问题。 Attention : 比较尴尬的一点是当前的Docker官网仍然假设在国外,因此如果需要查阅Docker的官方文档请自备梯子。准备什么是Doc

2016-10-13 21:58:14 20646 2

原创 Python的包导入机制

Background在Python的大型项目中,一般都会用到模块包来组织文件层次,其中当一个目录内含有__init__ . py文件时,就可以視该目录为一个模块包。 当在模块包中使用import语句的时候,不同的语法会导致不同的模块搜索导入方式,常见的导入方式如下:绝对导入(absolute import) 显式相对导入(explicit relative import) 隐式相对导入(im

2016-10-02 17:23:17 7628 1

原创 从零开始自动部署Django项目(三):使用uWSGI emperor管理进程

引言在上一篇从零开始自动部署Django项目(二):使用Python编写Git Hooks,笔者直接通过Python模拟正常的人肉linux命令来确定python debug server是否在指定端口运行,如果正在运行则先杀掉该进程,在更新了Git仓库之后再人肉启动python debug server。咦,好像有哪里不对,为什么不直接删掉文件,然后进程不就自动结束了吗?这样子就不用检查端口是否有

2016-10-01 23:26:57 6163

原创 从零开始自动部署Django项目(二):使用Python编写Git Hooks

引言在上一篇从零开始自动部署Django项目(一):开发配置与生产配置,已经给出了通过环境变量来实现不同配置选择的解决方案。既然是环境变量,那就可以通过shell脚本或者python脚本来实现。 接下来,我将通过使用python编写的Git Hooks来实现在向生产服务Git推送的时候完成自动部署。 不太了解Git Hooks的同学可以参考我这篇文章: 服务端自动部署静态项目的几种方法。准备首先

2016-09-28 15:40:17 2792

原创 从零开始自动部署Django项目(一):开发配置与生产配置

引言作为一只后端工程师,经常会碰到本地开发环境跟远程服务器生产环境配置不一样的情况,比如说本地数据库使用的是SQLite,而在远程上的数据库用的却是Mysql。 对于一些小的修改,比如数据库的密码不一样之类的,当然可以选择直接SSH登录上服务器然后开VIM修改,但是我觉得这并非一个“懒惰”的工程师的追求。 接下来我将介绍两种方法来部署不同配置的Django。当然,既然是不同的环境,两份配置文件是

2016-09-28 11:23:24 5047

原创 服务端自动部署静态项目的几种方法

使用场景最近帮忙前端把一个静态的项目(挂在coding.net的仓库里)挂上自己的生产服务器 ,但是由于前端不会使用SSH登录服务器自行pull+checkout,因此我想了几种能让前端接受的方法把这个静态项目自动部署到服务器上。node服务器 + 命令行脚本这种方法比较简单粗暴,用node搭一个简单的服务器监听某一个端口,当前端访问这个端口的时候执行命令行脚本自动更新项目。 分别使用了node的

2016-08-31 11:19:33 3143

原创 C++ 设计模式之工厂模式

引言在OO程序设计中一种很常见的情景是要根据输入来选择具体要实例化的类,比如说在一个公交卡系统里面,分为学生卡和教师卡,经常会做这样的一个判定。# class Card;# class StudentCard : public Card# class TeacherCard : public CardCard *card;if(input == 'student'){ card = n

2016-08-27 17:59:03 702

原创 RSA与SSL浅析

HTTPS = HTTP + SSLHTTP协议是明文传输的,也就是说当数据包使用HTTP协议进行传输的时候,如果数据包中途被截下来了,那么里面的数据(明文)就会完全暴露。因此,如果数据包里面存放着用户的帐号和密码,就可以认为用户的帐号和密码已经泄漏了。 HTTPS协议则使用了SSL对数据进行加密,即使数据被拦截下来,如果没有解密的密钥,也无法得知用户的数据。RSARSA是一种非对称加密的算法,所

2016-08-23 18:55:12 6822 2

原创 关于Unicode,utf-8,utf-16 on mac

Unicode说到Unicode的起源就要先谈起ASCII。 ASCII使用一个字节(8位)进行存储,8位一共可以表示256个字符,而ASCII只使用了其中的128位,即0~127位,这128位里面包括了常用的英文字符以及标点符号。 现在虽然解决了英语的表示问题,但还有一些语言不使用英语的字符表示,因此它们使用剩下的128位进行表示,即128~256位,后面的128位也被称为扩展字符集。 对于

2016-08-16 23:41:26 2471

原创 Django Form源码分析之Metaclass的应用

引言在上一篇对BaseForm的源码分析中,还有部分的迷惑没有解决。Question:在BaseForm的初始化函数中,可以看到有如下一段代码,究竟self.base_fields从何而来?Form是如何实现Form和Field的结合?# The base_fields class attribute is the *class-wide* definition of# fields. Bec

2016-08-09 22:08:07 1004

原创 Django Form之动态数据初始化

Form.initial != 动态数据初始化在上一篇对BaseForm的源码分析中,我们已经可以清晰地知道Form.initial并没有对数据初始化,它只是对没有绑定的表单进行展示。 接下来我将提供一个简短的代码片段及示例来描述如何动态初始化,假设有一个QueryForm,有两个参数进行查询,分别是limit和offset,通过这两个参数来控制分页,limit的默认值为10,offset默认为0

2016-08-06 23:05:28 7889

原创 Django Form源码分析之Field验证逻辑

引言在上一篇对BaseForm的分析中,我只提及了在Form层次的输入验证,在Form.full_clean()主要调用的两个函数self._clean_field(), self._clean_form()。其中,self._clean_field方法代表了Field层次的输入验证。 在Django官方文档中,验证逻辑依次按照如下流程图:Created with Raphaël 2

2016-08-06 18:56:35 2769

原创 Django Form源码分析之BaseForm验证逻辑

引言在Django中,Form的主要功能分为输入验证以及在模板中的展示。 首先看一下Form的源码定义:class Form(six.with_metaclass(DeclarativeFieldsMetaclass, BaseForm)): "A collection of Fields, plus their associated data." # This is a sepa

2016-08-05 15:58:03 2959

原创 django URL模式浅析

准备首先新建一个Django 项目。django-admin startproject urlTest# 进入manage.py所在目录后./manage.py startapp app1./manage.py startpap app2此时我们新建了一个名为urlTest的项目,其中有两个模块的名称分别为app1和app2。(树目录结构如下).├── app1│ ├── __init

2016-06-16 10:47:25 5974

原创 C++ Primer之泛型算法lambda笔记

lambda表达式(-std=c++11)泛型算法中有部分算法除了第一个和第二个参数接受迭代器类型来表示范围外,它的第三个参数类型是一个谓词。 谓词是一个可调用表达式,分为一元谓词(只接受一个参数),二元谓词(接受两个参数)。 比如说常用的sort算法,它的第三个参数就是一个二元谓词。#include <algorithm>#include <string>#include <vector>

2016-05-15 23:14:12 620

原创 mac安装apache的mod_wsgi模块错误总结以及hello world测试

mac系统版本为OS X EI Capitan 10.11.4 (其实系统已经安装好了管理员权限的apache,在/etc/apache2下,但是我们还是要安装用户权限的apache,方便更改文件不需要权限)默认已经在mac上面安装好了用户权限的apache。(如果没有安装好的话,传送门:Apache Installingapache安装的一些小问题我简单说说在安装apache过程中遇到的问题:

2016-05-06 15:25:51 4831 1

原创 WSGI初探及wsgiref简单实现

什么是WSGI?什么是wsgiref?WSGI(Web Server Common Interface)是专门为Python语言制定的web服务器与应用程序之间的网关接口规范,通俗的来说,只要一个服务器拥有一个实现了WSGI标准规范的模块(例如apache的mod_wsgi模块),那么任意的实现了WSGI规范的应用程序都能与它进行交互。因此,WSGI也主要分为两个程序部分:服务器部分和应用程序部分。

2016-04-30 23:39:48 12950

原创 CSAPP之栈帧结构理解

C语言需要经过编译成为机器代码(即二进制代码)才能在机器上执行,而这个过程实际上是这样子的,C语言源程序(.c)首先通过预处理器拓展得到(.i),编译器处理得到汇编(.s),汇编器处理得到目标文件(.o),此时.o文件中已经是二进制代码了,但还要最终经过链接器处理才能得到最终的可执行机器代码(.exe)。假设我们有一个swap.c文件,那么在编译时将程序的后缀名依次转换为:Created with

2016-04-01 23:15:30 4628 2

原创 C++之拷贝控制操作入门(1)

C++常见的初始化方式有两种,分别是直接初始化以及复制初始化(在primer中也被称为拷贝初始化)。①什么是拷贝初始化?什么是直接初始化? 通俗点来说,直接初始化是指不使用等号的初始化, 而拷贝初始化则是使用等号的初始化。 我们将使用string举一个例子:string test("test");//直接初始化string test = string("test")//拷贝初始化那么这两种初始

2016-03-25 17:13:39 439

原创 WA的2015与正在RE的2016

2015年心路历程。编程语言语言框架编程项目技能方向 、

2016-01-02 23:00:31 523

原创 希尔排序实现

希尔排序算是插入排序的一种高级进化版,虽然希尔排序的实现比较简单,但是它的原理证明非常复杂,由于能力有限,故没有涉及。我直接上代码吧。#include<stdio.h>int container[1000001];int main(void){ int N; scanf("%d", &N); int i, j; for(i = 0;i < N;i++){

2015-12-11 19:26:59 350

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除