Skip to content

Latest commit

 

History

History
43 lines (38 loc) · 3.39 KB

project.md

File metadata and controls

43 lines (38 loc) · 3.39 KB

工程化面试题

1. 什么是函数式编程?

  • 函数式编程是声明式编程的一部分。javascript中的函数是第一类公民,这意味着函数是数据,你可以像保存变量一样在应用程序中保存、检索和传递这些函数。
  • 函数式编程有如下核心概念:
  1. 不可变性(Immutability)
  • 不可变性意味着不可改变。 在函数式编程中,你无法更改数据,也不能更改。 如果要改变或更改数据,则必须复制数据副本来更改。Object.assign
  1. 纯函数
  • 纯函数是始终接受一个或多个参数并计算参数并返回数据或函数的函数。 它没有副作用,例如设置全局状态,更改应用程序状态,它总是将参数视为不可变数据。
  1. 数据转换
  • 例如map、filter、reduce方法,所有这些函数都不改变现有的数据,而是返回新的数组或对象。
  1. 高阶函数
  • Array.map,Array.filter和Array.reduce是高阶函数,因为它们将函数作为参数。
  1. 递归
  • 递归是一种函数在满足一定条件之前调用自身的技术。
  1. 组合
  • 在React中,我们将功能划分为小型可重用的纯函数,我们必须将所有这些可重用的函数放在一起,最终使其成为产品。 将所有较小的函数组合成更大的函数,最终,得到一个应用程序,这称为组合。

2. npm包版本号规范?

  • 主版本号:当你做了不兼容的 API 修改,
  • 次版本号:当你做了向下兼容的功能性新增,
  • 修订号:当你做了向下兼容的问题修正。

3. 谈谈浏览器兼容策略?

  • 渐进增强: 保证低版本浏览器的体验,对于支持新特性的新浏览器提供稍好的体验。
  • 优雅降级:为现代浏览器提供最好的体验,而旧浏览器则退而求之次,保证大概的功能.

4. 进程与线程的区别

  • 进程是cpu资源分配的最小单位(是能拥有资源和独立运行的最小单位)。
  • 线程是cpu调度的最小单位(线程是建立在进程的基础上的一次程序运行单位,一个进程中可以有多个线程)
  • 它们的区别如下:
  1. 地址空间:同一进程的线程共享本进程的地址空间,而进程之间是独立的地址空间。
  2. 资源拥有:同一进程内的线程共享本进程的资源如内存、I/O、cpu等,但是进程之间的资源是独立的。
  3. 一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都会死掉,所以多进程要比多线程健壮。
  4. 线程执行开销小,但是不利于资源的管理和保护。线程适合在SMP机器(双CPU系统)上运行。进程执行开销大,但是能够很好的进行资源管理和保护。进程可以跨机器前移。
  5. 对资源的管理和保护要求高,不限制开销和效率时,使用多进程。要求效率高,频繁切换时,资源的保护管理要求不是很高时,使用多线程。

5. javascript的事件循环?

  • 执行一个宏任务(栈中没有就从事件队列中获取)
  • 执行过程中如果遇到微任务,就将它添加到微任务的任务队列中
  • 宏任务执行完毕后,立即执行当前微任务队列中的所有微任务(依次执行)
  • 当前宏任务执行完毕,开始检查渲染,然后GUI线程接管渲染
  • 渲染完毕后,JS线程继续接管,开始下一个宏任务(从事件队列中获取)