|
| 1 | +<!-- markdown-toc start - Don't edit this section. Run M-x markdown-toc-generate-toc again--> |
| 2 | +**Table of Contents** |
| 3 | + |
| 4 | +-[Python面试题集](#python) |
| 5 | +-[Python语言特性](#python) |
| 6 | +-[1 Python的函数参数传递](#1-python) |
| 7 | +-[2 Python中的元类(metaclass)](#2-pythonmetaclass) |
| 8 | +-[3@staticmethod和@classmethod](#3-staticmethodclassmethod) |
| 9 | +-[4 类变量和实例变量](#4-) |
| 10 | +-[5 Python自省](#5-python) |
| 11 | +-[6 字典推导式](#6-) |
| 12 | +-[7 Python中单下划线和双下划线](#7-python) |
| 13 | +-[8 字符串格式化:%和.format](#8-format) |
| 14 | +-[9 迭代器和生成器](#9-) |
| 15 | +-[10`*args` and`**kwargs`](#10-args-and-kwargs) |
| 16 | +-[11 面向切面编程AOP和装饰器](#11-aop) |
| 17 | +-[12 鸭子类型](#12-) |
| 18 | +-[13 Python中重载](#13-python) |
| 19 | +-[14 新式类和旧式类](#14-) |
| 20 | +-[15`__new__`和`__init__`的区别](#15-newinit) |
| 21 | +-[16 单例模式](#16-) |
| 22 | +-[1 使用`__new__`方法](#1-new) |
| 23 | +-[2 共享属性](#2-) |
| 24 | +-[3 装饰器版本](#3-) |
| 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-pythonlist) |
| 37 | +-[26 Python的is](#26-pythonis) |
| 38 | +-[27 read,readline和readlines](#27-readreadlinereadlines) |
| 39 | +-[28 Python2和3的区别](#28-python23) |
| 40 | +-[操作系统](#) |
| 41 | +-[1 select,poll和epoll](#1-selectpollepoll) |
| 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-) |
| 60 | +-[5 MVCC](#5-mvcc) |
| 61 | +-[6 MyISAM和InnoDB](#6-myisaminnodb) |
| 62 | +-[网络](#) |
| 63 | +-[1 三次握手](#1-) |
| 64 | +-[2 四次挥手](#2-) |
| 65 | +-[3 ARP协议](#3-arp) |
| 66 | +-[4 urllib和urllib2的区别](#4-urlliburllib2) |
| 67 | +-[5 Post和Get](#5-postget) |
| 68 | +-[6 Cookie和Session](#6-cookiesession) |
| 69 | +-[7 apache和nginx的区别](#7-apachenginx) |
| 70 | +-[8 网站用户密码保存](#8-) |
| 71 | +-[9 HTTP和HTTPS](#9-httphttps) |
| 72 | +-[10 XSRF和XSS](#10-xsrfxss) |
| 73 | +-[11 幂等 Idempotence](#11--idempotence) |
| 74 | +-[12 RESTful架构(SOAP,RPC)](#12-restfulsoaprpc) |
| 75 | +-[13 SOAP](#13-soap) |
| 76 | +-[14 RPC](#14-rpc) |
| 77 | +-[15 CGI和WSGI](#15-cgiwsgi) |
| 78 | +-[16 中间人攻击](#16-) |
| 79 | +-[17 c10k问题](#17-c10k) |
| 80 | +-[18 socket](#18-socket) |
| 81 | +-[19 浏览器缓存](#19-) |
| 82 | +-[20 HTTP1.0和HTTP1.1](#20-http10http11) |
| 83 | +-[Ajax](#ajax) |
| 84 | +-[*NIX](#nix) |
| 85 | +-[unix进程间通信方式(IPC)](#unixipc) |
| 86 | +-[数据结构](#) |
| 87 | +-[1 红黑树](#1-) |
| 88 | +-[编程题](#) |
| 89 | +-[1 台阶问题/斐波纳挈](#1-) |
| 90 | +-[2 变态台阶问题](#2-) |
| 91 | +-[矩形覆盖](#) |
| 92 | +-[2 杨氏矩阵查找](#2-) |
| 93 | +-[3 去除列表中的重复元素](#3-) |
| 94 | +-[4 链表成对调换](#4-) |
| 95 | +-[Definition for singly-linked list.](#definition-for-singly-linked-list) |
| 96 | +-[class ListNode:](#class-listnode) |
| 97 | +-[def__init__(self, x):](#def-initself-x) |
| 98 | +-[self.val = x](#selfval--x) |
| 99 | +-[self.next = None](#selfnext--none) |
| 100 | +-[创建字典的方法](#) |
| 101 | + -[1 直接创建](#1-) |
| 102 | + -[2 工厂方法](#2-) |
| 103 | + -[3 fromkeys()方法](#3-fromkeys) |
| 104 | +-[dict={'x':-1,'y':-1}](#dictx-1y-1) |
| 105 | +-[dict2={'x':None, 'y':None}](#dict2xnone-ynone) |
| 106 | +-[合并两个有序列表](#) |
| 107 | +-[交叉链表求交点](#) |
| 108 | +-[Definition for singly-linked list.](#definition-for-singly-linked-list) |
| 109 | +-[class ListNode:](#class-listnode) |
| 110 | +-[def__init__(self, x):](#def-initself-x) |
| 111 | +-[self.val = x](#selfval--x) |
| 112 | +-[self.next = None](#selfnext--none) |
| 113 | +-[二分查找](#) |
| 114 | +-[快排](#) |
| 115 | +-[找零问题](#) |
| 116 | +-[广度遍历和深度遍历二叉树](#) |
| 117 | +-[二叉树节点](#) |
| 118 | +-[层次遍历](#) |
| 119 | +-[深度遍历](#) |
| 120 | +-[前中后序遍历](#) |
| 121 | +-[求最大树深](#) |
| 122 | +-[求两棵树是否相同](#) |
| 123 | +-[前序中序求后序](#) |
| 124 | +-[重建](#) |
| 125 | +-[后序遍历](#) |
| 126 | +-[单链表逆置](#) |
| 127 | + |
| 128 | +<!-- markdown-toc end--> |
| 129 | + |
| 130 | + |
| 131 | + |
1 | 132 | #Python面试题集
|
2 | 133 |
|
3 | 134 | 目前面了4家python的公司,基本都是很基础的东西,对比发现和stackoverflow上高票数的问题有很多重复,整理一下希望对别人有帮助.
|
@@ -353,7 +484,7 @@ Python 中,一个变量的作用域总是由在代码中被赋值的地方所
|
353 | 484 |
|
354 | 485 | 本地作用域(Local)→当前作用域被嵌入的本地作用域(Enclosing locals)→全局/模块作用域(Global)→内置作用域(Built-in)
|
355 | 486 |
|
356 |
| -##18线程全局锁 |
| 487 | +##18GIL线程全局锁 |
357 | 488 |
|
358 | 489 | 线程全局锁(Global Interpreter Lock),即Python为了保证线程安全而采取的独立线程运行的限制,说白了就是一个核只能在同一时间运行一个线程.
|
359 | 490 |
|
@@ -497,6 +628,10 @@ is是对比地址,==是对比值
|
497 | 628 | * readline 读取下一行,使用生成器方法
|
498 | 629 | * readlines 读取整个文件到一个迭代器以供我们遍历
|
499 | 630 |
|
| 631 | +##28 Python2和3的区别 |
| 632 | + |
| 633 | + |
| 634 | + |
500 | 635 | #操作系统
|
501 | 636 |
|
502 | 637 | ##1 select,poll和epoll
|
@@ -641,9 +776,18 @@ Bulid过程可以分解为4个步骤:预处理(Prepressing), 编译(Compilation)
|
641 | 776 |
|
642 | 777 | ##4 乐观锁和悲观锁
|
643 | 778 |
|
| 779 | +悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作 |
| 780 | + |
| 781 | +乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。 |
| 782 | + |
| 783 | +##5 MVCC |
| 784 | + |
644 | 785 |
|
| 786 | +##6 MyISAM和InnoDB |
645 | 787 |
|
| 788 | +MyISAM 适合于一些需要大量查询的应用,但其对于有大量写操作并不是很好。甚至你只是需要update一个字段,整个表都会被锁起来,而别的进程,就算是读进程都无法操作直到读操作完成。另外,MyISAM 对于 SELECT COUNT(*) 这类的计算是超快无比的。 |
646 | 789 |
|
| 790 | +InnoDB 的趋势会是一个非常复杂的存储引擎,对于一些小的应用,它会比 MyISAM 还慢。他是它支持“行锁” ,于是在写操作比较多的时候,会更优秀。并且,他还支持更多的高级应用,比如:事务。 |
647 | 791 |
|
648 | 792 | #网络
|
649 | 793 |
|
@@ -761,6 +905,17 @@ Socket=Ip address+ TCP/UDP + port
|
761 | 905 |
|
762 | 906 | 304 not midifyide
|
763 | 907 |
|
| 908 | +##20 HTTP1.0和HTTP1.1 |
| 909 | + |
| 910 | +推荐:http://blog.csdn.net/elifefly/article/details/3964766 |
| 911 | + |
| 912 | +1. 请求头Host字段,一个服务器多个网站 |
| 913 | +2. 长链接 |
| 914 | +3. 文件断点续传 |
| 915 | +3. 身份认证,状态管理,Cache缓存 |
| 916 | + |
| 917 | +##Ajax |
| 918 | + |
764 | 919 | #*NIX
|
765 | 920 |
|
766 | 921 | ##unix进程间通信方式(IPC)
|
@@ -815,6 +970,18 @@ def fib(i):
|
815 | 970 | return fib(i-1)+fib(i-2)
|
816 | 971 | ```
|
817 | 972 |
|
| 973 | +第三种方法 |
| 974 | + |
| 975 | +```python |
| 976 | +deffib(n): |
| 977 | + a, b=0,1 |
| 978 | +while a< n: |
| 979 | +print a, |
| 980 | + a, b= b, a+ b |
| 981 | +print |
| 982 | +fib(1000) |
| 983 | +``` |
| 984 | + |
818 | 985 | ##2 变态台阶问题
|
819 | 986 |
|
820 | 987 | 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
|
|