|
1 | 1 | <!-- markdown-toc start - Don't edit this section. Run M-x markdown-toc-generate-toc again -->
|
2 | 2 | **Table of Contents**
|
3 | 3 |
|
4 |
| -- [Python语言特性](#python) |
5 |
| - - [1 Python的函数参数传递](#1-python) |
6 |
| - - [2 Python中的元类(metaclass)](#2-pythonmetaclass) |
7 |
| - - [3 @staticmethod和@classmethod](#3-staticmethodclassmethod) |
8 |
| - - [4 类变量和实例变量](#4-) |
9 |
| - - [5 Python自省](#5-python) |
10 |
| - - [6 字典推导式](#6-) |
11 |
| - - [7 Python中单下划线和双下划线](#7-python) |
12 |
| - - [8 字符串格式化:%和.format](#8-format) |
13 |
| - - [9 迭代器和生成器](#9-) |
| 4 | +- [Python语言特性](#python语言特性) |
| 5 | + - [1 Python的函数参数传递](#1-python的函数参数传递) |
| 6 | + - [2 Python中的元类(metaclass)](#2-python中的元类metaclass) |
| 7 | + - [3 @staticmethod和@classmethod](#3-staticmethod和classmethod) |
| 8 | + - [4 类变量和实例变量](#4-类变量和实例变量) |
| 9 | + - [5 Python自省](#5-python自省) |
| 10 | + - [6 字典推导式](#6-字典推导式) |
| 11 | + - [7 Python中单下划线和双下划线](#7-python中单下划线和双下划线) |
| 12 | + - [8 字符串格式化:%和.format](#8-字符串格式化和format) |
| 13 | + - [9 迭代器和生成器](#9-迭代器和生成器) |
14 | 14 | - [10 `*args` and `**kwargs`](#10-args-and-kwargs)
|
15 |
| - - [11 面向切面编程AOP和装饰器](#11-aop) |
16 |
| - - [12 鸭子类型](#12-) |
17 |
| - - [13 Python中重载](#13-python) |
18 |
| - - [14 新式类和旧式类](#14-) |
19 |
| - - [15 `__new__`和`__init__`的区别](#15-newinit) |
20 |
| - - [16 单例模式](#16-) |
21 |
| - - [1 使用`__new__`方法](#1-new) |
22 |
| - - [2 共享属性](#2-) |
23 |
| - - [3 装饰器版本](#3-) |
24 |
| - - [17 Python中的作用域](#17-python) |
25 |
| - - [18 GIL线程全局锁](#18-gil) |
26 |
| - - [19 协程](#19-) |
27 |
| - - [20 闭包](#20-) |
28 |
| - - [21 lambda函数](#21-lambda) |
29 |
| - - [22 Python函数式编程](#22-python) |
30 |
| - - [23 Python里的拷贝](#23-python) |
31 |
| - - [24 Python垃圾回收机制](#24-python) |
32 |
| - - [1 引用计数](#1-) |
33 |
| - - [2 标记-清除机制](#2--) |
34 |
| - - [3 分代技术](#3-) |
35 |
| - - [25 Python的List](#25-pythonlist) |
36 |
| - - [26 Python的is](#26-pythonis) |
37 |
| - - [27 read,readline和readlines](#27-readreadlinereadlines) |
38 |
| - - [28 Python2和3的区别](#28-python23) |
39 |
| -- [操作系统](#) |
40 |
| - - [1 select,poll和epoll](#1-selectpollepoll) |
41 |
| - - [2 调度算法](#2-) |
42 |
| - - [3 死锁](#3-) |
43 |
| - - [4 程序编译与链接](#4-) |
44 |
| - - [1 预处理](#1-) |
45 |
| - - [2 编译](#2-) |
46 |
| - - [3 汇编](#3-) |
47 |
| - - [4 链接](#4-) |
48 |
| - - [5 静态链接和动态链接](#5-) |
49 |
| - - [6 虚拟内存技术](#6-) |
50 |
| - - [7 分页和分段](#7-) |
51 |
| - - [分页与分段的主要区别](#) |
52 |
| - - [8 页面置换算法](#8-) |
53 |
| - - [9 边沿触发和水平触发](#9-) |
54 |
| -- [数据库](#) |
55 |
| - - [1 事务](#1-) |
56 |
| - - [2 数据库索引](#2-) |
57 |
| - - [3 Redis原理](#3-redis) |
58 |
| - - [4 乐观锁和悲观锁](#4-) |
| 15 | + - [11 面向切面编程AOP和装饰器](#11-面向切面编程aop和装饰器) |
| 16 | + - [12 鸭子类型](#12-鸭子类型) |
| 17 | + - [13 Python中重载](#13-python中重载) |
| 18 | + - [14 新式类和旧式类](#14-新式类和旧式类) |
| 19 | + - [15 `__new__`和`__init__`的区别](#15-__new__和__init__的区别) |
| 20 | + - [16 单例模式](#16-单例模式) |
| 21 | + - [1 使用`__new__`方法](#1-使用__new__方法) |
| 22 | + - [2 共享属性](#2-共享属性) |
| 23 | + - [3 装饰器版本](#3-装饰器版本) |
| 24 | + - [4 import方法](#4-import方法) |
| 25 | + - [17 Python中的作用域](#17-python中的作用域) |
| 26 | + - [18 GIL线程全局锁](#18-gil线程全局锁) |
| 27 | + - [19 协程](#19-协程) |
| 28 | + - [20 闭包](#20-闭包) |
| 29 | + - [21 lambda函数](#21-lambda函数) |
| 30 | + - [22 Python函数式编程](#22-python函数式编程) |
| 31 | + - [23 Python里的拷贝](#23-python里的拷贝) |
| 32 | + - [24 Python垃圾回收机制](#24-python垃圾回收机制) |
| 33 | + - [1 引用计数](#1-引用计数) |
| 34 | + - [2 标记-清除机制](#2-标记-清除机制) |
| 35 | + - [3 分代技术](#3-分代技术) |
| 36 | + - [25 Python的List](#25-python的list) |
| 37 | + - [26 Python的is](#26-python的is) |
| 38 | + - [27 read,readline和readlines](#27-readreadline和readlines) |
| 39 | + - [28 Python2和3的区别](#28-python2和3的区别) |
| 40 | +- [操作系统](#操作系统) |
| 41 | + - [1 select,poll和epoll](#1-selectpoll和epoll) |
| 42 | + - [2 调度算法](#2-调度算法) |
| 43 | + - [3 死锁](#3-死锁) |
| 44 | + - [4 程序编译与链接](#4-程序编译与链接) |
| 45 | + - [1 预处理](#1-预处理) |
| 46 | + - [2 编译](#2-编译) |
| 47 | + - [3 汇编](#3-汇编) |
| 48 | + - [4 链接](#4-链接) |
| 49 | + - [5 静态链接和动态链接](#5-静态链接和动态链接) |
| 50 | + - [6 虚拟内存技术](#6-虚拟内存技术) |
| 51 | + - [7 分页和分段](#7-分页和分段) |
| 52 | + - [分页与分段的主要区别](#分页与分段的主要区别) |
| 53 | + - [8 页面置换算法](#8-页面置换算法) |
| 54 | + - [9 边沿触发和水平触发](#9-边沿触发和水平触发) |
| 55 | +- [数据库](#数据库) |
| 56 | + - [1 事务](#1-事务) |
| 57 | + - [2 数据库索引](#2-数据库索引) |
| 58 | + - [3 Redis原理](#3-redis原理) |
| 59 | + - [4 乐观锁和悲观锁](#4-乐观锁和悲观锁) |
59 | 60 | - [5 MVCC](#5-mvcc)
|
60 |
| - - [6 MyISAM和InnoDB](#6-myisaminnodb) |
61 |
| -- [网络](#) |
62 |
| - - [1 三次握手](#1-) |
63 |
| - - [2 四次挥手](#2-) |
64 |
| - - [3 ARP协议](#3-arp) |
65 |
| - - [4 urllib和urllib2的区别](#4-urlliburllib2) |
66 |
| - - [5 Post和Get](#5-postget) |
67 |
| - - [6 Cookie和Session](#6-cookiesession) |
68 |
| - - [7 apache和nginx的区别](#7-apachenginx) |
69 |
| - - [8 网站用户密码保存](#8-) |
70 |
| - - [9 HTTP和HTTPS](#9-httphttps) |
71 |
| - - [10 XSRF和XSS](#10-xsrfxss) |
72 |
| - - [11 幂等 Idempotence](#11--idempotence) |
73 |
| - - [12 RESTful架构(SOAP,RPC)](#12-restfulsoaprpc) |
| 61 | + - [6 MyISAM和InnoDB](#6-myisam和innodb) |
| 62 | +- [网络](#网络) |
| 63 | + - [1 三次握手](#1-三次握手) |
| 64 | + - [2 四次挥手](#2-四次挥手) |
| 65 | + - [3 ARP协议](#3-arp协议) |
| 66 | + - [4 urllib和urllib2的区别](#4-urllib和urllib2的区别) |
| 67 | + - [5 Post和Get](#5-post和get) |
| 68 | + - [6 Cookie和Session](#6-cookie和session) |
| 69 | + - [7 apache和nginx的区别](#7-apache和nginx的区别) |
| 70 | + - [8 网站用户密码保存](#8-网站用户密码保存) |
| 71 | + - [9 HTTP和HTTPS](#9-http和https) |
| 72 | + - [10 XSRF和XSS](#10-xsrf和xss) |
| 73 | + - [11 幂等 Idempotence](#11-幂等-idempotence) |
| 74 | + - [12 RESTful架构(SOAP,RPC)](#12-restful架构soaprpc) |
74 | 75 | - [13 SOAP](#13-soap)
|
75 | 76 | - [14 RPC](#14-rpc)
|
76 |
| - - [15 CGI和WSGI](#15-cgiwsgi) |
77 |
| - - [16 中间人攻击](#16-) |
78 |
| - - [17 c10k问题](#17-c10k) |
| 77 | + - [15 CGI和WSGI](#15-cgi和wsgi) |
| 78 | + - [16 中间人攻击](#16-中间人攻击) |
| 79 | + - [17 c10k问题](#17-c10k问题) |
79 | 80 | - [18 socket](#18-socket)
|
80 |
| - - [19 浏览器缓存](#19-) |
81 |
| - - [20 HTTP1.0和HTTP1.1](#20-http10http11) |
| 81 | + - [19 浏览器缓存](#19-浏览器缓存) |
| 82 | + - [20 HTTP1.0和HTTP1.1](#20-http10和http11) |
82 | 83 | - [21 Ajax](#21-ajax)
|
83 | 84 | - [*NIX](#nix)
|
84 | 85 | - [unix进程间通信方式(IPC)](#unixipc)
|
85 |
| -- [数据结构](#) |
86 |
| - - [1 红黑树](#1-) |
87 |
| -- [编程题](#) |
88 |
| - - [1 台阶问题/斐波纳挈](#1-) |
89 |
| - - [2 变态台阶问题](#2-) |
90 |
| - - [3 矩形覆盖](#3-) |
91 |
| - - [4 杨氏矩阵查找](#4-) |
92 |
| - - [5 去除列表中的重复元素](#5-) |
93 |
| - - [6 链表成对调换](#6-) |
94 |
| - - [7 创建字典的方法](#7-) |
95 |
| - - [1 直接创建](#1-) |
96 |
| - - [2 工厂方法](#2-) |
97 |
| - - [3 fromkeys()方法](#3-fromkeys) |
98 |
| - - [8 合并两个有序列表](#8-) |
99 |
| - - [9 交叉链表求交点](#9-) |
100 |
| - - [10 二分查找](#10-) |
101 |
| - - [11 快排](#11-) |
102 |
| - - [12 找零问题](#12-) |
103 |
| - - [13 广度遍历和深度遍历二叉树](#13-) |
| 86 | +- [数据结构](#数据结构) |
| 87 | + - [1 红黑树](#1-红黑树) |
| 88 | +- [编程题](#编程题) |
| 89 | + - [1 台阶问题/斐波纳挈](#1-台阶问题斐波纳挈) |
| 90 | + - [2 变态台阶问题](#2-变态台阶问题) |
| 91 | + - [3 矩形覆盖](#3-矩形覆盖) |
| 92 | + - [4 杨氏矩阵查找](#4-杨氏矩阵查找) |
| 93 | + - [5 去除列表中的重复元素](#5-去除列表中的重复元素) |
| 94 | + - [6 链表成对调换](#6-链表成对调换) |
| 95 | + - [7 创建字典的方法](#7-创建字典的方法) |
| 96 | + - [1 直接创建](#1-直接创建) |
| 97 | + - [2 工厂方法](#2-工厂方法) |
| 98 | + - [3 fromkeys()方法](#3-fromkeys方法) |
| 99 | + - [8 合并两个有序列表](#8-合并两个有序列表) |
| 100 | + - [9 交叉链表求交点](#9-交叉链表求交点) |
| 101 | + - [10 二分查找](#10-二分查找) |
| 102 | + - [11 快排](#11-快排) |
| 103 | + - [12 找零问题](#12-找零问题) |
| 104 | + - [13 广度遍历和深度遍历二叉树](#13-广度遍历和深度遍历二叉树) |
104 | 105 | - [14 二叉树节点](#14-)
|
105 | 106 | - [15 层次遍历](#15-)
|
106 | 107 | - [16 深度遍历](#16-)
|
107 |
| - - [17 前中后序遍历](#17-) |
108 |
| - - [18 求最大树深](#18-) |
109 |
| - - [19 求两棵树是否相同](#19-) |
110 |
| - - [20 前序中序求后序](#20-) |
111 |
| - - [21 单链表逆置](#21-) |
| 108 | + - [17 前中后序遍历](#17-前中后序遍历) |
| 109 | + - [18 求最大树深](#18-求最大树深) |
| 110 | + - [19 求两棵树是否相同](#19-求两棵树是否相同) |
| 111 | + - [20 前序中序求后序](#20-前序中序求后序) |
| 112 | + - [21 单链表逆置](#21-单链表逆置) |
112 | 113 |
|
113 | 114 | <!-- markdown-toc end -->
|
114 | 115 |
|
@@ -717,7 +718,7 @@ Bulid过程可以分解为4个步骤:预处理(Prepressing), 编译(Compilation)
|
717 | 718 |
|
718 | 719 | ### 4 链接
|
719 | 720 |
|
720 |
| -链接的主要内容就是把各个模块直接爱你相互引用的部分处理好,使各个模块可以正确的拼接。 |
| 721 | +链接的主要内容就是把各个模块之间相互引用的部分处理好,使各个模块可以正确的拼接。 |
721 | 722 | 链接的主要过程包块 地址和空间的分配(Address and Storage Allocation)、符号决议(Symbol Resolution)和重定位(Relocation)等步骤。
|
722 | 723 |
|
723 | 724 | ## 5 静态链接和动态链接
|
@@ -919,6 +920,7 @@ WSGI, Web Server Gateway Interface,是Python应用程序或框架和Web服务
|
919 | 920 | ## 17 c10k问题
|
920 | 921 |
|
921 | 922 | 所谓c10k问题,指的是服务器同时支持成千上万个客户端的问题,也就是concurrent 10 000 connection(这也是c10k这个名字的由来)。
|
| 923 | +推荐: http://www.kegel.com/c10k.html |
922 | 924 |
|
923 | 925 | ## 18 socket
|
924 | 926 |
|
@@ -977,45 +979,44 @@ AVL是严格平衡树,因此在增加或者删除节点的时候,根据不
|
977 | 979 | 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
|
978 | 980 |
|
979 | 981 | ```python
|
980 |
| -fib = lambda n: 1 if n <= 2 else fib(n - 1) + fib(n - 2) |
| 982 | +fib = lambda n: n if n <= 2 else fib(n - 1) + fib(n - 2) |
981 | 983 | ```
|
982 | 984 |
|
983 | 985 | 第二种记忆方法
|
984 | 986 |
|
985 | 987 | ```python
|
986 | 988 | def memo(func):
|
987 |
| - cache={} |
| 989 | + cache = {} |
988 | 990 | def wrap(*args):
|
989 | 991 | if args not in cache:
|
990 |
| - cache[args]=func(*args) |
| 992 | + cache[args] = func(*args) |
991 | 993 | return cache[args]
|
992 | 994 | return wrap
|
993 | 995 |
|
| 996 | + |
994 | 997 | @memo
|
995 | 998 | def fib(i):
|
996 |
| - if i<2: |
| 999 | + if i < 2: |
997 | 1000 | return 1
|
998 |
| - return fib(i-1)+fib(i-2) |
| 1001 | + return fib(i-1) + fib(i-2) |
999 | 1002 | ```
|
1000 | 1003 |
|
1001 | 1004 | 第三种方法
|
1002 | 1005 |
|
1003 | 1006 | ```python
|
1004 | 1007 | def fib(n):
|
1005 | 1008 | a, b = 0, 1
|
1006 |
| - while a < n: |
1007 |
| - print a, |
1008 |
| - a, b = b, a + b |
1009 |
| - print |
1010 |
| -fib(1000) |
| 1009 | + for _ in xrange(n): |
| 1010 | + a, b = b, a + b |
| 1011 | + return b |
1011 | 1012 | ```
|
1012 | 1013 |
|
1013 | 1014 | ## 2 变态台阶问题
|
1014 | 1015 |
|
1015 | 1016 | 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
|
1016 | 1017 |
|
1017 | 1018 | ```python
|
1018 |
| -fib = lambda n: i if n < 2 else 2 * fib(n - 1) |
| 1019 | +fib = lambda n: n if n < 2 else 2 * fib(n - 1) |
1019 | 1020 | ```
|
1020 | 1021 |
|
1021 | 1022 | ## 3 矩形覆盖
|
|
0 commit comments