前後端所涉及的技術問題(後端面試)

2021-09-27 00:16:19 字數 1277 閱讀 4817

在 http/1.0 中,乙個伺服器在傳送完乙個 http 響應後,會斷開 tcp 鏈結。但是這樣每次請求都會重新建立和斷開 tcp 連線,代價過大。(解決方式是設定connection: keep-alive)

在 http/1.1中將 connection: keep-alive頭寫進標準,並且預設開啟持久連線,除非請求中寫明 connection: close,那麼瀏覽器和伺服器之間是會維持一段時間的 tcp 連線,不會乙個請求結束就斷掉。

由於tcp連線不會斷開,所以可以傳送n多個請求

http/1.1 存在乙個問題,單個 tcp 連線在同一時刻只能處理乙個請求,意思是說:兩個請求的生命週期不能重疊,任意兩個 http 請求從開始到結束的時間在同乙個 tcp 連線裡不能重疊。

雖然 http/1.1 規範中規定了 pipelining 來試**決這個問題,但是這個功能在瀏覽器中預設是關閉的。

但是pipelining會有以下問題:

http2.0加入了多路復用技術multiplexing,可以在乙個 tcp 連線中同時完成多個 http 請求。

有。chrome 最多允許對同乙個 host 建立六個 tcp 連線。不同的瀏覽器有一些區別。

寫入的時候:採用頁快取技術 + 磁碟順序寫

kafka 為了保證磁碟寫入效能,首先kafka是基於作業系統的頁快取來實現檔案寫入的。

作業系統本身有一層快取,叫做page cache,是在記憶體裡的快取,我們也可以稱之為os cache,意思就是作業系統自己管理的快取。

你在寫磁碟檔案的時候,可以直接寫入os cache 中,也就是僅僅寫入記憶體中,接下來由作業系統自己決定什麼時候把os cache 裡的資料真的刷入到磁碟中。

磁碟順序寫

對於普通的機械硬碟如果你要是隨機寫的話,確實效能極低,這裡涉及到磁碟定址的問題。但是如果只是追加檔案末尾按照順序的方式來寫資料的話,那麼這種磁碟順序寫的效能基本上可以跟寫記憶體的效能本身是差不多的。

消費讀取的時候:零拷貝技術(zero-copy)

正常從記憶體讀取資料要經歷兩次資料拷貝,一次是從記憶體拷貝到應用的程序中,一次是,從程序拷貝到socket快取中,最後網絡卡從socket中拿資料給消費者。

而kafka直接將資料傳送給網絡卡,並且傳送乙份拷貝描述符給socket快取。跳過了兩次拷貝的過程。

資料庫部分:

o(n),因為mysql的索引是b+樹,會在葉子節點形成乙個鍊錶。

前後端分離專案涉及跨域問題

1.不使用jsonp,只修改服務端 response.setheader access control allow origin reqs.getheader origin response.setheader access control allow credentials true respon...

前後端的時間問題

從資料庫獲取時間傳到前端進行展示的時候,有時候可能無法得到乙個滿意的時間格式的時間日期,在資料庫中顯示的是正確的時間格式,獲取出來卻變成了很醜的時間戳,jsonformat註解很好的解決了這個問題,通過使用 jsonformat可以很好的解決 後台到前台時間格式保持一致的問題。另乙個問題是,在使用w...

Fidder判斷前後端的問題

第一種情況 fiddler 在沒有設定過過濾器的情況下面沒有抓到請求資訊,可能是前端頁面元素沒有繫結事件,也有可能是前端發生了js 錯誤,這就是前端的bug 第二種情況 若抓取到的請求返回的結果錯誤,我們要確認一下,是否是前端傳輸的資料是錯的,是的話就是前端的bug 如果確定傳值是正確的話,那就是後...