面试阿里、网易、滴滴前端碰到的问题3

继续阿里网易面试题1和2
面试阿里、网易、滴滴前端碰到的问题1: http://www.jianshu.com/p/e593fbb36ab1
面试阿里、网易、滴滴前端碰到的问题2: http://www.jianshu.com/p/eecb6737edc9

js部分

实现拖拽功能

  • 如果是我的学生,我建议用es6+面向对象+订阅发布来实现一个完整的拖拽产品
  • 上课内容,这里不我赘述

动画:setTimeout何时执行,requestAnimationFrame的优点

  • setTimeout 不能让你的程序暂停;它只会让它包裹的代码延迟指定的时间执行,在延迟的时间内,后面的代码还是会执行的;
  • 记得我讲过的任务队列池吗?只有等线程闲下来的时候,才会执行任务队列池中等待的异步任务;即:setTimeout 会等到线程空闲才会执行
  • requestAnimationFrame的优点和使用参考:http://www.cnblogs.com/xiaohuochai/p/5777186.html

手写parseInt的实现:要求简单一些,把字符串型的数字转化为真正的数字即可,但不能使用JS原生的字符串转数字的API,比如Number()

  • 我觉得这道题考察大家的基本功,你们觉得呢?
//这是我封装的函数,仅供参考
function aa(n) {
        //因为下面用正则对字符串进行处理,所以,我们必须保证n是字符串
        n=n.toString();
        var reg=/^(\d+)(\.\d+)?(.*)?$/g;
        n=n.replace(reg,($1,$2)=>{
            console.log(typeof $2)
            return $2;
        });
        return +n;
    }

编写分页器组件的时候,为了减少服务端查询次数,点击“下一页”怎样能确

保还有数据可以加载(请求数据不会为空)?
无论前端做分页还是后台做分页,我们都能拿到数据总量,根据数据总量和当前页显示的条数,求出分页总数count,所以,点击下一页,主要看页码是否超出总数count,如果超出,则不能再有点击事件,因为数据已经为空;

ES6新增了哪些特性,使用过哪些,也有当场看代码说输出结果的

参考以前写过的答案http://www.jianshu.com/p/536f24c6df19

JS模块化的实践

我们就可以更方便地使用别人的代码,想要什么功能,就加载什么模块;

  • 单例模式开发: 可以把模块写成一个对象,所有的模块成员都放到这个对象里面。进行模块化开发最简单的方式
  • 立即执行函数+单例模式的写法
var utils=(function(){
    return {
        mod1:()=>{.....},
        mod2:()=>{.....}
    }
})();
  • Javascript模块规范共有两种:CommonJS和AMD
    commonJS规范:主要适用服务器端,通过exports导出,通过require导入;
    AMD规范:主要有两个js库,requirejs和sea.js
    如果require你不熟悉,参考地址http://www.jianshu.com/p/ba996cacb447

你可能感兴趣的:(面试阿里、网易、滴滴前端碰到的问题3)