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

【KO】前端面试题三

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

71. 小程序为什么会有两个线程【腾讯一面】

小程序架构设计为**逻辑层(JS 线程 )视图层(渲染线程 )**分离的双线程模式,原因如下:

  • 安全性考量:限制 JS 直接操作 DOM,避免因开发者不当操作(如频繁修改 DOM 引发性能问题、XSS 风险 )影响渲染层,保障小程序运行稳定、安全,符合小程序沙箱隔离的设计理念。
  • 渲染性能优化:视图层专注 UI 渲染,逻辑层处理业务逻辑,双线程并行可减少相互阻塞。比如 JS 执行耗时任务时,视图层仍能保持页面渲染流畅,提升用户体验。
  • 适配多端环境:兼容不同平台(如微信、支付宝 )的渲染差异,通过双线程架构,小程序框架可统一逻辑层代码,适配各平台的渲染层实现,降低开发和维护成本。

72. web 应用中如何对静态资源加载失败的场景做降级处理

可从资源加载监听备用方案两方面处理:

  • 监听加载失败:通过 <img> onerror 事件(图片 )、link/scriptonerror 事件(CSS/JS ),捕获加载失败行为。例如:
    <img src="main.png" onerror="this.src='fallback.png'">
    
  • 备用资源策略
    • 图片:加载失败时替换为默认占位图(如统一 fallback 图片 )。
    • CSS/JS:关键资源加载失败,可尝试从备用 CDN 重新请求,或降级为简化样式/功能(如 JS 失败则隐藏交互组件,仅展示静态内容 )。
  • 页面降级提示:若大量静态资源失败(如 CDN 故障 ),通过全局错误监听(window.addEventListener('error' ),展示友好降级页面(如“当前网络不稳定,请稍后重试” )。

73. html 中前缀为 data-开头的元素属性是什么?

data-*自定义数据属性(Custom Data Attributes ),用于在 HTML 元素上存储自定义业务数据,特点:

  • 语法:以 data- 为前缀,后跟任意名称(如 data-userid data-status ),命名需符合 HTML 命名规范(小写、连字符分隔 )。
  • 作用
    • 存储与元素相关的额外信息(如商品 ID、状态标记 ),供 JS 读取操作(通过 element.dataset 访问,dataset.userid 对应 data-userid )。
    • 实现数据与 UI 分离,避免滥用 class/id 存储业务数据,让代码更清晰。
  • 示例
    <div data-userid="123" data-status="active">...</div>
    <script>const div = document.querySelector('div');console.log(div.dataset.userid); // "123"console.log(div.dataset.status); // "active"
    </script>
    

74. 移动端如何实现上拉加载,下拉刷新?【字节一面】

通过 监听滚动事件 + 阈值判断 实现,常用方案:

  • 下拉刷新

    • 监听 touchstart touchmove touchend 事件,计算手指滑动距离。
    • 当滑动距离超过阈值(如 50px )且页面处于顶部,触发刷新逻辑(如调用接口重新获取数据 )。
    • 框架方案:Vue 可用 better-scroll 、React 可用 react-refresh-control ,或直接使用小程序/APP 原生下拉组件。
  • 上拉加载

    • 监听滚动事件(onscroll ),计算当前滚动高度与页面总高度、视口高度的关系。
    • 滚动高度 + 视口高度 >= 页面总高度 - 阈值(如 50px ),触发加载下一页数据。
    • 优化:使用节流(throttle )减少滚动事件触发频率,避免性能问题。
  • 示例(简易逻辑)

    let startY = 0;
    document.addEventListener('touchstart', (e) => {startY = e.touches[0].pageY;
    });
    document.addEventListener('touchmove', (e) => {const moveY = e.touches[0].pageY;if (moveY - startY > 50 && isTop) {// 触发下拉刷新}
    });
    window
http://www.dtcms.com/a/346847.html

相关文章:

  • React Hooks UseRef的用法
  • 【Win10 画图板文字方向和繁体问题】
  • 浮点数比较的致命陷阱与正确解法(精度问题)
  • linux下的网络编程:基础概念+UDP编程
  • Class41样式迁移
  • 55.Redis搭建主从架构
  • 计算机网络 各版本TLS握手的详细过程
  • CSS学习步骤及详解
  • 美食菜谱数据集(13943条)收集 | 智能体知识库 | AI大模型训练
  • JUC之虚拟线程
  • ArcGIS Pro 安装路径避坑指南:从崩溃根源到规范实操(附问题修复方案)
  • 运行npm run命令报错“error:0308010C:digital envelope routines::unsupported”
  • 使用 AD 帐户从 ASP.NET 8 容器登录 SQL Server 的 Kerberos Sidecar
  • 【深入理解 Linux 网络】收包原理与内核实现(下)应用层读取与 epoll 实现
  • 5G物联网的现实与未来:CTO视角下的成本、风险与破局点
  • 嵌入式学习日记(33)TCP
  • OpenFeign相关记录
  • 【嵌入式】【搜集】RTOS相关技术信息整理
  • Ubuntu2204server系统安装postgresql14并配置密码远程连接
  • 【python与生活】如何自动总结视频并输出一段总结视频?
  • FastAPI + SQLAlchemy 数据库对象转字典
  • 【力扣 Hot100】每日一题
  • C++之list类的代码及其逻辑详解 (中)
  • Java线程的几种状态 以及synchronized和Lock造成的线程状态差异,一篇让你搞明白
  • Linux服务器Systemctl命令详细使用指南
  • GitLab CI:安全扫描双雄 SAST vs. Dependency Scanning 该如何抉择?
  • 智慧园区人车混行误检率↓78%!陌讯动态决策算法实战解析
  • html链接的target属性
  • Win11 下卸载 Oracle11g
  • 《文字的本体论突围:从工具论到符号学革命的范式转换》