助力金三银四跳槽季,覆盖90%大厂核心考点,技术进阶+面试技巧双提升
问题1:如何用HTML5语义化标签优化新闻详情页?
包裹主体内容,
划分章节
标记发布时间,
+
处理图文问题2:实现等间距三栏布局(中间自适应)
.container {
display: flex;
gap: 20px; /* 关键:替代margin方案 */
}
.left, .right {
flex: 0 0 200px; /* 固定宽度 */
}
.center {
flex: 1; /* 自适应剩余空间 */
}
问题:以下代码输出什么?如何修复?
for (var i = 0; i < 5; i++) {
setTimeout(() => console.log(i), 100);
}
// 输出:5,5,5,5,5
修复方案:
// 方案1:使用let块级作用域
for (let i = 0; i < 5; i++) { ... }
// 方案2:IIFE捕获变量
for (var i = 0; i < 5; i++) {
(function(j) {
setTimeout(() => console.log(j), 100);
})(i);
}
题目:实现带缓存机制的Promise.all
function cachedPromiseAll(promises) {
const cache = new Map();
return Promise.all(promises.map(p => {
const key = p.url; // 假设是请求Promise
if (cache.has(key)) return cache.get(key);
const promise = p.catch(err => { /* 错误处理 */ });
cache.set(key, promise);
return promise;
}));
}
核心对比:
Object.defineProperty | Proxy | |
---|---|---|
监听能力 | 无法检测属性新增/删除 | 全对象监听 |
数组处理 | 需要重写方法 | 直接监听索引变化 |
性能 | 递归初始化消耗大 | 惰性代理更高效 |
手写reactive:
function reactive(obj) {
return new Proxy(obj, {
get(target, key) {
track(target, key); // 依赖收集
return Reflect.get(target, key);
},
set(target, key, value) {
Reflect.set(target, key, value);
trigger(target, key); // 触发更新
}
});
}
问题代码:
function Timer() {
const [count, setCount] = useState(0);
useEffect(() => {
const id = setInterval(() => {
setCount(count + 1); // 闭包陷阱,始终为0+1
}, 1000);
return () => clearInterval(id);
}, []); // 空依赖
return {count};
}
修复方案:
// 使用函数式更新
setCount(c => c + 1);
// 或正确声明依赖
useEffect(() => {...}, [count]);
media="print"
)
预加载字体/首屏图片// React动态导入
const LazyComponent = React.lazy(() => import('./Component'));
// Vue异步组件
const AsyncComp = defineAsyncComponent(() => import('./Comp'));
splitChunks配置:
optimization: {
splitChunks: {
chunks: 'all',
cacheGroups: {
vendors: {
test: /[\\/]node_modules[\\/]/,
priority: -10
},
default: {
minChunks: 2,
priority: -20,
reuseExistingChunk: true
}
}
}
}
流程图:
Client Hello → 支持的密码套件
↓
Server Hello → 选定套件+证书
↓
密钥交换 → 生成会话密钥
↓
加密通信开始
优化点:握手从2-RTT减少到1-RTT,提升连接速度
方案 | 优点 | 缺点 |
---|---|---|
Token验证 | 安全性高 | 需要前后端协调存储 |
SameSite Cookie | 浏览器自动处理 | 兼容性要求(部分旧浏览器) |
双重Cookie验证 | 实现简单 | 存在子域漏洞风险 |
问题:如何解决首屏渲染白屏问题?
微前端方案对比:
qiankun | Module Federation | |
---|---|---|
原理 | 通过JS Entry加载子应用 | Webpack5模块联邦 |
隔离性 | CSS/JS沙箱完善 | 依赖工程化配置 |
适用场景 | 老旧系统迁移 | 新项目模块化开发 |
知识体系化
JavaScript → 闭包/原型链/Event Loop
React → Fiber架构/Hooks原理/性能优化
Network → HTTP协议/缓存策略/安全防护
高频手写题训练清单
模拟面试实战
本文持续更新,欢迎关注博主获取最新前端技术解析与面试动向! 原创不易,转载请注明出处。