前端面试基础知识总结(一):大纲 & HTML
前言
我在去年春天为了暑期实习做了很多准备,也参加了近30场技术面试,最终拿到了大厂的offer。之前准备的面经知识总结有些零碎,所以想重新整理一下,一方面自己在整理过程中可以重温知识点,另一方面如果未来被“毕业”了也可以掏出来复习。
前端知识大纲
下图是我总结的面试常考知识点的大纲:
我把前端面试中常考核的内容分成七个模块:基础、框架、前端工程化、浏览器原理、计算机网络、算法与数据结构、服务器基础。其中基础固然是最重要的,HTML、CSS、JavaScript、Dom是每一个前端er必须掌握好的内容。CSS常考核的知识点都在上面的思维导图上来,HTML考核的频次较少。JavaScript会考核的较为细致,除了会问一些基础概念,也会出手写题或者让你看代码说输出结果。同时ES6(即ES2015)从2015年后每年都会出新版本,像Promise、Class类在实际生产中非常常用,也经常在面试中考核。
根据你简历上的技术栈,Vue和React框架一般择其一考察。基本面试官都会问你更熟悉哪个技术栈再考察该框架的知识点,所以尤其要深入准备一个框架,除了吃透API、生命周期的基本概念,还要去了解底层原理,如果能了解该框架最新的发展趋势就更好了。同时还需要了解框架通识,比如MVVM和MVC的区别,Virtual Dom是什么,Vue和React的区别和各自优势等。
计算机网络、数据结构和算法这俩算是计算机科班人都会的基础知识。当然前端也会考核,但不会那么难。考核的趋势是一年比一年难,所以还是要做好心理准备。算法题上LeetCode刷上100~200道题绝对够用了,同时还需要掌握手写JS题(手写Promise等)。至于设计模式和编程范式不一定会考核,但最好也有所了解。在计算机网络领域,前端面试就喜欢问跨域问题,一定要深入、再深入的准备。Web安全、HTTPS、TCPIP之类的都是老生常谈了。
浏览器原理主要考核浏览器渲染方面。经典面试题“输入一个url到地址栏,浏览器经历了哪些变化”出现频率之高令人咂舌,默默吐槽一下感觉每个公司面试都会问到!在前端工程化领域,面试官经常会考核webpack和性能优化,也会问你对前端工程化的理解,会对前端发展趋势的看法。服务器基础的知识属于加分项,会最好,不会问题也不大。主要NodeJs太常用了,不了解说不过去。
除了上述知识点,项目经历的考核也占据了面试的半壁江山。一般而言,如果你的项目经历越出众,面试官越会对你的项目更感兴趣,从而提问更长的时间。这时候你要做的就是好好复盘整个项目,并准备好与该项目技术栈相关的发散性的各方面知识点。正所谓,不需要面面俱到,但要深入一二。
基础:HTML
大纲
HTML是什么?
超文本标记语言 (英语:Hypertext Markup Language,简称:HTML ) 是一种用来结构化 Web 网页及其内容的标记语言。
HTML版本
- HTML4:标签可以不结束
- HTML5:新增内容
- XHTML
- 目的是传输和存储数据,而不是描述数据
- 比HTML更严格:标签必须结束,属性必须带引号,属性必须有值,标签属性必须有值
HTML元素分类
- 块级元素block(方块形状,占据一整行):div ul ol li dl dt dd h1~h5 p
- 行内元素inline(一行中的某个位置):a b span img input select strong
- inline-block(行内,有宽高属性):selection
- 空元素: br、meta、hr、link、input、img
嵌套关系:
- 块级元素可以包含行内元素
- 块级元素不一定能包含块级元素(p标签不能包含div标签)
- 行内元素“一般”不能包含块级元素(a包含div是可以的)
HTML5新增内容
- 更好的语义化标签
<section>
用于对网站和页面内容分块,划分单独的模块区域<article>
独立的文章展示<aside>
页面中的附属侧边信息<header>
定义页面或内容的头部区域<footer>
定义页面或内容的底部区域<nav>
定义页面导航<figure>
表示一个独立的内容
- 作用:1.利于SEO 2.增强代码可读性
- Web Workers:运行在后台的 JavaScript,实现多线程
- 应用缓存:通过创建manifest 文件,可以轻松地创建 web 应用的离线版本
- requestAnimationFrame:保证回调函数在屏幕每一次的刷新建个中只执行一次,动画不掉帧
- 增加了canvas,拖放api,地理定位Geolocatio…
面试题
Doctype作⽤? 严格模式与混杂模式如何区分?它们有何意义?
<!DOCTYPE>
声明位于位于HTML文档中的第一行,处于<html>
标签之前。告知浏览器的解析器用什么文档标准解析这个文档。DOCTYPE不存在或格式不正确会导致文档以混杂模式呈现。
严格模式:排版和JS运作模式都是以该浏览器支持的最高标准运行。
混杂模式(兼容模式):页面以宽松的向后兼容的方式显示, 模拟老式浏览器的行为以防止站点无法工作。
HTML全局属性(global attribute)有哪些?
全局属性可用于任何 HTML 元素:
class
:为元素设置类标识id
id标识符draggable
: 是否可拖拽data-*
: 为元素增加⾃定义属性style
行内元素
为什么script标签在body底部,style标签在head上?
浏览器解析HTML文档是自上而下的,遇到默认的<script>
标签,会导致浏览器必须先加载并执行脚本,之后才能继续解析。对于那些需要很多JavaScript代码的页面来说,这无疑会导致浏览器在呈现页面时出现明显的延迟,而延迟期间的浏览器窗口中将是一片空白。
同理浏览器解析HTML文档是自上而下的,这样<style>
标签里的样式就会作用到body里的元素上。如果<style>
标签写在<body>
标签下面,在这之前的元素的样式就不会生效,会导致页面结构出来了,而CSS还没开始渲染。
<style>
标签还有两个属性:
async
属性:
- 对于普通脚本,如果存在 async 属性,那么普通脚本会被并行请求,并尽快解析和执行。
- 对于模块脚本,如果存在 async 属性,那么脚本及其所有依赖都会在延缓队列中执行,因此它们会被并行请求,并尽快解析和执行。
defer
属性:
- 并行请求,将在文档完成解析后,触发 DOMContentLoaded 事件前执行。
- 对模块脚本没有作用 —— 他们默认 defer
TBC.
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!