【備戰秋招Day 5】經典面試題17-20及在線編程題13-15答案
經典面試題
17.一個頁面從輸入 URL 到頁面載入顯示完成,這個過程中都發生了什麼?
分為4個步驟:
(1),當發送一個URL請求時,不管這個URL是Web頁面的URL還是Web頁面上每個資源的URL,瀏覽器都會開啟一個線程來處理這個請求,同時在遠程DNS伺服器上啟動一個DNS查詢。這能使瀏覽器獲得請求對應的IP地址。
(2), 瀏覽器與遠程Web伺服器通過TCP三次握手協商來建立一個TCP/IP連接。該握手包括一個同步報文,一個同步-應答報文和一個應答報文,這三個報文在 瀏覽器和伺服器之間傳遞。該握手首先由客戶端嘗試建立起通信,而後伺服器應答並接受客戶端的請求,最後由客戶端發出該請求已經被接受的報文。
(3),一旦TCP/IP連接建立,瀏覽器會通過該連接向遠程伺服器發送HTTP的GET請求。遠程伺服器找到資源並使用HTTP響應返回該資源,值為200的HTTP響應狀態表示一個正確的響應。
(4),此時,Web伺服器提供資源服務,客戶端開始下載資源。
18.HTTP狀態碼
100 Continue 繼續,一般在發送post請求時,已發送了http header之後服務端將返回此信息,表示確認,之後發送具體參數信息
200 OK 正常返回信息
201 Created 請求成功並且伺服器創建了新的資源
202 Accepted 伺服器已接受請求,但尚未處理
301 Moved Permanently 請求的網頁已永久移動到新位置。
302 Found 臨時性重定向。
303 See Other 臨時性重定向,且總是使用 GET 請求新的 URI。
304 Not Modified 自從上次請求後,請求的網頁未修改過。
400 Bad Request 伺服器無法理解請求的格式,客戶端不應當嘗試再次使用相同的內容發起請求。
401 Unauthorized 請求未授權。
403 Forbidden 禁止訪問。
404 Not Found 找不到如何與 URI 相匹配的資源。
500 Internal Server Error 最常見的伺服器端錯誤。
503 Service Unavailable 伺服器端暫時無法處理請求(可能是過載或維護)。
19.請解釋一下 JavaScript 的同源策略。
概念:同源策略是客戶端腳本(尤其是Javascript)的重要的安全度量標準。它最早出自Netscape Navigator2.0,其目的是防止某個文檔或腳本從多個不同源裝載。這裡的同源策略指的是:協議,域名,埠相同,同源策略是一種安全協議。指一段腳本只能讀取來自同一來源的窗口和文檔的屬性。
20 .GET和POST的區別,何時使用POST?
GET:一般用於信息獲取,使用URL傳遞參數,對所發送信息的數量也有限制,一般在2000個字元
POST:一般用於修改伺服器上的資源,對所發送的信息沒有限制。
GET方式需要使用Request.QueryString來取得變數的值,而POST方式通過Request.Form來獲取變數的值,也就是說Get是通過地址欄來傳值,而Post是通過提交表單來傳值。
然而,在以下情況中,請使用 POST 請求:
無法使用緩存文件(更新伺服器上的文件或資料庫)
向伺服器發送大量數據(POST 沒有數據量限制)
發送包含未知字元的用戶輸入時,POST 比 GET 更穩定也更可靠。
前端思考題
9.ajax請求的時候get 和post方式的區別是什麼?
區別在:
一個在url後面,一個放在虛擬載體裡面
有大小限制
安全問題
應用不同:一個是論壇等只需要請求的,一個是類似修改密碼的。
10. Web前端密碼加密是否有意義?(既然前端代碼都是直接可以看到的,那加密是否還有意義?)
我總結一下,首先大家都知道走 HTTPS 才是目前唯一負責的方式。但在 HTTP 環境下,無論如何都可能會被劫持流量,不管前端做不做加密都會被輕易成功登錄。這個時候保護密碼明文是否有意義?有人站隊前端加密無意義,考慮的是這個加密對本站的安全性沒有任何提升;但如果你是從保護用戶的角度出發,用戶多站點共享密碼是現狀,你在沒法改變這一點的情況下,如果能夠保護密碼明文,至少降低了一點該用戶其他網站(即使是 HTTPS 的網站)被一鍋端的風險。這怎麼能說完全沒有意義?有人說 HTTP 流量可以直接注入腳本,直接拿到用戶輸入的密碼,這沒錯。但是注入腳本就是代價,只要能夠提高一點點門檻就不能說沒有意義,很多時候是這些收益和成本之間的權衡。
在線編程題
13.避免全局變數
要求:給定的 js 代碼中存在全局變數,請修復:
思路:在Javascript語言中,聲明變數使用的都是關鍵字var,如果不使用var而直接聲明變數,則該變數為全局變數。
function globals() {n //只需要在聲明myObject時加上var就行了n var myObject = {n name : Joryn };n n return myObject;n}n
14.將字元串轉換為駝峰格式
要求:修改 js 代碼中 parseInt 的調用方式,使之通過全部測試用例。
parseInt(string, radix)n//當參數 radix 的值為 0,或沒有設置該參數時,parseInt() 會根據 string 來判斷數字的基數。n
思路:舉例,如果 string 以 "0x" 開頭,parseInt() 會把 string 的其餘部分解析為十六進位的整數。如果 string 以 0 開頭,那麼 ECMAScript v3 允許 parseInt() 的一個實現把其後的字元解析為八進位或十六進位的數字。如果 string 以 1 ~ 9 的數字開頭,parseInt() 將把它解析為十進位的整數。
function parse2Int(num)n{n return parseInt(num,10);n}n//解釋來自於W3schooln
15.計時器
要求:實現一個打點計時器,要求:
1、從 start 到 end(包含 start 和 end),每隔 100 毫秒 console.log 一個數字,每次數字增幅為 1;
2、返回的對象中需要包含一個 cancel 方法,用於停止定時操作;
3、第一個數需要立即輸出。
思路:setInterval() 方法會按照指定周期不停地調用函數,直到 clearInterval() 被調用或窗口被關閉。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的參數。注意第一個數需要立即輸出即可。
function count(start, end) {n //立即輸出第一個值n console.log(start++);n var timer = setInterval(function(){n if(start <= end){n console.log(start++);n }else{n clearInterval(timer);n }n },100);n //返回一個對象n return {n cancel : function(){n clearInterval(timer);n }n };n }n
推薦閱讀:
※面試中回答好四個問題,瞬間打動HR!
※面試中最常見的27個問題,這裡有一份最全的回答指南
※撿漏深度學習面試題
※面試時自我介紹究竟應該怎樣做