2026-08-04 12:58:35
以下是针对百度健康春招前端一面可能涉及问题的详细解答:
1. 介绍一下项目视口设置:通过<meta name="viewport" content="width=device-width, initial-scale=1.0">确保页面宽度与设备宽度一致。
单位选择:使用rem或vw/vh替代固定像素(px),结合JavaScript动态计算根字体大小。
媒体查询:针对不同屏幕尺寸编写CSS规则,例如:
@media (max-width: 768px) { .container { padding: 10px; }}弹性布局:采用Flexbox或Grid实现灵活的布局结构。
!important(强制最高优先级)
内联样式(如<div style="color: red;">)
ID选择器(如#header)
类/属性/伪类选择器(如.nav、[type="text"]、:hover)
元素/伪元素选择器(如div、::before)
a:!important数量(通常为0或1)
b:ID选择器数量
c:类/属性/伪类选择器数量
d:元素/伪元素选择器数量
例如:#nav .item:hover的优先级为(0, 1, 2, 0)。
加载优化:代码分割(Code Splitting)、资源压缩(如Terser压缩JS)、CDN加速。
渲染优化:减少重绘/回流(如避免频繁操作DOM)、使用requestAnimationFrame优化动画。
缓存策略:利用浏览器缓存(强缓存/协商缓存)、Service Worker缓存静态资源。
监控工具:使用Lighthouse、Performance API分析性能瓶颈。
React:使用React.lazy + Suspense:
const Home = React.lazy(() => import('./Home'));function App() { return ( <Suspense fallback={<div>Loading...</div>}> <Route path="/" component={Home} /> </Suspense> );}Vue:动态导入(import()) + 路由配置:
{ path: '/about', component: () => import('./About.vue')}开发体验:基于ES Module原生支持,冷启动快(无需打包)。
生产构建:使用Rollup,输出优化更好(如自动代码分割)。
适用场景:现代浏览器项目、追求开发效率的团队。
生态丰富:插件系统成熟,兼容旧浏览器(如通过Babel转译)。
灵活性:可高度定制化构建流程。
适用场景:复杂项目、需要兼容低版本浏览器的场景。
DNS解析:将域名转换为IP地址。
TCP连接:建立与服务器的TCP三次握手。
HTTP请求:发送请求(可能包含重定向,如301/302)。
服务器响应:返回HTML文件及资源链接。
解析HTML:构建DOM树。
解析CSS:构建CSSOM树。
渲染树合成:合并DOM和CSSOM生成渲染树。
布局(Layout):计算元素位置和尺寸。
绘制(Paint):将像素渲染到屏幕。
复合(Composite):合并图层(如涉及动画或透明度)。
机制:浏览器直接从本地缓存读取资源,不发送请求。
相关字段:Expires(绝对时间)或Cache-Control: max-age=3600(相对时间)。
机制:浏览器发送请求,服务器通过Last-Modified/ETag判断是否返回304(未修改)。
相关字段:If-Modified-Since、If-None-Match。
301 Moved Permanently:永久重定向,浏览器会缓存跳转关系。
302 Found:临时重定向,每次请求均需访问原URL。
LCP(Largest Contentful Paint):最大内容元素渲染时间,反映首屏加载速度。
优化方法:压缩图片、预加载关键资源、减少阻塞渲染的CSS/JS。
问题:浮点数精度丢失(如0.1 + 0.2 !== 0.3)。
解决方案:
转换为整数计算后还原:
function add(a, b) { const scale = 10 Math.max(String(a).split('.')[1]?.length || 0, String(b).split('.')[1]?.length || 0); return (a * scale + b * scale) / scale;}使用库如decimal.js或big.js。