1. 为什么用 Nodejs, 它有哪些缺点?
参考答案:
- 事件驱动,通过闭包很容易实现客户端的生命活期。
- 不用担心多线程,锁,并行计算的问题
- V8 引擎速度非常快
- 对于游戏来说,写一遍游戏逻辑代码,前端后端通用
当然 Nodejs 也有一些缺点:
- nodejs 更新很快,可能会出现版本兼容
- nodejs 还不算成熟,还没有大制作
- nodejs 不像其他的服务器,对于不同的链接,不支持进程和线程操作
3. Node 的应用场景
参考答案:比如:RESTFUL API、实时聊天、客户端逻辑强大的单页 APP,具体的例子比如说:本地化的在线音乐应用,本地化的在线搜索应用,本地化的在线 APP 等。
- 实时应用:如在线聊天,实时通知推送等等(如 socket.io)
- 分布式应用:通过高效的并行 I/O 使用已有的数据
- 工具类应用:海量的工具,小到前端压缩部署(如 grunt),大到桌面图形界面应用程序
- 游戏类应用:游戏领域对实时和并发有很高的要求(如网易的 pomelo 框架)
- 利用稳定接口提升 Web 渲染能力
- 前后端编程语言环境统一:前端开发人员可以非常快速地切入到服务器端的开发(如著名的纯 Javascript 全栈式 MEAN 架构)
5. 什么是 error-first callback ?
参考答案:error-first callback 用来传递错误和数据。第一个参数永远是一个错误对象(error-object),回调函数必须检查它。余下的参数用不过来传递数据。
解析:
fs.readFile(filePath, function(err, data) {
if (err) {
//处理出现错误的情况
}
//处理数据
});
考察面试者对于 Node 异步操作基本知识的见解
7. Node 程序如何监听 80 端口?
参考答案:脑筋急转弯!你不应该直接使用 Node 监听 80 端口(在*nix 系统中),这样做需要 root 权限,对于运行程序来说这不是一个好主意。
不过,你可以使 Node 监听 1024 以上的端口,然后在 Node 前面部署 nginx 反向代理。
解析:参考
8. 什么是事件循环(event loop)?
参考答案:至少从开发者的角度来看,Node.js 是单线程运行的。底层使用 libuv 使用多线程。 每一个 I/O 操作都需要一个回调,一旦操作完成会被事件循环执行
解析:参考
9. 使用什么工具检查代码风格?
参考答案:
- JSLint by Douglas Crockford
- JSHint
- ESLint
- JSCS 开发团队项目时,强制指定代码风格和使用静态分析,捕捉常见的错误,这些工具都非常有用。
12. 什么是 stub?说出他的用途?举个使用场景?
参考答案:Stubs 是模拟模块或组件行为的程序。 Stubs 提供已知的参考答案来调用函数,另外你还可以断言哪个 stubs 被调用
13. 什么是测试金字塔?在做 HTTP API 的时候要怎么实现?
参考答案:测试金字塔意思是在写测试时应该编写的底层但愿测试要多于高级的端到端测试。 对于 HTTP APIs,应该归结为:
- 对你的模型多很多单元测试
- 在你的模型与其他交互时更少的集成测试
- 更少的验收测试,在 HTTP 端
16. 对 Node 的优点和缺点提出了自己的看法
参考答案:
-
(优点)因为 Node 是基于事件驱动和无阻塞的,所以非常适合处理并发请求, 因此构建在 Node 上的代理服务器相比其他技术实现(如 Ruby)的服务器表现要好得多。 此外,与 Node 代理服务器交互的客户端代码是由 javascript 语言编写的, 因此客户端和服务器端都用同一种语言编写,这是非常美妙的事情。
-
(缺点)Node 是一个相对新的开源项目,所以不太稳定,它总是一直在变, 而且缺少足够多的第三方库支持。看起来,就像是 Ruby/Rails 当年的样子。
17. 需求:实现一个页面操作不会整页刷新的网站,并且能在浏览器前进、后退时正确响应。给出你的技术实现方案?
参考答案:至少给出自己的思路(url-hash, 可以使用已有的一些框架 history.js 等)
21. 对 Node 的优点和缺点提出了自己的看法?
参考答案:
优点:
- 因为 Node 是基于事件驱动和无阻塞的,所以非常适合处理并发请求,因此构建在 Node 上的代理服务器相比其他技术实现(如 Ruby)的服务器表现要好得多。
- 与 Node 代理服务器交互的客户端代码是由 javascript 语言编写的,因此客户端和服务器端都用同一种语言编写,这是非常美妙的事情。
缺点:
- Node 是一个相对新的开源项目,所以不太稳定,它总是一直在变。
- 缺少足够多的第三方库支持。看起来,就像是 Ruby/Rails 当年的样子(第三方库现在已经很丰富了,所以这个缺点可以说不存在了)。
22. 使用过的koa2中间件(阿里)
参考答案:
koa-router
koa-bodyparser
koa-views
koa-static
koa-jwt
koa-helmet
koa-convert
23.master挂了的话pm2怎么处理(阿里)
参考答案:
koa-router
koa-bodyparser
koa-views
koa-static
koa-jwt
koa-helmet
koa-convert
24.node文件查找优先级(宝宝树)
参考答案:
参考答案:
参考答案:
参考答案:
参考答案: