美文网首页js基础知识总结
js 后端开发基础面试题

js 后端开发基础面试题

作者: 空无一码 | 来源:发表于2018-10-13 22:19 被阅读31次

    js 后端开发基础面试题

    1 为什么要用node?

    • Node.js 是谷歌 V8 引擎(公认最快的 Javascript 解析引擎)、libuv平台抽象层(一个开源的、为 Node 定制而生的跨平台的异步 IO 库)以及主体使用 Javscript 编写的核心库三者集合的一个包装外壳;
    • 一个使用事件驱动来实现异步开发的优秀解决方案,非阻塞IO, 能够处理庞大的并且高吞吐量的并发连接;
    • 前后端使用统一编程语言,最佳地重用开发人员资源;
    • ES2015 发布后,发展很快,各大主流公司应用广泛,生态繁荣。

    2 谈谈 node 的适合场景?

    NodeJS处理并发的能力强,但处理计算和逻辑的能力反而很弱,适合运用在高并发、I/O密集、少量业务逻辑的场景。因此,如果我们把复杂的逻辑运算都搬到前端(客户端)完成,而NodeJS只需要提供异步I/O,这样就可以实现对高并发的高性能处理。比如:RESTFUL API、实时聊天、客户端逻辑强大的单页APP。

    3 谈谈 node的构架?

    由 v8 、libuv, 内置模块、本地模块和其他辅助服务组成:

    • v8:虚拟机的功能,执行js代码和提供C++函数接口,为node提供v8初始化,创建context,scope等;
    • libuv:基于事件驱动的异步IO模型库,我们的js代码发出请求,最终由libuv完成,回调函数在libuv触发;
    • 内置模块:由C++代码写成各类模块,包含了crypto,zlib, file stream等基础功能;
    • 本地模块:由js写成,提供我们应用程序调用的库,同时这些模块又依赖内置模块来获取相应的服务支持;

    4 node中的事件循环是什么样子的?

    event loop其实就是一个事件队列,先加入先执行,执行完一次队列,再次循环遍历看有没有新事件加入队列.执行中的叫IO events, setImmediate是在当前队列立即执行,setTimout/setInterval是把执行定时到下一个队列,process.nextTick是在当前执行完,下次遍历前执行.所以总体顺序是: IO events >> setImmediate >> setTimeout/setInterval >> process.nextTick。

    5 读写一个文件有多少种方法?

    • POSIX式底层读写
    • 流式读写
    • 同步文件读写
    • 异步文件读写

    6 node是怎样支持https,tls的?

    • openssl生成公钥私钥
    • 服务器或客户端使用https替代http
    • 服务器或客户端加载公钥私钥证书

    7 怎样实现一个简单的http服务器?

    三部曲:加载http模块,创建服务器,监听端口

    var http = require('http'); // 加载http模块
    http.createServer(function(req, res) {
        res.writeHead(200, {'Content-Type': 'text/html'}); // 200代表状态成功, 文档类型是给浏览器识别用的
        res.write('
          <meta charset="UTF-8">
          <h1>欢迎使用nodejs</h1> 
        '); // 返回给客户端的html数据
        res.end(); // 结束输出流
    }).listen(3000); // 绑定端口, 通过 http://localhost:3000 访问
    

    8 怎样绑定node程序到80端口?

    • sudo 启动,因为在类Unix系统中监听80端口需要超级用户权限,不推荐
    • apache/nginx代理
    • 用操作系统的firewall iptables进行端口重定向

    9 如何避免回调地狱?

    • 模块化:将回调函数转换为独立的函数
    • 使用流程控制库,例如[aync]
    • 使用Promise
    • 使用async/await

    10 最喜欢node哪个HTTP框架?为什么?

    • 提到Node.js开发,不得不提服务端的开发框架express和koa,都是对HTTP Request和HTTP Response两个对象的封装和处理,应用的生命周期维护以及视图的处理等。Express主要基于Connect中间件框架,功能丰富,随取随用,并且框架自身封装了大量便利的功能,比如路由、视图处理等等。而koa主要基于co中间件框架,框架自身并没集成太多功能,大部分功能需要用户自行require中间件去解决,但是由于其基于ES6 generator特性的中间件机制,解决了长期诟病的“callback hell”和麻烦的错误处理的问题,大受开发者欢迎。
    • 而基于koa框架,则会考虑360的thinkjs或阿里的egg,因为egg用得多且只专注于提供 Web 开发的核心功能和一套灵活可扩展的插件机制,而不去集成如数据库、模板引擎、前端框架等功能,更适合在团队中使用。

    11 下列代码的输出结果?

    var value1 = 0, value2 = 0, value3 = 0;
    for ( var i = 1; i <= 3; i++) {
        var i2 = i;
        (function() {
            var i3 = i;
            setTimeout(function() {
                value1 += i;
                value2 += i2;
                value3 += i3;
            }, 1);
        })();
    }
    setTimeout(function() {
        console.log(value1, value2, value3);
    }, 100);
    

    12 9 6

    结语

    更多面试题请关注本公众号,node开发的面试远不止这些!

    相关文章

      网友评论

        本文标题:js 后端开发基础面试题

        本文链接:https://www.haomeiwen.com/subject/kcuaaftx.html