南京嗯哇科技面经

#面试

1.自我介绍

2.算法题

  • 实现树结构数据平铺到一个新数组
    • 递归/迭代
  • 一个长度为10000的数组,取最小值
    • 数据量的问题

3.实现响应式布局有哪几种方法

  • flex+百分比
  • rem em 移动端
  • 媒体查询

4.vw vh rem em什么区别

  • vw vh根据窗口大小变化
  • rem根据根元素设置的元素大小变化
  • em根据父元素设置的元素大小变化

5.项目用到了unocss,说一下原子化css

6.乾坤框架

  • 微前端
  • 模块化开发
  • 共享组件
  • 性能优化
  • 路由管理

7.element-ui 没有虚拟滚动,数据量大的时候你是怎么处理的

  • 分页加载
  • 使用虚拟列表组件
  • 虚拟滚动,只渲染当前用户可见的页面
    • 计算可见区域
    • 只渲染可见项
    • 重用列表项: 当用户滚动时,更新可见区域内的列表项的数据,而不是创建新的DOM元素。
    • 加载更多数据: 如果是分页加载,当用户滚动到列表底部时,加载下一页的数据并更新可见区域。

8.你用别人的组件,别人已经封装的组件没有你要的prop,你如何给他加上你要的属性

  • $set

9.组件未显式地声明prop属性是如何透传的

  • 使用$attrs接受

10.vben的封装组件的封装和hooks的封装

11.vben使用起来感觉

12.es6语法常用的语法

13.你最常用的Promise类方法

14.vue2和vue3使用起来的差别

15.hooks和mixins的异同

  • 都是为了逻辑服用
  • hooks v3 mixins v2

16.vue如何实现数组的响应式追踪

  • 面试官的意思是在对象的基础上数组方法没有实现响应式,比如使用push,pop,unshift,shift等方法不回触发响应式
  • 对方法进行遍历,然后把方法添加进去

17.微任务 宏任务

    • Promise回调
    • process.nextTick
    • MutationObserver
    • setTimeout
    • setInterval

18.nextTick

  • nextTick是一个用于在DOM更新队列被刷新之后执行回调的方法。
  • alt textalt text

19.性能优化

  • 路由懒加载
  • 组件懒加载
  • 使用 keep-alive 缓存组件
  • CDN 加载 Vue 及其相关资源
  • 图片优化
  • 代码拆分(Code Splitting)
  • Tree-shaking
  • 减少重绘和重排

20.树摇的原理

  • ES6 模块系统
  • 静态分析:Tree-shaking 是通过静态分析代码来判断哪些代码是未使用的。因此,它只能处理那些在编译时就能确定的引用关系,而不考虑运行时动态生成的引用。
  • 通过工具实现:主流的 JavaScript 打包工具,如Webpack和Rollup,提供了对 tree-shaking 的支持。在配置文件中开启相应选项,这样工具就能够在打包时识别和移除未使用的代码。

21.二次封装过插件吗,自动引入的插件,如何配置plugin

22.websocket

  • WebSocket是一种在Web浏览器和Web服务器之间建立持久性连接的通信协议。与传统的HTTP通信方式不同,WebSocket允许在客户端和服务器之间实时双向通信,而无需每次通信都建立新的连接。
  • 客户端
    • 创建WebSocket对象
    • 定义事件处理函数
    • 发送消息

23.socket

24.chatgpt的通信方式

  • 开发者通过 API 密钥认证身份,以访问 ChatGPT 的服务。
  • 发送包含用户输入的文本请求到 API。
  • ChatGPT 处理请求,生成相应的文本输出。
  • 开发者从 API 接收模型生成的文本响应。

25.说下大文件流下载

  • 对文件进行切割
  • Blob
    • 发送网络请求获取要下载的内容
    • 把内容传入Blob实例
    • 创建下载链接

26.说一下你如何配置git规范