溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

python爬蟲面試寶典(常見問題)

發(fā)布時(shí)間:2020-09-03 09:56:32 來源:腳本之家 閱讀:157 作者:默行 欄目:開發(fā)技術(shù)
  • 是否了解線程的同步和異步?

線程同步:多個(gè)線程同時(shí)訪問同一資源,等待資源訪問結(jié)束,浪費(fèi)時(shí)間,效率低

線程異步:在訪問資源時(shí)在空閑等待時(shí)同時(shí)訪問其他資源,實(shí)現(xiàn)多線程機(jī)制

  • 是否了解網(wǎng)絡(luò)的同步和異步?

同步:提交請求->等待服務(wù)器處理->處理完畢返回 這個(gè)期間客戶端瀏覽器不能干任何事

異步: 請求通過事件觸發(fā)->服務(wù)器處理(這是瀏覽器仍然可以作其他事情)->處理完畢

  • 鏈表和順序表儲存時(shí)各自有什么優(yōu)點(diǎn)?

1.順序表存儲

原理:順序表存儲是將數(shù)據(jù)元素放到一塊連續(xù)的內(nèi)存存儲空間,存取效率高,速度快。但是不可以動(dòng)態(tài)增加長度

優(yōu)點(diǎn):存取速度高效,通過下標(biāo)來直接存儲

缺點(diǎn):1.插入和刪除比較慢,2.不可以增長長度

比如:插入或者刪除一個(gè)元素時(shí),整個(gè)表需要遍歷移動(dòng)元素來重新排一次順序

2.鏈表存儲

原理:鏈表存儲是在程序運(yùn)行過程中動(dòng)態(tài)的分配空間,只要存儲器還有空間,就不會發(fā)生存儲溢出問題

優(yōu)點(diǎn):插入和刪除速度快,保留原有的物理順序,比如:插入或者刪除一個(gè)元素時(shí),只需要改變指針指向即可

缺點(diǎn):查找速度慢,因?yàn)椴檎視r(shí),需要循環(huán)鏈表訪問

  • 使用redis搭建分布式系統(tǒng)時(shí)如何處理網(wǎng)絡(luò)延遲和網(wǎng)絡(luò)異常?

由于網(wǎng)絡(luò)異常的存在,分布式系統(tǒng)中請求結(jié)果存在“三態(tài)”的概念,即三種狀態(tài):“成功”、“失敗”、“超時(shí)(未知)”

當(dāng)出現(xiàn)“超時(shí)”時(shí)可以通過發(fā)起讀取數(shù)據(jù)的操作以驗(yàn)證 RPC 是否成功(例如銀行系統(tǒng)的做法)

另一種簡單的做法是,設(shè)計(jì)分布式協(xié)議時(shí)將執(zhí)行步驟設(shè)計(jì)為可重試的,即具有所謂的“冪等性”

  • 數(shù)據(jù)倉庫是什么?

數(shù)據(jù)倉庫是一個(gè)面向主題的、集成的、穩(wěn)定的、反映歷史變化的、隨著時(shí)間的流逝發(fā)生變化的數(shù)據(jù)集合。它主要支持管理人員的決策分析。

數(shù)據(jù)倉庫收集了企業(yè)相關(guān)內(nèi)部和外部各個(gè)業(yè)務(wù)系統(tǒng)數(shù)據(jù)源、歸檔文件等一系列歷史數(shù)據(jù),最后轉(zhuǎn)化成企業(yè)需要的戰(zhàn)略決策信息。

  • 特點(diǎn):

面向主題:根據(jù)業(yè)務(wù)的不同而進(jìn)行的內(nèi)容劃分;
集成特性:因?yàn)椴煌臉I(yè)務(wù)源數(shù)據(jù)具有不同的數(shù)據(jù)特點(diǎn),當(dāng)業(yè)務(wù)源數(shù)據(jù)進(jìn)入到數(shù)據(jù)倉庫時(shí),需要采用統(tǒng)一的編碼格式進(jìn)行數(shù)據(jù)加載,從而保證數(shù)據(jù)倉庫中數(shù)據(jù)的唯一性;
非易失性:數(shù)據(jù)倉庫通過保存數(shù)據(jù)不同歷史的各種狀態(tài),并不對數(shù)據(jù)進(jìn)行任何更新操作。
歷史特性:數(shù)據(jù)保留時(shí)間戳字段,記錄每個(gè)數(shù)據(jù)在不同時(shí)間內(nèi)的各種狀態(tài)。

假設(shè)有一個(gè)爬蟲,從網(wǎng)絡(luò)上獲取數(shù)據(jù)的頻率快,本地寫入數(shù)據(jù)的頻率慢,使用什么數(shù)據(jù)結(jié)構(gòu)好?

  • 在線求解(o°ω°o)

你是否了解谷歌的無頭瀏覽器?

無頭瀏覽器即headless browser,是一種沒有界面的瀏覽器。既然是瀏覽器那么瀏覽器該有的東西它都應(yīng)該有,只是看不到界面而已。

Python中selenium模塊中的PhantomJS即為無界面瀏覽器(無頭瀏覽器):是基于QtWebkit的無頭瀏覽器,

你是否了解MySQL數(shù)據(jù)庫的幾種引擎?

  • InnoDB:

InnoDB是一個(gè)健壯的事務(wù)型存儲引擎,這種存儲引擎已經(jīng)被很多互聯(lián)網(wǎng)公司使用,為用戶操作非常大的數(shù)據(jù)存儲提供了一個(gè)強(qiáng)大的解決方案。

在以下場合下,使用InnoDB是最理想的選擇:

1.更新密集的表。InnoDB存儲引擎特別適合處理多重并發(fā)的更新請求。

2.事務(wù)。InnoDB存儲引擎是支持事務(wù)的標(biāo)準(zhǔn)MySQL存儲引擎。

3.自動(dòng)災(zāi)難恢復(fù)。與其它存儲引擎不同,InnoDB表能夠自動(dòng)從災(zāi)難中恢復(fù)。

4.外鍵約束。MySQL支持外鍵的存儲引擎只有InnoDB。

5.支持自動(dòng)增加列AUTO_INCREMENT屬性。

一般來說,如果需要事務(wù)支持,并且有較高的并發(fā)讀取頻率,InnoDB是不錯(cuò)的選擇。

  • MEMORY:

使用MySQL Memory存儲引擎的出發(fā)點(diǎn)是速度。為得到最快的響應(yīng)時(shí)間,采用的邏輯存儲介質(zhì)是系統(tǒng)內(nèi)存。

雖然在內(nèi)存中存儲表數(shù)據(jù)確實(shí)會提供很高的性能,但當(dāng)mysqld守護(hù)進(jìn)程崩潰時(shí),所有的Memory數(shù)據(jù)都會丟失。

獲得速度的同時(shí)也帶來了一些缺陷。

一般在以下幾種情況下使用Memory存儲引擎:

1.目標(biāo)數(shù)據(jù)較小,而且被非常頻繁地訪問。在內(nèi)存中存放數(shù)據(jù),所以會造成內(nèi)存的使用,可以通過參數(shù)max_heap_table_size控制Memory表的大小,設(shè)置此參數(shù),就可以限制Memory表的最大大小。

2.如果數(shù)據(jù)是臨時(shí)的,而且要求必須立即可用,那么就可以存放在內(nèi)存表中。

3.存儲在Memory表中的數(shù)據(jù)如果突然丟失,不會對應(yīng)用服務(wù)產(chǎn)生實(shí)質(zhì)的負(fù)面影響。

  • redis數(shù)據(jù)庫有哪幾種數(shù)據(jù)結(jié)構(gòu)?

5種數(shù)據(jù)結(jié)構(gòu)

string 

使用string時(shí),redis**大多數(shù)情況下**并不會理解或者解析其含義,無論使用json、xml還是純文本在redis看來都是一樣的,只是一個(gè)字符串,只能進(jìn)行strlen、append等對字符串通用的操作,無法針對其內(nèi)容進(jìn)一步操作。其基本操作命令有set、get、strlen、getrange、append:

 SET key value
 GET key
 STRLEN key
 GETRANGE key start end
 APPEND key value

在大多數(shù)情況之外,就是string中存儲的為純數(shù)字的情況,redis可以將字符串當(dāng)做數(shù)字進(jìn)行進(jìn)一步操作,這些操作包括decr、decrby、incr、incrby和incrbyfloat。

hash

使用hash時(shí),在我看來,就是value本身就是一組key-value對,不過redis將這里的key稱為field(但是hkeys命令為什么不叫hfields命令呢哈哈),也就是value是一組field-value對。其基本操作命令有hset、hget、hmset、hmget、hgetall、hkeys和hdel:

 HSET key field value
 HGET key field
 HMSET key field value [field value ...]
 HMGET key field [field ...]
 HGETALL key
 HKEYS key
 HDEL key field [field ...]

list

使用list時(shí),value就是一個(gè)string數(shù)組,操作這組string時(shí),可以像對待棧一樣使用pop和push操作,但是這個(gè)棧兩端都能進(jìn)行操作;也可以像對待數(shù)組一樣使用一個(gè)index參數(shù)來操作。list的操作命令略雜,主要分為兩類:L開頭的和R開頭的,L代表LEFT或者LIST,進(jìn)行一些從列表左端進(jìn)行的操作,或者一些與端無關(guān)的操作;R代表RIGHT,進(jìn)行一些從列表右端進(jìn)行的操作。 

set

set用于存儲一組不重復(fù)的值,也可以進(jìn)行一些集合的操作,就像數(shù)學(xué)上的集合,它是無序的?;静僮饔衧add和sismember:

 SADD key member [member ...]
 SISMEMBER key member

集合操作有:求交sinter、求并sunion和求差sdiff:

 SINTER key [key ...]
 SUNION key [key ...]
 SDIFF key [key ...]

sorted set

sorted set類似set,但是sorted set里每個(gè)元素都有一個(gè)score,這個(gè)score可用于排序和排名?;静僮饔衵add、zcount、zrank:

 ZADD key score member [score member ...]
 ZCOUNT key min max
 ZRANK key member

總結(jié)

以上所述是小編給大家介紹的python爬蟲面試經(jīng)典(常見問題),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對億速云網(wǎng)站的支持!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI