前端面試題 (二):

站在月亮上Da? ...


什么是同源策略肠槽?你都知道哪些解決跨域的方法擎淤?

????????同源策略(Same origin policy)是一種約定,它是瀏覽器最核心也最基本的安全功能秸仙,如 ? 果缺少了同源策略嘴拢,則瀏覽器的正常功能可能都會(huì)受到影響〖偶停可以說 Web 是構(gòu)建在同源策略基礎(chǔ)之上的席吴,瀏覽器只是針對(duì)同源策略的一種實(shí)現(xiàn)。

????????所謂同源是指:域名捞蛋、協(xié)議孝冒、端口相同。

????????同源策略又分為以下兩種:

????????????????DOM 同源策略:禁止對(duì)不同源頁面 DOM 進(jìn)行操作拟杉。這里主要場景是 iframe 跨域的情況庄涡,不同域名的 iframe 是限制互相訪問的。

????????????????XMLHttpRequest 同源策略:禁止使用 XHR 對(duì)象向不同源的服務(wù)器地址發(fā)起 HTTP 請(qǐng)求搬设。

????????1.?通過jsonp跨域

????????????????通常為了減輕web服務(wù)器的負(fù)載穴店,我們把js、css拿穴,img等靜態(tài)資源分離到另一臺(tái)獨(dú)立域名的服務(wù)器上泣洞,在html頁面中再通過相應(yīng)的標(biāo)簽從不同域名下加載靜態(tài)資源,而被瀏覽器允許默色,基于此原理球凰,我們可以通過動(dòng)態(tài)創(chuàng)建script,再請(qǐng)求一個(gè)帶參網(wǎng)址實(shí)現(xiàn)跨域通信腿宰。

????????2呕诉、 document.domain + iframe跨域

????????????????此方案僅限主域相同,子域不同的跨域應(yīng)用場景吃度。

????????????????實(shí)現(xiàn)的原理:兩個(gè)頁面都通過js強(qiáng)制設(shè)置document.domain為基礎(chǔ)主域甩挫,就實(shí)現(xiàn)了同域。

????????3规肴、 location.hash + iframe

? ? ? ?????????實(shí)現(xiàn)原理: a欲與b跨域相互通信捶闸,通過中間頁c來實(shí)現(xiàn)夜畴。 三個(gè)頁面拖刃,不同域之間利用iframe的location.hash傳值,相同域之間直接js訪問來通信贪绘。

????????????????具體實(shí)現(xiàn):A域:a.html -> B域:b.html -> A域:c.html兑牡,a與b不同域只能通過hash值單向通信,b與c也不同域也只能單向通信税灌,但c與a同域均函,所以c可通過parent.parent訪問a頁面所有對(duì)象亿虽。

????????????????實(shí)現(xiàn)的原理: a欲與b跨域相互通信,通過中間頁c來實(shí)現(xiàn)苞也。 三個(gè)頁面洛勉,不同域之間利用iframe的location.hash傳值,相同域之間直接js訪問來通信如迟。

????????????????具體實(shí)現(xiàn):A域:a.html -> B域:b.html -> A域:c.html收毫,a與b不同域只能通過hash值單向通信,b與c也不同域也只能單向通信殷勘,但c與a同域此再,所以c可通過parent.parent訪問a頁面所有對(duì)象。

????????4玲销、 window.name + iframe跨域

????????????????window.name屬性的獨(dú)特之處:name值在不同的頁面(甚至不同域名)加載后依舊存在输拇,并且可以支持非常長的 name 值(2MB)。

????????5贤斜、 postMessage跨域

????????????????postMessage是HTML5 XMLHttpRequest Level 2中的API策吠,且是為數(shù)不多可以跨域操作的window屬性之一,它可用于解決以下方面的問題:

????????????????????????a.) 頁面和其打開的新窗口的數(shù)據(jù)傳遞

????????????????????????b.) 多窗口之間消息傳遞

????????????????????????c.) 頁面與嵌套的iframe消息傳遞

????????????????????????d.) 上面三個(gè)場景的跨域數(shù)據(jù)傳遞

????????????????用法:postMessage(data,origin)方法接受兩個(gè)參數(shù)

????????????????data: html5規(guī)范支持任意基本類型或可復(fù)制的對(duì)象蠢古,但部分瀏覽器只支持字符串奴曙,所以傳參時(shí)最好用JSON.stringify()序列化。

????????????????origin: 協(xié)議+主機(jī)+端口號(hào)草讶,也可以設(shè)置為"*"洽糟,表示可以傳遞給任意窗口,如果要指定和當(dāng)前窗口同源的話設(shè)置為"/"堕战。

????????6坤溃、 跨域資源共享(CORS)

????????????????普通跨域請(qǐng)求:只服務(wù)端設(shè)置Access-Control-Allow-Origin即可,前端無須設(shè)置嘱丢,若要帶cookie請(qǐng)求:前后端都需要設(shè)置薪介。

????????????????需注意的是:由于同源策略的限制,所讀取的cookie為跨域請(qǐng)求接口所在域的cookie越驻,而非當(dāng)前頁汁政。如果想實(shí)現(xiàn)當(dāng)前頁cookie的寫入,可參考下文:七缀旁、nginx反向代理中設(shè)置proxy_cookie_domain 和 八记劈、NodeJs中間件代理中cookieDomainRewrite參數(shù)的設(shè)置。

????????????????目前并巍,所有瀏覽器都支持該功能(IE8+:IE8/9需要使用XDomainRequest對(duì)象來支持CORS))目木,CORS也已經(jīng)成為主流的跨域解決方案。

????????7懊渡、 nginx代理跨域

????????????????跨域原理: 同源策略是瀏覽器的安全策略刽射,不是HTTP協(xié)議的一部分军拟。服務(wù)器端調(diào)用HTTP接口只是使用HTTP協(xié)議,不會(huì)執(zhí)行JS腳本誓禁,不需要同源策略懈息,也就不存在跨越問題。

????????????????實(shí)現(xiàn)思路:通過nginx配置一個(gè)代理服務(wù)器(域名與demo1相同摹恰,端口不同)做跳板機(jī)漓拾,反向代理訪問demo2接口,并且可以順便修改cookie中demo信息戒祠,方便當(dāng)前域cookie寫入骇两,實(shí)現(xiàn)跨域登錄。

????????8姜盈、 nodejs中間件代理跨域

????????????????node中間件實(shí)現(xiàn)跨域代理低千,原理大致與nginx相同,都是通過啟一個(gè)代理服務(wù)器馏颂,實(shí)現(xiàn)數(shù)據(jù)的轉(zhuǎn)發(fā)示血,也可以通過設(shè)置cookieDomainRewrite參數(shù)修改響應(yīng)頭中cookie中域名,實(shí)現(xiàn)當(dāng)前域的cookie寫入救拉,方便接口登錄認(rèn)證难审。

????????9、 WebSocket協(xié)議跨域

????????????????WebSocket protocol是HTML5一種新的協(xié)議亿絮。它實(shí)現(xiàn)了瀏覽器與服務(wù)器全雙工通信告喊,同時(shí)允許跨域通訊,是server push技術(shù)的一種很好的實(shí)現(xiàn)派昧。

????????????????原生WebSocket API使用起來不太方便黔姜,我們使用Socket.io,它很好地封裝了webSocket接口蒂萎,提供了更簡單秆吵、靈活的接口,也對(duì)不支持webSocket的瀏覽器提供了向下兼容五慈。



列舉JavaScript的基本數(shù)據(jù)類型和引用數(shù)據(jù)類型

? ? ? ? 基本數(shù)據(jù)類型 (?按值訪問 ) :

? ? ? ? ? ? ? ? number?纳寂、string?、null?泻拦、undefined ?毙芜、Boolean?、Symbol (new in ES 6)

? ? ? ? ? ? ? ? 基本數(shù)據(jù)存儲(chǔ)在棧(stack)中聪轿,是按值訪問的...

1 ????var a=10;?

2 ????var b=a;?

3 ????b=20;?

4???? console.log(a)???????? // 結(jié)果 a = 10

? ? ? ? 引用數(shù)據(jù)類型?(按引用訪問?)?:

? ? ? ? ? ? ? ? 對(duì)象Object爷肝、數(shù)組Array 猾浦、函數(shù)Function陆错、Date等

? ??????????????引用數(shù)據(jù)類型是保存在堆(heap)中的對(duì)象

? ? ? ? ? ? ? ? ( 它不能直接訪問堆內(nèi)存中的位置操作堆內(nèi)存空間灯抛,只能操作對(duì)象在棧內(nèi)存中的引用地址 )

var obj1 = new Object();?

var obj2 = obj1;

?obj2.username = "我不是李白";

?console.log(obj1.username); //? 結(jié)果??‘我不是李白 ’


Vue2.0的生命周期有哪些?分別解釋其意思

? ??????創(chuàng)建Create

????????????????創(chuàng)建前????????beforeCreate()

????????????????創(chuàng)建后????????created()????從可以修改data數(shù)據(jù)

????????掛載Mount

????????????????掛載前????????beforeMount()????正在加載數(shù)據(jù)

????????????????掛載后????????mounted()? ? ajax請(qǐng)求

????????修改Update

????????????????修改前????????beforeUpdate()

????????????????修改后????????updated()

????????銷毀Destroy

????????????????銷毀前????????beforeDestory()????彈窗組件 關(guān)閉前

????????????????銷毀后????????destoryed()????彈窗組件 關(guān)閉后



詳述組件通信

? ? ? ? 父傳子 :?

? ??????????????在父組件的組件標(biāo)簽上通過v-bind綁定要傳遞的數(shù)據(jù)音瓷,然后在子組件內(nèi)部通過props接收

????????// 父組件

????????????????????<select-list :dataList="dataArr" @parentReceive="changeVal"/>

????????// 子組件

????????????????????props: ['dataList']

? ? ? ? 子傳父?:

? ??????????????在子組件中定義一個(gè)方法对嚼,然后在方法里面通過this.$emit進(jìn)行傳遞($emit有兩個(gè)參數(shù)(自定義事件名稱,要傳遞的數(shù)據(jù)))绳慎;

? ??????????????// select-list組件 - 子組件selectVal (val) { // 第一步 this.$emit('parentReceive', val) // 第一個(gè)參數(shù):自定義事件名稱纵竖;第二個(gè)參數(shù)要傳遞的數(shù)據(jù)}

? ??????????????在父組件的子組件標(biāo)簽上通過@自定義事件名稱監(jiān)聽,然后通過回調(diào)函數(shù)去處理響應(yīng)的邏輯

? ??// 父組件?

????????<template>?

? ??????????????????<select-list :dataList="dataArr" @parentReceive="changeVal"/>?

? ??????</template>?

? ? ? ? ?<script>?

? ??????????????????????changeVal (val) {?

? ??????????????????????????????console.log(`我是子組件傳遞過來的數(shù)據(jù)${val}`)

? ? ? ? ? ? ? ? ? ? ??}?

? ? ? ? ?</script>? ??

? ? ? ? 兄弟傳值:

? ? ? ? ? ? ? ? ? ?A? 傳 父? 杏愤,? 父 傳 B

? ? ? ? 中央通信(跨組件通信):

? ??????????????????在要傳遞數(shù)據(jù)的組件通過$emit(自定義事件名稱靡砌,要傳遞的數(shù)據(jù))

?// select - list?

? ? ? ? ? ? import? bus? from'../../main'

????????????selectVal (val) {? ? ?

????????????????????bus.$emit('reveive', val)? ?

????????????}

????????????????????在目標(biāo)組件通過$on進(jìn)行監(jiān)聽接收$on('自定義事件名稱', 回調(diào)函數(shù))

// select - input

????????????import? bus? from? '../../main'

????????????bus.$on('reveive', val => {

????????????????????console.log(val)

????????????????????this.value = val

????????????})

????????????????????PS:$emit & $on都要掛載到Vue空實(shí)例上,而這個(gè)空實(shí)例要全局使用因此需要在main.js創(chuàng)建

// main.js

let? bus =? new? Vue()

exportdefault bus



詳述導(dǎo)航守衛(wèi)

????概念

? ? ? ? ? ?導(dǎo)航發(fā)生變化時(shí)珊楼,導(dǎo)航鉤子主要用來攔截導(dǎo)航通殃,讓它完成跳轉(zhuǎn)或取消

????首先他們?nèi)慷加腥齻€(gè)參數(shù)

????????????to:這是你要跳去的路由對(duì)象。

????????????from:這是你要離開的路由對(duì)象厕宗。

????????????next:是一個(gè)方法画舌,它接受參數(shù)。這個(gè)方法必須調(diào)用要不就跳不過去了已慢,你可以把它看做保安曲聂。必須給它打個(gè)招呼,要不然不讓你過佑惠。

????全局的

? ? ? ? ? ? beforeEach - 前置鉤子函數(shù)? ?( 使用場景?-?未登錄去下單朋腋,跳轉(zhuǎn)到登錄頁 )

? ? ? ? ? ? afterEach - 后置鉤子函數(shù)?? ?(?使用場景?-?改變?yōu)g覽器title )

? ? 單路由獨(dú)享

? ? ? ? ? ? beforeEnter??

? ? 組件級(jí)????

? ? ? ? ? ? beforeRouteEnter?- 進(jìn)入組件前 (?使用場景 - 進(jìn)入這個(gè)組件前你要做什么初始化操作?)

? ? ? ? ? ? beforeRouteUpdate - 組件更新或改變時(shí)? (?使用場景 - 復(fù)用組件時(shí)(對(duì)于一個(gè)帶有動(dòng)態(tài)參數(shù)的路徑 /foo/:id,在 /foo/1 和 /foo/2 之間跳轉(zhuǎn)的時(shí)候 )

? ??????????beforeRouteLeave - 離開組件時(shí)? (?使用場景 - 清除定時(shí)器等等 )



v-show和v-if有什么區(qū)別膜楷?及使用場景

????????????v-if 用于 DOM 節(jié)點(diǎn) 滿足條件是它才會(huì)進(jìn)行一個(gè)渲染內(nèi)容

????????????v-show 用于點(diǎn)擊頻繁的位置 乍丈,實(shí)際是就是 一個(gè)標(biāo)簽區(qū)域內(nèi)容的 顯示和隱藏? ? ? ??



v-for和v-if的優(yōu)先級(jí)

? ? ? ? ? ?當(dāng)它們處于同一節(jié)點(diǎn),v-for?的優(yōu)先級(jí)比?v-if?更高把将,這意味著?v-if?將分別重復(fù)運(yùn)行于每個(gè)?v-for?循環(huán)中轻专。當(dāng)你想為僅有的一些項(xiàng)渲染節(jié)點(diǎn)時(shí),這種優(yōu)先級(jí)的機(jī)制會(huì)十分有用

? ??????????????


查看更多...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末察蹲,一起剝皮案震驚了整個(gè)濱河市请垛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌洽议,老刑警劉巖宗收,帶你破解...
    沈念sama閱讀 218,640評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異亚兄,居然都是意外死亡混稽,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來匈勋,“玉大人礼旅,你說我怎么就攤上這事∏⒔啵” “怎么了痘系?”我有些...
    開封第一講書人閱讀 165,011評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長饿自。 經(jīng)常有香客問我汰翠,道長,這世上最難降的妖魔是什么昭雌? 我笑而不...
    開封第一講書人閱讀 58,755評(píng)論 1 294
  • 正文 為了忘掉前任复唤,我火速辦了婚禮,結(jié)果婚禮上烛卧,老公的妹妹穿的比我還像新娘苟穆。我一直安慰自己,他們只是感情好唱星,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,774評(píng)論 6 392
  • 文/花漫 我一把揭開白布雳旅。 她就那樣靜靜地躺著,像睡著了一般间聊。 火紅的嫁衣襯著肌膚如雪攒盈。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,610評(píng)論 1 305
  • 那天哎榴,我揣著相機(jī)與錄音型豁,去河邊找鬼。 笑死尚蝌,一個(gè)胖子當(dāng)著我的面吹牛迎变,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播飘言,決...
    沈念sama閱讀 40,352評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼衣形,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了姿鸿?” 一聲冷哼從身側(cè)響起谆吴,我...
    開封第一講書人閱讀 39,257評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎苛预,沒想到半個(gè)月后句狼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,717評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡热某,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,894評(píng)論 3 336
  • 正文 我和宋清朗相戀三年腻菇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了胳螟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,021評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡筹吐,死狀恐怖糖耸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情骏令,我是刑警寧澤,帶...
    沈念sama閱讀 35,735評(píng)論 5 346
  • 正文 年R本政府宣布垄提,位于F島的核電站榔袋,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏铡俐。R本人自食惡果不足惜凰兑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,354評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望审丘。 院中可真熱鬧吏够,春花似錦、人聲如沸滩报。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脓钾。三九已至售睹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間可训,已是汗流浹背昌妹。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留握截,地道東北人飞崖。 一個(gè)月前我還...
    沈念sama閱讀 48,224評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像谨胞,于是被迫代替她去往敵國和親固歪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,974評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1.什么是同源策略胯努?你都知道哪些解決跨域的方法昼牛? 同源策略(Same origin policy)是一種約定,它是...
    抱以惡意閱讀 213評(píng)論 0 0
  • 1. webpack的看法 webpack是一個(gè)打包工具康聂,可以使用webpack管理你的模塊依賴可以分析各模塊之間...
    月半女那閱讀 2,471評(píng)論 0 7
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5贰健? 答:HTML5是最新的HTML標(biāo)準(zhǔn)。 注意:講述HT...
    kismetajun閱讀 27,486評(píng)論 1 45
  • 一恬汁、理論基礎(chǔ)知識(shí)部分 1.1伶椿、講講輸入完網(wǎng)址按下回車辜伟,到看到網(wǎng)頁這個(gè)過程中發(fā)生了什么 a. 域名解析 b. 發(fā)起T...
    我家媳婦蠢蠢噠閱讀 3,126評(píng)論 2 106
  • 1、float的作用脊另? 定義元素在哪個(gè)方向浮動(dòng)(left,right,none,inherit)导狡。浮動(dòng)元素會(huì)生成一...
    嘻哈章魚小丸子閱讀 406評(píng)論 0 4