面試中值得深思的問題

vue scoped的作用是什么? 如何更改element-ui樣式?

CSS,VUE中<style scoped> scoped不污染其他組件, /deep/的底層原理: 打包的時候會生成一個獨一無二[ha、sh]值。作用是穿透。

前段解決跨域方案?

  1. 通過jsonp跨域。
    2.document.domain + iframe跨域。
    3.location.hash + iframe。
  2. window.name + iframe跨域。
    5.postMessage跨域。
    6.跨域資源共享(CORS)。
    7.nginx代理跨域。
    8.nodejs中間件代理跨域。
    9.WebSocket協(xié)議跨域。

同一用戶下同一瀏覽器開了兩個相同地址,借助按鈕操作VUEX同一state時,是否有影響?

有影響,而且取決于你最后一次操作。

什么是強緩存和協(xié)商緩存,區(qū)別是什么?

在工作中,前端代碼打包之后的生成的靜態(tài)資源就要發(fā)布到靜態(tài)服務(wù)器上,這時候就要做對這些靜態(tài)資源做一些運維配置,其中,gzip和設(shè)置緩存是必不可少的。這兩項是最直接影響到網(wǎng)站性能和用戶體驗的。

緩存的有點:

1.減少了不必要的數(shù)據(jù)傳輸,節(jié)省帶寬
2.減少服務(wù)器的負(fù)擔(dān),提升網(wǎng)站性能
3.加快了客戶端加載網(wǎng)頁的速度
4.用戶體驗友好

緩存的缺點

資源如果有更改但是客戶端不及時更新會造成用戶獲取信息滯后,如果老版本有bug的話,情況會更加糟糕

強緩存

到底什么是強緩存?強在哪?其實強是強制的意思。當(dāng)瀏覽器去請求某個文件的時候,服務(wù)端就在respone header里面對該文件做了緩存配置。緩存的時間、緩存類型都由服務(wù)端控制,具體表現(xiàn)為:
respone header 的cache-control,常見的設(shè)置是max-age public private no-cache no-store等

詳細(xì)說明

max-age表示緩存的時間是31536000秒(1年),public表示可以被瀏覽器和代理服務(wù)器緩存,代理服務(wù)器一般可用nginx來做。immutable表示該資源永遠(yuǎn)不變,但是實際上該資源并不是永遠(yuǎn)不變,它這么設(shè)置的意思是為了讓用戶在刷新頁面的時候不要去請求服務(wù)器!啥意思?就是說,如果你只設(shè)置了cahe-control:max-age=31536000,public 這屬于強緩存,每次用戶正常打開這個頁面,瀏覽器會判斷緩存是否過期,沒有過期就從緩存中讀取數(shù)據(jù);但是有一些 "聰明" 的用戶會點擊瀏覽器左上角的刷新按鈕去刷新頁面,這時候就算資源沒有過期(1年沒這么快過),瀏覽器也會直接去請求服務(wù)器,這就是額外的請求消耗了,這時候就相當(dāng)于是走協(xié)商緩存的流程了(下面會講到)。如果cahe-control:max-age=315360000,public再加個immutable的話,就算用戶刷新頁面,瀏覽器也不會發(fā)起請求去服務(wù),瀏覽器會直接從本地磁盤或者內(nèi)存中讀取緩存并返回200狀態(tài),看上圖的紅色框(from memory cache)。這是2015年facebook團隊向制定 HTTP 標(biāo)準(zhǔn)的 IETF 工作組提到的建議:他們希望 HTTP 協(xié)議能給 Cache-Control 響應(yīng)頭增加一個屬性字段表明該資源永不過期,瀏覽器就沒必要再為這些資源發(fā)送條件請求了。

強緩存總結(jié)

1.cache-control: max-age=xxxx,public
客戶端和代理服務(wù)器都可以緩存該資源;
客戶端在xxx秒的有效期內(nèi),如果有請求該資源的需求的話就直接讀取緩存,statu code:200 ,如果用戶做了刷新操作,就向服務(wù)器發(fā)起http請求

2.cache-control: max-age=xxxx,private
只讓客戶端可以緩存該資源;代理服務(wù)器不緩存
客戶端在xxx秒內(nèi)直接讀取緩存,statu code:200

3.cache-control: max-age=xxxx,immutable
客戶端在xxx秒的有效期內(nèi),如果有請求該資源的需求的話就直接讀取緩存,statu code:200 ,即使用戶做了刷新操作,也不向服務(wù)器發(fā)起http請求

4.cache-control: no-cache
跳過設(shè)置強緩存,但是不妨礙設(shè)置協(xié)商緩存;一般如果你做了強緩存,只有在強緩存失效了才走協(xié)商緩存的,設(shè)置了no-cache就不會走強緩存了,每次請求都回詢問服務(wù)端。

5.cache-control: no-store
不緩存,這個會讓客戶端、服務(wù)器都不緩存,也就沒有所謂的強緩存、協(xié)商緩存了。

協(xié)商緩存

上面說到的強緩存就是給資源設(shè)置個過期時間,客戶端每次請求資源時都會看是否過期;只有在過期才會去詢問服務(wù)器。所以,強緩存就是為了給客戶端自給自足用的。而當(dāng)某天,客戶端請求該資源時發(fā)現(xiàn)其過期了,這是就會去請求服務(wù)器了,而這時候去請求服務(wù)器的這過程就可以設(shè)置協(xié)商緩存。這時候,協(xié)商緩存就是需要客戶端和服務(wù)器兩端進行交互的。

深入了解強緩存和協(xié)議緩存 http://www.itdecent.cn/p/9c95db596df5

VUE的生命周期?路由模板加入了<keep-alive>多出的兩個鉤子是什么?作用是什么?

activated :路由組件被激活時觸發(fā)。(當(dāng)進入緩存的路由組件時觸發(fā))。
deactivated:路由組件失活時觸發(fā)。(當(dāng)離開緩存的路由組件時觸發(fā))。

VUEX的詳細(xì)步驟。VUEX的概念.

反向說: 首先在src更目錄下建立store文件如果你要分模塊,用index文件導(dǎo)出,從建立state,mutaion(同步)更改state,action提交mutaion最好使用return newpromise 把值帶出來,在main.js
引用,APP.vue掛載,組件里import {mapState,mapAction} 計算屬性或methods里使用。

概念

主要是為了與組件通信,狀態(tài)管理機制。

VUE路由請描述一下?

1.創(chuàng)建路由表。如果要配置權(quán)限的話就用到導(dǎo)航守衛(wèi)。
2.前置守衛(wèi),后置守衛(wèi),組件內(nèi)守衛(wèi),
3.路由傳參,編程時跳轉(zhuǎn)是帶query和param。

VUE路由組件內(nèi)守衛(wèi)beforeRouteEnter怎樣訪問this,組件內(nèi)守衛(wèi)有幾個?

在next放行是帶個vm參數(shù),3個beforeRouteUpdate (2.2版本新增)。

VUE組件通信?

VUE v-if和v-show的區(qū)別

v-if: dom消失display:none的效果
v-show: dom不消失,影藏

VUE 父組件直接v-if="this.$refs.child"會出現(xiàn)什么效果?

無法獲取到子組件的屬性,最好使用this.$nextTick異步加載

this.$nextTick實現(xiàn)原理

這里就涉及到 Vue 一個很重要的概念:異步更新隊列(JS運行機制 、 事件循環(huán))。
Vue 在觀察到數(shù)據(jù)變化時并不是直接更新 DOM,而是開啟一個隊列,并緩沖在同一事件循環(huán)中發(fā)生的所有數(shù)據(jù)改變。
在緩沖時會去除重復(fù)數(shù)據(jù),從而避免不必要的計算和DOM操作。
然后,在下一個事件循環(huán) tick 中,Vue 刷新隊列并執(zhí)行實際(已去重的)工作。
所以如果用 for 循環(huán)來動態(tài)改變數(shù)據(jù)100次,其實它只會應(yīng)用最后一次改變,如果沒有這種機制,DOM就要重繪100次,是一個很大的開銷,損耗性能。

JS 事件循環(huán)(eventLoop)

1.JavaScript是單線程,非阻塞的
2.瀏覽器的事件循環(huán)
3.執(zhí)行棧和事件隊列
4.宏任務(wù)和微任務(wù)
5.node環(huán)境下的事件循環(huán)
和瀏覽器環(huán)境有何不同
事件循環(huán)模型
宏任務(wù)和微任務(wù)

深入了解eventLoop: https://www.ruanyifeng.com/blog/2014/10/event-loop.html

VUE簡單的我就不描述了,希望對你們的面試有所幫助, js 把對象和數(shù)組,面向?qū)ο螅顪\拷貝,原先和wepack 的AMD和commonJS熟悉。

小程序

react

混合開發(fā),

這里簡單描述,一般公司都會優(yōu)先使用H5頁面,優(yōu)點呢快,不用再HBuildex 里面打包發(fā)布,走的都是域名模式C2B模式,
如何搭出安卓apk文件,ios ipa 文件。
1.借助工具phoneGap,uni-app等等。
2.要安卓證書和ios證書。
3.在HBuilder 選擇原生app 打包,可下載5次。在蒲公英發(fā)布一下包。
4.要是發(fā)布應(yīng)用到商城里面則需要生產(chǎn)包對接華為應(yīng)用商城,小米應(yīng)用商城,vivo應(yīng)用商城。等等。
5.借助原生H5api解決一些權(quán)限,當(dāng)然用的uni-app幫你包裝過了只需要在json里面?zhèn)魅雓ey值。
6.建議在云服務(wù)器一條龍服務(wù),自己搭建的服務(wù)器,前段壓力會很大。

如何優(yōu)化你自己的項目?

1.去除冗余代碼。壓縮插件用起來
2.圖片壓縮,對一些不重要的小型圖片可在壓縮一次。
3.介紹CDN轉(zhuǎn)發(fā),將一些引用外部js的copy到本地。
4.圖標(biāo)字庫盡量保持2-3兆如果超過可不使用。
5.注釋console和debugger。

我會持續(xù)更新,希望可以對大家有用。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容