一、vue相關(guān)
1.vue的生命周期:beforeCreate=>>created=>>beforeMount=>>mounted=>>beforeUpdate=>>updated=>>beforeDestroy=>>destroyed
2.組件掛載階段:
父組件beforeCreate=>>父組件created=>>父組件beforeMount=>>子組件beforeCreate=>>子組件created=>>子組件beforeMount=>>子組件mounted=>>父組件mounted
即從創(chuàng)建到掛載,是從外到內(nèi),再?gòu)膬?nèi)到外
3.組件更新階段:
父組件beforeUpdate=>>子組件beforeUpdate=>>子組件updated=>>父組件updated
4.組件銷毀階段:
父組件beforeDestroy=>>子組件beforeDestroy=>>子組件destroyed=>>父組件destroyed
5.vue2和vue3的響應(yīng)式區(qū)別:
vue2響應(yīng)式的核心是通過(guò)defineProperty來(lái)對(duì)對(duì)象已有的屬性值的讀取和修改進(jìn)行劫持(監(jiān)視/攔截)
vue3響應(yīng)式通過(guò)Proxy來(lái)攔截對(duì)對(duì)象本身的操作,包括屬性的讀寫(xiě),屬性的添加,屬性的刪除等...
通過(guò)Reflect來(lái)動(dòng)態(tài)對(duì)被代理的對(duì)象的相應(yīng)屬性進(jìn)行特定操作
6.watch 和 computed 的區(qū)別
computed(計(jì)算屬性):根據(jù)你所依賴的數(shù)據(jù)動(dòng)態(tài)顯示新的計(jì)算結(jié)果,不用再 data 中聲明,否則報(bào)錯(cuò)、支持緩存、不支持異步、有 get 和 set 方法,當(dāng)數(shù)據(jù)變化時(shí),調(diào)用 set 方法、當(dāng)需要進(jìn)行數(shù)值計(jì)算,并且依賴于其它數(shù)據(jù)時(shí),用 computed;
watch(監(jiān)視屬性/偵聽(tīng)器):data 的數(shù)據(jù)監(jiān)聽(tīng)回調(diào),依賴 data 的數(shù)據(jù)變化,直接使用 data 聲明的數(shù)據(jù)、不支持緩存、支持異步、可以深度監(jiān)視 deep,加載就調(diào)用 immediate、監(jiān)聽(tīng)的函數(shù)接收兩個(gè)參數(shù),newVal 和 oldVla、在某個(gè)數(shù)據(jù)變化時(shí)做一些事情或需要異步操作時(shí),用 watch
7.組件通信
props parent /
parent 獲取父組件的實(shí)例,任意調(diào)用父組件的方法,修改父組件的數(shù)據(jù)
ref 父組件獲取 子組件 實(shí)例,任意調(diào)用子組件的方法獲取子組件的屬性
provide / injectprpvide 父組件內(nèi)部提供數(shù)據(jù) inject 嵌套的子組件可以注入數(shù)據(jù)
listeners
listeners(可以獲取所有的父組件傳遞過(guò)來(lái)的自定義事件)
eventBus 定義一個(gè)事件總線 使用 emit 觸發(fā)
vuex
路由傳參
8.vue響應(yīng)式的原理
vue的響應(yīng)式底層是通過(guò)object.defineProperty來(lái)實(shí)現(xiàn)的,在中間去做了一些這種監(jiān)聽(tīng)的機(jī)制、訂閱發(fā)布者模式結(jié)合他的一個(gè)dep更新的一個(gè)機(jī)制去實(shí)現(xiàn)的響應(yīng)式。
9.什么是mvvm?
mvvm不過(guò)是一種這種框架的架構(gòu)嘛,view-model model view這樣的一個(gè)結(jié)構(gòu),然后它主要的優(yōu)勢(shì)在于vue和model之前是雙向數(shù)據(jù)傳遞的,視圖改變數(shù)據(jù)就可以改變,數(shù)據(jù)改變了視圖也可以改變嘛。
10.vue想做這個(gè)響應(yīng)式更新,數(shù)據(jù)在哪定義?不在data定義可以不可以?怎么讓它變響應(yīng)式?手寫(xiě)的get方法怎么寫(xiě)?
數(shù)據(jù)肯定是在data里面定義;不在data中定義的數(shù)據(jù)是非響應(yīng)式的;可以通過(guò)加一些vue的語(yǔ)法糖,$set把它強(qiáng)制變成響應(yīng)式就可以了,或者可以加一個(gè)自己去手寫(xiě)的一個(gè)get方法,也可以get、set的方法;還是利用這個(gè)js原生的object.defineProperty,然后去對(duì)它的變量的修改,以及變量的獲取去做監(jiān)聽(tīng),監(jiān)聽(tīng)到了之后去給它綁定現(xiàn)成的事件。
11.$nextTick
Vue在更新data之后并不會(huì)立即更新DOM上的數(shù)據(jù),就是說(shuō)如果我們修改了data中的數(shù)據(jù),再馬上獲取DOM上的值,我們?nèi)〉玫氖桥f值,我們把獲取DOM上值的操作放進(jìn)$nextTick里,就可以得到更新后得數(shù)據(jù)。
12.Vue服務(wù)端渲染:Nuxt.js
網(wǎng)頁(yè)是通過(guò)服務(wù)端渲染生成后輸出給客戶端。比如JSP、PHP、JavaWeb等都是SSR架構(gòu),也就是服務(wù)端取出數(shù)據(jù)和模板組合生成 html 輸出給前端,前端發(fā)生請(qǐng)求時(shí),重新向服務(wù)端請(qǐng)求 html 資源,路由也由服務(wù)端來(lái)控制。
13.為什么要用Nuxt.js?
目前大部分的Vue項(xiàng)目本質(zhì)是 SPA 應(yīng)用,SPA應(yīng)用廣泛用于對(duì)SEO要求不高的場(chǎng)景中。
在我們開(kāi)發(fā)的過(guò)程中,我們有 SEO 的需求,我們需要搜索引擎更多地抓取到我們的項(xiàng)目?jī)?nèi)容,此時(shí)我們需要SSR。SSR保證用戶盡快看到基本的內(nèi)容,也使得用戶體驗(yàn)性更好。
14.for循環(huán)為什么要設(shè)置key值?
在用v-for進(jìn)行數(shù)據(jù)遍歷渲染的時(shí)候,為每一項(xiàng)都設(shè)置唯一的key值,為了讓Vue內(nèi)部核心代碼能更快地找到該條數(shù)據(jù),當(dāng)舊值和新值去對(duì)比的時(shí)候,可以更快的定位到diff。
15.Vue路由設(shè)置成懶加載的作用?
1.Vue路由設(shè)置成懶加載,當(dāng)首屏渲染的時(shí)候,能夠加快渲染速度。
2.路由懶加載,webpack 的import 返回的是一個(gè)promise,主要是為了實(shí)現(xiàn)首屏加載速度,以及進(jìn)入某一個(gè)頁(yè)面時(shí)加載的速度。
二、js相關(guān)
1.原型和原型鏈的理解
原型:每個(gè)函數(shù)都有prototype屬性,該屬性指向原型對(duì)象。
使用原型對(duì)象的好處是所有對(duì)象實(shí)例共享它所包含的屬性和方法。
原型鏈:訪問(wèn)一個(gè)對(duì)象的屬性時(shí),如果該對(duì)象內(nèi)部不存在這個(gè)屬性,那么就會(huì)沿著它的proto 屬性所指向的那個(gè)對(duì)象(父對(duì)象)里找,直到為null為止,這樣一層一層的就構(gòu)成了原型鏈。
主要解決了繼承的問(wèn)題。
proto是對(duì)象的,prototype是函數(shù)的,因?yàn)楹瘮?shù)也是對(duì)象,所以函數(shù)也有proto
2.防抖和節(jié)流
防抖:觸發(fā)高頻事件后n秒內(nèi)函數(shù)只會(huì)執(zhí)行一次,如果n秒內(nèi)高頻事件再次被觸發(fā),則重新計(jì)算時(shí)間
節(jié)流:高頻事件觸發(fā),但在n秒內(nèi)只會(huì)執(zhí)行一次,節(jié)流會(huì)稀釋函數(shù)的執(zhí)行頻率
3.post和get請(qǐng)求的區(qū)別是什么?
1、post請(qǐng)求更安全;post請(qǐng)求不會(huì)作為url的一部分,不會(huì)被緩存、保存在服務(wù)器日志、以及瀏覽器瀏覽記錄中,get請(qǐng)求的是靜態(tài)資源,則會(huì)緩存,如果是數(shù)據(jù),則不會(huì)緩存。2、post請(qǐng)求發(fā)送的數(shù)據(jù)更大,get請(qǐng)求有url長(zhǎng)度限制。3、post請(qǐng)求能發(fā)送更多的數(shù)據(jù)類型,get請(qǐng)求只能發(fā)送ASCII字符。4、傳參方式不同。5、get產(chǎn)生一個(gè)TCP數(shù)據(jù)包;post產(chǎn)生兩個(gè)。
4.http和https的區(qū)別?
1.http是明文傳輸,https是加密傳輸;
2.HTTP 和 HTTPS 使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。
3.HTTP 的連接很簡(jiǎn)單,是無(wú)狀態(tài)的。HTTPS 協(xié)議是由 SSL+HTTP 協(xié)議構(gòu)建的可進(jìn)行加密傳輸、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議,比 HTTP 協(xié)議安全
三、css相關(guān)
(一)BFC--塊級(jí)格式化上下文
實(shí)現(xiàn)BFC屬性的方法:
1. 浮動(dòng)元素,float 除 none 以外的值
2. 定位元素,position的值不是static或者relative。
3. display 為 inline-block 、table-cell、table-caption、table、table-row、table-row-group、
table-header-group、table-footer-group、inline-table、flow-root、flex或 inline-flex、grid或 inline-grid
4. overflow 除了 visible 以外的值(hidden,auto,scroll)
5. 根元素<html> 就是一個(gè) BFC
(二) BFC的作用:
1.避免外邊距重疊(防止margin塌陷)
2、用于清除浮動(dòng)
3、阻止元素被浮動(dòng)元素覆蓋
4、拓展:CSS中常見(jiàn)的定位方案
(三)px、em、rem的區(qū)別
1、px 像素 固定單位 它的大小是固定的
2、em 相對(duì)單位 em的值并不是固定的 em會(huì)繼承父元素的字體大小 會(huì)根據(jù)父
3、元素字體大小的變化而變化 一般1em等于16px
4、rem 他的值也是不固定的 他會(huì)根據(jù)根元素的大小而變化
(四)介紹一下標(biāo)準(zhǔn)的CSS的盒子模型?與低版本IE的盒子模型有什么不同的?
1.標(biāo)準(zhǔn)盒模型:內(nèi)容content、padding、border、margin組成 寬高指的是 content 的寬高
2.IE盒模型:(內(nèi)容content、padding、border) + margin 寬高指的是 content+padding+border 部分的寬高。
(五)實(shí)現(xiàn)一個(gè)元素垂直水平居中
1.絕對(duì)定位+margin:auto
2.絕對(duì)定位+負(fù)margin
3.絕對(duì)定位+transform
4.flex布局
四、es6
五、ts
六、小程序
七、webpack
1.構(gòu)建工具:webpack load 和插件的區(qū)別 load 主要單一處理資源,:例如less load 把less 文件轉(zhuǎn)換成css 文件 插件 能夠參與到整個(gè)構(gòu)建過(guò)程中,可以針對(duì)某個(gè)構(gòu)建周期進(jìn)行文件內(nèi)容的替換和編輯內(nèi)容。
2.webpack 構(gòu)建優(yōu)化過(guò)程,常用的文件通過(guò)cdn方式引入。
八、遇到的困難
1.2個(gè)H5 頁(yè)面數(shù)據(jù)同步問(wèn)題: 小程序內(nèi)1個(gè)未登錄的活動(dòng)頁(yè)面點(diǎn)擊點(diǎn)擊按鈕時(shí),跳轉(zhuǎn)到小程序嵌套的H5 登錄頁(yè)面上。當(dāng)?shù)卿浲瓿珊?,活?dòng)頁(yè)面需要刷新頁(yè)面為登錄狀態(tài),此時(shí)涉及到兩個(gè)H5 頁(yè)面的交互問(wèn)題。通過(guò)學(xué)習(xí)查找,發(fā)現(xiàn)window 的storage事件來(lái)完成2個(gè)頁(yè)面的交互?;顒?dòng)頁(yè)面聽(tīng)過(guò)監(jiān)聽(tīng)window的storage 事件,然后在登錄頁(yè)面改變localStorage 改變某個(gè)值,來(lái)觸發(fā)活動(dòng)頁(yè)面上的監(jiān)聽(tīng)