node.js试题

1、Node是什么?(转自:https://blog.csdn.net/m0_37938910/article/details/103673105)

Node.js 就是运行在服务端的 JavaScript。

Node.js不是一种独立的语言,也不是一个JavaScript的框架,Node.js只是一个让JavaScript运行在浏览器之外的平台。它采用事件驱动、异步编程、为网络服务而设计,实现了诸如文件系统、模块、包、操作系统 API、网络通信等 Core JavaScript 没有或者不完善的功能。

Node能做什么?

● 具有复杂逻辑的网站

● 基于社交网络的大规模web应用

● web Socket网站

● TCP\UDP套接字应用程序

● 命令行工具

● 交互式终端程序

● 带有图形用户界面的本地应用程序

● 单元测试工具

● 客户端Javascript编译器

Node的特点

node最大的特点是采用异步式I\O与事件驱动

异步式 I/O 与事件驱动
Node.js 使用的是单线程模型,对于所有I/O都采用异步式的请求方式,避免了频繁的上下文切换。Node.js 在执行的过程中会维护一个事件队列,程序在执行时进入事件循环等待下一个事件到来,每个异步式 I/O 请求完成后会被推送到事件队列,等待程序进程进行处理。

Node的异步机制是基于事件的,所有的磁盘I/O,网络通信,数据库差选都是以非阻塞的的方式来请求,返回的结果有事件循环来处理,如图所示
在这里插入图片描述

Node.js 进程在同一时刻只会处理一个事件,完成后立即进入事件循环检查并处理后面的事件。这样做的好处是,CPU和内存在同一时间集中处理一件事,同时尽可能让耗时的I/O操作并行执行。对于低速连接攻击,Node.js只是在事件队列中增加请求,等待操作系统的回应,因而不会有任何多线程开销,很大程度上可以提高 Web 应用的健壮性,防止恶意攻击。

最重要的是:Node中的js不需要考虑浏览器的兼容问题!

2、Node与PHP、Java的区别

PHP 和 Node.js 的基本区别在于 PHP 是一种编程语言,Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。

性能:

由于 Node.js 遵循事件驱动的非阻塞I/O模型,与传统的后端技术相比,Node.js 能够处理大量的服务器请求。PHP 遵循一个阻塞模型,其中在服务器端创建多个线程来处理多个客户端请求,如果代码没有被优化,它会导致高服务器负载和响应时间。

托管和部署:

PHP 应用程序可以在包括 Nginx 和 Apache 以及 Windows 和 Linux 平台在内的任何服务器上运行,这使得部署过程变得更容易,而 Node.js,则需要具有 SSH 访问权限的虚拟服务器。因此,在没有任何控制台命令和 Secure Shell(SSH)知识的情况下,用 PHP 部署小型企业和个人应用会更好。

外部依赖:

Node.js 依赖关系较少,用几行代码就可以设置一个 Web 服务器。但运行 PHP 应用程序,就需要外部服务器软件。用 Node.js 的开发人员只需要 NPM(节点包管理器)就可以下载 Node 模块,这些模块可以轻松地集成到应用程序中,提供额外的功能。

CPU 扩展任务:
Node.js 可能在高吞吐量方面表现优异,但是当应用程序繁重,需要 CPU 做大量工作时,Node.js 肯定会有所欠缺。在这种情况下,PHP 最适合做 Web 应用程序的后端。

相似的情况在比较或选择用于 Web,桌面和移动开发的其他技术时。Node.js 有前途,并且肯定会占据PHP市场的一部分,但是不能完全取代 PHP。

Node.js和java之间:

1、Node.js可以说是动态语言,java是静态语言(不能改变它的类型的语言,是静态语言;能够随时改变它的类型的语言,是动态语言),要到运行时才知道类型错误,测试就得些的更好更详细。

2、前者解释型语言, 编写的程序不需要编译。解释型语言在运行的时候才翻译, java编译型语言, 写的程序执行之前,需要一个专门的编译过程,把高级语言翻译成机器语言(解释型语言的特点是,跨平台、知识产权保护性弱、运行效率低, 编译型语言特点与解释型语言相反)

3、语法方面node.js比Java更简洁,干净。

4、javascript支持函数作为参数,java得搞一个类。

5、node相对java学习学习曲线低,前后端语言统一方便技术交流提升。

6、node开发快,java开发慢,但是如果项目大、复杂的话,用java就不容易乱,管理起来比node.js简单。

3、同步和异步区别(转自:https://blog.csdn.net/singit/article/details/47724303)

他们最大的区别:同步需要等待,而异步无需等待。

同步是按顺序执行,执行完一个再执行下一个,需要等待、协调运行。

异步就是彼此独立,在等待某事件的过程中继续做自己的事,不需要等待这一事件完成后再工作。

例子:

普通B/S模式(同步)AJAX技术(异步)

同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干别的事。

异步: 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕。

``
线程就是异步实现的一个方式。

异步是让调用方法的主线程不需要同步等待另一线程的完成,从而可以让主线程干其它的事情。

异步和多线程并不是一个同等关系,异步是最终目的,多线程只是我们实现异步的一种手段。

异步是当一个调用请求发送给被调用者,而调用者不用等待其结果的返回而可以做其它的事情。

实现异步可以采用多线程技术或则交给另外的进程来处理。

``
同步可以避免出现死锁,读脏数据的发生。

一般共享某一资源的时候用,如果每个人都有修改权限,同时修改一个文件,有可能使一个人读取另一个人已经删除的内容,就会出错,同步就会按顺序来修改。

但是,同步需要等待资源访问结束,浪费时间,效率低。

异步则可以提高效率。

现在cpu都是双核,四核,异步处理的话可以同时做多项工作,当然必须保证是可以并发处理的。

但是安全性较低。

3、判断文件夹下文件状态

fs.readdir(__dirname,(err,files)=>{  //读取当前目录下所有文件
    if(err) throw err;
    for(let i in files){//遍历所有文件
        fs.stat(files[i],(err,stats)=>{//判断当前文件的状态
        //如果是文件就输出文件名是文件,如果是文件夹就输出文件夹名是文件夹
            stats.isFile()?console.log(`${files[i]}是文件`):console.log(`${files[i]}是文件夹`);
        })
    }
});

在cmd中输入node fs.js运行创建的js文件,会输出如下内容:
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值