我在Github逛了3天,終於找到了這份Python面試寶典!

2021-03-02 Python愛好者社區
最近面試了十幾個人,主要想招Python熟練的,然後問了些Python問題,發現他們大部分答得都不太好。
之後我想了想,好的Python面試題確實難找,找到了問問來面試的人,基本又答不出來,我在Github上逛了3天,找到了這份沒被挖掘的寶藏Python面試題!https://github.com/jackfrued/Python-Interview-Bible例如讓你寫一個刪除列表中重複元素的函數,要求去重後元素相對位置保持不變。你用Python會怎麼寫?

def dedup(items):
    no_dup_items = []
    seen = set()
    for item in items:
        if item not in seen:
            no_dup_items.append(item)
            seen.add(item)
    return no_dup_items

甚至幫你想辦法進一步優化,例如改寫成為一個生成器:

def dedup(items):
    seen = set()
    for item in items:
        if item not in seen:
            yield item
            seen.add(item)

作者提到這個面試時經常出現,並給出了以下拓展學習內容擴展:由於Python中的集合底層使用哈希存儲,所以集合的in和not in成員運算在性能上遠遠優於列表,所以上面的代碼我們使用了集合來保存已經出現過的元素。集合中的元素必須是hashable對象,因此上面的代碼在列表元素不是hashable對象時會失效,要解決這個問題可以給函數增加一個參數,該參數可以設計為返回哈希碼或hashable對象的函數。

def multiply():
    return [lambda x: i * x for i in range(4)]

print([m(100) for m in multiply()])

上面代碼的運行結果很容易被誤判為[0, 100, 200, 300]。首先需要注意的是multiply函數用生成式語法返回了一個列表,列表中保存了4個Lambda函數,這4個Lambda函數會返回傳入的參數乘以i的結果。需要注意的是這裡有閉包(closure)現象,multiply函數中的局部變量i的生命周期被延展了,由於i最終的值是3,所以通過m(100)調列表中的Lambda函數時會返回300,而且4個調用都是如此。如果想得到[0, 100, 200, 300]這個結果,可以按照下面幾種方式來修改multiply函數。

def multiply():
    return (lambda x: i * x for i in range(4))

print([m(100) for m in multiply()])

def multiply():
    for i in range(4):
        yield lambda x: x * i

print([m(100) for m in multiply()])

from functools import partial
from operator import __mul__

def multiply():
    return [partial(__mul__, i) for i in range(4)]

print([m(100) for m in multiply()])

現有2元、3元、5元共三種面額的貨幣,如果需要找零99元,一共有多少種找零的方式?其實還有一個非常類似的題目:「一個小朋友走樓梯,一次可以走1個臺階、2個臺階或3個臺階,問走完10個臺階一共有多少種走法?」,這兩個題目的思路是一樣,如果用遞歸函數來寫的話非常簡單。

from functools import lru_cache


@lru_cache()
def change_money(total):
    if total == 0:
        return 1
    if total < 0:
        return 0
    return change_money(total - 2) + change_money(total - 3) + \
        change_money(total - 5)

說明:在上面的代碼中,我們用lru_cache裝飾器裝飾了遞歸函數change_money,如果不做這個優化,上面代碼的漸近時間複雜度將會是$O(3^N)$,而如果參數total的值是99,這個運算量是非常巨大的。lru_cache裝飾器會緩存函數的執行結果,這樣就可以減少重複運算所造成的開銷,這是空間換時間的策略,也是動態規劃的編程思想。
其實,還有很多好的面試題都在這個面試寶典中,例如:說說Python中的淺拷貝和深拷貝。Lambda函數是什麼,舉例說明的它的應用場景。不使用中間變量,交換兩個變量a和b的值。在Python中如何實現單例模式。Python是如何實現內存管理的?說一下你對Python中迭代器和生成器的理解。正則表達式的match方法和search方法有什麼區別?用Python代碼實現Python內置函數max。Python中為什麼沒有函數重載?使用Python代碼實現遍歷一個文件夾的操作。__init__和__new__方法有什麼區別?輸入年月日,判斷這個日期是這一年的第幾天。平常工作中用什麼工具進行靜態代碼分析。上面的問題你都會了麼?建議大家趕緊去看看,不會的學起來,不僅筆試面試會用上,平時優化代碼秀操作也是必備啊!

重磅!Python交流已成立

為了給小夥伴們提供一個互相交流的技術平臺,特地開通了Python交流群。群裡有不少技術大神,不時會分享一些技術要點,更有一些資源收藏愛好者不時分享一些優質的學習資料。(免費,不賣課!)


▲長按掃碼

相關焦點

  • 聊聊python面試這件事兒
    聊聊python面試這件事兒前言今天在微博上被私信, 聊了好久的關於python面試的事情.其實感覺蠻經常的和很多人在聊這個話題. 尤其是建了一個python學習交流群之後, 群裡討論的, 私聊我的, 問的比較多的真的有python面試相關的. 總結起來大概以下幾種:python面試最常用的面試題有哪些?某個面試題感覺回答的不好, 問怎麼回答比較好.有什麼面試經驗可以分享.
  • Python & 機器學習項目集錦 | GitHub Top 45
    /年度開源Python項目 [平均4,078星]連結:https://medium.mybridge.co/30-amazing-python-projects-for-the-past-year-v-2018-9c310b04cdb3
  • Github最值一讀開源好書及BAT面試題庫
    對技術人員而言,進階路上似乎一直找不到合適的書籍或者資源可供學習,即便找到了,似乎也沒有合適的題庫可以練習。筆者近日在Github上發現了很多不錯的技術書籍,這其中也包括一些中文譯本,程式設計師可以免費閱讀。同時,還有來自於百度、小米、美團、58、獵豹、360、新浪、搜狐的內部面試題庫可供廣大程式設計師練手,你確定不仔細看看?
  • 新浪圖床快速下載markdown圖片並遷移至github教程
    這篇教程就是就是為了幫助同樣用了新浪圖床的道友,快速把圖片遷移到其他圖床~因為之前有過用其他小平臺圖床,然後炸圖的經歷,加強了我對圖床的憂患意識。於是在換到新浪圖床的時候,在github上找到了一個python備份markdown圖片的倉庫。具體可以參考python備份hexo博客圖片這篇文章。
  • 不容錯過的 github萬星程式設計師面試寶典
    今天,我們要給大家推薦的是一份包含了阿里巴巴、華為、百度、騰訊、美團、字節跳動、滴滴、京東等知名網際網路公司技術面試題的 github 項目。截止目前,該項目已獲得 16000+ star。項目的 github 地址為:https://github.com/0voice/interview_internal_reference
  • 《Python程式設計師面試算法寶典》PDF超清版開源了文末附下載方式
    、分類歸納,提煉出算法面試的各種應對技巧,是一本Python程式設計師算法面試的圖書寶典。全面介紹Python程式設計師面試筆試技巧和方法,教你如何以「不變應萬變」。√ 兩萬多行代碼,100多個知識點,全面覆蓋Python程式設計師各類面試題型。√ 15年開發經驗、實戰技巧總結,站在「巨人」的肩膀上,讓學習走捷徑。
  • 1月份Github上熱門Python開源項目!
    它對BERT進行了三個改造: 詞嵌入向量參數的因式分解 跨層參數共享 段落連續性任務3. spiderfoothttps://github.com/smicallef/spiderfootStar 3802
  • 算法工程師面試問題及資料超詳細合集(多家公司算法崗面經/代碼實戰/網課/競賽等)
    阿里巴巴計算機視覺算法實習生視頻面試 website面試經驗AI算法工程師(面試官角度) website從零基礎到BAT算法崗SP——秋招準備攻略 website螞蟻金服/曠視/虹軟/騰訊優圖暑期實習offer面經 website我在美團的這兩年(附校招筆試/面試/面經分享) website1000 面試題,BAT
  • 5個火爆 GitHub 的 Python 練習項目,快來收藏!
    所以找到自己感興趣、能夠跟著動手和學習的 Python 項目是特別重要的,這樣才能把學會的 Python 知識用起來,不斷地提高。最終從新手晉升為高手!今天我們分享的這些項目,保證你會眼前一亮,跟著學習下來,成為高手穩穩的!1. Python-100-Days這是一個完全面向小白的 Python 系列教程項目,可以說是超級貼心、從零基礎到進階都安排好了!
  • 我在GitHub上找到了這些遊戲項目,刺激!
    /javascript-tetris遊戲在線地址:https://codeincomplete.com/games/tetris/除了上述俄羅斯方塊遊戲外,還有一款不錯的,我也是非常喜歡,這個項目是通過 React 實現的,遊戲框架使用的是 React + Redux,其中再加入了 Immutable,用它的實例來做來 Redux 的 state,跟上述實現的方式還是有所不同
  • 推薦這 10 個 GitHub 上超火的前端面試項目,打造自己的加薪寶庫!
    這不僅僅是一份用於求職面試的攻略,也是一份前端 er 用來檢視自己,實現突破的寶典。希望通過這個指南,大家可以打通自己的任督二脈,在前端的路上更進一步。前端面試每日 3+1,以面試題來驅動學習,提倡每日學習與思考,每天進步一點!每天早上 5 點純手工發布面試題(死磕自己,愉悅大家)。https://github.com/haizlin/fe-interviewnode-interview
  • 資源│機器學習、深度學習、算法工程師等 AI 相關崗位面試需要知識
    微信公眾號「乾貨」AI面試必備/深度學習100問附答案解析阿里巴巴計算機視覺算法實習生視頻面試面試經驗 AI 算法工程師(面試官角度)從零基礎到 BAT 算法崗 SP——秋招準備攻略螞蟻金服/曠視/虹軟/騰訊優圖暑期實習 offer 面經我在美團的這兩年(附校招筆試/面試/面經分享)1000
  • TheFuck—Python寫的超實用命令糾正工具
    ' (main) Command 'python' from package 'python3' (main)zsh: command not found: puthon➜ fuckpython-dev python3-pip python3-setuptoolssudo pip3 install thefuck在FreeBSD上,使用以下命令安裝The Fuck:在其他系統上, 使用pip安裝The Fuck
  • 2天學全Python面試基礎(1)
    通過列出30個python面試問題和答案,本文涵蓋在Python面試中經常問到的問題。如果您是該行業的新手,本基礎篇將極大地幫助您。我們衷心希望這篇文章在準備面試時會有所幫助。Python的需求量很大,必須與成千上萬擁有與python技能的申請人競爭,才能在就業市場中找到工作。
  • 零基礎入門C++到進騰訊,你還差這份開源寶典
    開源最前線(ID:OpenSourceTop) 猿妹整編項目地址:https://github.com近日,一位在讀研究生的C++學習筆記爆紅Github,因為,他就是憑藉這份筆記斬獲騰訊offer,關鍵他是從研一才開始自學C++,簡而言之,這是一份貨真價實的【高薪寶典】——CPlusPlusThings。
  • 乾貨| 請收下這份2018學習清單:150個最好的機器學習,NLP和Python...
    在今年秋季開始準備博士項目的時候,我已經精選了一些有關機器學習和NLP的優質網絡資源。一般我會找一個有意思的教程或者視頻,再由此找到三四個,甚至更多的教程或者視頻。猛回頭,發現標收藏夾又多了20個資源待我學習(推薦提升效率工具Tab Bundler)。
  • 百道Python面試題實現,搞定Python編程就靠它
    在春招之前,我們就曾介紹過 GitHub 萬星的 ML 算法工程師面試指南,它提供了完整的面試知識點、編程題及題解、各科技公司的面試題錦等內容。讀者可查閱該項目了解機器學習面試需要準備哪些知識。項目地址:https://github.com/imhuay/Algorithm_Interview_Notes-Chinese在這個 2W+ 收藏量的 GitHub 項目中,作者前一部分主要介紹了機器學習及各子領域的知識點。
  • 2019年第一季度GitHub上最熱門的開源項目
    Star 16740這是一個面試題資源,該項目涵蓋2018/2019/校招/春招/秋招/算法/機器學習(Machine Learning)/深度學習(Deep Learning)/自然語言處理(NLP)/C/C++/Python/面試筆記https://github.com/trimstray/nginx-quick-reference Star 6952
  • 【Python】RST文件打開——以torchtext官方github文檔為例
    下載了源碼,看看github有沒有相關的官方文檔。對於一些github上的項目,我們通常看到的readme是md形式的,然而下載torchtext之後,發現並沒有readme.md文件,到是有一個readme.rst的文件,並且能夠在github上完美的展示。
  • 我新鮮出爐的 plist 圖集拆圖工具!github
    前兩天,有位老朋友找到我,尋求 Cocos 圖集的裁圖工具,我順手給了一個 Windows 版本的 PngSplit.exe,我曾經用過多次感覺還行!❝小知識:初學的夥伴可能還不清楚,什麼是「圖集」?代碼大概分成兩大部分:解析 plist 文件,解析出子圖在圖集中的矩形位置大的思維有了,解析 plist 應該是有對應的工具庫的,我也是 Python 小白 面向百度編程 絕對是不能不掌握的技巧輸入:python3 plist 解析