2025前端面试题全攻略:高频考点解析与实战指南

助力金三银四跳槽季,覆盖90%大厂核心考点,技术进阶+面试技巧双提升


一、HTML/CSS 核心篇

1. 语义化与布局实战

问题1:如何用HTML5语义化标签优化新闻详情页?

  • 答案要点
    • 使用
      包裹主体内容,
      划分章节
    • 标记发布时间,
      +
      处理图文
    • SEO优势:提升关键内容权重,增强可访问性

问题2:实现等间距三栏布局(中间自适应)

.container {
  display: flex;
  gap: 20px; /* 关键:替代margin方案 */
}
.left, .right {
  flex: 0 0 200px; /* 固定宽度 */
}
.center {
  flex: 1; /* 自适应剩余空间 */
}

二、JavaScript 深度解析

1. 闭包与作用域陷阱

问题:以下代码输出什么?如何修复?

for (var i = 0; i < 5; i++) {
  setTimeout(() => console.log(i), 100);
}
// 输出:5,5,5,5,5

修复方案

// 方案1:使用let块级作用域
for (let i = 0; i < 5; i++) { ... }

// 方案2:IIFE捕获变量
for (var i = 0; i < 5; i++) {
  (function(j) {
    setTimeout(() => console.log(j), 100);
  })(i);
}
2. 手写Promise进阶

题目:实现带缓存机制的Promise.all

function cachedPromiseAll(promises) {
  const cache = new Map();
  return Promise.all(promises.map(p => {
    const key = p.url; // 假设是请求Promise
    if (cache.has(key)) return cache.get(key);
    const promise = p.catch(err => { /* 错误处理 */ });
    cache.set(key, promise);
    return promise;
  }));
}

三、框架原理(Vue/React双路线)

1. Vue3响应式原理

核心对比

Object.defineProperty Proxy
监听能力 无法检测属性新增/删除 全对象监听
数组处理 需要重写方法 直接监听索引变化
性能 递归初始化消耗大 惰性代理更高效

手写reactive

function reactive(obj) {
  return new Proxy(obj, {
    get(target, key) {
      track(target, key); // 依赖收集
      return Reflect.get(target, key);
    },
    set(target, key, value) {
      Reflect.set(target, key, value);
      trigger(target, key); // 触发更新
    }
  });
}
2. React Hooks陷阱

问题代码

function Timer() {
  const [count, setCount] = useState(0);
  useEffect(() => {
    const id = setInterval(() => {
      setCount(count + 1); // 闭包陷阱,始终为0+1
    }, 1000);
    return () => clearInterval(id);
  }, []); // 空依赖
  return 
{count}
; }

修复方案

// 使用函数式更新
setCount(c => c + 1);
// 或正确声明依赖
useEffect(() => {...}, [count]);

四、性能优化实战方案

1. 首屏加载3秒优化策略
  • 关键路径优化
    • 内联关键CSS,异步加载非关键CSS(media="print"
    • 使用预加载字体/首屏图片
  • 代码分割
// React动态导入
const LazyComponent = React.lazy(() => import('./Component'));
// Vue异步组件
const AsyncComp = defineAsyncComponent(() => import('./Comp'));
  • 数据预取:在SSR阶段获取首屏数据,减少客户端请求
2. Webpack深度调优

splitChunks配置

optimization: {
  splitChunks: {
    chunks: 'all',
    cacheGroups: {
      vendors: {
        test: /[\\/]node_modules[\\/]/,
        priority: -10
      },
      default: {
        minChunks: 2,
        priority: -20,
        reuseExistingChunk: true
      }
    }
  }
}

五、网络与安全

1. HTTPS握手过程(TLS 1.3)

流程图

Client Hello → 支持的密码套件  
          ↓  
Server Hello → 选定套件+证书  
          ↓  
密钥交换 → 生成会话密钥  
          ↓  
加密通信开始

优化点:握手从2-RTT减少到1-RTT,提升连接速度

2. CSRF防御方案对比
方案 优点 缺点
Token验证 安全性高 需要前后端协调存储
SameSite Cookie 浏览器自动处理 兼容性要求(部分旧浏览器)
双重Cookie验证 实现简单 存在子域漏洞风险

六、开放性问题与高阶考点

1. 项目难点突破(STAR法则示例)

问题:如何解决首屏渲染白屏问题?

  • Situation:电商项目首屏FCP达到4.2s,跳出率高
  • Task:需在2周内将FCP优化至2s内
  • Action
    • 实施SSR+组件级缓存
    • 图片懒加载+WebP格式转换
    • 使用CDN加速静态资源
  • Result:FCP降至1.3s,转化率提升15%
2. 技术选型方法论

微前端方案对比

qiankun Module Federation
原理 通过JS Entry加载子应用 Webpack5模块联邦
隔离性 CSS/JS沙箱完善 依赖工程化配置
适用场景 老旧系统迁移 新项目模块化开发

终极面试策略

  1. 知识体系化

    • 使用XMind构建知识脑图(示例结构):
JavaScript → 闭包/原型链/Event Loop  
React → Fiber架构/Hooks原理/性能优化  
Network → HTTP协议/缓存策略/安全防护
  1. 高频手写题训练清单

    • 基础:防抖/节流/深拷贝/Promise
    • 进阶:发布订阅/虚拟DOM Diff/路由守卫
    • 算法:二叉树遍历/链表操作/TOP K问题
  2. 模拟面试实战

    • 使用Pramp进行在线模拟面试
    • 录制视频回看:观察表达流畅度与技术深度

本文持续更新,欢迎关注博主获取最新前端技术解析与面试动向! 原创不易,转载请注明出处。

你可能感兴趣的:(2025前端面试题全攻略:高频考点解析与实战指南)