更新時(shí)間:2017年11月30日16時(shí)31分 來源:傳智播客 瀏覽次數(shù):
在面試中,有一定比例是字符串處理以及網(wǎng)絡(luò)編程那塊,當(dāng)然了肯定還有些其他的問題,下面幫大家找了6道題目,接下來小試牛刀吧! 很簡單的哦。。
第1題:
Q:是否遇到過python的模塊間循環(huán)引用的問題,如何避免它?
A: 這是代碼結(jié)構(gòu)設(shè)計(jì)的問題,模塊依賴和類依賴
如果老是覺得碰到循環(huán)引用可能的原因有幾點(diǎn):
1.可能是模塊的分界線劃錯(cuò)地方了
2.可能是把應(yīng)該在一起的東西硬拆開了
3.可能是某些職責(zé)放錯(cuò)地方了
4.可能是應(yīng)該抽象的東西沒抽象
總之微觀代碼規(guī)范可能并不能幫到太多,重要的是更宏觀的劃分模塊的經(jīng)驗(yàn)技巧,推薦uml,腦圖,白板等等圖形化的工具先梳理清楚整個(gè)系統(tǒng)的總體結(jié)構(gòu)和職責(zé)分工
采取辦法,從設(shè)計(jì)模式上來規(guī)避這個(gè)問題,比如:
1. 使用 “__all__” 白名單開放接口
2. 盡量避免 import
第2題:
Q: Python中如何定義一個(gè)函數(shù)
A:
有2種方法:
第1種:
def func(arg, *args, **kwagrs): #普通函數(shù)
func_body
return
第2種:
lambda x: x **2 #匿名函數(shù)
第3題:
Q: 請寫出一段Python代碼實(shí)現(xiàn)刪除一個(gè)list里面的重復(fù)元素
A:
>>> L1 = [4,1,3,2,3,5,1]
>>> L2 = []
>>> [L2.append(i) for i in L1 if i not in L2]
>>> print L2
[4, 1, 3, 2, 5]
運(yùn)行結(jié)果如下圖:
第4題:
Q: Python是如何進(jìn)行內(nèi)存管理的
A: python內(nèi)部使用引用計(jì)數(shù),來保持追蹤內(nèi)存中的對象,Python內(nèi)部記錄了對象有多少個(gè)引用,即引用計(jì)數(shù),當(dāng)對象被創(chuàng)建時(shí)就創(chuàng)建了一個(gè)引用計(jì)數(shù),當(dāng)對象不再需要時(shí),這個(gè)對象的引用計(jì)數(shù)為0時(shí),它被垃圾回收。所有這些都是自動完成,不需要像C一樣,人工干預(yù),從而提高了程序員的效率和程序的健壯性。
第5題:
Q: 寫一個(gè)簡單的Python socket編程
A: socket是用來進(jìn)行網(wǎng)絡(luò)編程用的接口,網(wǎng)絡(luò)編程分為服務(wù)器端和客戶端
服務(wù)器端代碼如下:
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('localhost', 8001))
sock.listen(5)
while True:
conn, addr = sock.accept()
try:
conn.settimeout(5)
buff = conn.recv(1024)
if buff == '1':
conn.send('Hello, Client...')
else:
conn.send('Please, Go Out...')
except socket.timeout:
print 'Socket Time Out...'
finally:
conn.close()
客戶端代碼如下:
import socket
import time
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('localhost', 8001))
time.sleep(2)
sock.send('1')
print sock.recv(1024)
sock.close()
第6題:
Q:src = "security/afafsff/?ip=123.4.56.78&id=45",請寫一段代碼用正則匹配出IP
A:
import re
src = "security/afafsff/?ip=123.4.56.78&id=45"
m = re.search('ip=(\d{1,3}\.\d{1,3}\.\d{1,3}.\d{1,3})', src, re.S) # re.S 改變'.'的行為
print m.group(1)
# 輸出結(jié)果
>>>
123.4.56.78
運(yùn)行結(jié)果如下:
北京校區(qū)