2015阿里巴巴秋季校園招聘前端在線筆試題個人參考答案--第二波


  由於錯過了報名時間,博主昨天才知道原來阿里巴巴秋季校園招聘已經開始了。本來以為沒有機會參加了,但是昨天晚上急急忙忙填寫了一份簡歷,今天居然可以考試,還是有點小激動的,哈哈。

  由於今天是親身參與,時間緊急,有些題目博主自己也不記得,或者說有些題目由於能力有限,自己也不會,這里僅僅提供博主在考試的時候做出來的題目。

1.找出下面優先級相同的選擇器

  A. img.thumb:after  B.[data-job="frontend"]::first-letter

  C. #main::before     D. [type="checkbox"]:checked  E. ul#shop-list

  要解這道題,首先需要知道怎么計算選擇器的優先級,《CSS實戰手冊》里面提到過,CSS為選擇器的權值提供了一個公式:

  (1): 一個標簽選擇器值1分

  (2):一個類選擇器值10分

  (3):屬性選擇器值10分

  (3):一個ID選擇器值100分

  (4):一個內建樣式值1000分

  (5):偽元素(如first-line)通常被當做類選擇器對待,值1分

  (6):偽類則被當做類對待,值10分

  根據上面的規則,我們一個個來分析:

  A: img  == 1分  .thumb == 10分  :after == 1分  總分1 + 10 + 1 = 12

  B: [data-job="frontend"] == 10分  ::first-letter == 1分 總分10 + 1 = 11分 

  C:#main == 100分  ::before(偽元素) == 1分  總分100 + 1 == 101分

  D:[type="checkbox"] == 10分  :checked == 10分  總分10 + 10 = 20分 

  E: ul == 1分  #shop-list == 100分  總分100 + 1 == 101分

  所以這道題的答案應該是:C E

2. 常用的git操作有

  A .Add  B.Push  C.Mkdir  D.Fetch  E.Mv  F.Merge  G.Tag

  對於這里的關鍵詞“常用”,也是沒有一個明顯的界限的,你要是用的多,就叫常用。下面非別分析:

  A: add:將當前工作目錄中更改或者新增的文件加入到Git的索引中,加入到Git的索引中就表示記入了版本歷史中,這也是提交之前所需要執行的一步。 

  B:  push:將本地commit的代碼更新到遠程版本庫中,例如 “git push origin”就會將本地的代碼更新到名為orgin的遠程版本庫中。 

  C:mkdir:應該不屬於git常用操作的范圍。

  D:fetch:從服務器的倉庫中下載代碼。(與服務器交互,從服務器上下載最新代碼) 
  E: mv: 重命名一個文件、目錄或者鏈接。 

  F:merge:把服務器上下載下來的代碼和本地代碼合並。或者進行分支合並。

  G:tag: 創建、列出、刪除或者驗證一個標簽對象(使用GPG簽名的)。

  所以這一題應該是選:A B C E F G

3.以下哪些是Javascript語言typeof可能返回的結果

  A.string  B.array  C.object  D.null

  這一道題考驗記憶能力,因為了解typeof的人都知道,這個操作符基本是沒什么作用的。typeof操作符的作用在Javascript里面有詳細解釋:

  "underfined"--如果這個值未定義

  “boolean”--如果這個值是布爾值

  “string”--如果這個值是字符串

  “number”--如果這個值是數值

  “object”--如果這個值是對象或者null

  "function"--如果這個值是函數

  顯而易見的,答案是A C

4. 請寫出個人github地址

  https://github.com/yuanzm

5. 請簡述異步加載的JS里有document.write會有什么問題

  異步加載js的意思是在加載頁面的時候不加載js,也就是在頁面加載完成之后才加載js,但是如果js里面有document.write,就會產生一個問題:頁面會被document.write里面的內容重寫。

6.<div class='mod-spm'data-spmid='123'>
        <divclass='child_a'></div>
        <divclass='child_b'></div>
        <divclass='child_c'></div>
        <divclass='child_d'></div>
    </div>
    <divclass='mod-spm' data-spmid='456'>
        <divclass='child_a'></div>
        <divclass='child_b'></div>
        <divclass='child_c'></div>
        <divclass='child_d'></div>
    </div>
    <divclass='mod-spm' data-spmid='789'>
        <divclass='child_a'></div>
        <divclass='child_b'></div>
        <divclass='child_c'></div>
        <divclass='child_d'></div>
    </div>
有dom結構如上,請用原生代碼(禁用jQuery作答)實現以下功能:
(a)計算鼠標在mod-spm區域內的停留時長,data-spm不同視為不同區域
(b)盡量減少性能損耗
(c)重復進入計時累加

  這題是最浪費時間的,直接上代碼:

 1     function ShowStayTime(obj) {
 2         this.obj = obj;
 3         this.totalTime = 0;
 4         this.enterTime = null;
 5         this.divTime= document.createElement('div');
 6     }
 7     ShowStayTime.prototype = {
 8         constructor:ShowStayTime,
 9         init: function() {
10             this.showStayTime();
11             this.obj.appendChild(this.divTime);
12             this.beginTime();
13             this.leaveTime();
14         },
15         showStayTime: function() {
16             var message = "";
17             message = "停留時間" + this.totalTime + "ms";
18             this.divTime.innerText = message;
19         },
20         beginTime: function() {
21             this.obj.addEventListener("mouseenter",function() {
22                 this.enterTime = new Date();
23             })
24         },
25         leaveTime: function() {
26             var temp = this;
27             this.obj.addEventListener("mouseleave",function() {
28                 temp.totalTime += new Date().getTime() - this.enterTime.getTime();
29                 temp.showStayTime();
30             })
31         }
32     }
33     var divs = document.getElementsByClassName('mod-spm');
34         var show1 = new ShowStayTime(divs[0]);
35         var show2 = new ShowStayTime(divs[1]);
36         var show3 = new ShowStayTime(divs[2]);
37         show1.init();
38         show2.init();
39         show3.init();

8. 實現數據打點的函數。  

  

 1 function adddot(num) {
 2     var temp = new Array();
 3     for (var i = 0;i < num.length;i++) {
 4         temp.push(num[i]);
 5     }
 6     if (num.length < 4) {
 7         return num;
 8     }
 9     for (var i = num.length - 3;i >= 0;i -= 3) {
10             if (i > 0) {
11                  temp.splice(i,0,'.');
12             }
13     }
14     return temp.join("");
15 }

 

10.有字符串var str = "abc345efgabcab",請寫三條js語句分別實現如下三個功能:

  1)去掉字符串中的a、b、c字符,形成結果:“345efg”

  2)將字符串中的數字用括號括起來,形成結果“abc[3][4][5]efgabcab”

  3) 將字符串中的每個數字的值分別乘2,形成結果:“abc6810efgabcab”

  這題很顯然是考察正則表達式:

1 var s1 = str.replace(/[abc]/g,'');
2 var s2 = str.replace(/[\d]/g, function(arg1){return '['+arg1+']'});
3 var s3 = str.replace(/[\d]/g, function(arg1){return arg1*2;});

 

11從前端工程師的角度如何提高客戶體驗.

  略

最后,再次聲明,本人只是本科二年級的學生,所作出的解答只是具有參考性,如有錯誤,歡迎指出~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM