前端译趣我爱编程

JS开发者应该知道的10道面试题

2018-05-31  本文已影响42人  linc2046
JS开发者应该知道的10道面试题

1. 请说出对JS开发者有用的两种编程范式?

JS 是一种多范式编程语言,支持声明式/过程式编程和面向对象编程、函数式编程。

JS通过原型继承实现OOP。

正解

错解

2. 什么是函数式编程?

函数式编程通过组合数学函数来组织程序,会避免共享状态和可变数据。

Lisp语言,创建于1958年,是第一个支持函数式编程的语言,主要来源于lambda算式。

Lisp和Lisp家族语言至今仍在广泛使用。

函数式编程是JS的基础概念,ES5版本JS已经加入很多函数工具。

正解

错解

3. 类继承和原型继承的区别?

类继承是指通过实例继承类,类似蓝图-类的描述。

创建具有子父类关系,分层类。

实例通过new关键字调用构造函数进行类实例化。

类继承可以不用ESclass关键字实现。

原型继承是指实例直接指向某些对象,实例通过调用工厂函数或Object.create方法生成。

实例可以从多个不同对象组合而来,允许简单选择性继承。

JS中原型继承比类继承更灵活

正解

错解

4. 函数式编程和面向对象编程的优劣

OOP优点:

OOP缺点:

FP优点:

FP缺点:

正解

错解

5. 类继承的合适场景?

答案是否或几乎不用,显然不包含一层的情况,多层类体系是一种反模式。

如果功能有时有用,有时危险,如果有更好的选择,那就一直用最佳方案。-JS大牛-Douglas Crockford

6. 原型继承的合适场景?

原型继承实现不只一种:

代理,如,原型链

合并,如, 混合 Object.assign

函数型,创建维护私有状态或封装的闭包

每种类型的原型继承都有其本身使用场景, 但所有都支持十分有用的组合功能,会创建存在有A或使用A、能执行A这些关系,相反,类继承会创建是否A。

正解:

错解:

7. 如何理解优先选择对象组合而不是类继承

这句话引自设计模式:可重用面向对象软件方法一书,

它的含义是代码重用应该通过组装微型功能单元成新对象而不是继承并创建类层次。

正解:

错解:

8. 什么是双向绑定和单向数据流,他们的异同?

双向数据绑定意味着UI界面字段会动态绑定到模型数据,当界面字段变化时,模型数据也会变化,反之亦然。

单向数据流意味着模型成为单一来源。

UI变化向模型传递触发用户动作的消息, 例如,React中的store。

只有模型有权限改变应用状态。

数据总是单向流动,让人很容易理解。

单向数据流是明确的,然后双向数据绑定会带来副作用,导致复杂和难以理解。

正解:

错解:

9. 什么是异步编程? 为什么在JS如此重要?

同步编程意味着拦截条件和函数调用,代码自上而下线性执行,网络请求和磁盘IO会等耗时任务会被阻塞。

异步编程意味着,引擎以事件循环方式运行,当需要进行阻塞操作时,请求发出,代码继续执行无需阻塞结果。

当响应可用时,中断消息触发,调用对应的事件处理器,传递结果,整个控制流会继续进行。

这种情形下,单一程序线程可以处理处理多个并发操作。

用户交互本身就是异步,需要花大量事件等待用户输入,然后打断事件循环,触发事件处理。

Nodejs默认异步,服务端也是这样工作,在循环中等待网络请求,第一个请求处理时也继续接

收更多新请求。

异步在JS中很重要,因为天生适合用户交互代码,对于服务端性能也有用。

正解:

错解:

译者注

上一篇 下一篇

猜你喜欢

热点阅读