美团2020校招前端方向笔试题
1、簡答題1
答案:
1.?i,s,a都在棧中,new出來的對象A在堆上。
2.?執行完后a.i的值還是字符串op。
解析:
1、考察js堆與棧:棧內存主要用于存儲各種基本類型的變量,包括Boolean、Number、String、Undefined、Null以及對象變量的指針,堆主要存儲object
所以字符串變量i,s以及對象指針a都存在棧中,new出來的對象開辟內存存在堆上,對應地址是指針a存的內容
2、考察參數傳遞按值傳遞:a是A類的實例,所以a.i='op',a.func(a.i)這句執行函數,把a.i作為參數傳遞,該函數會復制一個變量,兩個變量完全獨立,所以在函數體里只是把復制的那個變量(一個新的局部變量)改變為'op9’,在函數體外的a.i并沒有被改變
另外補充說明ECMAScript中所有函數的參數都是按值傳遞的——《高程3》,其實對于參數是對象的情況,實際上也是按值傳遞,把傳參的指針復制出一個完全獨立的變量,只是存的內容和傳參對象地址一摸一樣https://www.cnblogs.com/chenwenhao/p/7009606.html
2、簡答題2
答案:
foo, foo2, global
解析:
****由于new綁定的優先級大于bind綁定,所以函數內部this還是obj {}****
第一個foo是console.log(bar.name),這個時候因為已經執行了var bar=new obj.foo(); 此時bar中foo的this是obj的this.改變的是把local變成foo
第二個foo2是因為執行順序是var bar3,bar2=bar,bar3=bar2, 所以bar3/bar2/bar都是指向同一個對象,改變的是bar3中的foo變成了foo2
第三個global是因為一開始已經執行了var bar=new obj.foo(); 所以后面對name的改變影響不了window.name。
考察點3個:?
1、輸出順序主要考察:Event?Loop;
2、第一個和第三個輸出考察:this指針;
3、第二個輸出考察:引用類型賦值
?
3、簡答題3
答案:
答案:bfcad
考察點:主要考察js event loop以及宏任務和微任務;
解析:
```
// 定時器任務屬于宏任務,并且需要先在任務隊列等待,等到同步任務執行完,執行棧清空,才會在任務隊列中按順序選任務進去
setTimeout(() => console.log('a'));//4. 打印a
//Promise 屬于異步微任務,在本輪同步任務結束之前執行
Promise.resolve().then(
?? ?// 1. 打印 b
? ?() => console.log('b') ?// 單引號要改為',然后去掉;號
?).then(
?? ?// 箭頭函數的resolve傳遞的參數作為下一個then的參數
? ?() => Promise.resolve('c').then(
?? ? // 執行箭頭函數
? ? ?(data) => {
?? ??? ?// 把定時器任務也放入任務隊列中等待,在第一個定時器之后
? ? ? ?setTimeout(() => console.log('d')); //5. 打印d
?? ? ? // 2.打印 f
? ? ? ?console.log('f');
?? ? ? // 此時返回的 數據作為下一個then的參數
? ? ? ?return data;
? ? ?}
? ?)
?).then(data => console.log(data)); // 3.打印 c
?
```
* `打印bfcad`
?
4、簡答題4
答案:
var Person=(function(){function Person(){this._name=name;}Person.prototype.greet=function(){console.log('Hi,myname is'+ this._name);}Person.prototype.greetDelay=function(time){var _this=this;setTimeout(function(){console.log('Hi,my name is'+_this.name);})} )();考察點:
ES6語法糖理解,ES6編譯到ES5過程理解,JS原型理解,this指向理解;
?
5、代碼題1:斐波那契數列
答案:
?while(line=readline()){let m=parseInt(line);let N=m;function Firb(num){if(num==0){return 1;}?let top=1,bottom=0,res=0for(let i=0;i<num;i++){res=top+bottombottom=toptop=res}return res}?console.log(Firb(N));}?
6、代碼題2:代金券組合
?
答案:
let line; while(line=readline()){let num=parseInt(line);if(num==0){break;}let lines=readline().split(' ');let MoneyNum=lines[0];let coins=new Array(MoneyNum);for(let i=0;i<MoneyNum;i++){coins[i]=parseInt(lines[i+1]);}let dp=new Array(num+1).fill(Infinity);dp[0]=0;function MinnumCoupon(coins,num){for(let i=1;i<=num;i++){for(let coin of coins){if(i>=coin){ ? ? ? ? ? ?dp[i]=Math.min(dp[i],dp[i-coin]+1);}}}return dp[num] === Infinity ? 'Impossible' : dp[num];}let answer=MinnumCoupon(coins,num);console.log(answer); }?
7、代碼題3:迷宮尋路
答案:
let MN=readline();let MNlines=MN.split(' ');let M=parseInt(MNlines[0]);let N=parseInt(MNlines[1]); let line;let info=new Array(M);let rownum=0;while(line=readline()){let lines=line.split(' ');let infos=new Array(N);for(let i=0;i<N;i++){infos[i]=parseInt(lines[i]);}info[rownum]=infos;rownum++;}let TwoDimArray=new Array(M);for(let i=0;i<TwoDimArray.length;i++){TwoDimArray[i]=info[i];}let Answer=(new Array(M)).fill(0).map(() => (new Array(N)).fill(0))function FindBestWay(M,N,TwoDimArray){for(let i=0;i<M;i++){for(let j=0;j<N;j++){if(i!=0&&j!=0){Answer[i][j]=Math.min(Answer[i-1][j]+TwoDimArray[i][j],Answer[i][j-1]+TwoDimArray[i][j]); }else if(i==0&&j!=0){Answer[i][j]=Answer[i][j-1]+TwoDimArray[i][j];}else if(j==0&&i!=0){Answer[i][j]=Answer[i-1][j]+TwoDimArray[i][j];}else{Answer[0][0]=TwoDimArray[0][0];}}}return Answer[M-1][N-1];}let an=FindBestWay(M,N,TwoDimArray);console.log(an);8、代碼題4:星際穿越
答案:
let N=parseInt(readline()); if(N==0){console.log(0); } else if(N==1){let line=readline();let lines=line.split(' ');console.log(lines[3]); } else{let power=(new Array(N)).fill(0).map(()=>(new Array(N)).fill(0).map(() => (new Array(N)).fill(0)));for(let i=0;i<N;i++){for(let j=0;j<N;j++){for(let z=0;z<N;z++){let line=readline();let lines=line.split(' ');power[parseInt(lines[0])][parseInt(lines[1])][parseInt(lines[2])]=parseInt(lines[3]);}}}let hasroute=(new Array(N)).fill(0).map(()=>(new Array(N)).fill(0).map(() => (new Array(N)).fill(0)));for(let i=0;i<N;i++){for(let j=0;j<N;j++){for(let z=0;z<N;z++){hasroute[i][j][z]=true;}}}let maxi=0,maxj=0,maxz=0;let maxpower=power[maxi][maxj][maxz];for(let i=0;i<N;i++){for(let j=0;j<N;j++){for(let z=0;z<N;z++){if(power[i][j][z]>maxpower){maxi=i;maxj=j;maxz=z;maxpower=power[i][j][z];}}}}let max=0;let total=0;function FindMaxPower(x,y,z){hasroute[x][y][z]=false;total=total+power[x][y][z];//判斷不越界且能量比較大且沒走過if(x+1 < N && power[x + 1][y][z] < power[x][y][z]&&hasroute[x + 1][y][z]){FindMaxPower(x + 1, y, z);}if (x - 1 > -1 && power[x - 1][y][z] < power[x][y][z] && hasroute[x - 1][y][z]){FindMaxPower(x - 1, y, z);}if (y + 1 < N && power[x][y + 1][z] < power[x][y][z] && hasroute[x][y + 1][z]){FindMaxPower(x, y + 1, z);}if (y - 1 > -1 && power[x][y - 1][z] < power[x][y][z] && hasroute[x][y - 1][z]){FindMaxPower(x, y - 1, z);}if (z + 1 < N && power[x][y][z + 1] < power[x][y][z] && hasroute[x][y][z + 1]){FindMaxPower(x, y, z + 1);}if (z - 1 > -1 && power[x][y][z - 1] < power[x][y][z] && hasroute[x][y][z - 1]){FindMaxPower(x, y, z - 1);}if(total>max){max=total;}total=total-power[x][y][z];hasroute[x][y][z]=true;}FindMaxPower(maxi,maxj,maxz);console.log(max); }?
總結
以上是生活随笔為你收集整理的美团2020校招前端方向笔试题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 带括号的表达式计算
- 下一篇: android中Uri.parse()用