- 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) 取消订阅:销毁监听,防止内存泄漏
- 移动端的适配方案
- rem 适配(动态根字体,等比缩放)- 往往伴随着js计算,有一定闪屏风险
- vw/vh 适配(纯 CSS,现代首选)- 不支持极老设备(Android 4.4 以下)
- 媒体查询响应式 - 结构差异不大的页面可用,维护起来比较麻烦
- 百分比布局 - 字体、边框无法用百分比,复杂布局难控制
- flex 自适应布局
- rpx 适配(小程序专属)
- postcss-pxtorem / postcss-px-to-viewport - 企业级项目标配,写 px → 打包自动转 rem 或 vw
- 移动端 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 边框
- nginx反向代理为什么可以解决跨域问题
一句话核心答案:
浏览器有同源策略限制,但服务器之间没有跨域限制。
Nginx 反向代理作为中间层相当于在后端帮前端 "转发请求",让浏览器以为自己访问的是同域地址,从而绕过跨域。

- 在平常开发中,我们会使用脚手架,那么脚手架是如何帮你去解决跨域问题的
脚手架本质是启动了一个本地 Node 开发服务器,利用它做「反向代理」,帮前端转发请求,绕过浏览器同源策略,从而解决开发环境跨域。
也就是说,前端不直接请求后端,而是请求本地开发服务器,本地 Node 服务器匹配到 /api,转发到真实后端,服务器请求服务器,没有跨域

- 在实际开发中,如果发现修改的地方在线上没有生效,如何排查
- 代码方面排查
(1)线上直接看源码:控制台的js/css文件是否存在修改后的代码
(2)确保发布的环境(测试 / 预发 / 正式)是否正确
(3)构建分支是否正确
(4)流水线构建是否失败、被拦截- 缓存方面排查
(1)浏览器的强缓存:清缓存 + 刷新、无痕模式打开验证
(2)CDN 缓存:没有加版本号/哈希值,webpack/vite 配置 [contenthash]
(3)Nginx / 服务器缓存:服务器配置了缓存策略,查看 Response Headers 确认缓存时间- 代码逻辑方面排查
(1)用本地运行代理到线上环境,看是否表现形式一样
- 什么情况下会使用深拷贝,什么情况下会使用浅拷贝,具体说一些例子
- 浅拷贝一般用在数据结构比较简单、只有一层的场景,比如简单对象复制、更新表层状态、数组浅克隆,性能更好。
- 深拷贝主要用在对象或数组多层嵌套,并且需要修改深层属性的场景,最典型的就是编辑弹窗表单、树形菜单、保护原始数据源,避免修改新数据时影响到原数据,造成页面状态异常。
- foreach跟map
- forEach:遍历数组,没有返回值,只做执行、处理逻辑, 返回 undefined。
- map:遍历数组并返回一个新数组,长度和原数组一致,原数组不变。
- 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 接管路由。
- promise出现的原因是什么
为了解决传统回调函数带来的回调地狱问题,让异步代码可以链式调用,更优雅、更易维护。
