【2026面试题】前端实际场景去考察原理

  1. vue组件通信中,使用eventBus时如何进行通信的,原理是什么

通信过程如下:

  • 创建事件总线:创建空的vue实例
    export const EventBus = new Vue()

  • 发送事件:EventBus.$emit('message', '来自A组件的消息')

  • 接收事件:EventBus.$on('message', (来自A组件的消息) => {})

  • 移除监听:EventBus.$off('message')
    原理:

  • 利用了 Vue 实例自带的「发布 - 订阅模式」,实现全局事件监听与触发
    emit(eventName, data) 发布:触发事件,把数据广播出去 on(eventName, callback) 订阅:监听事件,收到数据后执行回调
    $off(eventName) 取消订阅:销毁监听,防止内存泄漏

  1. 移动端的适配方案
  • rem 适配(动态根字体,等比缩放)- 往往伴随着js计算,有一定闪屏风险
  • vw/vh 适配(纯 CSS,现代首选)- 不支持极老设备(Android 4.4 以下)
  • 媒体查询响应式 - 结构差异不大的页面可用,维护起来比较麻烦
  • 百分比布局 - 字体、边框无法用百分比,复杂布局难控制
  • flex 自适应布局
  • rpx 适配(小程序专属)
  • postcss-pxtorem / postcss-px-to-viewport - 企业级项目标配,写 px → 打包自动转 rem 或 vw
  1. 移动端 1px 会变粗,解决方案?

原因:手机是高清视网膜屏(2x/3x),CSS里的 1px 会被渲染成 2 或 3 个物理像素,看起来很粗

  • border-width: 0.5px
  • transform: scaleY(0.5)
  • box-shadow 模拟:用阴影向下 / 向内扩散 0.5px 来模拟细线,兼容性非常稳(box-shadow: 0 0.01rem 0 0 #eee;)
  • svg 边框
  1. nginx反向代理为什么可以解决跨域问题

一句话核心答案:
浏览器有同源策略限制,但服务器之间没有跨域限制。
Nginx 反向代理作为中间层相当于在后端帮前端 "转发请求",让浏览器以为自己访问的是同域地址,从而绕过跨域。

  1. 在平常开发中,我们会使用脚手架,那么脚手架是如何帮你去解决跨域问题的

脚手架本质是启动了一个本地 Node 开发服务器,利用它做「反向代理」,帮前端转发请求,绕过浏览器同源策略,从而解决开发环境跨域。

也就是说,前端不直接请求后端,而是请求本地开发服务器,本地 Node 服务器匹配到 /api,转发到真实后端,服务器请求服务器,没有跨域

  1. 在实际开发中,如果发现修改的地方在线上没有生效,如何排查
  • 代码方面排查
    (1)线上直接看源码:控制台的js/css文件是否存在修改后的代码
    (2)确保发布的环境(测试 / 预发 / 正式)是否正确
    (3)构建分支是否正确
    (4)流水线构建是否失败、被拦截
  • 缓存方面排查
    (1)浏览器的强缓存:清缓存 + 刷新、无痕模式打开验证
    (2)CDN 缓存:没有加版本号/哈希值,webpack/vite 配置 [contenthash]
    (3)Nginx / 服务器缓存:服务器配置了缓存策略,查看 Response Headers 确认缓存时间
  • 代码逻辑方面排查
    (1)用本地运行代理到线上环境,看是否表现形式一样
  1. 什么情况下会使用深拷贝,什么情况下会使用浅拷贝,具体说一些例子
  • 浅拷贝一般用在数据结构比较简单、只有一层的场景,比如简单对象复制、更新表层状态、数组浅克隆,性能更好。
  • 深拷贝主要用在对象或数组多层嵌套,并且需要修改深层属性的场景,最典型的就是编辑弹窗表单、树形菜单、保护原始数据源,避免修改新数据时影响到原数据,造成页面状态异常。
  1. foreach跟map
  • forEach:遍历数组,没有返回值,只做执行、处理逻辑, 返回 undefined。
  • map:遍历数组并返回一个新数组,长度和原数组一致,原数组不变。
  1. vue有哪些路由模式
  • hash 模式(默认)
    (1)URL 带 #,# 后面的内容不会发送给服务器,路由切换不需要后端配合,纯前端控制
    (2)基于浏览器的 onhashchange 事件,监听 URL 中 # 后面的变化,实现无刷新更新页面
    (3)不利于 SEO(搜索引擎不解析 # 后的内容)
  • history 模式
    (1)URL 不带 #,干净美观,必须后端配置支持,否则页面刷新完是404
    (2)利用 history.pushState() 和 history.replaceState() 改变 URL,不刷新页面

history 模式刷新 404 原因

hash 模式 # 后面的内容不会发给服务器,history 模式把路由当作真实路径请求服务器,服务器没有对应路由,就返回 404。

解决办法:让后端把所有路径都返回 index.html这样前端拿到页面后,再由 Vue Router 接管路由。

  1. promise出现的原因是什么

为了解决传统回调函数带来的回调地狱问题,让异步代码可以链式调用,更优雅、更易维护。

相关推荐
落魄江湖行1 小时前
进阶篇三 Nuxt4 Nitro 引擎:Nuxt 的服务端核心
前端·vue.js·typescript·nuxt4
一壶纱1 小时前
Element Plus 主题构建方案
前端·vue.js
程序员马晓博1 小时前
我的大脑不下班:一个前端工程师的工作反刍自救指南
前端
吴声子夜歌1 小时前
Vue3——表单元素绑定
前端·vue·es6
神の愛1 小时前
js的深拷贝和浅拷贝?啥情况讲解下??底层堆栈空间??object.prototype.toString.call(),还有bind,的具体使用?
前端·javascript·原型模式
浩星1 小时前
「React + Cesium 最佳实践」完整工程化方案
前端·vue.js·react.js
1314lay_10072 小时前
el-table表格数据分页切片,导致表格的多选失效
javascript·vue.js·elementui
qq_12084093712 小时前
Three.js 模型加载稳定性实战:从资源失败到可用发布的工程化方案
前端·javascript·vue.js·vue3·three.js
skywalk81632 小时前
mock数据什么意思?前端应用mock
前端