1. 程式人生 > >python筆試題(-)

python筆試題(-)

一個 style cal dns解析 檢查 som 主域名 result syn

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(rhttp://(.*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())

python筆試題(-)