攜程 地面業(yè)務(wù) 前端面試經(jīng)歷

先說(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è)試

image.png
image.png

面試

一面面了大概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)化的不知道

上兩題補(bǔ)充鏈接

  • 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ǔ)了~!!!!!!!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市锁右,隨后出現(xiàn)的幾起案子失受,更是在濱河造成了極大的恐慌咏瑟,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件码泞,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡余寥,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)宋舷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)绪撵,“玉大人,你說(shuō)我怎么就攤上這事肥缔×ぃ” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵续膳,是天一觀的道長(zhǎng)改艇。 經(jīng)常有香客問(wèn)我,道長(zhǎng)坟岔,這世上最難降的妖魔是什么谒兄? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮社付,結(jié)果婚禮上承疲,老公的妹妹穿的比我還像新娘邻耕。我一直安慰自己,他們只是感情好燕鸽,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布兄世。 她就那樣靜靜地躺著,像睡著了一般啊研。 火紅的嫁衣襯著肌膚如雪御滩。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,457評(píng)論 1 311
  • 那天党远,我揣著相機(jī)與錄音削解,去河邊找鬼。 笑死沟娱,一個(gè)胖子當(dāng)著我的面吹牛氛驮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播济似,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼矫废,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了砰蠢?” 一聲冷哼從身側(cè)響起磷脯,我...
    開(kāi)封第一講書(shū)人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎娩脾,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體打毛,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡柿赊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了幻枉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碰声。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖熬甫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情椿肩,我是刑警寧澤郑象,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布厂榛,位于F島的核電站丽惭,受9級(jí)特大地震影響责掏,放射性物質(zhì)發(fā)生泄漏换衬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一冗疮、第九天 我趴在偏房一處隱蔽的房頂上張望术幔。 院中可真熱鬧湃密,春花似錦、人聲如沸拔妥。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)赃磨。三九已至,卻和暖如春溪王,著一層夾襖步出監(jiān)牢的瞬間值骇,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工芒珠, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留皱卓,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓嫂易,卻偏偏與公主長(zhǎng)得像怜械,于是被迫代替她去往敵國(guó)和親傅事。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蹭越,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

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