zoukankan      html  css  js  c++  java
  • 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 {
         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 ")
    }
     
  • 相关阅读:
    (二)vue.js axios封装(参考)
    (一)vue.js 项目搭建(参考)
    Centos7 Mysql配置安装
    自我学习及提高
    (一)Angular2 项目搭建教程(参考)
    WordPress学习网站
    Excel A表与B表对比 并将A表的id写到B表中
    C# 递归文件夹 文件名 路径
    C# 递归生成树(无限级)
    Windows API Code Pack 获取文件缩略图
  • 原文地址:https://www.cnblogs.com/simonryan/p/4847384.html
Copyright © 2011-2022 走看看