【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出现的原因是什么

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

相关推荐
中小企业实战军师刘孙亮6 分钟前
中小实体如何逆势稳健发展?重塑经营逻辑是关键!佛山鼎策创局破局增长咨询
学习·面试·创业创新·制造·学习方法
宁雨桥8 分钟前
AI前端开发面试题分享
前端·人工智能·ai
亿元程序员8 分钟前
求求你别卷了,主管又转发你的文章到工作群了...我看了之后五味杂陈,决定卷个毛线!
前端
kyriewen1117 分钟前
你的前端滤镜慢得像PPT?用Rust+WebAssembly,一秒处理4K图
开发语言·前端·javascript·设计模式·rust·ecmascript·powerpoint
人道领域25 分钟前
【LeetCode刷题日记】二叉树层序遍历完全指南:从基础到LeetCode实战一篇搞定BFS模板,秒杀4道经典面试题
java·开发语言·数据结构·leetcode·面试·二叉树
QD_ANJING28 分钟前
建议5月的Web前端开发都去飞书上准备面试...
前端·人工智能·面试·职场和发展·前端框架·状态模式·ai编程
研究点啥好呢35 分钟前
面馆开业!客官,你的面(经)好了!
python·阿里云·docker·面试·reactjs·求职招聘·react
萤萤七悬35 分钟前
【人工智能训练师3级】考试准备(2026)三、实操题1.1.3-3.2.5
前端·数据库·人工智能
yqcoder40 分钟前
JavaScript 深拷贝:如何彻底切断引用关联?
开发语言·前端·javascript