python学习总结(2)

1.TCP网络

三次握手(连接):C向S发送一个SYN主动打开请求,***是随机数A,S收到请求后,向C返回SYN/ACK,ACK为A+1***为B,C收到ACK后,再向S发送ACK(此时为B+1)后,连接建立。

四次挥手(断开):C(也可能是S)向S发送一个FIN报文断开请求,S收到后向C发送ACK表示请求已收到,再次向C发送FIN表示要断开连接,C收到后向S发送ACK确认断开连接,S收到后确认断开连接。


2.ARP协议:地址解析协议,根据IP地址获得物理地址的一个TCP/IP协议。


3.GET和POST的区别:一个用于获取数据,一个用于发送数据。


4.函数式编程:

filter 函数的功能相当于过滤器。调用一个布尔函数bool_func来迭代遍历每个seq中的元素;返回一个使bool_seq返回值为true的元素的序列。

map函数是对一个序列的每个项依次执行函数,下面是对一个序列每个项都乘以2:

reduce函数是对一个序列的每个项迭代调用函数,下面是求3的阶乘:


5.apache和nginx的区别:

nginx 相对 apache 的优点:

  • 轻量级,同样起web 服务,比apache 占用更少的内存及资源
  • 抗并发,nginx 处理请求是异步非阻塞的,支持更多的并发连接,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能
  • 配置简洁
  • 高度模块化的设计,编写模块相对简单
  • 社区活跃

apache 相对nginx 的优点:

  • rewrite ,比nginx 的rewrite 强大
  • 模块超多,基本想到的都可以找到
  • 少bug ,nginx 的bug 相对较多
  • 超稳定
6.HTTP和HTTPS

HTTP 和 HTTPS 的相同点

大多数情况下,HTTP 和 HTTPS 是相同的,因为都是采用同一个基础的协议,作为 HTTP 或 HTTPS 客户端——浏览器,设立一个连接到 Web 服务器指定的端口。当服务器接收到请求,它会返回一个状态码以及消息,这个回应可能是请求信息、或者指示某个错误发送的错误信息。系统使用统一资源定位器 URI 模式,因此资源可以被唯一指定。而 HTTPS 和 HTTP 唯一不同的只是一个协议头(https)的说明,其他都是一样的。

HTTP 和 HTTPS 的不同之处

  1. HTTP 的 URL 以 http:// 开头,而 HTTPS 的 URL 以 https:// 开头
  2. HTTP 是不安全的,而 HTTPS 是安全的
  3. HTTP 标准端口是 80 ,而 HTTPS 的标准端口是 443
  4. 在 OSI 网络模型中,HTTP 工作于应用层,而 HTTPS 工作在传输层
  5. HTTP 无需加密,而 HTTPS 对传输的数据进行加密
  6. HTTP 无需证书,而 HTTPS 需要认证证书

7.POST,GET,PUT,DELETE

GET http://www.bank.com/account/123456,不会改变资源的状态,不论调用一次还是N次都没有副作用。请注意,这里强调的是一次和N次具有相同的副作用,而不是每次GET的结果相同。GET http://www.news.com/latest-news这个HTTP请求可能会每次得到不同的结果,但它本身并没有产生任何副作用,因而是满足幂等性的。

DELETE方法用于删除资源,有副作用,但它应该满足幂等性。比如:DELETE http://www.forum.com/article/4231,调用一次和N次对系统产生的副作用是相同的,即删掉id为4231的帖子;因此,调用者可以多次调用或刷新页面而不必担心引起错误。

POST所对应的URI并非创建的资源本身,而是资源的接收者。比如:POST http://www.forum.com/articles的语义是在http://www.forum.com/articles下创建一篇帖子,HTTP响应中应包含帖子的创建状态以及帖子的URI。两次相同的POST请求会在服务器端创建两份资源,它们具有不同的URI;所以,POST方法不具备幂等性。

PUT所对应的URI是要创建或更新的资源本身。比如:PUT http://www.forum/articles/4231的语义是创建或更新ID为4231的帖子。对同一URI进行多次PUT的副作用和一次PUT是相同的;因此,PUT方法具有幂等性。

8.CGI,WSGI

CGI是通用网关接口,是连接web服务器和应用程序的接口,用户通过CGI来获取动态数据或文件等。
CGI程序是一个独立的程序,它可以用几乎所有语言来写,包括perl,c,lua,python等等。

WSGI, Web Server Gateway Interface,是Python应用程序或框架和Web服务器之间的一种接口,WSGI的其中一个目的就是让用户可以用统一的语言(Python)编写前后端。

9.SOCKET编程:推荐http://www.cnblogs.com/bingyun84/archive/2009/10/16/1584387.html,非常不错


10。浏览器缓存机制

python学习总结(2)


11.编程题

(1)台阶问题/斐波纳挈

fib = lambda n : n if n<=2 else fib(n-1) + fib(n-2) 

或者   def fib(n):  a,b= 0,1  for i in range(n): a,b=b,b+a  return b

(2)变态台阶问题

fib = lambda n : n if n<2 else 2*fib(n-1)

(3)字典创建

a = [('asd',12),('sad',26)]  b=dict(a)                       a={} a.setdefault('asd',26)

排序:sorted(a.items(),key=lambda asd:asd[1])

(4)list排序

a=[1,3,6,4]  sorted(a)  a.reverse()

合并:extend

(5)二分查找:

def binarysearch(li, t):
    low = 0
    if len(li) % 2 == 0:
        high = len(li) - 1
    else:
        high = len(li)
    while low < high:
        print(low, high)
        mid = (low + high)//2
        if li[mid] > t:
            high = mid
        elif li[mid] < t:
            low = mid + 1
        else:
            return mid
    return low if li[low] == t else False
(6)快速排序

def qsort(seq):
    if seq == []:
        return []
    else:
        first = seq[0]
        lesser = qsort([x for x in seq[1:] if x < first])
        greater = qsort([x for x in seq[1:] if x >= first])
        return lesser + [first] + greater

if __name__ == '__main__':
    seq = [5, 6, 78, 9, 0, -1, 2, 3, -65, 12]
    print(qsort(seq))
也可以建立2个list,一个装小于[0]的,一个装大于[0]的,之后三个合并