python面試題庫_v2.0

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

常用的有以下這幾種方法:
os.path.walk(),os.walk,listdir
以os.walk()為例:
os.walk(top, topdown=True, onerror=None, followlinks=False)
參數(shù):
top 是你所要遍歷的目錄地址
topdown 為真谚中,則優(yōu)先遍歷top目錄,否則優(yōu)先遍歷top的子目錄(默認開啟)
onerror 需要一個callable對象愤惰,當walk需要異常時崔兴,會調(diào)用
followlinks如果為真叹谁,則會遍歷目錄下的快捷方式(linux下是symbolic link)實際所指的目錄(默認關(guān)閉)
os.walk()的返回值是一個生成器稀蟋,也就是說我需要不斷的遍歷它,來獲得所有的內(nèi)容苛白。
每次遍歷的對象都返回的是一個三元組(root,dirs,file)
root 所指的是的那個錢正在遍歷的這個文件夾的本身所在的地址
dirs 是一個list,內(nèi)容是該文件夾中所有的目錄的名字(不包括子目錄)
files 同樣是lsit,內(nèi)容是該文件夾中所有的文件(不包括子目錄)

2.mysql數(shù)據(jù)庫如何分區(qū)娃豹、分表?

分表可以通過三種方式:mysql集群购裙、自定義規(guī)則和merge存儲引擎懂版。
分區(qū)有四類:
RANGE分區(qū):基于屬于一個給定連續(xù)區(qū)間的列值,把多行分配給分區(qū)躏率。
LIST分區(qū):類似于按RANGE分區(qū)躯畴,區(qū)別在于LIST分區(qū)是基于列值匹配一個離散值集合中的某個值來進行選擇。
HASH分區(qū):基于用戶定義的表達式的返回值來進行選擇的分區(qū)薇芝,該表達式使用將要插入到表中的這些行的列值進行計算蓬抄。這個函數(shù)可以包含MySQL 中有效的、產(chǎn)生非負整數(shù)值的任何表達式夯到。
KEY 分區(qū):類似于按HASH分區(qū)嚷缭,區(qū)別在于KEY分區(qū)只支持計算一列或多列,且MySQL 服務(wù)器提供其自身的哈希函數(shù)耍贾。必須有一列或多列包含整數(shù)值阅爽。

3.如何對查詢命令進行優(yōu)化?

(1).應(yīng)盡量避免全表掃描荐开,首先應(yīng)該考慮在where及order by涉及的列上建立索付翁。
(2).應(yīng)盡量避免在where子句中對字段進行null值判斷,避免使用!=或操作符誓焦,避免使用or連接條件胆敞,或在where子句中使用參數(shù)、對字段進行表達式或函數(shù)操作杂伟,否則會導(dǎo)致權(quán)標掃描
(3).不要在where子句中的“=”左邊進行函數(shù)、算數(shù)運算或其他表達式運算仍翰,否則系統(tǒng)將可能使用無法正確使用索引赫粥。
(4).使用索引字段作為條件時,如果該索引是復(fù)合索引予借,那么必須使用到該索引中的第一個字段作為條件時才能保證系統(tǒng)使用該索引越平,否則該索引將不會被使用频蛔。
(5).很多時候可以考慮使用exists代替in
(6).盡量使用數(shù)字型字段
(7).盡可能的使用varchar/nvarchar代替char/nchar
(8).任何地方都不要使用select * from t,用具體的字段列表代替"*",不要返回用不到的任何字段。
(9).盡量使用表變量來代替臨時表秦叛。
(10).避免頻繁創(chuàng)建和刪除臨時表晦溪,以減少系統(tǒng)表資源的消耗。
(11).盡量避免使用游標挣跋,因為游標的效率較差三圆。
(12).在所有的存儲過程和觸發(fā)器的開始處設(shè)置SET NOCOUNT ON,在結(jié)束時設(shè)置SET NOCOUNT OFF
(13).盡量避免大事務(wù)操作,提高系統(tǒng)并發(fā)能力避咆。
(14).盡量避免向客戶端分拿回大數(shù)據(jù)量舟肉,若數(shù)據(jù)量過大,應(yīng)該考慮相應(yīng)需求是否合理查库。

4.如何理解開源路媚?

開源,即開放源代碼樊销。開源誕生于軟件行業(yè)整慎,它不僅僅代表軟件源代碼的開放,本身即意味著自由围苫、共享和充分利用資源院领。開源是一種精神,是一種文化够吩,如今已經(jīng)成為軟件業(yè)發(fā)展的大勢所趨比然。

5.如何理解MVC/MVT框架?

MVC:是一種傳統(tǒng)的流程處理模式周循,是一種編程思想强法,主要由數(shù)據(jù)模型Model、控制器Controller以及視圖View組成的一個完成流程處理模式湾笛,首先由和用戶直接交互展示的視圖View可以發(fā)起請求饮怯,由控制器Controller進行請求的分發(fā),調(diào)用制定的數(shù)據(jù)處理函數(shù)對數(shù)據(jù)Model進行增刪改查操作嚎研,完成一個功能的完整處理過程蓖墅!
MVT處理模式,是在MVC處理模式上临扮,升級得到的一種更加符合實際項目開發(fā)流程的處理思路论矾;在這種處理模式中,將功能比較單一的控制器Controller部分杆勇,封裝成了路由贪壳!
由路由來完成請求的分發(fā)操作[路由是通過配置實現(xiàn)的]
更多詳情可以參考我的這篇文章:
http://www.reibang.com/p/9d12aeb8e417

6.死鎖是如何產(chǎn)生的,以及如何防止蚜退?

原因:競爭資源和程序推進順序不當闰靴。
死鎖產(chǎn)生的四個必要條件:
互斥條件:指進程對所分配到的資源進行排它性使用彪笼,即在一段時間內(nèi)某資源只由一個進程占用。如果此時還有其他進程請求資源蚂且,則請求者只能等待配猫,直到占有資源的進程用畢釋放。
請求和保持條件:指進程已經(jīng)保持至少一個資源杏死,但又提出了新的資源請求泵肄,而該資源已被其它進程占有,此時請求進程阻塞识埋,但又對自己已獲得的其它資源保持不放凡伊。
不剝奪條件:指進程已獲得的資源,在未使用完之前窒舟,不能被剝奪系忙,只能在使用完時由自己釋放。
環(huán)路等待條件:指在發(fā)生死鎖時惠豺,必然存在一個進程——資源的環(huán)形鏈银还,即進程集合中的P0正在等待一個P1占用的資源;P1正在等待P2占用的資源,......,Pn正在等待已被P0占用的資源洁墙。
處理死鎖的基本方法:
(1).預(yù)防死鎖(摒棄除1以外的條件)
(2).避免死鎖(銀行家算法)
(3).檢測死鎖(資源分配圖)
(4).解除死鎖(剝奪資源蛹疯、撤銷進程)

7. sql注入是如何產(chǎn)生的,如何防止?

程序開發(fā)過程中不注意規(guī)范書寫sql語句和對特殊字符進行過濾热监,導(dǎo)致客戶端可以通過全局變量POST和GET提交一些sql語句正常執(zhí)行捺弦。產(chǎn)生sql注入。下面是防止辦法:
(1).過濾掉一些常見的數(shù)據(jù)庫操作關(guān)鍵字孝扛,或者通過系統(tǒng)函數(shù)來進行過濾列吼。
(2).sql語句書寫的時候盡量不要省略小引號(tab鍵上面那個)和單引號
(3).提高數(shù)據(jù)庫命名機巧,對于一些重要的字段根據(jù)程序的特點命名苦始,取不易被猜到的名字寞钥。
(4).對于常用的方法加以封裝,避免直接暴漏sql語句
(5).控制錯誤信息:關(guān)閉錯誤提示信息陌选,將錯誤信息寫到系統(tǒng)日志理郑。
(6).使用mysqli或者pdo預(yù)處理。

8.如何管理不同版本的代碼咨油?

進行版本管理您炉。可以舉例告知如何使用Git(或是其他工具(SVN等))進行追蹤臼勉。
當然邻吭,版本管理工具有很多,挑自己了解的或是自己在公司使用的簡單說一下即可宴霸。
為什么會提這個問題呢(版本管理有什么好處呢)囱晴?
因為沒有版本控制的代碼,就像沒有杯子的咖啡瓢谢。有時候我們需要寫一些一次性的畸写、可以隨手扔掉的腳本,這種情況下不作版本控制沒關(guān)系氓扛。但是如果你面對的是大量的代碼枯芬,使用版本控制系統(tǒng)是有利的。版本控制能夠幫你追蹤誰對代碼庫做了什么操作采郎;發(fā)現(xiàn)新引入了什么bug千所;管理你的軟件的不同版本和發(fā)行版;在團隊成員中分享源代碼蒜埋;部署及其他自動化處理淫痰。它能讓你回滾到出現(xiàn)問題之前的版本,單憑這點就特別棒了整份。還有其他的好功能待错。怎么一個棒字了得!

9."猴子補丁"(monkey patching)指的是什么烈评?這種做法好嗎火俄?

猴子補丁:是指在函數(shù)或?qū)ο笠呀?jīng)定義之后讲冠,再去改變它們的行為瓜客。
舉例:

import datetime
datetime.datetime.now = lambda: datetime.datetime(2012, 12, 12)

大部分情況下,這是種很不好的做法竿开,因為函數(shù)代碼庫中的行為最好是都保持一致谱仪。打“猴子補丁”的原因可能是為了測試。mock包對實現(xiàn)這個目的很有幫助德迹。
為什么提這個問題芽卿?
答對這個問題說明你對單元測試的方法有一定了解。你如果提到要避免“猴子補丁”胳搞,可以說明你不是那種喜歡花里胡哨的程序員(公司里就有這種人卸例,跟他們共事真是糟糕透了),而是更注重可維護性肌毅。
另外:如果你沒讀過mock模塊的話筷转,真的值得花時間讀一讀。這個模塊非常有用悬而。

10 select,poll和epoll

其實所有的I/O都是輪詢的方法,只不過實現(xiàn)的層面不同罷了.
這個問題可能有點深入了,但相信能回答出這個問題是對I/O多路復(fù)用有很好的了解了.其中tornado使用的就是epoll的.
基本上select有3個缺點:
(1).連接數(shù)受限
(2).查找配對速度慢
(3).數(shù)據(jù)由內(nèi)核拷貝到用戶態(tài)
poll改善了第一個缺點呜舒。
epoll改了三個缺點。

11.簡單介紹一下調(diào)度算法

(1).先來先服務(wù)(FCFS, First Come First Serve)
(2).短作業(yè)優(yōu)先(SJF, Shortest Job First)
(3).最高優(yōu)先權(quán)調(diào)度(Priority Scheduling)
(4).時間片輪轉(zhuǎn)(RR, Round Robin)
(5).多級反饋隊列調(diào)度(multilevel feedback queue scheduling)
實時調(diào)度算法:
(1).最早截至?xí)r間優(yōu)先EDF
(2).最低松弛度優(yōu)先LLF

12.簡單描述下程序編譯與鏈接

Bulid過程可以分解為4個步驟:預(yù)處理(Prepressing)笨奠、編譯(Compilation)袭蝗、匯編(Assembly)唤殴、鏈接(Linking)
以c語言為例:
(1).預(yù)處理
預(yù)編譯過程主要處理那些源文件中的以“#”開始的預(yù)編譯指令,主要處理規(guī)則有:
a.將所有的“#define”刪除到腥,并展開所用的宏定義
b.處理所有條件預(yù)編譯指令朵逝,比如“#if”、“#ifdef”乡范、 “#elif”配名、“#endif”
c.處理“#include”預(yù)編譯指令,將被包含的文件插入到該編譯指令的位置晋辆,注:此過程是遞歸進行的
d.刪除所有注釋
e.添加行號和文件名標識渠脉,以便于編譯時編譯器產(chǎn)生調(diào)試用的行號信息以及用于編譯時產(chǎn)生編譯錯誤或警告時可顯示行號
f.保留所有的#pragma編譯器指令。
(2).編譯
編譯過程就是把預(yù)處理完的文件進行一系列的詞法分析瓶佳、語法分析芋膘、語義分析及優(yōu)化后生成相應(yīng)的匯編代碼文件。這個過程是整個程序構(gòu)建的核心部分涩哟。
(3).匯編
匯編器是將匯編代碼轉(zhuǎn)化成機器可以執(zhí)行的指令索赏,每一條匯編語句幾乎都是一條機器指令。經(jīng)過編譯贴彼、鏈接潜腻、匯編輸出的文件成為目標文件(Object File)
(4).鏈接
鏈接的主要內(nèi)容就是把各個模塊之間相互引用的部分處理好,使各個模塊可以正確的拼接器仗。
鏈接的主要過程包塊 地址和空間的分配(Address and Storage Allocation)融涣、符號決議(Symbol Resolution)和重定位(Relocation)等步驟。

13簡述靜態(tài)鏈接和動態(tài)鏈接

靜態(tài)鏈接方法:靜態(tài)鏈接的時候精钮,載入代碼就會把程序用到的動態(tài)代碼或動態(tài)代碼的地址確定下來威鹿。(事先把需要的東西都準備好)
靜態(tài)庫的鏈接可以使用靜態(tài)鏈接,動態(tài)鏈接庫也可以使用這種方法鏈接導(dǎo)入庫轨香。
動態(tài)鏈接方法:使用這種方式的程序并不在一開始就完成動態(tài)鏈接忽你,而是直到真正調(diào)用動態(tài)庫代碼時,載入程序才計算(被調(diào)用的那部分)動態(tài)代碼的邏輯地址臂容,然后等到某個時候科雳,程序又需要調(diào)用另外某塊動態(tài)代碼時,載入程序又去計算這部分代碼的邏輯地址脓杉,所以糟秘,這種方式使程序初始化時間較短,但運行期間的性能比不上靜態(tài)鏈接的程序球散。(先跑起來再說尿赚,需要什么再去取)

14.簡述虛擬內(nèi)存計數(shù)

虛擬存儲器是指具有請求調(diào)入功能和置換功能,能從邏輯上對內(nèi)存容量加以擴充的一種存儲系統(tǒng)。

15.分頁與分段的主要區(qū)別

(1).頁是信息的物理單位凌净,分頁是為了實現(xiàn)非連續(xù)分配悲龟,以便解決內(nèi)存碎片問題,或者說分頁是由于系統(tǒng)管理的需要泻蚊。段是信息的邏輯單位躲舌,它含有一組意義相對完整的信息丑婿,分段的目的是為了更好地實現(xiàn)共享性雄,滿足用戶的需要。
(2).頁的大小固定羹奉,由系統(tǒng)確定秒旋,將邏輯地址劃分為頁號和頁內(nèi)地址是由機器硬件實現(xiàn)的。而段的長度卻不固定诀拭,決定于用戶所編寫的程序迁筛,通常由編譯程序在對源程序進行編譯時根據(jù)信息的性質(zhì)來劃分。

16.簡述頁面置換算法

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

16.簡述邊沿觸發(fā)和水平觸發(fā)

邊沿觸發(fā)是指每當狀態(tài)變化時發(fā)生一個io事件耕挨,條件觸發(fā)是只要滿足條件就發(fā)生一個io事件细卧。


heike4.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市筒占,隨后出現(xiàn)的幾起案子贪庙,更是在濱河造成了極大的恐慌,老刑警劉巖翰苫,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件止邮,死亡現(xiàn)場離奇詭異,居然都是意外死亡奏窑,警方通過查閱死者的電腦和手機导披,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來埃唯,“玉大人撩匕,你說我怎么就攤上這事∧眩” “怎么了止毕?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長巍实。 經(jīng)常有香客問我滓技,道長,這世上最難降的妖魔是什么棚潦? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任令漂,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘叠必。我一直安慰自己荚孵,他們只是感情好,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布纬朝。 她就那樣靜靜地躺著收叶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪共苛。 梳的紋絲不亂的頭發(fā)上判没,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天,我揣著相機與錄音隅茎,去河邊找鬼澄峰。 笑死,一個胖子當著我的面吹牛辟犀,可吹牛的內(nèi)容都是我干的俏竞。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼堂竟,長吁一口氣:“原來是場噩夢啊……” “哼魂毁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起出嘹,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤席楚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后疚漆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體酣胀,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年娶聘,在試婚紗的時候發(fā)現(xiàn)自己被綠了闻镶。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡丸升,死狀恐怖铆农,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情狡耻,我是刑警寧澤墩剖,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站夷狰,受9級特大地震影響岭皂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜沼头,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一爷绘、第九天 我趴在偏房一處隱蔽的房頂上張望书劝。 院中可真熱鬧,春花似錦土至、人聲如沸购对。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽骡苞。三九已至,卻和暖如春楷扬,著一層夾襖步出監(jiān)牢的瞬間解幽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工毅否, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留亚铁,地道東北人。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓螟加,卻偏偏與公主長得像,于是被迫代替她去往敵國和親吞琐。 傳聞我的和親對象是個殘疾皇子捆探,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容