前端面试每日三题 - Day 29

这是我为准备前端/全栈开发工程师面试整理的第29天每日三题练习:


✅ 题目1:Web Components技术全景解析

核心三要素

  1. Custom Elements(自定义元素)

    javascript 复制代码
    class MyButton extends HTMLElement {
      constructor() {
        super();
        this.attachShadow({ mode: 'open' });
        this.shadowRoot.innerHTML = `
          <button><slot></slot></button>
          <style>
            button { padding: 8px 16px; }
          </style>
        `;
      }
    }
    customElements.define('my-button', MyButton);
  2. Shadow DOM(影子DOM)

    javascript 复制代码
    <!-- 使用示例 -->
    <my-button>点击我</my-button>
  3. HTML Templates(模板标签)

    html 复制代码
    <template id="user-card">
      <div class="card">
        <h2><slot name="name"></slot></h2>
      </div>
    </template>

与主流框架对比

特性 WebComponents React/Vue
渲染引擎 浏览器原生 虚拟DOM
样式隔离 Shadow DOM天然支持 CSS-in-JS/Scoped
包体积 无运行时 需要框架运行时
学习曲线 较高 中等

浏览器兼容方案

javascript 复制代码
// 动态加载polyfill
if (!('customElements' in window)) {
  await import('https://unpkg.com/@webcomponents/webcomponentsjs');
}

✅ 题目2:React 18并发模式原理剖析

并发模式核心机制

  1. 可中断渲染

    javascript 复制代码
    // 使用startTransition标记非紧急更新
    import { startTransition } from 'react';
    
    function handleInput(text) {
      startTransition(() => {
        setSearchText(text); // 低优先级更新
      });
    }
  2. 自动批处理优化

    javascript 复制代码
    // React 17及之前:多次渲染
    setCount(c => c + 1);
    setFlag(f => !f);
    
    // React 18自动批处理:单次渲染
  3. Suspense数据流

    html 复制代码
    <Suspense fallback={<Loading />}>
      <LazyComponent />
    </Suspense>

性能优化示例

javascript 复制代码
// 使用useTransition管理加载状态
function App() {
  const [isPending, startTransition] = useTransition();
  
  return (
    <div>
      {isPending && <Spinner />}
      <button onClick={() => {
        startTransition(() => {
          loadData();
        });
      }}>
        加载数据
      </button>
    </div>
  );
}

✅ 题目3:微服务网关设计实践指南(Nodejs)

核心功能设计

  1. 动态路由配置

    javascript 复制代码
    // 使用Express实现
    const gateway = express();
    const routeTable = {
      '/user-service/*': 'http://user-cluster:3000',
      '/order-service/*': 'http://order-cluster:3001'
    };
    
    gateway.all('*', (req, res) => {
      const path = req.path;
      const target = Object.entries(routeTable)
        .find(([prefix]) => path.startsWith(prefix))?.[1];
      
      if (!target) return res.status(404).send();
      
      // 代理请求
      httpProxy.web(req, res, { target });
    });
  2. 熔断降级策略

    javascript 复制代码
    // 使用circuit-breaker-js
    const CircuitBreaker = require('circuit-breaker-js');
    const breaker = new CircuitBreaker({
      timeoutDuration: 5000,
      failureThreshold: 3
    });
    
    app.get('/api', (req, res) => {
      breaker.run(() => fetchService(), {
        success: data => res.send(data),
        failure: err => res.status(503).send('服务暂不可用')
      });
    });
  3. JWT鉴权流程

    javascript 复制代码
    const jwt = require('jsonwebtoken');
    gateway.use((req, res, next) => {
      try {
        const token = req.headers.authorization.split(' ')[1];
        req.user = jwt.verify(token, SECRET_KEY);
        next();
      } catch (err) {
        res.status(401).send('无效凭证');
      }
    });

高可用设计方案

方案类型 实现方式 适用场景
集群部署 Nginx+Keepalived双活 百万级QPS系统
流量染色 Header携带环境标识 灰度发布
动态限流 Redis令牌桶算法 秒杀活动

📅 明日预告:

  • TypeScript类型体操技巧
  • Vue3编译器优化原理
  • 分布式链路追踪系统设计

💪 坚持每日三题,未来更进一步!如果你也在准备面试,欢迎一起刷题打卡!

相关推荐
FungLeo7 小时前
成为全栈·React 管理后台篇·总复盘:从“接口能调通”到“后台值得使用”
前端·react.js·前端框架·项目复盘·成为全栈
Csvn8 小时前
并发模式:让渲染学会排队、插队和让路
前端
可乐鸡翅yeah_9 小时前
新手梳理:M3U8 线上问题,哪些是前端锅,哪些是后端锅
前端·ios·音视频·实时音视频·m3u8·音视频在线播放
Flynt9 小时前
Linear 用 1000 个 PR 换掉 styled-components,我写了 200 个按钮,把这笔账复现了一遍
前端·css·preact
西部驯兽师9 小时前
制造企业的信息化选型课题(一)
职场和发展
JavaGuide10 小时前
NVIDIA 又开源了!这次给 AI Agent 加上权限管控
前端·后端
excel10 小时前
prisma 如何处理数据库竞态
前端·数据库·后端
天真小巫10 小时前
2026.9.28总结
职场和发展
我命由我1234510 小时前
经纪人的职业定义
经验分享·笔记·学习·职场和发展·求职招聘·职场发展·学习方法
莪_幻尘11 小时前
Skill 体检:30 个 Skill 全凭感觉?体检器先自曝了 8 个“假 0 分
前端·人工智能·llm