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())
            
            
            
 
 
 
相關文章
相關標籤/搜索