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

資訊專欄INFORMATION COLUMN

一年內(nèi)經(jīng)驗(yàn)前端面試題記錄

kelvinlee / 2137人閱讀

摘要:對(duì)于,其默認(rèn)大小一般是本地存儲(chǔ)和都保存在瀏覽器端,且都是同源的。把變量放在閉包中和放在全局作用域,對(duì)內(nèi)存的影響是一致的,這里并不能說成是內(nèi)存泄露。將新的樹和之前的虛擬樹進(jìn)行相比較,根據(jù)結(jié)果對(duì)進(jìn)行精準(zhǔn)響應(yīng)。

1. JavaScript 1. JavaScript文件在什么情況下會(huì)放在html哪個(gè)位置
https://zhuanlan.zhihu.com/p/...

對(duì)于必須要在DOM加載之前運(yùn)行的JavaScript腳本,我們需要把這些腳本放置在頁面的head中,而不是通過外部引用的方式,因?yàn)橥獠康囊梅绞皆黾恿司W(wǎng)絡(luò)的請(qǐng)求次數(shù);

2. async和defer區(qū)別

async表示異步加載JavaScript文件,它的下載過程可以在HTML的解析過程中運(yùn)行,加載完成之后立即執(zhí)行這個(gè)文件的代碼,執(zhí)行文件代碼的過程中會(huì)阻塞HTML的解析,它不保證文件加載的順序。
defer表示在HTML文檔解析之后再執(zhí)行加載完成JavaScript文件,JavaScript文件的下載過程可以在HTML的解析過程中進(jìn)行,它是按照script標(biāo)簽的先后順序來加載文件的。

3. map,forEach,reduce區(qū)別

map返回一個(gè)新數(shù)組
forEach遍歷數(shù)組,返回值為undefined
reduce累加器,遍歷時(shí)避開創(chuàng)建新數(shù)組減少冗(rong)余,返回值由參數(shù)callback決定

4. cookie,session,localStroage區(qū)別

session會(huì)在一定時(shí)間內(nèi)保存在服務(wù)器上。當(dāng)訪問增多時(shí),會(huì)占用服務(wù)器的資源,所以考慮服務(wù)器性能方面,可以使用cookie
cookie存儲(chǔ)容量有限制,單個(gè)cookie保存數(shù)據(jù)不能超過4k,且很多瀏覽器限制一個(gè)站點(diǎn)最多保存20個(gè)cookie。對(duì)于seesion,其默認(rèn)大小一般是1024k
localStorage本地存儲(chǔ)和cookie都保存在瀏覽器端,且都是同源的。每個(gè)5MB

5. call,apply,bind區(qū)別

apply
接受2個(gè)參數(shù):一個(gè)是在其中運(yùn)行的函數(shù)作用域(Scope),另一個(gè)可以是arguments也可以是Array的實(shí)例,經(jīng)典案例:#獲取數(shù)組中最大的值#;#使用push合并數(shù)組#;
call
apply用法相同,只是除了第一個(gè)都是作用域之外,其余參數(shù)必須逐個(gè)列舉出來。經(jīng)典用例:#使用call調(diào)用匿名函數(shù)#
bind
接受1個(gè)參數(shù),返回一個(gè)新函數(shù),這個(gè)新函數(shù)的this值來自bind(context)函數(shù)傳遞的context

Function.prototype.bind = function(context){
    var self = this;      //原函數(shù)
    return function(){    //返回一個(gè)新函數(shù)
        return self.apply(context, arguments)
    }
}
6. 事件綁定有哪幾種,分別在什么情況下使用 7. 請(qǐng)解釋一下事件委托或事件代理 8. 異步編程有哪些 9. 異步編程中如何捕獲異常 10. 數(shù)組去重你會(huì)怎么寫
https://segmentfault.com/a/11...

思路一:
1.雙層循環(huán),外層循環(huán)元素,內(nèi)存循環(huán)時(shí)比較值
2.如果有相同的值則跳過(break),不相同則push近數(shù)組
思路二:利用splice直接在原數(shù)組進(jìn)行操作(刪除元素時(shí),需要更新數(shù)組長度)
思路三:利用對(duì)象的屬性不能相同的特點(diǎn)進(jìn)行去重
思路四:數(shù)組遞歸去重
1.運(yùn)用遞歸的思想
2.先排序,然后從最后開始比較,遇到相同,則刪除
思路五:利用indexOf以及forEach
思路六:利用indexOf以及sort
思路七:利用ES6的set

11.當(dāng)被問到閉包時(shí),應(yīng)該從哪幾個(gè)方面回答 1.變量的作用域

當(dāng)在函數(shù)內(nèi)搜索一個(gè)變量時(shí),如果函數(shù)內(nèi)沒有這個(gè)變量,那么此次搜索過程會(huì)隨著代碼執(zhí)行環(huán)境創(chuàng)建的作用域鏈往外逐層搜索

2.變量的生存周期

全局變量的生存周期是永久的
對(duì)于函數(shù)內(nèi)var聲明的局部變量,當(dāng)退出函數(shù)時(shí),這些局部變量會(huì)隨著函數(shù)調(diào)用結(jié)束而被摧毀

3.閉包結(jié)構(gòu)

局部變量所在的執(zhí)行環(huán)境還能被外界訪問,那么這個(gè)局部變量就有了不被摧毀的理由

4.閉包與內(nèi)存管理

使用閉包的動(dòng)機(jī):主動(dòng)將一些變量封裝在閉包中,以便未來還需要使用到它們。
把變量放在閉包中和放在全局作用域,對(duì)內(nèi)存的影響是一致的,這里并不能說成是內(nèi)存泄露。如果將來需要回收這些變量,我們可以手動(dòng)把這些變量設(shè)為null

2. css 1. 塊級(jí)元素和行內(nèi)元素的區(qū)別,inline-block的用法 2. 塊級(jí)元素和行內(nèi)元素如何水平居中和垂直居中 3. css module是什么 4. css選擇器的優(yōu)先級(jí) 5. 什么是css hack,用過哪些 6. css中的單位有哪些,區(qū)別和優(yōu)劣 7. css div高度填滿父容器剩余空間 8. flex彈性布局 3. react 1.react存在的缺點(diǎn) 1.wrapper hell

包裝函數(shù)嵌套太深,且被不推薦使用mixins模式

2.huge component

組件太大,學(xué)習(xí)成本太高,高度集中化無法將細(xì)化功能抽離出來

3.confusing classes

有時(shí)候不知道使用classes還是function創(chuàng)建函數(shù)
有時(shí)在lifecycle內(nèi)注冊完事件后,又需要在摧毀階段手動(dòng)注銷事件
注冊監(jiān)聽事件后,又需要在組件變化時(shí)手動(dòng)發(fā)布事件

其他:不會(huì)自動(dòng)轉(zhuǎn)換Boolean
let string = "";
Boolean(string) //false
function 
return (
    
        {string&&前面的不會(huì)進(jìn)行bool類型轉(zhuǎn)換}
     //會(huì)報(bào)錯(cuò)
)
1. redux和mobx區(qū)別
具體參考:https://www.robinwieruch.de/r...

Redux函數(shù)式編程影響,它總是返回一個(gè)新狀態(tài),而不是改變狀態(tài)。

//不要在Redux這樣做,因?yàn)檫@樣會(huì)改變數(shù)組
function addAuthor(state, action) {
    return state.authors.push(action.author)
}
//保持不變,總是返回一個(gè)新對(duì)象
function addAuthor(state, action) {
    return [...state.authors, action.author]
}

state數(shù)據(jù)遵照標(biāo)準(zhǔn)化數(shù)據(jù)格式,可以保持state數(shù)據(jù)扁平化(flat state)單一(身份)信息源(single source of truth) 。

{
  post: {
    id: "a",
    authorId: "b",
    ...
  },
  author: {
    id: "b",
    postIds: ["a", ...],
    ...
  }
}

Mobx既有面向?qū)ο缶幊蹋灿蟹磻?yīng)式編程。它將你的state包裹在可觀察(Observable)的狀態(tài)中。因此,你可以在state中獲得所有可觀察的功能。
在Mobx里state是可變。因此可以直接改變state:

function addAuthor(author){
    this.authors.push(author)
}

數(shù)據(jù)結(jié)構(gòu)state可以保持深層嵌套

在Redux中,狀態(tài)是只讀的,只能使用顯示操作actions來更改狀態(tài)。相反,在Mobx中,狀態(tài)允許讀寫,可以直接改變狀態(tài)without actions
2. redux的缺點(diǎn)
https://stackoverflow.com/que...

例如:

//state內(nèi)的list引用redux中的list
this.state={
    list:this.props.list||[]
}

//component內(nèi)修改list值
this.setState({list:[1,2,3]})

//此時(shí)redux中的list也被改變,只是沒有將變化傳遞到action
console.log(this.props.list)    //[1,2,3]

redux的核心概念之一是 #state是不可變的#;使用Object.assign()合并對(duì)象無法實(shí)現(xiàn)深拷貝

3. mobx的缺點(diǎn)
https://stackoverflow.com/que...

無法知道數(shù)據(jù)是在什么時(shí)候改變(或update)的,并且很難跟蹤(參照redux-logger和mobx-logger)

4. setState為什么是異步的
why is setState asynchronous?

回答這個(gè)問題首先要闡述:調(diào)用setState時(shí)會(huì)發(fā)生什么?
調(diào)用setState時(shí),React會(huì)將setState()的對(duì)象以“和解”(reconciliation)的過程合并到組件的當(dāng)前狀態(tài)()并以此創(chuàng)建一個(gè)新的React元素樹(我理解為虛擬DOM樹)。
將新的DOM樹和setState之前的虛擬DOM樹進(jìn)行相比較(diff),根據(jù)結(jié)果對(duì)UI進(jìn)行精準(zhǔn)響應(yīng)。
因此個(gè)人理解為:對(duì)比過程需要消耗一定時(shí)間,為了防止阻塞所以將setState設(shè)置為異步

另一篇文章:從 setState promise 化的探討 體會(huì) React 團(tuán)隊(duì)設(shè)計(jì)思想

5. Virtual DOM (diff)算法
https://github.com/livoras/bl...

算法實(shí)現(xiàn)
步驟一:用JS對(duì)象模擬DOM樹
步驟二:比較兩棵虛擬DOM樹的差異
這兩個(gè)樹的完全diff算法是一個(gè)時(shí)間復(fù)雜度O(n^3)的問題,但是在前端當(dāng)中,很少會(huì)跨越層級(jí)地移動(dòng)DOM元素。所以Virtual DOM只會(huì)對(duì)同一個(gè)層級(jí)的元素進(jìn)行對(duì)比:
1.深度優(yōu)先遍歷,記錄差異
2.可能會(huì)有的差異類型
2.1 替換掉原來的節(jié)點(diǎn)
2.2 移動(dòng)、刪除、新增子節(jié)點(diǎn)
2.3 修改節(jié)點(diǎn)的屬性
2.4 文本節(jié)點(diǎn)被改變

var REPLACE = 0
var REORDER = 1
var PROPS = 2
var TEXT = 3

3.列表對(duì)比算法
關(guān)鍵算法:#字符串的最小編輯距離#(Edition Distance); #Levenshtein Distance#; O(M * N)
步驟三:把差異應(yīng)用到真正的DOM樹上

6. 在react中如何使用內(nèi)聯(lián)樣式

7. 在react中如何使用jQuery

???

8. 在xx版本之后更新了哪些
https://reactjs.org/versions/

收到這個(gè)問題前我還從來沒關(guān)心過每次發(fā)布新版本更新了哪些,這個(gè)問題讓我成長很多。

9. react做過哪些性能優(yōu)化 10. React Native手機(jī)端適配
function scaleSize(size) {
  let screenW = Dimensions.get("window").width>Dimensions.get("window").height?Dimensions.get("window").height:Dimensions.get("window").width;
  const defaultWidth =375;    // 在UI圖上的基礎(chǔ)寬度
  const _scaleWidth = screenW / defaultWidth;
  return size * _scaleWidth;
}
4. vue 1. vue雙向綁定原理
https://www.jianshu.com/p/e42...

基本原理:
1.利用Object.defineProperty監(jiān)聽對(duì)象賦值動(dòng)作
2.遍歷所有節(jié)點(diǎn)
3.使用觀察者模式對(duì)擁有v-model屬性的DOM節(jié)點(diǎn)訂閱上述時(shí)間
4.對(duì)擁有v-bind屬性的DOM節(jié)點(diǎn)進(jìn)行發(fā)布事件
5.對(duì)表單標(biāo)簽使用`addEventListener("input",function(e){/.../})監(jiān)聽事件

Object.defineProperty(vModelList, key, {
    enumerable: true,
    configurable: true,
    set: function (newVal) {
        // 發(fā)布
        _observer.trigger(key, newVal)
    }
});
2. 正則貪婪匹配實(shí)現(xiàn)數(shù)據(jù)綁定(模板字符串)
https://segmentfault.com/a/11...
String.prototype.render = function(context){
    return this.replace(/{{([^}]+)}}/g, (match, key) => (context[key]||match));
}

"你好,{{name}},我們會(huì)在{{day}}天之內(nèi)通知面試結(jié)果。".render({name:"Niko",day:3})
5. http 1. 什么是jsonp
https://www.zhihu.com/questio...

很簡單,就是利用 并提供一個(gè)回調(diào)函數(shù)來接收數(shù)據(jù)(函數(shù)名可約定,或通過地址參數(shù)傳遞)。 第三方產(chǎn)生的響應(yīng)為json數(shù)據(jù)的包裝(故稱之為jsonp,即json padding),形如: callback({"name":"hax","gender":"Male"}) 這樣瀏覽器會(huì)調(diào)用callback函數(shù),并傳遞解析后json對(duì)象作為參數(shù)。本站腳本可在callback函數(shù)里處理所傳入的數(shù)據(jù)。 補(bǔ)充:“歷史遺跡”的意思就是,如果在今天重新設(shè)計(jì)的話,也許就不會(huì)允許這樣簡單的跨域了嘿,比如可能像XHR一樣按照CORS規(guī)范要求服務(wù)器發(fā)送特定的http頭。

從輸入U(xiǎn)RL到頁面加載發(fā)生了什么
https://segmentfault.com/a/11...

1.DNS解析
2.TCP連接
3.發(fā)生HTTP請(qǐng)求
4.服務(wù)器處理請(qǐng)求并返回HTTP報(bào)文
5.瀏覽器解析渲染頁面
6.連接結(jié)束

padding與margin
禁止使用flex

flex彈性布局
請(qǐng)使用flex完成

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

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

相關(guān)文章

  • 年內(nèi)經(jīng)驗(yàn)前端面試記錄

    摘要:對(duì)于,其默認(rèn)大小一般是本地存儲(chǔ)和都保存在瀏覽器端,且都是同源的。把變量放在閉包中和放在全局作用域,對(duì)內(nèi)存的影響是一致的,這里并不能說成是內(nèi)存泄露。將新的樹和之前的虛擬樹進(jìn)行相比較,根據(jù)結(jié)果對(duì)進(jìn)行精準(zhǔn)響應(yīng)。 1. JavaScript 1. JavaScript文件在什么情況下會(huì)放在html哪個(gè)位置 https://zhuanlan.zhihu.com/p/... 對(duì)于必須要在DOM加載...

    qianfeng 評(píng)論0 收藏0
  • 7個(gè) HTML 面試及回答策略

    摘要:接下來,我會(huì)檢查每個(gè)頁面以確保它使用有用的標(biāo)簽,包括標(biāo)題標(biāo)簽。這個(gè)問題讓面試官有機(jī)會(huì)了解潛在員工對(duì)工作難以勝任的部分。面試官可能需要考慮這種弱點(diǎn)對(duì)團(tuán)隊(duì)的影響。面試官可能會(huì)發(fā)現(xiàn)自己公司的計(jì)劃與未來員工的職業(yè)目標(biāo)是否保持一致。 翻譯:瘋狂的技術(shù)宅原文:https://www.indeed.com/hire/i... 本文首發(fā)微信公眾號(hào):jingchengyideng歡迎關(guān)注,每天都給你...

    Luosunce 評(píng)論0 收藏0
  • 深入理解js

    摘要:詳解十大常用設(shè)計(jì)模式力薦深度好文深入理解大設(shè)計(jì)模式收集各種疑難雜癥的問題集錦關(guān)于,工作和學(xué)習(xí)過程中遇到過許多問題,也解答過許多別人的問題。介紹了的內(nèi)存管理。 延遲加載 (Lazyload) 三種實(shí)現(xiàn)方式 延遲加載也稱為惰性加載,即在長網(wǎng)頁中延遲加載圖像。用戶滾動(dòng)到它們之前,視口外的圖像不會(huì)加載。本文詳細(xì)介紹了三種延遲加載的實(shí)現(xiàn)方式。 詳解 Javascript十大常用設(shè)計(jì)模式 力薦~ ...

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

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

0條評(píng)論

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