python面試題目
A. 面試題:你為什麼選擇python
為什麼Python比MATLAB、R語言好呢?
其實,這三種語言都很多數據分析師在用,但更推薦python,主要是有以下幾點:
1、python易學、易讀、易維護,處理速度也比R語言要快,無需把資料庫切割;
2、python勢頭猛,眾多大公司需要,市場前景廣闊;而MATLAB語言比較局限,專注於工程和科學計算方面,而且MATLAB價格貴,免費版或盜版都只能玩玩學慣用;
3、python具有豐富的擴展庫,這個是其他兩個不能比的;
python版本選擇
初學者版本選擇是很多人都會問的,我們也不會偏向某個版本,主要根據自己的所需,但建議是選擇最新版本Python3.x,這樣很多新功能和舊功能都會有的,但是目前很多第三方庫仍然不支持Python3,因為Python2.x已經停止繼續開發,不意味著不能使用。
B. python面試,一般都問什麼問題
下面是一些關鍵點:
Python是一種解釋型語言。這就是說,與C語言和C的衍生語言不同,Python代碼在運行之前不需要編譯。其他解釋型語言還包括PHP和Ruby。
Python是動態類型語言,指的是你在聲明變數時,不需要說明變數的類型。你可以直接編寫類似x=111和x="I'm a string"這樣的代碼,程序不會報錯。
Python非常適合面向對象的編程(OOP),因為它支持通過組合(composition)與繼承(inheritance)的方式定義類(class)。Python中沒有訪問說明符(access specifier,類似C++中的public和private),這么設計的依據是「大家都是成年人了」。
在Python語言中,函數是第一類對象(first-class objects)。這指的是它們可以被指定給變數,函數既能返回函數類型,也可以接受函數作為輸入。類(class)也是第一類對象。
Python代碼編寫快,但是運行速度比編譯語言通常要慢。好在Python允許加入基於C語言編寫的擴展,因此我們能夠優化代碼,消除瓶頸,這點通常是可以實現的。numpy就是一個很好地例子,它的運行速度真的非常快,因為很多算術運算其實並不是通過Python實現的。
Python用途非常廣泛——網路應用,自動化,科學建模,大數據應用,等等。它也常被用作「膠水語言」,幫助其他語言和組件改善運行狀況。
Python讓困難的事情變得容易,因此程序員可以專注於演算法和數據結構的設計,而不用處理底層的細節。
C. 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,歡迎投簡歷給我[email protected],龍圖游戲運營支持中心數據分析部招人;覺得有點問題,那還等什麼,趕快來和我交流交流。
更新:討論區挺熱鬧,有人說好簡單,有人說好難,其實我覺得這只適合面試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子查詢慢等。其實到這里研發工程師就差不多,當然你可以繼續深入下去,比如讀寫分離,集群管理,甚至一些 參數調優。
D. 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說我也沒了。那行,接下來,他們就讓我等人事了。
E. 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存儲了哪些東西,目錄名,文件名存在哪裡
F. Python面試題,線程與進程的區別,Python中如何創建多線程
進程和線程這兩個概念屬於操作系統,我們經常聽說,但是可能很少有人會細究它們的含義。對於工程師而言,兩者的定義和區別還是很有必要了解清楚的。
首先說進程,進程可以看成是 CPU執行的具體的任務 。在操作系統當中,由於CPU的運行速度非常快,要比計算機當中的其他設備要快得多。比如內存、磁碟等等,所以如果CPU一次只執行一個任務,那麼會導致CPU大量時間在等待這些設備,這樣操作效率很低。為了提升計算機的運行效率,把機器的技能盡可能壓榨出來,CPU是輪詢工作的。也就是說 它一次只執行一個任務,執行一小段碎片時間之後立即切換 ,去執行其他任務。
所以在早期的單核機器的時候,看起來電腦也是並發工作的。我們可以一邊聽歌一邊上網,也不會覺得卡頓。但實際上,這是CPU輪詢的結果。在這個例子當中,聽歌的軟體和上網的軟體對於CPU而言都是 獨立的進程 。我們可以把進程簡單地理解成運行的應用,比如在安卓手機裡面,一個app啟動的時候就會對應系統中的一個進程。當然這種說法不完全准確, 一個應用也是可以啟動多個進程的 。
進程是對應CPU而言的,線程則更多針對的是程序。即使是CPU在執行當前進程的時候,程序運行的任務其實也是有分工的。舉個例子,比如聽歌軟體當中,我們需要顯示歌詞的字幕,需要播放聲音,需要監聽用戶的行為,比如是否發生了切歌、調節音量等等。所以,我們需要 進一步拆分CPU的工作 ,讓它在執行當前進程的時候,繼續通過輪詢的方式來同時做多件事情。
進程中的任務就是線程,所以從這點上來說, 進程和線程是包含關系 。一個進程當中可以包含多個線程,對於CPU而言,不能直接執行線程,一個線程一定屬於一個進程。所以我們知道,CPU進程切換切換的是執行的應用程序或者是軟體,而進程內部的線程切換,切換的是軟體當中具體的執行任務。
關於進程和線程有一個經典的模型可以說明它們之間的關系,假設CPU是一家工廠,工廠當中有多個車間。不同的車間對應不同的生產任務,有的車間生產汽車輪胎,有的車間生產汽車骨架。但是工廠的電力是有限的,同時只能滿足一個廠房的使用。
為了讓大家的進度協調,所以工廠需要輪流提供各個車間的供電。 這里的車間對應的就是進程 。
一個車間雖然只生產一種產品,但是其中的工序卻不止一個。一個車間可能會有好幾條流水線,具體的生產任務其實是流水線完成的,每一條流水線對應一個具體執行的任務。但是同樣的, 車間同一時刻也只能執行一條流水線 ,所以我們需要車間在這些流水線之間切換供電,讓各個流水線生產進度統一。
這里車間里的 流水線自然對應的就是線程的概念 ,這個模型很好地詮釋了CPU、進程和線程之間的關系。實際的原理也的確如此,不過CPU中的情況要比現實中的車間復雜得多。因為對於進程和CPU來說,它們面臨的局面都是實時變化的。車間當中的流水線是x個,下一刻可能就成了y個。
了解完了線程和進程的概念之後,對於理解電腦的配置也有幫助。比如我們買電腦,經常會碰到一個術語,就是這個電腦的CPU是某某核某某線程的。比如我當年買的第一台筆記本是4核8線程的,這其實是在說這台電腦的CPU有 4個計算核心 ,但是使用了超線程技術,使得可以把一個物理核心模擬成兩個邏輯核心。相當於我們可以用4個核心同時執行8個線程,相當於8個核心同時執行,但其實有4個核心是模擬出來的虛擬核心。
有一個問題是 為什麼是4核8線程而不是4核8進程呢 ?因為CPU並不會直接執行進程,而是執行的是進程當中的某一個線程。就好像車間並不能直接生產零件,只有流水線才能生產零件。車間負責的更多是資源的調配,所以教科書里有一句非常經典的話來詮釋: 進程是資源分配的最小單元,線程是CPU調度的最小單元 。
啟動線程Python當中為我們提供了完善的threading庫,通過它,我們可以非常方便地創建線程來執行多線程。
首先,我們引入threading中的Thread,這是一個線程的類,我們可以通過創建一個線程的實例來執行多線程。
from threading import Thread t = Thread(target=func, name='therad', args=(x, y)) t.start()簡單解釋一下它的用法,我們傳入了三個參數,分別是 target,name和args ,從名字上我們就可以猜測出它們的含義。首先是target,它傳入的是一個方法,也就是我們希望多線程執行的方法。name是我們為這個新創建的線程起的名字,這個參數可以省略,如果省略的話,系統會為它起一個系統名。當我們執行Python的時候啟動的線程名叫MainThread,通過線程的名字我們可以做區分。args是會傳遞給target這個函數的參數。
我們來舉個經典的例子:
import time, threading # 新線程執行的代碼: def loop(n): print('thread %s is running...' % threading.current_thread().name) for i in range(n): print('thread %s >>> %s' % (threading.current_thread().name, i)) time.sleep(5) print('thread %s ended.' % threading.current_thread().name) print('thread %s is running...' % threading.current_thread().name) t = threading.Thread(target=loop, name='LoopThread', args=(10, )) t.start() print('thread %s ended.' % threading.current_thread().name)我們創建了一個非常簡單的loop函數,用來執行一個循環來列印數字,我們每次列印一個數字之後這個線程會睡眠5秒鍾,所以我們看到的結果應該是每過5秒鍾屏幕上多出一行數字。
我們在Jupyter里執行一下:
表面上看這個結果沒毛病,但是其實有一個問題,什麼問題呢? 輸出的順序不太對 ,為什麼我們在列印了第一個數字0之後,主線程就結束了呢?另外一個問題是,既然主線程已經結束了, 為什麼Python進程沒有結束 , 還在向外列印結果呢?
因為線程之間是獨立的,對於主線程而言,它在執行了t.start()之後,並 不會停留,而是會一直往下執行一直到結束 。如果我們不希望主線程在這個時候結束,而是阻塞等待子線程運行結束之後再繼續運行,我們可以在代碼當中加上t.join()這一行來實現這點。
t.start() t.join() print('thread %s ended.' % threading.current_thread().name)join操作可以讓主線程在join處掛起等待,直到子線程執行結束之後,再繼續往下執行。我們加上了join之後的運行結果是這樣的:
這個就是我們預期的樣子了,等待子線程執行結束之後再繼續。
我們再來看第二個問題,為什麼主線程結束的時候,子線程還在繼續運行,Python進程沒有退出呢?這是因為默認情況下我們創建的都是用戶級線程,對於進程而言, 會等待所有用戶級線程執行結束之後才退出 。這里就有了一個問題,那假如我們創建了一個線程嘗試從一個介面當中獲取數據,由於介面一直沒有返回,當前進程豈不是會永遠等待下去?
這顯然是不合理的,所以為了解決這個問題,我們可以把創建出來的線程設置成 守護線程 。
守護線程守護線程即daemon線程,它的英文直譯其實是後台駐留程序,所以我們也可以理解成 後台線程 ,這樣更方便理解。daemon線程和用戶線程級別不同,進程不會主動等待daemon線程的執行, 當所有用戶級線程執行結束之後即會退出。進程退出時會kill掉所有守護線程 。
我們傳入daemon=True參數來將創建出來的線程設置成後台線程:
t = threading.Thread(target=loop, name='LoopThread', args=(10, ), daemon=True)這樣我們再執行看到的結果就是這樣了:
這里有一點需要注意,如果你 在jupyter當中運行是看不到這樣的結果的 。因為jupyter自身是一個進程,對於jupyter當中的cell而言,它一直是有用戶級線程存活的,所以進程不會退出。所以想要看到這樣的效果,只能通過命令行執行Python文件。
如果我們想要等待這個子線程結束,就必須通過join方法。另外,為了預防子線程鎖死一直無法退出的情況, 我們還可以 在joih當中設置timeout ,即最長等待時間,當等待時間到達之後,將不再等待。
比如我在join當中設置的timeout等於5時,屏幕上就只會輸出5個數字。
另外,如果沒有設置成後台線程的話,設置timeout雖然也有用,但是 進程仍然會等待所有子線程結束 。所以屏幕上的輸出結果會是這樣的:
雖然主線程繼續往下執行並且結束了,但是子線程仍然一直運行,直到子線程也運行結束。
關於join設置timeout這里有一個坑,如果我們只有一個線程要等待還好,如果有多個線程,我們用一個循環將它們設置等待的話。那麼 主線程一共會等待N * timeout的時間 ,這里的N是線程的數量。因為每個線程計算是否超時的開始時間是上一個線程超時結束的時間,它會等待所有線程都超時,才會一起終止它們。
比如我這樣創建3個線程:
ths = [] for i in range(3): t = threading.Thread(target=loop, name='LoopThread' + str(i), args=(10, ), daemon=True) ths.append(t) for t in ths: t.start() for t in ths: t.join(2)最後屏幕上輸出的結果是這樣的:
所有線程都存活了6秒。
總結在今天的文章當中,我們一起簡單了解了 操作系統當中線程和進程的概念 ,以及Python當中如何創建一個線程,以及關於創建線程之後的相關使用。
多線程在許多語言當中都是至關重要的,許多場景下必定會使用到多線程。比如 web後端,比如爬蟲,再比如游戲開發 以及其他所有需要涉及開發ui界面的領域。因為凡是涉及到ui,必然會需要一個線程單獨渲染頁面,另外的線程負責准備數據和執行邏輯。因此,多線程是專業程序員繞不開的一個話題,也是一定要掌握的內容之一。
G. 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編程的技巧,干貨,資訊等內容,小編會持續更新。
H. python程序員去面試時會被HR經常所問到的問題有哪些天津python培訓
一、常見的HTTP方法有哪些?
1、GET:請求指定的頁面信息,返回實體主體;
2、HEAD:類似於get請求,只不過返回的響應中沒有具體的內容,用於捕獲報頭;
3、POST:向指定資源提交數據進行處理請求(比如表單提交或者上傳文件),。數據被包含在請求體中。
4、PUT:從客戶端向服務端傳送數據取代指定的文檔的內容;
5、DELETE:請求刪除指定的頁面;
6、CONNNECT:HTTP1.1協議中預留給能夠將連接方式改為管道方式的代理伺服器;
7、OPTIONS:允許客戶端查看伺服器的性能;
8、TRACE:回顯伺服器的請求,主要用於測試或者診斷。
二、描述一下scrapy框架的運行機制?
從start_urls裡面獲取url發送請求,請求由請求引擎給調度器入請求對列,獲取完畢後,調度器將請求對列交給下載器去獲取請求對應的響應資源,並將響應交給自己編寫的解析方法做提取處理,如果提取出需要的數據,則交給管道處理,如果提取出url,則繼續執行之前的步驟,直到多列里沒有請求,程序結束。
三、 可變類型和不可變類型
1、可變類型有list,dict.不可變類型有string,number,tuple.
2、當進行修改操作時,可變類型傳遞的是內存中的地址,也就是說,直接修改內存中的值,並沒有開辟新的內存。
3、不可變類型被改變時,並沒有改變原內存地址中的值,而是開辟一塊新的內存,將原地址中的值復制過去,對這塊新開辟的內存中的值進行操作。
四、is和==有什麼區別?
is:比較的是兩個對象的id值是否相等,也就是比較倆對象是否為同一個實例對象。是否指向同一個內存地址
== : 比較的兩個對象的內容/值是否相等,默認會調用對象的eq()方法
五、urllib 和 urllib2 的區別?
urllib 和urllib2都是接受URL請求的相關模塊,但是urllib2可以接受一個Request類的實例來設置URL請求的headers,urllib僅可以接受URL。urllib不可以偽裝你的User-Agent字元串。
urllib提供urlencode()方法用來GET查詢字元串的產生,而urllib2沒有。這是為何urllib常和urllib2一起使用的原因。
I. Python面試數據分析,爬蟲和深度學習一般都問什麼問題,筆試題目有哪些
簡單羅列些:
1.數據清洗與處理:數據讀取read_csv等,數據表構建dataframe等,數據整合concat/join/merge等,表結構處理以及切片iloc/loc等,數據統計describe/isnull/sum/apply等,圖表展示plot,數據透視表pivot_table等,異常值與缺失數據統計與處理,相關性檢驗
2.機器學習模型構建:svm,logistic,knn等
3.爬蟲:request包
4.深度學習:CNN,RNN,圖像處理,音頻處理,語義理解。