精华内容
下载资源
问答
  • 从ECMAScript标准,Node.js语法以及NPM模块角度来看,Node.js的发展让人目不暇接,那么面试题也得与时俱进。 问题 什么是错误优先的回调函数? 如何避免回调地狱? 什么是Promise? 用什么工具保证一致的代码...
  • 整理node.js面试题

    千次阅读 2020-08-03 18:30:10
    遍历使用forEach 14.node的特点是什么 它是一个Javascript运行环境依赖于Chrome V8引擎进行代码解释事件驱动非阻塞I/O轻量、可伸缩,适于实时数据交互应用单进程,单线程 15.module.exports和 exports的区别,用代码...

    1.let和var的区别

    var声明变量可以重复声明,而let不可以重复声明,属于TDZ暂时性死区问题

    作用域不同,var是函数作用域,而let是块级作用域

    var可以在声明的上面访问变量,而let不存在变量提升

    2.ES6中Symbol类型的作用

    ES6新增了Symbol数据类型,它用来生成一个独一无二的值,它Symbol数据常用来给对象属性赋值,让对象属性具备唯一性,不容易被覆盖。

    3.箭头函数有哪些特性

    (1)、箭头函数是匿名函数,不绑定自己的 this,arguments,super,new.target

    (2)、箭头函数会捕获其所在上下文的this值,作为自己的this值,在使用call/apply绑定时,相当于只是传入了参数,对this没有影响

    (3)、箭头函数不绑定arguments,取而代之用rest参数…解决

    (4)、箭头函数当方法使用的时候,没有定义this绑定

    (5)、箭头函数不能作为构造函数,和 new 一起用就会抛出错误

    (6)、箭头函数没有原型属性

    (7)、不能简单返回对象字面量

    4.ES6模板字符串的好处有哪些

    (1)、模板字符串为构造多行字符串和字符串拼接带来了更加方便的方式。

    (2)、同一个模板字符串可以通过使用不同的标签,对模板进行进一步处理,输出不同的结果

    5.手写一个promise

    var p = new Promise((resolve,reject)={if(1){resolve(‘成功’)}else{reject(‘失败’);}
    
    })
    
    p.then((res)=>{}).catch((err)=>{});
    
    class Aniaml{static Type = "动物";
    
    ​              constructor(newName){this.name = newName;
    
    ​            }eat(){
    
    ​                         conosle.log('please eat some apples');}static drink(){
    
    ​                     console.log('please drink some water');}
    
    }
    

    7.class实现继承

    class cats extends Animal{
        constructor(candy){
            super(candy);
        }
    }
    

    8.谈谈你对async和await的理解

    async…await是基于promise的generator语法糖,是用来解决异步的,它用来等待promise的执行结果,常规函数使用await没有效果;

    async函数返回一个 Promise 对象,可以使用then方法添加回调函数

    当函数执行的时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体内后面的语句

    9.class类中的super有哪些用法

    super在类中有两种用法,一个是super方法,只能出现在constructor方法中;另一个是super对象,super对象一般出现在子类覆盖父类的方法中。

    10.静态和成员的区别

    成员的属性和成员的方法只能由对象使用;静态的属性和方法只能由类名字直接使用

    静态的变量或方法归类所有,全局独一份,成员的变量或方法归对象所有,每次实例化对象成员方法和成员变量就会得到一份拷贝;对于一些通用性的属性或方法,可以考虑设置为静态。

    11.谈谈你对promise的理解

    Promise是为了异步数据传递,也用来解决异步回调问题;promise内部有三种状态,pedding,fulfilled,rejected;pedding表示程序正在执行但未得到结果,即异步操作没有执行完毕,fulfilled表示程序执行完毕,且执行成功,rejected表示执行完毕但失败;promise中的then一般对应成功后的数据处理,catch一般对应失败后的数据处理。

    12.深拷贝的原理

    操作的是值,取出对象的值,放到一个新的{},修改时不会影响到原数据;要完成对象的深拷贝需要使用递归遍历所有对象的属性进行赋值,也可以使用JSON.stringfy和JSON.parse操作。

    13.set和Map的特点

    Set是一种类似数组的集合类型,它与数组不同的是,不允许存在重复数据;常用操作方法有:add,delete,has,clear等;遍历使用forEach;

    Map是一种类似对象的集合类型,它与对象不同的是,key可以接受对象类型,常用的操作方法有:set,get,has,delete等;遍历使用forEach

    14.node的特点是什么

    它是一个Javascript运行环境依赖于Chrome V8引擎进行代码解释事件驱动非阻塞I/O轻量、可伸缩,适于实时数据交互应用单进程,单线程

    15.module.exports和 exports的区别,用代码示范

    module.exports是实体抛出功能方法。exports只是module.exports的引用。

    let module = {
                exports: {},
            };
    let exports = module.exports;
     exports.title = 'lesson';
            //此时module.exports新增title属性为lesson
     exports = { name: 'AAA' };
            //此时module.exports保持原有的内容不变
    
    

    16.npm的作用

    用户可以从npm服务器上下载所需要的代码,使用指定命令能够快速安装插件,卸载插件,升级插件

    允许用户上传自己写的代码到npm服务器上

    17.常用npm指令有哪些

    自动创建npm init -y

    全部安装 npm i

    安装产品模式的包 npm i/install/add 插件的名字 (-D/-P/-g),-D安装开发模式的插件,-P安装生产模式的插件,-g全局安装

    查询插件的存放路径npm root (-g)

    升级插件版本 npm update / up / upgrade 插件的名字

    查看版本号 npm -v/version

    18.实现深拷贝

    JSON.parse(JSON.stringify(obj))

    19.iterator的作用是什么,怎么部署iterator接口

    1、统一数据结构(数组,对象,map,set,数组包对象,对象包数组)的遍历方式

    2、在数据结构上部署iterator接口:所谓的部署接口表现形式为,给对象或数组等集合增加iterator属性,属性的内容是一个根据iterator接口规范自行实现的方法

    20.实现数组过滤重复

    //方法一
    let arr=[1,2,5,4,5,1,3,4,6];
    let map =new Map();
    function f(attr) {
        return attr.filter((item)=>{
            return  !map.has(item)&&map.set(item); 
           }
        )
    }
    console.log(f(arr))
    
    //方法二
    let arr=[...new set(arr)];
    

    21.关于对象扩展的属性简写和属性名表达式写法,请各举一个例子

    //属性名简写:
    
    let title = 'lesson';
    
    let num =5;
    
    let obj = {
    
    ​      title,
    
    ​      num
    
    ​    };
    
    //属性名表达式:
    
    let title = 'music';
    
     obj[title] = '钢琴';
    

    22.什么是MIME,常见的MIME类型有哪些

    MIME是多用途互联网邮件扩展类型。这是HTTP协议中用来定义文档性质及格式的标准。服务器通过MIME告知响应内容类型,而浏览器则通过MIME类型来确定如何处理文档。

    超文本标记语言文本 .html text/html
    xml文档 .xml text/xml
    XHTML文档 .xhtml application/xhtml+xml
    普通文本 .txt text/plain
    RTF文本 .rtf application/rtf
    PDF文档 .pdf application/pdf
    PNG图像 .png image/png
    Microsoft Word文件 .word application/msword
    GIF图形 .gif image/gif
    JPEG图形 .jpeg,.jpg image/jpeg
    css文件 .css text/css
    Json文件 .json application/json
    JS文件 .js text/JavaScript

    23.模块加载机制

    Nodejs遵循commonjs规范的模块加载机制,使用require加载文件,使用 exports或module.exports导出文件

    24.URL的组成

    URL是统一资源定位符 协议://子域名.域名.顶级域名:端口号/目录/文件名.文件后缀?参数=值

    25.fs文件操作模块是否能够删除一个非空目录

    不能,需要递归遍历删除

    function deleteDir(curpath) {
        // 判断当前路径或文件是否存在,存在则进行下一步
        if (fs.existsSync(curpath)) {
            // 读取当前目录下的所有文件或文件夹
            let files = fs.readdirSync(curpath);
            // 循环遍历文件或目录
            files.forEach(val => {
                // './demo'+val
                let tmp_path = path.join(curpath, val);
                // 判断是目录还是文件
                let isDir = fs.statSync(tmp_path).isDirectory();
                if (isDir) {
                    deleteDir(tmp_path);
                } else {
                    // 同步删除文件
                    fs.unlinkSync(tmp_path);
                }
            });
            // 当前目录遍历完毕后,目录中不存在任何文件,所以删除当前目录
            fs.rmdirSync(curpath);
        }
    }
    
    deleteDir('./demo');
    
    

    26.express中Router的作用?以及Router要解决的问题?

    1): express.Router 可以认为是一个微型的只用来处理中间件与控制器的 app,

    它拥有和 app 类似的方法,例如 get、post、all、use 等等。

    (2): router它解决了直接把 app 暴露给其它模块使得 app 有被滥用的风险

    27.npm start 命令, 应该在哪里配置, 在哪里可以正确运行?

    (1), 在package.json中的 script中 配置npm 使用的命令

    key是npm的自定义的命令名称,value是真正在终端中执行的命令

    (2), 在使用npm 运行自定义命令时, 需要确保命令路径的位置上拥有package.json文件

    28. express生成器的作用是什么?

    通过应用生成器工具 express-generator 可以快速创建一个应用的kuang架, 包含一整套配置好的服务器配置, 文件和文件夹等, 包括静态资源的暴露等, 包括路由的配置, 和模板引擎配置, 以及404的处理

    29.请回答, 前端Ajax请求后端接口/api/getNews, 接口过程中, 都发生了什么?

    1 前段手机内容2 调用Ajax 3 传递参数和确认请求方式 4 后台对应的接口里的代码开始执行 6 铺设页面

    参考答案: 首先前端代码运行在浏览器中, 由浏览器的XMLHTTPRequest发起一个请求, 如果通过了跨域的检测, 进行http连接, 发送请求信息, 服务器触发对应监听的"/api/getNews"接口的回调函数, 执行其中的代码, 最后res返回响应的内容等给本次请求的地方

    30.请求对象中包含那些内容?

    请求协议, 请求方式, 请求的URL, 请求头, 请求体

    31.响应对象中包含那些内容?

    响应协议, 响应状态码, 响应状态信息, 响应头, 响应的正文数据

    32.express优点是什么?

    Express 的优点是线性逻辑:路由和中间件完美融合,通过中间件形式把业务逻辑细分,简化,一个请求进来经过一系列中间件处理后再响应给用户,再复杂的业务也是线性了,清晰明了。

    33.什么是中间件, 常用的第三方中间件有那些?

    Express是一个自身功能极简,完全是路由和中间件构成一个web开发框架:从本质上来说,一个Express应用就是在调用各种中间件。封装了一些或许复杂但肯定是通用的功能, 非内置的中间件需要通过安装后,require到文件就可以运行。

    第三方中间件:

    cookie-parser:解析cookie

    ejs:ejs模板

    express-session:解析session

    http-errors:错误中间件处理

    Moment:日期时间处理

    Morgan:日志打印

    Multer:文件上传

    Nodemon:热更新

    config-lite: 读取配置文件

    34.express缺点是什么?

    Express 是基于 callback 来组合业务逻辑。Callback 有两大硬伤,一是不可组合,二是异常不可捕获。

    35.什么是同步, 什么是异步操作?

    同步操作, 当代码运行到同步操作的代码时, 所在线程等待结果返回

    而异步操作, 则是不会耽误代码继续执行, 当异步操作成功, 一般使用回调函数来处理异步成功的动作(常用在ajax/定时器/计时器等

    36.ejs作用是什么?

    EJS是一个Javascript模板库, 用来从JSON数据中生成HTML文件

    37. 什么是前后端分离项目 (JS渲染的项目又是什么)?

    前端HTML页面通过AJAX调用后端的RESTFUL API接口并使用JSON数据进行交互

    JS渲染的项目就是通过Ajax请求数据以后, 通过JS代码动态创建html的标签和数据等(一般右键查看网页源代码 是看不到渲染后的HTML标签的)

    38.什么是后端渲染项目?

    浏览器请求静态网页资源, 服务器端会在后端把数据渲染到HTML页面上, 再把html文件内的字符串一起返回给浏览器进行展示的一种手段, Nodejs中体现为ejs和pug模板引擎

    39.设计一个前后端交互的流程?

    前端编写HTML+CSS代码以后, 通过JS的Ajax进行网路请求, 请求后台指定的数据接口, 根据业务需求, 可以还需要传递参数等信息, 获取数据以后, 进行JSON解析和DOM创建展示.

    服务器端 编写接口, 接收参数等, 连接数据库, 根据业务逻辑编写业务代码, 返回不同的数据

    40.分页功能, 前后端是如何交互的?

    分页功能, 前后端都可以做, 如果是前端做分页的话, 根据翻的页码数, 截取后台返回的全部数据, 进行分段展示

    如果是前后端配合做, 则需要传递当前页码数给后台, 后台会返回对应页码的数据

    41.session和cookie的作用和区别?

    session是区别于数据库存在的一种服务器临时存储技术, 它主要存储一些无需持久化的数据, 比如临时的登录状态信息等

    cookie是存在于浏览器上的一种浏览器本地存储的方式, 同域名下的cookie不同标签页可以共享, 默认过期时间是浏览器关闭时, 而且在进行http请求时, 会自动带上浏览器全部的cookie发给后台, 后台也可以获取cookie, 设置可以在响应时, 想浏览器中设置cookie。

    42.跨域是什么, 如何解决跨域?

    当ajax请求所在域名或接口和请求目标url的域名或接口, 有一个不同, 即发生了跨域请求, 浏览器会阻止这次ajax请求.

    如果能让后台改代码, 可以让后台开启跨域支持/ 使用jsonp方式处理跨域

    如果不能让后台改代码, 则需要在本地使用服务器, 进行代理转发

    43.用递归删除非空目录

    let fs = require('fs');
    
        // 删除非空目录函数
        function delDir (dir) {
            let filesArr = fs.readdirSync(dir);
            for (let i in filesArr) {
               let path = dir + '/' +filesArr[i] 
               let stat = fs.statSync(path);
                if (stat.isFile()) {
                    fs.unlinkSync(path)  
                } else if (stat.isDirectory()) {
                    delDir(path)  
                }
            }
            fs.rmdirSync(dir)
        }
    
        // 暴露出去
        module.exports = delDir;
        // 引入递归删除文件模块
        var delDir = require('./delDir');
    
    
        // 调用函数
        delDir(`D:\LBX`)
    

    44.事件订阅与发布机制

    事件订阅机制 EventEmitter,EventEmitter类由events模块定义的,其核心就是事件触
    发与事件监听器功能的封装。这个类中有一个on()方法,用于将一个或多个事件监听器绑定到命名事件上。当事件被触发时,注册到这个事件的事件监听器被依次调用,事件参数作为回调函数参数传递。EventEmitter 的核心就是事件触发与事件监听器功能的封装。EventEmitter类当新增监听器时,会触发 ‘newListener’ 事件;当移除已存在的监听器时,则触发’removeListener’ 事件。

    45.npm的包依赖

    “dependencies”: {//产品模式依赖

    “devDependencies”: {},//开发模式依赖

    46.npm全局安装与局部安装的区别

    全局安装方式是键入命令:npm install express -g ,代表安装到全局环境里面,包安装在Node安装目录下的node_modules文件夹中

    局部安装,可以直接通过require()的方式引入项目中node_modules目录下的模块

    47.get和post请求的区别

    48.node怎么设置允许跨域

    49.如何设置ajax跨域携带cookie

    $.ajax({ url : 'http://remote.domain.com/corsrequest', data : data, dataType: 'json', type : 'POST', xhrFields: { withCredentials: true }, crossDomain: true, contentType: "application/json"})
    

    50.使用express的原因是什么

    express是简单灵活的node.js Web应用框架,提供强大特性帮助创建各种web应用,有着丰富的http工具以及来自connect框架的中间件随取随用,创建强健友好的API变得快速简单

    51.请说一下express4 中app和router的区别

    app级路由不方便模块化封装,而且app.js文件没有路由代码,路由代码在router文件中,而且router方便模块化封装

    52.请说一下express4如何接受get请求和post请求

    53.请说一下express4中如何设置静态资源目录

    app.use(express.static(path.join(__dirname, 'public')));
    

    54.请说一下express4中的中间件是做什么的,如何使用

    中间件是可以访问请求对象,响应对象以及next应用程序请求-响应周期中的函数,使用app.use()来使用/定义中间件

    55.什么是ejs模板引擎?

    EJS是一个Javascript模板库, 用来从JSON数据中生成HTML文件

    56.你都有on过哪些node第三方的模块,功能是什么?

    cookie-parser:解析cookie

    ejs:ejs模板

    express-session:解析session

    http-errors:错误中间件处理

    Moment:日期时间处理

    Morgan:日志打印

    Multer:文件上传

    Nodemon:热更新

    config-lite: 读取配置文件

    57.关系型数据库和非关系型数据库有哪些区别?

    存储方式不同(关系型采用表格存储,非关系以数据集方式),存储结构不同(关系型按照结构化的方法,非关系型采用的动态解构),存储规范不同,扩展方式不同,查询方式不同,事务性不同(关系型强调ACID,非关系强调BASE)

    58.常见的关系型和非关系型数据库有哪些?

    关系型:MySQL、Oracle、SqlServer

    菲关系:mangoDB

    59.HTTP协议通信模型

    请求 -> 处理 -> 响应:
    请求:由客户端发起请求;
    处理:由服务器端处理请求;
    响应:服务器端把处理的结果,通过网络发送给客户端;

    60.HTTP协议会话步骤

    ●建立连接:客户端的浏览器向服务端发出建立连接的请求,服务端给出响应就可以建立连接了。
    ●发送请求:客户端按照协议的要求通过连接向服务端发送自己的请求。
    ●给出相应:服务端按照客户端的要求给出应答,把结果(HTML 文件)返回给客户端。
    ●关闭连接:客户端接到应答后关闭连接

    61.http 与https的区别

    1)http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
    2)端口号不同http是80,https是443

    62.http协议及其特点

    HTTP(Hyper Text Transfer Protocol)< 超文本传输协议> 的缩写. 是用于从WWW 服务器传输超文本到本地浏览器的传输协议.HTTP 是一个应用层协议, 由请求和响应构成, 是一个标准的个客户端和服务器模型。通常基于TCP连接方式

    1. 支持客户端/ 服务器模型
    2. 简单快速
    3. 灵活
    4. 无连接
    5. 无状态

    63.http请求和响应报文格式和常见状态码

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5LVEBBDe-1596450577648)(C:\Users\thinkpad\Desktop\前端\搜狗截图20200723234612.png)]

    HTTP 请求报文由请求行、请求头部、空行 和 请求包体 4 个部分组成;

    HTTP 响应报文由状态行、响应头部、空行 和 响应包体 4 个部分组成

    //常见状态代码、状态描述、说明:
    102 请求已被接受,需要继续处理 由WebDAV(RFC 2518)扩展的状态码,代表处理将被继续执行。
    200 OK // 客户端请求成功
    304 Not Modified重定向,需要进一步的操作以完成请求
    400 Bad Request // 客户端请求有语法错误,不能被服务器所理解
    401 Unauthorized // 请求未经授权
    403 Forbidden // 服务器收到请求,但是拒绝提供服务
    404 Not Found // 请求资源不存在,eg:输入了错误的 URL
    500 Internal Server Error // 服务器发生不可预期的错误
    503 Server Unavailable // 服务器当前不能处理客户端的请求,一段时间后可能恢复正常;

    1. 支持客户端/ 服务器模型
    2. 简单快速
    3. 灵活
    4. 无连接
    5. 无状态

    63.http请求和响应报文格式和常见状态码

    [外链图片转存中…(img-5LVEBBDe-1596450577648)]

    HTTP 请求报文由请求行、请求头部、空行 和 请求包体 4 个部分组成;

    HTTP 响应报文由状态行、响应头部、空行 和 响应包体 4 个部分组成

    //常见状态代码、状态描述、说明:
    102 请求已被接受,需要继续处理 由WebDAV(RFC 2518)扩展的状态码,代表处理将被继续执行。
    200 OK // 客户端请求成功
    304 Not Modified重定向,需要进一步的操作以完成请求
    400 Bad Request // 客户端请求有语法错误,不能被服务器所理解
    401 Unauthorized // 请求未经授权
    403 Forbidden // 服务器收到请求,但是拒绝提供服务
    404 Not Found // 请求资源不存在,eg:输入了错误的 URL
    500 Internal Server Error // 服务器发生不可预期的错误
    503 Server Unavailable // 服务器当前不能处理客户端的请求,一段时间后可能恢复正常;

    展开全文
  • node-interview-questions, Node.js面试题,侧重后端应用与对Node核心的理解
  • 如何通过饿了么 Node.js 面试(解答) 听说饿了么被阿里收购了,饿了么虽然没了,文档还是要更的... 本项目是基于而来,对上述教程中提出的问题进行了解答,本项目是为了记录本人对Node知识点的总结,没有权威性如有错误...
  • 所以这份面试题大全,更侧重后端应用与对Node核心的理解。 github地址: https://github.com/jimuyouyou/node-interview-questions 起源 node正风生火起,很多介绍却停留在入门阶段,无法投入生产 node相关的高质量...
  • node.js常见面试题

    2020-12-19 11:08:02
    node.js常见面试题 1、node的特点 单线程 非阻塞I/O 事件驱动event-driven 是一个JavaScript的运行环境 依赖于Chrome V8 引擎进行代码解释 轻量,适用于实时数据交互 2、node的核心模块 fs,事件,流,网络 3. ...

    node.js常见面试题

    1、node的特点

    1. 单线程
    2. 非阻塞I/O
    3. 事件驱动event-driven
    4. 是一个JavaScript的运行环境
    5. 依赖于Chrome V8 引擎进行代码解释
    6. 轻量,适用于实时数据交互

    2、node的核心模块

    fs,事件,流,网络

    3. exports和module.exports的区别

    1. module.exports 初始值为一个空对象 {}2.
    2. exports 是指向的 module.exports 的引用3.
    3. require() 返回的是 module.exports 而不是exports
    4. 如果exports和module.exports同时存在,那么只显示module.exports

    4、http请求和响应的报文格式和常见的状态码

    1、请求报文包含三部分:

    1. 请求行:包含请求方法、URI、HTTP版本信息
    2. 请求首部字段
    3. 请求内容实体

    2、响应报文包含三部分:

    1. 状态行:包含HTTP版本、状态码、状态码的原因短语
    2. 响应首部字段
    3. 响应内容实体

    3、常见状态码:

    1. 1xx (Informational) 信息性状态码,表示正在处理。

      100 (继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。

      101 (切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。

    2. 2xx (Success) 成功状态码,表示请求正常。

      201 (已创建) 请求成功并且服务器创建了新的资源。

      202 (已接受) 服务器已接受请求,但尚未处理。

      203 (非授权信息) 服务器已成功处理了请求,但返回的信息可能来自另一来源。

      204 (无内容) 服务器成功处理了请求,但没有返回任何内容。

      205 (重置内容) 服务器成功处理了请求,但没有返回任何内容。

      206 (部分内容) 服务器成功处理了部分 GET 请求。

    3. 3xx (Redirection) 重定向状态码,表示客户端需要进行附加操作。

      300 (多种选择) 针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。

      301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。

      302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

      303 (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。

      304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。

      305 (使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。

      307 (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

    4. 4xx (Client Error) 客户端错误状态码,表示服务器无法处理请求。
      400 (错误请求) 服务器不理解请求的语法。

      401 (未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。

      403 (禁止) 服务器拒绝请求。

      404 (未找到) 服务器找不到请求的网页。

      405 (方法禁用) 禁用请求中指定的方法。

      406 (不接受) 无法使用请求的内容特性响应请求的网页。

      407 (需要代理授权) 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。

      408 (请求超时) 服务器等候请求时发生超时。

      409 (冲突) 服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息。

      410 (已删除) 如果请求的资源已永久删除,服务器就会返回此响应。

    5. 5xx (Server Error) 服务器错误状态码,表示服务器处理请求出错。

      500 (服务器内部错误) 服务器遇到错误,无法完成请求。

      501 (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。

      502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。

      503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。

      504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。

      505 (HTTP 版本不受支持) 服务器不支持请求中所用的HTTP 协议版本。

    5、模块加载机制

    Nodejs遵循commonjs规范的模块加载机制,使用require加载文件,使用exports和module.exports导出文件

    6、URL组成

    协议+域名+端口+pathname+search+hash

    7、请求对象中包含哪些内容

    请求协议,请求方式,请求地址,请求头,请求头

    8、响应对象中包含哪些内容

    响应协议,响应状态码,响应状态信息,响应头,相应数据

    展开全文
  • 所以这份面试题大全,更侧重后端应用与对Node核心的理解。 node开发技能图解 node 事件循环机制 起源 node正风生火起,很多介绍却停留在入门阶段,无法投入生产 node相关的高质量面试题更是少之又少,很难全面考查...
  • Node.js面试题

    千次阅读 2018-07-24 09:39:13
    Node 的优点和缺点提出了自己的看法:...此外,与Node 代理服务器交互的客户端代码是由javascript 语言编写的, 因此客户端和服务器端都用同一种语言编写,这是非常美妙的事情。 (缺点)Node 是一个相对新的开源...
    1. 对Node 的优点和缺点提出了自己的看法:
      • (优点)因为Node 是基于事件驱动和无阻塞的,所以非常适合处理并发请求,
        因此构建在Node 上的代理服务器相比其他技术实现(如Ruby)的服务器表现要好得多。
        此外,与Node 代理服务器交互的客户端代码是由javascript 语言编写的,
        因此客户端和服务器端都用同一种语言编写,这是非常美妙的事情。
      • (缺点)Node 是一个相对新的开源项目,所以不太稳定,它总是一直在变,
        而且缺少足够多的第三方库支持。看起来,就像是Ruby/Rails 当年的样子。
    2. 需求:实现一个页面操作不会整页刷新的网站,并且能在浏览器前进、后退
      时正确响应。给出你的技术实现方案?
      至少给出自己的思路(url-hash,可以使用已有的一些框架history.js 等)
    3. Node.js 的适用场景?
      1)、实时应用:如在线聊天,实时通知推送等等(如socket.io)
      2)、分布式应用:通过高效的并行I/O 使用已有的数据
      3)、工具类应用:海量的工具,小到前端压缩部署(如grunt),大到桌面图形界面应用程

      4)、游戏类应用:游戏领域对实时和并发有很高的要求(如网易的pomelo 框架)
      5)、利用稳定接口提升Web 渲染能力
      6)、前后端编程语言环境统一:前端开发人员可以非常快速地切入到服务器端的开发(如著
      名的纯Javascript 全栈式MEAN 架构)
    4. ( 如果会用node) 知道route, middleware, cluster, nodemon, pm2,
      server-side rendering 么?
      Nodejs 相关概念的理解程度
    5. 解释一下Backbone 的MVC 实现方式?
      流行的MVC 架构模式
    6. 什么是“前端路由”?什么时候适合使用“前端路由”? “前端路由”有哪
      些优点和缺点?
      熟悉前后端通信相关知识
    7. 对Node 的优点和缺点提出了自己的看法?
      优点:
      • 因为Node 是基于事件驱动和无阻塞的,所以非常适合处理并发请求,因此构建在Node
        上的代理服务器相比其他技术实现(如Ruby)的服务器表现要好得多。
      • 与Node 代理服务器交互的客户端代码是由javascript 语言编写的,因此客户端和服务
        器端都用同一种语言编写,这是非常美妙的事情。
        缺点:
      • Node 是一个相对新的开源项目,所以不太稳定,它总是一直在变。
      • 缺少足够多的第三方库支持。看起来,就像是Ruby/Rails 当年的样子(第三方库现在已
        经很丰富了,所以这个缺点可以说不存在了)。
    展开全文
  • 阿里Node.js面试题集合

    万次阅读 多人点赞 2018-07-10 13:52:27
    前提说明:自己是在北邮...简历说明中侧重讲了关于Node.js的经历,JavaScript轮子的介绍以及一些使用了Node.js技术栈的Web项目。这点对于前端实习也是一个加分项。一面:一面面试官问了大概有4年开发经验(包括了Jav...

    前提说明:

    自己是在北邮论坛中找的学长内推,当时与学长问了关于阿里前端中是否有偏向JavaScript开发(中间件,工具库)的方向,学长说只有杭州有类似岗位,最后把我内推到了淘宝UED的团队去了。

    简历说明中侧重讲了关于Node.js的经历,JavaScript轮子的介绍以及一些使用了Node.js技术栈的Web项目。这点对于前端实习也是一个加分项。

    一面:

    一面面试官问了大概有4年开发经验(包括了Java和JavaScript),上来除了标准的自我介绍以外,大概主要谈论了关于Node.js,JavaScript语法以及Web开发的领域,对简历中提到的项目稍微深入问了一下。

    1. babel或者coffee Script的这些编译到JS的语言是如何工作的?
      这个问题是最纠结的,因为不太清楚面试官想问什么,大概说了关于Parse的东西,后面补充了关于babel的递归引用JS文件处理的东西,估计有问题。

    2. JavaScript的Async库基本原理是什么?
      这个网上都有,就是Async的parrllel,waterfall的简单实现,讲出了把callback function替换this域,用一个list来遍历执行,把最终的error或者result参数填回到Async.parallel([functionList], callback(err,result))中,差不多

    3. 你写的Functional.js中monad, curry, lazy的解释和意义?
      基本面向简历的作品,讲解了一点关于monad的简单意义(包裹,传递流,防止外部更改),curry化对JS库函数的意义,还有lazy list或者range对于那种大量数据处理的好处什么的。

    4. Node.js框架同其他语言框架的比较?
      答出Node.js特色的非阻塞IO和异步性,和Python的Flask对比,再讲解一下express中间件这种模式的特点,差不多了

    5. Node.js与Swift在Web领域的未来?(因为我简历写了iOS开发和Swift)
      随便扯吧……就是强类型的问题,基于原型面向对象优劣,语法糖的问题,还有支持库什么的。

    其他就是自由提问,知道了阿里淘宝对前端实习要求基本不高,主要是JS熟悉,会Node有加分,而且没有固定谁来切图谁写JS,一般都会一点跨栈的东西。

    二面:

    (二面充分暴露了自己的若菜本质)。面试官是Winter,就是那个知乎的温兆伦的Winter(P8)。二面是电话+网页coding的部分,需要在电脑,网络OK情况下进行,要自己提前准备好(不行就说明改个时间……)。开始电话问了一些关于JS的东西,什么闭包,Node.js的require依赖顺序什么的……之后就开始正式网页coding。

    1. 第一题:设计一个简单的红绿灯策略,比如红灯亮分别为console.log(“red”)这种,要求按照红3s-黄1s-绿1s顺序不断循环展示。

    这个本来很简单的问题开始愣住了,因为原生的setTimeout好久没用了,问了问可以使用第三方库,但原生其实有笨办法,就是直接硬编三个setTimeout,时间分别为0,3s,4s,然后最外层一个10s延迟的setInterval的来重复。虽然效果但是这肯定不对,因为这直接无视了事件发生相对顺序,靠着全局时间来实现,长期下去由于JS引擎的延时会最终乱掉。

    第二种想法,我借用了Promise,大概就是用Promise里面resolve一个setTimeout的函数模拟事件结束,最后由Promsie.then控制流程,好处就是绝对不会出现事件先后顺序错乱,而且写起来简单。

    
        
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
        
    function button(color, time) {
    let p = new Promise( function (resolve, reject) {
    setTimeout( function() {
    resolve( "Timestamp: " + getTimestamp() + " Color: " + color)
    }, time);
    });
    return p;
    }
    function flash() {
    button( "red", 3000) // after last task end, which means the last task will need 3s
    .then( (v) => {
    console.log(v);
    return button( "yellow", 3000); // last spend 3s
    }).then( (v) => {
    console.log(v);
    return button( "green", 1000); // last spend 1s
    }).then( (v) => {
    console.log(v);
    });
    }
    1. 第二题:算法题,第一问是:给定一个整数金额的整钱n,还有2,3,5元三种货币,要你计算出所有能凑出整钱的组合个数。

    (这里又暴露自己思维模式问题)应该先从最简单想,假如n=10,把5,3,2元的取的张数定为i,j,k,一定要按照由大到笑顺序,那么就相当于从i=0,j=0,k=0开始循环,一旦组合总金额超过n,那么就break停止(因为从大到小取金额,最小的都无法凑出,那么之后再也不能取了),能凑齐就加一个组合。

    
        
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
        
    function countMoney(total) {
    if (total < 2) {
    return 0;
    }
    var result = 0;
    var maxAmount = total / 2;
    for ( var i = 0; i <= maxAmount; i++) { // 5
    for ( var j = 0; j <= maxAmount; j++) { // 3
    for ( var k = 0; k <= maxAmount; k++) { // 2
    var sum = i * 5 + j * 3 + k * 2;
    if (sum == total) {
    result++;
    break;
    } else if (sum > total) {
    break;
    }
    }
    }
    }
    return result;
    }
    console.log(countMoney( 10));

    笨方法,但是外层不会超过 n / max[i],所以复杂度最差也没有到O(n^3)

    第二问:假如这个能使用的货币列表是给定的,意思是输入一个整数list,比如[1,2,3,5],还有金额n,求出所有组合数。
    现在货币列表不是定的,那么就得想别的方法,当时答的时候说要用递归,但是最终没写出来(唉……),在之后才写出来。

    前提思路用的是递归,function countMoney(amount, moneyArr),amount为剩下的金额,moneyArr为可以选择的货币列表,返回的是产生的组合数,那么初始条件认为amount = n, moneyArr = list(排序,由高往低)。取出当前moneyArr(也就是当前最大的面值
    )的货币first,剩下的货币可选面额叫做smallerMoneyArr,然后从0到first最大能取的个数开始(即 0 ~ amount / first),不断递归调用countMoney(remainingAmount, smallerMoneyArr),加起来所有组合数即可。
    终止条件很简单,如果剩余余额不为0但可选货币为空,那么分割方法失败,返回0;如果余额是0,那么分割成功,返回1;搞定。

    
        
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    
        
    //Recursive DP
    var inputMoneyArray = [ 1, 2, 3, 5];
    inputMoneyArray.sort().reverse(); // must from higher to lower
    function countMoney(amount, moneyArr) {
    if (amount != 0 && moneyArr.length == 0) {
    return 0; // no use
    } else if (amount == 0) {
    return 1; // success one
    }
    var first = moneyArr[ 0];
    var smallerMoneyArr = [];
    for ( var i = 1; i < moneyArr.length; i++) {
    smallerMoneyArr[i -1] = moneyArr[i];
    }
    var sum = 0;
    for ( var i = 0; i <= amount / first; i++) {
    var remainingAmount = amount - (first * i);
    sum += countMoney(remainingAmount, smallerMoneyArr);
    }
    return sum;
    }
    var result = countMoney( 10, inputMoneyArray);
    console.log(result); // 20

    然而……当时面试脑抽没想出来,后面就问了问一些前端开发要求还有工作环境什么的就没了……唉,还是没有准备的问题,如果真要面试,希望提前准备好一点常见题目,主要是思维方式要对,先最简单(从特例开始,变量假设为固定值),然后推广,复习一下递归,动态规划什么的就很简单。

    三面

    三面还是技术面,其实我也没有任何准备(以为二面挂了),面试官是淘宝一个P7级别的吧,也是上来自我介绍,然后开始问一些Node.js和JS(有前端JS)的问题,基本我全程都没遇到过HTML5,CSS,Web前端框架,构建工具等问题……可能是简历导致的吧。

    1. 说一下关于Node.js的文件读写方式和实现?
      基本解释一下fs.readFile,说明异步性,然后面试官开始追问:Node.js是单线程,如何实现多个同时的文件IO?
      紧接着就开始解释Node.js的fs调用V8的libuv中的uv_fs_open,绑定JS的callback到一个c的函数指针上,然后推入事件列表队列(QueueUserWorkItem),再根据操作系统,Windows下使用IOCP来完成异步IO,*NIX上使用libev来实现。说明Node.js从上层到V8是单线程,从libuv到IOCP或者libev是多线程IO读写

    2. 说一下JavaScript几种异步方法和原理?
      基础问题……先说callback function,说明问题,再讲Promise,包括Promise的原理和实现。然后还有co,利用generator和yield来实现异步控制,顺便也提到了async和await(虽然ES7还是没有加……简直服了),介绍一下使用经验,差不多了。

    3. 介绍一下Session和Cookie?
      不用解释了吧……服务端随机分一个SessionID然后HTTP字段Set-Cookie,内存存一个Map -> 浏览器存Session,以后请求都带Cookie字段(值为SessionID) -> 服务端看到Cookie字段,读SessionID对应的Map,执行逻辑。

    4. 前端方面,说明addEventListener使用?作用域?
      其实问的是如何给一个链接上鼠标事件,先说addEventListener。再追问说,现在IE8和Chrome不一致,IE的addEventListener绑定是window,而标准是document,如何设计一个库来兼容避免对window的污染?
      然后讲解首先库要做成一个全局匿名闭包,接受一个listener来处理作为执行函数,然后要把window.document保留为内部的变量,然后把listener的this域换位这个闭包的this,就是大概这样?由于不怎么写前端可能是错的……

    
        
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
        
    ( function myAddEventListener(type, listener) {
    var document = window.document;
    var that = this;
    if (IE) {
    attachEvent.bind(that);
    attachEvent(type, listener);
    } else {
    addEventLisener(type, listener);
    }
    })();
    1. 谈谈冒泡和捕获事件的区别,应用?
      就是Event捕获顺序,前者从底向上,后者从顶向下,说明可以stopPropagation,大家都会……

    然后就没了,最终谈了谈阿里对实习生要求不高,正式校招实习生只有免笔试的优惠,还得面试一轮,不过也觉得可以了。还知道内推是默认团队的,除非再人事申请,公开实习可以选择意向。HR面还没有,基本上没有意外一般不会又问题。

    总结

    前端工程师还是老老实实干前端吧,我这个面试经历算是特例。其实选择前端是因为阿里的后台开发只有Java岗位,而且都会考很多J2EE的东西(Servlet,SSH,设计模式,中间件,JavaBean什么的)感觉很不喜欢(毕竟是实习,想做一点感兴趣的东西),iOS开发也只要OC而且难度很高。其他公司倒有投后台和iOS的,基本上感觉以后还是很大可能搞iOS了。

    其实如果真想毕业找工作,大三下之前就最好决定自己方向(或者一个可选),不要技能栈拉太长,导致深度不够,这是很重要的。面试经历,基本上不准备不太可能(我这是特例……),多刷点简单OJ题(实习面试coding一般很简单),对一些框架,技术原理性要掌握(不一定实践过),项目要写的话一定确保自己还有印象,比较熟悉,不然被问到就很麻烦,基本上这样了。

    关于Fundebug

    Fundebug专注于JavaScript、微信小程序、微信小游戏,Node.js和Java实时BUG监控。
    自从2016年双十一正式上线,Fundebug累计处理了5亿+错误事件,得到了众多知名用户的认可。

    展开全文
  • 10个常见的Node.js面试题

    千次阅读 2016-05-25 11:38:58
    本文就为你罗列了10个常见的Node.js面试题,分别考察了Node.js编程相关的几个主要方面。  在进入正文之前,需要提前声明两点: 这些问题只是Node.js知识体系的一个局部,并不能完全考察被面试者的实际开发...
  • 15 个常见的 Node.js 面试问题及答案

    千次阅读 2021-02-17 14:40:00
    点击上方“逆锋起笔”,公众号回复编程资源 领取大佬们推荐的学习资料 作者|Juan Cruz Martinez 来源|前端之巅 译者|吴留坡 临阵磨枪,不快也光。对于成功的编程面试来说,...
  • node.js面试题总结

    2019-12-11 15:47:25
    1. Node.js是什么? Node.js是服务器端脚本,用于构建可伸缩程序。 它是基于Google Chrome的JavaScript引擎构建的Web应用程序框架。 它在Mac OS,Windows和Linux上的Node.js运行时内运行,无需更改。 此运行时可以...
  • Node.js面试真题)

    2021-07-27 22:09:14
    ★★★ 如何使用原生 Node.js 操做 cookie? ★★ 什么是 Node.js?我们在哪里使用它? ★★ 为什么要使用 Node.js? ★★★ Node.js 有哪些特点? ★★★ setImmediate 和 setTimeOut 区别在哪里? ★★★ 如何...
  • node.js面试题

    2018-09-23 21:55:01
    一、什么是 错误优先的回调函数(error-first callback) ? error-first callback 用来传递错误和数据。...三、Node程序如何监听80端口? 这有陷阱!在类Unix系统中你不应该尝试去监听80端口,因为这需要超...
  • node.JS 常见面试题

    2018-05-26 17:10:32
    node.js是一款基于浏览器的Js运行平台,内置V8引擎,高效
  • Node.JS面试题

    千次阅读 2018-05-26 17:10:43
    Node.js面试题列表什么是错误优先的回调函数?如何避免回调地狱?如何用Node来监听80端口?什么是事件循环?哪些工具可以用来保证一致的编程风格?运算错误与程序员错误的区别?使用NPM有哪些好处?什么是stub?举个...
  • 1、Node模块机制 1.1 请介绍一下node里的模块是什么 Node中,每个文件模块都是一个对象,它的定义如下: function Module(id, parent) { this.id = id; this.exports = {}; this.parent = parent; this....
  • 2019 Node.js 面试题

    千次阅读 2019-09-17 16:52:45
    NODE.JS 同步和异步有何区别? 答:同步:指发送一个请求,需要等待返回,然后才能够发送下一个请求,有等待过程(在一个任务进行中时不能开启其他的任务)。 异步:指发送一个请求,不需要等待返回,随时可以再发送下...
  • Node.js面试题总结

    2018-07-29 18:36:59
    js继承实现备用
  • 前端Node.js面试题

    千次阅读 2021-11-08 11:43:38
    Node.js 是一个开源与跨平台的 JavaScript 运行时环境。在浏览器外运行 V8 JavaScript 引擎(Google Chrome 的内核),利用事件驱动、非阻塞和异步输入输出模型等技术提高性能。我们可以理解为:Node.js 就是一个...
  • // [ 1, 2, 3, 4 ] 举一反三 var arr = [10, 18, 0, 10, 42, 23] arr = arr.map(parseInt) console.log(arr) // [ 10, NaN, 0, 3, NaN, 13 ] [参考] 透过网红面试题,超级详细的解析parseInt,学不懂找我

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,509
精华内容 7,003
关键字:

node.js面试题