當前位置:首頁 » 編程語言 » python工程師面試題

python工程師面試題

發布時間: 2023-03-04 18:47:45

1. 面試經驗丨百度 測試開發工程師 面試題集(含面試題答案),來瞧瞧

IT互聯網的飛速發展,很多人選擇從計算機方面開發著手,在整個計算機行業的,不同崗位所需要具備的能力是不同的。這次分享的是我一個朋友網路面試測開的面試題。

面試時間:21年4月。

1.項目介紹(難點,解決方案)
2.介紹黑盒測試和白盒測試
3.java中的int和Integer
4.Java的許可權修飾符(public、private、default、protect的作用域)
5.代碼:判斷鏈表是否有環,找出環的長度
6.代碼:手寫字元串比較函數strcmp,設計測試用例
7.一部電梯設計測試用例(一般設計測試用例從功能性、性能性、安全性、易用性考慮)
8.2個資料庫表:表1(id name),表2(id sroce class),找出姓名張三的分數和班級
select sroce,class from table2 where table2.id = (select id from table1 where name = "張三")
9.Liunx查看指定進程 ps -ef|grep 進程名 查看埠 lsof -i:埠號
10.計網TCP/UDP的區別(有4個區別,但是突然有點腦子短路了,只記起來2個)

11.HTTP狀態碼

1.linux基本操作

2.http請求

3.三次握手四次揮手

4.網頁登錄,寫測試用例

5.網路地圖,寫測試用例

6.python init

7.python深拷貝淺拷貝

1.棧和堆的區別

2.多態的意義,用在什麼地方

3.內存泄漏和內存溢出有沒有什麼聯系

4.死鎖

5.new、delete、malloc、free區別

6.冒泡

7.出現次數最多的數

8.shell命令

1.Python常用內置模塊

2.List與numpy的區別(項目里用了numpy)

3.With機制及如何實現

4.Range的方法

5.迭代器的了解

6.c++和python的並發編程了解多少

7.Linux常用命令

8.網路層作用是什麼
9.Tcp/udp的區別及應用場景
10.什麼時候創建索引

11.索引的類別

12.索引的數據結構及具體實現介紹

13.不同資料庫的比較,即對不同場景怎樣選用資料庫

14.在字元串中尋找長度最長的迴文字元串,可假設isPalindrome返回是否是迴文的判斷

1.快速排序

2.測試快速排序

3.移動通信是什麼

4.osi七層模型。

5.應用層用什麼協議傳輸視頻和傳輸文字的

6.應用層怎麼區分不同應用進程

7.TCP、UDP協議的區別

8.在Web上搜索東西的過程經歷了什麼,詳細說說

9.微信聊天界面的測試用例

10.Linux常用命令

11.說一說項目以及項目統籌

12.覺得測試是做什麼

13.你覺得項目的流程是怎麼樣

14.項目上線前是交由產品還是測試人員測試

15.你覺得測試在項目里是怎樣的角色。

我根據這次面試整理了下資料,資料實在太多了,所以只把部分截圖放出來。提醒大家一下,資料按需索取,千萬不要一味的收藏,反正你都看不完的。把時間浪費在找資料上不值得。

如何獲取免費架構學習資料?

關注我+轉發文章+私信【測試】獲取這份全面的資料。

2. python面試題總結1-內存管理機制

(1).引用計數
(2). 垃圾回收
(3). 內存池機制

在python中每創建一個對象,對應的會有一個引用計數,當發生賦值操作如a=b,對應的b的引用計數會自動加1,當引用的對象被清除或者函數結束時,引用計數會自動減1。

在python中使用引用計數,標記清楚,分代回收三種方式進行垃圾回收。
其中,引用計數當對象的引用計數歸0時,對象會自動被清除。標記清除機制是首先遍歷所有對象,如果對象可達,就說明有變數引用它,則標記其為可達的。如果不可達,則對其進行清除。分代回收是當對象創建時被標記為第0代,經過一次垃圾回收之後,餘下的對象被標記為第1代,最高為第2代。其原理是,對象的生存期越長,月可能不是垃越。

ython語言雖然提供了對內存的垃圾收集機制,但實際上它將不用的內存放到內存池而不是返回給操作系統,所以就有了以下:

1 Pymalloc機制;這個主要是為了加速Python的執行效率,Python引入了一個內存池機制,用於管理,為了對小塊內存的申請和釋放。

2 Python中所有小於256個位元組的對象都是依靠pymalloc分配器來實現的,而稍大的對象用的則是系統的malloc。

3 對於Python對象,比如整數、浮點數和List這些,都有自己獨立的內存池,對象間並不共享他們的內存池。換句話說就是,假設你分配並且釋放了大量的整數,那麼用於緩存這些整數的內存就不能再分配給浮點數。

3. Python 面試高頻問題:cls到底是什麼

上一篇文章介紹了什麼是python 中的self,詳情請參考:

Python面試高頻問題:self到底是什麼

簡單的說self是類(Class)實例化的對象。

面試中還有一個問題經常被提及,那就是——什麼是cls呢?

cls 是類(或子類)本身,取決於調用的是哪個類。

看下面的實例

輸出:

我們也可以通過實例的方法調用class method,例如:

同樣輸出

輸出:

使用cls 作為方法參數時,通常該方法需要由@classmethod 修飾,@classmethod修飾的方法表示的是類方法。這里需要注意cls就是一個標識,你可以把他寫成abc,bcd都是可以的,只是出於習慣寫成了cls。

既然cls是一個類,那麼我們就可以使用他來進行實例化,具體代碼如下:

輸出:

可以看到通過obj1=cls()和obj2=cls(),成功創建了兩個實例,分別是0x000000690A1E0C08和0x000000690A1E0C48,而這兩個實例的類型都是MyClass3'

另外cls 還可以在python類中的方法 __new__里實現,通常定義為:

最後我們可以簡單地總結一下self 和 cls:簡單的說self是類(Class)實例化的對象。

cls 是類(或子類)本身。我們也可以方便地理解self表示實例的,cls則表示類的!

4. Python編程面試常見問題有哪些

Python編程面試題目一:python下多線程的限制以及多進程中傳遞參數的方式,以及區別


(1)python下多線程的限制以及多進程中傳遞參數的方式


python多線程有個全局解釋器鎖(global interpreter lock),這個鎖的意思是任一時間只能有一個線程使用解釋器,跟單cpu跑多個程序一個意思,大家都是輪著用的,這叫“並發”,不是“並行”。


多進程間共享數據,可以使用 multiprocessing.Value 和 multiprocessing.Array


(2)python多線程與多進程的區別


在UNIX平台上,當某個進程終結之後,該進程需要被其父進程調用wait,否則進程成為僵屍進程(Zombie)。所以,有必要對每個Process對象調用join()方法 (實際上等同於wait)。對於多線程來說,由於只有一個進程,所以不存在此必要性。


多進程應該避免共享資源。在多線程中,我們可以比較容易地共享資源,比如使用全局變數或者傳遞參數。在多進程情況下,由於每個進程有自己獨立的內存空間,以上方法並不合適。此時我們可以通過共享內存和Manager的方法來共享資源。但這樣做提高了程序的復雜度,並因為同步的需要而降低了程序的效率。



Python編程面試題目二:lambada函數


lambda 函數是一個可以接收任意多個參數(包括可選參數)並且返回單個表達式值的函數。 lambda 函數不能包含命令,它們所包含的表達式不能超過一個。不要試圖向lambda 函數中塞入太多的東西;如果你需要更復雜的東西,應該定義一個普通函數,然後想讓它多長就多長。


更多關於Python編程的技巧,干貨,資訊等內容,小編會持續更新。

5. 面試題:你為什麼選擇python

為什麼Python比MATLAB、R語言好呢?
其實,這三種語言都很多數據分析師在用,但更推薦python,主要是有以下幾點:
1、python易學、易讀、易維護,處理速度也比R語言要快,無需把資料庫切割;
2、python勢頭猛,眾多大公司需要,市場前景廣闊;而MATLAB語言比較局限,專注於工程和科學計算方面,而且MATLAB價格貴,免費版或盜版都只能玩玩學慣用;
3、python具有豐富的擴展庫,這個是其他兩個不能比的;
python版本選擇
初學者版本選擇是很多人都會問的,我們也不會偏向某個版本,主要根據自己的所需,但建議是選擇最新版本Python3.x,這樣很多新功能和舊功能都會有的,但是目前很多第三方庫仍然不支持Python3,因為Python2.x已經停止繼續開發,不意味著不能使用。

6. python面試必備題目有哪些

Q:你做一個自我介紹吧?
旁白:其實遇到好幾家面試官都讓我做自我介紹了,該如何自我介紹陽哥估計都會背了,好玩(惡心)的是在萬達信息面試,面試了3個技術官,每個人都分別讓我做了自我介紹,尼瑪,他們3個就不會溝通一下要問我啥嗎,一個問題至於問我3遍嗎~:funk:陽哥是敢怒不敢言,畢竟在人家的地盤。
PS:自我介紹的內容就不說了,每個人都是獨特的,我就跟大家說一下應該如何自我介紹吧。
一個優良的自我介紹會給面試官留下深刻的印象,大部分情況下,所謂的面試好壞其實看的就是你給面試官留下的印象怎麼樣了,我們用俗語叫感覺。
自我介紹應該分以下幾個部分,按照一定的邏輯連貫起來。如果連貫不起來,或者不夠熟練一定在台下多背幾遍,多講幾遍,但是面試的時候不要說的跟背過似的,高境界就是讓面試官感覺你是臨場發揮的,卻又比背的都好。
1)個人基本信息(姓名、年齡、老家、居住地等)
2)自己來自哪裡(工作地點),是干什麼的(給自己一個清晰的定位,比如:我是一名Android開發工程師),擔任過什麼職務、做過什麼樣的項目
3)自己為何來貴公司面試
4)最後祝願(希望能得到貴公司的認可等等,不用太多,一兩句話就ok)
Q:介紹一下你做過的項目吧?
PS:黑馬那麼多項目,隨便准備3個就ok了。
介紹項目大概的思路如下:
1)這個項目是干什麼的(比如是一個類似網易新聞的地方新聞客戶端,或者類似美團的o2o,或者類似豌豆莢的一個應用市場,或者類似淘寶的購物平台)?解釋就是拿一個市場上耳熟能詳的應用跟自己的應用做類比,省的面試官聽的雲里霧里的。
2)自己負責了哪些模塊(功能)的職責(比如負責系統的架構,核心代碼的編寫,xx功能模塊的開發等等)
3)自己在這個項目中擔當的責任(比如,這個項目是自己獨立開發的,這個項目是和另外一個同事一起架構一起開發的,這個項目是自己負責了幾個核心模塊)
4)項目中都用到了哪些技術
5)從項目中學到了哪些東西(可以從技術方向和業務兩個方向入手)
旁白:面試官問的很多技術性問題跟之前問的都大同小異,因此這里只給出有特色且技術含量高的。陽哥正在寫面試寶典,該寶典核心內容針對的還是技術問題,陽哥會從javase基礎到javase高級,從Android基礎到Android高級以及到Android項目依次展開分析,其次也會寫一些常見的非技術性問題,敬請期待~
Q:①在Listview的優化中,我們為何使用ConvertView?②為何使用ViewHolder?③你認為哪個更能解決問題?④你認為view.inflate和view.findviewById哪個更耗時,為什麼?⑤如果這兩個AP讓你重新寫,你怎麼寫?
PS:上面的問題,陽哥認為是面試以來遇到很難的一個,也是很有技術含量的一道題。前一半問題還好回答,最後一個問題真的需要發揮想像了。
A:①使用ConvertView可以實現對view的復用,這樣大大節約了每次創建對象的時間,提升了ListView的顯示效率。②使用ViewHolder作為內部類,可以將view的子控制項封裝在ViewHolder類中,然後通過View.setTag(ViewHolder)將view和ViewHolder進行綁定,這樣我們就不用每次都調用view的findViewById(id)方法來查找控制項。③使用ConvertView解決了一大部分問題,使用ViewHolder實現了控制項換時間的問題,因為給View對象設置一個Tag本身就是佔用內存的,因此ViewHolder的使用還是需要區分不同的應用場景的, 沒有絕對的好與不好。如果內存足夠需要高效則ViewHolder建議使用,否則不建議使用。④當然是view.inflate耗時,這個函數完成的功能是把xml布局文件通過pullParser的形式給解析到內存中,需要io,需要遞歸子節點。⑤我其實還不太相信我寫出來的代碼比Google官方寫的好,如果讓我寫的話我可能會這樣考慮,當用戶在使用view.inflate的時候將多個id作為數組添加到形參中,這樣在初始化view的使用我就可以給這個view直接調用setTag方法綁定需要的子控制項。不過這個原生方法其實也應該保留共不同的需求使用。
PS:技術面試時間並不長,我回答了幾個之後,他們兩個大眼瞪小眼,A看看B問:你還有什麼問的嗎?B說我沒有,你還有嗎?A說我也沒了。那行,接下來,他們就讓我等人事了。

7. 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 a>10:
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 i>2
print list1
list2 =[1*2 for i in ls if 1>2
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對象越多,內存消耗越大。

8. 2022年Python技術類面試題總結(面試題+答案解析)

這是一位有著五年 Python 經驗的好友最近對 Python 崗位面試後的一篇經驗總結,從 Python 就業方向到 Python 面試題。

Python 就業方向

下面是 Python 面試知識點,總結了華為、阿里巴巴等互聯網公司 Python 常問面試題。每道題都提供參考答案,希望能夠幫助你在求職面試中脫穎而出,找到一份高薪工作。

這些面試題分為 Python 基礎和 Python高級,內容包含: 基礎語法、文件操作、模塊與包、數據類型、元類、內存管理與垃圾回收機制以及 Python 函數 等知識點。

(一) Python 基礎語法

(二) 文件操作

(三) 模塊與包

(四) 數據類型

(五)企業面試題

(一) 元類

(二)內存管理與垃圾回收機制

(三)函數

(四) 面向對象

由於篇幅有限,這份 Python 面試寶典已經被整理成了PDF文檔,有需要 Python 面試寶典全套完整文檔(面試題+答案解析)的可以 免費領取!

9. Python後端開發工程師面試

第一步:自我介紹

第二步:公司介紹

第三步:技術基礎

第四步:項目介紹

第五步:待遇

自我介紹,簡單直接,姓名,籍貫,大學,工作經歷

示例如下:

你好,面試官,我叫XX,來自XX,本科畢業於XX,主修XX專業,有X年工作經驗,在上一家公司擔任python後端開發工程師的職位。

公司名稱是XX、公司主要做外包軟體、都有軟體定製/商城定製、前端2個後端2個運維1個

主要是根據你簡歷中填寫的技術,根據我的簡歷中所寫的,總結幾點如下:

字典的查詢流程:

不可變對象可哈希, str , fronzenset , tuple ,自己實現的類,要重載 __hash__ 方法。

dict內存花銷大,但是查詢速度快,自定義的對象或者python內部的對象都是dict包裝的。

dict的存儲順序和元素添加順序有關,添加順序可能改變已有數據的順序。

集合:是一個可以存放任意數據類型的可變無序的映射集合。

set和dict類似,set的核心也是散列表,但是表元只包含值的引用。 由於散列表的特性,set的元素不能重復,且無序。 內部由哈希實現,查找的時間復雜度為O(1),所以性能很高,實現了魔法函數 __contains__ 可以使用in來查找。 set的去重是通過兩個函數 __hash__ 和 __eq__ 實現的。

(1)淺拷貝

定義:淺拷貝只是對另外一個變數的內存地址的拷貝,這兩個變數指向同一個內存地址的變數值。

淺拷貝的特點:

(2)深拷貝:

定義:一個變數對另外一個變數的值拷貝。

深拷貝的特點:

Python GC主要使用引用計數(reference counting)來跟蹤和回收垃圾。在引用計數的基礎上,通過「標記-清除」(mark and sweep)解決容器對象可能產生的循環引用問題,通過「分代回收」(generation collectio n)以空間換時間的方法提高垃圾回收效率。

GIL全稱 Global Interpreter Lock ,中文解釋為全局解釋器鎖。它並不是Python的特性,而是在實現python的主流Cpython解釋器時所引入的一個概念,GIL本質上就是一把互斥鎖,將並發運行變成串列,以此來控制同一時間內共享數據只能被一個任務所修改,從而保證數據的安全性。

GIL保護的是解釋器級別的數據,但是用戶自己的數據需要自己加鎖處理。

既然有了GIL的存在,一個進程中同一時刻只有一個線程能夠被執行,無法利用cpu的多核機制,導致多線程用於I/O密集型,多進程用於計算密集型,如金融分析等。

死鎖:兩個或兩個以上的進程或者線程在執行過程中,因為爭奪資源而造成的互相等待現象,若無外力的作用,都將一直處於阻塞狀態,這些互相等待的進程或者線程就被稱為死鎖。

解決方法,使用遞歸鎖(RLock)

這個RLock內部有一個Lock和一個counter變數,counter記錄著acquire的次數,從而使得資源可以被多次require。直到一個線程所有的acquire都被release,其他的線程才能獲得資源。上面的例子如果使用RLock代替Lock,則不會發生死鎖

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

那麼如何避免粘包問題呢? 歸根結底就是一句話, 明確兩個包之間的邊界.

UDP不存在粘包問題,是由於UDP發送的時候,沒有經過Negal演算法優化,不會將多個小包合並一次發送出去。另外,在UDP協議的接收端,採用了鏈式結構來記錄每一個到達的UDP包,這樣接收端應用程序一次recv只能從socket接收緩沖區中讀出一個數據包。也就是說,發送端send了幾次,接收端必須recv幾次(無論recv時指定了多大的緩沖區)。

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

10. 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存儲了哪些東西,目錄名,文件名存在哪裡

熱點內容
修羅雲伺服器 發布:2024-05-06 18:05:18 瀏覽:708
什麼電腦可以安裝安卓系統 發布:2024-05-06 18:05:15 瀏覽:778
金標頂配都有哪些配置 發布:2024-05-06 17:58:22 瀏覽:599
怎麼看配置高低是否換電腦 發布:2024-05-06 17:32:01 瀏覽:968
linux命令查看目錄 發布:2024-05-06 17:24:18 瀏覽:531
sqlvb 發布:2024-05-06 17:24:16 瀏覽:227
分鏡頭腳本軟體 發布:2024-05-06 17:22:54 瀏覽:824
華為手機百度的緩存如何清理 發布:2024-05-06 17:22:53 瀏覽:941
網投源碼 發布:2024-05-06 17:10:35 瀏覽:871
看門狗腳本 發布:2024-05-06 17:10:28 瀏覽:108