一、React技术栈深度解析
1.1 组件生命周期方法全解析
React组件生命周期可分为挂载、更新、卸载三大阶段,每个阶段包含多个关键方法:
- 挂载阶段:
constructor()初始化状态与绑定方法,getDerivedStateFromProps()静态方法处理props更新,render()返回虚拟DOM,componentDidMount()完成首次渲染后执行(适合发起网络请求或DOM操作)。 - 更新阶段:
getDerivedStateFromProps()再次触发(谨慎使用),shouldComponentUpdate()通过返回值控制是否重渲染,render()重新生成虚拟DOM,getSnapshotBeforeUpdate()在DOM更新前捕获信息,componentDidUpdate()在更新后执行(常用于数据同步)。 - 卸载阶段:
componentWillUnmount()执行清理逻辑(如取消定时器、事件监听移除)。
最佳实践:在componentDidMount中初始化第三方库(如D3.js图表),在componentWillUnmount中清除事件监听防止内存泄漏。
1.2 状态管理集成模式
主流状态管理方案(如Redux)的集成遵循以下模式:
- Provider模式:通过
<Provider store={store}>将Redux store注入组件树 - 高阶组件封装:使用
connect()函数连接组件与store - Hooks简化:通过
useSelector获取状态,useDispatch派发动作// Redux Hooks示例const Counter = () => {const count = useSelector(state => state.counter);const dispatch = useDispatch();return (<button onClick={() => dispatch({type: 'INCREMENT'})}>{count}</button>);};
1.3 并发状态更新控制
React通过事务机制批量处理多个setState调用:
- 异步更新:连续调用
setState会被合并为单次更新 - 函数式更新:使用
setState(prevState => newState)确保状态计算基于最新值 - 并发模式:在React 18+中,自动批处理(Automatic Batching)扩展至异步操作
表单优化案例:处理多个输入字段时,采用受控组件模式:
const Form = () => {const [formData, setFormData] = useState({});const handleChange = (e) => {const { name, value } = e.target;setFormData(prev => ({...prev,[name]: value}));};return (<form><input name="username" onChange={handleChange} /><input name="password" onChange={handleChange} /></form>);};
二、Vue技术栈实战要点
2.1 响应式系统原理
Vue 3的响应式系统基于Proxy实现:
- 数据劫持:通过
reactive()或ref()创建响应式对象 - 依赖收集:在getter中收集依赖(Watcher)
- 派发更新:在setter中通知依赖更新
// 响应式对象示例const state = reactive({ count: 0 });watchEffect(() => {console.log(`Count changed: ${state.count}`);});
2.2 组件通信模式
- Props/Events:父子组件基础通信
- Provide/Inject:跨层级数据传递
- Vuex状态管理:集中式存储(适合大型应用)
- 事件总线:通过
mitt等轻量库实现全局事件(需谨慎使用)
2.3 性能优化策略
- 虚拟滚动:对长列表使用
<RecycleScroller>组件 - 异步组件:通过
defineAsyncComponent实现代码分割 - 编译优化:开启
<template>的v-once指令减少不必要的重渲染
三、TypeScript高级应用
3.1 泛型组件开发
interface ListProps<T> {items: T[];renderItem: (item: T) => React.ReactNode;}function GenericList<T>({ items, renderItem }: ListProps<T>) {return <div>{items.map(renderItem)}</div>;}// 使用<GenericList<User>items={users}renderItem={(user) => <div>{user.name}</div>}/>
3.2 装饰器应用场景
- 日志记录:通过装饰器自动添加方法调用日志
- 权限控制:验证用户权限后执行方法
- 性能监控:自动计算方法执行时间
``typescriptCalling ${key} with`, args);
function Log(target: any, key: string, descriptor: PropertyDescriptor) {
const original = descriptor.value;
descriptor.value = function(...args: any[]) {
console.log(
return original.apply(this, args);
};
}
class Example {
@Log
greet(name: string) {
return Hello, ${name};
}
}
### 四、Node.js后端开发实践#### 4.1 WebSocket实时通信```javascriptconst WebSocket = require('ws');const wss = new WebSocket.Server({ port: 8080 });wss.on('connection', (ws) => {ws.on('message', (message) => {// 广播消息给所有客户端wss.clients.forEach((client) => {if (client.readyState === WebSocket.OPEN) {client.send(`Server: ${message}`);}});});});
4.2 支付集成安全实践
- 签名验证:对回调通知进行HMAC-SHA256验证
- 幂等性设计:通过订单号防止重复支付
- 敏感数据脱敏:日志中隐藏卡号等敏感信息
function verifyPaymentSignature(params, secretKey) {const sortedParams = Object.keys(params).sort().map(key => `${key}=${params[key]}`).join('&');const expectedSignature = crypto.createHmac('sha256', secretKey).update(sortedParams).digest('hex');return expectedSignature === params.signature;}
五、面试准备策略
- 技术深度:对每个技术点准备”为什么”和”如何优化”的回答
- 项目复盘:用STAR法则梳理项目中的技术决策
- 模拟演练:通过LeetCode等平台练习算法题(重点:链表、树、动态规划)
- 系统设计:掌握常见架构模式(如CQRS、事件溯源)
终极建议:建立个人技术博客,持续输出学习心得,这不仅能加深理解,还能在面试中展示技术热情。记住,面试官更关注你解决实际问题的能力,而非背诵API的能力。