本轮共 15 道题。答案默认折叠,便于先自行作答。
1. 介绍一下实习项目的业务背景(这块说了蛮久)
题目要点
略
参考答案
略
2. 假如你是一个项目的负责人,面对一个新需求你会如何判断以及决策
题目要点
- 业务价值与需求背景明确 / 技术可行性与风险评估 / 资源与时间合理估算
- 多方案设计与优劣比较 / 风险预判及缓解措施
- 结合团队和业务做权衡决策 / 明确执行计划与责任 / 持续跟进与复盘优化
- 沟通协调能力和风险管理能力是关键
- 决策既考虑短期交付,也兼顾长期维护和团队承受能力
参考答案
考察点
- 评估候选人对需求分析和项目管理流程的理解
- 探查其在技术可行性、资源评估、风险管理等方面的判断能力
- 了解候选人如何在多方利益、时间与质量之间做权衡决策
- 关注其沟通协调和方案落地的思路
参考答案
一、需求理解与评估
明确需求背景和目标
- 充分沟通业务方,理解需求的业务价值、核心目标和痛点
- 判断该需求是新增功能、优化还是技术债清理
- 充分沟通业务方,理解需求的业务价值、核心目标和痛点
技术可行性分析
- 评估现有系统架构、技术栈对该需求的支持程度
- 识别技术难点和潜在风险,如性能、安全、兼容性等问题
- 评估现有系统架构、技术栈对该需求的支持程度
资源与时间评估
- 估算开发、测试、上线所需的人力、时间和成本
- 考虑团队现有工作负载,排期合理性
- 估算开发、测试、上线所需的人力、时间和成本
二、方案设计与风险控制
设计多套实现方案
- 比较不同方案的优劣,如技术复杂度、扩展性、维护成本
- 结合业务优先级和技术条件选择最优方案
- 比较不同方案的优劣,如技术复杂度、扩展性、维护成本
风险预判与缓解
- 识别潜在风险点,设计应对措施(如技术预研、灰度发布)
- 规划阶段性验收,快速反馈,减少偏差
- 识别潜在风险点,设计应对措施(如技术预研、灰度发布)
三、决策与执行
结合业务战略和团队实际作出决策
- 权衡需求价值与资源限制,明确是否优先推动或延期
- 与产品、设计、测试等多方协作,达成共识
- 权衡需求价值与资源限制,明确是否优先推动或延期
推动方案落地
- 制定详细开发计划,分解任务,明确负责人和时间节点
- 跟踪进展,快速解决过程中出现的问题
- 制定详细开发计划,分解任务,明确负责人和时间节点
复盘与优化
- 需求完成后组织复盘,总结经验,优化流程
3. 功能上线后如何判断这个功能上线前后的影响和优化有多少呢
题目要点
- 明确功能目标和关键评估指标 / 多渠道数据采集与监控
- 功能上线前后指标对比 / A/B测试验证功能效果
- 用户反馈与定性分析辅助判断
- 定位影响原因,制定优化方案
- 持续监控、复盘和迭代形成闭环
- 兼顾数据驱动与用户体验
参考答案
考察点
- 理解功能上线后效果评估的重要性及方法
- 掌握多维度数据监控和指标分析手段
- 能结合业务目标设计合理的评估方案
- 理解A/B测试、用户行为分析、性能监控等工具的应用
- 关注持续优化与反馈闭环
参考答案
一、明确评估目标和关键指标(KPI)
- 结合业务目标确定功能上线的核心衡量指标,如用户活跃度、转化率、留存率、错误率等
- 设计具体可量化的指标体系,保证评估具备科学性和针对性
二、数据采集与监控
- 利用埋点、日志采集用户行为数据,覆盖点击、浏览、交互等关键操作
- 结合前端性能监控(如首屏时间、接口响应时间)与错误监控(JS报错、接口失败)
- 设置告警机制,实时监测异常情况
三、功能上线前后的对比分析
- 历史对比:将上线前后的关键指标进行趋势对比,分析变化幅度和方向
- 同类用户对比:如果可行,采用A/B测试,控制组与实验组对比,确保因果关系明确
- 用户反馈收集:结合用户调查、客服反馈等定性信息辅助判断
四、分析影响及优化空间
- 识别指标波动背后的具体原因,如性能瓶颈、交互体验问题等
- 结合用户反馈发现潜在需求或痛点
- 制定针对性优化方案,优先解决影响最大的瓶颈
五、持续迭代与复盘
- 将监控和分析形成常态化流程,确保功能优化闭环
- 定期复盘评估结果,总结经验教训
- 结合业务目标调整优化策略,持续提升功能效果
4. 有去了解过用户反馈最多的问题或者诉求最强的问题是什么吗
题目要点
略
参考答案
略
5. 移动端兼容性处理是如何实现的呢
题目要点
- 多样化设备和浏览器差异导致兼容问题
- 视口控制和响应式设计是基础
- CSS前缀和PostCSS工具确保样式兼容
- Babel与Polyfill保障JS语法和API支持
- 功能降级保证核心体验
- 多环境真机测试和远程调试
- 性能优化助力兼容体验
参考答案
考察点
- 了解移动端兼容性问题的多样性及成因
- 掌握主流兼容性处理技术和策略
- 理解不同设备、操作系统、浏览器环境差异带来的挑战
- 掌握解决方案的优缺点及适用场景
参考答案
一、移动端兼容性问题的成因
- 移动端设备种类繁多,屏幕尺寸、分辨率不一
- 不同操作系统(iOS、Android)及版本差异
- 各浏览器内核差异,如WebKit、Blink等,支持的标准和API不同
- 网络环境复杂,性能表现差异大
- 触控交互和硬件特性特殊,如手势、摄像头、陀螺仪等
二、常见的兼容性处理手段
视口适配(Viewport)
- 设置合理的
<meta name="viewport">标签,控制页面缩放和布局宽度 - 结合响应式设计,利用CSS媒体查询适配不同屏幕尺寸
- 设置合理的
CSS兼容性处理
- 使用前缀(-webkit-、-moz-等)确保样式兼容
- 采用现代CSS特性同时兼容降级方案
- 利用PostCSS、Autoprefixer等工具自动添加兼容前缀
- 使用前缀(-webkit-、-moz-等)确保样式兼容
JavaScript兼容性处理
- 通过 Polyfill 补充新标准API缺失支持
- 使用 Babel 转译ES6+语法,兼容低版本浏览器
- 运行时检测环境差异,动态加载对应代码
- 通过 Polyfill 补充新标准API缺失支持
功能降级与优雅降级
- 对不支持的特性提供替代方案或简化体验
- 确保核心功能可用,即使部分高级效果缺失
- 对不支持的特性提供替代方案或简化体验
测试与调试
- 在真机和模拟器上进行多环境测试
- 利用远程调试工具(如Chrome DevTools、Weinre)定位兼容问题
- 集成自动化测试,覆盖主流设备和浏览器
- 在真机和模拟器上进行多环境测试
性能优化兼容
- 适配不同网络环境,使用按需加载、资源压缩等技术
- 避免性能瓶颈导致兼容性表现差
- 适配不同网络环境,使用按需加载、资源压缩等技术
三、项目中的应用场景及注意点
- 设计响应式布局,确保页面在手机、平板、不同分辨率设备上均正常展示
- 处理iOS和Android差异,如输入法、滚动行为、事件响应差异
- 关注浏览器私有API限制,如Safari的限制政策
- 对第三方库或组件兼容性做充分验证
四、总结
移动端兼容性处理是一项系统工程,涉及视口适配、CSS和JS兼容策略、功能降级以及多环境测试。通过合理设计和工具链支持,能够最大限度地覆盖用户设备,提升体验一致性和稳定性。
6. 哪些浏览器会在图片兼容性上有问题呢
题目要点
- WebP和AVIF是现代高效格式,但旧Safari和IE不支持
- Safari对WebP支持从14版本开始,AVIF更晚
- IE浏览器兼容性差,现代格式均不支持
- SVG兼容性存在差异,需注意安全和复杂特性
- 采用
<picture>和格式回退方案保障兼容 - 构建工具多格式自动转换,兼顾性能与兼容
- 动态检测用户环境,选择合适图片格式
参考答案
考察点
- 了解不同浏览器对图片格式和特性的支持差异
- 掌握常见图片格式(如WebP、AVIF、HEIC等)兼容性现状
- 识别主流浏览器在图片加载和渲染方面的兼容问题
- 能针对兼容性问题设计合适的处理方案
参考答案
一、常见图片格式及浏览器支持情况
| 图片格式 | 描述 | 主要兼容问题及浏览器支持情况 |
|---|---|---|
| JPEG/PNG | 传统主流格式 | 广泛支持,兼容性好 |
| GIF | 支持动画 | 支持较好,但色彩和压缩效率有限 |
| WebP | Google主导的现代格式 | Chrome、Firefox、Edge支持较好;Safari从14版本开始支持,旧版Safari不支持 |
| AVIF | 新兴高压缩率格式 | Chrome 85+、Firefox 93+支持;Safari 16开始支持,较新且未广泛支持 |
| HEIC/HEIF | Apple设备常用格式 | 主要iOS/macOS支持,Windows和大多数浏览器不支持 |
| SVG | 矢量图,兼容性好 | 需注意SVG安全问题和部分复杂特性浏览器支持差异 |
二、具体浏览器兼容问题分析
Safari(尤其旧版本)
- 早期版本不支持WebP格式图片
- AVIF支持较晚,低版本完全不支持
- 对HEIC/HEIF格式支持较好,但非网页原生格式
- SVG部分高级特性兼容有限
- 早期版本不支持WebP格式图片
IE浏览器(已停止维护,但部分企业仍用)
- 不支持WebP、AVIF等现代格式
- SVG支持不完善,存在安全漏洞和渲染差异
- 不支持WebP、AVIF等现代格式
部分安卓浏览器
- 一些第三方或老版本浏览器对WebP兼容不完全
- 对SVG支持不稳定
- 一些第三方或老版本浏览器对WebP兼容不完全
三、兼容性处理方案
格式回退机制
- 通过
<picture>标签,结合source元素按浏览器能力加载对应格式图片 - 使用JS检测支持情况,动态切换图片资源
- 通过
构建工具自动转换
- 利用构建工具(如webpack、vite)对图片进行多格式转换,生成兼容资源
- 利用构建工具(如webpack、vite)对图片进行多格式转换,生成兼容资源
监测用户设备和浏览器版本
- 根据用户环境调整图片格式策略,避免不支持格式加载失败
- 根据用户环境调整图片格式策略,避免不支持格式加载失败
合理选择图片格式
- 关键内容优先保证主流格式兼容,增强用户体验
7. 如果在项目上线之前,对用户浏览器使用情况进行预调研以及前期判断,你会怎么做
题目要点
- 明确调研目标和用户覆盖范围
- 利用历史数据和第三方统计平台
- 预发布版本埋点采集真实用户浏览器信息
- 结合问卷和访谈补充定性分析
- 分类浏览器版本,科学判定支持策略
- 制定合理兼容标准和降级方案
- 持续动态监控,灵活调整
参考答案
考察点
- 理解用户浏览器调研对项目兼容性和优化的重要性
- 掌握调研方法与数据采集途径
- 能基于数据分析指导技术选型和兼容策略
- 关注数据有效性和多维度分析
参考答案
一、明确调研目标与范围
- 确定调研目的:了解用户主要使用的浏览器及版本,识别兼容性风险
- 明确覆盖用户群体、地域、设备类型(PC、移动端)等维度
二、数据采集方法
利用已有数据资源
- 分析历史线上产品或类似产品的用户浏览器统计数据
- 借助第三方统计平台(如Google Analytics、百度统计)获取浏览器分布信息
- 分析历史线上产品或类似产品的用户浏览器统计数据
前期埋点采集
- 在预发布版本或内部测试版中集成用户浏览器信息采集埋点
- 采集用户浏览器类型、版本、操作系统、设备型号等信息
- 在预发布版本或内部测试版中集成用户浏览器信息采集埋点
问卷调查和用户访谈
- 设计问卷调研,了解目标用户习惯和偏好
- 结合用户访谈收集定性信息,补充量化数据
- 设计问卷调研,了解目标用户习惯和偏好
三、数据分析与解读
- 对浏览器版本进行分类,区分主流版本、低版本和冷门浏览器
- 结合业务重要性,判断是否需要支持某些老旧或特殊浏览器
- 分析用户设备特征,预判兼容性和性能优化需求
四、基于调研结果制定技术策略
- 确定支持的浏览器最低版本标准
- 针对主流浏览器优化体验,老版本进行功能降级或提示升级
- 设计合理的兼容方案和优先级
- 规划测试覆盖重点和资源分配
五、持续动态更新
- 将用户浏览器统计纳入日常监控体系,动态调整兼容策略
- 关注市场和技术变化,及时调整支持范围
8. 有去了解过当前浏览器的内核分布,以及有多少种内核吗
题目要点
- 浏览器内核是渲染和执行网页的核心组件
- 主流内核主要有Blink、WebKit、Gecko、Trident、EdgeHTML
- Blink占主导,WebKit是iOS/macOS唯一内核
- 内核差异影响兼容性和功能表现
- 针对不同内核做兼容测试和处理
- 关注内核市场份额及技术发展动态
参考答案
考察点
- 理解浏览器内核的概念及其在浏览器中的作用
- 掌握主流浏览器内核类型及其市场分布情况
- 理解内核差异对前端开发和兼容性的影响
- 能根据内核特点制定相应的开发和优化策略
参考答案
一、浏览器内核概念
- 浏览器内核(Rendering Engine / Layout Engine)负责解析网页内容,渲染页面,执行脚本等
- 它是浏览器架构中最核心的组件,决定了页面渲染效果和性能表现
二、主流浏览器内核种类及特点
| 内核名称 | 代表浏览器 | 特点与现状 |
|---|---|---|
| Blink | Chrome、Edge(Chromium版)、Opera、Android WebView | 基于WebKit分支,开源、性能优异,市占率最高 |
| WebKit | Safari、部分iOS浏览器 | 苹果主导开发,iOS平台强制使用,稳定兼容性好 |
| Gecko | Firefox | Mozilla开发,强调开放与隐私,功能丰富但占比较小 |
| Trident | 旧版Internet Explorer | 微软老旧内核,兼容性差,已被Edge取代 |
| EdgeHTML | 旧版Microsoft Edge | 微软自研内核,现已弃用,转向Chromium内核 |
三、当前内核市场分布(大致情况)
- Blink内核占据主导地位,尤其是在PC端和安卓端浏览器中
- WebKit作为iOS和macOS的唯一浏览器内核,覆盖大量苹果设备用户
- Gecko内核Firefox拥有一部分忠实用户,尤其重视隐私保护
- Trident和EdgeHTML已经逐步被市场淘汰,使用者极少
四、内核差异对前端开发的影响
- 不同内核对CSS标准、JS引擎支持程度和API兼容性存在差异
- 特殊行为和Bug需针对特定内核做兼容处理
- iOS平台强制使用WebKit,导致苹果设备体验差异需要重点关注
- Chromium系内核一致性高,有助于减少兼容性问题
五、开发应对策略
- 使用现代工具(Babel、Autoprefixer、Polyfill)兼容不同内核
- 做好多内核测试覆盖,特别是WebKit和Blink的差异
- 利用特性检测代替浏览器检测,提高兼容代码的健壮性
- 关注内核更新动态,适时调整支持策略
9. 移动端的浏览器他的内核和版本会和什么相关呢
题目要点
- 移动端浏览器内核受操作系统及版本影响大
- iOS强制使用WebKit,版本绑定系统版本
- Android设备内核多样,厂商和系统版本影响内核版本
- 浏览器自身更新和硬件性能也影响内核和版本
- 开发中需结合系统、内核和特性做兼容处理
- 优先考虑主流版本,设计合理降级方案
参考答案
考察点
- 理解移动端浏览器内核和版本影响因素
- 掌握不同厂商和操作系统对浏览器内核版本的限制和选择
- 理解设备系统版本、硬件性能与浏览器内核版本之间的关系
- 能针对移动端环境特点制定兼容和优化策略
参考答案
一、移动端浏览器内核与版本的影响因素
操作系统类型和版本
- iOS设备上,所有浏览器必须基于苹果的WebKit内核(包括Chrome、Firefox等)
- Android设备浏览器多样,主流基于Chromium内核,但厂商定制差异大
- 不同Android版本自带的WebView内核版本不一,影响浏览器内核版本
- iOS设备上,所有浏览器必须基于苹果的WebKit内核(包括Chrome、Firefox等)
设备厂商与定制ROM
- 部分厂商会定制或封装自带浏览器,内核版本及功能有所差异
- 旧设备可能运行老版本内核,影响现代特性的支持
- 部分厂商会定制或封装自带浏览器,内核版本及功能有所差异
浏览器应用自身更新策略
- 独立浏览器(如Chrome、Firefox)通过应用市场持续更新内核
- 系统自带浏览器版本更新受限于系统升级周期,更新缓慢
- 独立浏览器(如Chrome、Firefox)通过应用市场持续更新内核
硬件性能限制
- 低端设备可能限制浏览器内核新特性的启用,避免性能问题
- 设备GPU和内存大小影响浏览器渲染能力
- 低端设备可能限制浏览器内核新特性的启用,避免性能问题
平台政策限制
- iOS强制使用WebKit,导致版本与系统紧密绑定
- Android平台开放,浏览器内核多样,更新更灵活
- iOS强制使用WebKit,导致版本与系统紧密绑定
二、版本与内核关系举例
- iOS 14内置WebKit版本决定所有iOS浏览器的渲染能力
- Android 5的系统WebView基于较旧的Chromium版本,功能有限
- Chrome浏览器在不同Android版本上内核更新速度不同,部分新特性不支持旧系统
三、应对策略
- 开发时根据操作系统和浏览器特征做版本兼容判断
- 利用特性检测代替版本检测,提升代码适应性
- 针对主流系统和设备,优先保证兼容性和性能优化
- 对低版本设备和浏览器提供降级方案
10. 介绍项目中的瀑布流组件是如何实现的
题目要点
- 瀑布流通过分配元素到高度最短列实现均衡布局
- JS控制列高数组,动态计算绝对定位实现最佳效果
- CSS多列和Grid方案易用但控制力有限
- 需处理图片异步加载和响应式布局
- 性能优化、兼容性和用户体验是实现关键
- 虚拟滚动等技术助力海量数据场景
参考答案
考察点
- 理解瀑布流布局的核心原理与实现方式
- 掌握前端布局算法设计,特别是多列等高动态分布问题
- 熟悉DOM操作、性能优化和响应式设计相关技巧
- 能结合项目需求选择合适的实现方案并处理边界问题
参考答案
一、瀑布流布局原理
- 瀑布流是一种多列布局,动态分配不同高度的元素到各列,使整体视觉效果均衡
- 目标是避免固定行高导致的空白,提升空间利用率和用户体验
- 核心思路是将元素逐个放入当前高度最短的列中,保持各列高度差异最小
二、实现方式
纯前端JavaScript实现
- 获取容器宽度和列数
- 动态计算每列宽度
- 维护一个数组记录每列当前高度
- 遍历元素,找到高度最小列,将元素放入该列,并更新该列高度
- 设置元素的绝对定位(top, left)实现布局
- 获取容器宽度和列数
CSS多列布局(column-count)
- 利用CSS
column-count快速实现简单瀑布流 - 缺点是元素顺序从上到下排列,无法精准控制列高度平衡
- 利用CSS
CSS Grid布局
- 利用Grid布局实现基本多列排布
- 通过
grid-auto-flow: dense实现部分填充 - 但Grid对高度不均衡的元素支持有限,需配合JS调整
- 利用Grid布局实现基本多列排布
三、项目中具体实现细节
- 在数据加载后,动态计算每个瀑布块元素的实际高度
- 通过JavaScript将元素依次放入当前高度最小的列
- 监听窗口resize事件,重新计算列数和布局,实现响应式支持
- 对图片等异步加载资源,使用监听事件或占位符确保布局稳定
- 通过requestAnimationFrame或节流防抖优化重排频率,减少性能开销
四、优化点与注意事项
- 性能优化:避免大量DOM重排,批量更新位置;使用虚拟滚动技术处理海量数据
- 响应式支持:根据屏幕宽度调整列数和元素宽度
- 图片加载处理:防止图片加载导致高度变化破坏布局,使用占位符或图片懒加载
- 兼容性考虑:兼容不同浏览器对定位和尺寸计算的差异
- SEO与可访问性:保证瀑布流结构语义清晰,方便搜索引擎爬取和辅助设备访问
11. 还有什么别的方式能实现瀑布流呢
题目要点
- CSS多列布局简单易用,但元素顺序不可控
- CSS Grid适合固定高度或等高布局,动态高度表现一般
- JS绝对定位方案最灵活,能实现最佳视觉效果
- 虚拟列表适合大规模数据,性能优势明显
- 结合业务需求和项目复杂度选择实现方式
- 可考虑使用第三方库提升开发效率
参考答案
考察点
- 掌握多种瀑布流实现方案,理解它们的优缺点和适用场景
- 理解纯CSS、纯JS、混合方案及第三方库的不同实现思路
- 能根据项目需求选择合适方案,权衡开发成本和性能
参考答案
一、CSS多列布局(CSS Columns)
- 利用CSS属性
column-count或column-width实现多列分布 - 元素自动按列流式排列,省去手动计算和定位
- 优点:实现简单,性能开销小,响应式支持较好
- 缺点:元素排列顺序是按列流式排列,无法保证元素顺序的语义一致性或完全均衡的列高
.container {
column-count: 4;
column-gap: 16px;
}
.item {
break-inside: avoid; /* 避免元素被拆分 */
margin-bottom: 16px;
}
二、CSS Grid布局
- 使用Grid的多列布局和自动排列功能
- 通过
grid-auto-flow: dense;尝试填充空隙 - 优点:更灵活的布局能力,可控制元素顺序
- 缺点:对于高度不一的元素,布局不够均衡,存在空白
三、Flexbox结合JavaScript
- 通过Flex布局进行列布局基础,结合JS动态分配元素
- 适合简单场景,灵活度高
- 需自行维护列高,做绝对定位或flex顺序调整
四、纯JavaScript计算定位(常用)
- 维护列高数组,动态定位每个元素
- 完全控制布局,能实现高度均衡、顺序控制
- 实现复杂,需要关注性能和异步加载处理
五、虚拟列表技术
- 结合瀑布流和虚拟滚动,只渲染可视区域元素
- 适合海量数据瀑布流,显著减少DOM节点
- 实现复杂,需解决滚动位置和元素高度动态计算
六、第三方库与框架
- 使用成熟瀑布流库,如Masonry.js、Waterfall.js等
- 优点:快速集成,功能完善,兼容性好
- 缺点:体积较大,定制化有限
12. h5是如何和移动端做通信的呢
题目要点
- H5与移动端通信主要通过URL Scheme、JSBridge、postMessage等方式
- URL Scheme简单但单向且数据有限
- JSBridge灵活支持双向复杂交互
- postMessage为WebView提供安全标准的消息传递
- 项目中结合多种方式实现丰富交互
- 需关注安全、性能、兼容性和异步处理
参考答案
考察点
- 理解H5页面与移动端原生环境通信的基本机制
- 掌握主流通信方式及其优缺点和适用场景
- 能结合项目需求选择合适的通信方案,并处理安全和性能问题
参考答案
一、H5与移动端通信的基本概念
- H5页面运行在移动端浏览器或WebView内,和原生App环境是不同的执行上下文
- 通信需要跨环境桥接,传递消息、数据和调用能力
- 典型场景包括H5调用原生功能,原生通知H5事件
二、常见通信方式
URL Scheme(协议拦截)
- H5通过修改
window.location或iframe跳转带有自定义协议的URL(如myapp://action?param=xxx) - 原生拦截该URL并解析执行相应操作
- 优点:实现简单,兼容性好
- 缺点:只能单向通信,数据量有限,频繁跳转体验差
- H5通过修改
JavaScript Interface(JSBridge)
- 通过原生提供的桥接接口,将JS方法映射到原生函数
- H5调用
window.Native.method(params),原生接收并处理 - 原生也可调用JS回调实现双向通信
- 优点:交互灵活,支持复杂数据传输
- 缺点:实现复杂,需维护多平台桥接代码
- 通过原生提供的桥接接口,将JS方法映射到原生函数
PostMessage机制(WebView专用)
- 利用
window.postMessageAPI实现跨环境异步通信 - 原生WebView提供监听接口捕获消息并响应
- 适用于iOS WKWebView和Android WebView
- 优点:安全、标准,支持双向通信
- 缺点:需保证协议设计安全,防止注入攻击
- 利用
事件监听和回调
- 结合JSBridge或postMessage,使用事件机制通知双方状态变化
- 便于管理复杂交互和异步回调
- 结合JSBridge或postMessage,使用事件机制通知双方状态变化
三、实际项目中的应用示例
- 用户点击H5按钮调用原生相机功能:通过JSBridge调用原生API
- 原生扫码结果通过postMessage传给H5,H5页面更新UI
- 通过URL Scheme唤起App某个页面或功能
- 结合Hybrid框架(如Weex、React Native WebView模块)统一通信接口
四、需要注意的问题
- 安全性:防止恶意注入或非法调用,校验传入参数和来源
- 性能:避免频繁通信导致卡顿,合理设计调用频率
- 兼容性:处理不同平台(iOS/Android)桥接差异
- 异步处理:通信多数为异步,需设计完善的回调或Promise机制
- 版本维护:原生和H5接口需同步升级,保持兼容
13. 项目中用到了i18n,说说i18n的原理
题目要点
- i18n实现语言资源与代码分离,实现多语言支持
- 通过语言包存储文本,使用统一接口调用文本内容
- 支持动态语言切换和视图实时刷新
- 格式化本地化数字、日期等内容,提升用户体验
- 变量替换和复数规则保证翻译灵活和准确
- 常用库辅助实现管理、格式化及异步加载
参考答案
考察点
- 理解国际化(i18n)的基本概念和核心原理
- 掌握i18n在前端项目中的实现方式及常用工具
- 了解动态语言切换、多语言资源管理和格式化技术
- 能针对项目需求设计合理的i18n方案
参考答案
一、i18n核心概念与原理
- **i18n(Internationalization)**指软件支持多种语言和区域文化,使产品能适应不同国家和地区用户需求
- 核心是将所有文本、格式(日期、数字、货币等)与代码逻辑分离,通过语言资源文件管理不同语言内容
- 前端i18n主要涉及:文本翻译、动态语言切换、格式化本地化、占位符处理和复数规则
二、前端i18n的实现原理
语言资源管理
- 多语言文本通常以JSON或类似结构存储,每个语言对应一份资源文件
- 资源文件中包含键值对,key是统一标识,value是对应语言文本
- 多语言文本通常以JSON或类似结构存储,每个语言对应一份资源文件
文本替换机制
- 在渲染阶段,根据当前语言环境,使用对应语言包的文本替换界面中的占位符
- 通常通过API如
t('key')访问当前语言的翻译内容
- 在渲染阶段,根据当前语言环境,使用对应语言包的文本替换界面中的占位符
动态切换语言
- 切换语言时,重新加载对应语言资源或切换内存中的语言包
- 触发视图重新渲染,刷新显示对应语言文本
- 切换语言时,重新加载对应语言资源或切换内存中的语言包
格式化支持
- 针对数字、日期、货币等内容,根据语言和区域使用不同格式(如千分位、时区、货币符号)
- 通常依赖Intl API或第三方库(如
intl-messageformat)实现格式化
- 针对数字、日期、货币等内容,根据语言和区域使用不同格式(如千分位、时区、货币符号)
占位符和变量替换
- 支持模板字符串或变量插入,避免重复定义同一文本
- 支持复杂复数规则处理(如英文的单复数形式)
- 支持模板字符串或变量插入,避免重复定义同一文本
三、常用工具与库
- vue-i18n / react-intl / i18next 等,封装语言管理、切换和格式化API
- 支持异步加载语言包,减少首屏负载
- 支持语言检测和回退策略
四、项目中应用示例
- 初始化时根据浏览器语言或用户偏好加载对应语言包
- 页面文本通过
t()函数动态获取,语言切换时触发页面重渲染 - 表单校验信息、错误提示均国际化
- 日期和货币展示根据用户区域格式化显示
14. 使用i18n的过程中遇到了什么问题呢?你是如何解决的
题目要点
略
参考答案
略
15. 算法题:
- (1)求数组深度(递归和迭代都要写)
- (2)实现Promise.half方法(后面要求能失败重试)
题目要点
递归与显式栈计算嵌套数组深度;明确空数组的深度定义;为 Promise 扩展定义任务工厂、并发上限、失败重试和最终错误传播。
参考答案
数组深度可以递归计算,也可以用显式栈迭代。下面约定非数组深度为 0、空数组深度为 1:
function arrayDepth(value) {
if (!Array.isArray(value)) return 0;
return value.length === 0
? 1
: 1 + Math.max(...value.map(arrayDepth));
}
function arrayDepthIterative(value) {
if (!Array.isArray(value)) return 0;
let max = 1;
const stack = [{ value, depth: 1 }];
while (stack.length) {
const current = stack.pop();
max = Math.max(max, current.depth);
for (const item of current.value) {
if (Array.isArray(item)) stack.push({ value: item, depth: current.depth + 1 });
}
}
return max;
}
Promise.half 不是标准 API,编码前应先与面试官确认它表示“半数并发”还是其他语义。若要求限制并发并支持失败重试,入参应使用可重新执行的任务工厂,而不是已经开始的 Promise;实现时维护待执行队列和运行计数,单任务失败后在重试次数内重新入队,超过次数则拒绝最终 Promise,并按约定决定是否继续其他任务。