Python程序員面試常用基礎(chǔ)問(wèn)題解析

      網(wǎng)友投稿 766 2025-04-01

      1. 什么是Python?

      Python是一種編程語(yǔ)言,它有對(duì)象、模塊、線程、異常處理和自動(dòng)內(nèi)存管理。可以加入與其他語(yǔ)言的對(duì)比。下面是回答這一問(wèn)題的幾個(gè)關(guān)鍵點(diǎn):

      a. Python是一種解釋型語(yǔ)言,python代碼在運(yùn)行之前不需要編譯。

      b. Python是動(dòng)態(tài)類型語(yǔ)言,在聲明變量時(shí),不需要說(shuō)明變量的類型。

      c. Python適合面向?qū)ο?/a>的編程,因?yàn)樗С滞ㄟ^(guò)組合與繼承的方式定義類。

      d. 在Python語(yǔ)言中,函數(shù)是第一類對(duì)象。

      e. Python代碼編寫(xiě)快,但是運(yùn)行速度比編譯語(yǔ)言通常要慢。

      f. Python用途廣泛,常被用作“膠水語(yǔ)言”,可幫助其他語(yǔ)言和組件改善運(yùn)行狀況。

      g. 使用Python,程序員可以專注于算法和數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì),而不用處理底層的細(xì)節(jié)。

      2. 什么是Python裝飾器?

      裝飾器的本質(zhì)也是一種函數(shù)。他可以在不改變函數(shù)原有功能的前提下,為其增加其他的功能。

      3. 什么是Python的命名空間?

      在Python中,所有的名字都存在于一個(gè)空間中,它們?cè)谠摽臻g中存在和被操作——這就是命名空間。它就好像一個(gè)盒子,每一個(gè)變量名字都對(duì)應(yīng)裝著一個(gè)對(duì)象。當(dāng)查詢變量的時(shí)候,會(huì)從該盒子里面尋找相應(yīng)的對(duì)象。

      4. Lambda函數(shù)是什么?

      這是一個(gè)常被用于代碼中的單個(gè)表達(dá)式的匿名函數(shù)。

      5. args,kwargs?參數(shù)是什么?

      如果我們不確定要往函數(shù)中傳入多少個(gè)參數(shù),或者我們想往函數(shù)中以列表和元組的形式傳參數(shù)時(shí),那就使要用args;如果我們不知道要往函數(shù)中傳入多少個(gè)關(guān)鍵詞參數(shù),或者想傳入字典的值作為關(guān)鍵詞參數(shù)時(shí),那就要使用kwargs。

      6. unittest是什么?

      在Python中,unittest是Python中的單元測(cè)試框架。它擁有支持共享搭建、自動(dòng)測(cè)試、在測(cè)試中暫停代碼、將不同測(cè)試迭代成一組,等等的功能。

      7. 構(gòu)造器是什么?

      構(gòu)造器是實(shí)現(xiàn)迭代器的一種機(jī)制。它功能的實(shí)現(xiàn)依賴于yield表達(dá)式,除此之外它跟普通的函數(shù)沒(méi)有兩樣。

      8. 負(fù)索引是什么?

      Python中的序列索引可以是正也可以是負(fù)。如果是正索引,0是序列中的第一個(gè)索引,1是第二個(gè)索引。如果是負(fù)索引,(-1)是最后一個(gè)索引而(-2)是倒數(shù)第二個(gè)索引。

      9. Python如何實(shí)現(xiàn)單例模式?其他23種設(shè)計(jì)模式python如何實(shí)現(xiàn)?

      單例模式主要有四種方法:new、共享屬性、裝飾器、import。

      其他23種設(shè)計(jì)模式可基本分為創(chuàng)建型、結(jié)構(gòu)型和行為型模式。

      創(chuàng)建模式,提供實(shí)例化的方法,為適合的狀況提供相應(yīng)的對(duì)象創(chuàng)建方法。

      結(jié)構(gòu)化模式,通常用來(lái)處理實(shí)體之間的關(guān)系,使得這些實(shí)體能夠更好地協(xié)同工作。

      行為模式,用于在不同的實(shí)體建進(jìn)行通信,為實(shí)體之間的通信提供更容易,更靈活的通信方法。

      各模式的實(shí)現(xiàn)可根據(jù)其特點(diǎn)編寫(xiě)代碼(限于篇幅,此處不做示例)

      10. 如何遍歷一個(gè)內(nèi)部未知的文件夾?

      常用的有以下這幾種辦法:os.path.walk(),os.walk(),listdir

      11. MySql數(shù)據(jù)庫(kù)如何分區(qū)、分表?

      分表可以通過(guò)三種方式:mysql集群、自定義規(guī)則和merge存儲(chǔ)引擎。

      分區(qū)有四類:

      RANGE 分區(qū):基于屬于一個(gè)給定連續(xù)區(qū)間的列值,把多行分配給分區(qū)。

      LIST 分區(qū):類似于按RANGE分區(qū),區(qū)別在于LIST分區(qū)是基于列值匹配一個(gè)離散值集合中的某個(gè)值來(lái)進(jìn)行選擇。

      HASH分區(qū):基于用戶定義的表達(dá)式的返回值來(lái)進(jìn)行選擇的分區(qū),該表達(dá)式使用將要插入到表中的這些行的列值進(jìn)行計(jì)算。這個(gè)函數(shù)可以包含MySQL 中有效的、產(chǎn)生非負(fù)整數(shù)值的任何表達(dá)式。

      KEY 分區(qū):類似于按HASH分區(qū),區(qū)別在于KEY分區(qū)只支持計(jì)算一列或多列,且MySQL 服務(wù)器提供其自身的哈希函數(shù)。必須有一列或多列包含整數(shù)值

      12. 如何理解MVC/MTV框架?

      MVC就是把Web應(yīng)用分為模型(M),控制器(C)和視圖(V)三層,他們之間以一種插件式的、松耦合的方式連接在一起。MTV模式本質(zhì)上和MVC是一樣的,也是為了各組件間保持松耦合關(guān)系,只是定義上有些許不同。

      13. 數(shù)組和元組之間的區(qū)別?

      數(shù)組在python中叫作列表。列表可以修改,而元組不可以修改,如果元組中僅有一個(gè)元素,則要在元素后加上逗號(hào)。元組和列表的查詢方式一樣。元組只可讀不可修改,如果程序中的數(shù)據(jù)不允許修改可用元組。

      14. _new_和_init_的區(qū)別?

      Python程序員面試常用基礎(chǔ)問(wèn)題解析

      __init__是當(dāng)實(shí)例對(duì)象創(chuàng)建完成后被調(diào)用的,然后設(shè)置對(duì)象屬性的一些初始值。

      __new__是在實(shí)例創(chuàng)建之前被調(diào)用的,因?yàn)樗娜蝿?wù)就是創(chuàng)建實(shí)例然后返回該實(shí)例,是個(gè)靜態(tài)方法。

      也就是,__new__在__init__之前被調(diào)用,__new__的返回值(實(shí)例)將傳遞給__init__方法的第一個(gè)參數(shù),然后__init__給這個(gè)實(shí)例設(shè)置一些參數(shù)。

      15. Python中單下劃線和雙下劃綫的區(qū)別?

      “單下劃線” 開(kāi)始的成員變量叫做保護(hù)變量,意思是只有類對(duì)象和子類對(duì)象自己能訪問(wèn)到這些變量;

      “雙下劃線” 開(kāi)始的是私有成員,意思是只有類對(duì)象自己能訪問(wèn),連子類對(duì)象也不能訪問(wèn)到這個(gè)數(shù)據(jù)

      16. 淺拷貝與深拷貝的區(qū)別是?

      在python中,對(duì)象賦值實(shí)際上是對(duì)象的引用。淺拷貝,沒(méi)有拷貝子對(duì)象,所以原始數(shù)據(jù)改變,子對(duì)象會(huì)改變,而深拷貝,包含對(duì)象里面的自對(duì)象的拷貝,所以原始對(duì)象的改變不會(huì)造成深拷貝里任何子元素的改變。

      17. 多進(jìn)程與多線程的區(qū)別?

      a. 簡(jiǎn)而言之,一個(gè)程序至少有一個(gè)進(jìn)程,一個(gè)進(jìn)程至少有一個(gè)線程。

      b. 線程的劃分尺度小于進(jìn)程,使得多線程程序的并發(fā)性高。

      c. 另外,進(jìn)程在執(zhí)行過(guò)程中擁有獨(dú)立的內(nèi)存單元,而多個(gè)線程共享內(nèi)存,從而極大地提高了程序的運(yùn)行效率。

      d. 線程在執(zhí)行過(guò)程中與進(jìn)程還是有區(qū)別的。每個(gè)獨(dú)立的線程有一個(gè)程序運(yùn)行的入口、順序執(zhí)行序列和程序的出口。但是線程不能夠獨(dú)立執(zhí)行,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個(gè)線程執(zhí)行控制。

      e. 從邏輯角度來(lái)看,多線程的意義在于一個(gè)應(yīng)用程序中,有多個(gè)執(zhí)行部分可以同時(shí)執(zhí)行。但操作系統(tǒng)并沒(méi)有將多個(gè)線程看做多個(gè)獨(dú)立的應(yīng)用,來(lái)實(shí)現(xiàn)進(jìn)程的調(diào)度和管理以及資源分配。這就是進(jìn)程和線程的重要區(qū)別。

      18. select和epoll的區(qū)別?

      a. select實(shí)現(xiàn)需要自己不斷輪詢所有fd集合,直到設(shè)備就緒,期間可能要睡眠和喚醒多次交替。而epoll其實(shí)也需要調(diào)用epoll_wait不斷輪詢就緒鏈表,期間也可能多次睡眠和喚醒交替,但是它是設(shè)備就緒時(shí),調(diào)用回調(diào)函數(shù),把就緒fd放入就緒鏈表中,并喚醒在epoll_wait中進(jìn)入睡眠的進(jìn)程。雖然都要睡眠和交替,但是select在“醒著”的時(shí)候要遍歷整個(gè)fd集合,而epoll在“醒著”的時(shí)候只要判斷一下就緒鏈表是否為空就行了,這節(jié)省了大量的CPU時(shí)間。

      b. select每次調(diào)用都要把fd集合從用戶態(tài)往內(nèi)核態(tài)拷貝一次,并且要把current往設(shè)備等待隊(duì)列中掛一次,而epoll只要一次拷貝,而且把current往等待隊(duì)列上掛也只掛一次(在epoll_wait的開(kāi)始,注意這里的等待隊(duì)列并不是設(shè)備等待隊(duì)列,只是一個(gè)epoll內(nèi)部定義的等待隊(duì)列)。這也能節(jié)省不少的開(kāi)銷。

      19. TCP和UDP的區(qū)別?邊緣觸發(fā)和水平觸發(fā)的區(qū)別?

      a. 基本區(qū)別:

      基于連接與無(wú)連接

      TCP要求系統(tǒng)資源較多,UDP較少;

      UDP程序結(jié)構(gòu)較簡(jiǎn)單

      流模式(TCP)與數(shù)據(jù)報(bào)模式(UDP);

      TCP保證數(shù)據(jù)正確性,UDP可能丟包

      TCP保證數(shù)據(jù)順序,UDP不保證

      b. 編程中的區(qū)別

      socket()的參數(shù)不同

      UDP Server不需要調(diào)用listen和accept

      UDP收發(fā)數(shù)據(jù)用sendto/recvfrom函數(shù)

      TCP:地址信息在connect/accept時(shí)確定

      UDP:在sendto/recvfrom函數(shù)中每次均 需指定地址信息

      UDP:shutdown函數(shù)無(wú)效

      20. HTTP連接:get和post的區(qū)別?

      GET請(qǐng)求,請(qǐng)求的數(shù)據(jù)會(huì)附加在URL之后,以?分割URL和傳輸數(shù)據(jù),多個(gè)參數(shù)用&連接。URL的編碼格式采用的是ASCII編碼,而不是uniclde,即是說(shuō)所有的非ASCII字符都要編碼之后再傳輸。

      POST請(qǐng)求:POST請(qǐng)求會(huì)把請(qǐng)求的數(shù)據(jù)放置在HTTP請(qǐng)求包的包體中。上面的item=bandsaw就是實(shí)際的傳輸數(shù)據(jù)。

      因此,GET請(qǐng)求的數(shù)據(jù)會(huì)暴露在地址欄中,而POST請(qǐng)求則不會(huì)。

      21. ecb和cbc模式有什么區(qū)別?

      ECB:是一種基礎(chǔ)的加密方式,密文被分割成分組長(zhǎng)度相等的塊(不足補(bǔ)齊),然后單獨(dú)一個(gè)個(gè)加密,一個(gè)個(gè)輸出組成密文。

      CBC:是一種循環(huán)模式,前一個(gè)分組的密文和當(dāng)前分組的明文異或操作后再加密,這樣做的目的是增強(qiáng)破解難度。ECB和CBC的加密結(jié)果是不一樣的,兩者的模式不同,而且CBC會(huì)在第一個(gè)密碼塊運(yùn)算時(shí)加入一個(gè)初始化向量。

      22. 對(duì)稱加密與非對(duì)稱加密的區(qū)別?

      對(duì)稱加密,需要對(duì)加密和解密使用相同密鑰的加密算法。由于其速度快,對(duì)稱性加密通常在消息發(fā)送方需要加密大量數(shù)據(jù)時(shí)使用。所以,對(duì)稱性加密也稱為密鑰加密。

      而非對(duì)稱加密算法需要兩個(gè)密鑰:公開(kāi)密鑰和私有密鑰。公開(kāi)密鑰與私有密鑰是一對(duì),如果用公開(kāi)密鑰對(duì)數(shù)據(jù)進(jìn)行加密,只有用對(duì)應(yīng)的私有密鑰才能解密;如果用私有密鑰對(duì)數(shù)據(jù)進(jìn)行加密,那么只有用對(duì)應(yīng)的公開(kāi)密鑰才能解密。

      23. NoSQL和關(guān)系數(shù)據(jù)庫(kù)的區(qū)別?

      a. SQL數(shù)據(jù)存在特定結(jié)構(gòu)的表中;而NoSQL則更加靈活和可擴(kuò)展,存儲(chǔ)方式可以省是JSON文檔、哈希表或者其他方式。

      b. 在SQL中,必須定義好表和字段結(jié)構(gòu)后才能添加數(shù)據(jù),例如定義表的主鍵(primary key),索引(index),觸發(fā)器(trigger),存儲(chǔ)過(guò)程(stored procedure)等。表結(jié)構(gòu)可以在被定義之后更新,但是如果有比較大的結(jié)構(gòu)變更的話就會(huì)變得比較復(fù)雜。在NoSQL中,數(shù)據(jù)可以在任何時(shí)候任何地方添加,不需要先定義表。

      c. SQL中如果需要增加外部關(guān)聯(lián)數(shù)據(jù)的話,規(guī)范化做法是在原表中增加一個(gè)外鍵,關(guān)聯(lián)外部數(shù)據(jù)表。而在NoSQL中除了這種規(guī)范化的外部數(shù)據(jù)表做法以外,我們還能用如下的非規(guī)范化方式把外部數(shù)據(jù)直接放到原數(shù)據(jù)集中,以提高查詢效率。缺點(diǎn)也比較明顯,更新審核人數(shù)據(jù)的時(shí)候?qū)?huì)比較麻煩。

      d. SQL中可以使用JOIN表鏈接方式將多個(gè)關(guān)系數(shù)據(jù)表中的數(shù)據(jù)用一條簡(jiǎn)單的查詢語(yǔ)句查詢出來(lái)。NoSQL暫未提供類似JOIN的查詢方式對(duì)多個(gè)數(shù)據(jù)集中的數(shù)據(jù)做查詢。所以大部分NoSQL使用非規(guī)范化的數(shù)據(jù)存儲(chǔ)方式存儲(chǔ)數(shù)據(jù)。

      e. SQL中不允許刪除已經(jīng)被使用的外部數(shù)據(jù),而NoSQL中則沒(méi)有這種強(qiáng)耦合的概念,可以隨時(shí)刪除任何數(shù)據(jù)。

      f. SQL中如果多張表數(shù)據(jù)需要同批次被更新,即如果其中一張表更新失敗的話其他表也不能更新成功。這種場(chǎng)景可以通過(guò)事務(wù)來(lái)控制,可以在所有命令完成后再統(tǒng)一提交事務(wù)。而NoSQL中沒(méi)有事務(wù)這個(gè)概念,每一個(gè)數(shù)據(jù)集的操作都是原子級(jí)的。

      g. 在相同水平的系統(tǒng)設(shè)計(jì)的前提下,因?yàn)镹oSQL中省略了JOIN查詢的消耗,故理論上性能上是優(yōu)于SQL的。

      24. os與sys模塊的區(qū)別?

      前者提供了一種方便的使用操作系統(tǒng)函數(shù)的方法。后者提供訪問(wèn)由解釋器使用或維護(hù)的變量和與解釋器進(jìn)行交互的函數(shù)。

      Python 開(kāi)發(fā)者

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:游戲編程之四 diectxdarw基礎(chǔ)篇(編程游戲)
      下一篇:excel2003快速制表的教程(excel2003表格制作教程入門(mén))
      相關(guān)文章
      亚洲人成影院午夜网站| 最新亚洲成av人免费看| 国产AV无码专区亚洲AV琪琪| 亚洲AV无码专区亚洲AV伊甸园| 一区国严二区亚洲三区| 亚洲AV无码一区二区乱子仑| 亚洲一级大黄大色毛片| 亚洲日产2021三区| 亚洲成A∨人片在线观看无码| 亚洲精品自产拍在线观看| 亚洲中文字幕无码爆乳av中文| 亚洲人成色77777在线观看| 亚洲夂夂婷婷色拍WW47| 亚洲中文字幕无码一去台湾| 亚洲AV无码久久久久网站蜜桃| 亚洲一区二区三区91| 亚洲精品视频在线免费| 亚洲熟妇av一区| va天堂va亚洲va影视中文字幕 | 亚洲一级特黄大片无码毛片 | 亚洲视频日韩视频| 亚洲女人影院想要爱| 国产精品亚洲片在线va| 亚洲色大成网站www尤物| 亚洲av无码无线在线观看| 亚洲AV色无码乱码在线观看 | 婷婷亚洲综合一区二区| 亚洲国产成人VA在线观看| 4338×亚洲全国最大色成网站| 亚洲无人区午夜福利码高清完整版| 亚洲女初尝黑人巨高清| 中文字幕一精品亚洲无线一区| 亚洲人成人77777网站| 亚洲av永久无码精品网站| 91嫩草私人成人亚洲影院| 亚洲大香伊人蕉在人依线| 亚洲国产精品一区二区三区在线观看 | 亚洲国产高清在线一区二区三区| ZZIJZZIJ亚洲日本少妇JIZJIZ| 国产亚洲综合久久系列| 337p日本欧洲亚洲大胆精品555588|