前端面试知识点整理
- 概念 + 定义
- 理解和见解
- 工作中的应用
- 引导到自己熟悉的领域(不要被动的提问-回答)
defer 的作用
默认情况下,浏览器在解析 HTML 的过程中,遇到 script 标签不会继续构建 DOM Tree(即阻塞 DOM Tree 的构建),需要等待脚本文件被下载、解析并执行完成
为什么?
- 脚本依赖性,依赖某些元素可能会导致错误行为
- 同步执行
- 顺序依赖
- 性能优化,避免重复计算和重新布局
但是现代 Web 框架,脚本文件过大,如果等待脚本文件下载、解析并执行完,影响首屏渲染
script 元素的一个属性,异步加载,按顺序解析执行(会在 DOMContentLoaded 之后才解析执行)
async 的作用
类似 defer,异步加载,立刻解析执行(可能在 DOMContentLoaded 之前或之后)
不依赖 DOM 时使用,常用的就是百度统计
CSS3 新特性
并不存在真正意义上的 CSS3,它不是一个标准
CSS3 不是一个单一的规范,而是一系独立模块的集合,扩展了 CSS 的功能
如:属性选择器、伪类和伪元素,盒阴影、边框圆角,变换,过渡和动画,弹性盒布局,网格布局
Pixel
picture element(pix + el),像素
Physical Pixel
物理像素,显示屏的最小发光单位
Pixels Per Inch(PPI)(物理像素密度,每英寸长度内的物理像素数量,越大越细腻)
Dots Per Inch(DPI,每英寸的打印点数)
Device Independent Pixel(DIP)
独立设备像素,也称逻辑像素,抽象单位,用于在不同分辨率和不同尺寸的显示设备上保持视觉一致性
Device Pixel Ratio(DPR,设备像素密度,定义了物理像素与逻辑像素之间的关系),通过 window.devicePixelRatio 访问,越大越细腻
为什么在移动端中使用 @2x、@3x 的图片
移动端设备中,有非常多高分辨率的设备,为适应不同的像素密度
IOS、Android 自动选择,Web 需要通过媒体查询或 img 标签的 srcset 属性来实现图像的自动选择
1px 问题,如何画出 0.5px 边框
viewport + rem + div(淘宝)
伪类 + transform(京东)
FC(Formatting Context,格式化上下文)
BFC、IFC 即块级格式上下文和行级格式上下文
在标准流中,块级元素的布局属于 BFC,行级元素的布局属于 IFC
BFC 作用
BFC 是用来决定块级盒子是如何布局的,默认情况下,块级元素会使用同一个 BFC 进行布局
-
避免外边距合并
-
解决浮动高度塌陷
浮动元素的父元素触发 BFC,浮动元素的父元素的高度是 auto
BFC 的高度是 auto 的情况下,如何计算高度?
什么情况会出现 BFC?
html 根元素、浮动、绝对定位(absolute、fixed)、inline-block、表格相关、overflow 除了 visible 之外的值、弹性元素、网格元素、display 值为 flow-root
浏览器兼容
遇到问题查 caniuse
工程化中的配置选项、normalize.css、polyfill、移动端适配
SEO
什么是 SEO
SEO 是搜索引擎优化,全称为 Search Engine Optimization
提高知名度,靠自然搜索结果获取流量(需要了解搜索引擎的自然排名机制)
如何进行 SEO
-
SSR — 大部分搜索引擎只抓取静态的 HTML,而不会执行 JavaScript,动态生成的内容无法被爬虫索引。比如 Next.js(生态好)、Nuxt.js(性能好)等框架
-
TDK — title、description、keywords
-
语义化标签,图片加 alt — 但是现在在实际工作中很少遵循语义化
-
robots.txt 文件 — 告诉搜索引擎哪些被爬取哪些不被爬取(create-react-app 创建的项目有 robots.txt)
-
HTTPS — HTTPS 优先级高于 HTTP
-
内部链接和外部链接
浏览器输入一个 URL 并 enter 时,发生了什么
-
DNS 解析 — 先查缓存:浏览器缓存 -> 操作系统缓存(本地 hosts) -> 路由器缓存 -> ISP(互联网服务提供商)缓存。如果没有缓存:根域名服务器(重定向到顶级域名服务器) -> 顶级域名服务器 -> 权威域名服务器 -> 获得 ip 并层层缓存
-
建立 TCP 连接
-
发送 HTTP 请求
-
服务器处理请求
-
服务器返回 HTTP 响应
-
浏览器渲染
跨域
浏览器的事件循环
现代浏览器基本都是多进程的,打开一个新的 tab 页面就会开启一个新的进程(防止一个页面卡死造成所有页面无法响应)
JavaScript 是单线程的
浏览器的事件循环是一个在 JavaScript 引擎和渲染引擎之间协调工作的机制,主要任务是监控调用栈和任务队列