sql反模式案例

问题1.树形结构存储

方案1: Adjacency List:每一条记录存parent_id(平时小数据量如省市级联无法处理无限层)

方案2: Path Enumerations:每一条记录存整个tree path经过的node枚举(对于单结点读取完整路径比较频繁的场景)

方案3: Nested Sets:每一条记录存 nleft 和 nright(淘宝商品类别方案,很适用于少量修改,大量......


Django

django源码:元类

Django的源码很多地方用到了元类,最早看的时候遇到了比较大的问题,现在准备从一些最简单的地方开始分析元类的用途。

1. 使用内置元类type动态创建类,实现动态代理

在django中,Manager代理QuerySet,我们在使用Django orm执行一个如 User.objects.filter().filter()的查询时,第一个filter是由manager返回的QuerySet,......


openresty一些小坑

为了应付一个紧急的接口聚合的需求,在基础平台leader的推荐下使用,发现了新大陆

1. 开发不算慢

2.性能真的很高

3.需要注意的地方很多,lapis,新浪的

4.详细的以下

一开始赶时间,先用lua写了一个简单的脚本,后面领导发现性能好像还不错,就直接上了。。。

lapis比较有意思的是以自己作为入口模板化nginx的配置,这个比较有意思。

一下遇到的一些总结。

http c......


Django

django源码:Descriptor

描述器介绍

使用__get__,__set__, __delete__ 三个方法用于拦截对具体属性的访问,在python中叫做描述器,descriptor

这里有一个示例,我们通过radius计算得到area

import math

class Circle(object):

radius = 1

def area(self):

return mat......


密码相关知识总结

前言

总结在工作遇到的各种密码问题

密码学家的工具箱

这几个是密码学的核心与基础

对称加密

非对称加密

单项散列函数

消息认证码

数字签名

伪随机数生成器

PKCS

PKCS是现在用得最多的标准,实际开发会直接接触。

PKCS#1:定义RSA公开密钥算法加密和签名机制,主要用于组织PKCS#7中所描述的数字签名和数字信封。

PKCS#3:定义Diffie-Hellman密......


unittest

关于单元测试

1.用之前感觉对大一点的项目失去信心,每次修改bug提心吊胆,用之后感觉很容易hold住。

2.用之前最烦的是测试自己的代码,手动填写数据,手动发送request,现在执行一下命令一个个pass感觉很爽。

3.去年做了很多线上临时活动,可能很容易给自己找很多借口,时间短需求不确定,但是再来一次我觉得还是得加上测试。

4.不是太多人参与的项目,可以通过单元测试和codereviewer减少代码......


Django

django源码:设计模式

单例模式

单例模式让我们在全局的代码中共用一个类实例,这可能会处于很多原因要进行这种处理,比如数据库连接,配置等,这些不需要反复去生成实例。

只需要一个就够了。

网上去搜索单例模式可以看到很多方法,但其实好像很没必要。可以看下django如何维持单一个类全局单实例。

首先需要知道的是python中import就是单例的。所以接下来很简单,我们只要在一个module中事先实例好就ok了。

......


有意思的信任链与信任网

中心式(CA)信任链

https

用户信任自己电脑上浏览器->浏览器信任内置的CA根证书->CA机构信任网站 => 用户信任通信过程

分布式信任网

gnupg

简单地说就是,在信任网中,没有大家都信任的中心权威机构,用户以各自为中心,相互认证公钥,相互签名公钥证书。这些签名使得用户的公钥彼此相连,形成自然的网状结构,也就是所谓的信任网。


Django

django源码:python中的AOP方式

1. decorator

python提到AOP大家都会想到decortor,可以在不对函数内部修改扩展函数的功能。这里我们看下最典型的通过修饰器控制FBVS的权限。login_required这个就是一个校验是否登录的修饰器。

def login_required(function=None, redirect_field_name=REDIRECT_FIELD_NAME, login_ur......


Django

django源码:惰性属性

1. 延迟函数执行

authmiddleware中间件会在request通过get_user函数获取一个user对象并挂载到request上,但是我们要实现只有当对user里面的属性访问时才去取得user对象```python

request.leuser = leuser.get_or_create(token)

每次都会拿token去调用集团用户中心的登录校验。后面看了下django的......


谷歌地图偏移获取方法

关于谷歌地图的偏移

偏移

早些时候有做过一些第三方地图api开发的都知道,谷歌地图还有等其他的地图在国内都会使用另一套加密的坐标。网上称之为火星坐标,学名GCJ-02。以手机gps为例,不考虑gps本本身精度,当获取到位置A,使用谷歌地图api把a位置放置到地图上时会变到位置b,a与b的位置偏移远远大于gps精度造成的偏移,这个偏移是可能有上百米。这个偏移是人为的。

偏移数据

事实上谷歌在......


git

gitflow的分支管理策略总结

经过了半年终于由个人开发者变成团队开发者,很幸运可以经历和团队一起解决重大问题的阶段。一开始到公司的时候的时候git版本控制只有develop master 分支,非常的粗放,经常出问题。后面采用a-successful-git-branching-model后效果显著。本文侧重和实际生产结合,并作了些补充。

git flow