摘要:前言前段時(shí)間面試包括阿里巴巴的電話面試,遇到過一些面試題,且面試中出現(xiàn)機(jī)率較高的提問筆試,有些答的不是很好掛掉了,今天終于有時(shí)間整理出來分享給大家,希望對(duì)大家面試有所幫助,都能輕松拿。
前言
前段時(shí)間面試(包括阿里巴巴的電話面試),遇到過一些面試題,且面試中出現(xiàn)機(jī)率較高的提問/筆試,有些答的不是很好掛掉了,今天終于有時(shí)間整理出來分享給大家,希望對(duì)大家面試有所幫助,都能輕松拿offer。
主要分三部分:html、css、js;react/vue等都?xì)w類于js,內(nèi)容來源于面試過程中遇到的、在復(fù)習(xí)過程中看到認(rèn)為值得加深鞏固、群友交流分享的;如有理解的錯(cuò)誤或不足之處,歡迎留言糾錯(cuò)、斧正,這里是@IT·平頭哥聯(lián)盟,我是首席填坑官?蘇南(South·Su) ^_^~HTML
有些面試官會(huì)問你對(duì)盒子模型的理解,在我們平時(shí)看到的網(wǎng)頁(yè)中,內(nèi)部的每一個(gè)標(biāo)簽元素它都是有幾個(gè)部分構(gòu)成的:內(nèi)容(content)、外邊距(margin)、內(nèi)邊距(padding)、邊框(border),四個(gè)部分組成,當(dāng)你說完這些面試官是不會(huì)滿意這個(gè)答案的,因?yàn)檫€有一個(gè)重點(diǎn)(IE盒模型和標(biāo)準(zhǔn)盒模型的區(qū)別)———IE盒模型的content包括border、padding
link標(biāo)簽引入,也是當(dāng)下用的最多的一種方式,它屬于XHTML標(biāo)簽,除了能加載css外,還能定義rel、type、media等屬性;
@import引入,@import是CSS提供的,只能用于加載CSS;
style?嵌入方式引入,減少頁(yè)面請(qǐng)求(優(yōu)點(diǎn)),但只會(huì)對(duì)當(dāng)前頁(yè)面有效,無法復(fù)用、會(huì)導(dǎo)致代碼冗余,不利于項(xiàng)目維護(hù)(缺點(diǎn)),此方式一般只會(huì)項(xiàng)目主站首頁(yè)使用(騰訊、淘寶、網(wǎng)易、搜狐)等大型網(wǎng)站主頁(yè),之前有看到過都是這種方式,但后來有些也舍棄了?
小結(jié):link頁(yè)面被加載的時(shí),link會(huì)同時(shí)被加載,而@import引用的CSS會(huì)等到頁(yè)面被加載完再加載,且link是XHTML標(biāo)簽,無兼容問題; link支持動(dòng)態(tài)js去控制DOM節(jié)點(diǎn)去改變樣式,而@import不支持,
行內(nèi)元素有:a、b、span、img、input、select、textarea、em、img、strong(強(qiáng)調(diào)的語氣);
塊級(jí)元素有:ul、ol、li、dl、dt、dd、h1、h2、h3、h4…p、section、div、form等;
空元素: input type="hidden"/>、br>、hr>、link>、meta>;?
小結(jié):塊元素總是獨(dú)占一行,margin對(duì)內(nèi)聯(lián)元素上下不起作用;?
cookie是網(wǎng)站為了標(biāo)示用戶身份而儲(chǔ)存在用戶本地終端上的數(shù)據(jù)(通常經(jīng)過加密),cookie數(shù)據(jù)始終在同源的http請(qǐng)求中攜帶,記會(huì)在瀏覽器和服務(wù)器間來回傳遞。?
sessionStorage和localStorage不會(huì)自動(dòng)把數(shù)據(jù)發(fā)給服務(wù)器,僅在本地保存。
大小: cookie數(shù)據(jù)大小不能超過4k,sessionStorage和localStorage 雖然也有存儲(chǔ)大小的限制,但比cookie大得多,可以達(dá)到5M或更大。
時(shí)效:localStorage 存儲(chǔ)持久數(shù)據(jù),瀏覽器關(guān)閉后數(shù)據(jù)不丟失除非用戶主動(dòng)刪除數(shù)據(jù)或清除瀏覽器/應(yīng)用緩存;sessionStorage 數(shù)據(jù)在當(dāng)前瀏覽器窗口關(guān)閉后自動(dòng)刪除。
cookie 設(shè)置的cookie過期時(shí)間之前一直有效,即使窗口或?yàn)g覽器關(guān)閉部分面試官可能還會(huì)再深入一些:
1)、如何讓cookie瀏覽器關(guān)閉就失效?——不對(duì)cookie設(shè)置任何正、負(fù)或0時(shí)間的即可;
2)、sessionStorage在瀏覽器多窗口之間 (同域)數(shù)據(jù)是否互通共享? ——不會(huì),都是獨(dú)立的,localStorage會(huì)共享;
3)、能讓localStorage也跟cookie一樣設(shè)置過期時(shí)間?答案是可以的,在存儲(chǔ)數(shù)據(jù)時(shí),也存儲(chǔ)一個(gè)時(shí)間戳,get數(shù)據(jù)之前,先拿當(dāng)前時(shí)間跟你之前存儲(chǔ)的時(shí)間戳做比較?詳細(xì)可看我之前寫的另一篇分享(小程序項(xiàng)目總結(jié) )。
語義化是指根據(jù)內(nèi)容的類型,選擇合適的標(biāo)簽(代碼語義化),即用正確的標(biāo)簽做正確的事情;?html語義化讓頁(yè)面的內(nèi)容結(jié)構(gòu)化,結(jié)構(gòu)更清晰,有助于瀏覽器、搜索引擎解析對(duì)內(nèi)容的抓取;?語義化的HTML在沒有CSS的情況下也能呈現(xiàn)較好的內(nèi)容結(jié)構(gòu)與代碼結(jié)構(gòu);?搜索引擎的爬蟲也依賴于HTML標(biāo)記來確定上下文和各個(gè)關(guān)鍵字的權(quán)重,利于SEO;
CSSabsolute:絕對(duì)定位,元素會(huì)相對(duì)于值不為 static 的第一個(gè)父元素進(jìn)行定位(會(huì)一直往父級(jí)節(jié)點(diǎn)查找),且它是脫離正常文檔流、不占位的;
fixed:同樣是絕對(duì)定位,但元素會(huì)相對(duì)于瀏覽器窗口進(jìn)行定位,而不是父節(jié)點(diǎn)的position (IE9以下不支持);
relative:相對(duì)定位,元素相對(duì)于自身正常位置進(jìn)行定位,屬于正常文檔流;static: position的默認(rèn)值,也就是沒有定位,當(dāng)元素設(shè)置該屬性后( top、bottom、left、right、z-index )等屬性將失效;?
inherit:貌似沒用過,查了一下文檔“規(guī)定從父元素繼承 position 屬性的值”;
水平垂直居中 —— 方式一
水平垂直居中 —— 方式二
水平垂直居中 —— 方式三,(新舊伸縮盒兼容)
有,外邊距合并指的是,當(dāng)兩個(gè)垂直元素的都設(shè)置有margin外邊距相遇時(shí),它們將形成一個(gè)外邊距。 合并后的外邊距的高度等于兩個(gè)發(fā)生合并的外邊距的值中的較大那個(gè)。
單冒號(hào)(:)用于CSS3偽類,雙冒號(hào)(::)用于CSS3偽元素。(偽元素由雙冒號(hào)和偽元素名稱組成)?;
雙冒號(hào)是在當(dāng)前規(guī)范中引入的,用于區(qū)分偽類和偽元素。不過瀏覽器需要同時(shí)支持舊的已經(jīng)存在的偽元素寫法,比如:first-line、:first-letter、:before、:after等,
而新的在CSS3中引入的偽元素則不允許再支持舊的單冒號(hào)的寫法;
想讓插入的內(nèi)容出現(xiàn)在其它內(nèi)容前,使用::before,之后則使用::after;?在代碼順序上,::after生成的內(nèi)容也比::before生成的內(nèi)容靠后。
如果按堆棧視角,::after生成的內(nèi)容會(huì)在::before生成的內(nèi)容之上;?
input:-webkit-autofill, textarea:-webkit-autofill, select:-webkit-autofill { background-color: #fff;//設(shè)置成元素原本的顏色 background-image: none; color: rgb(0, 0, 0); } //方法2:由(licongwen )補(bǔ)充 input:-webkit-autofill { -webkit-box-shadow: 0px 0 3px 100px #ccc inset; //背景色 }
用圖片:如果是展示的內(nèi)容基本是固定不變的話,可以直接切圖兼容性也完美(不到萬不得已,不建議);
找UI設(shè)計(jì)師溝通:為了兼容各大主流瀏覽器,避免后期設(shè)計(jì)師來找你撕逼,主動(dòng)找TA溝通,講明原因 ————注意語氣,好好說話不要激動(dòng),更不能攜刀相逼;
CSS3:css3的樣式transform: scale(0.7),scale有縮放功能;
又去找chrome復(fù)習(xí)了一下,說是 “display:table;display: table-cell;” 可以做到,沒用過。
devicePixelRatio:它是window對(duì)象中有一個(gè)devicePixelRatio屬性,設(shè)備物理像素和設(shè)備獨(dú)立像素的比例,也就是 devicePixelRatio = 物理像素 / 獨(dú)立像素;這種方式好麻煩,js檢測(cè),再給元素添加類名控制,難維護(hù);
切圖:直接.5px的切圖,這種方式太low,建議還是別用了,特別難維護(hù),高清屏就糊了,更重要的是被同行看到會(huì)覺得你們很渣渣~;
image背景:css3的background-image:linear-gradient,缺點(diǎn)就是:樣式多,遇到圓角這個(gè)方案就杯劇了;?box-shadow:網(wǎng)上看到說使用box-shadow模擬邊框,box-shadow: inset 0px -1px 1px -1px #06c;沒用過,不過多評(píng)論,建議自己百度;
偽類縮放:現(xiàn)在用的比較多的方式之一 :after 1px然后transform: scale(0.5);基本能滿足所有場(chǎng)景,對(duì)于圓角的處理也很方便;
貼上3、5兩方案代碼,也是目前公司一直在用的(預(yù)處理SCSS):
//3、css3的background-image 本文由@IT·平頭哥聯(lián)盟-首席填坑官?蘇南分享 @mixin border($top:1, $right:1, $bottom:1, $left:1, $color:#ebebf0) { background-image:linear-gradient(180deg, $color, $color 50%, transparent 50%), linear-gradient(90deg, $color, $color 50%, transparent 50%), linear-gradient(0deg, $color, $color 50%, transparent 50%), linear-gradient(90deg, $color, $color 50%, transparent 50%); background-size: 100% $top + px, $right + px 100%, 100% $bottom + px, $left + px 100%; background-repeat: no-repeat; background-position: top, right top, bottom, left top ; } @mixin borderTop($top:1, $color:#ebebf0) { @include border($top, 0, 0, 0, $color); } @mixin borderRight($right:1, $color:#ebebf0) { @include border(0, $right, 0, 0, $color); } @mixin borderBottom($bottom:1, $color:#ebebf0) { @include border(0, 0, $bottom, 0, $color); } @mixin borderLeft($left:1, $color:#ebebf0) { @include border(0, 0, 0, $left, $color); } @mixin borderColor($color:#ebebf0) { @include border(1, 1, 1, 1, $color); } //5、css3的transform:scale 本文由平頭哥聯(lián)盟-首席填坑官?蘇南分享 @mixin borderRadius($width:1,$style:solid,$color:#ebebf0,$radius:2px) { position:relative; &:after{ left:0px; top:0px; right:-100%; bottom:-100%; border-radius:$radius; border-style: $style; border-color: $color; border-width: $width+ px; position:absolute; display:block; transform:scale(0.5); -webkit-transform:scale(0.5); transform-origin:0 0; -webkit-transform-origin:0 0; content:""; } }
display:none在頁(yè)面中是不占位置的,而visibility:hidden保留原來的位置后;
display:none顯示/隱藏 頁(yè)面會(huì)產(chǎn)生回流和重繪的問題,visibility則不會(huì) ——重繪/回流請(qǐng)看JS部分第七題;
Javascript//本文由@IT·平頭哥聯(lián)盟-首席填坑官?蘇南分享,如有錯(cuò)誤,歡迎留言 function b(){ var a=1; }; function b(){ var a=1; return ()=>{ a++; return a; } }; let c = b(); c(); //2 c(); //3 c(); //4
ECMAScript 標(biāo)準(zhǔn)定義有7種數(shù)據(jù)類型:??
Boolean
Null
Undefined
Number
String
Symbol?:(ECMAScript 6 新定義 ,Symbol 生成一個(gè)全局唯一、表示獨(dú)一無二的值)?
Object?:(Array、Function、Object)
//方法1: var separator=(num)=>{ if(!num){ return "0.00"; }; let str = parseFloat(num).toFixed(2); return str && str .toString() .replace(/(d)(?=(d{3})+.)/g, function($0, $1) { return $1 + ","; }); } separator(386485473.88) //"386,485,473.88" //方法2: (386485473.88).toLocaleString("en-US") // "386,485,473.88" 由 (sRect)補(bǔ)充
遍歷數(shù)組時(shí)的異同: for循環(huán) 數(shù)組下標(biāo)的typeof類型:number, for in 循環(huán)數(shù)組下標(biāo)的typeof類型:string;
var southSu = ["蘇南","深圳","18","男"]; for(var i=0;i遍歷對(duì)象時(shí)的異同:for循環(huán) 無法用于循環(huán)對(duì)象,獲取不到obj.length; for in 循環(huán)遍歷對(duì)象的屬性時(shí),原型鏈上的所有屬性都將被訪問,解決方案:使用hasOwnProperty方法過濾或Object.keys會(huì)返回自身可枚舉屬性組成的數(shù)組
Object.prototype.test = "原型鏈上的屬性,本文由平頭哥聯(lián)盟-首席填坑官?蘇南分享"; var southSu = {name:"蘇南",address:"深圳",age:18,sex:"男",height:176}; for(var i=0;i5、給table表格中的每個(gè)td綁定事件,td數(shù)量為1000+,寫一下你的思路(事件委托題):
我們是@IT·平頭哥聯(lián)盟 ,我是首席填坑官 蘇南 前端開發(fā) 優(yōu)秀 我們是@IT·平頭哥聯(lián)盟 ,我是首席填坑官 蘇南 前端開發(fā) 優(yōu)秀 ………… 我們是@IT·平頭哥聯(lián)盟 ,我是首席填坑官 蘇南 前端開發(fā) 優(yōu)秀 6、js把一串字符串去重(能統(tǒng)計(jì)出字符重復(fù)次數(shù)更佳),列出你的思路(兩種以上):
7、項(xiàng)目上線前,你們做過哪些性能優(yōu)化:
圖片預(yù)加載,css樣式表放在頂部且link鏈?zhǔn)揭耄琷avascript放在底部body結(jié)束標(biāo)簽前;
使用dns-prefetch對(duì)項(xiàng)目中用到的域名進(jìn)行 DNS 預(yù)解析,減少 DNS 查詢,如: ;?
減少http請(qǐng)求次數(shù):圖片靜態(tài)資源使用CDN托管;
API接口數(shù)據(jù)設(shè)置緩存,CSS Sprites/SVG Sprites(如有疑惑:該如何以正確的姿勢(shì)插入SVG Sprites? 這篇說的很詳細(xì)), JS、CSS源碼壓縮、圖片大小控制合適,使用iconfont(+ 字體圖標(biāo))或SVG,它們比圖片更小更清晰,網(wǎng)頁(yè)Gzip壓縮;
減少DOM操作次數(shù),優(yōu)化javascript性能;
減少 DOM 元素?cái)?shù)量,合理利用:after、:before等偽類;
避免重定向、圖片懶加載;前后端分離開發(fā),資源按需加載,最好能做到首屏直出(即服務(wù)端渲染);?
避免使用CSS Expression(css表達(dá)式)又稱Dynamic properties(動(dòng)態(tài)屬性)?;
多域名分發(fā)劃分內(nèi)容到不同域名,解決瀏覽器域名請(qǐng)求并發(fā)數(shù)問題,同時(shí)也解決了請(qǐng)求默認(rèn)攜帶的cookie問題;
盡量減少 iframe 使用,它會(huì)阻塞主頁(yè)面的渲染;?對(duì)所有資源壓縮 JavaScript 、 CSS 、字體、圖片等,甚至html;
只想到這些,歡迎補(bǔ)充……
8、你對(duì)重繪、重排的理解?
首先網(wǎng)頁(yè)數(shù)次渲染生成時(shí),這個(gè)可稱為重排;?
修改DOM、樣式表、用戶事件或行為(鼠標(biāo)懸停、頁(yè)面滾動(dòng)、輸入框鍵入文字、改變窗口大小等等)這些都會(huì)導(dǎo)致頁(yè)面重新渲染,那么重新渲染,就需要重新生成布局和重新繪制節(jié)點(diǎn),前者叫做"重排",后者"重繪";?
減少或集中對(duì)頁(yè)面的操作,即多次操作集中在一起執(zhí)行;?
總之可以簡(jiǎn)單總結(jié)為:重繪不一定會(huì)重排,但重排必然為會(huì)重繪。?
更詳細(xì)的可以看阮老師分析
8、有用過promise嗎?請(qǐng)寫出下列代碼的執(zhí)行結(jié)果,并寫出你的理解思路:
setTimeout(()=>{ console.log(1); }, 0); new Promise((resolve)=>{ console.log(2); for(var i = 1; i < 200; i++){ i = 198 && resolve(); } console.log(3); }).then(()=>{ console.log(4); }); console.log(5); // 結(jié)果:2、3、5、4、1;首先要講一下,js是單線程執(zhí)行,那么代碼的執(zhí)行就有先后;?
有先后,那就要有規(guī)則(排隊(duì)),不然就亂套了,那么如何分先后呢?大體分兩種:同步、異步;?
同步很好理解,就不用多說了(我就是老大,你們都要給我讓路);?
異步(定時(shí)器[setTimeout ,setInterval]、事件、ajax、promise等),說到異步又要細(xì)分宏任務(wù)、微任務(wù)兩種機(jī)制,?
宏任務(wù):js異步執(zhí)行過程中遇到宏任務(wù),就先執(zhí)行宏任務(wù),將宏任務(wù)加入執(zhí)行的隊(duì)列(event queue),然后再去執(zhí)行微任務(wù);?
微任務(wù):js異步執(zhí)行過程中遇到微任務(wù),也會(huì)將任務(wù)加入執(zhí)行的隊(duì)列(event queue),但是注意這兩個(gè)queue身份是不一樣的,不是你先進(jìn)來,就你先出去的(就像宮里的皇上選妃侍寢一樣,不是你先進(jìn)宮(或先來排隊(duì))就先寵幸的 ),真執(zhí)行的時(shí)候是先微任務(wù)里拿對(duì)應(yīng)回調(diào)函數(shù),然后才輪到宏任務(wù)的隊(duì)列回調(diào)執(zhí)行的;?
理解了這個(gè)順序,那上面的結(jié)果也就不難懂了。
說細(xì)步驟如下:
setTimeout 是異步,不會(huì)立即執(zhí)行,加入執(zhí)行隊(duì)列;
new Promise 會(huì)立即執(zhí)行 輸出 2、3,而在2、3之間執(zhí)行了resolve 也就是微任務(wù);
再到console.log(5)了,輸出5;
然后異步里的微任務(wù)先出,那就得到4;
最后執(zhí)行宏任務(wù) setTimeout 輸出 1;如有錯(cuò)誤歡迎糾正!
9、new SouthSu() 在這個(gè)過程中都做了些什么?
function SouthSu(){ this.name = "蘇南"; this.age = 18; this.address = "深圳"; this.address = "首席填坑官"; }; let South = new SouthSu(); console.log(South,South.__proto__ === SouthSu.prototype) //true 執(zhí)行過程: 創(chuàng)建一個(gè)空的對(duì)象 let p1 = new Object(); 設(shè)置原型鏈 p1.__proto__ = SouthSu.prototype; 讓 構(gòu)造函數(shù) 的this 指向 p1 這個(gè)空對(duì)象 let funCall = SouthSu.call(p1); 處理 構(gòu)造函數(shù) 的返回值:判斷SouthSu的返回值類型,如果是值類型則返回obj,如果是引用類型,就返回這個(gè)引用類型的對(duì)象;10、工作中如果讓你使用js實(shí)現(xiàn)一個(gè)持續(xù)的動(dòng)畫,你會(huì)怎么做(比如轉(zhuǎn)盤抽獎(jiǎng))??
js來實(shí)現(xiàn)動(dòng)畫,第一時(shí)間想到的就是定時(shí)器(setTimeout、setInterval);?
后面想起來js有個(gè) window.requestAnimationFrame ,當(dāng)時(shí)只是說了記得有這么一個(gè)API,具體的細(xì)節(jié)沒能答上,面試官直言想聽的就是這個(gè)API的使用,好吧是我準(zhǔn)備的不夠充分,希望其他同學(xué)不再犯同樣錯(cuò)誤;
window.requestAnimationFrame() 方法告訴瀏覽器您希望執(zhí)行動(dòng)畫并請(qǐng)求瀏覽器在下一次重繪之前調(diào)用指定的函數(shù)來更新動(dòng)畫。該方法使用一個(gè)回調(diào)函數(shù)作為參數(shù),這個(gè)回調(diào)函數(shù)會(huì)在瀏覽器重繪之前調(diào)用,回調(diào)的次數(shù)通常是每秒60次,是大多數(shù)瀏覽器通常匹配 W3C 所建議的刷新頻率。在大多數(shù)瀏覽器里,當(dāng)運(yùn)行在后臺(tái)標(biāo)簽頁(yè)或者隱藏的 里時(shí),requestAnimationFrame() 會(huì)暫停調(diào)用以提升性能和電池壽命。小結(jié):以往項(xiàng)目開發(fā)中大數(shù)人可能都是第一時(shí)間選擇JS定時(shí)器setInterval 或者setTimeout 來控制的動(dòng)畫每隔一段時(shí)間刷新元素的狀態(tài),來達(dá)到自己所想要的動(dòng)畫效果,但是這種方式并不能準(zhǔn)確地控制動(dòng)畫幀率,因?yàn)檫@是開發(fā)者主動(dòng)要求瀏覽器去繪制,它這可能會(huì)因?yàn)閯?dòng)畫控制的時(shí)間、繪制的頻率、瀏覽器的特性等而導(dǎo)致丟幀的問題; requestAnimationFrame 是瀏覽器什么時(shí)候要開始繪制了瀏覽器它自己知道,通過requestAnimationFrame告訴我們,這樣就不會(huì)出現(xiàn)重復(fù)繪制丟失的問題。
//一個(gè)持續(xù)旋轉(zhuǎn)的正方形,11、如何設(shè)置http緩存?
1)、Expires
Expires的值為服務(wù)端返回的到期時(shí)間,響應(yīng)時(shí)告訴瀏覽器可以直接從瀏覽器緩存中讀取無需再次請(qǐng)求。
缺點(diǎn):返回的是服務(wù)端的時(shí)間,比較的時(shí)間是客戶端的時(shí)間,如果時(shí)間不一致有可能出現(xiàn)錯(cuò)誤。
2)、Cache-Control
Cache-Control可設(shè)置的字段有:
private:客戶端可以緩存
public:客戶端和代理服務(wù)器都可以緩存
max-age=xxx:緩存內(nèi)容在xxx秒后失效
no-cache:需要用另一種緩存策略來驗(yàn)證緩存(ETag,Last-Modified)
no-store:不進(jìn)行緩存
Last-Modified:瀏覽器請(qǐng)求獲得文件后,服務(wù)器返回該文件的最后修改時(shí)間Last-Modified,下一次請(qǐng)求會(huì)帶上If-Modified-Since標(biāo)識(shí),如果If-Modified-Since等于服務(wù)器的文件修改時(shí)間,則表示文件沒有修改,返回304狀態(tài)碼,瀏覽器從瀏覽器緩存中讀取文件。如果If-Modified-Since小于服務(wù)端的文件修改時(shí)間,則瀏覽器會(huì)重新發(fā)送請(qǐng)求獲取文件,返回狀態(tài)碼200。
ETag:服務(wù)器文件的一個(gè)唯一標(biāo)識(shí),例如對(duì)文件內(nèi)容取md5值作為ETag的字段返回給瀏覽器。當(dāng)文件變化時(shí)ETag的值也會(huì)發(fā)生變化。下次請(qǐng)求會(huì)帶上If-None-Match即瀏覽器保留的ETag值,如果發(fā)送了變化,則文件被修改,需要重新請(qǐng)求,返回200狀態(tài)碼。反之瀏覽器就從緩存中讀取文件,返回304狀態(tài)碼。
總結(jié):——幾者之間的關(guān)系
當(dāng)Cache-Control設(shè)置為max-age=xx并且同事設(shè)置Expires時(shí),Cache-Control的優(yōu)先級(jí)更高
當(dāng)ETag和Last-Modified同時(shí)存在時(shí),服務(wù)器先會(huì)檢查ETag,然后再檢查Last-Modified,最終決定返回304還是200
該題由 本文由平頭哥聯(lián)盟-成員(ZodiacSyndicate )補(bǔ)充
12、隨機(jī)打亂一個(gè)數(shù)組
思路:從數(shù)組的最后一項(xiàng)開始,隨機(jī)選擇前面的一個(gè)元素進(jìn)行交換,然后一步步往前交換
//該題由 本文由平頭哥聯(lián)盟-成員(ZodiacSyndicate )補(bǔ)充 const shuffle = arr => { let end = arr.length - 1 while(end) { // 當(dāng)end為0時(shí)不需要交換 const index = Math.floor(Math.random() * (end + 1)) [arr[index], arr[end]] = [arr[end], arr[index]] end -= 1 } return arr }13、用React實(shí)現(xiàn)一個(gè)顯示鼠標(biāo)位置的高階組件
//該題由 本文由平頭哥聯(lián)盟-成員(ZodiacSyndicate )補(bǔ)充 const mousePosition = Component => class extends React.Component { state = { x: 0, y: 0, } handleMouseMove = e => { this.setState({ x: e.clientX, y: e.clientY }) } render() { const { x, y } = this.state return ( <>x: {x} y: {y} > ) } }文本將持續(xù)更新,整理收集自己/群友的面經(jīng)分享給大家,如覺得不錯(cuò),記得關(guān)注我們的公眾號(hào)哦!!
更多文章:做完小程序項(xiàng)目、老板給我加了6k薪資~
你應(yīng)該做的前端性能優(yōu)化之總結(jié)大全!
如何給localStorage設(shè)置一個(gè)過期時(shí)間?
手把手教你如何繪制一輛會(huì)跑車
如何用CSS3畫出懂你的3D魔方?
SVG Sprites Icon的使用技巧
immutability因React官方出鏡之使用總結(jié)分享!作者:蘇南 - 首席填坑官
交流群:912594095,公眾號(hào):honeyBadger8
本文原創(chuàng),著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系@IT·平頭哥聯(lián)盟獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明原鏈接及出處。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/113971.html
摘要:前言前段時(shí)間面試包括阿里巴巴的電話面試,遇到過一些面試題,且面試中出現(xiàn)機(jī)率較高的提問筆試,有些答的不是很好掛掉了,今天終于有時(shí)間整理出來分享給大家,希望對(duì)大家面試有所幫助,都能輕松拿。 showImg(https://segmentfault.com/img/bVbhSwP?w=1008&h=452); 前言 前段時(shí)間面試(包括阿里巴巴的電話面試),遇到過一些面試題,且面試中出現(xiàn)機(jī)...
摘要:前言前段時(shí)間面試包括阿里巴巴的電話面試,遇到過一些面試題,且面試中出現(xiàn)機(jī)率較高的提問筆試,有些答的不是很好掛掉了,今天終于有時(shí)間整理出來分享給大家,希望對(duì)大家面試有所幫助,都能輕松拿。 showImg(https://segmentfault.com/img/bVbhSwP?w=1008&h=452); 前言 前段時(shí)間面試(包括阿里巴巴的電話面試),遇到過一些面試題,且面試中出現(xiàn)機(jī)...
摘要:背景下午四點(diǎn),天氣晴朗,陽光明媚,等著下班產(chǎn)品我希望頁(yè)面上的這個(gè)數(shù)據(jù)實(shí)時(shí)變化開發(fā),可以,用那個(gè)叫著的東西,再找一個(gè)封裝好框架,如感覺自己好機(jī)智產(chǎn)品要開發(fā)好久開發(fā)嗯,三天,五天,還是產(chǎn)品我希望今天上線開發(fā),,不能描述的語言,話說為什么不支持表 背景 下午四點(diǎn),天氣晴朗,陽光明媚,等著下班產(chǎn)品:我希望頁(yè)面上的這個(gè)數(shù)據(jù)實(shí)時(shí)變化開發(fā):···,可以,用那個(gè)叫著WebSocket的東西,再找一個(gè)封...
摘要:背景下午四點(diǎn),天氣晴朗,陽光明媚,等著下班產(chǎn)品我希望頁(yè)面上的這個(gè)數(shù)據(jù)實(shí)時(shí)變化開發(fā),可以,用那個(gè)叫著的東西,再找一個(gè)封裝好框架,如感覺自己好機(jī)智產(chǎn)品要開發(fā)好久開發(fā)嗯,三天,五天,還是產(chǎn)品我希望今天上線開發(fā),,不能描述的語言,話說為什么不支持表 背景 下午四點(diǎn),天氣晴朗,陽光明媚,等著下班產(chǎn)品:我希望頁(yè)面上的這個(gè)數(shù)據(jù)實(shí)時(shí)變化開發(fā):···,可以,用那個(gè)叫著WebSocket的東西,再找一個(gè)封...
閱讀 3490·2019-08-30 15:53
閱讀 3406·2019-08-29 16:54
閱讀 2190·2019-08-29 16:41
閱讀 2396·2019-08-23 16:10
閱讀 3377·2019-08-23 15:04
閱讀 1342·2019-08-23 13:58
閱讀 347·2019-08-23 11:40
閱讀 2451·2019-08-23 10:26