2022年整理的最全python常見面試題_第1頁
2022年整理的最全python常見面試題_第2頁
2022年整理的最全python常見面試題_第3頁
2022年整理的最全python常見面試題_第4頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

整理的python常見面真題〔根本必考〕L大數(shù)據(jù)的文件讀取.利用生成器generator.迭代器進(jìn)行迭代遍歷:forlineinfile2、迭代器和生成器的區(qū)別.迭代器是ー個(gè)更加抽象的概念,任何對(duì)象,如果它的類有next方法和iter方法返回自身。對(duì)于string、list、diet、tuple等這類容器對(duì)象,使用for循環(huán)遍歷是很方便的。在后臺(tái)for語句對(duì)容器對(duì)象調(diào)用iter()函數(shù),iter()是Python的內(nèi)置函數(shù)。iter()會(huì)返回一個(gè)定義了next()方法的迭代器對(duì)象,它在容器中逐個(gè)訪問容器內(nèi)元素,next。也是python的內(nèi)置函數(shù)。在沒有后續(xù)元素時(shí),next。會(huì)拋出ー個(gè)Stoplterration的異常。.生成器〔Generator〕是創(chuàng)立迭代器的簡單而強(qiáng)大的工具。它們寫起來就像是正規(guī)的函數(shù),只是在返回?cái)?shù)據(jù)的時(shí)候需要使用yield語句。每次next。被調(diào)用時(shí),生成器會(huì)返回它脫離的位置〔它記憶語句最后一次執(zhí)行的位置和全部的數(shù)據(jù)值〕3.裝飾器的作用和功能?引入日志函數(shù)執(zhí)行時(shí)間統(tǒng)計(jì)執(zhí)行函數(shù)錢預(yù)備處理執(zhí)行函數(shù)后的清理功能.權(quán)限校驗(yàn)等場景緩存4、簡單談下GILGlobalInterpreterLock〔全局解釋器鎖〕Python代碼的執(zhí)行由python虛擬機(jī)〔也叫解釋器主循環(huán)(CPython版本〕來操縱,Python在設(shè)計(jì)之初就考慮到要在解釋器的主循環(huán)中,同時(shí)只有一個(gè)線程在執(zhí)行,即任意時(shí)刻,只有一個(gè)線程在解釋器中運(yùn)行。對(duì)Python虛擬機(jī)的訪問由全局解釋器鎖〔GIL〕來操縱,正是這個(gè)鎖能保證同一時(shí)刻只有一個(gè)線程在運(yùn)行。在多線程環(huán)境中,Python虛擬機(jī)按以下方法執(zhí)行:.設(shè)置GIL.切換到ー個(gè)線程去運(yùn)行3運(yùn)行:a指定數(shù)量的字節(jié)碼指令,或者b.線程主動(dòng)讓出操縱〔可以調(diào)用time.sleep(〇)〕4把線程設(shè)置為睡眠狀態(tài).解鎖GIL.再次重復(fù)以上全部步驟再調(diào)用外部代碼〔如C/C++擴(kuò)展函數(shù)〕的時(shí)候,GIL講會(huì)被鎖定,直到這個(gè)函數(shù)結(jié)束為止〔由于在這期間沒有Python的字節(jié)碼被運(yùn)行,所以不會(huì)做線程切換〕。5、find和grepgrep命令是ー種強(qiáng)大的文本搜索工具,grep全部內(nèi)容串可以是正則表達(dá)式,同意對(duì)文本文件進(jìn)行模式查找。如果找到匹配模式,grep打印包含模式的全部行。find通常用來在特定的目錄下搜索符合條件的文件,也可以用來搜索特定用戶屬主的文件。6、線上效勞可能因?yàn)榉N種原因?qū)е聮斓粼趺崔k?Linux下的后臺(tái)逬程治理利器supervisor每次文件修改后在linux執(zhí)行servicesupervisordrestart7、如何提高python的運(yùn)行效率使用生成器;關(guān)鍵代碼使用外部功能包〔Cython,pylnlne,pypy,pyrex);針對(duì)循環(huán)的優(yōu)化一-盡量防止在循環(huán)中訪問變量的屬性8、常用Linux命令His,help,cd,more,clear,mkdir,pwd,rm,grep,find,mv,su9、Python中的yield用法yield簡單來說就是ー個(gè)生成器,這樣函數(shù)它記住上次返回時(shí)在函數(shù)中的位置。對(duì)于生成器第二次〔或n次〕調(diào)用跳轉(zhuǎn)至該函數(shù)。10、Python是如何逬行內(nèi)存治理的ー、垃圾回收:python不像C++,Java等言語ー樣,他們可以不用事先聲明變量類型而直接對(duì)變量進(jìn)行賦值。對(duì)python言語來講,對(duì)象的類型和內(nèi)存都是在運(yùn)行時(shí)確定的。這也是為什么我們稱python言語為動(dòng)態(tài)類型的原因〔這里我們把動(dòng)態(tài)類型言語可以簡單的歸結(jié)為對(duì)變量內(nèi)存地址的分配是在運(yùn)行時(shí)自動(dòng)推斷變量類型并對(duì)變量進(jìn)行賦值〕。二、引用計(jì)數(shù):python采納了類似windows內(nèi)核對(duì)象一樣的方法來對(duì)內(nèi)存逬行治理。每ー個(gè)對(duì)象,都維護(hù)這ー個(gè)對(duì)指向該對(duì)象的引用的計(jì)數(shù)。當(dāng)變量被綁定在ー個(gè)對(duì)象上的時(shí)候,該變量的引用計(jì)數(shù)就是1,〔還有其它ー些情況也會(huì)導(dǎo)致變量引用計(jì)數(shù)的增加〕,系統(tǒng)會(huì)自動(dòng)維護(hù)這些標(biāo)簽,并定時(shí)掃描,當(dāng)某標(biāo)簽的引用計(jì)數(shù)變?yōu)椹柕臅r(shí)候,該對(duì)象就會(huì)被回收。三、內(nèi)存池機(jī)制python的內(nèi)存機(jī)制成金字塔形:第一1,-2層主要有操作系統(tǒng)進(jìn)行操作;第〇層是C中的malloc,free等內(nèi)存分配和釋放函數(shù)進(jìn)行操作;第1層和第2層是內(nèi)存池,有python的接口函數(shù)PyMem_Malloc函數(shù)完成,當(dāng)對(duì)象小于256字節(jié)時(shí)由該層直接分配內(nèi)存;第三層是最上層,也就是我們對(duì)python對(duì)象的直接操作;在C中如果一再的調(diào)用malloc與free時(shí),是會(huì)產(chǎn)生性能問題的,在加上一再的分配和釋放小塊的內(nèi)存會(huì)產(chǎn)生內(nèi)存碎片。python在這里主要干的工作有:如果請(qǐng)求分配的內(nèi)存在1?256字節(jié)之間就使用自己的內(nèi)存治理系統(tǒng),否則直接使用malloc.這里還是會(huì)調(diào)用malloc分配內(nèi)存,但每次回分配ー塊大小為256字節(jié)的大塊內(nèi)存。經(jīng)由內(nèi)存池登記的內(nèi)存到最后還是會(huì)回收到內(nèi)存池,并不會(huì)調(diào)用C的free釋放掉,以便下次使用。對(duì)于簡單的python對(duì)象,例如數(shù)值、字符串、元組〔tuple不同意被更改〕采納的是復(fù)制的方法〔深拷貝〕,也就是說當(dāng)講另ー個(gè)變量B賦值給變量A時(shí),雖然A和B的內(nèi)存空間仍舊相同但是當(dāng)A的值發(fā)生變化時(shí),會(huì)重新給A分配空間,A和B的地址變得不再相同。11、描述數(shù)組、鏈表、隊(duì)列、堆棧的區(qū)別?數(shù)組和鏈表是數(shù)據(jù)存儲(chǔ)方法的概念,數(shù)組在連續(xù)的空間中存儲(chǔ)數(shù)據(jù),而鏈表可以在非連續(xù)的空間中存儲(chǔ)數(shù)據(jù);隊(duì)列和堆棧是描述數(shù)據(jù)存取方法的概念,隊(duì)列是先進(jìn)先出,而堆棧是后進(jìn)先出;隊(duì)列和堆??梢杂脭?shù)組來完成,也可以用鏈表完成。12、你了解幾種排序,講ー講你最熟悉的ー種?web框架局部.django中當(dāng)一個(gè)用戶登錄A應(yīng)用效勞器〔進(jìn)入登錄狀態(tài)〕,然后下次請(qǐng)求被nginx代理到B應(yīng)用效勞器會(huì)出現(xiàn)什么影響?如果用戶在A應(yīng)用效勞器登陸的session數(shù)據(jù)沒有共享到B應(yīng)用效勞器,那用戶之前的登錄狀態(tài)就沒有了。.跨域請(qǐng)求問題django怎么解決的〔原理)啟用中間件post請(qǐng)求驗(yàn)證碼表單中添加{%csrf_token%}標(biāo)簽.請(qǐng)解釋或描述一下Django的架構(gòu)對(duì)于Django框架遵循MVC設(shè)計(jì),并且有一個(gè)專有的名詞:MVTM全拼為Model,與MVC中的M功能相同,負(fù)責(zé)數(shù)據(jù)處理,內(nèi)嵌了〇RM框架V全拼為View,與MVC中的C功能相同,接收 Request,業(yè)務(wù)處理,返回ReponseT全拼為Template,與MVC中的V功能相同,負(fù)責(zé)封裝構(gòu)造要返回的html,內(nèi)嵌了模板引擎.django對(duì)數(shù)據(jù)査詢結(jié)果排序怎么做,降序怎么做,查詢大于某個(gè)字段怎么做排序使用order_by()降序需要在排序字段名前加-查詢字段大于某個(gè)值:使用filter〔字段名ーgt=值〕.說一下Django,MIDDLEWARES中間件的作用?中間件是介于request和response處理之間的一道處理過程,相比照擬輕量級(jí),并且在全局上改變Django的輸入和輸出.你對(duì)Django的認(rèn)識(shí)?Djang。是走大而全的方向,它最知名的是全自動(dòng)化的治理后臺(tái);只需要使用ORM,做簡單的對(duì)象定義,它就能自動(dòng)生成數(shù)據(jù)庫結(jié)構(gòu)、以及全功能的治理后臺(tái).Django內(nèi)置的ORM跟框架內(nèi)的其他模塊耦合程度高應(yīng)用程序必須使用Django內(nèi)置的ORM,否則就不能享受到框架內(nèi)提供的種種基于其ORM的便利.理論上可以切換掉其ORM模塊,但這就相當(dāng)于要把裝修完畢的房子撤除重新裝修,倒不如一開始就去毛坯房做全新的裝修.Django的賣點(diǎn)是超高的開發(fā)效率,其性能擴(kuò)展有限;采納Django的工程,在流量到達(dá)肯定規(guī)模后,都需要對(duì)其進(jìn)行重構(gòu),才能滿足性能的要求.Django適用的是中小型的網(wǎng)站,或者是作為大型網(wǎng)站快速完成產(chǎn)品雛形的工具。Djang。模板的設(shè)計(jì)哲學(xué)是徹底的將代碼、式樣別離;Djang。從根本上杜絕在模板中進(jìn)行編碼、處理數(shù)據(jù)的可能..Django重定向你是如何完成的?用的什么狀態(tài)碼?使用ResponseRedirectredire和reverse狀態(tài)碼:302,301S.ngnix的正向代理與反向代理?正向代理是一個(gè)位于客戶端和原始效勞器(originserver)之間的效勞器,為了從原始效勞器取得內(nèi)容,客戶端向代理發(fā)送ー個(gè)請(qǐng)求并指定目標(biāo)(原始效勞器),然后代理向原始效勞器轉(zhuǎn)交請(qǐng)求并將獲得的內(nèi)容返回給客戶端。客戶端必需要逬行一些特別的設(shè)置才能使用正向代理。反向代理正好相反,對(duì)于客戶端而言它就像是原始效勞器,并且客戶端不需要進(jìn)行任何特別的設(shè)置??蛻舳讼蚍聪虼淼拿臻g中的內(nèi)容發(fā)送一般請(qǐng)求,接著反向代理將推斷向哪里(原始效勞器)轉(zhuǎn)交請(qǐng)求,并將獲得的內(nèi)容返回給客戶端,就像這些內(nèi)容原本就是它自己的ー樣。.Tornado的核是什么?Tornado的核心是ioloop和iostream這兩個(gè)模塊,前者提供了一個(gè)高效的I/O事件循環(huán),后者則封裝了一個(gè)無堵塞的socket,通過向ioloop中添加網(wǎng)絡(luò)!/O事件,利用無堵塞的socket,再搭配相應(yīng)的回渦函數(shù),便可到達(dá)夢寐以求的高效異步執(zhí)行..Django本身提供了runserver,為什么不能用來部署?runserver方法是調(diào)試Django時(shí)經(jīng)常用到的運(yùn)行方法,它使用Django自帶的WSGIServer運(yùn)行,主要在測試和開發(fā)中使用,并且runserver開啟的方法也是單逬程?uWSGI是ー個(gè)Web效勞器,它完成了WSG!協(xié)議、uwsgi、等協(xié)議。注意uwsgi是ー種通信協(xié)議,而uWSGI是完成uwsgi協(xié)議和WSGI協(xié)議的Web效勞器。uWSGI具有超快的性能、低內(nèi)存占用和多app治理等優(yōu)點(diǎn),并且搭配著Nginx就是ー個(gè)生產(chǎn)環(huán)境了,能夠?qū)⒂脩粼L問請(qǐng)求與應(yīng)用app隔離開,完成真正的部署O相比來講,支持的并發(fā)量更高,方便治理多逬程,發(fā)揮多核的優(yōu)勢,提升性能。網(wǎng)絡(luò)編程和前端局部.AJAX是什么,如何使用AJAX?ajax(異步的javascript和xml)能夠刷新局部網(wǎng)頁數(shù)據(jù)而不是重新加載整個(gè)網(wǎng)頁.第一步,創(chuàng)立xml request對(duì)象,varxml =newXMLRequest[);XMLRequest對(duì)象用來和效勞器交換數(shù)據(jù)。第二步,使用xml request對(duì)象的。pen〔〕和send〔〕方法發(fā)送資源請(qǐng)求給效勞器。第三步,使用xmlrequest對(duì)象的responseText或responseXML屬性獲得效勞器的響應(yīng)。第四步,onreadystatechange函數(shù),當(dāng)發(fā)送請(qǐng)求到效勞器,我們想要效勞器響應(yīng)執(zhí)行一些功能就需要使用onreadystatechange函數(shù),每次xml request對(duì)象的readyState發(fā)生改變都會(huì)觸發(fā)onreadystatechange函數(shù)。.常見的狀態(tài)碼有哪些?200OK301MovedPermanently302Found304NotModified307TemporaryRedirect400BadRequest401Unauthorized403Forbidden404NotFound410Gone500InternalServerError501NotImplemented.Post和get區(qū)別?1、GET請(qǐng)求,請(qǐng)求的數(shù)據(jù)會(huì)附加在URL之后,以分割URL和傳輸數(shù)據(jù),多個(gè)參數(shù)用&連接。URL的編碼格式采納的是ASCII編碼,而不是unicode,即是說全部的非ASCII字符都要編碼之后再傳輸。POST請(qǐng)求:POST請(qǐng)求會(huì)把請(qǐng)求的數(shù)據(jù)放置在 請(qǐng)求包的包體中。上面的item=bandsaw就是實(shí)際的傳輸數(shù)據(jù)。因此,GET請(qǐng)求的數(shù)據(jù)會(huì)暴露在地址欄中,而POST請(qǐng)求則不會(huì)。2、傳輸數(shù)據(jù)的大小在標(biāo)準(zhǔn)中,沒有對(duì)URL的長度和傳輸?shù)臄?shù)據(jù)大小進(jìn)行限制。但是在實(shí)際開發(fā)過程中,對(duì)于GET,特定的掃瞄器和效勞器對(duì)URL的長度有限制。因此,在使用GET請(qǐng)求時(shí),傳輸數(shù)據(jù)會(huì)受到URL長度的限制.對(duì)于POST,由于不是URL傳值,理論上是不會(huì)受限制的,但是實(shí)際上各個(gè)效勞器會(huì)規(guī)定對(duì)POST提交數(shù)據(jù)大小進(jìn)行限制,Apache、HS都有各自的配置。3、平安性POST的平安性比GET的高。這里的平安是指真正的平安,而不同于上面GET提到的平安方法中的平安,上面提到的平安僅僅是不修改效勞器的數(shù)據(jù)。比方,在進(jìn)行登錄操作,通過GET請(qǐng)求,用戶名和密碼都會(huì)暴露再URL上,因?yàn)榈卿涰撁嬗锌赡鼙粧呙槠骶彺嬉约捌渌藮丝磼呙槠鞯臍v史記錄的原因,此時(shí)的用戶名和密碼就很簡單被他人拿到了。除此之外,GET請(qǐng)求提交的數(shù)據(jù)還可能會(huì)造成Cross-siterequestfrogery攻擊。.cookie和session的區(qū)別?1、cookie數(shù)據(jù)存放在客戶的掃瞄器上,session數(shù)據(jù)放在效勞器上。2、cookie不是很平安,別人可以分析存放在本地的COOKIE并進(jìn)行COOKIE欺騙考慮到平安應(yīng)當(dāng)使用session.3、session會(huì)在肯定時(shí)間內(nèi)保存在效勞器上。當(dāng)訪問增多,會(huì)比擬占用效勞器的性能考慮到減輕效勞器性能方面,應(yīng)當(dāng)使用COOKIE.4、單個(gè)cookie保存的數(shù)據(jù)不能超過4K,很多掃瞄器都限制ー個(gè)站點(diǎn)最多保存20個(gè)cookie.5、建議:將登陸信息等重要信息存放為SESSION其他信息如果需要保存,可以放在COOKIE中.創(chuàng)立一個(gè)簡單tcp效勞器需要的流程l.socket創(chuàng)立一個(gè)套接字.bind綁定ip和port.listen使套接字變?yōu)榭梢员粍?dòng)鏈接.accept等待客戶端的鏈接.recv/send接收發(fā)送數(shù)據(jù)爬蟲和數(shù)據(jù)庫局部l.scrapy和scrapy-redis有什么區(qū)別?為什么選擇redis數(shù)據(jù)庫?)scrapy是一個(gè)Python爬蟲框架,爬取效率極高,具有高度定制性,但是不支持分布式。而scrapy-redis一套基于redis數(shù)據(jù)庫、運(yùn)行在scrapy框架之上的組件,可以讓scrapy支持分布式策略,Slaver端共享Master端redis數(shù)據(jù)庫里的item隊(duì)列、請(qǐng)求隊(duì)列和請(qǐng)求指紋集合。2)為什么選擇redis數(shù)據(jù)庫,因?yàn)閞edis支持主從同步,而且數(shù)據(jù)都是緩存在內(nèi)存中的,所以基于redis的分布式爬蟲,對(duì)請(qǐng)求和數(shù)據(jù)的高頻讀取效率非常高。.你用過的爬蟲框架或者模塊有哪些?談?wù)勊麄兊膮^(qū)別或者優(yōu)缺點(diǎn)?Python自帶:urllib,urllib2第三方:requests框架:Scrapyurllib和urllib2模塊都做與請(qǐng)求URL相關(guān)的操作,但他們提供不同的功能。urllib2.:urllib2.urlopen可以接受一個(gè)Request對(duì)象或者url,〔在接受Request對(duì)象時(shí)候,并以此可以來設(shè)置ー個(gè)URL的headers),urllib.urlopen只接收ー個(gè)urlurllib有urlencode,urllib2沒有,因此總是urllib,urllib2常會(huì)一起使用的原因scrapy是封裝起來的框架,他包含了下載器,解析器,日志及異常處理,基于多線程,twisted的方法處理,對(duì)于固定單個(gè)網(wǎng)站的爬取開發(fā),有優(yōu)勢,但是對(duì)于多網(wǎng)站爬取100個(gè)網(wǎng)站,并發(fā)及分布式處理方面,不夠靈敏,不便調(diào)整與括展.request是ー個(gè)庫,它只是用來,進(jìn)行請(qǐng)求,對(duì)于請(qǐng)求,他是一個(gè)強(qiáng)大的庫,下載,解析全部自己處理,靈敏性更高,高并發(fā)與分布式部署也非常靈敏,對(duì)于功能可以更好完成.Scrapy優(yōu)缺點(diǎn):優(yōu)點(diǎn):scrapy是異步的采取可讀性更強(qiáng)的xpath替代正則強(qiáng)大的統(tǒng)計(jì)和!og系統(tǒng)同時(shí)在不同的url上爬行支持shell方法,方便獨(dú)立調(diào)試寫middleware,方便寫ー些統(tǒng)一的過濾器通過管道的方法存入數(shù)據(jù)庫缺點(diǎn):基于python的爬蟲框架,擴(kuò)展性比擬差基于twisted框架,運(yùn)行中的exception是不會(huì)干掉reactor,并且異步框架出錯(cuò)后是不會(huì)停掉其他任務(wù)的,數(shù)據(jù)出錯(cuò)后難以發(fā)覺。.你常用的mysql引擎有哪些?各引擎間有什么區(qū)別?主要MylSAM與InnoDB兩個(gè)引擎,其主要區(qū)別如下:ー、InnoDB支持事務(wù),MylSAM不支持,這一點(diǎn)是非常之重要。事務(wù)是ー種高級(jí)的處理方法,如在ー些列增刪改中只要哪個(gè)出錯(cuò)還可以回滾復(fù)原,而MylSAM就不可以了;二、MylSAM適宜査詢以及插入為主的應(yīng)用,InnoDB適宜一再修改以及涉及到平安性較高的應(yīng)用;三、!nnoDB支持外鍵,MylSAM不支持;四、MylSAM是默認(rèn)引擎,InnoDB需要指定;五、InnoDB不支持FULLTEXT類型的索引;六、InnoDB中不保存表的行數(shù),如selectcount(x)fromtable時(shí),InnoDB;需要掃描ー遍整個(gè)表來計(jì)算有多少行,但是MylSAM只要簡單的讀出保存好的行數(shù)即可。注意的是,當(dāng)count(x)語句包含where條件時(shí)MylSAM也需要掃描整個(gè)表;七、對(duì)于自增長的字段,InnoDB中必須包含只有該字段的索引,但是在MylSAM表中可以和其他字段ー起建立聯(lián)合索引;ハ、清空整個(gè)表時(shí),InnoDB是一行一行的刪除,效率非常慢.MylSAM則會(huì)重建表;九、InnoDB支持行鎖〔某些情況下還是鎖整表,如updatetableseta=lwhereuserlike'%lee%'.描述下scrapy框架運(yùn)行的機(jī)制?從start_urls里獵取第一批url并發(fā)送請(qǐng)求,請(qǐng)求由引擎交給調(diào)度器入請(qǐng)求隊(duì)列,獵取完畢后,調(diào)度器將請(qǐng)求隊(duì)列里的請(qǐng)求交給下載器去獵取請(qǐng)求對(duì)應(yīng)的響應(yīng)資源,并將響應(yīng)交給自己編寫的解析方法做提取處理:1.如果提取出需要的數(shù)據(jù),則交給管道文件處理;2.如果提取出url,則繼續(xù)執(zhí)行之前的步驟〔發(fā)送url請(qǐng)求,并由引擎將請(qǐng)求交給調(diào)度器入隊(duì)列…),直到請(qǐng)求隊(duì)列里沒有請(qǐng)求,程序結(jié)束。.什么是關(guān)聯(lián)查詢,有哪些?將多個(gè)表聯(lián)合起來進(jìn)行査詢,主要有內(nèi)連接、左連接、右連接、全連接〔外連接).寫爬蟲是用多進(jìn)程好?還是多線程好?為什么?10密集型代碼(文件處理、網(wǎng)絡(luò)爬蟲等),多線程能夠有效提升效率(單線程下有10操作會(huì)進(jìn)行!0等待,造成不必要的時(shí)間浪費(fèi),而開啟多線程能在線程A等待時(shí),自動(dòng)切換到線程B,可以不浪費(fèi)CPU的資源,從而能提升程序執(zhí)行效率)。在實(shí)際的數(shù)據(jù)采集過程中,既考慮網(wǎng)速和響應(yīng)的問題,也需要考慮自身機(jī)器的硬件情況,來設(shè)置多進(jìn)程或多線程.數(shù)據(jù)庫的優(yōu)化?.優(yōu)化索引、SQL語句、分析慢査詢;.設(shè)計(jì)表的時(shí)候嚴(yán)格依據(jù)數(shù)據(jù)庫的設(shè)計(jì)范式來設(shè)計(jì)數(shù)據(jù)庫;.使用緩存,把經(jīng)常訪問到的數(shù)據(jù)而且不需要經(jīng)常變化的數(shù)據(jù)放在緩存中,能節(jié)約磁盤10;.優(yōu)化硬件;采納SSD,使用磁盤隊(duì)列技術(shù)(RAIDO,RAID1,RDID5)等;.采納MySQL內(nèi)部自帶的表分區(qū)技術(shù),把數(shù)據(jù)分層不同的文件,能夠提高磁盤的讀取效率;.垂直分表;把ー些不經(jīng)常讀的數(shù)據(jù)放在ー張表里,節(jié)約磁盤I/O;.主從別離讀寫;采納主從復(fù)制把數(shù)據(jù)庫的讀操作和寫入操作別離開來;.分庫分表分機(jī)器〔數(shù)據(jù)量特別大),主要的的原理就是數(shù)據(jù)路由;.選擇適宜的表引擎,參數(shù)上的優(yōu)化;.進(jìn)行架構(gòu)級(jí)別的緩存,靜態(tài)化和分布式;.不采納全文索引;.采納更快的存儲(chǔ)方法,例如NoSQL存儲(chǔ)經(jīng)常訪問的數(shù)據(jù)8.常見的反爬蟲和應(yīng)對(duì)方法?1).通過Headers反爬蟲從用戶請(qǐng)求的Headers反爬蟲是最常見的反爬蟲策略。很多網(wǎng)站都會(huì)對(duì)Headers的User-Agent進(jìn)行檢測,還有一局部網(wǎng)站會(huì)對(duì)Referer逬行檢測〔ー些資源網(wǎng)站的防盜鏈就是檢測Referer).如果遇到了這類反爬蟲機(jī)制,可以直接在爬蟲中添加Headers,將掃瞄器的User-Agent復(fù)制到爬蟲的Headers中;或者將Referer值修改為目標(biāo)網(wǎng)站域名。對(duì)于檢測Headers的反爬蟲,在爬蟲中修改或者添加Headers就能很好的繞過。2〕.基于用戶行為反爬蟲還有一局部網(wǎng)站是通過檢測用戶行為,例如同一IP短時(shí)間內(nèi)屢次訪問同一頁面,或者同一賬戶短時(shí)間內(nèi)屢次進(jìn)行相同操作。大多數(shù)網(wǎng)站都是前ー種情況,對(duì)于這種情況,使用X就可以解決??梢蕴匾鈱懇`個(gè)爬蟲,爬取網(wǎng)上公開的代理ip,檢測后全部保存起來.這樣的代理ip爬蟲經(jīng)常會(huì)用到,最好自己打算ー個(gè)。有了大量代理ip后可以每請(qǐng)求幾次更換ー個(gè)ip,這在requests或者urllib2中很簡單做到,這樣就能很簡單的繞過第一種反爬蟲。對(duì)于第二種情況,可以在每次請(qǐng)求后隨機(jī)間隔幾秒再進(jìn)行下一次請(qǐng)求。有些

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論