阿里巴巴2015秋季校園招聘前端開發工程師在線筆試題及答案

前幾天是阿里巴巴秋季校園招聘在線筆試的第一天,本着學習和共享的精神,本人上網百度了其中一份前端在線筆試題,並且寫出了自己的答案,發上來,供大家參考。

總的來說,這一次的題目相比以前的題目,最大的特點是新,居然直接考了nodejs,這是出乎很多人的意料的。廢話不多說,接下來上題目。


1、 下面哪些是NodeJS官方模塊?

A . Querystring    B. Request    C .Async   D. Dns

這一題我覺得有點蛋疼,什麼就叫做官方模塊?在nodejs裏面,模塊一般分成核心模塊、用戶自定義的文件模塊。所以我理解這裏的官方模塊爲核心模塊,但是即便是如此, 這一題還是比較蛋疼的,誰記得那麼多。不過我在stackoverflow找到了一個比較合理的解釋: http://stackoverflow.com/questions/11364151/which-modules-does- node-js-require-automatically .所以這一題我選了  A D。


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、 下面說法正確的有

A.P元素不能包含div B.Li元素的祖先元素可能是li,但氟元素不可能是li

C.Domtree的根節點是body元素 D.Body內的元素的offsetparent一定存在


4、在文件/home/somebody/workspace/somemodule.js中第一行引用了一個模塊:require(‘othermodule‘),請問required 的查找模塊的順序

A. /home/somebody/workspace/mode_modules/othermodule/index.js

B. /home/somebody/workspace/mode_modules/othermodule. Js

C.CORE MODULES named othermodule

D./home/somebody/mode_modules/othermodule/index.js


首先,nodejs查找模塊的方式與Javascript原型鏈或者作用域鏈的方式很相似。本人選的答案是:A B D C  (很不確定)


5. 請填充代碼,使mySort()能使傳入的參數按照從小到大的順序顯示出來。

  1. function mySort() {  var tags = new Array();//使用數組作爲參數存儲容器 

  2. 請補充你的代碼  

  3. return tags;//返回已經排序的數組}

  4. var result = mySort(50,11,16,32,24,99,57,100);/傳入參數個數不確定

  5. console.info(result);//顯示結果

複製代碼



這一題相對簡單,是一道水題,直接上代碼:

  1. function mySort() {  

  2. var tags = new Array();  

  3. for(var i = 0;i < arguments.length;i++) {    

  4. tags.push(arguments);  }  

  5. tags.sort(function(compare1,compare2) {    

  6. return compare1- compare2;  });  

  7. return tags;}

  8. var result = mySort(50,11,16,32,24,99,57,100);

  9. console.info(result);

複製代碼


8. 請寫出個人github地址

   https://github.com/yuanzm

9、請使用原生js實現一個div可拖拽,需要考慮瀏覽器兼容性。

如代碼所示:

 1 <html>

 2 <head>

 3     <title>test</title>

 4 </head>

 5 <style type="text/css">

 6 #drag1 {

 7     width: 50px;

 8     height: 50px;

 9     background-color: #404040;

10     cursor: pointer;

11 }

12 </style>

13 <body>

14     <div id = "drag1"></div>

15 </body>

16 <script type="text/javascript">

17 window.onload = function() {

18     function Drag(obj) {

19         this.obj = obj;

20     }

21     Drag.prototype = {

22         constructor: Drag,

23         getInitPosition: function(e) {

24             e = e || window.event;

25             var eX,eY;

26             if(e.pageX || e.pageY){

27                 eX = e.pageX;

28                 eY = e.pageY;

29             }

30             eX = e.clientX;

31             eY = e.clientY;

32             var positionX = eX- this.obj.offsetLeft;

33             var positionY = eY - this.obj.offsetTop;

34             return {

35                 x: positionX,

36                 y: positionY

37             } 

38         },

39         getmouseCoordinate:function(e) {

40             e = e || window.event;

41             if(e.pageX || e.pageY){

42                   return {x:e.pageX, y:e.pageY};

43             }

44             return {

45                   x:e.clientX + document.body.scrollLeft - document.body.clientLeft,

46                   y:e.clientY + document.body.scrollTop  - document.body.clientTop

47              };    

48         },

49         initDrag:function() {

50             var tempThis = this;

51             this.obj. = function(e) {

52                 var initP = tempThis.getInitPosition();

53                 document. = function(e) {

54                     var moveP = tempThis.getmouseCoordinate();

55                     tempThis.obj.style.marginTop = moveP.y - initP.y + "px"; 

56                     tempThis.obj.style.marginLeft = moveP.x - initP.x + "px"; 

57                 }

58                 document. = function(){ 

59                     document. = null;  

60                     document. = null; 

61                 }

62             }

63         }

64     }

65     var drag = document.getElementById("drag1");

66     var dragElement = new Drag(drag);

67     dragElement.initDrag();

68 }

69 </script>

70 </html>

運行代碼複製代碼保存代碼提示:您可以先修改部分代碼再運行!power by W3Cfuns.com



10. 如何判斷瀏覽器是IE還是火狐,用ajax實現。

要想通過Ajax來判斷是ie瀏覽器還是firefox瀏覽器,就應該通過XMLHttpRequest 對象。

首先簡單介紹一下這個對象:

(1)所有現代瀏覽器均支持 XMLHttpRequest 對象(IE5 和 IE6 使用 ActiveXObject)。

(2)所有現代瀏覽器(IE7+、Firefox、Chrome、Safari 以及 Opera)均內建 XMLHttpRequest 對象。

因此作者對於這題的理解是寫一個基於XMLHttpRequest的js腳本,在ie或者火狐瀏覽器下面判斷到底處於哪一種瀏覽器環境,代碼如下所示:


  1. var xmlhttp;if (window.XMLHttpRequest) {  

  2. // code for IE7+, Firefox, Chrome, Opera, Safari  

  3. xmlhttp = new XMLHttpRequest();  

  4. alert("your brower is not IE ");} else {  

  5. // code for IE6, IE5  

  6. xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");  

  7. alert("your brower is IE ")}

複製代碼



雖然勉強寫了出來,但是本人還不確定對於題目的理解是不是正確,希望路過的大神指導。


文章來源:有招網


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章