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