|
| 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 | +## 18 GIL线程全局锁 |
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 | +def fib(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级的台阶总共有多少种跳法。
|
|
0 commit comments