前端面试冲击Day1-场景题

74 阅读4分钟

df2efe9282df5b5fe43c9be0b4f7f86f.jpeg

目的记录方便自己备课,只记录了大纲,欢迎各位学习猿共同进步,也希望各位boss提供一个面试机会,感谢。

1. 函数式编程的理解?

原理、涉及、编程、优势

  • 原理:大问题拆成多个小问题,再利用函数的组合、柯里化(参数复用)、高阶函数方式解决问题。
  • 涉及:
    • 纯函数:不存在副作用,相同输入对应着相同的输出。
    • 高阶函数:值可以把其他函数作为参数的函数称为高阶函数。函数组合柯里化都是高阶函数
    • 柯里化函数:将多参数函数拆成相同参数复用的场景,成为函数柯里化。
  • 编程:
  -原函数-
      const funAdd = (p1, p2, p3) => p1 + p2 + p3;
      
      const add_1_2_3 = funAdd(1,2,3)    // 6
      const add_1_2_4 = funAdd(1,2,4)    // 7
      const add_1_2_5 = funAdd(1,2,5)    // 8
      
   -函数式编程: 柯里化方案-
      const funAdd = (p1, p2) => {
          return p3 => p1 + p2 +p3
      }
      
      const add_1_2 = funAdd(1,2) // p3 => p1 + p2 + p3 
      
      add_1_2(3)  // 6
      add_1_2(4)  // 7
      add_1_2(5)  // 8
      
    -函数式编程: 高阶函数方案-
      const funAdda = (p1, p2) => p1 + p2
      
      funAdda(funAdda(1, 2), 3) // 6
  • 优势:
    • 方便测试
    • 方便复用
    • 减少bug

2. 前端水印的了解?

方法、优缺点、涉及

  • 方法:

    • dom覆盖:获取图片位置及像素大小,遍历创建水印内容添加到父元素上。
    • canvas:创建canvas画布,添加文案,输出为图片并设置成图片的背景图,全部填充。
    • svg:svg比canvas兼容性好,具体实现方式待学习
  • 优缺点:

    • 安全性低,对于前端人员只要通过开发者工具去掉对应元素就行,可以通过监听dom api变化实现再次添加水印,或者轮询判断添加定时器。
  • 涉及:

    • 隐形水印,待学习。

3. 针对请求失败弹出toast? 如何处理指弹出一个。

方法

  • 方法:
    • 全局定义一个变量用来记录当前是否存在toast,在各自请求中处理错误,弹出前查看变量是否弹toast。
    • 统一处理错误,在响应拦截器中或者另外定义一个函数处理。
    • 若是一个请求的多次执行,还可以使用promise.all()和防抖或者截流进行处理,防止短时间内多次进行错误弹出toast。

4.如何实现pdf文件预览。

方法

  • 方法:
    • 利用第三方存储,如腾讯、阿里等。
    • 存储服务器,暴露出地址。
    • 利用预览插件,pdf.js等。

5.px如何自动转为rem?

方法

  • 方法:
    • 利用工程化工具提供的配置,如webpack和vite提供的配置
    • 在根路径下配置一个css预处理器转换函数,后续定义变量大小均使用该函数

6. 如何实现修改一个npm包?

方法步骤

  • 步骤1: 确保本地项目已经安装了对应的npm包
  • 步骤2: 将对应的依赖源码复制到本地项目目录下面,并修改package.json对应依赖地址。相当于依赖包来源不再是node_modules,而是本地目录。
  • 步骤3: 按照自己的需求修改对应代码。
  • 步骤4: 按照项目实际情况,发布依赖到npmjs还是公司私域下面。
  • 步骤5: 调整回package.json。

7. 前端跨页面通信有哪些?

不同方法

  • 方法1: url传参
  • 方法2: localStorage或者sessionStorage传参。
  • 方法3: cookies传参
  • 方法4: websocket传参

8. 如何拦截web应用的请求?

方法

  • 方法1: 在对应的请求前自定义拦截处理。
  • 方法2: 利用浏览器的监听进行拦截 server.worker。
  • 方法3: 第三方请求包提供的请求拦截器,如axios。

9.SPA项目首页加载慢怎么解决?

原因、解决方案

  • 原因
    • 网络问题
    • 静态资源过大
    • 资源重复加载
    • 脚本阻塞
  • 解决方案
    • 静态资源本地缓存
    • UI框架要按需加载
    • 首页资源减少
    • 资源大小压缩

10.vue中为什么v-if的元素不建议使用v-for?

原因

  • 原因1: 在vue源码当中v-for的优先级高于v-if,所以说v-if是否为false,都会进行v-for渲染。
  • 原因2: vue存在会根基的diff算法会根据key不变不再重新渲染机制,所以在v-if变为true,但是v-for的key不变情况下,可能出现意料之外的情况。

11. css 命名冲突和样式覆盖怎么解决?

方案

  • 方案1: 命名空间,定制规则增加命名前缀
  • 方案2: 命名规范,快+元素+修饰符, buttom__icon--big
  • 方案3: css预处理器,利用层级、变量、函数等
  • 方案4: css-in-js