歡迎光臨
每天分享高質量文章

Python爬蟲面試常見問題

是否瞭解執行緒的同步和非同步?
1
執行緒同步:

多個執行緒同時訪問同一資源,等待資源訪問結束,浪費時間,效率低  

2
執行緒非同步:

在訪問資源時在空閑等待時同時訪問其他資源,實現多執行緒機制

是否瞭解網路的同步和非同步?
1
同步:

提交請求->等待伺服器處理->處理完畢傳回 這個期間客戶端瀏覽器不能幹任何事

2
非同步:

請求透過事件觸發->伺服器處理(這是瀏覽器仍然可以作其他事情)->處理完畢 

連結串列和順序表儲存時各自有什麼優點?
1
順序表儲存:

原理:順序表儲存是將資料元素放到一塊連續的記憶體儲存空間,存取效率高,速度快。但是不可以動態增加長度

優點:存取速度高效,透過下標來直接儲存

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

                比如:插入或者刪除一個元素時,整個表需要遍歷移動元素來重新排一次順序

2
連結串列儲存:

原理:連結串列儲存是在程式執行過程中動態的分配空間,只要儲存器還有空間,就不會發生儲存上限溢位問題

優點:插入和刪除速度快,保留原有的物理順序,比如:插入或者刪除一個元素時,只需要改變指標指向即可

缺點:查詢速度慢,因為查詢時,需要迴圈連結串列訪問

使用redis搭建分散式系統時如何處理網路延遲和網路異常?

由於網路異常的存在,分散式系統中請求結果存在“三態”的概念,即三種狀態:“成功”、“失敗”、“超時(未知)”

當出現“超時”時可以透過發起讀取資料的操作以驗證 RPC 是否成功(例如銀行系統的做法)

另一種簡單的做法是,設計分散式協議時將執行步驟設計為可重試的,即具有所謂的“冪等性”

資料倉庫是什麼?

資料倉庫是一個面向主題的、整合的、穩定的、反映歷史變化的、隨著時間的流逝發生變化的資料集合。它主要支援管理人員的決策分析。

資料倉庫收集了企業相關內部和外部各個業務系統資料源、歸檔檔案等一系列歷史資料,最後轉化成企業需要的戰略決策資訊。

特點:

面向主題:根據業務的不同而進行的內容劃分;

整合特性:因為不同的業務源資料具有不同的資料特點,當業務源資料進入到資料倉庫時,需要採用統一的編碼格式進行資料載入,從而保證資料倉庫中資料的唯一性;

非易失性:資料倉庫透過儲存資料不同歷史的各種狀態,並不對資料進行任何

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

無頭瀏覽器即headless browser,是一種沒有介面的瀏覽器。既然是瀏覽器那麼瀏覽器該有的東西它都應該有,只是看不到介面而已。

Python中selenium模組中的PhantomJS即為無介面瀏覽器(無頭瀏覽器):是基於QtWebkit的無頭瀏覽器

你是否瞭解MySQL資料庫的幾種引擎?

InnoDB:

InnoDB是一個健壯的事務型儲存引擎,這種儲存引擎已經被很多網際網路公司使用,為使用者操作非常大的資料儲存提供了一個強大的解決方案。

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

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

2.事務。InnoDB儲存引擎是支援事務的標準MySQL儲存引擎。

3.自動災難恢復。與其它儲存引擎不同,InnoDB表能夠自動從災難中恢復。

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

5.支援自動增加列AUTO_INCREMENT屬性。

一般來說,如果需要事務支援,並且有較高的併發讀取頻率,InnoDB是不錯的選擇。

MEMORY:

  使用MySQL Memory儲存引擎的出發點是速度。為得到最快的響應時間,採用的邏輯儲存介質是系統記憶體。

  雖然在記憶體中儲存表資料確實會提供很高的效能,但當mysqld守護行程崩潰時,所有的Memory資料都會丟失。

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

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

1.標的資料較小,而且被非常頻繁地訪問。在記憶體中存放資料,所以會造成記憶體的使用,可以透過引數max_heap_table_size控制Memory表的大小,設定此引數,就可以限制Memory表的最大大小。

2.如果資料是臨時的,而且要求必須立即可用,那麼就可以存放在記憶體表中。

3.儲存在Memory表中的資料如果突然丟失,不會對應用服務產生實質的負面影響。

redis資料庫有哪幾種資料結構?

5種資料結構

string

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

1 SET key value

2 GET key

3 STRLEN key

4 GETRANGE  key start end

5 APPEND key value

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

hash

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

1 HSET key field value

2 HGET key field

3 HMSET key field value [field value …]

4 HMGET key field [field …]

5 HGETALL key

6 HKEYS key

7 HDEL key field [field …]


list

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

set

  set用於儲存一組不重覆的值,也可以進行一些集合的操作,就像數學上的集合,它是無序的。基本操作有sadd和sismember:

1 SADD key member [member …]

2 SISMEMBER key member

 

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

1 SINTER key [key …]

2 SUNION key [key …]

3 SDIFF key [key …]

sorted set

  sorted set類似set,但是sorted set裡每個元素都有一個score,這個score可用於排序和排名。基本操作有zadd、zcount、zrank:  

1 ZADD key score member [score member …]

2 ZCOUNT key min max

3 ZRANK key member

作者:默行

源自:https://www.cnblogs.com/zdong0103/p/8492779.html

宣告:文章著作權歸作者所有,如有侵權,請聯絡小編刪除

贊(0)

分享創造快樂