先說(shuō)下背景吧鸯檬,本人工作經(jīng)驗(yàn)兩年京闰,在一家攜程注資的OTA公司工作甩苛,所以用的空號(hào)讯蒲,防止被同事認(rèn)出來(lái)墨林。旭等。搔耕∑ィ看了電視上的凌空SOHO大廈,確實(shí)很壯觀娜饵,就萌生了去上合湮瑁看看的想法
所以我就投了簡(jiǎn)歷晴股,很快队魏,中午投遞出去胡桨,下午就接到了HR的電話昧谊,約了今天面試呢诬,上海下著大雨尚镰,真的是大都市哪廓,走在路上涡真,感覺(jué)自己真的很渺小。
到了攜程大樓吗铐,先是HR給了張表唬渗,填了一堆谣妻,畫(huà)了個(gè)樹(shù)蹋半,我無(wú)恥的畫(huà)了一張前端圖譜充坑,不過(guò)后來(lái)發(fā)現(xiàn)也沒(méi)人看這東西减江。
筆試
首先上來(lái),是40分鐘的筆試捻爷。
題目一
<div id="d">
<div id = "a"></div>
<div id = "b"></div>
<div id = "c"></div>
</div>
<script>
var a = [document.getElementById('a'),document.getElementById('b'),document.getElementById('c')];
var b = [document.getElementById('d').getElementsByTagName('div')];
問(wèn)a 和 b 的區(qū)別辈灼。
</script>
說(shuō)真的,是出于緊張呢還是咋地也榄,我真就愣生生沒(méi)看出來(lái)巡莹,我還在想,返回都是數(shù)組降宅, 是不是哪個(gè)打出來(lái)的是個(gè)標(biāo)簽,然后不能繼續(xù)使用它下面的方法了呢囚霸。腰根。。<b>卒</b>拓型。
實(shí)際上真的就是b多加了一個(gè)[]
额嘿,造成了一個(gè)二維數(shù)組,tagName
本來(lái)就返回一個(gè)數(shù)組啊
題目二 - 數(shù)組去重
請(qǐng)手打一個(gè)數(shù)組去重的方法劣挫,題目是[1,2,3,2].distinct() = [1,2,3]册养。
這里我用了hash的方法去的重
Array.prototype.distinct = Array.prototype.distinct || function(){
var len = this.length,
i = 0,
hash = {},
myArr = [];
for(; i < len; i ++){
if(!hash[this[i]]){
hash[this[i]] = true;
myArr.push(this[i])
}
}
return myArr;
}
后來(lái)面試的時(shí)候,面試官說(shuō)我這 方法不好压固,用不著hash捕儒,我不知道他是不是想說(shuō)indexOf
,但是他也沒(méi)告訴我具體的方案- -
題目三,考察閉包
function mo(){
var x = 0;
return function(){
console.log(++x)
}
}
var a = mo();
var b = mo();
a();
a();
b();
答案是1,2刘莹,1。這個(gè)沒(méi)啥a再次執(zhí)行的時(shí)候沒(méi)有走mo()函數(shù)焚刚,直接走的內(nèi)部函數(shù)点弯,保存了外層的x變量給自己用。
題目四
var p = [];
var A = new Function();
A.prototype = p;
var a = new A;
a.push(1);
console.log(a.length);
console.log(p.length);
這題我寫(xiě)的undefined,0矿咕∏栏兀回家輸出發(fā)現(xiàn)是1,0碳柱。不理解的是a在new 完后真的就給了一個(gè)Array 對(duì)象捡絮。具體還要去研究一下
更新此題,當(dāng)我看明白了之后莲镣,我只能佩服出題人啊福稳,先來(lái)逐句解析。
-
本題考查了一個(gè)重要的知識(shí)點(diǎn)瑞侮,那就是new操作符具體干了什么
其實(shí)我是知道的的圆,但是僅僅是知道,真的看到了半火,卻又沒(méi)仔細(xì)去想越妈,一個(gè)簡(jiǎn)單的new的過(guò)程就是var obj = {};obj._proto_ = A.prototype;A.apply(obj);
,明白的瞬間就明白了钮糖,a new 出來(lái)后就不是一個(gè)對(duì)象了梅掠,是數(shù)組對(duì)象了,所以擁有了push方法店归,沒(méi)有報(bào)錯(cuò)阎抒,順便一提的是new 如果在繼承對(duì)象是沒(méi)有參數(shù)的情況下,是可以不加后面的括號(hào)的娱节,編譯器會(huì)自動(dòng)替你加上的
題目五挠蛉,數(shù)組降維
想到這題,我寫(xiě)了一個(gè)自以為不錯(cuò)的解法肄满,結(jié)果基本功不熟練谴古,沒(méi)反應(yīng)過(guò)來(lái)join()會(huì)自動(dòng)添加逗號(hào),其實(shí)不是沒(méi)反應(yīng)過(guò)來(lái)稠歉,還是平時(shí)依賴控制臺(tái)次數(shù)多了掰担。。怒炸〈ィ控制臺(tái)看到了問(wèn)題會(huì)立馬改,紙上就不是這樣了。
```
function fn(arr){
return Array.from(arr.join());
}
```
23333333,一堆逗號(hào)啊掉數(shù)組里了勺疼。
function fn(arr){ var tempArr = Array.from(arr.join('-')); for(var i = 0;i<tempArr.length;i++){ if(isNaN(tempArr[i])){ tempArr.splice(i,1) } } return tempArr; }
這樣就可以了教寂,真是后悔莫及,不過(guò)我又寫(xiě)了第二種方法,再一次暴露了依賴控制臺(tái)的毛病执庐,不是不會(huì)酪耕,不是沒(méi)思路,就是寫(xiě)錯(cuò)轨淌。迂烁。。
function fn(arr){
var myArr = [];
var fn2 = function(arr2){
for(var i = 0;i<arr2.length;i++){
//說(shuō)真的递鹉,這個(gè)我真是懵逼了當(dāng)時(shí)
//我就在想盟步,什么是數(shù)組具備的而數(shù)字不具備的。
//所以思維在緊張的情況下真的會(huì)被鎖死
//于是我神奇的用了'sort' in arr2[i] 來(lái)替代下面的條件.
//雖然控制臺(tái)直接敲xx in 啥的可以躏结,但是會(huì)報(bào)錯(cuò)却盘,我也不明白是咋回事。這個(gè)下面說(shuō)
if(Array.isArray(arr2[i])){
// fn2.apply(null,arr2[i])窜觉;
//我開(kāi)始寫(xiě)的apply谷炸,因?yàn)閍rr2[i]是一個(gè)數(shù)組,但是沒(méi)反應(yīng)過(guò)來(lái)的是
//arr2[i]對(duì)于函數(shù)來(lái)說(shuō)禀挫,就是一個(gè)單獨(dú)的參數(shù)[]旬陡,所以應(yīng)該用call
fn2.call(null,arr2[i])
}
else{
myArr.push(arr2[i]);
}
}
}
fn2(arr);
return myArr;
}
fn([1,2,3,[4,5,[6,7]]]);
上面的'sort' in xx我在瀏覽器上測(cè)試
面試
一面面了大概1個(gè)小時(shí)40分鐘的樣子,后來(lái)有別人預(yù)定了會(huì)議室语婴,要開(kāi)會(huì)描孟,不然可能還要再面下去。砰左。匿醒。
終于有時(shí)間更新了,這幾天還要駕校重車(chē)缠导,還要加班廉羔,好累。
沒(méi)有順序
函數(shù)聲明和函數(shù)表達(dá)式有什么區(qū)別
答:如果是使用的函數(shù)表達(dá)式僻造,那么函數(shù)調(diào)用就不能在表達(dá)式之前憋他,如果是函數(shù)聲明,由于在全局執(zhí)行上下文的執(zhí)行創(chuàng)建階段時(shí)髓削,函數(shù)聲明會(huì)提升到上面竹挡,所以是可以在函數(shù)聲明之前調(diào)用函數(shù)的。函數(shù)聲明既然會(huì)提升立膛,優(yōu)先級(jí)是什么揪罕,和var比呢
答:函數(shù)聲明比var高梯码,如果這個(gè)時(shí)候console.log(a);function a(){};var a=1;
,不管var a = 1
寫(xiě)在函數(shù)前面還是后面好啰,都只會(huì)輸出函數(shù)轩娶。因?yàn)関ar a初始化為undefined,遇到同名的會(huì)被忽略坎怪。函數(shù)聲明的提升為什么會(huì)比var高罢坝,編譯器干了什么事情
答:不知道,猜測(cè)編譯器里定義的時(shí)候就是這么定義的吧搅窿。 - -es6 裝飾器用過(guò)沒(méi),是干什么用的(應(yīng)該是es7的隙券,反正我也沒(méi)答出來(lái)男应,答出來(lái)肯定還繼續(xù)深的問(wèn))
答:沒(méi)用過(guò),不會(huì)es6中的擴(kuò)展運(yùn)算符...的實(shí)現(xiàn)原理
答:我不會(huì)娱仔,但是我知道擴(kuò)展運(yùn)算符的用法沐飘,反正都講出來(lái)了。es6中的解構(gòu)中的...和上面的區(qū)別
答:說(shuō)真的牲迫,我也不知道啥區(qū)別耐朴,不是一樣用嗎?[...org,name] = [1,2,3,4] 這樣的話盹憎,org里是個(gè)啥
答:開(kāi)始問(wèn)的放后面是啥筛峭,我想了半天,沒(méi)敢說(shuō)陪每,我說(shuō)難道后面的就沒(méi)抓到影晓,全被org抓走了?其實(shí)不是檩禾,直接報(bào)錯(cuò)了挂签,...是rest的意思,既然是rest盼产,那就只能放在最后啊
更新說(shuō)明我還不會(huì)用饵婆,區(qū)別應(yīng)該是問(wèn)的es7中的解構(gòu)。原理就是es6直接采用for of戏售,也就是說(shuō)侨核,所有總有迭代器的對(duì)象都能使用擴(kuò)展運(yùn)算符,在es6里說(shuō)不能放前面的蜈项,但是在es7里如果用于對(duì)象是可以放前面的芹关。懂了這個(gè),上面幾題就都該會(huì)了
-
for of 和for in區(qū)別
答:for in 是鍵值對(duì)形式紧卒,for of 是輸出value形式侥衬,然后for of只要是配置了迭代器,都能遍歷。 -
this的指向問(wèn)題
答:這個(gè)正常的都說(shuō)了 -
箭頭函數(shù)中的this
答:這里說(shuō)的不好轴总,我只說(shuō)了用了箭頭函數(shù)的話直颅,this就被傳進(jìn)來(lái)了。就不需要綁定進(jìn)來(lái)了怀樟。
箭頭函數(shù)中的this默認(rèn)指向在定義它時(shí),它所處的對(duì)象,而不是執(zhí)行時(shí)的對(duì)象, 定義它的時(shí)候,可能環(huán)境是window
- 什么是閉包(這里答的不太好功偿,雖然都會(huì)用啊處理的,我用類似如下代碼舉例,貌似面試官并不滿意...)
function aa(){
var a = 1;
return function bb(){
console.log(a);
}
}
aa()()
-
什么是作用域
答:在進(jìn)入腳本標(biāo)簽編譯階段的時(shí)候就定義了各類作用域往堡,外面的變量就在全局作用域械荷,函數(shù)內(nèi)部的就在函數(shù)的作用域里,作用域外的函數(shù)不能訪問(wèn)某個(gè)作用域里面的東西 -
什么是作用域鏈
答:在各級(jí)執(zhí)行上下文創(chuàng)建階段的時(shí)候,就確定了各級(jí)作用域虑灰,串起來(lái)就是作用域鏈了吨瞎。比如閉包的時(shí)候外部函數(shù)出棧之后,內(nèi)部函數(shù)還保留了對(duì)外部函數(shù)某個(gè)變量的引用穆咐,就是通過(guò)作用域鏈找過(guò)去的 -
什么是原型
答:prototype颤诀,好像我也說(shuō)不出啥,就舉個(gè)函數(shù)的寫(xiě)原型的例子对湃。 - js有哪些設(shè)計(jì)模式(我說(shuō)有工廠模式崖叫,構(gòu)造函數(shù)模式,原型模式拍柒,面試官說(shuō)這是面向?qū)ο笮目贿^(guò)我覺(jué)得有啥區(qū)別,面向?qū)ο缶幊滩痪檬且眠@些設(shè)計(jì)模式嗎)
- 這些模式都是咋寫(xiě)的斤儿,我手寫(xiě)給他看
-
為什么要用原型
答:共享原型里的東西給下屬繼承的對(duì)象剧包,這樣在new的時(shí)候不用重新創(chuàng)建,節(jié)省內(nèi)存空間 -
eval的缺點(diǎn)
答:我說(shuō)了用法往果,就是可執(zhí)行string疆液,然后缺點(diǎn)沒(méi)說(shuō),沒(méi)怎么研究陕贮,只是看了一眼用法類型的 -
with的缺點(diǎn)
答:沒(méi)用過(guò)堕油,在網(wǎng)上看到過(guò),說(shuō)不要用肮之,然后我就不用掉缺,應(yīng)該會(huì)導(dǎo)致性能問(wèn)題吧 -
在嚴(yán)格模式下能不能用eval
答:不能 -
es5和es6嚴(yán)格模式的區(qū)別
答:不知道 -
什么是柯里化,舉React和Redux的例子
答:解釋了柯里化是啥戈擒,舉不出來(lái)例子眶明,沒(méi)看過(guò)源碼啊或者是對(duì)react了解的不夠多 -
什么是純函數(shù)
答:不產(chǎn)生任何交互的函數(shù)?答的不好筐高,我說(shuō)reducer應(yīng)該就是個(gè)純函數(shù)搜囱,猜對(duì)了而已丑瞧。
純函數(shù)是指 不依賴于且不改變它作用域之外的變量狀態(tài) 的函數(shù)純函數(shù)的概念鏈接
- 頁(yè)面和服務(wù)器之間的交互有哪幾種(ajax,websocket,不滿意)
-
ajax的Type有幾種(我只知道post和get)
這題我可能沒(méi)有理解... - get和post的區(qū)別(我說(shuō)的表象區(qū)別蜀肘,url參數(shù)绊汹,安全性,大小限制扮宠,面試官不是很滿意)
與 POST 相比西乖,GET 更簡(jiǎn)單也更快,并且在大部分情況下都能用坛增。
然而获雕,在以下情況中,請(qǐng)使用 POST 請(qǐng)求:
無(wú)法使用緩存文件(更新服務(wù)器上的文件或數(shù)據(jù)庫(kù))
向服務(wù)器發(fā)送大量數(shù)據(jù)(POST 沒(méi)有數(shù)據(jù)量限制)
發(fā)送包含未知字符的用戶輸入時(shí)收捣,POST 比 GET 更穩(wěn)定也更可靠
-
HTTP請(qǐng)求頭上都有什么信息
答:UA,HOST,其他的我也沒(méi)說(shuō)典鸡,就說(shuō)還有幾個(gè)沒(méi)注意.. -
如何統(tǒng)計(jì)頁(yè)面上的按鈕被點(diǎn)擊了多少次
答:和服務(wù)器交互?反正也只能存服務(wù)器啊... -
單頁(yè)面應(yīng)用和多頁(yè)面應(yīng)用的區(qū)別
答:一個(gè)跳頁(yè)面是內(nèi)部的坏晦,一個(gè)跳頁(yè)面是href整頁(yè)刷新的。 -
哪種更容易被SEO到嫁乘,優(yōu)化SEO
答:猜測(cè)是多頁(yè)面昆婿,頁(yè)面多唄...優(yōu)化的不知道
- cookie和localstorage區(qū)別(我說(shuō)大小,安全蜓斧,有效期仓蛆,貌似又不是很滿意)
-
JSON.stringify(大OBJ)的時(shí)候會(huì)有什么問(wèn)題
答:性能損失。 -
script標(biāo)簽順序怎么控制挎春,涉及到依賴必須要有先后
答:在HTML層就控制順序唄看疙,顯然不是他要的答案 -
除了直接引用script標(biāo)簽,如果不用import require這樣的東西直奋,怎么調(diào)用其它頁(yè)面的js
答:真不知道能庆,a.js里除了用script標(biāo)簽引用b.js -
import和require的區(qū)別
答:import是靜態(tài)加載,一旦你import脚线,內(nèi)容就進(jìn)來(lái)了搁胆,require是動(dòng)態(tài)加載,用的時(shí)候才加載邮绿,后面又問(wèn)了一些渠旁,后面就不會(huì)了 -
函數(shù)節(jié)流怎么實(shí)現(xiàn)
答:簡(jiǎn)單是settimeout,時(shí)間超出就執(zhí)行,沒(méi)超出再進(jìn)來(lái)的話就直接clear掉船逮。面試官覺(jué)得太簡(jiǎn)單了顾腊。 -
canvas 繪制原理
答:不知道 -
如何使用canvas拖動(dòng)一個(gè)小球撞擊另外一個(gè)小球,然后另外一個(gè)小球被撞擊出去
答:canvas一年半沒(méi)用鐵定不記得了(總共也就2年經(jīng)驗(yàn))挖胃,但是說(shuō)了一下實(shí)現(xiàn)思路 -
canvas 里有很多小球時(shí)如何優(yōu)化性能
答:不知道 - 微信小程序跳轉(zhuǎn)頁(yè)面最多能跳轉(zhuǎn)多少層 不會(huì)
- RN中l(wèi)istview 的key值的實(shí)現(xiàn)原理 不會(huì)
然后還問(wèn)了一些關(guān)于項(xiàng)目上的問(wèn)題杂靶,以及如何設(shè)計(jì)一個(gè)搜索組件梆惯,需要考慮到哪些問(wèn)題。
應(yīng)該就這些伪煤,沒(méi)想起來(lái)的想起來(lái)再補(bǔ)充加袋,感覺(jué)答的不好,很多都不記得了抱既。
三分之一的題目 比如實(shí)現(xiàn)原理啊职烧,缺點(diǎn)啊妻味,為什么啊捕捂,會(huì)有什么問(wèn)題啊,此類問(wèn)題要么不會(huì)翅睛,要么答的不好
總共就這么多捷泞,我要繼續(xù)鞏固基礎(chǔ)了~!!!!!!!