文章目录
一、HTML篇(扩展版)
1. HTML5语义化标签的实际应用场景
答案:
- 场景:
<header>
:页面头部或文章头部。<nav>
:主导航栏。<article>
:独立内容块(如博客文章)。<aside>
:侧边栏或广告区域。<time datetime="2025-01-01">
:时间语义化,便于SEO和机器解析。
- SEO优化:搜索引擎优先抓取语义化标签内容。
2. Web Components实战:如何封装一个自定义按钮组件?
答案:
<!-- 定义模板 -->
<template id="custom-button">
<style>
.btn { padding: 10px 20px; background: blue; color: white; }
</style>
<button class="btn"><slot></slot></button>
</template>
<script>
class CustomButton extends HTMLElement {
constructor() {
super();
const template = document.getElementById('custom-button');
const shadowRoot = this.attachShadow({ mode: 'open' });
shadowRoot.appendChild(template.content.cloneNode(true));
}
}
customElements.define('custom-button', CustomButton);
</script>
<!-- 使用 -->
<custom-button>点击我</custom-button>
3. Web Worker的用途与限制
答案:
- 用途:执行耗时任务(如大数据计算)避免阻塞主线程。
- 限制:
- 不能直接操作DOM。
- 通过
postMessage
与主线程通信。
- 示例:
// 主线程 const worker = new Worker('worker.js'); worker.postMessage({ data: 1000 }); worker.onmessage = (e) => console.log(e.data); // worker.js self.onmessage = (e) => { const result = heavyCalculation(e.data); self.postMessage(result); };
二、CSS篇(扩展版)
1. CSS盒模型详解:border-box vs content-box
答案:
- content-box(默认):元素宽度 = width + padding + border。
- border-box:元素宽度 = width(包含padding和border)。
- 应用场景:
/* 全局设置为border-box更易布局 */ * { box-sizing: border-box; }
2. CSS动画性能优化技巧
答案:
- 优先使用
transform
和opacity
:这两个属性不会触发重排(Composite阶段)。 - 避免频繁修改
width/height
:触发重排,改用scale
。 - 启用GPU加速:
.animate { transform: translateZ(0); }
3. CSS预处理器(Sass/Less)核心功能对比
答案:
功能 | Sass(SCSS) | Less |
---|---|---|
变量 | $primary-color: #333; |
@primary-color: #333; |
嵌套 | 支持媒体查询嵌套 | 支持常规嵌套 |
Mixin | @mixin flex { display: flex; } |
.flex() { display: flex; } |
模块化 | @use 'module' |
@import 'module.less' |
三、JavaScript篇(扩展版)
1. ES6+核心特性:Promise、Generator、Async/Await对比
答案:
- Promise:解决回调地狱,链式调用(
.then()
)。 - Generator:通过
yield
暂停执行,手动控制流程(需配合co
库)。 - Async/Await:语法糖,基于Promise,代码更同步化。
- 示例:
// Async/Await async function fetchData() { const res = await fetch('api/data'); return res.json(); }
2. JavaScript内存泄漏排查与预防
答案:
- 常见场景:
- 未清理的定时器:
setInterval
。 - 闭包中未释放的变量。
- 未解绑的DOM事件监听。
- 未清理的定时器:
- 工具:Chrome DevTools的Memory面板。
- 预防:
// 清除定时器 const timer = setInterval(() => {}, 1000); clearInterval(timer); // 解绑事件 element.removeEventListener('click', handler);
四、TypeScript篇(扩展版)
1. 高级类型工具:Partial、Pick、Record详解
答案:
- Partial:将T的所有属性设为可选。
- Pick<T, K>:从T中选择属性K。
- Record<K, T>:定义键为K、值为T的对象。
- 示例:
interface User { id: number; name: string; } type PartialUser = Partial<User>; // { id?: number; name?: string; } type NameOnly = Pick<User, 'name'>; // { name: string; } type UserMap = Record<string, User>; // { [key: string]: User }
2. TS装饰器的应用场景(Class、Method、Property)
答案:
- 类装饰器:扩展类功能(如日志注入)。
- 方法装饰器:拦截方法调用(如权限校验)。
- 属性装饰器:监听属性变化。
- 示例:
function Log(target: any, methodName: string, descriptor: PropertyDescriptor) { const original = descriptor.value; descriptor.value = function (...args: any[]) { console.log(`调用方法 ${methodName}`); return original.apply(this, args); }; } class Service { @Log getData() { /* ... */ } }
五、Vue篇(扩展版)
1. Vue3 Teleport组件的作用与实战
答案:
- 作用:将组件渲染到DOM树的任意位置(如模态框、通知)。
- 示例:
<template> <teleport to="body"> <div class="modal">内容</div> </teleport> </template>
2. Vuex与Pinia的对比与迁移策略
答案:
特性 | Vuex | Pinia |
---|---|---|
API设计 | 基于Options API | 基于Composition API |
TypeScript | 需要额外类型声明 | 原生支持 |
模块化 | 需要手动划分模块 | 自动按文件划分模块 |
推荐场景 | Vue2项目 | Vue3新项目 |
六、React篇(扩展版)
1. React性能优化:memo、useMemo、useCallback
答案:
- React.memo:缓存函数组件,避免无意义渲染。
- useMemo:缓存计算结果,避免重复计算。
- useCallback:缓存函数引用,避免子组件重复渲染。
- 示例:
const MemoComponent = React.memo(({ data }) => <div>{data}</div>); function App() { const [count, setCount] = useState(0); const expensiveValue = useMemo(() => calculate(count), [count]); const handleClick = useCallback(() => setCount(c => c + 1), []); return ( <> <MemoComponent data={expensiveValue} /> <button onClick={handleClick}>+1</button> </> ); }
2. React Server Components(RSC)的核心优势
答案:
- 服务端渲染:组件逻辑在服务端执行,减少客户端JS体积。
- SEO友好:直接输出HTML内容。
- 数据获取:在服务端直接访问数据库,无需暴露API。
七、UI框架篇(扩展版)
1. Tailwind CSS vs CSS-in-JS(Styled-components)对比
答案:
特性 | Tailwind CSS | Styled-components |
---|---|---|
可读性 | 类名较长但直观 | 组件化样式,结构清晰 |
维护性 | 需记忆工具类 | 支持动态样式 |
性能 | 生产环境自动PurgeCSS | 运行时生成样式 |
适用场景 | 快速原型开发 | 复杂动态样式需求 |
2. 如何实现Ant Design主题动态切换?
答案:
- 步骤1:通过
antd-theme-generator
生成less变量。 - 步骤2:动态修改HTML的
data-theme
属性。 - 步骤3:使用CSS变量或全局状态管理主题。
- 代码片段:
// 动态切换主题 const changeTheme = (theme) => { document.documentElement.setAttribute('data-theme', theme); };
八、综合进阶(扩展版)
1. 前端监控系统搭建:错误采集与性能上报
答案:
- 错误采集:
window.onerror = (message, source, lineno, colno, error) => { // 上报错误信息至服务器 }; // 监听未处理的Promise错误 window.addEventListener('unhandledrejection', (e) => { e.preventDefault(); console.error('Unhandled Rejection:', e.reason); });
- 性能指标:
- FP/FCP:首次渲染时间。
- LCP:最大内容渲染时间。
- CLS:累计布局偏移。
2. WebAssembly在前端的应用场景
答案:
- 图像/视频处理:FFmpeg编译为Wasm加速编解码。
- 游戏引擎:Unity导出为WebAssembly。
- 加密计算:高性能加密算法(如SHA-256)。
- 示例:
// 加载Wasm模块 WebAssembly.instantiateStreaming(fetch('module.wasm')) .then(({ instance }) => { const result = instance.exports.add(1, 2); console.log(result); // 3 });
九、2025新兴趋势(扩展版)
1. Serverless + Jamstack架构实践
答案:
- 核心思想:
- 前端静态资源托管(如Vercel、Netlify)。
- 后端使用云函数(AWS Lambda、腾讯云SCF)。
- 优势:无需运维、按需付费、自动扩展。
2. AI驱动的前端开发:Copilot与低代码结合
答案:
- GitHub Copilot:通过注释生成代码片段。
- 低代码平台:
- 拖拽生成UI(如Retool、Appsmith)。
- 集成AI生成业务逻辑。
十、面试加分项
1. 开放性问题:如何设计一个前端微前端架构?
答案:
- 方案选型:
- 基座模式:主应用加载子应用(qiankun)。
- 去中心化:Webpack Module Federation。
- 关键技术:
- 应用隔离:CSS沙箱、JS沙箱(Proxy)。
- 通信机制:
CustomEvent
或状态管理库。
2. 手写代码:实现一个Promise.all
答案:
function promiseAll(promises) {
return new Promise((resolve, reject) => {
const results = [];
let count = 0;
promises.forEach((promise, index) => {
promise.then((res) => {
results[index] = res;
count++;
if (count === promises.length) resolve(results);
}).catch(reject);
});
});
}
结语:本文从基础到高阶覆盖了2025年前端核心知识点,建议结合源码实践与项目复盘深入理解。持续关注前沿技术(如Deno、Tauri),保持技术敏感度!