字节跳动-抖音直播-前端一面

14 天前(已编辑)
/ , ,
12

字节跳动-抖音直播-前端一面

📚 八股

1. 自我介绍

  • 简要介绍了个人的背景、技术栈、项目经历。

2. 移动端做过哪些优化?

  • 优化了应用的启动速度、内存使用和性能问题,使用了懒加载、图片懒加载、按需加载等技术来减少页面渲染时间。
  • 针对不同设备做了适配优化,使用了响应式设计和媒体查询。

3. 隐藏一个元素有哪些方法?有什么不同?

  • display: none:元素完全从文档流中移除,不占据空间。
  • visibility: hidden:元素仍占据空间,只是不可见。
  • opacity: 0:元素不可见,但仍占据空间并可交互。
  • position: absolute; left: -9999px:将元素移出视口,仍然占据空间。

4. Sass 是什么?和 CSS 比有什么优势?Sass 是怎么编译成 CSS 的?

  • Sass 是一种 CSS 预处理器,提供了变量、嵌套规则、混合宏等功能,使得 CSS 更加灵活和模块化。
  • 与传统 CSS 相比,Sass 更具可维护性和可扩展性。Sass 编译成 CSS 是通过 Sass 编译器,将 .scss.sass 文件转换成标准的 .css 文件。

5. JS 是一门怎么样的语言?

  • JavaScript 是一门动态类型、基于原型的脚本语言,主要用于客户端脚本和前端开发。支持事件驱动、异步编程和闭包等特性。

6. 说一下对闭包的理解

  • 闭包是 JavaScript 中的一个重要概念,指的是一个函数和它的词法作用域的组合。闭包可以让函数访问外部函数的变量,即使外部函数已经执行完毕。

7. 一个闭包的输出题(搞忘了)

8. 说一下异步编程有哪些解决方案

  • 回调函数:传统的异步解决方案,但容易出现回调地狱。
  • Promise:改进了回调函数的使用,支持链式调用,解决回调地狱问题。
  • async/await:基于 Promise 的语法糖,使异步代码更加简洁易读。

9. Promise.all 的实现口述,reject 的错误是什么

  • Promise.all 会并行执行多个 Promise,当所有 Promise 都成功时,返回一个包含所有结果的数组;如果有任何一个 Promise 被拒绝,Promise.all 会立即返回失败,并带有拒绝的错误信息。

10. 浏览器打开一个 tab 的有哪些进程?

  • 浏览器进程、渲染进程、GPU 进程、插件进程等,每个进程独立运行以保证稳定性和性能。

11. HTTP 的请求方法有哪些?详细讲一下

  • GET:请求指定资源。
  • POST:向指定资源提交数据。
  • PUT:更新指定资源。
  • DELETE:删除指定资源。
  • PATCH:部分更新指定资源。

12. 常见的状态码

  • 200 OK:请求成功。
  • 301 Moved Permanently:永久重定向。
  • 404 Not Found:资源未找到。
  • 500 Internal Server Error:服务器内部错误。

13. HTTP 有哪些版本?各有什么特性?HTTP2.0 的头部压缩怎么实现的?

  • HTTP/1.0:每个请求都需要建立一个新的连接。
  • HTTP/1.1:支持持久连接,减少了建立连接的次数。
  • HTTP/2:支持 multiplexing(多路复用),允许多个请求和响应通过同一个 TCP 连接传输。头部压缩通过 HPACK 算法实现。

14. 讲一下 HTTPS SSL 证书是怎么验证的

  • SSL 证书通过公钥和私钥进行加密与解密,确保数据传输的安全性。证书由受信任的证书颁发机构(CA)签发,并且包含网站的公钥。

15. 说一下 CDN 的作用和原理

  • CDN(内容分发网络)通过将静态资源缓存到离用户更近的服务器上,加速资源的加载时间。它通过负载均衡、缓存策略和智能路由等方式提高网站性能和稳定性。

16. 浏览器安全怎么保证的?网络攻击有哪些?服务区攻击缓存

  • 浏览器安全主要通过 CSP(内容安全策略)、同源策略和 HTTPS 等方式保障。常见的网络攻击有 XSS(跨站脚本攻击)、CSRF(跨站请求伪造)、DDoS(分布式拒绝服务攻击)等。

17. 用过哪些框架?为什么选择 React?

  • 介绍了常用的前端框架,如 Vue、Angular,并解释了选择 React 的原因,主要是因为 React 提供了虚拟 DOM 和组件化的开发模式。

18. 讲一下 React(直接说 React 架构了 React 设计原理里面的)

  • React 的设计原理基于声明式编程、虚拟 DOM、单向数据流等,构建组件化的 UI,提升开发效率。

19. React 16 中的时间切片是怎么实现的?(requestIdleCallback)时间切片怎么存储的?

  • React 16 引入了时间切片(Time Slicing),使得渲染过程能够被拆分成多个小任务,通过 requestIdleCallback 等 API 来在空闲时间段执行渲染,避免卡顿。

20. useState 怎么保证上个状态的?

  • useState 会返回一个函数,用来更新状态。React 会合并上一个状态和新的状态,确保状态更新过程的正确性。

21. Hooks 使用有哪些限制?

  • 只能在函数组件和自定义 Hook 中使用,不能在条件语句或循环中使用。

22. useMemouseCallback 区别

  • useMemo 用于缓存计算结果,避免重复计算;useCallback 用于缓存函数实例,避免函数引用发生变化。

23. React 项目做过哪些优化?

  • 优化了性能、代码分割、懒加载和虚拟列表等,减少了页面加载时间和渲染时间。

24. SSR 的原理和优点,SSR 造成服务器压力怎么解决?

  • SSR(服务器端渲染)可以加速首屏渲染,提高 SEO,解决了客户端渲染的性能瓶颈。通过使用 RSC(React Server Components)等技术,减少服务器压力。

🖊️ 手撕

25. 手撕:给一个递增数组 [0, 1, 2, 4, 5, 7, 11, 13, 14] 输出成 ['0->2', '4->5', '7', '11', '13->14']

function compressRange(arr) {
  let result = [];
  let start = arr[0], end = arr[0];

  for (let i = 1; i < arr.length; i++) {
    if (arr[i] === end + 1) {
      end = arr[i];
    } else {
      if (start === end) {
        result.push(`${start}`);
      } else {
        result.push(`${start}->${end}`);
      }
      start = arr[i];
      end = arr[i];
    }
  }

  if (start === end) {
    result.push(`${start}`);
  } else {
    result.push(`${start}->${end}`);
  }

  return result;
}

console.log(compressRange([0, 1, 2, 4, 5, 7, 11, 13, 14]));

使用社交账号登录

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...