python遇到的幾道面試題的簡單介紹

本文目錄一覽:

Python面試基礎題十大陷阱,你中招了嗎

我們在會碰到各種各樣的面試,有的甚至是HR專門為你設置的障礙,在python面試中也是,無論你是應聘Python web開發,爬蟲工程師,或是數據分析,還是自動化運維,這些python面試基礎題十大陷阱也許你會遇到,今天的python培訓總結出來給你以防萬一:

問題1:請問如何修改以下Python代碼,使得下面的代碼調用類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)

答:此題考察得是方法對象,為了能讓對象實例能被直接調用,需要實現 __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__ 方法,可以決定返回那個對象,也就是創建對象之前調用的,這個常見於於設計模式的單例、工廠模式。__init__ 是創建對象是調用的。

問題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 不是個全局變數,所以每個函數都得到了自己的 num 拷貝,如果你想修改 num ,則必須用 global 關鍵字聲明。比如下面這樣

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:如何添加代碼,使得沒有定義的方法都調用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的默認方法, 只有當沒有定義的方法調用時,才會調用方法 __getattr__。當 fn1 方法傳入參數時,我們可以給 mydefault 方法增加一個 *args 不定參數來兼容。

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 * 導入模塊時,如何保證只有 mod1 、 mod3 被導入了。

答:在包中增加 __init__.py 文件,並在文件中增加:

_all_=[‘mod1′,’mod3’]

問題9:寫一個函數,接收整數參數 n ,返回一個函數,函數返回n和參數的積。

答:

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越大,創建的str對象越多,內存消耗越大。

python運維開發工程師面試常見問題有哪些

面試python運維開發工程師每家公司對專業知識的考察側重點是不一樣的,下面給你整理了一些,希望能幫助到你!

python

1、python是強類型還是弱類型的語言

2、python的動態性體現在哪

3、python的namespace:四種;len()等函數的命名空間

4、range和xrange的區別,談到了迭代器

5、於是問怎麼實現迭代器,然後又問了生成器,yield語句

6、將list的中的一萬條字元串合成一條字元串的方法

7、python多線程(g il)

8、python的三目運算符有嗎? 怎麼用一行代碼實現三目運算

linux

1、問linux命令

2、top和ps在進程佔有資源率的統計方式有什麼不同

3、然後扯到了頁表,內存管理,TLB

5、linux文件系統:inode,inode存儲了哪些東西,目錄名,文件名存在哪裡

python面試必備題目有哪些

給你一份千鋒python的面試題吧

1、多線程使用Python是個好主意嗎?列出一些方法可以讓一些Python代碼以並行方式運行。

答:Python不允許真正意義上的多線程。它有一個多線程包,但如果你想使用多線程來加速你的代碼,那麼使用它通常不是一個好主意。Python有一個名為全局解釋器鎖(Global

Interpreter

Lock(GIL))的結構。GIL確保每次只能執行一個「線程」。一個線程獲取GIL,做一點工作,然後將GIL傳遞到下一個線程。這種情況發生的很快,因此對於人眼看來,你的線程似乎是並行運行的,但它們實際上只是輪流使用相同的CPU核心。所有這些GIL傳遞都增加了運行的內存。這意味著如果你想讓代碼運行得更快,那麼使用線程包通常不是一個好主意。

使用Python的線程包也是有原因的。如果你想同時運行一些東西,並且效率不是一個問題,那麼它就完全沒問題了。或者,如果你正在運行需要等待某些事情的代碼(例如某些IO),那麼它可能會很有意義。但是線程庫不會讓你使用額外的CPU核心。

多線程可以外包到操作系統(通過多處理),一些調用Python代碼的外部應用程序(例如,Spark或Hadoop),或者Python代碼調用的一些代碼例如:你可以使用你的Python代碼調用一個C函數來完成昂貴的多線程事務。

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中管理內存?

Python中的內存管理由Python私有堆空間管理。所有Python對象和數據結構都位於私有堆中。程序員無權訪問此私有堆。Python解釋器負責處理這個問題。Python對象的堆空間分配由Python的內存管理器完成。核心API提供了一些程序員編寫代碼的工具Python還有一個內置的垃圾收集器,它可以回收所有未使用的內存,並使其可用於堆空間。

4、range&xrange有什麼區別?

在大多數情況下,xrange和range在功能方面完全相同。它們都提供了一種生成整數列表的方法,唯一的區別是range返回一個Python列表對象,x range返回一個xrange對象。

這就表示xrange實際上在運行時並不是生成靜態列表。它使用稱為yielding的特殊技術根據需要創建值。該技術與一種稱為生成器的對象一起使用。因此如果你有一個非常巨大的列表,那麼就要考慮xrange。

5、Python中help()和dir()函數的用法是什麼?

Help()和dir()這兩個函數都可以從Python解釋器直接訪問,並用於查看內置函數的合併轉儲。

help()函數:help()函數用於顯示文檔字元串,還可以查看與模塊,關鍵字,屬性等相關的使用信息。

dir()函數:dir()函數用於顯示定義的符號。

6、NumPy中有哪些操作Python列表的函數?

Python的列表是高效的通用容器。它們支持(相當)有效的插入,刪除,追加和連接,Python的列表推導使它們易於構造和操作。

它們有一定的局限性:它們不支持像素化加法和乘法等「向量化」操作,並且它們可以包含不同類型的對象這一事實意味著Python必須存儲每個元素的類型信息,並且必須執行類型調度代碼在對每個元素進行操作時。

NumPy不僅效率更高; 它也更方便。你可以免費獲得大量的向量和矩陣運算,這有時可以避免不必要的工作。它們也得到有效實施。

NumPy數組更快,你可以使用NumPy,FFT,卷積,快速搜索,基本統計,線性代數,直方圖等內置。

這些內容還是比較重要的,如果有幫到你,麻煩採納謝謝

Python後端工程師面試題目有哪些

一.語言

1.推薦一本看過最好的python書籍?

2.談談python的裝飾器,迭代器,yield?

3.標準庫線程安全的隊列是哪一個?不安全的是哪一個?logging是線程安全的嗎?

4.python適合的場景有哪些?當遇到計算密集型任務怎麼辦?

5.python高並發解決方案?我希望聽到twisted-tornado-gevent,能扯到golang,erlang更好

二.操作系統

可以直接認為是linux,畢竟搞後端的多數是和linux打交道。

1.tcp/udp的區別?tcp粘包是怎麼回事,如何處理?udp有粘包嗎?

2.time_wait是什麼情況?出現過多的close_wait可能是什麼原因?

3.epoll,select的區別?邊緣觸發,水平觸發區別?

三.存儲

存儲可能包含rdbms,nosql以及緩存等,我以mysql,redis舉例

mysql相關

1.談談mysql字符集和排序規則?

2.varchar與char的區別是什麼?大小限制?utf8字符集下varchar最多能存多少個字元

3.primary key和unique的區別?

4.外鍵有什麼用,是否該用外鍵?外鍵一定需要索引嗎?

5.myisam與innodb的區別?innodb的兩階段鎖定協議是什麼情況?

6.索引有什麼用,大致原理是什麼?設計索引有什麼注意點?

redis相關

1.什麼場景用redis,為什麼mysql不適合?

2.談談redis的事務?用事務模擬原子+1操作?原子操作還有其它解決方案嗎?

3.redis內存滿了會怎麼樣?

四.安全

web安全相關

1.sql注入是怎麼產生的,如何防止?

2.xss如何預防?htmlescape後能否避免xss?

3.csrf是什麼?django是如何防範的?

密碼技術

1.什麼是分組加密?加密模式有哪些?ecb和cbc模式有什麼區別?為什麼需要iv向量?

2.簡單說說https的過程?

3.對稱加密與非對稱加密區別?

3.如何生成共享秘鑰? 如何防範中間人攻擊?

五.雜

是否關注新技術啊?golang,rust是否了解?numpy,pandas是啥鳥?

是否緊跟時代潮流?逛不逛微博,刷不刷知乎?

可能你覺得我問的好細,但這好多都是平常經常遇到,並需要解決的,細節更能體現一個人。

如果你覺得小kiss,歡迎投簡歷給我yihaibo@longtugame.com,龍圖遊戲運營支持中心數據分析部招人;覺得有點問題,那還等什麼,趕快來和我交流交流。

更新:討論區挺熱鬧,有人說好簡單,有人說好難,其實我覺得這隻適合面試2~3年工作經驗的後端工程師。真的沒有問

很難的題目,只是可能你平時沒有注意。

在這裡我推薦幾本書吧

python參考手冊,絕對讓你更上一層樓

圖解密碼技術,密碼入門不二之選

mysql技術內幕第五版,有點厚當手冊讀讀,要有耐心,高性能mysql也強烈建議讀讀

effective tcp/ip programming

為什麼評論區有這麼大差異?我想是個人經歷不一樣吧,如果是搞web的對操作系統這塊和密碼技術會偏弱,但如果是系統工程師或是遊戲服務端這塊會明顯偏強。

六.後記

最近我也面試了不少童鞋,我發現能達到要求的真的少之又少,很多hr都說Python是最難招聘的崗位,我想是有道理的,這真的很值得我們去深思?

我想有一部分原因是Python這門語言造成的,會寫Python的人很多,但寫的好的人很少,大部分都把Python當做腳本來寫,缺乏面向對 象,模式的思想。想想Java,大家都習慣了介面,實現分離,設計模式在Java中也喊了很多年,尤其是ssh三大框架一出,用著用著就理所當然的認為就 該這麼做,雖然也有點壞處,但對企業級Java開發無疑是一大進步。

反觀Python,尤其是生成器,協程,元類給Python注入了很大的靈活性,想寫的Pythonic有不小難度,但其實Python高級特性就那麼幾個,幹掉了也就沒有了。

當你覺得Python遇到了瓶頸,不妨停下來好好想想。研究研究設計模式,想想重構,了解領域驅動設計,敏捷開發,再回來讀讀以前寫的代碼,當眼界變高了,代碼也就美了。

當然思想的提高不是一朝一夕,模式,原則會經常讓你糾結,糾結就會思索,思考就走出了自己的路,當然條條大路通羅馬。

資料庫等存儲技術是研發工程師邁不過的坎,對關係資料庫以mysql舉例來說,你必須清楚的知道什麼欄位選擇什麼類型,類型位元組大小,限制條件,這 東西也很容易理解,多想想即可,比如set類型,要支持交並等操作,1個位元組只能存8個類別。數據類型搞定了,下面就是索引了,mysql索引種類?主 鍵,唯一索引,普通索引。索引類別,BTree索引,hash索引。索引的優缺點,mysql的索引查找原理,join原理(大部分都是nested loop),以及一些特殊的情況,比如mysql子查詢慢等。其實到這裡研發工程師就差不多,當然你可以繼續深入下去,比如讀寫分離,集群管理,甚至一些 參數調優。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/230564.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-10 18:18
下一篇 2024-12-10 18:18

相關推薦

  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29

發表回復

登錄後才能評論