記一次Python後端開發面試的經歷

2021-02-23 Python入門與進階

記一次Python後端開發面試的經歷

在拉勾上投了十幾個公司,大部分都被標記為不合適,有兩個給了面試機會,其中一個自己覺得肯定不會去的,也就沒有去面試,另一個經歷了一輪電話面加一輪現場筆試和面試,在此記錄一下面試的內容,做個小的總結。

【04/18】電話面試

上來沒廢話,直接開始問問題。

1、is和==的區別?

is判斷兩個引用是否指向的是同一個變量,即內存id是否相等,==則是調用的eq方法,一般是用於判斷值是否相等,也可以重寫eq方法實現想要的效果。

2、dict與list的查找複雜度?

dict用hash實現,查找的時間複雜度是O(1),list則為O(n)。

3、a/b/c三個裝飾器依次裝飾函數fun(),裝飾器的執行順序?

注意裝飾器函數本身一般有兩層,在裝飾的時候外層和內層順序是相反的,詳情可以參考這邊文章python 多個裝飾器的調用順序。

4、如何運行一個字符串?

eval和exec。

5.Python多線程能否充分利用CPU多核心,為什麼?

這裡回答的是GIL相關的東西,可深可淺,自己把握~

6、什麼是上下文管理器?如何實現?

廣泛意義上來說,上下文是指程序運行的環境,Python中常見於打開文件或網絡連接,其實就是with關鍵字,如:

with open("test.txt") as file:
    print(file.read())

可以確保文件在最後會被關閉,只要對一個對象實現了enterexit函數,就可以構造自己的上下文管理器了。

7、同步/異步/阻塞/非阻塞都是什麼?

感覺直接解釋概念不好解釋,這裡我回答的思路是舉例子,異步說白了就是任務不需要同步進行,比如用爬蟲爬取一個數據,然後再保存數據,接下來再去爬另一個數據,這是同步;異步就是爬蟲不用等著數據保存好,爬完一個直接去爬另一個,數據保存的事情交給別的邏輯去慢慢處理;阻塞和非阻塞也是基於此的,同步的情況下會阻塞爬蟲,爬蟲需要等待數據的保存。(這部分是我自己的理解,建議看看專業的說明)

8、如何判斷兩個浮點數是否相等?

之前完全沒想過這個的問題,我的回答就是按一個差不多的精度去比較,比如到小數點第幾位之前都是相等的,就認為兩個數相等,或者Math模塊裡可能有什麼方法可以去精確對比,當時是這麼回答的,現在查了一下基本也是這個思路,Math模塊中有一個isclose函數用來判斷兩個浮點數的值是否接近或相等

9、MySQL的索引一般是怎麼實現的?

B-Tree(一般是B+Tree)和Hash,然後再簡單介紹一下。

10、對於Flask的實現有了解嗎?

只知道WSGI,其餘的不清楚,暫時還沒去深入看Flask的源碼。

【04/20】現場筆試+面試

跨了大半個北京城,還跟leader撒謊請假,也是心累。筆試題如下:

1、一個木棍任意截成三段,圍成三角形的概率?
咩咩咩?不知道。(回來查了是25%,具體可以自行搜索,反正脫離數學N年是無論如何都想不出來的)。

2、一個函數RAND7()隨機返回1~7,使用它構造一個RAND10()函數隨機返回10。
一開始寫了個函數如下:

def rand10():
   a = rand7() + 3/10
   b = rand7() - 4
   if b < 0:
       b = 0
   return a + b

也是腦袋抽了,想得太簡單,這個rand10雖然能返回1~10的隨機數,但每個數出現的概率不是1/10,後面時間快到了檢查的時候才反應過來。正確的思路是:

def rand10():
   while 1:
       res = (rand7()-1)*7+rand7()    
       if res < 40:                  
           return res % 10 + 1        

3、把一段JAVA代碼改成Python,並增加單元測試。
JAVA代碼本身很簡單,即使沒學過也能看懂,改後的Python代碼如下:

class MyClass:
   __current = 0
   def next(self):
       MyClass.__current += 1
       return MyClass.__current

但是對於單元測試則僅限於聽過的地步,需要用到unittest,好像也有別的模塊。

4、給定一個數組,按奇數在前升序,偶數在後降序排列,一行代碼實現。
沒啥好說的,一行代碼必然是列表生成式,假設數組是nums,代碼如下:

sorted([n for n in nums if n % 2]) + sorted([n for n in nums if not n % 2], reverse=True)

5、實現單例。

單例就是說一個class只能有一個instance,實現的方法有很多,例如改寫new方法:

class Singleton(object):
   _instance = None
   def __new__(cls, *args, **kw):
       if not cls._instance:
           cls._instance = super(Singleton, cls).__new__(cls, *args, **kw)  
       return cls._instance

6、有一個問答平臺,每個用戶對一個問題最多只能回答一次,同一個問題最多只能對一個答案點讚;1)設計合適的資料庫結構;2)寫出SQL獲取點讚數最多的10個問題;

我平時也就用資料庫查數據,在設計資料庫上沒有深入研究,因此的我答案就簡單寫了有哪些表,欄位分別是什麼,至於題中的條件限制,就交由後臺的程序邏輯去處理,而不是在資料庫設計層面去限制。因為是自己設計的表結構,SQL本身也就不難。

7、設計一個棧,實現pop/push及max方法,要求能在O(1)時間內取得最大值。

LeetCode原題啊!list怎麼能O(1)取得最大值呢,無非是空間換時間,每push一個數就同時記錄當前的最大值。

8、手寫快排。
呵呵。

其他針對簡歷的提問

1、你的網站,你覺得如果訪問量上去了,最先出現瓶頸問題的點是哪?怎麼優化?

我答的是資料庫,因為好多不必要或者可以使用緩存的地方也頻繁操作資料庫,而且是使用的ORM,但之前從哪看到ORM不能確保對應的SQL語句是最優的,因此可以嘗試使用原生SQL或者增加Redis緩存。

2、如果要擴展後臺伺服器,需要怎麼做?

(話說這不是運維的工作麼。。。)呃,就是增加伺服器啊,然後前面加一層負載均衡,把請求分配給不同的伺服器。(那不同的伺服器怎麼使用你的Session?)再加個Session伺服器。

3、我看你平時刷編程題,有遇到什麼有意思的題目嗎?

LeetCode才開始刷,就舉了兩道Codewars上的題目,我也真是傻了,真的舉了兩道有意思(但自己沒做好)的題。

其他就無非是一些為什麼想做後端開發之類的問題了,個人感覺題目大部分也挺簡單的,我的表現也算中規中矩吧,但面試官說我要進一步加強基礎知識,具體哪方面(資料庫、網絡協議、還是Python本身)又語焉不詳。

原文:https://segmentfault.com/a/1190000014540229

學習Python和網絡爬蟲,關注公眾號:datanami

近期文章:

從0開始玩轉MySQL

Python奇技淫巧101

我是怎麼把一個項目帶崩的

Python 實現多線程下載器

為什麼Django框架持續統治著Python開發世界

相關焦點

  • Node.js為何在後端開發中不受重視?
    語言只是一個工具,對高手來講Java、golang、python、Javascript都可以完成複雜的後端開發工作,這些語言最大的區別是生態。Java無疑是所有後端開發語言中的佼佼者,它的生態完善度超乎你的想像,這也是Java在後端開發領域無法撼動的根本。其他幾種語言我覺得沒有根本性的區別,論生態完善度,都是半斤八兩,論高並發,golang當之無愧,論語言友好度,Node.js可以排到首位。
  • 我的python面試簡歷
    分享前一段我的python面試簡歷,自我介紹這些根據你自己的來寫就行,這裡著重分享下我的項目經驗
  • 面試Python工程師會問哪些問題?需要準備什麼?
    隨著網際網路的發展,python語言現在變得越來越火爆,Python程式設計師越來越受到大家的青睞!那麼想進入Python行業,面試時需要注意些什麼問題呢?我們在參加Python開發崗位面試的時候都要做哪些準備?一般Python技術方面的面試會問哪些問題?今天,我們從2位面試官的角度來看看,參加 Python 開發崗面試需要做哪些準備。
  • 我的 Python 面試簡歷
    python面試簡歷,自我介紹這些根據你自己的來寫就行,這裡著重分享下我的項目經驗、公司職責情況(時間倒序),不一定對每個人適用,但是有適合你的點可以借鑑我的真實經驗:(14年畢業,化工專業)14.7 -- 15.1    賣保險15.3 -- 15.11  進廠16.2 -- 17.7    UI設計(UI培訓班學習+
  • python前端和後端數據交互,tornado框架入門,初學小試牛刀!
    1)接收GET請求數據2)接收POST請求數據3)響應請求下面是python前端和後端數據交互的例子,利用ttornado框架快速搭建前端和後端數據交互,代:碼實現如下:import tornado.httpserverimport tornado.ioloopimport
  • 記美國面試經驗,前端開發,提前預告,目前已經進背調了
    我本著面試練手的目的,每天廣投簡歷,結果最近兩周電話都在響,預約筆試面試。------ 出門採購--- 回來再寫繼續---記最近的一次面試昨天剛面完這邊本地的一個美國軟體公司,我提前一個小時就到了公司樓下,然後在公司樓下的咖啡廳坐了坐,公司所在周邊的地方走了走(記住這個動作,其實是為後面的面試做鋪墊)。
  • 前端開發,測試,後端,該如何選擇?
    首先,我是一名從業8年的前端工程師,後端也略會一二,期間也兼職過公司的測試崗位,談談我的一點想法,僅供參考。1、所謂前端首先要搞明白,你是否對前端開發、編程敲代碼感興趣,而不是說看中了IT行業的高薪,覺得別人去培訓機構培訓半年,出來在西安月薪8K等。如果你對編程不感興趣,那麼你在培訓機構或者是工作上班後,每天都是折磨,都是煎熬。
  • 記一次Google面試經歷
    很多年前我進入矽谷人才市場,想找一份高級工程師的職位。他把他的皮褲子弄的沙沙響作為回應。「還有沒有更好的?」我的天!這個傢伙究竟想要什麼?我看看白板,然後轉向他。「沒有了,O(n+m)是你能得到的最好的結果了 —— 我是說,你至少要對每個字母至少訪問一次才能完成這項操作 —— 而這個方案是剛好是對每個字母只訪問一次。」 我越想越確信我是對的。
  • 自學Python後端開發 到什麼程度可以找工作?
    他在面試前期做了相當多的準備(機會永遠是留給有準備的人,這一點值得學習),寫了很多關於面試真題的相關內容.之前有許多讀者會在微信上問我,「自學 Python 後端開發 到什麼程度才可以出去找工作?」,由於我本人不從事後端開發,所以無法給出合理的建議。正好借著強哥這篇經驗分享,希望能給大家一些啟發和幫助。
  • 淺談後端面試指南
    (點擊上方公眾號,可快速關注)來源:koala bear ,wsfdl.com/編程隨想/2016/09/09/淺談後端技術面試
  • Python開發簡單爬蟲【學習資料總結】
    開發爬蟲步驟 python語言基礎:(帶你熟悉python語言的特性,學會使用python開發環境,使用python開發一些簡單的案例)
  • 學IT選Java還是Python?做前端還是做後端?聽聽15年的老IT怎麼說
    很多年輕人進入IT行業,都很願意做開發,進了公司,你不讓他幹開發,給他整運維,他會給你急。我們就講講關於開發的諸多問題一起討論下。第一個IT開發它都涉及什麼領域。包括web前端開發,後端開發,移動端開發,微信小程序開發和嵌入式開發。按照我們的客戶需求定製出客戶需要的產品。
  • 三年半 Java 後端鵝廠面試經歷
    經過半年的沉澱,加上對MySQL,redis和分布式這塊的補齊,終於開始重拾面試信心,再次出徵。
  • 聊聊python面試這件事兒
    其實感覺蠻經常的和很多人在聊這個話題. 尤其是建了一個python學習交流群之後, 群裡討論的, 私聊我的, 問的比較多的真的有python面試相關的. 總結起來大概以下幾種:python面試最常用的面試題有哪些?某個面試題感覺回答的不好, 問怎麼回答比較好.有什麼面試經驗可以分享.
  • 「全棧之路」Web前端開發的後端指南
    前言在若干次前的一場面試,面試官看我做過 python爬蟲/後端 的工作,順帶問了我些後端相關的問題:你覺得什麼是後端?
  • 年薪30萬的騰訊公司Python工程師面試題曝光!漲知識了!
    作為Python開發工程師,進入大公司是開啟職業新起點的關鍵,今天給小夥伴特別分享了其在騰訊公司面試Python工程師的題目和經歷,希望對廣大Python工程師的求職者有一個幫助。崗位職責/工作內容/崗位要求主要職責:1、負責按照架構師選定的技術路線,用Python編程實現系統伺服器端的業務流程;2、負責與前端開發人員合作,完成系統前、後端通信的API設計和開發實現。
  • 在web開發中,為什麼前端比後端更得到轉行程式設計師的青睞?必看
    1、Web開發分類與區別 人們通常將Web分為前端和後端,前端相關的職位有前端設計師(UI/UE),前端開發工程師,後端相關的有後端開發工程師。
  • 記一次 Google 面試經歷
    但是,我可以寫我大概的面試過程,以及我做了哪些準備。首先,這是谷歌——所以我當然不會讓我在那裡工作的朋友不推薦我。我沒有經過電話採訪,因為我是「本地」的,所以我被直接邀請到公司面試。我個人認為,面對面絕對比電話面試好,我很幸運。首先,我和招聘人員很簡短地聊了一下,他告訴我我需要使用白板和進程,接著是兩個軟體工程師分別對我進行了45分鐘一對一的兩場面試。
  • 後端開發該不該學前端開發?
    細問之下得知是前端開發工程師請假回老家了。那你自己怎麼不安排別人解決一下?我們部門只有一個用Vue.js做前端開發的,其他人不會呀。你倒說得理直氣壯的,你怎麼知道做後端開發的就不會呢?於是我就找了幾個做後端開發的同事溝通了一下,其中有一個人會。有關研發經理的管理能力,解決問題的態度,咱暫且不論,先來說說前端技術一般是指哪些?
  • 前端開發人員想學習後端語言在Java和Python中該如何選擇
    當前作為前端開發人員來說,掌握一門後端開發語言是有必要的,因為當前隨著Nodejs的發展,前端開發後端化也是一個發展趨勢,另外掌握後端開發技術對於前端開發來說也是有一定幫助作用的。Java和Python都可以用於後端服務開發,Java語言的特點在於性能穩定且擴展性比較強,通常是大型網絡服務平臺的重要選擇之一,而Python語言的特點是開發周期短且調整方便,通常中小型後端服務選擇Python比較多。從目前的應用形式來看,選擇學習Java是比較合適的,原因有以下三點:第一:Java生態健全。