『壹』 爬蟲面試常見問題
一、項目問題:
1.你寫爬蟲的時候都遇到過什麼反爬蟲措施,你是怎樣解決的。
2.用的什麼框架。為什麼選擇這個框架。
二、框架問題:
1.scrapy的基本結構(五個部分都是什麼,請求發出去的整個流程)。
2.scrapy的去重原理(指紋去重到底是什麼原理)。
3.scrapy中間件有幾種類,你用過哪些中間件。
4.scrapy中間件在哪裡起的作業(面向切片編程)。
三、代理問題:
1.為什麼會用到代理。
2.代理怎麼使用(具體代碼, 請求在什麼時候添加的代理)。
3.代理失效了怎麼處理。
四、驗證碼處理:
1.登陸驗證碼處理?
2.爬取速度過快出現的驗證碼處理?
3.如何用機器識別驗證碼?
關於爬蟲面試常見問題,青藤小編就和您分享到這里了。如果您對python編程有濃厚的興趣,希望這篇文章可以為您提供幫助。如果您還想了解更多關於python編程的技巧及素材等內容,可以點擊本站的其他文章進行學習。
『貳』 Python面試數據分析,爬蟲和深度學習一般都問什麼問題,筆試題目考哪些
一面: 技術面試
面試官是一個比較老練的技術總監,貌似80後:
你先簡單做個自我介紹吧。
答:恩,好的,面試官你好,很高興能來到貴公司面試爬蟲工程師一職。我叫XXX,來自於***,畢業於****大學,**學歷。(如果專業不是計算機專業,就不要介紹自己的專業,如果是大專以下學歷,也不要說自己學歷,揚長避短這個道理大家應該都懂得)有2年多爬蟲工作經驗(如果真實是1年多,就說2年,如果真實是2年多就說3年),工作過2家公司(公司盡量不要說太多,如果2-3年經驗說2家就好,以免說的過多讓人覺得這人太容易干一段不幹,說的太少,可能在一個公司技術積累比較單一),第一家是從實習開始工作的。我就主要介紹下我上家公司的情況吧。我上家公司是****,是一家外包公司(如果是培訓班畢業的盡可能說外包,因為在外包公司,任何項目都可能做,方便後面很多問題的解釋),我在這家公司做了一年多,這家公司在****。我們這家公司是共有50多人。我在裡面負責公司的數據採集爬取,數據處理,繪圖分析等(爬蟲爬下來的數據很多都會進行一些清洗,可以把自己數據處理,繪圖的經驗說出來,增加優勢,如果沒有的話,就業余花時間去學習這方面,常規的方法都不難)。期間主要負責了集團對一些招聘網站、電商網站、金融網站、汽車網站(如果是單一業務的公司,你可能就說不了這么多種類了,一般採集的數據都會比較單一,這就體現了說外包的好處)。我之所以在上家公司離職是因為上家的公司項目基本都已經做完上線了,後面又接的項目感覺挑戰性不大,希望尋找一個平台做更多的項目(這個離職原因因人而異,如果換城市的話也可以簡單粗暴說我家人、朋友在這邊,如果還是同一個城市的話也可以按照我的那樣說,也可以其他方式,但是建議不要說公司經營不好之類的,不喜歡這家公司等等,經營不好可能跟公司員工也有關系,如果回答不喜歡上家公司,面試官會接著問,為什麼不喜歡,如果我們公司也是這種情況,你會不喜歡嗎,面試offer幾率就會大大減少)。因為來之前了解過貴公司,現在主要做金融數據採集的任務,後面也會進行一些大數據分析的工作,覺得項目規劃很有遠見就過來了。(面試前先查下公司底細,知己知彼)因為我在之前公司做過爬蟲、分析方面的工作,貴公司的這個項目也剛好是處於初期階段,我非常喜歡貴公司的這些項目。並且我認為我有能力將貴公司的項目做好,能勝任貴公司爬蟲工程師一職,我的情況大概就是這樣,您看您們這邊還需了解其他什麼嗎?
2.你主要採集的產業領域有哪些?接觸過金融行業嗎?
答:我之前主要接觸過汽車行業,招聘行業,電商行業,金融行業,金融行業也接觸過,但是說實話項目並不是很多,但是技術是相通的,可能剛開始不是很熟悉,只要適應一倆個星期都不是問題。
3.介紹爬蟲用到的技術
答:requests、scrapy:爬蟲框架和分布式爬蟲
xpath:網頁數據提取
re:正則匹配
numpy、pandas:處理數據
matplotlib:繪圖
mysql:數據存儲
redis:爬蟲數據去重和url去重
雲打:處理常規驗證碼
復雜驗證碼:用selenium模擬登陸、處理滑塊驗證碼等(滑塊驗證碼有方法,之前破解過滑塊驗證碼,有空我會出個基本使用教程,進行滑塊驗證碼破解,但不一定通用,因為每個網站反爬措施設置都不一樣)
4.處理過的最難的驗證碼?
答:12306點擊圖片驗證碼。原理:圖片發送給打碼平台,平台返回圖片位置數值,通過計算返回數字和圖片坐標的關系,進行模擬登陸
5.當開發遇到甩鍋問題怎麼解決?
答:如果是小問題自己感覺影響不大,背鍋就背了,畢竟如果是剛入公司很多不懂,可能會犯一些錯誤,如果是大問題,就找責任人(虛心點,不卑不亢)
1.你為什麼要從上家公司離職?
答:上家公司離職是因為上家的公司項目基本都已經做完上線了,後面又接的項目感覺挑戰性不大,希望尋找一個平台做更多的項目
2.來之前了解過我們公司嗎?
答:來之前了解過貴公司,現在主要做金融數據採集的任務,後面也會進行一些大數據分析的工作
3.簡單介紹一下你最大的缺點跟優點?
答:我的優點是對工作認真負責,團隊協作能力好,缺點是言辭表達需要提高,還有對一些細節的把握(我最大的缺點就是對細節過分追求,有多少人想這樣說的,能把自己的缺點說成這么好聽的優點,也是666了,這樣說面試成績減10分缺點就老老實實說一點模稜兩可的缺點就好了,不要過於滑頭,也不要太實在)
4.你怎麼理解你應聘的職位,針對你應聘的職位你最擅長的是什麼?
答:這份職位不僅僅是爬蟲方面的技術崗位,更是學習新知識,探索新領域的一條路,希望能有機會給公司貢獻一份力量。最擅長數據採集、處理分析
5.你對加班有什麼看法?除了工資,你希望在公司得到什麼?
答:1,適當的加班可以接受,過度的加班不能,因為要考慮個人,家庭等因素,同時我也會盡量在規定的時間內完成分配給我的任務,當然加班也希望獲得相應的加班費。2,希望這份工作能讓我發揮我的技能專長,這會給我帶來一種滿足感,我還希望我所做的工作能夠對我目前的技能水平形成一個挑戰,從而能促使我提升著急。
6.你的期望薪資是多少?
答:我的期望薪資是13K,因為上家公司已經是10k,而且自己也會的東西比較多,前端、後端、爬蟲都會,跳槽希望有一定的增長。
7.你什麼時候能到崗上班?
答:因為我已經從上家公司離職,可以隨時到崗。(想早上班就別托,先答應越早越好)
8.你還有什麼要問我的嗎?
答:問了公司的福利待遇,上班時間,培養計劃。(上班時間是5天制,沒有培養計劃,項目初創時期)最後結束面試,說這2天會電話通知,因為後面還好幾個競爭對手面試。
結論:面試是個概率事件,同時也跟運氣有關,在我的話術之上多進行面試總結,多面一些公司,相信大家都能找到理想工作
『叄』 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對象越多,內存消耗越大。