前端面试准备指南五之其他前端技术篇


一、小程序开发

1.1 小程序的授权登录流程

小程序的授权需要使用按钮的 open-type 开发能力,获取用户信息,然后可以通过 bindgetuserinfo 绑定一个方法,拿到用户的授权信息,授权成功后,需要使用 wx.login 获取临时的 code 码,然后发送给后台接口,后台拿到后去请求微信的服务器获取 openidsessionkey,并返回给前端登录凭证。

1.2 刘海屏适配问题

通过配置app.jsonwindow属性的navigationStyle,改为custom模式,来自定义导航栏。

1.3 小程序性能优化

代码包体积优化

  • 分包加载:将小程序分为主包和多个分包,减少首次加载时间
  • 及时清理无用资源:移除未使用的图片、组件、代码
  • 压缩图片:使用合适的图片格式和压缩工具

渲染性能优化

  • 列表渲染优化:使用 wx:key 提高列表渲染性能
  • 避免在 onPageScroll 中执行复杂操作
  • 适当使用 setData 的分段加载
  • 合理使用 IntersectionObserver 替代 scroll-view 滚动监听

网络请求优化

  • 使用请求合并和请求缓存
  • 预加载关键数据
  • 合理使用本地缓存

二、APP项目

2.1 APP项目技术点

技术点难点

  • 登录
  • 手机验证码
  • 第三方登录
  • 地图
  • 分享
  • 支付
  • 购物车
  • 定位
  • 订单生成

普通的知识点

  • VuexAxios 组件封装
  • 路由传参
  • 导航守卫 token 处理

2.2 跨端开发框架

Flutter

  • Google推出的跨平台UI框架
  • 使用 Dart 语言
  • 自带渲染引擎,性能接近原生
  • 丰富的 Material Design 组件库

React Native

  • Facebook推出的跨平台框架
  • 使用 JavaScriptReact
  • 通过原生组件实现跨平台
  • 活跃的社区和丰富的第三方库

uni-app

  • DCloud推出的跨平台框架
  • 使用 Vue.js 开发
  • 一套代码多端发布
  • 编译到小程序、H5、App等多端

2.3 移动端适配

响应式布局

  • 使用 flexbox 布局
  • 媒体查询适配不同屏幕
  • rem / vw / vh 单位

高清适配

  • DPR(设备像素比)适配
  • 图片高清适配(@2x@3x
  • 1px 边框问题解决方案

三、认证授权

3.1 OAUTH认证授权

OAuth 认证授权就三个步骤,三句话可以概括:

  1. 获取未授权的 Request Token
  2. 获取用户授权的 Request Token
  3. 用授权的 Request Token 换取 Access Token

3.2 SSO单点登录

SSO(Single Sign-On)

  • 用户只需登录一次即可访问多个应用系统
  • 减少用户重复输入凭证的麻烦
  • 提高系统安全性(统一身份管理)

实现方式

  • Session 同步:共享用户登录状态
  • Token 传递:JWT 等令牌机制
  • CAS 协议:Central Authentication Service

3.3 JWT认证

JWT(JSON Web Token)

  • 一种用于身份验证的开放标准
  • 由三部分组成:HeaderPayloadSignature
  • 无状态、可扩展

JWT结构

// Header
{ "alg": "HS256", "typ": "JWT" }

// Payload
{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022,
  "exp": 1516242622
}

// Signature
HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret
)

JWT优缺点

优点 缺点
无状态,易于扩展 一旦签发无法撤销
可跨域使用 载荷信息有限
便于微服务架构 需要注意过期时间设置

四、微前端

4.1 微前端概述

定义:微前端是一种将大型前端应用拆分为多个独立、可复用子应用的架构风格,每个子应用可以独立开发、测试、部署。

核心理念

  • 技术栈无关:各子应用可以使用不同的前端框架
  • 独立开发:团队可以独立负责各自的子应用
  • 独立部署:子应用可以单独上线,不需要整体发布
  • 增量升级:逐步替换旧系统,降低迁移风险

适用场景

  • 大型前端项目的团队协作
  • 老项目向新技术的渐进式迁移
  • 多团队并行开发的大型系统

4.2 主流微前端方案

4.2.1 qiankun

方案简介

qiankun采用运行时集成主、子应用,HTML Entry 作为子应用入口的中心路由基座式微前端方案。qiankun基于 single-spa 实现,主、子应用都可以做到技术栈无关,方便接入子应用;完整的应用生命周期管理,子应用只需要暴露生命周期钩子即可实现应用接入。

运行时集成

运行时的最大优点是主、子应用间解耦,实现技术栈无关;发布时不需要整个系统重新构建发布。它的不足之处在于存在资源重复加载的情况,但是可以通过 HTTP 缓存等方式解决部分框架层资源共享的问题。

样式隔离解决方案

  • HTML Entry 方式:应用卸载后,会同时卸载其样式表,做到样式的隔离。因为浏览器会对所有样式表的插入、移除做整个 CSS、DOM 的重构,从而达到插入、卸载样式的目的
  • 约定开发规范:如子应用不能侵入(如动态增加全局样式等)修改除本应用外的样式;子应用样式写在以子应用名作为命名空间的类里等

JS污染解决方案

qiankun有提供JS沙箱机制,解决JS全局变量的污染,实现子应用间的软隔离。

qiankun主应用配置

// main.js
import { registerMicroApps, start } from "qiankun";

registerMicroApps([
    {
        name: "vueApp",
        entry: "//localhost:8081",
        container: "#container",
        activeRule: "/vue",
    },
    {
        name: "reactApp",
        entry: "//localhost:8082",
        container: "#container",
        activeRule: "/react",
    },
]);

start();

qiankun子应用配置

// 子应用必须导出的生命周期钩子
export async function mount(props) {
    // 渲染应用
    ReactDOM.render(<App />, document.getElementById("root"));
}

export async function unmount() {
    // 卸载应用
    ReactDOM.unmountComponentAtNode(document.getElementById("root"));
}

4.2.2 single-spa

定义:最早的微前端框架,定义了子应用接入的规范和生命周期。

核心概念

  • APIregisterApplicationbootstrapmountunmount
  • 路由系统:通过 URL 决定加载哪个子应用
  • 生命周期:bootstrap(初始化) → mount(挂载) → unmount(卸载)

优点

  • 轻量级,学习成本低
  • 最早提出微前端概念
  • 兼容各种框架

缺点

  • 功能相对简单,需要自行封装更多功能
  • 没有内置样式隔离和JS沙箱
  • 需要手动处理更多边界情况

4.3 样式隔离

CSS Modules

  • 将 CSS 类名编译为唯一的哈希值
  • 避免样式冲突
  • 需要构建工具支持

BEM 命名规范

  • Block、Element、Modifier
  • 子应用使用统一前缀区分
  • 示例:appName__element--modifier

Shadow DOM

  • Web Components 的样式封装特性
  • 完全隔离的 DOM 和样式树
  • 兼容性需要注意

动态样式表

  • qiankun 的 HTML Entry 方式
  • 应用卸载时自动卸载其样式表
  • 利用浏览器 CSSOM 特性

4.4 JS沙箱机制

快照沙箱

  • 在应用挂载前记录全局状态
  • 卸载时恢复全局状态
  • 适合单实例场景

代理沙箱

  • 使用 Proxy 拦截全局操作
  • 不修改真实的 window 对象
  • 支持多实例并行运行

qiankun沙箱

  • 内置JS沙箱机制
  • 解决全局变量污染
  • 实现子应用间的软隔离

4.5 应用间通信

Props 传递

  • 主应用通过 props 向子应用传递数据
  • 适合父子应用间的数据共享

EventBus

  • 使用事件总线进行通信
  • 简单直观
  • 需要注意事件清理和命名空间

Shared Module

  • 抽取公共模块供各应用共享
  • 使用 Webpack 联邦模块
  • 状态管理库共享

BroadcastChannel

  • 原生浏览器 API
  • 同源页面间通信
  • 可用于主应用与子应用通信

文章作者: 弈心
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 弈心 !
评论
  目录