成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

面試分享:2018阿里巴巴前端面試總結(jié)(題目+答案 30題)

lanffy / 2885人閱讀

摘要:使用實(shí)現(xiàn)一個(gè)持續(xù)的動(dòng)畫(huà)效果最開(kāi)始的思路是用定時(shí)器實(shí)現(xiàn),最后沒(méi)有想的太完整,面試官給出的答案是用。參考鏈接封裝一個(gè)函數(shù),參數(shù)是定時(shí)器的時(shí)間,執(zhí)行回調(diào)函數(shù)。規(guī)范規(guī)定,每個(gè)模塊內(nèi)部,變量代表當(dāng)前模塊。

1、使用css實(shí)現(xiàn)一個(gè)持續(xù)的動(dòng)畫(huà)效果
————————————————————————————————————————————————————————

animation:mymove 5s infinite;

@keyframes mymove {

    from {top:0px;}
    
    to {top:200px;}

}

主要考: animation 用法

值    描述
animation-name    規(guī)定需要綁定到選擇器的 keyframe 名稱(chēng)。
animation-duration    規(guī)定完成動(dòng)畫(huà)所花費(fèi)的時(shí)間,以秒或毫秒計(jì)。
animation-timing-function    規(guī)定動(dòng)畫(huà)的速度曲線。
animation-delay    規(guī)定在動(dòng)畫(huà)開(kāi)始之前的延遲。
animation-iteration-count    規(guī)定動(dòng)畫(huà)應(yīng)該播放的次數(shù)。
animation-direction    規(guī)定是否應(yīng)該輪流反向播放動(dòng)畫(huà)。    

————————————————————————————————————————————————————————
2、使用js實(shí)現(xiàn)一個(gè)持續(xù)的動(dòng)畫(huà)效果
最開(kāi)始的思路是用定時(shí)器實(shí)現(xiàn),最后沒(méi)有想的太完整,面試官給出的答案是用 requestAnimationFrame。

    var e = document.getElementById("e")
    
    var falg = true;
    
    var left = 0;
    
    setInterval(() => {
    
        left == 0 ? falg = true : left == 100 ? falg = false : ""
    
        falg ? e.style.left = ` ${left++}px` : e.style.left = ` ${left--}px`
    
    }, 1000 / 60)
    
requestAnimationFrame 由于之前沒(méi)有用過(guò)這個(gè) API 所以是現(xiàn)學(xué)的。
//兼容性處理

window.requestAnimFrame = (function(){

  return  window.requestAnimationFrame       ||

          window.webkitRequestAnimationFrame ||

          window.mozRequestAnimationFrame    ||

          function(callback){

            window.setTimeout(callback, 1000 / 60);

          };

})();


var e = document.getElementById("e");

var flag = true;

var left = 0;


function render() {

    left == 0 ? flag = true : left == 100 ? flag = false : "";

    flag ? e.style.left = ` ${left++}px` :

        e.style.left = ` ${left--}px`;

}


(function animloop() {

    render();

    requestAnimFrame(animloop);

})();

不足之處請(qǐng)指正(畢竟是現(xiàn)學(xué)的)順便查了一下優(yōu)勢(shì):

瀏覽器可以?xún)?yōu)化并行的動(dòng)畫(huà)動(dòng)作,更合理的重新排列動(dòng)作序列,并把能夠合并的動(dòng)作放在一個(gè)渲染周期內(nèi)完成,從而呈現(xiàn)出更流暢的動(dòng)畫(huà)效果

解決毫秒的不精確性

避免過(guò)度渲染(渲染頻率太高、 tab 不可見(jiàn)暫停等等) 注: requestAnimFrame 和 定時(shí)器一樣也頭一個(gè)類(lèi)似的清除方法cancelAnimationFrame。
————————————————————————————————————————————————————————
3、右邊寬度固定,左邊自適應(yīng)

第一種:





    

第二種





    

————————————————————————————————————————————————————————
4、水平垂直居中

#container{

    position:relative;

}

#center{

    width:100px;

    height:100px;

    position:absolute;

    top:50%;

    left:50%;

    transform: translate(-50%,-50%);

}

第二種

#container{

    position:relative;

}

#center{

    width:100px;

    height:100px;

    position:absolute;

    top:50%;

    left:50%;

    margin:-50px 0 0 -50px;

}

第三種

#container{

    position:relative;

}


#center{

    position:absolute;

    margin:auto;

    top:0;

    bottom:0;

    left:0;

    right:0;

}

第四種 flex

#container{

    display:flex;

    justify-content:center;

    align-items: center;

}

————————————————————————————————————————————————————————
5、四種定位的區(qū)別

static 是默認(rèn)值

relative 相對(duì)定位 相對(duì)于自身原有位置進(jìn)行偏移,仍處于標(biāo)準(zhǔn)文檔流中

absolute 絕對(duì)定位 相對(duì)于最近的已定位的祖先元素, 有已定位(指 position不是 static的元素)祖先元素, 以最近的祖先元素為參考標(biāo)準(zhǔn)。如果無(wú)已定位祖先元素, 以 body元素為偏移參照基準(zhǔn), 完全脫離了標(biāo)準(zhǔn)文檔流。

fixed 固定定位的元素會(huì)相對(duì)于視窗來(lái)定位,這意味著即便頁(yè)面滾動(dòng),它還是會(huì)停留在相同的位置。一個(gè)固定定位元素不會(huì)保留它原本在頁(yè)面應(yīng)有的空隙。

————————————————————————————————————————————————————————
6、Flex布局用的多嗎?
因?yàn)轫?xiàng)目考慮兼容 IE9 所以直接說(shuō)用的不多

————————————————————————————————————————————————————————
7、移動(dòng)端適配怎么做的?
使用媒體查詢(xún)做的響應(yīng)式布局,根據(jù)不同屏幕寬度加載不同 css.
————————————————————————————————————————————————————————
8、let與var的區(qū)別?

let 為 ES6 新添加申明變量的命令,它類(lèi)似于 var,但是有以下不同:

var 聲明的變量,其作用域?yàn)樵撜Z(yǔ)句所在的函數(shù)內(nèi),且存在變量提升現(xiàn)象

let 聲明的變量,其作用域?yàn)樵撜Z(yǔ)句所在的代碼塊內(nèi),不存在變量提升

let 不允許重復(fù)聲明.

————————————————————————————————————————————————————————
9、為什么 var 可以重復(fù)聲明?(這個(gè)就不知道了)

當(dāng)我們執(zhí)行代碼時(shí),我們可以簡(jiǎn)單的理解為新變量分配一塊兒內(nèi)存,命名為 a,并賦值為 2,但在運(yùn)行的時(shí)候編譯器與引擎還會(huì)進(jìn)行兩項(xiàng)額外的操作:判斷變量是否已經(jīng)聲明:

首先編譯器對(duì)代碼進(jìn)行分析拆解,從左至右遇見(jiàn) var a,則編譯器會(huì)詢(xún)問(wèn)作用域是否已經(jīng)存在叫 a 的變量了,如果不存在,則招呼作用域聲明一個(gè)新的變量 a,若已經(jīng)存在,則忽略 var 繼續(xù)向下編譯,這時(shí) a = 2被編譯成可執(zhí)行的代碼供引擎使用。

引擎遇見(jiàn) a=2時(shí)同樣會(huì)詢(xún)問(wèn)在當(dāng)前的作用域下是否有變量 a,若存在,則將 a賦值為 2(由于第一步編譯器忽略了重復(fù)聲明的var,且作用域中已經(jīng)有 a,所以重復(fù)聲明會(huì)發(fā)生值得覆蓋而并不會(huì)報(bào)錯(cuò))。若不存在,則順著作用域鏈向上查找,若最終找到了變量 a則將其賦值 2,若沒(méi)有找到,則招呼作用域聲明一個(gè)變量 a并賦值為 2。 參考鏈接

————————————————————————————————————————————————————————
10、封裝一個(gè)函數(shù),參數(shù)是定時(shí)器的時(shí)間,.then執(zhí)行回調(diào)函數(shù)。

function sleep (time) {

  return new Promise((resolve) => setTimeout(resolve, time));

}

————————————————————————————————————————————————————————
11、一個(gè)關(guān)于 this 指向的問(wèn)題

obj = {

    name: "a",

    getName : function () {

        console.log(this.name);

    }

}


var fn = obj.getName

obj.getName()

var fn2 = obj.getName()

fn()

fn2()

————————————————————————————————————————————————————————
13 CommonJS 中的 require/exports 和 ES6 中的 import/export 區(qū)別?

CommonJS 模塊的重要特性是加載時(shí)執(zhí)行,即腳本代碼在 require 的時(shí)候,就會(huì)全部執(zhí)行。一旦出現(xiàn)某個(gè)模塊被”循環(huán)加載”,就只輸出已經(jīng)執(zhí)行的部分,還未執(zhí)行的部分不會(huì)輸出。

ES6 模塊是動(dòng)態(tài)引用,如果使用 import 從一個(gè)模塊加載變量,那些變量不會(huì)被緩存,而是成為一個(gè)指向被加載模塊的引用,需要開(kāi)發(fā)者自己保證,真正取值的時(shí)候能夠取到值。

import/export 最終都是編譯為 require/exports 來(lái)執(zhí)行的。

CommonJS 規(guī)范規(guī)定,每個(gè)模塊內(nèi)部, module 變量代表當(dāng)前模塊。這個(gè)變量是一個(gè)對(duì)象,它的 exports 屬性(即module.exports )是對(duì)外的接口。加載某個(gè)模塊,其實(shí)是加載該模塊的 module.exports 屬性。

export 命令規(guī)定的是對(duì)外的接口,必須與模塊內(nèi)部的變量建立一一對(duì)應(yīng)關(guān)系。

————————————————————————————————————————————————————————
14、 一行代碼實(shí)現(xiàn)數(shù)組去重?

[...new Set([1,2,3,1,"a",1,"a"])]

————————————————————————————————————————————————————————
15、使用addEventListener點(diǎn)擊li彈出內(nèi)容,并且動(dòng)態(tài)添加li之后有效(這個(gè)題沒(méi)答出來(lái)??)

  • 1
  • 2
  • 3
  • 4
var ulNode = document.getElementById("ul"); ulNode.addEventListener("click", function (e) { if (e.target && e.target.nodeName.toUpperCase() == "LI") { alert(e.target.innerHTML); } }, false);

————————————————————————————————————————————————————————
16、怎么判斷兩個(gè)對(duì)象相等?

    obj={

    a:1,

    b:2

}

obj2={

    a:1,

    b:2

}

obj3={

    a:1,

    b:2

}

最開(kāi)始的思路是遍歷來(lái)判斷,但是最后好像沒(méi)有說(shuō)清楚,查了下,好像可以轉(zhuǎn)換為字符串來(lái)判斷。

JSON.stringify(obj)==JSON.stringify(obj2);//true

JSON.stringify(obj)==JSON.stringify(obj3);//false

————————————————————————————————————————————————————————
17、項(xiàng)目做過(guò)哪些性能優(yōu)化?

減少 HTTP 請(qǐng)求數(shù)

減少 DNS 查詢(xún)

使用 CDN

避免重定向

圖片懶加載

減少 DOM 元素?cái)?shù)量

減少 DOM 操作

使用外部 JavaScript 和 CSS

壓縮 JavaScript 、 CSS 、字體、圖片等

優(yōu)化 CSS Sprite

使用 iconfont

字體裁剪

多域名分發(fā)劃分內(nèi)容到不同域名

盡量減少 iframe 使用

避免圖片 src 為空

把樣式表放在 中

把腳本放在頁(yè)面底部 歡迎補(bǔ)充。。。

————————————————————————————————————————————————————————
18、模塊化開(kāi)發(fā)是怎么做的?

使用命名空間。

————————————————————————————————————————————————————————
19、有沒(méi)有使用過(guò)webpack?
我說(shuō)Vue項(xiàng)目中使用了,然后就沒(méi)問(wèn)了。
————————————————————————————————————————————————————————
20、gulp自己寫(xiě)過(guò)任務(wù)嗎?還是都用的模塊?
不知道怎么怎么回答,不都是使用模塊來(lái)寫(xiě)的么,然后就說(shuō)是使用模塊。

router.go(1)

router.push("/")

————————————————————————————————————————————————————————
21、Vue router 跳轉(zhuǎn)和 location.href 有什么區(qū)別?
router 是 hash 改變 location.href 是頁(yè)面跳轉(zhuǎn),刷新頁(yè)面
————————————————————————————————————————————————————————
22、Vue 雙向綁定實(shí)現(xiàn)原理?
通過(guò) Object.defineProperty 實(shí)現(xiàn)的
————————————————————————————————————————————————————————
23、你能實(shí)現(xiàn)一下雙向綁定嗎?



    

————————————————————————————————————————————————————————
24、 React 和 Vue 有什么區(qū)別?

————————————————————————————————————————————————————————
25、 Set 和 Map 數(shù)據(jù)結(jié)構(gòu)

ES6 提供了新的數(shù)據(jù)結(jié)構(gòu) Set 它類(lèi)似于數(shù)組,但是成員的值都是唯一的,沒(méi)有重復(fù)的值。

ES6 提供了 Map 數(shù)據(jù)結(jié)構(gòu)。它類(lèi)似于對(duì)象,也是鍵值對(duì)的集合,但是“鍵”的范圍不限于字符串,各種類(lèi)型的值(包括對(duì)象)都可以當(dāng)作鍵。也就是說(shuō), Object 結(jié)構(gòu)提供了“字符串—值”的對(duì)應(yīng), Map 結(jié)構(gòu)提供了“值—值”的對(duì)應(yīng),是一種更完善的 Hash結(jié)構(gòu)實(shí)現(xiàn)。

————————————————————————————————————————————————————————
26、WeakMap 和 Map 的區(qū)別?

WeakMap 結(jié)構(gòu)與 Map 結(jié)構(gòu)基本類(lèi)似,唯一的區(qū)別是它只接受對(duì)象作為鍵名( null 除外),不接受其他類(lèi)型的值作為鍵名,而且鍵名所指向的對(duì)象,不計(jì)入垃圾回收機(jī)制。

WeakMap 最大的好處是可以避免內(nèi)存泄漏。一個(gè)僅被 WeakMap 作為 key 而引用的對(duì)象,會(huì)被垃圾回收器回收掉。

WeakMap 擁有和 Map 類(lèi)似的 set(key, value) 、 get(key)、has(key)、 delete(key) 和 clear() 方法, 沒(méi)有任何與迭代有關(guān)的屬性和方法。

————————————————————————————————————————————————————————
27、重排和重繪

部分渲染樹(shù)(或者整個(gè)渲染樹(shù))需要重新分析并且節(jié)點(diǎn)尺寸需要重新計(jì)算。這被稱(chēng)為重排。注意這里至少會(huì)有一次重排-初始化頁(yè)面布局。

由于節(jié)點(diǎn)的幾何屬性發(fā)生改變或者由于樣式發(fā)生改變,例如改變?cè)乇尘吧珪r(shí),屏幕上的部分內(nèi)容需要更新。這樣的更新被稱(chēng)為重繪。

————————————————————————————————————————————————————————
28、什么情況會(huì)觸發(fā)重排和重繪?

添加、刪除、更新 DOM 節(jié)點(diǎn)

通過(guò) display: none 隱藏一個(gè) DOM 節(jié)點(diǎn)-觸發(fā)重排和重繪

通過(guò) visibility: hidden 隱藏一個(gè) DOM 節(jié)點(diǎn)-只觸發(fā)重繪,因?yàn)闆](méi)有幾何變化

移動(dòng)或者給頁(yè)面中的 DOM 節(jié)點(diǎn)添加動(dòng)畫(huà)

添加一個(gè)樣式表,調(diào)整樣式屬性

用戶(hù)行為,例如調(diào)整窗口大小,改變字號(hào),或者滾動(dòng)。

————————————————————————————————————————————————————————
29、瀏覽器緩存
瀏覽器緩存分為強(qiáng)緩存和協(xié)商緩存。當(dāng)客戶(hù)端請(qǐng)求某個(gè)資源時(shí),獲取緩存的流程如下:

先根據(jù)這個(gè)資源的一些 http header 判斷它是否命中強(qiáng)緩存,如果命中,則直接從本地獲取緩存資源,不會(huì)發(fā)請(qǐng)求到服務(wù)器;

當(dāng)強(qiáng)緩存沒(méi)有命中時(shí),客戶(hù)端會(huì)發(fā)送請(qǐng)求到服務(wù)器,服務(wù)器通過(guò)另一些 request header驗(yàn)證這個(gè)資源是否命中協(xié)商緩存,稱(chēng)為 http再驗(yàn)證,如果命中,服務(wù)器將請(qǐng)求返回,但不返回資源,而是告訴客戶(hù)端直接從緩存中獲取,客戶(hù)端收到返回后就會(huì)從緩存中獲取資源;

強(qiáng)緩存和協(xié)商緩存共同之處在于,如果命中緩存,服務(wù)器都不會(huì)返回資源;

區(qū)別是,強(qiáng)緩存不對(duì)發(fā)送請(qǐng)求到服務(wù)器,但協(xié)商緩存會(huì)。

當(dāng)協(xié)商緩存也沒(méi)命中時(shí),服務(wù)器就會(huì)將資源發(fā)送回客戶(hù)端。

當(dāng) ctrl+f5 強(qiáng)制刷新網(wǎng)頁(yè)時(shí),直接從服務(wù)器加載,跳過(guò)強(qiáng)緩存和協(xié)商緩存;

當(dāng) f5 刷新網(wǎng)頁(yè)時(shí),跳過(guò)強(qiáng)緩存,但是會(huì)檢查協(xié)商緩存;

強(qiáng)緩存

Expires(該字段是 http1.0 時(shí)的規(guī)范,值為一個(gè)絕對(duì)時(shí)間的 GMT 格式的時(shí)間字符串,代表緩存資源的過(guò)期時(shí)間)

Cache-Control:max-age(該字段是 http1.1 的規(guī)范,強(qiáng)緩存利用其 max-age 值來(lái)判斷緩存資源的最大生命周期,它的值單位為秒)

協(xié)商緩存

Last-Modified(值為資源最后更新時(shí)間,隨服務(wù)器response返回)

If-Modified-Since(通過(guò)比較兩個(gè)時(shí)間來(lái)判斷資源在兩次請(qǐng)求期間是否有過(guò)修改,如果沒(méi)有修改,則命中協(xié)商緩存)

ETag(表示資源內(nèi)容的唯一標(biāo)識(shí),隨服務(wù)器response返回)

If-None-Match(服務(wù)器通過(guò)比較請(qǐng)求頭部的If-None-Match與當(dāng)前資源的ETag是否一致來(lái)判斷資源是否在兩次請(qǐng)求之間有過(guò)修改,如果沒(méi)有修改,則命中協(xié)商緩存)

————————————————————————————————————————————————————————
如果喜歡請(qǐng)給個(gè)贊吧,您的贊會(huì)是我們繼續(xù)分享的動(dòng)力!

原文轉(zhuǎn)自:https://blog.ihoey.com/posts/...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/93108.html

相關(guān)文章

  • 前端最強(qiáng)面經(jīng)匯總

    摘要:獲取的對(duì)象范圍方法獲取的是最終應(yīng)用在元素上的所有屬性對(duì)象即使沒(méi)有代碼,也會(huì)把默認(rèn)的祖宗八代都顯示出來(lái)而只能獲取元素屬性中的樣式。因此對(duì)于一個(gè)光禿禿的元素,方法返回對(duì)象中屬性值如果有就是據(jù)我測(cè)試不同環(huán)境結(jié)果可能有差異而就是。 花了很長(zhǎng)時(shí)間整理的前端面試資源,喜歡請(qǐng)大家不要吝嗇star~ 別只收藏,點(diǎn)個(gè)贊,點(diǎn)個(gè)star再走哈~ 持續(xù)更新中……,可以關(guān)注下github 項(xiàng)目地址 https:...

    wangjuntytl 評(píng)論0 收藏0
  • 程序語(yǔ)言

    摘要:一面應(yīng)該還問(wèn)了其他內(nèi)容,但是兩次面試多線程面試問(wèn)題和答案采訪中,我們通常會(huì)遇到兩個(gè)主題采集問(wèn)題和多線程面試問(wèn)題。多線程是關(guān)于并發(fā)和線程的。我們正在共享重要的多線程面試問(wèn)題和答案。。 2016 年末,騰訊,百度,華為,搜狗和滴滴面試題匯總 2016 年未,騰訊,百度,華為,搜狗和滴滴面試題匯總 【碼農(nóng)每日一題】Java 內(nèi)部類(lèi)(Part 2)相關(guān)面試題 關(guān)注一下嘛,又不讓你背鍋!問(wèn):Ja...

    mtunique 評(píng)論0 收藏0
  • 程序語(yǔ)言

    摘要:一面應(yīng)該還問(wèn)了其他內(nèi)容,但是兩次面試多線程面試問(wèn)題和答案采訪中,我們通常會(huì)遇到兩個(gè)主題采集問(wèn)題和多線程面試問(wèn)題。多線程是關(guān)于并發(fā)和線程的。我們正在共享重要的多線程面試問(wèn)題和答案。。 2016 年末,騰訊,百度,華為,搜狗和滴滴面試題匯總 2016 年未,騰訊,百度,華為,搜狗和滴滴面試題匯總 【碼農(nóng)每日一題】Java 內(nèi)部類(lèi)(Part 2)相關(guān)面試題 關(guān)注一下嘛,又不讓你背鍋!問(wèn):Ja...

    stefan 評(píng)論0 收藏0
  • 阿里巴巴2018秋招總結(jié)

    摘要:作為一個(gè)前端人,阿里巴巴,是我最想去的國(guó)內(nèi)公司,我看重的也不是他薪水如何,完全在于他的技術(shù),這一點(diǎn)可以說(shuō)明一切。阿里是個(gè)十分重視基礎(chǔ)的公司,和浮躁的前端大環(huán)境形成鮮明的對(duì)比。我不是第一次投阿里巴巴,所以心態(tài)一開(kāi)始還是挺平和的。 這是去年8月份秋招的面試,五面都面完了,給大家貢獻(xiàn)干貨吧。我沒(méi)寫(xiě)問(wèn)題的答案,有什么問(wèn)題可以留言區(qū)問(wèn)我。 一面 電話面(1小時(shí))電話面問(wèn)題不多,但是十分考驗(yàn)對(duì)相關(guān)...

    AWang 評(píng)論0 收藏0
  • 阿里巴巴2018秋招總結(jié)

    摘要:作為一個(gè)前端人,阿里巴巴,是我最想去的國(guó)內(nèi)公司,我看重的也不是他薪水如何,完全在于他的技術(shù),這一點(diǎn)可以說(shuō)明一切。阿里是個(gè)十分重視基礎(chǔ)的公司,和浮躁的前端大環(huán)境形成鮮明的對(duì)比。我不是第一次投阿里巴巴,所以心態(tài)一開(kāi)始還是挺平和的。 這是去年8月份秋招的面試,五面都面完了,給大家貢獻(xiàn)干貨吧。我沒(méi)寫(xiě)問(wèn)題的答案,有什么問(wèn)題可以留言區(qū)問(wèn)我。 一面 電話面(1小時(shí))電話面問(wèn)題不多,但是十分考驗(yàn)對(duì)相關(guān)...

    mj 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<