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())