面向初学者和有经验的前 21 名 MEAN Stack 开发人员面试问题和答案

已发表: 2020-03-09

随着数字化在现代行业中越来越受欢迎,公司和品牌都渴望投资于快速、动态和高效的网站和应用程序。 然而,开发技术的广泛可用性和可访问性使得为 Web 应用程序开发选择正确的技术变得具有挑战性。 虽然全栈、前端和后端开发一直走在 Web 开发的前沿,但一颗新星正在形成——MEAN 堆栈。

本质上,MEAN 堆栈是一种开源技术,包括四种基于 JavaScript 的技术,包括 MongoDB、ExpressJS、AngularJS、Node.js (MEAN)。 通过学习和掌握 MEAN 堆栈,您可以享受大量用于开发 Web 应用程序和动态网站的域的好处。

阅读:全栈开发人员面试问题

由于对 MEAN Stack 开发人员的需求正在稳步增长,在这篇文章中,我们将讨论最常见的 MEAN 堆栈面试问题。

所以,事不宜迟,让我们直接进入吧!

顶级 MEAN Stack 开发人员面试问题和答案

1. MongoDB的目的是什么?

MongoDB 是一个面向文档的数据库管理器,专为存储大量数据而设计。 它以二进制 JSON 格式保存数据,并实现了收集和文档的概念。 MongoDB 是一个跨平台的 NoSQL 数据库,具有高性能、高可扩展性和灵活性,可实现无缝查询和索引。

学习构建 Swiggy、Quora、IMDB 等应用程序

2. ExpressJS 的目的是什么?

ExpressJS 是一个 Web 应用程序框架,旨在支持和托管 Node.js 项目。 它是一个在 MIT 许可下可用的开源框架。 ExpressJS 管理前端和数据库之间的工作流程,并促进数据的平稳和安全传输。 它拥有出色的错误处理和网页设计功能,可优化网页开发过程。

3. AngularJS 的用途是什么?

AngularJS 是由 Google 维护的开源前端 Web 应用程序开发框架。 它允许 Web 开发人员使用 HTML 作为他们的模板语言并扩展 HTML 语法以清晰准确地表示 Web 应用程序的组件。

4、Node.js的作用是什么?

Node.JS 是一个开源、跨平台、单线程的 JavaScript 框架,用于开发服务器端和网络应用程序。 它是 MEAN 堆栈的支柱。 除了 JavaScript,Node.js 还使用 C 和 C++ 编程语言。 Node.js 配备了一个集成的 Web 服务器,有助于顺利部署 MongoDB 数据库及其云应用程序。

5、Node.JS开发常用的IDE有哪些?

可用于 Node.JS 开发的最流行的 IDE 包括:

  • 原子
  • 云9
  • 科莫多 IDE
  • JetBrainsWebStorm
  • JetBrains IntelliJ IDEA

6. 什么是猫鼬?

Mongoose 是一个对象文档映射器 (ODM),这意味着通过使用 Mongoose,您可以定义具有强类型模式的对象,该模式可以进一步映射到 MongoDB 文档。 它为建模应用程序数据提供了基于模式的解决方案。 Mongoose 带有内置的类型转换、验证、查询构建、业务逻辑挂钩以及更多开箱即用的功能。

阅读:全栈和平均栈开发的区别

7. 定义数据建模?

数据建模是在 Mongoose 和 MongoDB 的上下文中使用的术语。 顾名思义,数据建模是指为手头的数据创建数据模型以便可以将其存储在数据库中的过程。 数据模型是数据对象、不同数据对象之间的关系以及定义这些关系的规则的概念表示。

数据建模有助于直观地表示数据,同时还可以对数据执行业务规则、法规遵从性和政府政策。 实施它是为了确保命名约定、默认值、语义、安全性和数据质量的一致性。

8. Node.Js 中的 REPL 是什么?

REPL 或“Read Eval Print Loop”是一个简单的程序,它可以接受命令、评估它们并打印结果。 REPL 所做的是创建一个类似于 Unix/Linux shell 或 Window 控制台的环境,您可以在其中输入命令和系统,它会响应输出。 以下是 REPL 执行的功能:

  • READ - 这会读取用户提供的输入,将其解析为 JavaScript 数据结构,并将其存储在内存中。
  • EVAL——执行数据结构。
  • PRINT - 这将打印评估命令后生成的结果。
  • LOOP——循环上面的命令,直到用户按下 Ctrl+C 两次。

9. 在 JavaScript 中定义范围。

在 JavaScript 中,每个函数都有一个作用域,它本质上是变量和规则的集合,定义了它们的唯一名称如何访问这些变量。 您只能通过该函数内的代码访问函数的作用域变量。 虽然包含在特定范围内的变量必须具有唯一的名称,但一个范围可以存在于另一个范围内。 在这种情况下,最内层作用域的代码可以访问任一作用域中包含的变量。

10. 说明线性搜索和二分搜索的区别。

线性搜索会一个一个地考虑列表的项目,而不需要跳转序列。 因此,就复杂性而言,它被归类为 O(n) 搜索,其中搜索列表所花费的时间与列表的增加成正比。 与此相反,二分查找从列表的中间开始。 此搜索旨在查看项目值是否大于或小于所需值。

这进一步确定了值在列表中的位置——它是在列表的第一部分还是第二部分。 就复杂性而言,它被归类为 O(log n) 搜索,其中搜索操作的数量增长比列表相对缓慢。 这主要是因为搜索空间在每次操作中都被分成了一半。

虽然二进制搜索要求您首先对输入数据进行排序,但线性列表没有任何此类先决条件。

11.突出Node.js、AJAX和jQuery之间的区别。

Node.js、AJAX 和 jQuery 都是 JavaScript 的高级实现。 但是,它们之间存在相当大的差异。

Node.js 是一个服务器端平台,用于开发客户端-服务器应用程序,而 AJAX,又名异步 Javascript 和 XML 是一种客户端脚本技术,主要用于呈现页面内容而不刷新页面。 AJAX 主要用于展示动态内容。 jQuery 是一个补充 AJAX、DOM 遍历和循环的 JavaScript 模块。 它加载了许多有用的函数来帮助 JavaScript 开发。

12. 定义依赖注入。

依赖注入是一种软件设计概念,允许您以独立于任何客户端消费的方式使用或注入服务。 通过这样做,您基本上可以防止客户端在底层服务更改时修改依赖项。

依赖注入的主要目的是将客户端依赖项的创建与其行为分开,从而让您设计松散耦合的程序。 在松散耦合的程序中,组件通常使用接口定义的功能,而无需事先知道正在使用哪些实现类。

依赖注入允许您通过更改实现定义应用程序功能的接口的组件来修改或调整应用程序的行为。

13. 定义容器化。

容器化是传统的基于管理程序的机器虚拟化的替代方案,涉及将应用程序封装在其自己的操作环境中的容器中。 在容器化中,不是为单个虚拟机克隆操作系统,而是由不同的容器共享。 通过在虚拟机中加载应用程序,您可以在任何合适的物理机上运行该应用程序,而无需担心依赖关系。

14. 定义一个测试金字塔。 在讨论 HTTP API 时如何实现测试金字塔?

通常,全栈 Web 应用程序庞大而复杂。 它们旨在扩展其功能,以满足数百万用户的数百种不同需求。 因此,随着全栈代码库的规模和用户数量的增长,处理错误的成本也随之增加。 但是,可以通过将测试金字塔的概念应用于您的代码库来成功缓解这种情况。

测试金字塔方法意味着一种激进的思维方式,即如何使用不同类型的自动化测试来创建平衡的投资组合。 它强调低级 UnitTest 的数量应该比通过 GUI 运行的高级 BroadStackTest 多得多。

在讨论 HTTP API 时,您可以按照以下提到的步骤来实现测试金字塔:

  • 为您的模型结合大量低级单元测试。
  • 减少用于确定模型如何相互协作的连接测试。
  • 减少用于测试真正 HTTP 端点的确认测试。

15. 索引在 MongoDB 中的作用是什么?

在 MongoDB 中,索引用于支持和促进查询的高效执行。 如果没有索引,MongoDB 必须执行集合扫描,其中它必须扫描集合中的每个文档并选择与查询语句匹配的适当文档。 但是,如果每个查询都有一个适当的索引分配给它,MongoDB 可以使用该索引来限制它必须检查的文档数量。

16. TypeScript 中的类和接口有什么区别?

类和接口是促进面向对象编程和 TypeScript 类型检查的结构。 类是一个蓝图,您可以从中创建一组共享相同配置(属性和方法)的对象,而接口是一组描述对象的相关属性和方法。 但是,接口不提供对象的实现或初始化。

通常,类定义对象的外观和行为,因此,它通过初始化类属性和定义方法来创建和实现蓝图。 类存在于代码的所有阶段。 另一方面,接口是仅存在于 TypeScript 上下文中的虚拟结构。 TypeScript 编译器专门使用接口进行类型检查。

17. 在 TypeScript 中定义“装饰器”。

在 TypeScript 中,装饰器是指一种特殊的声明,通常附加到类声明、方法、访问器、属性或参数上。 装饰器是将其目标作为参数的函数。 它们允许您围绕目标执行运行任意代码,甚至完全用新定义替换目标。

18. Node.js 中的“回调”是什么意思?

在 Node.js 中,回调是函数的异步等价物。 Node.js 严重依赖在给定任务的高潮或完成时调用的回调。 例如,假设一个为读取文件而设计的函数可以开始读取文件并立即将控制权返回给执行环境,以方便执行下一条指令。

一旦文件 I/O 完成,回调函数就会启动并将文件内容作为参数传递。 这确保没有阻塞或等待文件 I/O。 正是这一特性使 Node.js 具有高度可扩展性,因为它可以处理大量请求而无需等待任何函数的结果。

所有 Node API 的编写方式都可以支持回调。

19. 定义跨站脚本(XSS)。

跨站脚本 (XSS) 是一种客户端代码注入攻击,其中恶意脚本通过在合法网页或 Web 应用程序中包含恶意代码在 Web 浏览器中执行。 当个人单击可以将 cookie 和其他敏感信息传递给攻击者的不受信任的链接时,也会发生这种情况。

当您访问执行恶意代码的网页或 Web 应用程序时,就会发生攻击。 因此,网页或网络应用程序成为向用户浏览器传递恶意脚本的工具。

跨站点脚本攻击最常用的工具是论坛、留言板,甚至是鼓励用户发表评论的网页。

20. 定义 AOT 并提及它的好处。

Angular 应用程序包含 HTML 模板以及标准组件。 由于浏览器无法直接理解这些组件和 HTML 模板,因此必须先编译 Angular 应用程序,然后才能在浏览器中运行它们。

Angular 提前 (AOT) 编译器在构建阶段将 Angular HTML 和 TypeScript 代码转换为 JavaScript 代码,然后浏览器才能下载和运行代码。 通过在构建阶段编译 Angular 应用程序,您可以鼓励在浏览器中更快地启动 Angular 应用程序。

使用 AOT 编译器的好处是:

  • 通过使用 AOT,浏览器可以下载应用程序的预编译版本。 浏览器下载可执行代码,以便它可以立即渲染 Angular 应用程序,而无需等待应用程序首先编译。
  • 多亏了 AOT,编译器将外部 HTML 模板和 CSS 样式表内联到应用程序 JavaScript 中,从而消除了对源文件的单独 AJAX 请求。
  • 在构建阶段本身,AOT 编译器会检测并报告任何模板绑定错误。
  • 由于 AOT 在将 HTML 模板和组件提供给客户端之前将其编译为 JavaScript 文件,因此不再需要读取模板,甚至没有风险的客户端 HTML/JavaScript 评估。 这减少了注入攻击的可能性。

21. CSS 中的网格系统是什么?

在 CSS 中,网格系统是一种用于以一致且易于管理的方式垂直和水平堆叠内容的结构。 网格系统有两个核心组件——行和列。 一些最常用的网格系统包括 Simple、Pure、Flexbox、Bootstrap 和 Foundation。

结论

这是我们的顶级 MEAN 堆栈开发人员面试问题和答案列表。 我们希望这可以帮助您完成下一次 MEAN 堆栈面试!

掌握全栈语言和工具对于成为一个普通的堆栈开发人员很重要。 成为一名全栈开发人员的旅程充满挑战,但也很有意义。 创造性和财务机会真正使这成为最好的职业之一,一个人有追求它的热情。 如果您热衷于创建智能聊天机器人、金融科技钱包等,请查看 upGrad 的全栈软件开发 PG 课程。

踏上梦想的工作

升级和 IIIT-BANGALORE 的软件开发 PG 文凭
了解更多