HTML 基础

语义化结构是可访问性与 SEO 的基石。

语义化标签

使用 header / nav / main / article / section / aside / footer 表达页面结构,便于辅助技术与搜索引擎理解。

  • 避免滥用 div,优先语义元素
  • 标题层级 h1-h6 不可跳级

可访问性 (a11y)

为交互元素提供 alt、aria-label、role,保证键盘可操作。

  • img 必带 alt
  • 表单元素配 label
  • focus 状态需可见

Meta 与 SEO

合理设置 viewport、description、Open Graph、canonical。

<meta name="description" content="...">
<meta property="og:title" content="...">

CSS 与布局

掌握盒模型、层叠规则与现代布局方案。

盒模型与 BFC

box-sizing 控制宽高计算方式;BFC 可清除浮动、避免 margin 塌陷。

  • 触发 BFC:overflow:hidden、display:flow-root
  • 推荐全局 box-sizing: border-box

Flexbox 弹性布局

一维布局首选,主轴/交叉轴方向灵活。

.container {
  display: flex;
  justify-content: center;
  align-items: center;
  gap: 12px;
}

Grid 网格布局

二维布局利器,适合复杂页面结构。

.layout {
  display: grid;
  grid-template-columns: 220px 1fr;
  gap: 28px;
}

响应式设计

媒体查询 + 相对单位 + 弹性图片。

  • 移动优先 (min-width)
  • clamp() 流体字号
  • picture/srcset 适配分辨率

层叠与优先级

理解 specificity、层叠上下文、z-index 规则。

  • !important 谨慎使用
  • position + z-index 创建层叠上下文

CSS 变量与主题

自定义属性实现动态主题切换。

:root { --primary: #4f6df5; }
.btn { color: var(--primary); }

JavaScript 核心

类型、作用域、原型、异步是四大主线。

数据类型与类型判断

7 种原始类型 + object;准确判断类型的方法。

  • typeof 判断原始类型
  • instanceof 判断对象
  • Object.prototype.toString 最准确

作用域与闭包

词法作用域决定变量查找;闭包是函数与其词法环境的组合。

function counter() {
  let n = 0;
  return () => ++n;
}

原型与继承

每个对象有 __proto__,函数有 prototype,构成原型链。

  • class 是语法糖
  • extends 实现原型链继承

this 指向

取决于调用方式:默认、隐式、显式 (call/apply/bind)、new。

  • 箭头函数继承外层 this
  • 严格模式默认 this 为 undefined

事件循环

宏任务与微任务的执行顺序决定异步代码时序。

console.log(1);
setTimeout(() => console.log(2));
Promise.resolve().then(() => console.log(3));
// 输出:1 3 2

异步编程

Promise → async/await 是现代异步主流写法。

  • Promise.all / allSettled / race
  • try/catch 捕获 await 错误
  • 并发控制:手写 limit

ES6+ 关键特性

解构、展开、模板字符串、Map/Set、可选链、空值合并。

const { a = 1 } = obj;
const name = user?.name ?? '匿名';

模块化

ESM 是浏览器原生标准,CommonJS 用于 Node。

  • import 是静态引用,可 tree-shaking
  • import() 动态导入

TypeScript

为 JS 提供静态类型,提升大型项目可维护性。

基础类型

string / number / boolean / array / tuple / enum / never / unknown。

  • unknown 比 any 更安全
  • never 用于穷尽检查

接口与类型别名

interface 可声明合并,type 更灵活(联合、交叉)。

type User = { id: number; name: string };
interface User { age?: number }

泛型

让类型成为参数,实现可复用的类型工具。

function first<T>(arr: T[]): T {
  return arr[0];
}

类型工具

Partial / Required / Pick / Omit / Record / ReturnType。

  • keyof 获取键的联合
  • typeof 从值推导类型

类型守卫

in / typeof / instanceof / 自定义谓词收窄类型。

function isStr(x: unknown): x is string {
  return typeof x === 'string';
}

React 生态

组件化、声明式、单向数据流。

核心概念

JSX、虚拟 DOM、Diff 算法、Fiber 架构。

  • setState 异步批处理
  • key 提升列表 diff 效率

Hooks

useState / useEffect / useMemo / useCallback / useRef / useReducer。

useEffect(() => {
  const id = setInterval(tick, 1000);
  return () => clearInterval(id);
}, []);

状态管理

Context 适合低频全局状态;复杂场景用 Zustand / Redux Toolkit / Jotai。

  • 状态提升 vs 状态下放
  • 派生状态用 useMemo

性能优化

React.memo / useMemo / useCallback / 虚拟列表 / 懒加载。

  • 避免在 render 中创建新对象
  • 用 React.lazy + Suspense 代码分割

Next.js

React 全栈框架,支持 SSR / SSG / ISR / App Router。

  • Server Components 减少客户端体积
  • 文件路由约定
  • API Routes 后端能力

Vue 生态

渐进式框架,模板 + 响应式系统。

响应式原理

Vue3 用 Proxy 重写响应式,Vue2 为 Object.defineProperty。

  • ref 包装基本类型
  • reactive 包装对象

Composition API

setup / ref / computed / watch,逻辑可复用。

const count = ref(0);
const double = computed(() => count.value * 2);

生命周期

onMounted / onUpdated / onUnmounted / onBeforeMount。

  • 在 setup 中注册
  • 卸载时清理副作用

Nuxt.js

Vue 全栈框架,约定式路由 + SSR/SSG。

构建工具

从源码到产物:转译、打包、压缩、Tree-shaking。

Vite

基于 ESM 的极速开发服务器,生产用 Rollup 打包。

  • dev 期无打包,按需编译
  • 插件机制兼容 Rollup

Webpack

entry/output/loader/plugin 四大核心。

  • babel-loader 转译 JS
  • SplitChunks 分包
  • HMR 模块热替换

Tree-shaking

基于 ESM 静态分析,剔除未使用代码。

  • sideEffects 标记纯模块
  • 避免整体导入工具库

Babel / SWC

JS 转译器,SWC 基于 Rust,速度更快。

  • @babel/preset-env 按目标环境转译
  • polyfill 与转译的区别

浏览器原理

从输入 URL 到页面渲染的全过程。

渲染流水线

DOM → CSSOM → Layout → Paint → Composite。

  • 回流 (Layout) 必触发重绘
  • transform/opacity 走合成层

事件机制

捕获 → 目标 → 冒泡三阶段。

  • addEventListener 第三参数
  • 事件委托利用冒泡

存储机制

Cookie / localStorage / sessionStorage / IndexedDB。

  • Cookie 每次请求携带
  • IndexedDB 存大量结构化数据

同源策略与跨域

协议+域名+端口相同为同源;跨域方案:CORS、代理、postMessage。

  • 预检请求 OPTIONS
  • 简单请求 vs 复杂请求

网络与 HTTP

理解协议是排查接口与性能问题的基础。

HTTP 版本

HTTP/1.1 持久连接 → HTTP/2 多路复用 → HTTP/3 基于 QUIC。

  • HTTP/2 头部压缩 HPACK
  • HTTP/2 Server Push 已废弃

状态码

1xx 信息 / 2xx 成功 / 3xx 重定向 / 4xx 客户端 / 5xx 服务端。

  • 301 永久 vs 302 临时
  • 304 协商缓存命中

缓存策略

强缓存 (Cache-Control/Expires) + 协商缓存 (ETag/Last-Modified)。

Cache-Control: max-age=3600
ETag: "abc123"

HTTPS 与 TLS

TLS 握手建立加密通道,证书验证身份。

  • 对称 + 非对称混合加密
  • TLS 1.3 简化握手 1-RTT

REST 与 GraphQL

REST 资源导向;GraphQL 按需查询,减少过度获取。

性能优化

核心指标 + 加载优化 + 运行时优化。

核心指标 (Core Web Vitals)

LCP 最大内容绘制 / FID 首次输入延迟 / CLS 累积布局偏移。

  • LCP < 2.5s
  • CLS < 0.1

加载优化

减少体积 + 并行化 + 缓存。

  • 代码分割、按需加载
  • 图片懒加载、WebP/AVIF
  • CDN 加速静态资源

渲染优化

避免长任务,利用合成层。

  • requestAnimationFrame 而非 setTimeout
  • transform/opacity 做动画
  • 防抖与节流

度量工具

Lighthouse / Performance 面板 / Web Vitals 库。

工程化

规范、流程、自动化提升团队协作效率。

代码规范

ESLint + Prettier + TypeScript + Husky + lint-staged。

  • commitlint 规范提交信息
  • EditorConfig 统一编辑器配置

包管理

npm / yarn / pnpm;pnpm 软链接节省磁盘。

  • lock 文件需提交
  • semver 语义化版本

CI/CD

GitHub Actions / GitLab CI 自动化测试、构建、部署。

  • 自动化测试把关质量
  • 蓝绿/灰度发布降低风险

Monorepo

pnpm workspace / Turborepo / Nx 管理多包仓库。

  • 共享依赖与配置
  • 增量构建提升速度

测试

单元测试 (Jest/Vitest) + 组件测试 (Testing Library) + E2E (Playwright)。