摘要:兩日前,發(fā)了一篇吐槽,莫名的火了一把。關(guān)于的第一個(gè),其實(shí)就是聲明一個(gè)常量,不允許變更。另外對(duì)象迭代這里出自,阮一峰大神寫的入門指南,對(duì)象篇。
此文為個(gè)人面試經(jīng)歷,QA問答過程與總結(jié),不透露面試公司及面試人員,內(nèi)容真實(shí),如果有面試過我的大佬看到博客,歡迎指出問題。兩日前,發(fā)了一篇吐槽,莫名的火了一把。經(jīng)過大家的建議與鼓勵(lì),于是修改了簡(jiǎn)歷,開始了重新投遞,2天后接到第一份面試邀請(qǐng)。
1.面試時(shí)間 2017.2.30下午兩點(diǎn)——公司薪資6K循序可能有點(diǎn)亂,沒記太清。
Q:請(qǐng)先做一下自我介紹
A:barbarbar,然而順便談了下自己的學(xué)習(xí)經(jīng)歷,講了下自己在寫的項(xiàng)目啥的。
Q:談?wù)勀銓?duì)閉包的理解。
A:關(guān)于閉包,我個(gè)人的理解用一句話概括就是:一個(gè)函數(shù)在父級(jí)函數(shù)執(zhí)行完畢后,如果任然留有對(duì)父級(jí)函數(shù)內(nèi)部變量(作用域)的引用,那么就會(huì)建立閉包,我個(gè)人對(duì)閉包就是這樣的看法,如果有什么錯(cuò)誤,請(qǐng)務(wù)必幫我訂正....
原文出自js面對(duì)對(duì)象編程指南P88:如果一個(gè)函數(shù)會(huì)在其父級(jí)函數(shù)返回之后,留住對(duì)父級(jí)作用域的連接的話,相關(guān)閉包就會(huì)被創(chuàng)立起來
Q:談?wù)勀銓?duì)ES6新的聲明變量的方式的一些看法
A:關(guān)于這個(gè)問題,新的方式,比較有趣的就是所謂的暫時(shí)性死區(qū)什么的,簡(jiǎn)單的來講吧。關(guān)于的第一個(gè)const,其實(shí)就是聲明一個(gè)常量,不允許變更。另一個(gè)let,就是零時(shí)變量,或者說是局部變量(這兩個(gè)都屬于局部變量),能夠由中括號(hào)直接產(chǎn)生一個(gè)零時(shí)的局部作用域了,而不必使用以前的立即執(zhí)行匿名函數(shù)了,let非常適合在for循環(huán)之類的場(chǎng)景中使用,不再需要使用迭代函數(shù)就能獲得當(dāng)前的變量了,對(duì)比var來看,新的這兩個(gè)變量聲明都不會(huì)在執(zhí)行時(shí)被提升,并且編譯速度比var更快。
Q:你說const聲明的是常量,不能被改變嘍?
A:const聲明的的確是常量,只不過是字面量常量不能被改變,如果是對(duì)象類型的話,是引用,對(duì)象的屬性被改變是無法被檢測(cè)到的,就像vue中,父子組件中通信,以及數(shù)據(jù),如果是對(duì)象屬性被改變,是無法被檢測(cè)到的。
Q:你說Vue中如果對(duì)象屬性被修改無法被檢測(cè)到,那么你有什么解決方案?
A:這個(gè),其實(shí)我覺得最好的解決方案就是嚴(yán)格遵守vue的理念,父子組件通信時(shí)不去修改什么對(duì)象屬性,對(duì)象數(shù)據(jù)的屬性,非要改動(dòng)添加的話:使用(Object.assign() 或 _.extend())面試時(shí),沒想起來單詞怎么拼.....
關(guān)于對(duì)象屬性的的修改的方法,有興趣的可以了解下,Object.defineProperty(vue好像就是基于它實(shí)現(xiàn)的雙向數(shù)據(jù)綁定,還沒讀源碼,不清楚楚),Object.assign是把屬性添加到對(duì)象的方法。
Q:關(guān)于數(shù)組去重復(fù)你用什么方法?
A:因?yàn)槟壳拔易约憾际鞘褂?b>ES6 + Webapck2的方式寫的代碼,所以用的是Array.from(new Set(arr)或者[...new Set(arr)]的方式去重,原理是,用了set類型,允許重復(fù)的值得特性,然后使用from方法或者解構(gòu)的方法來得到數(shù)組,關(guān)于其他的方法的話,有太多了,比如什么循環(huán)去重,什么迭代(reduce)啥的,我就懶得講了,因?yàn)檎娴奶嗔恕?/p>
Q:你提到了Set類型,那你講下對(duì)Es6里 Map 類型的看法。
A:關(guān)于這個(gè)Map啊...(猶豫了一下)說實(shí)話,我沒怎么去使用這個(gè)新的類型,畢竟怎么說好呢,目前我是將Map當(dāng)成一個(gè)嵌套數(shù)組看待,畢竟Map和對(duì)象相比,只是比對(duì)象多提供了一個(gè)迭代用的接口,并且據(jù)說速度會(huì)比對(duì)象訪問屬性更快一點(diǎn),現(xiàn)在來說,實(shí)在是沒有什么使用場(chǎng)景,常用的一些工具函數(shù),比如下劃線.js和lodash.js(不知道單詞是否拼錯(cuò)),暫時(shí)都還沒有提供對(duì)map的方法,但對(duì)象卻有千千萬(wàn)的各類方法,并且,map能夠?qū)崿F(xiàn)的對(duì)象類型也能夠?qū)崿F(xiàn),比如迭代對(duì)象可以用for (let [k, v] of Object.entries(obj)) ,哦,最后一點(diǎn)差異就是允許key使用數(shù)字。不知道你有啥其他的看法嘛,或者知道m(xù)ap的一些使用場(chǎng)景,可以和我分享一下。
樓主只用過下劃線.js...對(duì)于loadsh.js沒提供是猜測(cè)的。另外對(duì)象迭代這里出自,阮一峰大神寫的ES6入門指南,對(duì)象篇。完整的是:
let obj = { one: 1, two: 2 }; for (let [k, v] of Object.entries(obj)) { console.log( `${JSON.stringify(k)}: ${JSON.stringify(v)}` ); } // "one": 1 // "two": 2
Q:關(guān)于new一個(gè)對(duì)象,你講一下,具體是怎么實(shí)現(xiàn)的?
A: 什么?new一個(gè)對(duì)象,額,這個(gè)不就是一個(gè)構(gòu)造函數(shù),然后new一個(gè)新的對(duì)象嘛,還能有什么流程嘛。不太清楚,你具體問的內(nèi)容哈,你是問,構(gòu)造函數(shù)內(nèi)容的執(zhí)行邏輯原理還是啥?
Q:那你談一下對(duì)于原型的理解
A:原型啊,從哪里開始講呢,我之前好像寫過篇關(guān)于原型的博文,要不看看博文?畢竟在我看來,這方面內(nèi)容太廣了,一定要講的話,可以說,(比面試時(shí)稍微把邏輯更通一點(diǎn),面試時(shí)太緊張邏輯有點(diǎn)亂)原型自身就是一個(gè)對(duì)象,有自己的屬性與方法,默認(rèn)情況下是有一個(gè)指針指向原型的構(gòu)造函數(shù),構(gòu)造函數(shù)也有個(gè)指針指向自己的prototype...然后由構(gòu)造函數(shù)new出來的對(duì)象,在原型鏈上默認(rèn)指向構(gòu)造函數(shù)指著的原型。。。好吧,我編不下去了,說真的,這玩意我得有個(gè)圖或者紙才好演示啊。。要不你給我張紙,我畫個(gè)圖?
廖雪峰大神寫的教程非常棒,推介一下:http://www.liaoxuefeng.com/wi...
Q:既然你原型不懂,那就談?wù)勗玩湴桑?/strong>
A: (心里活動(dòng):原型我得有紙才能演示,原型鏈,不得更需要紙嗎),啊,原型鏈啊,我之前真的自己寫過篇關(guān)于原型鏈的整理,能給你看下博客嗎?...你讓我憑空講...好吧,大概原型鏈就是...說實(shí)話,我現(xiàn)在用的都是Es6的class方法,雖然class也是基于原型鏈的語(yǔ)法糖,但是簡(jiǎn)單方便啊,所以我這段時(shí)間都都沒怎么關(guān)心原型鏈的,畢竟原型鏈繼承在js面對(duì)對(duì)象編程指南里寫了十幾種方法啊...我這人,有時(shí)候喜歡簡(jiǎn)單高效的東西,就像數(shù)組去重,我都用set,只有遇到一些相關(guān)問題,我才回去找新的解決方案。(后面把十幾種方法拍張照給大家觀摩觀摩,雖然有些不是基于原型的)
Q:你說你都是遇到問題再去解決,那你談?wù)勔苿?dòng)端一像素問題你是怎么解決的?
A:移動(dòng)端一像素啊,簡(jiǎn)單來講,就是設(shè)置個(gè)偽類,然后響應(yīng)下屏幕的dpr,用css3的縮放進(jìn)行解決。用一些預(yù)處理器寫個(gè)mixin函數(shù)就能解決。
Q:有其他的解決方案嗎?
A:這個(gè)老實(shí)說,還真沒研究過,在前面我提過,很多東西我都是遇到問題然后去解決的,如果目前有最優(yōu)解決方案,我為啥要去用其他的,比如目前移動(dòng)布局我用的就是flex布局,我感覺兼容性也不差。。。當(dāng)然,主要原因也在于我沒啥工作經(jīng)驗(yàn)。
順手再推一波阮一峰大神的flex教程:http://www.ruanyifeng.com/blo...
Q:你有使用過css預(yù)處理器嗎?
A:目前在使用stylus,less也有接觸過,stylus我主要喜歡無需括號(hào),以及變量或者函數(shù)不用加什么奇怪的前綴
Q:對(duì)于手機(jī)應(yīng)用你有過了解嗎?
A:如果指的是混合開發(fā)的webapp手機(jī)應(yīng)用,我最近研究過weex,就是阿里去年開源的那個(gè)類似react native的,目前正準(zhǔn)備寫點(diǎn)什么個(gè)人項(xiàng)目,但是因?yàn)闀r(shí)間緣故所以暫時(shí)還是只計(jì)劃。
Q:對(duì)于性能優(yōu)化,你有什么方案?
A:性能優(yōu)化啊,說實(shí)話,我目前因?yàn)橹饕际亲约旱淖髌罚瑳]遇到過什么特別徐亞喲優(yōu)化的地方,如果一定要講的話。。。好吧,我簡(jiǎn)單講一下吧,比如不要使用全局變量,因?yàn)橄啾染植孔兞浚肿兞勘凰饕龝r(shí)的速度最慢;不要過多使用閉包,閉包會(huì)占用內(nèi)存;要對(duì)閉包中需要遞歸的地方進(jìn)行尾遞歸優(yōu)化不然容易導(dǎo)致內(nèi)存泄漏(主要好像是ie下,沒有實(shí)際測(cè)試過),對(duì)script標(biāo)簽進(jìn)行合并,畢竟頁(yè)面遇到script標(biāo)簽就會(huì)停止渲染(主要是因?yàn)闉g覽器不能確定script標(biāo)簽會(huì)不會(huì)改動(dòng)dom),在使用ajax時(shí),對(duì)一些內(nèi)容盡量使用get(get默認(rèn)會(huì)保留緩存),額...還有的話,說實(shí)話,我來面試前忘了去找份面試指南背,很多東西由于我沒有實(shí)際的遇到過我并沒有太過深入。如果是我遇到過得問題,我詳細(xì)我應(yīng)該能夠了解。說起來之前拜讀過一本叫做js函數(shù)式編程指南的..因?yàn)閮?nèi)容有點(diǎn)深,就只看了部分。
關(guān)于全局變量被索引的速度最慢,出自高性能js...沒有實(shí)際測(cè)試過,閉包內(nèi)遞歸要使用尾遞歸優(yōu)化,附送上連接,同樣是阮一峰大神的:http://www.ruanyifeng.com/blo... ,關(guān)于 js函數(shù)式編程指南連接:https://llh911001.gitbooks.io... (非常贊的一本免費(fèi)電子書,不知為何,關(guān)注的人很少)
Q:你提到了ajax,那就談下ajax吧。
A:ajax啊,這玩意其實(shí)很簡(jiǎn)單,主要就是異步的從后端獲取數(shù)據(jù)嘛,搞來搞去也就那么些接口啥的,在初學(xué)js時(shí),我為了能響應(yīng)ajax還簡(jiǎn)單的學(xué)了php,就是后端提供接口,前端用get或者post或者其他方式去請(qǐng)求數(shù)據(jù),不會(huì)讓頁(yè)面停止運(yùn)行啥的,目前我在寫的項(xiàng)目中接入了聊天機(jī)器人,由于跨域問題,就用node做了個(gè)中轉(zhuǎn)層,用來轉(zhuǎn)發(fā)對(duì)機(jī)器人api的請(qǐng)求,流程就是前端請(qǐng)求本地的服務(wù)器,服務(wù)器請(qǐng)求機(jī)器api...
Q:你對(duì)于跨域的解決方法了解多少?
A:前端跨域嗎,最常用的應(yīng)該是jsonp吧,后端動(dòng)態(tài)生成script(能夠執(zhí)行的js函數(shù)),然后把數(shù)據(jù)發(fā)送過來。或者是用node做個(gè)中轉(zhuǎn)層啥的,方法好像挺多,H5也有種新的方案,不過沒深入研究。
Q:我們這邊后端用的不是node,是java,你怎么使用jsonp。
A: 啊,java不能返回動(dòng)態(tài)的script嗎?我之前學(xué)過的php好像行,現(xiàn)在在學(xué)的python也行啊。
Q:python是什么?
A:python就是...它是一門編程語(yǔ)言,當(dāng)初學(xué)node寫爬蟲時(shí),發(fā)現(xiàn)node用模塊模擬的多線程本質(zhì)還是單線程,并且錯(cuò)誤處理還麻煩,我還得用進(jìn)程維護(hù)模塊去啟動(dòng)...然后上網(wǎng)查,發(fā)現(xiàn)都說python好,于是就開始學(xué)了些python,把教程簡(jiǎn)單過了遍,后來因?yàn)樾┦虑樗跃蜎]怎么碰了。。。。
安利下廖雪峰大神的python教程:http://www.liaoxuefeng.com/wi...
Q:那你現(xiàn)在目前在做什么
A:目前,有個(gè)個(gè)人博客在寫完成度太低,所以沒有開源,后端使用koa2(優(yōu)雅的async函數(shù)才是我的追求,express的嵌套,見鬼去)正考慮前端要不要上個(gè)react,畢竟我目前一直在深入Vue2,對(duì)同樣是Mvvm的react好像沒做過啥具體項(xiàng)目。
Q:其他對(duì)公司有什么想問的嘛?
A:barbarbarabr(問了些關(guān)于公司結(jié)構(gòu)的問題),說起來,我對(duì)于自己知識(shí)面的廣度自信的,但是對(duì)于深入有所欠缺。
不知道為何,面試當(dāng)天就被告知未通過,我在想,果然是因?yàn)闆]有背過前端面試題嘛。。。還是原型那里沒回答出了問題,對(duì)于面試官,一直帶著笑容,然而,一些反問的內(nèi)容均未給出回復(fù)。。。全程笑瞇瞇。。年齡目測(cè)比我年長(zhǎng)幾歲的樣子。。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/82284.html
摘要:昨天在我在國(guó)外網(wǎng)站上看到一篇文章,作者分享了他自學(xué)編程個(gè)月后找到工作的經(jīng)歷。而本文中,我主要針對(duì)想要通過學(xué)習(xí)編程找工作的角度來談。我在年月犯了一個(gè)錯(cuò)誤我認(rèn)為首要任務(wù)是找到一份前端開發(fā)的工作。 昨天在我在國(guó)外網(wǎng)站 reddit 上看到一篇文章,作者分享了他 自學(xué)編程 9 個(gè)月后找到工作 的經(jīng)歷。文章不到一天就得到3千多贊,2百條回復(fù)。我看了下內(nèi)容,非常中肯,其中有不少建議也是我在編程教室...
摘要:如果你問一個(gè)年輕的前端開發(fā)人員,你在今后的年內(nèi)如何提升自己的能力他可能會(huì)說我現(xiàn)在對(duì)前端比較熟悉,但我想深入了解,另外現(xiàn)在發(fā)展的很快我也想看一下。再舉一個(gè)例子,我會(huì)留意身邊的程序員所用的鍵盤。只有少部分的程序員會(huì)買高端的靜電容鍵盤,比如。 如果你問一個(gè)年輕的前端開發(fā)人員,你在今后的 3 年內(nèi)如何提升自己的能力?他可能會(huì)說我現(xiàn)在對(duì) Web 前端比較熟悉,但我想深入了解 AngularJS,...
摘要:而且大專學(xué)歷也徒增額外的打擊,本科學(xué)歷的硬性招聘要求一下子篩掉了很多工作機(jī)會(huì)。突破學(xué)歷限制,內(nèi)推被技術(shù)總監(jiān)破格聘用我抱著試試看的態(tài)度,把簡(jiǎn)歷發(fā)了過去。面試官看起來也很滿意,也當(dāng)場(chǎng)告訴我面試通過了。 ...
摘要:然而這次的文章,就像賀師俊所說的這篇文章是從程序員這個(gè)老年度總結(jié)前端掘金年對(duì)我來說,是重要的一年。博客導(dǎo)讀總結(jié)個(gè)人感悟掘金此文著筆之時(shí),已經(jīng)在眼前了。今天,我就來整理一篇,我個(gè)人認(rèn)為的年對(duì)開發(fā)有年終總結(jié)掘金又到 2016 Top 10 Android Library - 掘金 過去的 2016 年,開源社區(qū)異常活躍,很多個(gè)人與公司爭(zhēng)相開源自己的項(xiàng)目,讓人眼花繚亂,然而有些項(xiàng)目只是曇花一...
閱讀 1745·2021-11-24 10:18
閱讀 2255·2021-11-18 13:20
閱讀 2347·2021-08-23 09:46
閱讀 1007·2019-08-30 15:56
閱讀 2852·2019-08-30 15:53
閱讀 750·2019-08-30 14:22
閱讀 479·2019-08-29 15:34
閱讀 2549·2019-08-29 12:14