Angular 1.x 基础知识点(翻译)

原文题目:Modern Angular 1.x essential interview questions
出处:https://toddmotto.com/modern-angular-interview-questions?utm_source=javascriptweekly&utm_medium=email
翻译时长:2 hours 30 mins
审阅时长:10 min

翻译正文内容:
Angular 1.x 在 1.5 引入 .component()后改变了很多,并随之给面试带来了一片新的天地。在许多
之前职位中,我面试了关于Angular、通用JavaScript或者两种兼有的开发者。这是我关于当前Angular
1.x的面试题清单,主要关注组件架构和最佳实践。有些简单,有些困难,由你选择。

有些问题的用意在于让面试者基于他们的经验或者观点来回答。比如,“你什么时候使用X而不是Y”是一个比
“为什么X比Y要好”好的问题。这让你可以挖掘得更深,并可以在面试过程中有更好的对话,也让你能快速判断
哪个开发者更适合你。

答案并没包含,也不会包含。有部分问题是主题性,有部分鼓励你自学。如果你不知道答案,那么你可以去探索并学习。背诵将不会让你通过面试。

组件(Components)

  • 什么是组件?
  • 什么时候使用组件而不是指令?
  • 什么是组件架构?
  • 有状态组件和无状态组件的区别是什么?
  • 什么是生命周期钩子,为什么他们很重要?
  • 什么时候会考虑使用单向数据流而不是双向数据流?
  • 为什么隔离scope是一个重要概念?
  • 你是怎么描述”MVC/MVVM”?
  • MVC/MVVM和组件架构之间的区别是什么?
  • 一个组件可以接收到什么类型的绑定?
  • 你能描述不可变的数据结构吗?(immutable datastructures)
  • 给一个JavaScript中不可变的操作的例子?(an immutable operation)

状态管理和数据流(State management and dataflow)

  • 你是怎么获取数据到组件中?
  • 你是怎么从组件中获取数据?
  • 单向数据流带来的好处是什么?
  • 双向数据流带来的共通问题是什么?
  • 你是否使用过$ngRedux或者相似的实现?
  • Redux在Angular 1.x的实现带来了什么好处?

性能和调试(Performance and debugging)

  • 你能指出加快$digest周期的关键吗?
  • 使用一次绑定表达式的好处?
  • 在Angular 1.x中导致内存泄漏的原因?
  • 你是怎么加速一个ng-repeat指令?
  • track是怎么工作的?
  • $evalAsync和$applyAsync是什么?
  • $watch和$watchCollection之间有什么区别?
  • 解释一下你是怎么尝试调试一个Angular 1.x 的性能问题?
  • 你熟悉哪些调试工具?
  • 什么是strict-di模式,它是怎么影响运行时性能的?
  • 你使用什么工具让Angular运行更快?
  • 什么是$templateCache?

模块和内部(Modules and internals)

  • 一个Angular应用的关键组成部分有哪些?
  • 你是怎么描述一个模块的?
  • 子模块的应用场景有哪些?
  • 你从学习Angular源码中学到什么?
  • 你是怎么异步启动Angular?
  • 你是怎么一次启动多个应用?
  • 什么是依赖注入(DI)?
  • 为什么依赖注入在Angular很有用?
  • $digest周期是怎么工作的?
  • 什么是$rootScope,它和$scope有什么不同?
  • 你什么使用$scope.$apply,为什么?

指令(Directives)

  • 什么是指令?
  • 什么指令真正实现双向数据绑定?
  • 为什么使用ng-click而不是addEventListener?
  • 你什么问题使用addEventListener?
  • 什么是link函数,你什么使用应该使用它?
  • 你是怎么使用link函数来和控制器通信?
  • 什么样的逻辑应该在link函数中,什么逻辑应该在控制器中?
  • 什么是编译函数,它会返回什么?
  • 什么是pre和post链接周期函数?
  • 为什么compile函数比link函数更有效率?
  • 什么时候使用指令而不是组件?
  • 什么是事件指令,什么是结构指令?
  • 你在使用指令的过程中遇到过什么困难?
  • 在使用指令的时候,需要避免什么实践?
  • 指令可以收到什么类型的绑定?
  • 什么时候可以使用require,并且它能在link上带来什么效果?
  • 什么是transclusion?
  • 哪些指令特性你会建议避免?
  • 哪些指令你会趋向于避免使用,为什么?
  • 有哪些不同类型的scope?
  • 什么是JQLite,它有什么限制?

表单(Forms)

  • 你是怎么使用表达控制器来实现表单验证的?
  • dirty,pristine,touched和untouched的含义?
  • Angular 1.x 的表达有哪些局限?
  • 內建的验证工具有哪些?
  • $parsers和$formatters是什么,在什么时候该使用?
  • 什么是$validators管道,什么是该使用?
  • 什么是ngModelOptions,它是一个好的指令实现吗?

路由(Routing - ui-router 1.0.0)

  • 什么是路由?
  • 什么是组件路由?
  • 你一般在什么时候使用模板路由,如果有的话?
  • 什么是动态路由,你是怎么实现的?
  • 什么是“HTML5模式”?
  • 你是怎么实现只有在数据有效的情况才渲染一个视图?
  • 什么是过渡钩子(transition hooks),它在路由中扮演什么角色?
  • 你是怎么创建兄弟视图?

控制器(Controllers)

  • 控制器扮演的角色是什么?
  • 你是怎么将数据导入到控制器中的?
  • 什么时候使用$scope.$watch?应该吗?怎么unwatch?
  • 解释什么时候使用controllerAs,它带来的效果是什么?
  • 什么时候应该在控制器内使用$scope?
  • 什么时候应该考虑使用嵌套控制器?这是最佳实践吗?

过滤器(Filters)

  • 什么是过滤器?
  • 过滤器是怎么工作的?
  • 什么方式是性能最好的过滤数据方式,为什么?
  • 你是怎么在模板中同时使用多个过滤器?
  • 你是怎么在控制器中同时使用多个过滤器?
  • 怎么传递参数给一个自定义的过滤器?

服务和HTTP(Services and HTTP)

  • 什么是service?
  • 什么是factory?
  • 什么是provider?
  • services和factory都提倡什么设计模式?
  • 在Angular应用中,service的角色是什么?
  • $http和$resource的区别?
  • 什么时候使用$resource比$http有意义?
  • 什么是Promise?指出几个Angular使用它们的例子?
  • 什么是$q,什么时候使用?
  • 什么是http拦截器,什么是好的使用案例?
  • 你实现过哪些不同类型的认证?

事件(Events)

  • 在Angular 1.x中什么时候该使用事件?
  • $emit和$broadcast的区别?
  • $scope.$emit和$rootScope.$emit的区别?
  • 在$scope和$rootScope中对事件解绑的区别?

测试和工具(Testing and tooling)

  • 单元测试和端到端测试的不同?
  • 单元测试的工具?
  • 端到端测试的工具?
  • 你熟悉的工具?
  • 描述一下懒加载的工作原理?
  • 什么编译流程对加快Angular应用有效?
  • 你在使用ES6编译器或者TypeScript吗?
您的支持将鼓励我继续创作!
0%