我們在會碰到各種各樣的面試,有的甚至是HR專門為你設(shè)置的障礙,在python面試中也是,無論你是應(yīng)聘Python web開發(fā),爬蟲工程師,或是數(shù)據(jù)分析,還是自動化運維,這些python面試基礎(chǔ)題十大陷阱也許你會遇到,今天的python培訓(xùn)總結(jié)出來給你以防萬一:
成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供永福企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計、做網(wǎng)站、HTML5建站、小程序制作等業(yè)務(wù)。10年已為永福眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進行中。
問題1:請問如何修改以下Python代碼,使得下面的代碼調(diào)用類A的show方法?
class A(object)
def show(self):
print 'derived show'
class B(A)
def show(self):
print 'derived show'
obj=B()
obj.show()
答:這道題的考點是類繼承,只要通過__class__ 方法指定類對象就可以了。補充的代碼如下:
obj._class_=A
obj.show()
問題2:請問如何修改以下Python代碼,使得代碼能夠運行?
class A(object):
def _init_ (self,a,b):
self._a = a
self._b = b
def myprint(self):
print 'a=',self._a,'b=',self._b
a1=A(10,20)
a1.myprint()
a1=(80)
答:此題考察得是方法對象,為了能讓對象實例能被直接調(diào)用,需要實現(xiàn) __call__ 方法,補充代碼如下:
class A(object):
def _init_ (self,a,b):
self._a = a
self._b = b
def myprint(self):
print 'a=',self._a,'b=',self._b
def_call_(self,num):
print'call:',num+self._a
問題3:下面這段代碼的輸出是什么?
class B(object):
def fn(self):
print"B fn"
def_init_(self):
print"B INIT"
class A(object):
def fn(self):
print"A fn"
def_new_(cls,a):
print"NEW",a
if a10:
return super(A,cls)._new_(cls)
return B()
def_init_(self,a):
print "INIT",a
a1=A(5)
a1,fn()
a2=A(20)
a2,fn()
答:
NEW 5
B INIT
B fn
NEW 20
INIT 20
A fn
此題考察的是new和init的用法,使用 __new__ 方法,可以決定返回那個對象,也就是創(chuàng)建對象之前調(diào)用的,這個常見于于設(shè)計模式的單例、工廠模式。__init__ 是創(chuàng)建對象是調(diào)用的。
問題4:下面這段代碼輸出什么?
1s=[1,2,3,4]
list1 =[i for i in ls if i2
print list1
list2 =[1*2 for i in ls if 12
print list2
dicl={x: x**2 for x in(2, 4, 6)}
print dic1
dic2={x: ' item'+ str(x**2)for x in (2, 4, 6)}
print dic2
setl ={x for x in 'hello world' if x not in 'low level'}
print set1
答:
[3,4]
[6,8]
{2:4,4:16,6:36}
{2:'item4',4:'item16’,6:'item36"}set(["h",'r','d"])
此題考察的是列表和字典的生成。
問題5:下面這段代碼輸出什么?
num= 9
def f1():
um=20
def f2():
print num
f2()
f1()
f2()
答:
9
9
此題考察全局變量和局部變量。num 不是個全局變量,所以每個函數(shù)都得到了自己的 num 拷貝,如果你想修改 num ,則必須用 global 關(guān)鍵字聲明。比如下面這樣
num=9
def f1():
global num
um=20
def f2():
print num
f2()
f1()
f2()
#prints:
#9
#20
問題6:如何使用一行代碼交換兩個變量值?
a=8
b=9
答:
(a,b)=(b,a)
問題7:如何添加代碼,使得沒有定義的方法都調(diào)用mydefault方法?
class A(object):
def_init_(self,a,b):
self.a1=a
self.b1=b
print'init'
def mydefault(self):
print'default'
a1=A(10,20)
a1.fn1()
a1.fn2()
a1.fn3()
答:
class A(object):
def_init_(self,a,b):
self.a1=a
self.b1=b
print'init'
def mydefault(self):
print'default'
def_getattr_(self,name):
return self.mydefault
a1=A(10,20)
a1.fn1()
a1.fn2()
a1.fn3()
此題的考的是Python的默認方法, 只有當(dāng)沒有定義的方法調(diào)用時,才會調(diào)用方法 __getattr__。當(dāng) fn1 方法傳入?yún)?shù)時,我們可以給 mydefault 方法增加一個 *args 不定參數(shù)來兼容。
class A(object):
def_init_(self,a,b):
self.a1=a
self.b1=b
print'init'
def mydefault(self,*args):
print'default:'+str(args[0])
def_getattr_(self,name):
print"other fn:",name
return self.mydefault
a1=A(10,20)
a1.fn1(33)
a1.fn2('hello')
a1.fn3(10)
問題8:一個包里有三個模塊,mod1.py , mod2.py , mod3.py ,但使用 from demopack import * 導(dǎo)入模塊時,如何保證只有 mod1 、 mod3 被導(dǎo)入了。
答:在包中增加 __init__.py 文件,并在文件中增加:
_all_=['mod1','mod3']
問題9:寫一個函數(shù),接收整數(shù)參數(shù) n ,返回一個函數(shù),函數(shù)返回n和參數(shù)的積。
答:
def mulby(num):
def gn(val):
return num*val
return gn
zw=mulby(7)
print(zw(9));
問題10:請問下面的代碼有什么隱患?(Python2中)
def strtest1(num):
str='first'
for i in range(num):
str+="X"
return str
答:由于變量str是個不可變對象,每次迭代,python都會生成新的str對象來存儲新的字符串,num越大,創(chuàng)建的str對象越多,內(nèi)存消耗越大。
面試python運維開發(fā)工程師每家公司對專業(yè)知識的考察側(cè)重點是不一樣的,下面給你整理了一些,希望能幫助到你!
python
1、python是強類型還是弱類型的語言
2、python的動態(tài)性體現(xiàn)在哪
3、python的namespace:四種;len()等函數(shù)的命名空間
4、range和xrange的區(qū)別,談到了迭代器
5、于是問怎么實現(xiàn)迭代器,然后又問了生成器,yield語句
6、將list的中的一萬條字符串合成一條字符串的方法
7、python多線程(g il)
8、python的三目運算符有嗎? 怎么用一行代碼實現(xiàn)三目運算
linux
1、問linux命令
2、top和ps在進程占有資源率的統(tǒng)計方式有什么不同
3、然后扯到了頁表,內(nèi)存管理,TLB
5、linux文件系統(tǒng):inode,inode存儲了哪些東西,目錄名,文件名存在哪里
給你一份千鋒python的面試題吧
1、多線程使用Python是個好主意嗎?列出一些方法可以讓一些Python代碼以并行方式運行。
答:Python不允許真正意義上的多線程。它有一個多線程包,但如果你想使用多線程來加速你的代碼,那么使用它通常不是一個好主意。Python有一個名為全局解釋器鎖(Global
Interpreter
Lock(GIL))的結(jié)構(gòu)。GIL確保每次只能執(zhí)行一個“線程”。一個線程獲取GIL,做一點工作,然后將GIL傳遞到下一個線程。這種情況發(fā)生的很快,因此對于人眼看來,你的線程似乎是并行運行的,但它們實際上只是輪流使用相同的CPU核心。所有這些GIL傳遞都增加了運行的內(nèi)存。這意味著如果你想讓代碼運行得更快,那么使用線程包通常不是一個好主意。
使用Python的線程包也是有原因的。如果你想同時運行一些東西,并且效率不是一個問題,那么它就完全沒問題了?;蛘撸绻阏谶\行需要等待某些事情的代碼(例如某些IO),那么它可能會很有意義。但是線程庫不會讓你使用額外的CPU核心。
多線程可以外包到操作系統(tǒng)(通過多處理),一些調(diào)用Python代碼的外部應(yīng)用程序(例如,Spark或Hadoop),或者Python代碼調(diào)用的一些代碼例如:你可以使用你的Python代碼調(diào)用一個C函數(shù)來完成昂貴的多線程事務(wù)。
2、這段代碼輸出了什么:
def f(x,l=[]):for i in range(x):l.append(i*i)print(l) f(2)f(3,[3,2,1])f(3)
答:[0, 1][3, 2, 1, 0, 1, 4][0, 1, 0, 1, 4]
3、如何在Python中管理內(nèi)存?
Python中的內(nèi)存管理由Python私有堆空間管理。所有Python對象和數(shù)據(jù)結(jié)構(gòu)都位于私有堆中。程序員無權(quán)訪問此私有堆。Python解釋器負責(zé)處理這個問題。Python對象的堆空間分配由Python的內(nèi)存管理器完成。核心API提供了一些程序員編寫代碼的工具Python還有一個內(nèi)置的垃圾收集器,它可以回收所有未使用的內(nèi)存,并使其可用于堆空間。
4、range&xrange有什么區(qū)別?
在大多數(shù)情況下,xrange和range在功能方面完全相同。它們都提供了一種生成整數(shù)列表的方法,唯一的區(qū)別是range返回一個Python列表對象,x range返回一個xrange對象。
這就表示xrange實際上在運行時并不是生成靜態(tài)列表。它使用稱為yielding的特殊技術(shù)根據(jù)需要創(chuàng)建值。該技術(shù)與一種稱為生成器的對象一起使用。因此如果你有一個非常巨大的列表,那么就要考慮xrange。
5、Python中help()和dir()函數(shù)的用法是什么?
Help()和dir()這兩個函數(shù)都可以從Python解釋器直接訪問,并用于查看內(nèi)置函數(shù)的合并轉(zhuǎn)儲。
help()函數(shù):help()函數(shù)用于顯示文檔字符串,還可以查看與模塊,關(guān)鍵字,屬性等相關(guān)的使用信息。
dir()函數(shù):dir()函數(shù)用于顯示定義的符號。
6、NumPy中有哪些操作Python列表的函數(shù)?
Python的列表是高效的通用容器。它們支持(相當(dāng))有效的插入,刪除,追加和連接,Python的列表推導(dǎo)使它們易于構(gòu)造和操作。
它們有一定的局限性:它們不支持像素化加法和乘法等“向量化”操作,并且它們可以包含不同類型的對象這一事實意味著Python必須存儲每個元素的類型信息,并且必須執(zhí)行類型調(diào)度代碼在對每個元素進行操作時。
NumPy不僅效率更高; 它也更方便。你可以免費獲得大量的向量和矩陣運算,這有時可以避免不必要的工作。它們也得到有效實施。
NumPy數(shù)組更快,你可以使用NumPy,F(xiàn)FT,卷積,快速搜索,基本統(tǒng)計,線性代數(shù),直方圖等內(nèi)置。
這些內(nèi)容還是比較重要的,如果有幫到你,麻煩采納謝謝
#舉個例子,冒泡排序
def?sort_list(f,?l):
print?"befor:",?l
for?i?in?range(len(l)):
for?j?in?range(i,?len(l)):
if?not?f(l[j],?l[i]):
l[i],?l[j]?=?l[j],?l[i]
print?"sorted:?",?l
#function
f??=?lambda?a,b?:?a=?b
#test
l1?=?[3,2,1,6,4]
l2?=?["a","x",?5,?"g"]
sort_list(f,?l1)
sort_list(f,?l2)
#STDOUT:
"""
befor:?[3,?2,?1,?6,?4]
sorted:??[1,?2,?3,?4,?6]
befor:?['a',?'x',?5,?'g']
sorted:??[5,?'a',?'g',?'x']
"""
一、自我介紹
之前講過很多關(guān)于如何應(yīng)對面試官提出的“自我介紹”這個問題,今天,針對Python程序員這個崗位,給大家重新梳理一下答題的結(jié)構(gòu)。我們在做自我介紹時,可以按照:個人基本信息+基本技術(shù)構(gòu)成+項目經(jīng)驗(具體項目以及在項目中的負責(zé)部分)+自我評價的結(jié)構(gòu)來回答。注意一定要緊緊圍繞招聘崗位的需求做介紹,在此之前要做好準備工作,看看招聘方具體需要什么方向的研發(fā)工程師。目前針對Python,有自動化測試平臺的設(shè)計與開發(fā)、數(shù)據(jù)的挖掘與清洗以及Python開發(fā)等具體崗位,所以面試Python方向的同學(xué)注意,可以多和運維以及自動化方面靠攏。當(dāng)然,具體還是要看公司空缺崗位與你的專業(yè)是否對口。
二、不要給自己挖坑
確保你在回答面試官的過程中,回答的每個知識點都了然于胸,不然被問住,是很難堪的。如果遇到不會的問題,一定不要盲目亂答一通。比如有一次,有位同學(xué)在回答Web安全問題時,順嘴說了SQL注入,面試官便順水推舟,讓這位同學(xué)接著講講SQL的原理及解決方法。然而這位同學(xué)卻把XSS跨站注入攻擊和SQL注入搞混了,歸根結(jié)底,還是知識掌握得不夠牢固。所以,在面試時,要斟酌每一句話,聰明的同學(xué)還可以引導(dǎo)面試官,讓他問出自己想要被問的問題。當(dāng)然,化被動為主動,就是面試中比較高的一種境界了。
三、有足夠的自信
如果你學(xué)歷不是特別高,在面試時,面試官很有可能會問你是怎樣看待學(xué)歷和能力的。學(xué)歷和能力在當(dāng)今的社會都不可或缺,學(xué)歷往往是你面試的敲門磚,但敲完門用途就不大了,后面才是證明你能力的時刻。針對這個問題,我們一定要不卑不亢地說出自己看法:“我想只要完成了大學(xué)校園內(nèi)的學(xué)業(yè),就表明已經(jīng)具備了一定的學(xué)習(xí)能力。如果我們努力學(xué)習(xí)代碼技能,并且有能力學(xué)好,那么是學(xué)士還是博士就不是很重要。競爭這個崗位的關(guān)鍵是看你能在這個領(lǐng)域上發(fā)揮什么作用,而不單單是學(xué)了多少書本上的知識?!?/p>
當(dāng)前題目:python手寫函數(shù)面試的簡單介紹
地址分享:http://weahome.cn/article/hcgpdg.html