摘要:協議主要是通過請求頭當中的一些字段來和服務器進行通信,從而采用不同的緩存策略。會緩存所有的結構,但是問題在于,一些頁面開始時進行的上報或者請求可能會被影響。
1.如何用一個div實現下圖
css
#demo{ width:120px; height: 120px; border:2px solid #333; border-radius: 20px; position:relative; } #demo:before,#demo:after{ content: ""; width: 60px; height: 60px; position: absolute; left: 50%; top: 50%; } #demo:before{ margin-left: -30px; border-top: 2px solid; } #demo:after{ margin-top: -30px; border-left: 2px solid; }
html
類似這樣用偽類實現圖形的題目還有很多,分享兩個:
用純CSS實現一個帶三角的正方形 僅用一個div
https://blog.csdn.net/hahahah...
CSS實現太極圖(1個DIV實現)
https://www.cnblogs.com/web12...
2.如何實現①平行四邊形 ②三角形
① 平行四邊形
css
div { width:100px; height:100px; border: 2px solid #333; color: #333; transform: skew(-20deg); }
html
運行結果:
②三角形
css
div{ width: 0; height: 0; border: 10px solid transparent; border-top-style: #333; }
html
運行結果:
3.請寫出下列alert的結果
alert(typeof null) //object alert(typeof undefined) //undefined alert(typeof NaN) //number alert(NaN == undefined) //false alert(NaN ==NaN) //false var str="123abc" alert(typeof str++)//number alert(str)//NaN
4.已知有數組 [[1,2,2],[3,4,5,5],[6,7,8,9,[11,12,[12,13,[14]]]],10],扁平化數組后應該得到的數組為:[1,2,2,3,4,5,5,6,7,8,9,11,12,12,13,14,10],請寫出實現扁平化額代碼。
第一種方法:
var arr=[[1,2,2],[3,4,5,5],[6,7,8,9,[11,12,[12,13,[14]]]],10] function Flat1(arr){ var newArr =[]; for(var i= 0; i < arr.length; i++){ if(arr[i] instanceof Array){ newArr = newArr.concat(Flat1(arr[i])); // newArr.push.apply(newArr, Flat1(arr[i])); }else{ newArr.push(arr[i]); } } return newArr; } console.log(Flat1(arr))
第二種方法:(es6的方法)
var arr=[[1,2,2],[3,4,5,5],[6,7,8,9,[11,12,[12,13,[14]]]],10] const Flat2 = arr => arr.reduce((a, b) => a.concat(Array.isArray(b) ? Flat2(b) : b), []); console.log(Flat2(arr))
對應es5的代碼
var arr=[[1,2,2],[3,4,5,5],[6,7,8,9,[11,12,[12,13,[14]]]],10] var Flat3 = function (arr){ return arr.reduce(function(a,b){ return a.concat(Array.isArray(b)? Flat3(b):b) },[]); } console.log(Flat3(arr))
5.寫出下列代碼執行結果:
async function async1(){ console.log("async1 start") await async2() console.log("async1 end") } async function async2(){ console.log("async2") } console.log("script start") setTimeout(function(){ console.log("setTimeout") },0) async1(); new Promise(function(resolve){ console.log("promise1") resolve(); }).then(function(){ console.log("promise2") }) console.log("script end")
運行結果:
script start async1 start async2 promise1 script end promise2 async1 end setTimeout
類似題目修改:
async function async1(){ console.log("async1 start") await async2() console.log("async1 end") } function async2(){ // 去掉了 async 關鍵字 console.log("async2") } console.log("script start") setTimeout(function(){ console.log("setTimeout") },0) async1(); new Promise(function(resolve){ console.log("promise1") resolve(); }).then(function(){ console.log("promise2") }) console.log("script end")
運行結果:
script start async1 start async2 promise1 script end async1 end promise2 setTimeout
解析:https://www.cnblogs.com/geyou...
6.寫出能夠將http://www.sohu.com/a/2830163...{code:aaa,_f:index_cpc_0}的函數
function parseObject(url){ var obj = {}; if(url.indexOf("?")!==-1){ var url = url.substring(url.indexOf("?")+1); }else{ return ; } var arr = url.split("&"); arr.forEach(function(val){ var brr = val.split("="); obj[brr[0]] = brr[1]; }); return obj; } var url="http://www.sohu.com/a/283016366_267106?code=aaa&_f=index_cpc_0" parseObject(url)
7.tcp/ip協議
TCP/IP 是一類協議系統,它是用于網絡通信的一套協議集合.
傳統上來說 TCP/IP 被認為是一個四層協議
1) 網絡接口層:
主要是指物理層次的一些接口,比如電纜等.
2) 網絡層:
提供獨立于硬件的邏輯尋址,實現物理地址與邏輯地址的轉換.
在 TCP / IP 協議族中,網絡層協議包括 IP 協議(網際協議),ICMP 協議( Internet 互聯網控制報文協議),以及 IGMP 協議( Internet 組管理協議).
3) 傳輸層:
為網絡提供了流量控制,錯誤控制和確認服務.
在 TCP / IP 協議族中有兩個互不相同的傳輸協議: TCP(傳輸控制協議)和 UDP(用戶數據報協議).
4) 應用層:
為網絡排錯,文件傳輸,遠程控制和 Internet 操作提供具體的應用程序
8.關于緩存
1. 前端緩存概述
前端緩存主要是分為HTTP緩存和瀏覽器緩存。其中HTTP緩存是在HTTP請求傳輸時用到的緩存,主要在服務器代碼上設置;而瀏覽器緩存則主要由前端開發在前端js上進行設置。下面會分別具體描述。
2. 前端緩存分類
2.1 HTTP緩存
從HTTP協議開始說起
由于整個網絡服務都是基于http協議 的,因此先來介紹一下HTTP協議當中定義的緩存機制。HTTP協議主要是通過請求頭當中的一些字段來和服務器進行通信,從而采用不同的緩存策略。
一般來說,對于一個完整的HTTP GET請求緩存過程會包含七個主要的步驟:①從接收網絡請求開始,②客戶端會讀取請求報文并且對報文進行解析, 進而提取URL和各種首部,③然后將會查詢是否在本地有副本,如果本地沒有副本就會從服務器上獲取一份副本并且保存在本地。④接著會進行查看副本是否足夠新鮮(新鮮度檢測), 如果緩存已經失效就會詢問服務器是否有任何更新,⑤服務器就會用新的首部和已緩存的主體來構建一條響應報文,⑥最后發送給客戶端。⑦根據服務器的不同,會可選地選擇創建日志記錄該過程。
整體流程:HTTP緩存都是從第二次請求開始的。
第一次請求資源時,服務器返回資源,并在respone header頭中回傳資源的緩存參數;第二次請求時,瀏覽器判斷這些請求參數,擊中強緩存就直接200,否則就把請求參數加到request header頭中傳給服務器,看是否擊中協商緩存,擊中則返回304,否則服務器會返回新的資源。
HTTP緩存分為強緩存和協議緩存,它們的區別如下:
200 from disk or 200 from memory :
強緩存的200也有兩種情況:200 from disk和200 from memory。現在我沒有找到明確的文檔來描述這種區別的發生條件。https://www.zhihu.com/questio... 這個問題知乎中提到了一些情景,可以自行取用。
2.1.1 強緩存
2.1.2 協商緩存
協商緩存都是成對出現的。
2.1.3 最佳優化策略-消滅304
最佳優化策略:因為協商緩存本身也有http請求的損耗,所以最佳優化策略是要盡可能的將靜態文件存儲為較長的時間,多利用強緩存而不是協商緩存,即消滅304。
但是給文件設置一個很長的Cacha-Control也會帶來其他的問題,最主要的問題是靜態內容更新時,用戶不能及時獲得更新的內容。這時候就要使用hash的方法對文件進行命名,通過每次更新不同的靜態文件名來消除強緩存的影響。
Hash命名:
http://xxx.com/main.5eas34fa.js
http://xxx.com/main.js?5eas34fa
http://xxx.com/5eas34fa/main.js
2.2 瀏覽器緩存
2.2.1 本地存儲小容量
Cookie主要用于用戶信息的存儲,Cookie的內容可以自動在請求的時候被傳遞給服務器。
LocalStorage的數據將一直保存在瀏覽器內,直到用戶清除瀏覽器緩存數據為止。
SessionStorage的其他屬性同LocalStorage,只不過它的生命周期同標簽頁的生命周期,當標簽頁被關閉時,SessionStorage也會被清除。
2.2.2 本地存儲大容量
WebSql和IndexDB主要用在前端有大容量存儲需求的頁面上,例如,在線編輯瀏覽器或者網頁郵箱。
2.2.3 應用緩存與PWA
應用緩存全稱為Offline Web Application,它的緩存內容被存在瀏覽器的Application Cache中。它也是一個被W3C標準廢棄的功能,主要是通過manifest文件來標注要被緩存的靜態文件清單。但是在緩存靜態文件的同時,也會默認緩存html文件。這導致頁面的更新只能通過manifest文件中的版本號來決定。而且,即使我們更新了version,用戶的第一次訪問還是會訪問到老的頁面,只有下一次再訪問才能訪問到新的頁面。所以,應用緩存只適合那種常年不變化的靜態網站。如此的不方便,也是被廢棄的重要原因。
PWA全稱是漸進式網絡應用,主要目標是實現web網站的APP式功能和展示。盡管PWA也有manifest文件,但是與應用緩存卻完全不同。不同于manifest簡單的將文件通過是否緩存進行分類,PWA用manifest構建了自己的APP骨架。另外,PWA用Service Worker來控制緩存的使用。這一塊的內容較多,在這里就不詳細展開了。
2.2.4 往返緩存
往返緩存又稱為BFCache,是瀏覽器在前進后退按鈕上為了提升歷史頁面的渲染速度的一種策略。BFCache會緩存所有的DOM結構,但是問題在于,一些頁面開始時進行的上報或者請求可能會被影響。這個問題現在主要會出現在微信h5的開發中。
原文:http://web.jobbole.com/95057/
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/100995.html
摘要:協議主要是通過請求頭當中的一些字段來和服務器進行通信,從而采用不同的緩存策略。會緩存所有的結構,但是問題在于,一些頁面開始時進行的上報或者請求可能會被影響。 1.如何用一個div實現下圖 showImg(https://segmentfault.com/img/bVbm8Rf?w=133&h=134); css #demo{ width:120px; h...
摘要:后續前端筆試題面試題記錄下小結我想說的是在找工作期間,肯定有自己發揮不好,或者不會的問題,一定要在晚上的時候自己再學習總結一下,在一個問題上面盡量不要栽倒兩次,學到了的才是自己的。 前言 過完元宵,就到上海找了波工作,現在已經入職好了,蹭波熱點,寫一波面試記錄,內容包含筆試題和面試題,還有一些沒有寫進來,準備再開一篇,許久沒寫了,寫的確實有些慢。如果喜歡的話可以點波贊,或者關注一下,希...
摘要:后續前端筆試題面試題記錄下小結我想說的是在找工作期間,肯定有自己發揮不好,或者不會的問題,一定要在晚上的時候自己再學習總結一下,在一個問題上面盡量不要栽倒兩次,學到了的才是自己的。 前言 過完元宵,就到上海找了波工作,現在已經入職好了,蹭波熱點,寫一波面試記錄,內容包含筆試題和面試題,還有一些沒有寫進來,準備再開一篇,許久沒寫了,寫的確實有些慢。如果喜歡的話可以點波贊,或者關注一下,希...
閱讀 2895·2019-08-30 15:55
閱讀 2000·2019-08-30 14:02
閱讀 1239·2019-08-29 15:23
閱讀 1006·2019-08-29 11:27
閱讀 460·2019-08-26 11:43
閱讀 3190·2019-08-26 10:32
閱讀 1253·2019-08-23 14:41
閱讀 3301·2019-08-23 14:41