当前位置: 首页 > news >正文

前端面试每日三题 - Day 29

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


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

核心三要素

  1. Custom Elements(自定义元素)

    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)

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

    <template id="user-card"><div class="card"><h2><slot name="name"></slot></h2></div>
    </template>
    

与主流框架对比

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

浏览器兼容方案

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

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

并发模式核心机制

  1. 可中断渲染

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

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

    <Suspense fallback={<Loading />}><LazyComponent />
    </Suspense>
    

性能优化示例

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

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

核心功能设计

  1. 动态路由配置

    // 使用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. 熔断降级策略

    // 使用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鉴权流程

    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编译器优化原理
  • 分布式链路追踪系统设计

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

相关文章:

  • 45.传导发射整改摸底测试方法
  • 37-智慧医疗服务平台(在线接诊/问诊)
  • rtsp,。。。。
  • 探索Stream流:高效数据处理的秘密武器
  • 小红书视频无水印下载方法
  • CSdiy java 07
  • 数字IC前端学习笔记:锁存器的综合
  • 前端工程化和性能优化问题详解
  • 位移监测仪,精准测量,专业守护
  • 单调栈所有模版(2)
  • 制造单元智能化改造与集成技术平台成套实训设备
  • 7、三维机械设计、装配与运动仿真组件 - /设计与仿真组件/3d-mechanical-designer
  • 线程的生命周期·
  • 加密领域 AI Agent 的崛起:DeFAI 如何重塑金融
  • Webpack基本用法学习总结
  • Java EE初阶——初识多线程
  • 基于阿里云DataWorks的物流履约时效离线分析
  • 2025.05.07-淘天算法岗-第二题
  • UI设计公司兰亭妙微分享:汽车 MHI 设计的界面布局创新法则
  • CNG汽车加气站操作工岗位职责
  • 多地再发网约车从业及投资风险提示:避免盲目花费大笔资金“购车”入行
  • 中国金茂新任命三名副总裁,撤销区域公司
  • 中俄就应对美加征所谓“对等关税”等问题进行深入交流
  • “降息潮”延续!存款利率全面迈向“1时代”
  • 国家税务总局泰安市税务局:山东泰山啤酒公司欠税超536万元
  • 融创中国:今年前4个月销售额约112亿元