码迷,mamicode.com
首页 > 其他好文 > 详细

2015-淘宝秋招

时间:2015-02-15 18:05:08      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:

1.按照CommonJS规范,在任何模块代码的作用域下内置了以下哪些变量?
       A, module
       B,context
       C, require
       D,exports  
答:A,C,D
可以参考:
阮一峰commjs文章:输出模块变量的最好方法是使用module.exports对象,加载模块使用require方法,该方法读取一个文件并执行,最后返回文件内部的module.exports对象
var i = 1;
var max = 30;

module.exports = function () {
  for (i -= 1; i++ < max; ) {
    console.log(i);
  }
  max *= 1.1;
};
使用require方法,加载example.js。

// main.js

var example = require(‘./example.js‘);

 


2.以下关于application cache的说法,哪些是不正确的?
·       A,对于目标页面而言,可以通过来启用application cache。
·       B, 对于启用了application cache的页面,该页面默认不会被缓存。
·       C,manifest文件仅在初次访问站点时才会被下载。//每次都会下载minifest
·       D, 对于manifest中列出的资源文件,只要它们被修改,下次访问站点时就会被重新下载。//修改了不会重新下载
答:BCD(A没有写全)
解析:application cache是HTML5的一种新技术,应用缓存,HTML5 使用ApplicationCache 接口解决了由离线带来的部分难题。前提是你需要访问的web页面至少被在线访问过一次。

3.下面哪些技术可用于优化 CSS 图片加载 ?
·      A CSSSprite
·      B SVGSprite
·      C,Iconfont
·      D Base64
 
答:ABCD
 
4。程序员小马对某 Git 仓库执行一系列操作,请写出每个步骤对应的 Git 命令:
1. 从当前分支hotfix 切换到分支 feature
2. 添加新文件 feature.js
3. 提交文件 feature.js,日志消息为“添加新文件”
4. 将 feature 分支衍合(变基)到 master 分支(不考虑文件冲突)
5. 推送feature 分支到远程服务器 origin 的同名分支
git checkout feature
git add feature.js
git commit -m ‘添加新文件‘
git rebase master
git push origin feature:feature 
5.从前端工程师的角度如何提高页面的用户体验。

 加载速度快
兼容各种浏览器
http://www.iteye.com/news/24291

 

6.
<divclass=‘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)重复进入计时累加





7。有这样一个URL:http://item.taobao.com/item.htm?a=1&b=2&c=&d=xxx&e,请写一段JS程序提取URL中的各个GET参数(参数名和参数个数不确定),将其按key-value形式返回到一个json结构中,如{a:‘1‘, b:‘2‘, c:‘‘, d:‘xxx‘, e:undefined}。

 

function getQuery(url) {
    var query = url.split(‘?‘)[1];
    if (!query) {
        return {};
    }
    query = query.split(‘&‘);

    var arr = {};

    for (var i = 0, l = query.length; i < l; i++) {
        var temp = query[i].split(‘=‘);
        var key = decodeURIComponent(temp[0]);//
        var value = decodeURIComponent(temp[1] == null ? ‘‘ : temp[1]);//value可能是空
        if (key in arr) {           //这段if else是处理key重复
            var valArr = arr[key];
            if (typeof valArr === ‘string‘) {
                valArr = [valArr];
            }
            valArr.push(value);
            arr[key] = valArr;
        }
        else {
            arr[key] = value;
        }
    }

    return arr;
}

 

8.简述浏览器中使用js跨域获取数据的几种方法

jsonp 加载script脚本来跨域
通过修改document.domain来跨子域
使用window.name来进行跨域
使用HTML5中新引进的window.postMessage方法来跨域传送数据
flash

9.如何配置让 nginx 对 js、html、css 文件进行 gzip 压缩输出?




10.请填写个人github地址

https://github.com/QingFlye

11.编写一个JavaScript函数,输入指定类型的选择器(仅需支持id,class,tagName三种简单CSS选择器,无需兼容组合选择器)可以返回匹配的DOM节点,需考虑浏览器兼容性和性能。
/*** @param selector {String} 传入的CSS选择器。* @return{Array}*/
var query = function(selector){
//返回查找到的节点数组return [];}

 

var util = require(‘./util‘);
    var getSetAttribute = require(‘./support‘).getSetAttribute;

    // 用于匹配标识
    var identifier = ‘(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+‘;
    // 胜天匹配标签
    var rTag = new RegExp(‘^(‘ + identifier + ‘|[*])‘);
    // 用于匹配类
    var rClass = new RegExp(‘^\\.(‘ + identifier + ‘)‘);
    // 用于匹配属性
    var rAttribute = new RegExp(‘^‘ + ‘\\[(‘ + identifier + ‘)\\]‘);

    // 判断元素是否存在属性
    var hasAttr = getSetAttribute ? function (elem, name) {
        return elem.hasAttribute(name);
    } : function (elem, name) {
        var val = elem.getAttributeNode(name);
        if (val && val.specified) {
            return val.value != null;
        }
        return elem.getAttribute(name) != null;
    };

    // 用于匹配样式中的空白字符
    var rspace = /[\t\r\n\f]/g;

    /**
     * 拆分基础表达式
     * @note 支持标签选择器、类选择器和属性存在选择器
     * @note eg: li .abc [data-role] li.abc li[data-role] .abc[data-role] li.abc[data-role]
     * @param {string} expr 表达式
     * @return {Array.<string>|null} 返回的表达式数组,表达式不合法是返回空
     */
    function token(expr) {
        var ret = [];
        var tag = null;
        expr = util.trim(expr);

        while (expr.length) {
            var match = rTag.exec(expr) || rClass.exec(expr) || rAttribute.exec(expr);
            if (!match) {
                // 传入的不是一个合法的表达式
                return null;
            }
            var matched = match.shift();
            expr = expr.slice(matched.length);
            if (matched.charAt(0) === ‘.‘) {
                ret.unshift(matched);
            }
            else if (matched.charAt(0) === ‘[‘) {
                ret.push(matched);
            }
            else {
                if (tag && tag !== matched) {
                    // 不应当出现两个不同的标签
                    return null;
                }
                tag = matched;
            }
        }
        tag && ret.unshift(tag);
        return ret.length ? ret : null;
    }


    /**
     * 检查元素是否匹配基本表达式
     * @note 支持标签选择器、类选择器和属性存在选择器
     * @note eg: li .abc [data-role] li.abc li[data-role] .abc[data-role] li.abc[data-role]
     * @param {HTMLElement} elem 要匹配的元素
     * @param {string|Array} expr 基本表达式
     * @return {*} 返回匹配结果
     */
    function matches(elem, expr) {
        // 排除所有的非法情况
        if (!elem || elem.nodeType !== 1 || !expr) {
            return false;
        }
        // 解析expr
        if (typeof expr === ‘string‘) {
            expr = token(expr);
        }

        if (!expr) {
            return;
        }

        var className = ‘‘;
        for (var i = 0, l = expr.length; i < l; i++) {
            var matched = expr[i];
            if (matched.charAt(0) === ‘.‘) {
                className = className || (elem.className ? (‘ ‘ + elem.className + ‘ ‘).replace(rspace, ‘ ‘) : ‘‘);
                var clazz = matched.slice(1);
                if (!~className.indexOf(‘ ‘ + clazz + ‘ ‘)) {
                    return false;
                }
            }
            else if (matched.charAt(0) === ‘[‘) {
                if (!hasAttr(elem, matched.slice(1, -1))) {
                    return false;
                }
            }
            else {
                if (!util.nodeName(elem, matched)) {
                    return false;
                }
            }
        }
        return true;
    }

 

 

 

 

2015-淘宝秋招

标签:

原文地址:http://www.cnblogs.com/QingFlye/p/4293257.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!