成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

自己寫的面試題,自己想的答案

CatalpaFlat / 3469人閱讀

摘要:因?yàn)轭}目是我自己寫的,并不是網(wǎng)上摘的,所以知識(shí)點(diǎn)比較基礎(chǔ),也不全面。即使是面試題,也有人掉坑。小結(jié)面試題就是這道,我自己的解決方案也說完了。

大家都知道‘不忘初心,方得始終’,但多少人知道‘初心易得,始終難守’。時(shí)代在變化,技術(shù)在發(fā)展,基礎(chǔ)沒變。學(xué)習(xí)新技術(shù)的時(shí)候,不應(yīng)把基礎(chǔ)落下。
1.前言

因?yàn)闄C(jī)緣巧合,讓當(dāng)了無數(shù)次面試者的我,當(dāng)上了面試官,也和幾個(gè)面試者交流過。既然要應(yīng)對(duì)面試者,我就當(dāng)然要準(zhǔn)備面試題了,好讓我大概知道面試者是什么水平。這個(gè)時(shí)候,也該詳解下,自己的寫的那些題目。因?yàn)轭}目是我自己寫的,并不是網(wǎng)上摘的,所以知識(shí)點(diǎn)比較基礎(chǔ),也不全面。如果大家對(duì)面試題有什么建議,歡迎指點(diǎn)。

2.考點(diǎn)-面向?qū)ο?/b>

需求:定義‘我吃火鍋

面向過程的思想是:動(dòng)作(我,吃火鍋)

代碼實(shí)現(xiàn)方面:

//面向過程
let eat=function(who,someThing){
    console.log(`${who}吃${someThing}`);
}
eat("我","火鍋");//我吃火鍋

使用面向?qū)ο蟮姆绞礁膶懸幌逻@個(gè)實(shí)例。

這道題,只希望有一個(gè)面向?qū)ο蟮囊馑荚谶@里就行了,我期待的答案是這樣的。

let person={
    name:"守候",
    eat:function(someThing){
        console.log(`${this.name}吃${someThing}`);
    }
}
person.eat("火鍋");

更好的方式看下面這篇文章:JavaScript:面試頻繁出現(xiàn)的幾個(gè)易錯(cuò)點(diǎn)。這里不展開講。

3.考點(diǎn)-預(yù)解析

根據(jù)以下代碼,寫出結(jié)果

這道題我印象很深刻,因?yàn)槭俏以谝荒甓嘁郧埃赒群看到有人說直自己各種精通的時(shí)候,我就出這道題來提問,一抓一個(gè)準(zhǔn),至今那些各種精通的人,沒一個(gè)回答出來的。即使是面試題,也有人掉坑。
之前發(fā)布一篇文章的時(shí)候,有提及過這個(gè)面試題,也被人罵過,大概的意思是:現(xiàn)在都什么年代了,ES都不知道更新多少版本了,誰還這么寫代碼?看到這個(gè)我并沒有回應(yīng),也沒打算和誰對(duì)撕。但是我腦子里想到的第一件事就是:以前,新聞?dòng)袟l微博說70%網(wǎng)友贊成數(shù)學(xué)退出高考,有人談定回答:數(shù)學(xué)就是用來淘汰這70%人的。在這里我想說,雖然開發(fā)上這樣寫代碼肯定會(huì)被批斗,但是面試題,考的不只是開發(fā)上遇到的問題,也有考一些基礎(chǔ)知識(shí)。這道題就是其中之一。而且,現(xiàn)在我也覺得還有必要知道這個(gè)知識(shí),還沒到全民寫 ES6 的時(shí)代,拋棄 ES5 的時(shí)代。
alert(a)
a();
var a=3;
function a(){
    alert(10)
}   
alert(a)
a=6;
a();  

//------------分割線------------------

alert(a)
a();
var a=3;
var a=function(){
    alert(10)
}   
alert(a)
a=6;
a(); 

這個(gè)之前寫文章有寫過,現(xiàn)在賦值粘貼下。
考點(diǎn)其實(shí)就兩個(gè),第一變量聲明提前,第二函數(shù)聲明優(yōu)先于變量聲明!
下面我簡(jiǎn)單分析一下,
第一部分運(yùn)行結(jié)果:
1.函數(shù)聲明優(yōu)先于變量聲明,所以,剛開始,a就是function a(){alert(10)} ,就會(huì)看到這個(gè)函數(shù)。
2.a(),執(zhí)行函數(shù),就是出現(xiàn)alert(10)
3.執(zhí)行了var a=3; 所以alert(a)就是顯示3
4.由于a不是一個(gè)函數(shù)了,所以往下在執(zhí)行到a()的時(shí)候, 報(bào)錯(cuò)。
第二部分運(yùn)行結(jié)果:
1.underfind
2.報(bào)錯(cuò)
在之前說過,預(yù)解析是把帶有varfunction關(guān)鍵字的事先聲明,但不會(huì)賦值。所以一開始是underfind,然后報(bào)錯(cuò)是因?yàn)閳?zhí)行到a()的時(shí)候,a并不是一個(gè)函數(shù)。

//函數(shù)表達(dá)式,和變量聲明同等
var a=function(){
    alert(10)
} 
//函數(shù)聲明,優(yōu)于變量聲明    
function a(){
    alert(10)
} 
4.考點(diǎn)-事件委托

一個(gè)簡(jiǎn)單的需求,比如想給ul下面的li加上點(diǎn)擊事件,點(diǎn)擊哪個(gè)li,就顯示那個(gè)li的innerHTML。這個(gè)貌似很簡(jiǎn)單!代碼如下!



    
        
        
    
    
        
  • 0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

問題在于:
1.for循環(huán),循環(huán)的是li,10個(gè)li就循環(huán)10次,綁定10次事件,100個(gè)就循環(huán)了100次,綁定100次事件!
2.如果li不是本來就在頁面上的,是未來元素,是頁面加載了,再通過js動(dòng)態(tài)加載進(jìn)來了,上面的寫法是無效的,點(diǎn)擊li是沒有反應(yīng)的!

應(yīng)該怎么解決以上問題?

在道題的考點(diǎn)就是事件委托,就是把事件綁在ul上面,之后的li就可以隨便添加。代碼如下

var oUl=document.getElementById("ul-test");
oUl.addEventListener("click",function(ev){
    var ev=ev||window.event;
    var target=ev.target||ev.srcElement;
    //如果點(diǎn)擊的最底層是li元素
    if(target.tagName.toLowerCase()==="li"){
        alert(target.innerHTML)
    }
}) 

但是有些面試者就是從vue的角度回答這個(gè)問題--利用v-for進(jìn)行綁定。雖然我們公司的項(xiàng)目是使用vue,這樣說也沒錯(cuò),但是這道題我沒提及到vue,說vue的,反而就是一個(gè)扣分項(xiàng)了。

5.考點(diǎn)-DOM操作

比如有一個(gè)需求,往ul里面添加10個(gè)li,如下代碼



    
        
        
    
    
        

問題:這里相當(dāng)于操作了10次DOM,有什么方案,減少DOM的操作次數(shù)?可寫代碼簡(jiǎn)單說明。

這道題,有幾個(gè)人還是從vue的角度來解決問題(v-for,data),雖然這樣不能說錯(cuò),但是我題目沒提及vue的任何東西??键c(diǎn)就是利用innerHTML或者文檔碎片的形式。

代碼如下

innerHTML
var oUl=document.getElementById("ul-test");
//定義臨時(shí)變量
var _html="";
for(var i=0;i<10;i++){
    //保存臨時(shí)變量
    _html+="
  • "+i+"
  • " } //添加元素 oUl.innerHTML=_html;
    文檔碎片-createDocumentFragment
    var oUl=document.getElementById("ul-test"),_frag = document.createDocumentFragment();
    for(var i=0;i<10;i++){
        var oLi=document.createElement("li");
        oLi.innerHTML=i;
        //把元素添加進(jìn)文檔碎片
        _frag.appendChild(oLi);
    }
    //把文檔碎片添加進(jìn)元素
    oUl.appendChild(_frag);
    
    6.考點(diǎn)-對(duì)象深拷貝

    寫出一個(gè)函數(shù),實(shí)現(xiàn)對(duì),對(duì)象的深拷貝

    要求實(shí)現(xiàn)一個(gè)函數(shù)clone。

    let obj={
        name:"小明",
        age:24
    }
    let obj1=clone(obj);
    

    修改obj1,不會(huì)影響到obj的值。

    這道題,在obj上面,我故意只寫一層,對(duì)象里面沒有嵌套數(shù)組或?qū)ο?,就是想看下面試者能不能往深處想一下。結(jié)果面試者都踩坑了。但是可以理解,畢竟大家都是針對(duì)題目而論。

    基本上回答都是類似下面這樣

    function clone(object){
        let _obj={}
        for(let key in object){
            _obj[key]=object[key];
        }
        return _obj;
    }
    let obj1=clone(obj);
    
    //-------------------或者-------------
    function clone(obj){
        let _obj=Object.assign({},object);
        return _obj;
    }
    let obj1=clone(obj);
    

    這個(gè)方案,目的是達(dá)到了,但是如果obj里面的屬性,嵌套著對(duì)象或者數(shù)組,這個(gè)就有問題了。所以理想的解決方案應(yīng)該是這個(gè)。

    function clone(object){
        let _obj=JSON.parse(JSON.stringify(obj))
    }  

    這種方案,如果需要屬性值是函數(shù)或者是undefined,就會(huì)被過濾掉。保險(xiǎn)的做法是下面這樣。原理也很簡(jiǎn)單,就是逐個(gè)遍歷,如果檢測(cè)到屬性值是時(shí)引用類型就用當(dāng)前屬性進(jìn)行遍歷。

    function clone(obj){    
      if(!obj&& typeof obj!== "object"){      
        return;    
      }
      var newObj=obj.constructor===Object?{}:[];    
      for(var key in obj){              
        newObj[key] =(obj[key]&&typeof obj[key]==="object")?clone(obj[key]):obj[key];       
      }    
      return newObj; 
    }
    
    7.其它考點(diǎn)

    其余幾道題都是比較籠統(tǒng)的題目,沒有唯一的解決方案,這里就不統(tǒng)一回答了!

    1.如果設(shè)計(jì)中使用了非標(biāo)準(zhǔn)的字體,你該如何去實(shí)現(xiàn)?

    圖片,字體圖標(biāo)代替,如果是比較小的英文字體可以使用css3的@font-face。

    2.在開發(fā)項(xiàng)目上,知道那些優(yōu)化的方式,提升性能,減少頁面加載時(shí)間,代碼質(zhì)量,代碼可讀性等方面

    性能優(yōu)化-壓縮代碼,懶加載,預(yù)加載,合并請(qǐng)求,小圖片轉(zhuǎn)換base64編碼,資源按需加載等。
    代碼質(zhì)量?jī)?yōu)化-命名有意義,適當(dāng)?shù)淖⑨?,避免巨大函?shù),避免對(duì)象強(qiáng)耦合,代碼邏輯清晰等。

    3.列舉Es6,常用的一些新特性。

    參考資料如下:
    ECMAScript 6 入門
    30分鐘掌握ES6/ES2015核心內(nèi)容(上)
    30分鐘掌握ES6/ES2015核心內(nèi)容(下)
    實(shí)例感受-es6的常用語法和優(yōu)越性
    ES6 Promise 用法講解

    4.Div+css排版的時(shí)候,從頁面渲染和代碼可讀性的角度,應(yīng)該注意些什么?

    標(biāo)簽語義化,class和id命名有意義并且命名統(tǒng)一規(guī)范,css避免深嵌套(3級(jí)就得注意),避免@import,!important,和*通配符,避免行內(nèi)樣式,在head引入css等。

    參考:
    21條CSS高級(jí)技巧
    css寫作建議和性能優(yōu)化小結(jié)

    5.說下自己對(duì)模塊化開發(fā)的理解,以及模塊化開發(fā)的好處。

    提高開發(fā)效率,有利團(tuán)隊(duì)協(xié)同開發(fā),
    避免全局變量污染,命名沖突,
    方便代碼的復(fù)用維護(hù)等。

    8.小結(jié)

    面試題就是這10道,我自己的解決方案也說完了。雖熱我們公司的技術(shù)棧用的主要是vue,webpack這一些,我面試交流的時(shí)候,也會(huì)問相關(guān)的問題,但是我在面試題里面我不出關(guān)于vue,webpack這些題目,就問文章這些題目,就是想知道面試者的基礎(chǔ)如何(因?yàn)楝F(xiàn)在的行情,很多人都是注重學(xué)習(xí)熱門的框架,庫,工具等,卻把基礎(chǔ)落下了)?;A(chǔ)好的話,框架不難上手,但是基礎(chǔ)不牢,就熟悉兩三的框架和一些構(gòu)建工具,以后技術(shù)轉(zhuǎn)型可能會(huì)有阻力。現(xiàn)在前端的發(fā)展很快,技術(shù)很雜,但是基礎(chǔ)一直沒變。建議大家在學(xué)習(xí)新技術(shù)的同時(shí),不要忘記鞏固基礎(chǔ)。

    最后,如果大家對(duì)面試題有什么解法建議或者建議出什么題型,歡迎指點(diǎn)。

    -------------------------華麗的分割線--------------------
    想了解更多,關(guān)注關(guān)注我的微信公眾號(hào):守候書閣

    文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

    轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/115918.html

    相關(guān)文章

    • 自己寫的面試自己想的答案

      摘要:因?yàn)轭}目是我自己寫的,并不是網(wǎng)上摘的,所以知識(shí)點(diǎn)比較基礎(chǔ),也不全面。即使是面試題,也有人掉坑。小結(jié)面試題就是這道,我自己的解決方案也說完了。 大家都知道‘不忘初心,方得始終’,但多少人知道‘初心易得,始終難守’。時(shí)代在變化,技術(shù)在發(fā)展,基礎(chǔ)沒變。學(xué)習(xí)新技術(shù)的時(shí)候,不應(yīng)把基礎(chǔ)落下。 1.前言 因?yàn)闄C(jī)緣巧合,讓當(dāng)了無數(shù)次面試者的我,當(dāng)上了面試官,也和幾個(gè)面試者交流過。既然要應(yīng)對(duì)面試者,我就...

      sherlock221 評(píng)論0 收藏0
    • 自己寫的面試,自己想的答案

      摘要:因?yàn)轭}目是我自己寫的,并不是網(wǎng)上摘的,所以知識(shí)點(diǎn)比較基礎(chǔ),也不全面。即使是面試題,也有人掉坑。小結(jié)面試題就是這道,我自己的解決方案也說完了。 大家都知道‘不忘初心,方得始終’,但多少人知道‘初心易得,始終難守’。時(shí)代在變化,技術(shù)在發(fā)展,基礎(chǔ)沒變。學(xué)習(xí)新技術(shù)的時(shí)候,不應(yīng)把基礎(chǔ)落下。 1.前言 因?yàn)闄C(jī)緣巧合,讓當(dāng)了無數(shù)次面試者的我,當(dāng)上了面試官,也和幾個(gè)面試者交流過。既然要應(yīng)對(duì)面試者,我就...

      SimpleTriangle 評(píng)論0 收藏0
    • 面試小結(jié)--前端面試的幾個(gè)雷點(diǎn)

      摘要:前言得益于金三銀四,在最近一段時(shí)間,面試了一些人,但是符合的寥寥無幾??吹轿业拿嬖囶}自己寫的面試題,自己想的答案。聽人說過一個(gè)面試套路面試官問的問題,可能面試官自己都不懂,目的只是為了壓工資,挫士氣。不過我是為了測(cè)試面試者是不是真的精通。 技術(shù)在不斷的創(chuàng)新,隨著框架,庫,構(gòu)建工具,打包工具,版本控制工具等操作越來越方便,使用越來越簡(jiǎn)單。面對(duì)這樣的情況,除了興奮,也要警惕。這些工具使得開...

      idealcn 評(píng)論0 收藏0
    • 企業(yè)面試激發(fā)LeetCode刷日常

      摘要:哈哈,寫到這個(gè)話題想要先扯點(diǎn)別的,說實(shí)話我是比較自虐的人,大學(xué)時(shí)候本專業(yè)從來不好好上,一直覬覦著別人的專業(yè),因?yàn)樽约何目粕?,總覺得沒有項(xiàng)技術(shù)在身出門找工作都沒有底氣,然后看什么炫學(xué)什么,簡(jiǎn)直沒有目的和節(jié)操,覺得平面設(shè)計(jì)美就去狂記色號(hào)當(dāng)然不是 哈哈,寫到這個(gè)話題想要先扯點(diǎn)別的,說實(shí)話我是比較自虐的人,大學(xué)時(shí)候本專業(yè)從來不好好上,一直覬覦著別人的專業(yè),因?yàn)樽约何目粕?,總覺得沒有項(xiàng)技術(shù)在身出...

      weknow619 評(píng)論0 收藏0

    發(fā)表評(píng)論

    0條評(píng)論

    最新活動(dòng)
    閱讀需要支付1元查看
    <