第一次面試總結(jié)

一、如何根據(jù)音量大小制作會(huì)跳動(dòng)的音波特效

1九串、使用AudioContext接口妓局, new這個(gè)對(duì)象創(chuàng)建上下文
AudioContext接口表示由鏈接在一起的音頻模塊構(gòu)建的音頻處理圖财忽,每個(gè)模塊由一個(gè)AudioNode表示。音頻上下文控制它包含的節(jié)點(diǎn)的創(chuàng)建和音頻處理或解碼的執(zhí)行铛只。在做任何其他操作之前埠胖,您需要?jiǎng)?chuàng)建一個(gè)AudioContext對(duì)象,因?yàn)樗惺虑槎际窃谏舷挛闹邪l(fā)生的淳玩。建議創(chuàng)建一個(gè)AudioContext對(duì)象并復(fù)用它直撤,而不是每次初始化一個(gè)新的AudioContext對(duì)象,并且可以對(duì)多個(gè)不同的音頻源和管道同時(shí)使用一個(gè)AudioContext對(duì)象蜕着。
2谋竖、audioContext.createMediaElementSource(elem)從該元素獲取源并將其通過管道傳遞到我們創(chuàng)建的上下文中
3、 audioContext.createAnalyser()創(chuàng)建一個(gè)Analyser節(jié)點(diǎn),獲取音頻時(shí)間和頻率數(shù)據(jù),來實(shí)現(xiàn)可視化
4承匣、 AnalyserNode.fftsize,這是一個(gè)無符號(hào)長(zhǎng)整型的數(shù),默認(rèn)值為2048,表示樣本的窗口大小,用來獲取頻域數(shù)據(jù)

二蓖乘、如何制作上傳文件并可以在本地預(yù)覽

文件上傳需要使用<input type=”file”/>,如下:

<input type="file" name="upload" mutipart accept="image/*">
<!--
    ** 可用屬性 **
    type: file(必填)韧骗,必須為file
    multipart: 指示是否可以多選
    accept : 指示文件類型嘉抒,指示可選擇的文件,使用逗號(hào)(,)分隔
        可能的值為:
        * 后綴袍暴,如.jpg,.png
        * 一個(gè)有效的MIME type
        * audio/* 音樂文件
        * video/* 視頻文件
        * image/* 圖片文件
-->
原理

通過input的 type = file屬性和window的內(nèi)置FileReader對(duì)象些侍,利用FileReader對(duì)象的readAsDataURL方法,把圖片數(shù)據(jù)轉(zhuǎn)成base64字符串?dāng)?shù)據(jù)政模,然后把這個(gè)base64字符串?dāng)?shù)據(jù)賦值給一個(gè)圖片標(biāo)簽的src岗宣。

偽代碼
//input標(biāo)簽,獲取本地圖片
<input type="file" onchange="uploadImg(this)" accept="image/*"/>

//預(yù)覽圖片標(biāo)簽
 <img id="viewImg"/>


 function uploadImg(fileDom) {
    //取到file文件的本地路徑淋样,就是你電腦上的存儲(chǔ)路徑
    console.log(fileDom.value);

    // 獲取圖片數(shù)據(jù)對(duì)象
    var file = fileDom.files[0];

    // 獲取圖片名字
    console.log(file.name); 

    // 獲取圖片文件大小,單位為byte
    console.log(file.size);

    var reader = new FileReader();
    reader.readAsDataURL(file);

    //確保文件成功獲取耗式,base64數(shù)據(jù)量比較大
    reader.onload = function (event) {
        var e = event || window.event
        var img = document.getElementById("viewImg");
        img.src = e.target.result;
        //或者 img.src = this.result; 因?yàn)閑.target == this
    }
}
知識(shí)延伸

FileReader除了readAsDataURL方法之外,還有另外兩個(gè)比較重要的方法趁猴,分別為readAsBinaryString 將選擇的文件讀取成二進(jìn)制和readAsText將選擇的文件讀取成文本格式 刊咳;

三、跨域

同源策略

一個(gè)域下的 js 腳本在未經(jīng)允許的情況下儡司,不能夠訪問另一個(gè)域的內(nèi)容芦缰。這里的同源的指的是兩個(gè)域的協(xié)議、域名枫慷、端口號(hào)必須相同,否則不屬于同一個(gè)域。

同源政策主要限制了三個(gè)方面:

  • 第一個(gè)是當(dāng)前域下的 js 腳本不能夠訪問其他域下的 cookie或听、localStorage 和 indexDB探孝。
  • 第二個(gè)是當(dāng)前域下的 js 腳本不能夠操作訪問操作其他域下的 DOM。
  • 第三個(gè)是當(dāng)前域下 ajax 無法發(fā)送跨域請(qǐng)求誉裆。

同源政策的目的主要是為了保證用戶的信息安全顿颅,對(duì)于一般的 img、或者
script 腳本請(qǐng)求都不會(huì)有跨域的限制足丢,因?yàn)檫@些操作都不會(huì)通過響應(yīng)結(jié)果來進(jìn)行可能出現(xiàn)安全問題的操作粱腻。

解決跨域的方法
  • 通過 jsonp 跨域
    使用 jsonp 來實(shí)現(xiàn)跨域請(qǐng)求,它的主要原理是通過動(dòng)態(tài)構(gòu)建 script 標(biāo)簽來實(shí)現(xiàn)跨域請(qǐng)求斩跌,因?yàn)闉g覽器對(duì) script 標(biāo)簽的引入沒有跨域的訪問限制 绍些。通過在請(qǐng)求的 url 后指定一個(gè)回調(diào)函數(shù),然后服務(wù)器在返回?cái)?shù)據(jù)的時(shí)候耀鸦,構(gòu)建一個(gè) json 數(shù)據(jù)的包裝柬批,這個(gè)包裝就是回調(diào)函數(shù),然后返回給前端袖订,前端接收到數(shù)據(jù)后氮帐,因?yàn)檎?qǐng)求的是腳本文件,所以會(huì)直接執(zhí)行洛姑,這樣我們先前定義好的回調(diào)函數(shù)就可以被調(diào)用上沐,從而實(shí)現(xiàn)了跨域請(qǐng)求的處理。這種方式只能用于 get 請(qǐng)求楞艾。

  • 跨域資源共享(CORS)
    Access-Control-Allow-origin: 允許請(qǐng)求的方法/*(辦事多源参咙,但是不能攜帶cookie)
    Access-Control-Allow-Methods:允許的方法,多個(gè)方法用逗號(hào)分開
    Access-Control-Allow-Headers:允許的頭信息产徊,多個(gè)方法用逗號(hào)分開
    Access-Control-Allow-Credentials:true(跨資源請(qǐng)求發(fā)送的憑據(jù)cookie等)

  • Proxy代理

  • nginx 代理跨域

  • postMessage 跨域
    h5 中新增的一個(gè) api昂勒。通過它我們可以實(shí)現(xiàn)多窗口間的信息傳遞,通過獲取到指定窗口的引用舟铜,然后調(diào)用 postMessage 來發(fā)送信息戈盈,在窗口中我們通過對(duì) message 信息的監(jiān)聽來接收信息,以此來實(shí)現(xiàn)不同源間的信息交換谆刨。

  • WebSocket 協(xié)議跨域
    使用 websocket 協(xié)議塘娶,這個(gè)協(xié)議沒有同源限制。

  • document.domain + iframe 跨域
    只能實(shí)現(xiàn)同一個(gè)主域痊夭,不同子域之間的操作

如果是想要解決不同跨域窗口間的通信問題刁岸,比如說一個(gè)頁(yè)面想要和頁(yè)面的中的不同源的 iframe 進(jìn)行通信的問題,我們可以使用 location.hash 或者 window.name 或者 postMessage 來解決她我。

  • window.name + iframe 跨域
    主要是基于同一個(gè)窗口中設(shè)置了 window.name 后不同源的頁(yè)面也可以訪問虹曙,所以不同源的子頁(yè)面可以首先在 window.name 中寫入數(shù)據(jù)迫横,然后跳轉(zhuǎn)到一個(gè)和父級(jí)同源的頁(yè)面。這個(gè)時(shí)候級(jí)頁(yè)面就可以訪問同源的子頁(yè)面中 window.name 中的數(shù)據(jù)了酝碳,這種方式的好處是可以傳輸?shù)臄?shù)據(jù)量大矾踱。

  • location.hash + iframe
    我們可以在主頁(yè)面動(dòng)態(tài)的修改 iframe 窗口的 hash 值,然后在 iframe 窗口里實(shí)現(xiàn)監(jiān)聽函數(shù)來實(shí)現(xiàn)這樣一個(gè)單向的通信疏哗。因?yàn)樵?iframe 是沒有辦法訪問到不同源的父級(jí)窗口的呛讲,所以我們不能直接修改父級(jí)窗口的 hash 值來實(shí)現(xiàn)通信,我們可以在 iframe 中再加入一個(gè) iframe 返奉,這個(gè) iframe 的內(nèi)容是和父級(jí)頁(yè)面同源的贝搁,所以我們可以 window.parent.parent 來修改最頂級(jí)頁(yè)面的 src,以此來實(shí)現(xiàn)雙向通信芽偏。
    缺點(diǎn): 傳入的數(shù)據(jù)值有限

四雷逆、[ ] == [ ] 和 { } =={ }輸出值?null == null哮针?

false false true

堆关面、棧

棧(stack):先進(jìn)后出;自動(dòng)分配內(nèi)存空間十厢,由系統(tǒng)自動(dòng)釋放等太;

堆(heap):隊(duì)列優(yōu)先,先進(jìn)先出蛮放;動(dòng)態(tài)分配內(nèi)存缩抡,大小不定也不會(huì)自動(dòng)釋放;存放在二級(jí)緩存中包颁,生命周期由虛擬機(jī)的垃圾回收算法來決定瞻想;一般由程序員分配釋放,若程序員不釋放娩嚼,程序結(jié)束時(shí)可能由操作系統(tǒng)回收蘑险。

js中基本數(shù)據(jù)類型和引用數(shù)據(jù)類型

基本類型:存放在棧內(nèi)存中的簡(jiǎn)單數(shù)據(jù)段,數(shù)據(jù)大小確定岳悟,內(nèi)存空間大小可以分配佃迄。
Undefined / Null / Boolean / Number / String,它們是直接按值存放的贵少,可以直接訪問呵俏。

引用類型:存放在堆內(nèi)存中的對(duì)象;每個(gè)空間大小不一樣滔灶,根據(jù)情況進(jìn)行特定的分配普碎。

當(dāng)我們需要訪問引用數(shù)據(jù)類型 (對(duì)象 / 數(shù)組 / 函數(shù)) 的值時(shí),首先從棧中獲得該對(duì)象的地址指針录平,然后再?gòu)亩褍?nèi)存中取得所需的數(shù)據(jù)麻车。

所以缀皱,現(xiàn)在就可以解釋 var a = function(){}; var b = function(){}; a==b 為false,null == nul為true
變量a實(shí)際保存的是指向堆內(nèi)存中對(duì)象的一個(gè)指針,而b保存的是指向堆內(nèi)存中另一個(gè)對(duì)象的一個(gè)指針动猬;雖然這兩個(gè)對(duì)象的值是一樣的唆鸡,但它們是獨(dú)立的2個(gè)對(duì)象,占了2份內(nèi)存空間枣察;所以 a==b 為 false。

如果 var a = {}; var b = a; 這時(shí)變量b復(fù)制了變量a保存的指針燃逻,它們都指向堆內(nèi)存中同一個(gè)對(duì)象序目;所以 a==b 為 true。

五伯襟、react的優(yōu)點(diǎn)

優(yōu)點(diǎn)
1猿涨、React速度很快:它并不直接對(duì)DOM進(jìn)行操作,引入了一個(gè)叫做虛擬DOM的概念姆怪,安插在javascript邏輯和實(shí)際的DOM之間叛赚,性能好。
2稽揭、跨瀏覽器兼容:虛擬DOM幫助我們解決了跨瀏覽器問題俺附,它為我們提供了標(biāo)準(zhǔn)化的API,甚至在IE8中都是沒問題的溪掀。
3事镣、一切都是component:代碼更加模塊化,重用代碼更容易揪胃,可維護(hù)性高璃哟。
4、單向數(shù)據(jù)流:Flux是一個(gè)用于在JavaScript應(yīng)用中創(chuàng)建單向數(shù)據(jù)層的架構(gòu)喊递,它隨著React視圖庫(kù)的開發(fā)而被Facebook概念化随闪。
5、同構(gòu)骚勘、純粹的javascript:因?yàn)樗阉饕娴呐老x程序依賴的是服務(wù)端響應(yīng)而不是JavaScript的執(zhí)行铐伴,預(yù)渲染你的應(yīng)用有助于搜索引擎優(yōu)化。
6调鲸、兼容性好:比如使用RequireJS來加載和打包盛杰,而Browserify和Webpack適用于構(gòu)建大型應(yīng)用。它們使得那些艱難的任務(wù)不再讓人望而生畏藐石。

缺點(diǎn)
1即供、React本身只是一個(gè)V而已,并不是一個(gè)完整的框架于微,所以如果是大型項(xiàng)目想要一套完整的框架的話逗嫡,基本都需要加上ReactRouter和Flux才能寫大型應(yīng)用青自。

六、制作滾動(dòng)條驱证?如果用原生的話如何實(shí)現(xiàn)延窜?

audio的屬性以及百分比實(shí)現(xiàn)

  • currentTime
  • duration 持續(xù)時(shí)間
  • audio.onloadedmetadata加載完元數(shù)據(jù)觸發(fā)事件
拖動(dòng)進(jìn)度條的時(shí)候有哪些實(shí)現(xiàn)方式? 區(qū)別有哪些抹锄?
  • lefttranslateX可以拖動(dòng)
    • 從布局看逆瑞,left屬性基于父元素的大小。transform屬性基于目標(biāo)元素的大小伙单。
    • 從屬范圍看获高,left 常用于position,屬于css2吻育,而translate屬于transformcss3
    • 從實(shí)現(xiàn)動(dòng)畫來看念秧,兩個(gè)都能實(shí)現(xiàn)位移動(dòng)畫,但是對(duì)于位移較為復(fù)雜的情況下布疼,使用transformleft要好點(diǎn)
    • 從渲染方式來看摊趾,position設(shè)置的是DOM的樣式,性能消耗大

七游两、強(qiáng)制類型轉(zhuǎn)換

  • boolean
  • string
  • number
  • parseInt()
  • parseFloat()

八砾层、事件循環(huán)

https://zhuanlan.zhihu.com/p/87684858

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市器罐,隨后出現(xiàn)的幾起案子梢为,更是在濱河造成了極大的恐慌,老刑警劉巖轰坊,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件铸董,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡肴沫,警方通過查閱死者的電腦和手機(jī)粟害,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颤芬,“玉大人悲幅,你說我怎么就攤上這事≌掘穑” “怎么了汰具?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)菱魔。 經(jīng)常有香客問我留荔,道長(zhǎng),這世上最難降的妖魔是什么澜倦? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任聚蝶,我火速辦了婚禮杰妓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘碘勉。我一直安慰自己巷挥,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布验靡。 她就那樣靜靜地躺著倍宾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪胜嗓。 梳的紋絲不亂的頭發(fā)上凿宾,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音兼蕊,去河邊找鬼。 笑死件蚕,一個(gè)胖子當(dāng)著我的面吹牛孙技,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播排作,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼牵啦,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了妄痪?” 一聲冷哼從身側(cè)響起哈雏,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎衫生,沒想到半個(gè)月后裳瘪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡罪针,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年彭羹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片泪酱。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡派殷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出墓阀,到底是詐尸還是另有隱情毡惜,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布斯撮,位于F島的核電站经伙,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏吮成。R本人自食惡果不足惜橱乱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一辜梳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧泳叠,春花似錦作瞄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至种蝶,卻和暖如春契耿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背螃征。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工搪桂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人盯滚。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓踢械,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親魄藕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子内列,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

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

  • $HTML, HTTP背率,web綜合問題 1话瞧、前端需要注意哪些SEO 3、HTTP的幾種請(qǐng)求方法用途 4寝姿、從瀏覽器地...
    peng凱閱讀 768評(píng)論 0 1
  • Web前端面試題總結(jié) HTML+CSS理論知識(shí) 1交排、講講輸入完網(wǎng)址按下回車,到看到網(wǎng)頁(yè)這個(gè)過程中發(fā)生了什么 a.域...
    慕尚花開閱讀 686評(píng)論 0 0
  • 前端開發(fā)面試知識(shí)點(diǎn)大綱: HTML&CSS: 對(duì)Web標(biāo)準(zhǔn)的理解饵筑、瀏覽器內(nèi)核差異个粱、兼容性、hack翻翩、CSS基本功:...
    秀才JaneBook閱讀 2,329評(píng)論 0 25
  • 一.簡(jiǎn)述前端構(gòu)建工具都许。fis3,Gulp嫂冻,Grunt胶征,Webpack www.tuicool.com/articl...
    錢小強(qiáng)_閱讀 1,316評(píng)論 0 5
  • 一、CSS相關(guān)問題 1桨仿、 行內(nèi)元素睛低,塊級(jí)元素,空元素 行內(nèi)元素有:a b span select strong(強(qiáng)...
    余音繞梁_0809閱讀 539評(píng)論 0 0