python笔试题(-)
1.如何查看占用8080端口的是什么进程? netstat –apn | grep 8080 2.DNS解析过程是怎样的?有几种解析方式,各自的区别是什么? 1) 浏览器缓存 当用户通过浏览器访问某域名时,浏览器首先会在自己的缓存中查找是否有该域名对应的IP地址(若曾经访问过该域名且没有清空缓存便存在); 2) 系统缓存 当浏览器缓存中无域名对应IP则会自动检查用户计算机系统Hosts文件DNS缓存是否有该域名对应IP; 3) 路由器缓存 当浏览器及系统缓存中均无域名对应IP则进入路由器缓存中检查,以上三步均为客服端的DNS缓存; 4) ISP(互联网服务提供商)DNS缓存 当在用户客服端查找不到域名对应IP地址,则将进入ISP DNS缓存中进行查询。比如你用的是电信的网络,则会进入电信的DNS缓存服务器中进行查找; 5) 根域名服务器 当以上均未完成,则进入根服务器进行查询。全球仅有13台根域名服务器,1个主根域名服务器,其余12为辅根域名服务器。 根域名收到请求后会查看区域文件记录,若无则将其管辖范围内顶级域名(如.com)服务器IP告诉本地DNS服务器; 6) 顶级域名服务器 顶级域名服务器收到请求后查看区域文件记录,若无则将其管辖范围内主域名服务器的IP地址告诉本地DNS服务器; 7) 主域名服务器 主域名服务器接受到请求后查询自己的缓存,如果没有则进入下一级域名服务器进行查找,并重复该步骤直至找到正确纪录; 8)保存结果至缓存 本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时将该结果反馈给客户端,客户端通过这个IP地址与web服务器建立链接。 1.递归查询: 一般客户机和服务器之间属递归查询,即当客户机向DNS服务器发出请求后,若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到结果后转交给客户机; 2.迭代查询(反复查询): 一般DNS服务器之间属迭代查询,如:若DNS2不能响应DNS1的请求,则它会将DNS3的IP给DNS2,以便其再向DNS3发出请求; 3./temp 独立挂载在一个分区上,现发现其磁盘空间满了,小文件过多。现在请用命令删除所有文件? umount /temp fidsk /temp -m -d 1 -w 4.TCP建立连接三次握手,断开连接四次握手的过程是怎样的? 三次握手: (1)主机A向主机B发送TCP连接请求数据包,其中包含主机A的初始序列号seq(A)=x。 (其中报文中同步标志位SYN=1,ACK=0,表示这是一个TCP连接请求数据报文:序号seq=x,表明传输数据时的第一个数据字节的序号是x); (2)主机B收到请求后,会发回连接确认数据包。 (其中确认报文段中,标识位SYN=1,ACK=1,表示这是一个TCP连接响应数据报文,并含主机B的初始序列号seq(B)=y,以及主机B对主机A初始序列号的确认号ack(B)=seq(A)+1=x+1) (3)第三次,主机A收到主机B的确认报文后,还需作出确认,即发送一个序列号seq(A)=x+1;确认号为ack(A)=y+1的报文; 四次握手: 假设主机A为客户端,主机B为服务器,其释放TCP连接的过程如下: (1)关闭客户端到服务器的连接:首先客户端A发送一个FIN,用来关闭客户到服务器的数据传送,然后等待服务器的确认.其中终止标志位FIN=1,序列号seq=u (2)服务器收到这个FIN,它发回一个ACK,确认号ack为收到的序号加1。 (3)关闭服务器到客户端的连接:也是发送一个FIN给客户端。 (4)客户段收到FIN后,并发回一个ACK报文确认,并将确认序号seq设置为收到序号加1. 首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。 5.写一个脚本,处理以下文本内容,将域名取出,并进行计数排序 http://www.immomo.com/index.html http://club.immomo.com/small_552.htm http://news.immomo.com/dzjk/nrsj/ http://www.immomo.com/il_sii_3803.htm http://www.immomo.com/test.php http://club.immomo.com/big_303.htm 得出如下结果: www.immomo.com club.immomo.com news.immomo.com 使用bash/perl/python/ruby/php的任意一种语言 import re with open('a.txt','r') as f: file_all=f.read() result=re.findall(r'http://(.*com?)',file_all) for i in set(result): print(i) 6.Linux command:free,如下: $free -m total used free shared buffers cached Mem: 3832 1188 2644 0 257 666 -/+buffers/cache:264 3568 Swap: 7999 0 7999 请问swap,total,free,shared,buffers,cached各是什么意思? swap:表示硬盘上交换分区的使用情况 total:表示系统可使用的物理内存的总量为3832 free:表示为分配的物理内存为232 shared:多个进程共享的内存总数 buffers:已经被系统分配而未使用的buffer内存257 cached:已经被分配而未使用的cache内存为666 7.什么是python中的装饰器,怎么使用? 装饰器本质上是一个python函数或者类,它可以让其他函数或者类在不需要做任何代码修改的前提下, 增加额外功能,装饰器的返回值也是一个函数/类对象 使用:@+装饰器函数 写在被装饰函数的上面 def log(level): def dec(func): def wrapper(*args,**kwargs): print "before func was called" func(*args,**kwargs) print "after func was called" return wrapper return dec @log(2) def funcLog(): print "funcLog was called" funcLog() ==> before func was called funcLog was called after func was called 8.分别举例说明Python中list/dict/set comprehensions. list:[x**2 for x in range(10)] dict: strings=['workhard','is','important'] D={key: val for val,key in enumerate(strings)} set:{x**2 for x in [1, 1, 2]} 9.在Python中怎么有效读取一个20GB大小的文件? 文件名:a.text with open('a.text','r',encoding='utf-8') as f: for line in f: do_something(line) 10.使用Python实现一个stack。 class Stack(object): def __init__(self): self.items=[] def is_empty(self): return self.items == [] def peek(self): return self.items[len(self.items)-1] def size(self): return len(self.items) def push(self,items): self.items.append(item) def pop(self,item): return self.items.pop() if __name__==__main__: my_stack=Stack() my_stack.push('a') my_stack.push('b') print(my_stack.size()) print(my_stack.peek()) print(my_stack.pop()) print(my_stack.peek()) print(my_stack.size()) print(my_stack.pop()) print(my_stack.size())