如何面試Python后端工程師?
作為Python開發工程師,進入大公司是開啟職業新起點的關鍵,今天給小伙伴特別分享了其在騰訊等一些公司面試Python工程師的題目和經歷,希望對廣大Python工程師的求職者有一個幫助。
python2和python3區別?列舉5個
1、Python3 使用 print 必須要以小括號包裹打印內容,比如 print('hi')
Python2 既可以使用帶小括號的方式,也可以使用一個空格來分隔打印內容,比 如 print 'hi'
2、python2 range(1,10)返回列表,python3中返回迭代器,節約內存
3、python2中使用ascii編碼,python中使用utf-8編碼
4、python2中unicode表示字符串序列,str表示字節序列
python3中str表示字符串序列,byte表示字節序列
5、python2中為正常顯示中文,引入coding聲明,python3中不需要
6、python2中是raw_input()函數,python3中是input()函數
列出python中可變數據類型和不可變數據類型,并簡述原理
不可變數據類型:數值型、字符串型string和元組tuple
不允許變量的值發生變化,如果改變了變量的值,相當于是新建了一個對象,而對于相同的值的對象,在內存中則只有一個對象(一個地址),如下圖用id()方法可以打印對象的id
可變數據類型:列表list和字典dict;
允許變量的值發生變化,即如果對變量進行append、+=等這種操作后,只是改變了變量的值,而不會新建一個對象,變量引用的對象的地址也不會變化,不過對于相同的值的不同對象,在內存中則會存在不同的對象,即每個對象都有自己的地址,相當于內存中對于同值的對象保存了多份,這里不存在引用計數,是實實在在的對象。
s = "ajldjlajfdljfddd",去重并從小到大排序輸出"adfjl"
set去重,去重轉成list,利用sort方法排序,reeverse=False是從小到大排
list是不 變數據類型,s.sort時候沒有返回值,所以注釋的代碼寫法不正確
字典根據鍵從小到大排序
dict={"name":"zs","age":18,"city":"深圳","tel":"1362626627"}
filter方法求出列表所有奇數并構造新列表,a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
filter() 函數用于過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表。該接收兩個參數,第一個為函數,第二個為序列,序列的每個元素作為參數傳遞給函數進行判,然后返回 True 或 False,最后將返回 True 的元素放到新列表
請盡可能列舉python列表的成員方法,并給出一下列表操作的答案:
(1) a=[1, 2, 3, 4, 5], a[::2]=?, a[-2:] = ?
(2) 一行代碼實現對列表a中的偶數位置的元素進行加3后求和?
(3) 將列表a的元素順序打亂,再對a進行排序得到列表b,然后把a和b按元素順序構造一個字典d。
用python實現統計一篇英文文章內每個單詞的出現頻率,并返回出現頻率最高的前10個單詞及其出現次數,并解答以下問題?(標點符號可忽略)
(1) 創建文件對象f后,解釋f的readlines和xreadlines方法的區別?
(2) 追加需求:引號內元素需要算作一個單詞,如何實現?
簡述python GIL的概念, 以及它對python多線程的影響?編寫一個多線程抓取網頁的程序,并闡明多線程抓取程序是否可比單線程性能有提升,并解釋原因。
Python里面如何拷貝一個對象?(賦值,淺拷貝,深拷貝的區別)
答:賦值(=),就是創建了對象的一個新的引用,修改其中任意一個變量都會影響到另一個。
淺拷貝:創建一個新的對象,但它包含的是對原始對象中包含項的引用(如果用引用的方式修改其中一個對象,另外一個也會修改改變){1,完全切片方法;2,工廠函數,如list();3,copy模塊的copy()函數}
深拷貝:創建一個新的對象,并且遞歸的復制它所包含的對象(修改其中一個,另外一個不會改變){copy模塊的deep.deepcopy()函數}
介紹一下except的用法和作用?
答:try…except…except…[else…][finally…]
執行try下的語句,如果引發異常,則執行過程會跳到except語句。對每個except分支順序嘗試執行,如果引發的異常與except中的異常組匹配,執行相應的語句。如果所有的except都不匹配,則異常會傳遞到下一個調用本代碼的最高層try代碼中。
try下的語句正常執行,則執行else塊代碼。如果發生異常,就不會執行,如果存在finally語句,最后總是會執行。
介紹一下Python下range()函數的用法?
答:列出一組數據,經常用在for in range()循環中
如何用Python來進行查詢和替換一個文本字符串?
答:可以使用re模塊中的sub()函數或者subn()函數來進行查詢和替換,
格式:sub(replacement, string[,count=0])(replacement是被替換成的文本,string是需要被替換的文本,count是一個可選參數,指最大被替換的數量)
>>> import re
>>>p=re.compile(‘blue|white|red’)
>>>print(p.sub(‘colour’,'blue socks and red shoes’))
colour socks and colourshoes
>>>print(p.sub(‘colour’,'blue socks and red shoes’,count=1))
colour socks and redshoes
subn()方法執行的效果跟sub()一樣,不過它會返回一個二維數組,包括替換后的新的字符串和總共替換的數量。
關于Python的前景就業后待遇,畢竟是處于大熱的編程語言,待遇一定不會差到哪里。具體的薪資待遇還是要靠自己的技術水平來衡量,當前開發市場上Python技術的需求,得出的Python就業薪資大致情況如下:
Python高級階段:6000-8000(元/人民幣)
Web開發基礎階段:7000-11000(元/人民幣)
Web開發中級階段:10000-15000(元/人民幣)
Web開發高級階段12000-18000(元/人民幣)
服務器運維與安全階段:15000-30000(元/人民幣)
物聯網開發階段:16000-30000(元/人民幣)
機器學習數據分析階段:18000-30000(元/人民幣)
從這些崗位薪資可以看出,薪資待遇與技術水平保持著正比的關系。但是編程技術時刻都保持這更新狀態,想要拿到高薪還是要時刻了解這個行業的動態。