⑴ python好就業嗎
Python最強大的地方體現在它的兩個外號上,一個叫「內置電池」,另一個是「膠水語言」。開源社區和獨立開發者長期為Python貢獻了豐富大量的第三方庫,其數量遠超其他主流編程語言,可見Python的語言生態已然相當壯大。
學完Python好找工作嗎?很多人學了Python還是找不到工作,為什麼?自己在學習Python,怕以後不好找工作,想問問前輩們,現在Python的工作好找嗎?也看到很多人找不到Python工作,是為什麼呢?
一、事實:企業招聘到合格的程序員很難。凡是找不到工作的,編程能力沒有達到企業用人的最低標准。
筆者上海參加Gopher China 2017年大會,看到的是企業設展台招聘程序員,演講者演講完,也招聘程序員,有的參會者也去招聘程序員。這是Golang的情況。
1、Python 的職位更多,比Java、PHP 稍微少點,但同等水平程序員,Python 的工資比PHP的高一些。
2、在北上廣深、成都、武漢、杭州等地Python 職位挺多,但在其它地方稍微少一些。
上面說了工作不是問題,下面說說怎麼才能滿足企業的需要。
3、打鐵還得自身硬。只有通過企業的面試才有機會當程序員。很多人聽說程序員工資高,但葉公好龍,碰到困難就退縮,這個不是學習編程的正確態度。
4、正確的學習方法,能自學就自學,自學搞不定的,找人指導或者參加培訓。
5、見過號稱會編程的Python程序員,有的可能自我感覺良好,一去面試就掛。
原因是多方面的,大概有如下原因。
有的自我感覺良好,認為Python編程簡單,調用幾個庫的事,其實基礎很不好。見過做面試題才30分(100分題),大有人在。更有甚者,選擇題,選變數是合法的都答不上,況演算法題乎!有的應聘者,一問這也不會,那也不會,表現的對任何事情沒有信心,容易放棄的那種。給面試官留下,沒有獨立思考,獨立解決問題的能力。
等等原因,所以面試不上。
二、如果你是在北上廣的話,你的可選擇性以及進大公司的概率要大太多,找工作的效率也要高很多。大城市不是人才競爭大,而是急需人才。我們知道,一線城市是全中國公司質量和密度最高的城市,尤其北京上海,所以求職的效率是最高的。
但是話說回來,不知道你的Python掌握得怎麼樣了。說實話,如果你掌握得不是那麼好,去哪都一樣。只有你扎實掌握了Python技術,能夠獨立處理公司需要解決的問題,你的出現才有意義,Python方面的工作也才好找。
至於怎麼學習,就看你自己了。只要合適,怎麼都行。自學省錢,但都是自己學,也容易走彎路,容易半途而廢,如果條件允許,你也可以拿時間換金錢。
在主流編程語言當中,Python並不是一個「新人」,它的歷史超過25年,但真正風靡之時卻是最近幾年,所以「後起之秀」的稱呼實至名歸。
Python的起源是1989年,其發明者荷蘭人程序員吉多?范羅蘇姆受ABC語言的啟發計劃開發一個新的腳本解釋器,由此邁出了Python項目的起點。
在開發者社群流行著一句玩笑「人生苦短,我用Python」(原話為」Life is short, you need Python」),這句看似戲言的話實際上恰恰反映了Python的語言特性與其在開發者心裡的價值分量。更多學習內容,請點擊python學習網。
⑵ 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一起使用的原因。
⑶ 2022年Python技術類面試題總結(面試題+答案解析)
這是一位有著五年 Python 經驗的好友最近對 Python 崗位面試後的一篇經驗總結,從 Python 就業方向到 Python 面試題。
Python 就業方向 :
下面是 Python 面試知識點,總結了華為、阿里巴巴等互聯網公司 Python 常問面試題。每道題都提供參考答案,希望能夠幫助你在求職面試中脫穎而出,找到一份高薪工作。
這些面試題分為 Python 基礎和 Python高級,內容包含: 基礎語法、文件操作、模塊與包、數據類型、元類、內存管理與垃圾回收機制以及 Python 函數 等知識點。
(一) Python 基礎語法
(二) 文件操作
(三) 模塊與包
(四) 數據類型
(五)企業面試題
(一) 元類
(二)內存管理與垃圾回收機制
(三)函數
(四) 面向對象
由於篇幅有限,這份 Python 面試寶典已經被整理成了PDF文檔,有需要 Python 面試寶典全套完整文檔(面試題+答案解析)的可以 免費領取!
⑷ 面試題:你為什麼選擇python
為什麼Python比MATLAB、R語言好呢?
其實,這三種語言都很多數據分析師在用,但更推薦python,主要是有以下幾點:
1、python易學、易讀、易維護,處理速度也比R語言要快,無需把資料庫切割;
2、python勢頭猛,眾多大公司需要,市場前景廣闊;而MATLAB語言比較局限,專注於工程和科學計算方面,而且MATLAB價格貴,免費版或盜版都只能玩玩學慣用;
3、python具有豐富的擴展庫,這個是其他兩個不能比的;
python版本選擇
初學者版本選擇是很多人都會問的,我們也不會偏向某個版本,主要根據自己的所需,但建議是選擇最新版本Python3.x,這樣很多新功能和舊功能都會有的,但是目前很多第三方庫仍然不支持Python3,因為Python2.x已經停止繼續開發,不意味著不能使用。
⑸ 面試Python後端工程師,主要注意准備什麼
自我介紹
之前講過很多關於如何應對面試官提出的「自我介紹」這個問題,今天,針對Python程序員這個崗位,給大家重新梳理一下答題的結構。我們在做自我介紹時,可以按照:個人基本信息+基本技術構成+項目經驗(具體項目以及在項目中的負責部分)+自我評價的結構來回答。注意一定要緊緊圍繞招聘崗位的需求做介紹,在此之前要做好准備工作,看看招聘方具體需要什麼方向的研發工程師。目前針對Python,有自動化測試平台的設計與開發、數據的挖掘與清洗以及Python開發等具體崗位,所以面試Python方向的同學注意,可以多和運維以及自動化方面靠攏。當然,具體還是要看公司空缺崗位與你的專業是否對口。
不要給自己挖坑
確保你在回答面試官的過程中,回答的每個知識點都瞭然於胸,不然被問住,是很難堪的。如果遇到不會的問題,一定不要盲目亂答一通。比如有一次,有位同學在回答Web安全問題時,順嘴說了SQL注入,面試官便順水推舟,讓這位同學接著講講SQL的原理及解決方法。然而這位同學卻把XSS跨站注入攻擊和SQL注入搞混了,歸根結底,還是知識掌握得不夠牢固。所以,在面試時,要斟酌每一句話,聰明的同學還可以引導面試官,讓他問出自己想要被問的問題。當然,化被動為主動,就是面試中比較高的一種境界了。
有足夠的自信
如果你學歷不是特別高,在面試時,面試官很有可能會問你是怎樣看待學歷和能力的。學歷和能力在當今的社會都不可或缺,學歷往往是你面試的敲門磚,但敲完門用途就不大了,後面才是證明你能力的時刻。針對這個問題,我們一定要不卑不亢地說出自己看法:「我想只要完成了大學校園內的學業,就表明已經具備了一定的學習能力。如果我們努力學習代碼技能,並且有能力學好,那麼是學士還是博士就不是很重要。競爭這個崗位的關鍵是看你能在這個領域上發揮什麼作用,而不單單是學了多少書本上的知識。」
除了上述主觀性問題之外,很多專業性的問題也要瞭然於心。
⑹ 你要面試一個程序員,應該問他什麼問題
首先面試程序員分有沒有經驗
面試沒有經驗的程序員就隨便問問點ssm,ssh五大框架問題,多線程什麼的,再問問是否會點前端技術
有經驗就看看他的簡歷,問他簡歷項目上的問題,可以圍繞著簡歷上的項目問,通過他的回答涉及到的技術點之類的,拓展出去問其他的
⑺ 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,必然會需要一個線程單獨渲染頁面,另外的線程負責准備數據和執行邏輯。因此,多線程是專業程序員繞不開的一個話題,也是一定要掌握的內容之一。
⑻ 面試JAVA程序員時,有哪些需要掌握的面試題
一般有,面向對象的特徵:封裝、繼承、多態;int和interger之間的區別;還有就是自己常用的JDK包有哪些。