高级前端面试题及答案(最新版)

高级前端面试题及答案(最新版)

JavaScript 深入

1. 解释 Event Loop 机制,包括宏任务和微任务的区别

答案
Event Loop 是 JavaScript 实现异步的核心机制,它由以下部分组成:

  1. 调用栈(Call Stack):同步代码的执行栈
  2. 任务队列(Task Queue):存放宏任务
  3. 微任务队列(Microtask Queue):存放微任务

执行顺序:

  • 执行同步代码(属于第一个宏任务)
  • 执行当前宏任务产生的所有微任务
  • 执行下一个宏任务
  • 循环…

区别

宏任务(Macrotask) 微任务(Microtask)
示例 setTimeout, setInterval, I/O Promise.then, MutationObserver
执行时机 Event Loop的每个循环执行一个 在每个宏任务结束后立即全部执行
API Run by host environment Run by JS engine

2. Proxy/Reflect API的高级应用场景

答案
Proxy可以用于:

// 1. API请求拦截器
const apiHandler = {
   
   
    get(target, prop) {
   
   
        return async (...args) => {
   
   
            console.log(`Calling ${
     
     prop} with`, args);
            return target[prop](...args).catch(err => {
   
   
                //统一错误处理
                sentry.captureException(err);
                throw err;
            });
        };
    }
};

//2.响应式数据实现(Vue3原理)
function reactive(obj) {
   
   
    return new Proxy(obj, {
   
   
        get(target, key) {
   
   
            track(target, key); //依赖收集
            return Reflect.get(...arguments);
        },
        set(target, key, value) {
   
   
            trigger(target, key); //触发更新
            return Reflect.set(...arguments);
        }
    });
}

Reflect的用途:

//1.替代Object上的方法,更函数式
const obj = {
   
    foo: 'bar' };
Reflect.has(obj, 'foo'); //替代'foo' in obj

//2.与Proxy配合使用保持默认行为
const proxy = new Proxy(obj, {
   
   
    get(target, prop) {
   
   
        if(prop === 'secret') return undefined;
        return Reflect.get(...arguments); //保持默认行为
    }
});

React高级特性

###3.React Fiber架构原理

答案
Fiber是React16引入的新协调引擎,核心改进:

  1. 可中断渲染:将渲染工作拆分为多个小单元(fiber节点),每个单元完成后检查剩余时间,没有时间则暂停并让出主线程。

  2. 双缓冲技术:维护两棵fiber树(Current和WorkInProgress),减少直接操作DOM的开销。

  3. 优先级调度:区分不同优先级的更新(如用户交互>数据获取)。

  4. 新的生命周期:划分render阶段(pre-commit phase)和commit阶段。

关键数据结构:

interface FiberNode {
   
   
    tag: WorkTag; //组件类型(Function/Class/Host等)
    key: string | null;
    elementType: any;
    stateNode: any; //对应的实例
    
    //链表结构
    return: FiberNode | null; //父节点
    child: FiberNode | null; //第一个子节点
    sibling: FiberNode | null; //兄弟节点
    
    //更新相关 
    memoizedState: any; //hooks链表(Hook会挂载到这里)
    
    //副作用标记(EffectTag)
    flags: Flags;
}

###4.Hooks实现原理及自定义高级Hook示例

实现原理
1.React通过维护一个"current dispatcher"变量来区分mount/update阶段。
2.Function组件首次渲染时创建hook链表并挂载到fiber.memoizedState上。
3.Hook对象结构:

type Hook = {
   
   
    memoizedState: any,     //当前状态值(useState)/effect对象(useEffect)
    baseState: any,
    baseQueue: Update<any>,
    
queue: UpdateQueue<any>,   //待处理的更新队列
    
next: Hook | null          //下一个hook(形成链表)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值