html前端开发面试基本问题(前端面试题HTML)

搜索微信公众号了解更多: 每天看世界丫,接下来我们就来聊聊关于html前端开发面试基本问题?以下内容大家不妨参考一二希望能帮到您!

html前端开发面试基本问题(前端面试题HTML)

html前端开发面试基本问题

搜索微信公众号了解更多: 每天看世界丫

1.link 标签定义是什么?

a.link 标签定义文档与外部资源的关系。link 元素是空元素,它仅包含属性。此元素只能存在于 head 部分,不过它可出现任 何次数。

b.link 标签中的 rel 属性定义了当前文档与被链接文档之间的关系。

c.常见的 stylesheet 指的是定义一个外部加载的样式表。

2. link 和 @import 的区别是什么?

(1)从属关系区别。@import 是 CSS 提供的语法规则,只有导入样式表的作用;link 是 html 提供的标签,不仅可以加载 CSS 文件,还可以定义 RSS、rel 连接属性、引入网 站图标等。

(2)加载顺序区别。加载页面时,link 标签引入的 CSS 被同时加载;@import 引入 的 CSS 将在页面加载完毕后被加载。

(3)兼容性区别。@import 是 CSS2.1 才有的语法,故只可在 IE5 才能识别;link 标 签作为 HTML 元素,不存在兼容性问题。

(4)DOM 可控性区别。可以通过 JS 操作 DOM ,插入 link 标签来改变样式;由于 DOM 方法是基于文档的,无法使用 @import 的方式插入样式。

3.谈谈你对浏览器的理解?

浏览器的主要功能是将用户选择的 web 资源呈现出来,它需要从服务器请求资源,并 将其显示在浏览器窗口中,资源的格式通常是 HTML,也包括 PDF、image 及其他格式。用 户用 URI(Uniform Resource Identifier 统一资源标识符)来指定所请求资源的位置。HTML 和 CSS 规范中规定了浏览器解释 html 文档的方式,由 W3C 组织对这些规范 进行维护,W3C 是负责制定 web 标准的组织。但是浏览器厂商纷纷开发自己的扩展,对规范的遵循并不完善,这为 web 开发者带来 了严重的兼容性问题。

简单来说浏览器可以分为两部分,shell 和 内核。其中 shell 的种类 相对比较多,内核则比较少。shell 是指浏览器的外壳:例如菜单,工具栏等。主要是提供 给用户界面操作,参数设置等等。

它是调用内核来实现各种功能的。内核才是浏览器的核心。内核是基于标记语言显示内容的程序或模块。也有一些浏览器并不区分外壳和内核。从Mozilla 将 Gecko 独立出来后,才有了外壳和内核的明确划分。

4.谈谈你对浏览器内核的理解?

主要分成两部分:渲染引擎和 JS 引擎。

渲染引擎的职责就是渲染,即在浏览器窗口中显示所请求的内容。

默认情况下,渲染引 擎可以显示 html、xml 文档及图片,它也可以借助插件(一种浏览器扩展)显示其他类型 数据,例如使用 PDF 阅读器插件,可以显示 PDF 格式。

JS 引擎:解析和执行 javascript 来实现网页的动态效果。最开始渲染引擎和 JS 引擎并 没有区分的很明确,后来 JS 引擎越来越独立,内核就倾向于只指渲染引擎。

5.常见的浏览器内核比较和区别是什么?

Trident:这种浏览器内核是 IE 浏览器用的内核,因为在早期 IE 占有大量的市场份额, 所以这种内核比较流行,以前有很多网页也是根据这个内核的标准来编写的,但是实际上这 个内核对真正的网页标准支持不是很好。但是由于 IE 的高市场占有率,微软也很长时间没 有更新 Trident 内核,就导致了 Trident 内核和 W3C 标准脱节。还有就是 Trident 内核的 大量 Bug 等安全问题没有得到解决,加上一些专家学者公开自己认为 IE 浏览器不安全的 观点,使很多用户开始转向其他浏览器。Gecko:这是 Firefox 和 Flock 所采用的内核,这个内核的优点就是功能强大、丰富, 可以支持很多复杂网页效果和浏览器扩展接口,但是代价是也显而易见就是要消耗很多的资 源,比如内存。

Presto:Opera 曾经采用的就是 Presto 内核,Presto 内核被称为公认的浏览网页速度 最快的内核,这得益于它在开发时的天生优势,在处理 JS 脚本等脚本语言时,会比其他的 内核快 3 倍左右,缺点就是为了达到很快的速度而丢掉了一部分网页兼容性。

WebKit:Webkit 是 Safari 采用的内核,它的优点就是网页浏览速度较快,虽然不及 Presto 但是也胜于 Gecko 和 Trident,缺点是对于网页代码的容错性不高,也就是说对网页 代码的兼容性较低,会使一些编写不标准的网页无法正确显示。WebKit 前身是 KDE 小组 的 KHTML 引擎,可以说 WebKit 是 KHTML 的一个开源的分支。

Blink:谷歌在 Chromium Blog 上发表博客,称将与苹果的开源浏览器核心 Webkit 分 道扬镳,在 Chromium 项目中研发 Blink 渲染引擎(即浏览器核心),内置于 Chrome 浏览 器之中。其实 Blink 引擎就是 Webkit 的一个分支,就像 webkit 是 KHTML 的分支一样。Blink 引擎现在是谷歌公司与 Opera Software 共同研发,上面提到过的,Opera 弃用了自己 的 Presto 内核,加入 Google 阵营,跟随谷歌一起研发 Blink。

6.谈谈浏览器的区别是什么?

(1) IE 浏览器内核:Trident 内核,也是俗称的 IE 内核;

(2)Chrome 浏览器内核:统称为 Chromium 内核或 Chrome 内核,以前是 Webkit 内核,现在是 Blink 内核;

(3) Firefox 浏览器内核:Gecko 内核,俗称 Firefox 内核;

(4) Safari 浏览器内核:Webkit 内核;

(5) Opera 浏览器内核:最初是自己的 Presto 内核,后来加入谷歌大军,从 Webkit 又到了 Blink 内核;

(6) 360 浏览器、猎豹浏览器内核:IE Chrome 双内核;

(7) 搜狗、遨游、QQ 浏览器内核:Trident(兼容模式) Webkit(高速模式);

(8) 百度浏览器、世界之窗内核:IE 内核;

(9) 2345 浏览器内核:好像以前是 IE 内核,现在也是 IE Chrome 双内核了;

(10)UC 浏览器内核:这个众口不一,UC 说是他们自己研发的 U3 内核,但好像还 是基于 Webkit 和 Trident ,还有说是基于火狐内核。

7.浏览器的渲染原理是什么?

(1)首先解析收到的文档,根据文档定义构建一棵 DOM 树,DOM 树是由 DOM 元 素及属性节点组成的。

(2)然后对 CSS 进行解析,生成 CSSOM 规则树。

(3)根据 DOM 树和 CSSOM 规则树构建渲染树。渲染树的节点被称为渲染对象, 渲染对象是一个包含有颜色和大小等属性的矩形,渲染对象和 DOM 元素相对应,但这种 对应关系不是一对一的,不可见的 DOM 元素不会被插入渲染树。还有一些 DOM 元素对应 几个可见对象,它们一般是一些具有复杂结构的元素,无法用一个矩形来描述。 (4)当渲染对象被创建并添加到树中,它们并没有位置和大小,所以当浏览器生成渲 染树以后,就会根据渲染树来进行布局(也可以叫做回流)。这一阶段浏览器要做的事情是 要弄清楚各个节点在页面中的确切位置和大小。通常这一行为也被称为“自动重排”。

(5)布局阶段结束后是绘制阶段,遍历渲染树并调用渲染对象的 paint 方法将它们 的内容显示在屏幕上,绘制使用 UI 基础组件。值得注意的是,这个过程是逐步完成的,为 了更好的用户体验,渲染引擎将会尽可能早的将内容呈现到屏幕上,并不会等到所有的 html 都解析完成之后再去构建和布局 render 树。它是解析完一部分内容就显示一部分内容,同 时,可能还在通过网络下载其余内容。

8.渲染过程中遇到 JS 文件怎么处理?(浏览器解析过程)

JavaScript 的加载、解析与执行会阻塞文档的解析,也就是说,在构建 DOM 时,HTML 解析器若遇到了 JavaScript,那么它会暂停文档的解析,将控制权移交给 JavaScript 引擎, 等 JavaScript 引擎运行完毕,浏览器再从中断的地方恢复继续解析文档。

也就是说,如果你想首屏渲染的越快,就越不应该在首屏就加载 JS 文件,这也是都 建议将 script 标签放在 body 标签底部的原因。当然在当下,并不是说 script 标签必须放 在底部,因为你可以给 script 标签添加 defer 或者 async 属性。

9.async 和 defer 的作用是什么?有什么区别?

(1)脚本没有 defer 或 async,浏览器会立即加载并执行指定的脚本,也就是说不等 待后续载入的文档元素,读到就加载并执行。

(2)defer 属性表示延迟执行引入的 JavaScript,即这段 JavaScript 加载时 HTML 并 未停止解析,这两个过程是并行的。当整个 document 解析完毕后再执行脚本文件,在 DOMContentLoaded 事件触发之前 完成。多个脚本按顺序执行。

(3)async 属性表示异步执行引入的 JavaScript,与 defer 的区别在于,如果已经加 载好,就会开始执行,也就是说它的执行仍然会阻塞文档的解析,只是它的加载过程不会阻 塞。多个脚本的执行顺序无法保证。

10.什么是文档的预解析?

Webkit 和 Firefox 都做了这个优化,当执行 JavaScript 脚本时,另一个线程解析剩下 的文档,并加载后面需要通过网络加载的资源。这种方式可以使资源并行加载从而使整体速 度更快。需要注意的是,预解析并不改变 DOM 树,它将这个工作留给主解析过程,自己 只解析外部资源的引用,比如外部脚本、样式表及图片。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页