摘要:是什么是異步編程的一種解決方案所謂,簡(jiǎn)單說(shuō)就是一個(gè)容器,里面保存著某個(gè)未來(lái)才會(huì)結(jié)束的事件通常是一個(gè)異步操作的結(jié)果。
1,講講淺拷貝、深拷貝之間的區(qū)別最近也在準(zhǔn)備換工作了,然后收集了一些我覺(jué)得今年面試會(huì)遇到常見(jiàn)的問(wèn)題。
如果有機(jī)會(huì),記得也幫忙分享我一下。
2019的行情確實(shí)很糟糕??吹竭@么多人收藏點(diǎn)贊。我的內(nèi)心也是哇涼哇涼的。
我也給一些除了面試題之外的經(jīng)驗(yàn)吧我相信不景氣也是相對(duì)的,提升自我也是必要的。我說(shuō)說(shuō)我最近在準(zhǔn)備些什么。
首先優(yōu)化自己的博客。有技術(shù)博客的求職者,必定會(huì)給面試官篩選簡(jiǎn)歷時(shí)一個(gè)很好的印象
針對(duì)你想求職的企業(yè)規(guī)模,乘著這段時(shí)間,深入的了解一些源碼。如中型企業(yè)大多都偏愛(ài)vue。我最近也在研究其中的源碼。
更高bigger的,可以在研究框架源碼中,得出一些經(jīng)驗(yàn),寫一套自己框架。目前我也正在準(zhǔn)備。
還有自己的npm的組件包。
核心:引用類型和非引用類型的拷貝結(jié)果是不同的
淺拷貝只是拷貝基本類型的數(shù)據(jù),如果父對(duì)象的屬性等于數(shù)組或另一個(gè)對(duì)象,那么實(shí)際上,子對(duì)象獲得的只是一個(gè)內(nèi)存地址,因此存在父對(duì)象被篡改的可能,淺拷貝只復(fù)制指向某個(gè)對(duì)象的指針,而不復(fù)制對(duì)象本身,新舊對(duì)象還是共享同一塊內(nèi)存
//簡(jiǎn)單的淺拷貝 var a = 1; var b = a;//賦值 console.log(b) //1 a = 2;//改變a的值 console.log(b) //1
如果要實(shí)現(xiàn)深拷貝,用什么方法來(lái)實(shí)現(xiàn)
JSON.parse() + JSON.stringify()(缺點(diǎn):只能處理可以被枚舉的屬性);
for in 循環(huán)遞歸遍歷;
深拷貝就是能夠?qū)崿F(xiàn)真正意義上的數(shù)組和對(duì)象的拷貝。遞歸調(diào)用"淺拷貝"。(深拷貝會(huì)另外創(chuàng)造一個(gè)一模一樣的對(duì)象,新對(duì)象跟原對(duì)象不共享內(nèi)存,修改新對(duì)象不會(huì)改到原對(duì)象)
如果你想要實(shí)現(xiàn)支持setter和getter特性的拷貝,該怎么實(shí)現(xiàn)?
Object.defineproperties (定義屬性)、Object.getOwnPropertyDescriptors(es2017,獲取對(duì)象的多個(gè)屬性)、Object.getOwnPropertyDescriptor(老一點(diǎn),獲取對(duì)象的單個(gè)屬性的屬性),但babel可以解決。
2、原型鏈的prototype和__proto__的區(qū)別;prototype 在 new 示例后會(huì)被轉(zhuǎn)為 __proto__
__proto__是非標(biāo)準(zhǔn)化的;
所有東西的原型鏈向上延伸到原型鏈的頂端,是什么;
Object.prototype.__proto__,結(jié)果是null.
Function本身就是函數(shù), Function.__proto__ 是標(biāo)準(zhǔn)的內(nèi)置對(duì)象Function.prototype, Function.prototype.__proto__ 是標(biāo)準(zhǔn)的內(nèi)置對(duì)象Object.prototype3、如果想實(shí)現(xiàn)繼承,說(shuō)幾種你知道的方法?
原型鏈繼承、構(gòu)造繼承、實(shí)例繼承、拷貝繼承、組合繼承、寄生組合繼承
原型鏈繼承
3、var、let、const的區(qū)別;var 會(huì)變量提升;
let 聲明的變量只在它所在的代碼塊有效;
const 聲明后不能再修改其指向的目標(biāo),假如const 指向的是一個(gè)對(duì)象/數(shù)組,那么雖然不能更改指向目標(biāo),但是可以更改對(duì)象和數(shù)組內(nèi)部的值;
進(jìn)階一:說(shuō)到變量提升,class 聲明一個(gè)類時(shí),存在變量提升么?為什么?
不存在。因?yàn)橐奖泐惖睦^承,先聲明子類再聲明父類;
進(jìn)階二:const 聲明一個(gè)對(duì)象,如何讓對(duì)象內(nèi)部的屬性的值也無(wú)法改變?
使用Object.freeze()鎖死(es5新增特性);
對(duì)數(shù)組等引用類型的值,還是能修改的;
進(jìn)階三:全局作用域?函數(shù)作用域?塊級(jí)作用域?作用域鏈?
js有哪些基本數(shù)據(jù)類型?Boolean、Null、Undefined、Number、String、Object;
Symbol(es6新增)
進(jìn)階:es6新增的原型數(shù)據(jù)類型Symbol,特點(diǎn)是什么;
表示獨(dú)一無(wú)二的值;
聲明時(shí)不能使用new Symbol(),而是 Symbol();
聲明時(shí)可以加參數(shù),用于描述;
作為key時(shí)不能被遍歷;
進(jìn)階2:如何聲明兩個(gè)相等的Symbol變量?
使用Symbol.for,參數(shù)相同時(shí);
let a = Symbol.for("a");
let b = Symbol.for("a");
a === b; // true
#### Promise是什么? * 是異步編程的一種解決方案; * 所謂Promise,簡(jiǎn)單說(shuō)就是一個(gè)容器,里面保存著某個(gè)未來(lái)才會(huì)結(jié)束的事件(通常是一個(gè)異步操作)的結(jié)果。從語(yǔ)法上說(shuō),Promise 是一個(gè)對(duì)象,從它可以獲取異步操作的消息。 一般什么時(shí)候使用? * 處理異步請(qǐng)求時(shí)使用,比如ajax請(qǐng)求; 有哪些狀態(tài)? * 狀態(tài)有pending、resolved、rejected; 怎么捕獲他的錯(cuò)誤? * 最后寫catch; * then里面第二個(gè)參數(shù)可以捕獲; 如果內(nèi)部拋錯(cuò),但是沒(méi)有被捕獲,這個(gè)沒(méi)被捕獲的錯(cuò)誤接下來(lái)會(huì)發(fā)生什么事情? * 冒泡; 能不能被try catch捕獲?為什么? * 不能,因?yàn)槭钱惒骄幊獭? 能不能被window.onerror捕獲? * 不能 new Promise((resolve,reject)=>throw new Error("a")).then(fn1).then(fn2,fn3).catch(fn4) 這個(gè)函數(shù),會(huì)執(zhí)行哪些函數(shù) * fn3,沒(méi)了4,從輸入U(xiǎn)RL到瀏覽器顯示頁(yè)面發(fā)生了什么。(特別注意)
這題可以了解一下,盡管面試時(shí)候造飛船,真的干活可能還是擰螺絲。
1.在瀏覽器中輸入url(解析IP地址)
2.應(yīng)用層DNS解析域名
3.應(yīng)用層客戶端發(fā)送HTTP請(qǐng)求
4.傳輸層TCP傳輸報(bào)文(3次握手)
5.網(wǎng)絡(luò)層IP協(xié)議查詢MAC地址
6.數(shù)據(jù)到達(dá)數(shù)據(jù)鏈路層
7.服務(wù)器接收數(shù)據(jù)
8.服務(wù)器響應(yīng)請(qǐng)求
9.服務(wù)器返回相應(yīng)文件
二、頁(yè)面渲染:現(xiàn)代瀏覽器渲染頁(yè)面的過(guò)程是這樣的:解析HTML以構(gòu)建DOM樹(shù) –> 構(gòu)建渲染樹(shù) –> 布局渲染樹(shù) –> 繪制渲染樹(shù)。
在瀏覽器還沒(méi)接收到完整的HTML文件時(shí),它就開(kāi)始渲染頁(yè)面了,在遇到外部鏈入的腳本標(biāo)簽或樣式標(biāo)簽或圖片時(shí),會(huì)再次發(fā)送HTTP請(qǐng)求重復(fù)上述的步驟。在收到CSS文件后會(huì)對(duì)已經(jīng)渲染的頁(yè)面重新渲染,加入它們應(yīng)有的樣式,圖片文件加載完立刻顯示在相應(yīng)位置。在這一過(guò)程中可能會(huì)觸發(fā)頁(yè)面的重繪或重排。5、async、await 的使用場(chǎng)景是什么?
連續(xù)的異步請(qǐng)求,下一步的異步請(qǐng)求依賴于前一步的異步請(qǐng)求結(jié)果;
進(jìn)階一:假如有A、B、C三個(gè)異步請(qǐng)求,異步請(qǐng)求C依賴于異步請(qǐng)求A和B的結(jié)果(即A和B完成后再發(fā)起C),那么你會(huì)如何實(shí)現(xiàn)它?
Promise.all();
設(shè)置狀態(tài)分別標(biāo)記A和B,A、B完成后會(huì)去修改自己的完成標(biāo)記,然后檢查所有的狀態(tài)標(biāo)記,假如都是完成狀態(tài),然后去執(zhí)行異步請(qǐng)求C。
是異步編程的一種解決方案;
所謂Promise,簡(jiǎn)單說(shuō)就是一個(gè)容器,里面保存著某個(gè)未來(lái)才會(huì)結(jié)束的事件(通常是一個(gè)異步操作)的結(jié)果。從語(yǔ)法上說(shuō),Promise 是一個(gè)對(duì)象,從它可以獲取異步操作的消息。
一般什么時(shí)候使用?
處理異步請(qǐng)求時(shí)使用,比如ajax請(qǐng)求;
有哪些狀態(tài)?
狀態(tài)有pending、resolved、rejected;
怎么捕獲他的錯(cuò)誤?
最后寫catch;
then里面第二個(gè)參數(shù)可以捕獲;
如果內(nèi)部拋錯(cuò),但是沒(méi)有被捕獲,這個(gè)沒(méi)被捕獲的錯(cuò)誤接下來(lái)會(huì)發(fā)生什么事情?
冒泡;
能不能被try catch捕獲?為什么?
不能,因?yàn)槭钱惒骄幊獭?br>能不能被window.onerror捕獲?
不能
new Promise((resolve,reject)=>throw new Error("a")).then(fn1).then(fn2,fn3).catch(fn4) 這個(gè)函數(shù),會(huì)執(zhí)行哪些函數(shù) * fn3,沒(méi)了
0.30000000000000004(能回答出來(lái)不是0.3,而是0.3后有若干個(gè)0和一個(gè)數(shù)字即可)
進(jìn)階一:為什么?
原因是浮點(diǎn)數(shù)和整數(shù),在存儲(chǔ)時(shí)的方法是不同的,因此相加的規(guī)則也是不同的;
進(jìn)階二:浮點(diǎn)數(shù)是怎么存儲(chǔ)的(本問(wèn)題比較難)(可以跳到進(jìn)階三,比本題簡(jiǎn)單)
而double類型就是雙精度浮點(diǎn)數(shù),這種指使用64位(8字節(jié))來(lái)存儲(chǔ)一個(gè)浮點(diǎn)數(shù)。 根據(jù)規(guī)定,這64位bit里,分為三部分: 第一部分(1bit): 符號(hào)位,表示正負(fù),正數(shù)為0,負(fù)數(shù)為1。 第二部分(11bit): 階碼位,也可以稱為指數(shù)位。 第三部分(52bit) 尾數(shù)位,即表示實(shí)際數(shù)字的。 假如正負(fù)符號(hào)的值為S,正數(shù)S為1,負(fù)數(shù)S為-1; 假如指數(shù)位表示的值為E(計(jì)算后),指數(shù)位表示的值為2的E次方; 假如尾數(shù)位表示的值為M,尾數(shù)位表示的值為M; 根據(jù)科學(xué)表示法,任何一個(gè)范圍內(nèi)的浮點(diǎn)數(shù)可以通過(guò)以下方法來(lái)表示:(別問(wèn)我為啥,我沒(méi)去谷歌……) 浮點(diǎn)數(shù) = S * Math.pow(2,E) * M;
進(jìn)階三:我們?cè)趯?shí)際開(kāi)發(fā)中,如果遇見(jiàn)了這種浮點(diǎn)數(shù)計(jì)算的情況,怎么處理比較合適?
8、移動(dòng)端開(kāi)發(fā)的時(shí)候,一般怎么實(shí)現(xiàn)自適應(yīng)?rem
vw和vh
媒體查詢(bootstrap);
進(jìn)階一:他們的特點(diǎn)分別是什么?或者說(shuō)實(shí)現(xiàn)原理是什么?
rem 根據(jù) html 的 font-size;
vw是瀏覽器窗口寬度,vh是高度;
媒體查詢是根據(jù)瀏覽器窗口寬度或高度,進(jìn)行響應(yīng)式選擇顯示哪個(gè)css;
進(jìn)階二:彈出輸入框會(huì)發(fā)生定位錯(cuò)誤,fixed布局,怎么解決?
9、在我們將開(kāi)發(fā)好的頁(yè)面,進(jìn)入線上環(huán)境的時(shí)候,肯定要最大化性能優(yōu)化,那么我們常見(jiàn)的做法有哪些?https://csspod.com/frontend-performance-best-practices/
gzip、雪碧圖、減少http請(qǐng)求數(shù)、減少DNS請(qǐng)求、避免重定向、緩存ajax請(qǐng)求、延遲加載、預(yù)加載、減少DOM數(shù)、使用框架例如React的虛擬DOM樹(shù)、減少DOM操作、使用CDN、減少 css 里 @import 寫法、
10、圖片使用 雪碧圖 和 base64字符串 你覺(jué)得哪個(gè)好?為什么?雪碧圖可以緩存;
base64可以減少請(qǐng)求數(shù);
進(jìn)階一:如果你決定使用雪碧圖/base64字符串,你會(huì)怎么做?
webpack 配 url-loader(base64);
webpack 的雪碧圖插件 webpack-spritesmith;
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/108995.html
摘要:是什么是異步編程的一種解決方案所謂,簡(jiǎn)單說(shuō)就是一個(gè)容器,里面保存著某個(gè)未來(lái)才會(huì)結(jié)束的事件通常是一個(gè)異步操作的結(jié)果。 最近也在準(zhǔn)備換工作了,然后收集了一些我覺(jué)得今年面試會(huì)遇到常見(jiàn)的問(wèn)題。 如果有機(jī)會(huì),記得也幫忙分享我一下。2019的行情確實(shí)很糟糕??吹竭@么多人收藏點(diǎn)贊。我的內(nèi)心也是哇涼哇涼的。我也給一些除了面試題之外的經(jīng)驗(yàn)吧 我相信不景氣也是相對(duì)的,提升自我也是必要的。我說(shuō)說(shuō)我最近在準(zhǔn)...
摘要:是什么是異步編程的一種解決方案所謂,簡(jiǎn)單說(shuō)就是一個(gè)容器,里面保存著某個(gè)未來(lái)才會(huì)結(jié)束的事件通常是一個(gè)異步操作的結(jié)果。 最近也在準(zhǔn)備換工作了,然后收集了一些我覺(jué)得今年面試會(huì)遇到常見(jiàn)的問(wèn)題。 如果有機(jī)會(huì),記得也幫忙分享我一下。2019的行情確實(shí)很糟糕。看到這么多人收藏點(diǎn)贊。我的內(nèi)心也是哇涼哇涼的。我也給一些除了面試題之外的經(jīng)驗(yàn)吧 我相信不景氣也是相對(duì)的,提升自我也是必要的。我說(shuō)說(shuō)我最近在準(zhǔn)...
摘要:獲取的對(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:...
摘要:每天會(huì)折騰一道及以上題目,并將其解題思路記錄成文章,發(fā)布到和微信公眾號(hào)上。三匯總返回目錄在月日月日這半個(gè)月中,做了匯總了數(shù)組知識(shí)點(diǎn)?;蛘呃奖疚淖钕旅?,添加的微信等會(huì)根據(jù)題解以及留言內(nèi)容,進(jìn)行補(bǔ)充,并添加上提供題解的小伙伴的昵稱和地址。 LeetCode 匯總 - 2019/08/15 Create by jsliang on 2019-08-12 19:39:34 Recently...
閱讀 2553·2021-10-11 10:58
閱讀 1037·2019-08-29 13:58
閱讀 1673·2019-08-26 13:32
閱讀 838·2019-08-26 10:40
閱讀 3265·2019-08-26 10:18
閱讀 1764·2019-08-23 14:18
閱讀 1113·2019-08-23 10:54
閱讀 442·2019-08-22 18:39