昨天是阿里巴巴秋季校園招聘在線筆試的第一天,本着學習和共享的精神,本人上網百度了其中一份前端在線筆試題,而且寫出了本身的答案,發上來,供你們參考。javascript
總的來講,這一次的題目相比之前的題目,最大的特色是新,竟然直接考了nodejs,這是出乎不少人的意料的。廢話很少說,接下來上題目。css
一、 下面哪些是NodeJS官方模塊?html
A . Querystring B. Request C .Async D. Dns前端
這一題我以爲有點蛋疼,什麼就叫作官方模塊?在nodejs裏面,模塊通常分紅核心模塊、用戶自定義的文件模塊。因此我理解這裏的官方模塊爲核心模塊,可是即使是如此, 這一題仍是比較蛋疼的,誰記得那麼多。不過我在stackoverflow找到了一個比較合理的解釋:http://stackoverflow.com/questions/11364151/which-modules-does- node-js-require-automatically.因此這一題我選了 A D。java
二、 經常使用的git操做有node
A .Add B.Push C.Mkdir D.Fetch E.Mv F.Merge G.Taggit
對於這裏的關鍵詞「經常使用」,也是沒有一個明顯的界限的,你要是用的多,就叫經常使用。下面非別分析:github
A: add:將當前工做目錄中更改或者新增的文件加入到Git的索引中,加入到Git的索引中就表示記入了版本歷史中,這也是提交以前所須要執行的一步。 ajax
B: push:將本地commit的代碼更新到遠程版本庫中,例如 「git push origin」就會將本地的代碼更新到名爲orgin的遠程版本庫中。 json
C:mkdir:應該不屬於git經常使用操做的範圍。
D:fetch:從服務器的倉庫中下載代碼。(與服務器交互,從服務器上下載最新代碼)
E: mv: 重命名一個文件、目錄或者連接。
F:merge:把服務器上下載下來的代碼和本地代碼合併。或者進行分支合併。
G:tag: 建立、列出、刪除或者驗證一個標籤對象(使用GPG簽名的)。
因此這一題應該是選:A B C E F G
三、 下面說法正確的有
A.P元素不能包含div B.Li元素的祖先元素多是li,但父元素不多是li
C.Domtree的根節點是body元素 D.Body內的元素的offsetparent必定存在
四、在文件/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原型鏈或者做用域鏈的方式很類似。根據網友的反饋,博主查閱了《深刻淺出nodejs》這本書,書籍18頁提到:
(1):首先,Node在當前目錄下查找package.json(CommonJS包規範定義的包描述文件),經過JSON.parse()解析出包描述對象,從中取出main屬性指定的文件名進行定位。若是文件缺乏擴展名,將會進入擴展名分析的步驟。
(2):而若是main屬性制定的文件名錯誤,或者壓根沒有package.json文件,Node會將index當作默認文件名,而後依次查找index.js、index.node、index.json.
(3):若是在目錄分析的過程當中沒有定位成功任何文件,則自定義模塊進入下一個模塊路徑進行查找。若是模塊路徑數組都被遍歷完畢,依然沒有查找到目標文件,則會拋出查找失敗異常。
按照上面的思路,首先應該查找package.json文件,看看裏面有沒有核心模塊,應該是C最早,othermodule不是核心模塊,那麼接着應該進入擴展名分析的步驟,就應該是查找othermodule. js,對應B,緊接着就是以index爲默認文件名,也就是A,再接下來就是上一個文件目錄D了,因此博主給出的答案是: C B A D
5. 請填充代碼,使mySort()能使傳入的參數按照從小到大的順序顯示出來。
function mySort() { var tags = new Array();//使用數組做爲參數存儲容器 請補充你的代碼 return tags;//返回已經排序的數組 } var result = mySort(50,11,16,32,24,99,57,100);/傳入參數個數不肯定 console.info(result);//顯示結果
這一題相對簡單,是一道水題,直接上代碼:
function mySort() { var tags = new Array(); for(var i = 0;i < arguments.length;i++) { tags.push(arguments[i]); } tags.sort(function(compare1,compare2) { return compare1- compare2; }); return tags; } var result = mySort(50,11,16,32,24,99,57,100); console.info(result);
8. 請寫出我的github地址
九、請使用原生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.onmousedown = function(e) { 52 var initP = tempThis.getInitPosition(); 53 document.onmousemove = 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.onmouseup = function(){ 59 document.onmousemove = null; 60 document.onmouseup = 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>
10. 如何判斷瀏覽器是IE仍是火狐,用ajax實現。
要想經過Ajax來判斷是ie瀏覽器仍是firefox瀏覽器,就應該經過XMLHttpRequest 對象。
首先簡單介紹一下這個對象:
(1)全部現代瀏覽器均支持 XMLHttpRequest 對象(IE5 和 IE6 使用 ActiveXObject)。
(2)全部現代瀏覽器(IE7+、Firefox、Chrome、Safari 以及 Opera)均內建 XMLHttpRequest 對象。
所以做者對於這題的理解是寫一個基於XMLHttpRequest的js腳本,在ie或者火狐瀏覽器下面判斷到底處於哪種瀏覽器環境,代碼以下所示:
var xmlhttp; if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp = new XMLHttpRequest(); alert("your brower is not IE "); } else { // code for IE6, IE5 xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); alert("your brower is IE ") }
雖然勉強寫了出來,可是本人還不肯定對於題目的理解是否是正確,但願路過的大神指導。
最後聲明,本人沒有參加這一次的筆試,只是百度了一份筆試題,而後給出了一份我的的參考答案。如需轉載,請聲明轉載地址:http://www.cnblogs.com/yuanzm/p/3936376.html