|
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