当前位置: 首页 > news >正文

【KO】前端面试一

以下是这些前端开发项目场景题的解答:

25. 如何减少项目里面if - else

  • 使用对象映射:将条件判断的结果与对应的处理逻辑作为键值对存到对象里,通过条件直接查找执行,如根据不同类型执行函数 ,const handler = { type1: () => {}, type2: () => {} }; handler[condition]();
  • 利用策略模式:把不同条件的处理逻辑封装成策略类/函数,根据条件选择策略执行,解耦条件判断和逻辑。
  • 可选链与空值合并:处理对象属性判断时,obj?.prop?.method() 简化存在性判断,结合 ?? 处理默认值,减少条件嵌套。
  • 提前返回:在函数开头处理特殊情况(如参数不合法)直接返回,减少嵌套的 if - else ,让主逻辑更清晰。

26. babel - runtime作用是啥

  • babel - runtime 是 Babel 生态工具,用于解决 Babel 转译代码时,辅助函数(如 _extend 等)重复注入问题。
  • 它通过抽取复用辅助函数,减少打包后代码体积;还提供 core - js 等 polyfill 能力(按需引入),让转译后的代码能在低版本环境运行,实现语法和 API 兼容。

27. 如何实现预览PDF文件

  • 浏览器内置能力:直接用 <embed> <object> 标签,设置 src 为 PDF 地址,浏览器支持的话可渲染,如 <embed src="xxx.pdf" type="application/pdf">
  • PDF.js 库:Mozilla 开发的开源库,可在 canvas 上渲染 PDF ,支持自定义样式、交互,引入库后初始化加载显示,pdfjsLib.getDocument('xxx.pdf').promise.then(pdf => { /* 渲染页面等操作 */ })
  • 第三方服务:如 Google Docs 查看器(需联网、有隐私考量),<iframe src="https://docs.google.com/gview?url=xxx.pdf&embedded=true">

28. 如何在划词选择的文本上添加右键菜单

  • 监听 mouseup 事件,判断是否有选中文本(window.getSelection().toString().trim() 非空)。
  • 创建自定义右键菜单(div 模拟),通过 event.clientX event.clientY 定位,阻止默认右键事件(event.preventDefault() ),点击菜单项执行对应操作,操作完隐藏菜单。

29. 富文本里面,是如何做到划词的

  • 富文本编辑器(如 Quill、Slate 等)一般基于 contenteditable 实现。
  • 监听编辑器容器的 mouseupselectionchange 事件,利用 window.getSelection() 获取选区信息(范围、文本等),结合编辑器内部文档模型(如 Quill 的 Delta ,Slate 的节点树 ),确定选中文本在富文本内容里的位置、关联节点,进而做高亮、操作等处理。

30. 如何做好前端监控方案

  • 错误监控:用 window.onerror window.addEventListener('unhandledrejection' 捕获 JS 错误、未处理 Promise rejection ,上报错误信息(栈、消息、URL 等)。
  • 性能监控:通过 Performance APIperformance.getEntries() 等)采集首屏时间、白屏时间、资源加载耗时,计算并上报性能指标。
  • 用户行为监控:监听点击、路由变化、AJAX 请求等事件,记录操作路径、交互内容,用于分析流程、复现问题。
  • 上报与存储:将监控数据通过 fetchsendBeacon 上报到服务端,服务端存储(如用 Elasticsearch ),配合可视化平台(Grafana 等)展示分析。

31. 如何标准化处理线上用户反馈的问题

  • 统一收集渠道:搭建反馈平台(如页面内嵌表单、客服系统对接),规范用户提交入口,方便集中收集。
  • 信息结构化:要求用户反馈时填写版本号、操作路径、设备信息(浏览器、系统)、问题描述、截图/录屏,前端可自动采集部分信息(如 navigator.userAgent 、当前 URL )。
  • 分类与流转:后端接收后按问题类型(功能异常、性能差、UI 问题等)分类,分配给对应研发/运维处理,记录处理状态(待处理、处理中、已解决),同步给用户。
  • 复盘与优化:定期汇总反馈问题,分析高频问题根因,推动产品迭代优化,形成闭环。

32. px 如何转为 rem

  • 原理rem 是相对根元素(html )字体大小的单位。先设置 htmlfont - size (如基于设计稿宽度,750px 设计稿设 font - size: 75px ,即 1rem = 10px )。
  • 手动转换:写样式时,按设计稿 px 值除以基准值(如 10 )得到 rem 值,width: 150pxwidth: 1.5rem
  • 自动化工具:用 PostCSS 插件(postcss - px - to - rem ),配置基准值,构建时自动将 pxrem ;或在前端框架(Vue、React )中结合 webpack 配置 loader 处理。

33. 浏览器有同源策略,但是为何cdn请求资源的时候不会有跨域限制

  • 同源策略限制的是脚本(如 JS 发起 AJAX 、fetch )的跨域读写操作。
  • CDN 资源(如 JS 、CSS 、图片)是通过标签(<script> <link> <img> 等)加载,属于浏览器“非脚本主动读写”的资源引入,这类标签的跨域加载默认被允许(浏览器对其有特殊处理,不触发同源策略的限制校验 ),但脚本不能直接读取这些资源的内容(如 JS 不能通过 XMLHttpRequest 读 CDN 上 JS 文件源码 )。

34. c

http://www.dtcms.com/a/347589.html

相关文章:

  • git的工作使用中实际经验
  • 关于Highcharts的数据参考与产品系列
  • Camera performance analysis
  • 智能系统与未来生态演进初步思考
  • 告别图片背景违和!autohue.js 让图片与背景自动 “无缝衔接”
  • 基于51单片机自动智能浇花系统设计
  • 【序列晋升】13 Spring Cloud Bus微服务架构中的消息总线
  • 研究生方向:在传统赛道与交叉领域间寻找破局之路
  • 第三阶段数据库-2:数据库中的sql语句
  • 重审文字的本体论地位:符号学转向、解构主义突围与视觉性革命
  • 1电吉他环境搭建:效果器再探
  • C++算法题—— 小C的细菌(二维偏序离线 + 树状数组 + 坐标压缩)
  • [激光原理与应用-328]:结构设计 - Solidworks - 什么是结构建模?
  • PCB电路设计学习3 电路原理图设计 元件PCB封装设计与添加
  • 学习嵌入式第三十六天
  • 神经网络|(十三)概率论基础知识-贝叶斯公式和全概率公式
  • More Effective C++ 条款04:非必要不提供默认构造函数
  • c++string
  • 【计算机网络 | 第8篇】编码与调制
  • 青少年机器人技术(二级)等级考试试卷-实操题(2024年9月)
  • 笔试——Day47
  • 张老师---个人师资介绍
  • python学习DAY49打卡
  • 智慧矿山误报率↓83%!陌讯多模态融合算法在矿用设备监控的落地优化
  • 鸿蒙中CPU活动分析:CPU分析
  • 周末总结(2024/08/23)
  • 数组拆分求最大不重复数和(动态规划解法)
  • Linux内核进程管理子系统有什么第三十三回 —— 进程主结构详解(29)
  • java猜数字游戏(赌城主题版)
  • 注意力机制:捕获长距离依赖关系的革命性技术