2015阿里校招前端筆試題


轉自:http://www.cnblogs.com/yuanzm/p/3936376.html

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原型鏈或者作用域鏈的方式很相似。根據網友的反饋,博主查閱了《深入淺出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地址

  https://github.com/yuanzm

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

  如代碼所示:

<html>
<head>
    <title>test</title>
</head>
<style type="text/css">
#drag1 {
    width: 50px;
    height: 50px;
    background-color: #404040;
    cursor: pointer;
}
</style>
<body>
    <div id = "drag1"></div>
</body>
<script type="text/javascript">
window.onload = function() {
    function Drag(obj) {
        this.obj = obj;
    }
    Drag.prototype = {
        constructor: Drag,
        getInitPosition: function(e) {
            e = e || window.event;
            var eX,eY;
            if(e.pageX || e.pageY){
                eX = e.pageX;
                eY = e.pageY;
            }
            eX = e.clientX;
            eY = e.clientY;
            var positionX = eX- this.obj.offsetLeft;
            var positionY = eY - this.obj.offsetTop;
            return {
                x: positionX,
                y: positionY
            } 
        },
        getmouseCoordinate:function(e) {
            e = e || window.event;
            if(e.pageX || e.pageY){
                  return {x:e.pageX, y:e.pageY};
            }
            return {
                  x:e.clientX + document.body.scrollLeft - document.body.clientLeft,
                  y:e.clientY + document.body.scrollTop  - document.body.clientTop
             };    
        },
        initDrag:function() {
            var tempThis = this;
            this.obj.onmousedown = function(e) {
                var initP = tempThis.getInitPosition();
                document.onmousemove = function(e) {
                    var moveP = tempThis.getmouseCoordinate();
                    tempThis.obj.style.marginTop = moveP.y - initP.y + "px"; 
                    tempThis.obj.style.marginLeft = moveP.x - initP.x + "px"; 
                }
                document.onmouseup = function(){ 
                    document.onmousemove = null;  
                    document.onmouseup = null; 
                }
            }
        }
    }
    var drag = document.getElementById("drag1");
    var dragElement = new Drag(drag);
    dragElement.initDrag();
}
</script>
</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 ")
}
 


免責聲明!

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



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