Python面試題目--彙總

操做系統

1 select,poll和epoll

其實全部的I/O都是輪詢的方法,只不過實現的層面不一樣罷了.javascript

這個問題可能有點深刻了,但相信能回答出這個問題是對I/O多路複用有很好的瞭解了.其中tornado使用的就是epoll的.html

selec,poll和epoll區別總結java

基本上select有3個缺點:python

  1. 鏈接數受限
  2. 查找配對速度慢
  3. 數據由內核拷貝到用戶態

poll改善了第一個缺點mysql

epoll改了三個缺點.linux

關於epoll的: http://www.cnblogs.com/my_life/articles/3968782.htmlnginx

2 調度算法

  1. 先來先服務(FCFS, First Come First Serve)
  2. 短做業優先(SJF, Shortest Job First)
  3. 最高優先權調度(Priority Scheduling)
  4. 時間片輪轉(RR, Round Robin)
  5. 多級反饋隊列調度(multilevel feedback queue scheduling)

實時調度算法:git

  1. 最先截至時間優先 EDF
  2. 最低鬆弛度優先 LLF

3 死鎖

緣由:github

  1. 競爭資源
  2. 程序推動順序不當

必要條件:web

  1. 互斥條件
  2. 請求和保持條件
  3. 不剝奪條件
  4. 環路等待條件

處理死鎖基本方法:

  1. 預防死鎖(摒棄除1之外的條件)
  2. 避免死鎖(銀行家算法)
  3. 檢測死鎖(資源分配圖)
  4. 解除死鎖
    1. 剝奪資源
    2. 撤銷進程

4 程序編譯與連接

推薦: http://www.ruanyifeng.com/blog/2014/11/compiler.html

Bulid過程能夠分解爲4個步驟:預處理(Prepressing), 編譯(Compilation)、彙編(Assembly)、連接(Linking)

C語言爲例:

1 預處理

預編譯過程主要處理那些源文件中的以「#」開始的預編譯指令,主要處理規則有:

  1. 將全部的「#define」刪除,並展開所用的宏定義
  2. 處理全部條件預編譯指令,好比「#if」、「#ifdef」、 「#elif」、「#endif」
  3. 處理「#include」預編譯指令,將被包含的文件插入到該編譯指令的位置,注:此過程是遞歸進行的
  4. 刪除全部註釋
  5. 添加行號和文件名標識,以便於編譯時編譯器產生調試用的行號信息以及用於編譯時產生編譯錯誤或警告時可顯示行號
  6. 保留全部的#pragma編譯器指令。

2 編譯

編譯過程就是把預處理完的文件進行一系列的詞法分析、語法分析、語義分析及優化後生成相應的彙編代碼文件。這個過程是整個程序構建的核心部分。

3 彙編

彙編器是將彙編代碼轉化成機器能夠執行的指令,每一條彙編語句幾乎都是一條機器指令。通過編譯、連接、彙編輸出的文件成爲目標文件(Object File)

4 連接

連接的主要內容就是把各個模塊之間相互引用的部分處理好,使各個模塊能夠正確的拼接。 連接的主要過程包塊 地址和空間的分配(Address and Storage Allocation)、符號決議(Symbol Resolution)和重定位(Relocation)等步驟。

5 靜態連接和動態連接

靜態連接方法:靜態連接的時候,載入代碼就會把程序會用到的動態代碼或動態代碼的地址肯定下來 靜態庫的連接可使用靜態連接,動態連接庫也可使用這種方法連接導入庫

動態連接方法:使用這種方式的程序並不在一開始就完成動態連接,而是直到真正調用動態庫代碼時,載入程序才計算(被調用的那部分)動態代碼的邏輯地址,而後等到某個時候,程序又須要調用另外某塊動態代碼時,載入程序又去計算這部分代碼的邏輯地址,因此,這種方式使程序初始化時間較短,但運行期間的性能比不上靜態連接的程序

6 虛擬內存技術

虛擬存儲器是指具備請求調入功能和置換功能,能從邏輯上對內存容量加以擴充的一種存儲系統.

7 分頁和分段

分頁: 用戶程序的地址空間被劃分紅若干固定大小的區域,稱爲「頁」,相應地,內存空間分紅若干個物理塊,頁和塊的大小相等。可將用戶程序的任一頁放在內存的任一塊中,實現了離散分配。

分段: 將用戶程序地址空間分紅若干個大小不等的段,每段能夠定義一組相對完整的邏輯信息。存儲分配時,以段爲單位,段與段在內存中能夠不相鄰接,也實現了離散分配。

分頁與分段的主要區別

  1. 頁是信息的物理單位,分頁是爲了實現非連續分配,以便解決內存碎片問題,或者說分頁是因爲系統管理的須要.段是信息的邏輯單位,它含有一組意義相對完整的信息,分段的目的是爲了更好地實現共享,知足用戶的須要.
  2. 頁的大小固定,由系統肯定,將邏輯地址劃分爲頁號和頁內地址是由機器硬件實現的.而段的長度卻不固定,決定於用戶所編寫的程序,一般由編譯程序在對源程序進行編譯時根據信息的性質來劃分.
  3. 分頁的做業地址空間是一維的.分段的地址空間是二維的.

8 頁面置換算法

  1. 最佳置換算法OPT:不可能實現
  2. 先進先出FIFO
  3. 最近最久未使用算法LRU:最近一段時間裏最久沒有使用過的頁面予以置換.
  4. clock算法

9 邊沿觸發和水平觸發

邊緣觸發是指每當狀態變化時發生一個 io 事件,條件觸發是隻要知足條件就發生一個 io 事件

數據庫

1 事務

數據庫事務(Database Transaction) ,是指做爲單個邏輯工做單元執行的一系列操做,要麼徹底地執行,要麼徹底地不執行。

2 數據庫索引

推薦: http://tech.meituan.com/mysql-index.html

MySQL索引背後的數據結構及算法原理

彙集索引,非彙集索引,B-Tree,B+Tree,最左前綴原理

3 Redis原理

4 樂觀鎖和悲觀鎖

悲觀鎖:假定會發生併發衝突,屏蔽一切可能違反數據完整性的操做

樂觀鎖:假設不會發生併發衝突,只在提交操做時檢查是否違反數據完整性。

5 MVCC

6 MyISAM和InnoDB

MyISAM 適合於一些須要大量查詢的應用,但其對於有大量寫操做並非很好。甚至你只是須要update一個字段,整個表都會被鎖起來,而別的進程,就算是讀進程都沒法操做直到讀操做完成。另外,MyISAM 對於 SELECT COUNT(*) 這類的計算是超快無比的。

InnoDB 的趨勢會是一個很是複雜的存儲引擎,對於一些小的應用,它會比 MyISAM 還慢。他是它支持「行鎖」 ,因而在寫操做比較多的時候,會更優秀。而且,他還支持更多的高級應用,好比:事務。

網絡

1 三次握手

  1. 客戶端經過向服務器端發送一個SYN來建立一個主動打開,做爲三路握手的一部分。客戶端把這段鏈接的序號設定爲隨機數 A。
  2. 服務器端應當爲一個合法的SYN回送一個SYN/ACK。ACK 的確認碼應爲 A+1,SYN/ACK 包自己又有一個隨機序號 B。
  3. 最後,客戶端再發送一個ACK。當服務端受到這個ACK的時候,就完成了三路握手,並進入了鏈接建立狀態。此時包序號被設定爲收到的確認號 A+1,而響應則爲 B+1。

2 四次揮手

注意: 中斷鏈接端能夠是客戶端,也能夠是服務器端. 下面僅以客戶端斷開鏈接舉例, 反之亦然.

  1. 客戶端發送一個數據分段, 其中的 FIN 標記設置爲1. 客戶端進入 FIN-WAIT 狀態. 該狀態下客戶端只接收數據, 再也不發送數據.
  2. 服務器接收到帶有 FIN = 1 的數據分段, 發送帶有 ACK = 1 的剩餘數據分段, 確認收到客戶端發來的 FIN 信息.
  3. 服務器等到全部數據傳輸結束, 向客戶端發送一個帶有 FIN = 1 的數據分段, 並進入 CLOSE-WAIT 狀態, 等待客戶端發來帶有 ACK = 1 的確認報文.
  4. 客戶端收到服務器發來帶有 FIN = 1 的報文, 返回 ACK = 1 的報文確認, 爲了防止服務器端未收到須要重發, 進入 TIME-WAIT 狀態. 服務器接收到報文後關閉鏈接. 客戶端等待 2MSL 後未收到回覆, 則認爲服務器成功關閉, 客戶端關閉鏈接.

3 ARP協議

地址解析協議(Address Resolution Protocol),其基本功能爲透過目標設備的IP地址,查詢目標的MAC地址,以保證通訊的順利進行。它是IPv4網絡層必不可少的協議,不過在IPv6中已再也不適用,並被鄰居發現協議(NDP)所替代。

4 urllib和urllib2的區別

這個面試官確實問過,當時答的urllib2能夠Post而urllib不能夠.

  1. urllib提供urlencode方法用來GET查詢字符串的產生,而urllib2沒有。這是爲什麼urllib常和urllib2一塊兒使用的緣由。
  2. urllib2能夠接受一個Request類的實例來設置URL請求的headers,urllib僅能夠接受URL。這意味着,你不能夠假裝你的User Agent字符串等。

5 Post和Get

GET和POST有什麼區別?及爲何網上的多數答案都是錯的 知乎回答

get: RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1 post: RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1

6 Cookie和Session

  Cookie Session
儲存位置 客戶端 服務器端
目的 跟蹤會話,也能夠保存用戶偏好設置或者保存用戶名密碼等 跟蹤會話
安全性 不安全 安全

session技術是要使用到cookie的,之因此出現session技術,主要是爲了安全。

7 apache和nginx的區別

nginx 相對 apache 的優勢:

  • 輕量級,一樣起web 服務,比apache 佔用更少的內存及資源
  • 抗併發,nginx 處理請求是異步非阻塞的,支持更多的併發鏈接,而apache 則是阻塞型的,在高併發下nginx 能保持低資源低消耗高性能
  • 配置簡潔
  • 高度模塊化的設計,編寫模塊相對簡單
  • 社區活躍

apache 相對nginx 的優勢:

  • rewrite ,比nginx 的rewrite 強大
  • 模塊超多,基本想到的均可以找到
  • 少bug ,nginx 的bug 相對較多
  • 超穩定

8 網站用戶密碼保存

  1. 明文保存
  2. 明文hash後保存,如md5
  3. MD5+Salt方式,這個salt能夠隨機
  4. 知乎使用了Bcrypy(好像)加密

9 HTTP和HTTPS

狀態碼 定義
1xx 報告 接收到請求,繼續進程
2xx 成功 步驟成功接收,被理解,並被接受
3xx 重定向 爲了完成請求,必須採起進一步措施
4xx 客戶端出錯 請求包括錯的順序或不能完成
5xx 服務器出錯 服務器沒法完成顯然有效的請求

403: Forbidden 404: Not Found

HTTPS握手,對稱加密,非對稱加密,TLS/SSL,RSA

10 XSRF和XSS

  • CSRF(Cross-site request forgery)跨站請求僞造
  • XSS(Cross Site Scripting)跨站腳本攻擊

CSRF重點在請求,XSS重點在腳本

11 冪等 Idempotence

HTTP方法的冪等性是指一次和屢次請求某一個資源應該具備一樣的反作用。(注意是反作用)

GET http://www.bank.com/account/123456,不會改變資源的狀態,不論調用一次仍是N次都沒有反作用。請注意,這裏強調的是一次和N次具備相同的反作用,而不是每次GET的結果相同。GET http://www.news.com/latest-news這個HTTP請求可能會每次獲得不一樣的結果,但它自己並無產生任何反作用,於是是知足冪等性的。

DELETE方法用於刪除資源,有反作用,但它應該知足冪等性。好比:DELETE http://www.forum.com/article/4231,調用一次和N次對系統產生的反作用是相同的,即刪掉id爲4231的帖子;所以,調用者能夠屢次調用或刷新頁面而沒必要擔憂引發錯誤。

POST所對應的URI並不是建立的資源自己,而是資源的接收者。好比:POST http://www.forum.com/articles的語義是在http://www.forum.com/articles下建立一篇帖子,HTTP響應中應包含帖子的建立狀態以及帖子的URI。兩次相同的POST請求會在服務器端建立兩份資源,它們具備不一樣的URI;因此,POST方法不具有冪等性。

PUT所對應的URI是要建立或更新的資源自己。好比:PUT http://www.forum/articles/4231的語義是建立或更新ID爲4231的帖子。對同一URI進行屢次PUT的反作用和一次PUT是相同的;所以,PUT方法具備冪等性。

12 RESTful架構(SOAP,RPC)

推薦: http://www.ruanyifeng.com/blog/2011/09/restful.html

13 SOAP

SOAP(原爲Simple Object Access Protocol的首字母縮寫,即簡單對象訪問協議)是交換數據的一種協議規範,使用在計算機網絡Web服務(web service)中,交換帶結構信息。SOAP爲了簡化網頁服務器(Web Server)從XML數據庫中提取數據時,節省去格式化頁面時間,以及不一樣應用程序之間按照HTTP通訊協議,聽從XML格式執行資料互換,使其抽象於語言實現、平臺和硬件。

14 RPC

RPC(Remote Procedure Call Protocol)——遠程過程調用協議,它是一種經過網絡從遠程計算機程序上請求服務,而不須要了解底層網絡技術的協議。RPC協議假定某些傳輸協議的存在,如TCP或UDP,爲通訊程序之間攜帶信息數據。在OSI網絡通訊模型中,RPC跨越了傳輸層和應用層。RPC使得開發包括網絡分佈式多程序在內的應用程序更加容易。

總結:服務提供的兩大流派.傳統意義以方法調用爲導向通稱RPC。爲了企業SOA,若干廠商聯合推出webservice,制定了wsdl接口定義,傳輸soap.當互聯網時代,臃腫SOA被簡化爲http+xml/json.可是簡化出現各類混亂。以資源爲導向,任何操做無非是對資源的增刪改查,因而統一的REST出現了.

進化的順序: RPC -> SOAP -> RESTful

15 CGI和WSGI

CGI是通用網關接口,是鏈接web服務器和應用程序的接口,用戶經過CGI來獲取動態數據或文件等。 CGI程序是一個獨立的程序,它能夠用幾乎全部語言來寫,包括perl,c,lua,python等等。

WSGI, Web Server Gateway Interface,是Python應用程序或框架和Web服務器之間的一種接口,WSGI的其中一個目的就是讓用戶能夠用統一的語言(Python)編寫先後端。

官方說明:PEP-3333

16 中間人攻擊

在GFW裏家常便飯的,呵呵.

中間人攻擊(Man-in-the-middle attack,一般縮寫爲MITM)是指攻擊者與通信的兩端分別建立獨立的聯繫,並交換其所收到的數據,使通信的兩端認爲他們正在經過一個私密的鏈接與對方直接對話,但事實上整個會話都被攻擊者徹底控制。

17 c10k問題

所謂c10k問題,指的是服務器同時支持成千上萬個客戶端的問題,也就是concurrent 10 000 connection(這也是c10k這個名字的由來)。 推薦: http://www.kegel.com/c10k.html

18 socket

推薦: http://www.360doc.com/content/11/0609/15/5482098_122692444.shtml

Socket=Ip address+ TCP/UDP + port

19 瀏覽器緩存

推薦: http://www.cnblogs.com/skynet/archive/2012/11/28/2792503.html

304 Not Modified

20 HTTP1.0和HTTP1.1

推薦: http://blog.csdn.net/elifefly/article/details/3964766

  1. 請求頭Host字段,一個服務器多個網站
  2. 長連接
  3. 文件斷點續傳
  4. 身份認證,狀態管理,Cache緩存

21 Ajax

AJAX,Asynchronous JavaScript and XML(異步的 javascript 和 XML), 是與在不從新加載整個頁面的狀況下,與服務器交換數據並更新部分網頁的技術。

*NIX

unix進程間通訊方式(IPC)

  1. 管道(Pipe):管道可用於具備親緣關係進程間的通訊,容許一個進程和另外一個與它有共同祖先的進程之間進行通訊。
  2. 命名管道(named pipe):命名管道克服了管道沒有名字的限制,所以,除具備管道所具備的功能外,它還容許無親緣關係進程間的通訊。命名管道在文件系統中有對應的文件名。命名管道經過命令mkfifo或系統調用mkfifo來建立。
  3. 信號(Signal):信號是比較複雜的通訊方式,用於通知接受進程有某種事件發生,除了用於進程間通訊外,進程還能夠發送信號給進程自己;linux除了支持Unix早期信號語義函數sigal外,還支持語義符合Posix.1標準的信號函數sigaction(實際上,該函數是基於BSD的,BSD爲了實現可靠信號機制,又可以統一對外接口,用sigaction函數從新實現了signal函數)。
  4. 消息(Message)隊列:消息隊列是消息的連接表,包括Posix消息隊列system V消息隊列。有足夠權限的進程能夠向隊列中添加消息,被賦予讀權限的進程則能夠讀走隊列中的消息。消息隊列克服了信號承載信息量少,管道只能承載無格式字節流以及緩衝區大小受限等缺
  5. 共享內存:使得多個進程能夠訪問同一塊內存空間,是最快的可用IPC形式。是針對其餘通訊機制運行效率較低而設計的。每每與其它通訊機制,如信號量結合使用,來達到進程間的同步及互斥。
  6. 內存映射(mapped memory):內存映射容許任何多個進程間通訊,每個使用該機制的進程經過把一個共享的文件映射到本身的進程地址空間來實現它。
  7. 信號量(semaphore):主要做爲進程間以及同一進程不一樣線程之間的同步手段。
  8. 套接口(Socket):更爲通常的進程間通訊機制,可用於不一樣機器之間的進程間通訊。起初是由Unix系統的BSD分支開發出來的,但如今通常能夠移植到其它類Unix系統上:Linux和System V的變種都支持套接字。

數據結構

1 紅黑樹

紅黑樹與AVL的比較:

AVL是嚴格平衡樹,所以在增長或者刪除節點的時候,根據不一樣狀況,旋轉的次數比紅黑樹要多;

紅黑是用非嚴格的平衡來換取增刪節點時候旋轉次數的下降;

因此簡單說,若是你的應用中,搜索的次數遠遠大於插入和刪除,那麼選擇AVL,若是搜索,插入刪除次數幾乎差很少,應該選擇RB。

相關文章
相關標籤/搜索