高阶前端面试题(含AI相关)

react

  1. Hooks 为什么必须按顺序调用?
    参考答案要点
  • 通过链表存储 hook
  • 顺序即索引
  • 条件调用会导致错位 面试官重点
  • 是否提到 Fiber.memoizedState

  1. useState 的更新是如何批处理的?
    参考答案要点
  • 同一事件循环内批处理
  • Concurrent 模式下自动批处理
  • 更新队列 + lane 合并

  1. Fiber 为什么是链表结构,而不是树或数组?
    参考答案要点
  • child / sibling / return 指针
  • DFS 迭代而非递归
  • 避免调用栈溢出
  • 支持时间分片(Time Slicing)
    加分
  • 提到 workLoop / performUnitOfWork
  1. 为什么 setState 是异步的,但有时又是同步的?
    参考答案要点
  • 是否在 React 管控上下文
  • 批处理机制
  • flushSync

TS

  1. TypeScript 相比 JavaScript 解决了什么问题?
    参考答案要点
  • 静态类型检查
  • 提前发现错误
  • 更好的 IDE 支持
  • 可读性 & 可维护性提升

面试官判断

  • ❌ 只说“防止 bug”
  • ✅ 能说“约束 + 文档 + 重构安全”
  1. type 和 interface 的区别?
    参考答案要点
  • interface 可声明合并
  • type 支持联合、交叉、条件类型
  • interface 更适合对外契约
  • type 更适合复杂类型运算
  1. 什么是泛型?你在项目中如何使用?
    参考答案要点
  • 类型参数化
  • 保持类型信息
  • 常见场景:
    • 请求函数
    • Hooks
    • 工具方法
function request<T>(url: string): Promise<T> {}

AI相关

  1. 在 AI 应用中,前端和传统业务最大的不同是什么?
    参考答案要点
  • 不确定性
  • 返回结果不可预测
  • 延迟更长
  • 一次请求 ≠ 一次结果

面试官判断

  • ❌ 只说“慢”
  • ✅ 能说“不稳定 + 非确定”
  1. 为什么 AI 接口不能像普通接口那样直接用?
    参考答案要点
  • 输出结构不稳定
  • 需要容错
  • 需要引导用户预期
  • 需要兜底 UI
  1. 如何避免 AI 任务更新阻塞 UI?
    参考答案要点
  • startTransition
  • Web Worker
  • 节流更新
  • 分片渲染

编程题

1.'aabcabbb'  ->  'a3b4c1'
  1. 得到一个新list: [‘high’, ‘highmm’]
const source = {
  拍摄角度: "高机位 anah",
  镜头: "8mm鱼眼  nsnnsns"
};

const options = [
  {
    label: "构图",
    children: [
      { label: "无", value: "" },
      { label: "三分法构图", value: "rule_of_thirds" },
      { label: "居中构图", value: "centered" }
    ]
  },
  {
    label: "拍摄角度",
    children: [
      { label: "无", value: "" },
      { label: "高机位", value: "high" },
      { label: "低机位", value: "low" }
    ]
  },
  {
    label: "镜头",
    children: [
      { label: "无", value: "" },
      { label: "8mm鱼眼", value: "highmm" },
      { label: "400mm超长焦", value: "mmhang" }
    ]
  }
];

js执行顺序

async function async1() {
    console.log("1")  
    await async2()
    console.log("2")
}

async function async2() {
    console.log("3")
}

console.log("4")


setTimeout(function () {
    console.log("5")
}, 300)
setTimeout(function () {
    console.log("6")
}, 0)

async1()

new Promise(function (resolve) {
    console.log("7")
    resolve()
    console.log("8") 
}).then(function () {
    console.log("9")
});

console.log("10")

Webpack 和 Vite

  1. Webpack 为什么慢?瓶颈在哪里?
    参考答案要点
  • JS 解析 & 转换慢
  • 单线程
  • 大量 IO
  • loader 链路长
  1. Vite 为什么快?
    参考答案要点
  • 开发环境:
    • 基于 ESM
    • 不打包
    • 按需加载
  • 生产环境:
    • Rollup 打包
  • 预构建依赖(esbuild) 👉 说“不打包”是关键
  1. Vite 的 HMR 为什么比 Webpack 快?
    参考答案要点
  • 精准模块依赖
  • 不需要重新构建 bundle
  • 基于 ESM graph

Css

flex: 1 是 flex-grow: 1; flex-shrink: 1; flex-basis: 0% 的简写 ❓ 为什么 flex:
1 会让内容被压缩? 👉 因为:

  • flex-basis: 0
  • 内容宽度不参与初始计算
  • 空间不够时还允许 shrink

❓ 如果我想“内容自适应 + 占剩余空间”怎么写?

flex: 1 1 auto; 或者: flex: auto;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值