1、面向對象的概念?
- 面向對象編程,簡稱OOP,是一種程序設計思想
- 主要包括:類、繼承、多態(子類方法覆蓋父類方法)、實例、屬性、方法
2、什么是進程、線程、協程?
- 進程:獨立數據空間,進程間不共享數據,系統調度
- 線程:執行程序的最小單元,進程內線程間共享資源,系統調度
- 協程:程序員調度,分解一個線程成為多個“微線程”(https://www.liaoxuefeng.com/wiki/1016959663602400/1017968846697824)
3、如何使用python實現socket編程?
- Socket(套接字),應用程序通過套接字向網絡發出請求和應答請求,使主機間或者一台計算機上的進程間可以通訊
#服務端
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:server.py
import socket # 導入 socket 模塊
s = socket.socket() # 創建 socket 對象
host = socket.gethostname() # 獲取本地主機名
port = 12345 # 設置端口
s.bind((host, port)) # 綁定端口
s.listen(5) # 等待客戶端連接
while True:
c.addr = s.accept() # 建立客戶端連接
print '連接地址:', addr
c.send('歡迎訪問菜鳥教程!')
c.close() # 關閉連接
#客戶端
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:client.py
import socket # 導入 socket 模塊
s = socket.socket() # 創建 socket 對象
host = socket.gethostname() # 獲取本地主機名
port = 12345 # 設置端口號
s.connect((host, port))
print s.recv(1024)
s.close()
4、什么是lambda函數?
- 匿名函數,即沒有函數名的函數
- 減少單行函數或者很少使用的函數的定義
#普通函數
def g(x):
return x+1
#匿名函數
g = lambda x:x+1
5、tuple和list什么區別?
- tuple:元組,list:列表
- tuple的元素不可改(元組內的元素不可改,整個元組可修改)
- list的元素可修改
#元組
tuple_a = (1, 2, 3, 4, 5)
#列表
list_a = [1, 2, 3, 4, 5]
6、range函數的用法?
- 返回一系列連續增加的整數
- 工作方式類似於分片(提取部分數據str[start:stop])
- 可以生成一個列表對象
range(start, stop[, step])
start: 計數從 start 開始。默認是從 0 開始。例如range(5)等價於range(0, 5);
stop: 計數到 stop 結束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]沒有5
step:步長,默認為1。例如:range(0, 5) 等價於 range(0, 5, 1)
7、字符串的拆分方法有哪些?
- string對象的split方法,不允許有多個分隔符
- 函數re.split(),允許為分隔符指定多個正則表達式
>>> import re
>>> line = "aaa bbb ccc;ddd eee,fff"
>>> line
'aaa bbb ccc;ddd eee,fff'
#冒號分割
>>> re.split(r';', line)
['aaa bbb ccc', 'ddd eee,fff']
#冒號、逗號分割
>>> re.split(r'[;,]', line)
['aaa bbb ccc', 'ddd eee', 'fff']
#冒號、逗號、空格分割
>>> re.split(r'[;,\s]', line)
['aaa', 'bbb', 'ccc', 'ddd', '', '', 'eee', 'fff']
#結果包含分隔符
>>> re.split(r'([;])', line)
['aaa bbb ccc', ';', 'ddd eee,fff']
#結果不含分隔符
>>> re.split(r'(?:[;])', line)
['aaa bbb ccc', 'ddd eee,fff']
8、單引號、雙引號、三引號的區別是什么?
- 單引號和雙引號沒有區別,都可用來表示字符串(根據字符串是否包含單雙引號選擇使用)
- 三引號,字符串內可以直接換行
#單引號內使用單引號需要轉義符號
str3 = 'I\'m a big fan of Python.’
str4 = 'We all know that \'A\' and \'B\' are two capital letters.’
#雙引號內使用單引號不需要轉義符號
str4_ = "We all know that 'A' and 'B' are two capital letters.”
#單引號內使用雙引號不需要轉義符號
str5 = 'The teacher said: "Practice makes perfect" is a very famous proverb.'
9、*args和**kwargs什么作用?
- *args,可變的參數列表
- **kwargs,鍵值對參數列表
- *args和**kwargs都可以用來傳不定量參數
10、pass語句的作用?
- 占位符,實現一個空函數,用於保持程序結構的完整性
11、re模塊中match和search方法的不同?
- match:在字符串的起始位置匹配,匹配失敗,返回none
- search:掃描整個字符串並返回第一個成功的匹配
#函數語法
re.match(pattern, string, flags=0)
re.search(pattern, string, flags=0)
#實例
#!/usr/bin/python
import re
line = "Cats are smarter than dogs";
matchObj = re.match( r'dogs', line, re.M|re.I)
if matchObj:
print "match --> matchObj.group() : ", matchObj.group()
else:
print "No match!!"
matchObj = re.search( r'dogs', line, re.M|re.I)
if matchObj:
print "search --> matchObj.group() : ", matchObj.group()
else:
print "No match!!"
#實例的運行結果
No match!!
search --> matchObj.group() : dogs
12、解釋一下WSGI和FastCGI的關系?
- CGI:通用網關接口(Common Gateway Interface),它是一段程序,運行在服務器上如:HTTP 服務器,提供同客戶端 HTML 頁面的接口
- HTTP服務器與機器上的程序進行交互的一種工具
- 程序須運行在網絡服務器上,和語言無關
- WSGI: Web Server Gateway Interface,描述web server如何與web application通信的規范
服務器接受請求-》轉給應用-》應用處理請求-》應用返回結果給服務器-》服務器返回結果給客戶端
WSGI server負責從客戶端接收請求,將request轉發給application,將application返回的response返回給客戶端;
WSGI application接收由server轉發的request,處理請求,並將處理結果返回給server。application中可以包括多個棧式的中間件(middlewares),這些中間件需要同時實現server與application,因此可以在WSGI服務器與WSGI應用之間起調節作用:對服務器來說,中間件扮演應用程序,對應用程序來說,中間件扮演服務器。 - FastCGI像是一個常駐(long-live)型的CGI,可以一直執行着(https://www.zhihu.com/question/30672017)
13、python如何操作文件?
- 打開文件
- 寫入/讀取數據
- 關閉文件
14、python的內存管理機制?(https://testerhome.com/topics/16556)
- 引用計數:在python中,每個對象都有指向該對象的引用總數
- 分代回收:將內存分為3代,0代1代2代,數字越大存活時間越久
- 垃圾回收:當python中的對象越來越多,占據越來越大的內存,啟動垃圾回收(Gabage Collection),將沒用的對象刪除
- 內存池機制:管理小塊內存的申請和釋放
15、dict的items和iteritems的區別?
- items,以列表方式返回,返回時沒有特殊順序
- iteritems,返回方式類似,返回的是一個迭代器對象
歡迎關注微信公眾號"測試開發Stack"
