測開面試 | Python語言常見問題


1、面向對象的概念?

  • 面向對象編程,簡稱OOP,是一種程序設計思想
  • 主要包括:類、繼承、多態(子類方法覆蓋父類方法)、實例、屬性、方法

2、什么是進程、線程、協程?

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"


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM