前端面试每日三题 - Day 28
这是我为准备前端/全栈开发工程师面试整理的第28天每日三题练习:
✅ 题目1:HTTP缓存策略全景解析
核心缓存类型对比表
缓存类型 | 验证方式 | 响应头 | 网络请求消耗 |
---|---|---|---|
强缓存 | 无 | Cache-Control/Expires | 无 |
协商缓存 | If-Modified-Since等 | ETag/Last-Modified | 304响应 |
1.强缓存配置示例
# Nginx配置静态资源缓存
location ~* \.(js|css|png)$ {expires 365d;add_header Cache-Control "public, max-age=31536000";
}
2. 协商缓存工作机制
# 首次请求
GET /data.json
HTTP/1.1 200 OK
ETag: "33a64df551425fcc55e4d42a148795d9"
高级缓存策略
1.Vary头控制
add_header Vary User-Agent; # 不同UA缓存不同版本
2.Service Worker缓存
// 优先网络后降级缓存
self.addEventListener('fetch', event => {event.respondWith(fetch(event.request).catch(() => caches.match(event.request)));
});
✅ 题目2:Vue3 Teleport原理深度剖析
核心概念解析:
- 解决DOM结构问题
<template><!-- 将模态框渲染到body末端 --><Teleport to="body"><div class="modal" v-if="show"><h2>标题</h2></div></Teleport> </template>
- 多目标传送支持
<Teleport :to="targetElement"><div>动态目标位置</div> </Teleport><script setup> const targetElement = ref('#containerA'); </script>
源码实现要点
// 核心挂载逻辑(伪代码)
function renderTeleport(vnode, container) {const target = document.querySelector(vnode.props.to);if (target) {mountChildren(vnode.children, target);}
}
注意事项
- 样式作用域:传送内容仍受父组件样式影响
- 过渡动画:需配合transition组件使用
- SSR兼容:需服务端特殊处理
✅ 题目3:大规模表单性能优化方案
优化策略清单
-
组件级优化
<!-- 使用v-memo缓存静态部分 --> <div v-memo="[dynamicValue]"><span>固定文本</span> {{ dynamicValue }} </div>
-
虚拟滚动方案
// 使用vue-virtual-scroller <RecycleScroller :items="items" :item-size="50" key-field="id" > <template v-slot="{ item }"><FormItem :data="item" /> </template> </RecycleScroller>
-
状态管理优化
// 使用Pinia分片存储 export const useFormStore = defineStore('form', {state: () => ({sections: {basic: reactive({ /* 基础字段 */ }),detail: reactive({ /* 详情字段 */ })}}) })
高级优化手段
-
防抖批量提交
// 使用Lodash防抖 const submitForm = _.debounce(async () => {await API.submit(formData); }, 500);
-
Web Worker计算校验
// 主线程 const worker = new Worker('./form-validator.js'); worker.postMessage(formData); worker.onmessage = (e) => {errors.value = e.data; };
📅 明日预告:
- Web Components技术解析
- React 18并发模式原理
- 微服务网关设计实践
💪 坚持每日三题,未来更进一步!如果你也在准备面试,欢迎一起刷题打卡!