<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Interview on Time Friend</title><link>https://time-friend.com/zh/tags/interview/</link><description>Recent content in Interview on Time Friend</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Mon, 07 Jan 2019 22:17:36 +0000</lastBuildDate><atom:link href="https://time-friend.com/zh/tags/interview/index.xml" rel="self" type="application/rss+xml"/><item><title>前端面试知识点收集 - JavaScript篇</title><link>https://time-friend.com/zh/archive/interview-javascript/</link><pubDate>Mon, 07 Jan 2019 22:17:36 +0000</pubDate><guid>https://time-friend.com/zh/archive/interview-javascript/</guid><description>&lt;h2 id="javascript-面试知识点总结"&gt;JavaScript 面试知识点总结&lt;/h2&gt;
&lt;h4 id="1-介绍-js-的基本数据类型"&gt;1. 介绍 js 的基本数据类型。&lt;/h4&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;js 一共有六种基本数据类型，分别是 Undefined、Null、Boolean、Number、String，还有在 ES6 中新增的 Symbol 类型，
代表创建后独一无二且不可变的数据类型，它的出现我认为主要是为了解决可能出现的全局变量冲突的问题。
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="2-javascript-有几种类型的值你能画一下他们的内存图吗"&gt;2. JavaScript 有几种类型的值？你能画一下他们的内存图吗？&lt;/h4&gt;
&lt;p&gt;涉及知识点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;栈：原始数据类型（Undefined、Null、Boolean、Number、String）&lt;/li&gt;
&lt;li&gt;堆：引用数据类型（对象、数组和函数）&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;两种类型的区别是：存储位置不同。
原始数据类型直接存储在栈（stack）中的简单数据段，占据空间小、大小固定，属于被频繁使用数据，所以放入栈中存储。

引用数据类型存储在堆（heap）中的对象，占据空间大、大小不固定。如果存储在栈中，将会影响程序运行的性能；引用数据类型在
栈中存储了指针，该指针指向堆中该实体的起始地址。当解释器寻找引用值时，会首先检索其在栈中的地址，取得地址后从堆中获得实
体。
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;回答：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;js 可以分为两种类型的值，一种是基本数据类型，一种是复杂数据类型。

基本数据类型....（参考1）

复杂数据类型指的是 Object 类型，所有其他的如 Array、Date 等数据类型都可以理解为 Object 类型的子类。

两种类型间的主要区别是它们的存储位置不同，基本数据类型的值直接保存在栈中，而复杂数据类型的值保存在堆中，通过使用在栈中
保存对应的指针来获取堆中的值。
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;详细资料可以参考：
&lt;a href="https://blog.csdn.net/lxcao/article/details/52749421"&gt;《JavaScript 有几种类型的值？》&lt;/a&gt;
&lt;a href="https://blog.csdn.net/jiangjuanjaun/article/details/80327342"&gt;《JavaScript 有几种类型的值？能否画一下它们的内存图；》&lt;/a&gt;&lt;/p&gt;
&lt;h4 id="3-什么是堆什么是栈它们之间有什么区别和联系"&gt;3. 什么是堆？什么是栈？它们之间有什么区别和联系？&lt;/h4&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;堆和栈的概念存在于数据结构中和操作系统内存中。

在数据结构中，栈中数据的存取方式为先进后出。而堆是一个优先队列，是按优先级来进行排序的，优先级可以按照大小来规定。完全
二叉树是堆的一种实现方式。

在操作系统中，内存被分为栈区和堆区。

栈区内存由编译器自动分配释放，存放函数的参数值，局部变量的值等。其操作方式类似于数据结构中的栈。

堆区内存一般由程序员分配释放，若程序员不释放，程序结束时可能由垃圾回收机制回收。
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;详细资料可以参考：
&lt;a href="https://www.zhihu.com/question/19729973"&gt;《什么是堆？什么是栈？他们之间有什么区别和联系？》&lt;/a&gt;&lt;/p&gt;
&lt;h4 id="4-内部属性-class-是什么"&gt;4. 内部属性 [[Class]] 是什么？&lt;/h4&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;所有 typeof 返回值为 &amp;#34;object&amp;#34; 的对象（如数组）都包含一个内部属性 [[Class]]（我们可以把它看作一个内部的分类，而非
传统的面向对象意义上的类）。这个属性无法直接访问，一般通过 Object.prototype.toString(..) 来查看。例如：

Object.prototype.toString.call( [1,2,3] );
// &amp;#34;[object Array]&amp;#34;

Object.prototype.toString.call( /regex-literal/i );
// &amp;#34;[object RegExp]&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="5-介绍-js-有哪些内置对象"&gt;5. 介绍 js 有哪些内置对象？&lt;/h4&gt;
&lt;p&gt;涉及知识点：&lt;/p&gt;</description></item><item><title>前端面试知识点收集 - HTML篇</title><link>https://time-friend.com/zh/archive/interview-html/</link><pubDate>Sun, 06 Jan 2019 22:17:36 +0000</pubDate><guid>https://time-friend.com/zh/archive/interview-html/</guid><description>&lt;h2 id="html-面试知识点总结"&gt;HTML 面试知识点总结&lt;/h2&gt;
&lt;h4 id="1-doctype-的作用是什么"&gt;1. DOCTYPE 的作用是什么？&lt;/h4&gt;
&lt;p&gt;相关知识点：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;IE5.5 引入了文档模式的概念，而这个概念是通过使用文档类型（DOCTYPE）切换实现的。

&amp;lt;!DOCTYPE&amp;gt;声明位于 HTML 文档中的第一行，处于 &amp;lt;html&amp;gt; 标签之前。告知浏览器的解析器用什么文档标准解析这个文档。

DOCTYPE 不存在或格式不正确会导致文档以兼容模式呈现。
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;回答（参考1-5）：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;lt;!DOCTYPE&amp;gt; 声明一般位于文档的第一行，它的作用主要是告诉浏览器以什么样的模式来解析文档。一般指定了之后会以标准模式来
进行文档解析，否则就以兼容模式进行解析。在标准模式下，浏览器的解析规则都是按照最新的标准进行解析的。而在兼容模式下，浏
览器会以向后兼容的方式来模拟老式浏览器的行为，以保证一些老的网站的正确访问。

在 html5 之后不再需要指定 DTD 文档，因为 html5 以前的 html 文档都是基于 SGML 的，所以需要通过指定 DTD 来定义文
档中允许的属性以及一些规则。而 html5 不再基于 SGML 了，所以不再需要使用 DTD。
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="2-标准模式与兼容模式各有什么区别"&gt;2. 标准模式与兼容模式各有什么区别？&lt;/h4&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;标准模式的渲染方式和 JS 引擎的解析方式都是以该浏览器支持的最高标准运行。在兼容模式中，页面以宽松的向后兼容的方式显示
，模拟老式浏览器的行为以防止站点无法工作。
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="3-html5-为什么只需要写-doctype-html而不需要引入-dtd"&gt;3. HTML5 为什么只需要写 &lt;code&gt;&amp;lt;!DOCTYPE HTML&amp;gt;&lt;/code&gt;，而不需要引入 DTD？&lt;/h4&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;HTML5 不基于 SGML，因此不需要对 DTD 进行引用，但是需要 DOCTYPE 来规范浏览器的行为（让浏览器按照它们应该的方式来运
行）。

而 HTML4.01 基于 SGML ，所以需要对 DTD 进行引用，才能告知浏览器文档所使用的文档类型。
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="4-sgml--html-xml-和-xhtml-的区别"&gt;4. SGML 、 HTML 、XML 和 XHTML 的区别？&lt;/h4&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;SGML 是标准通用标记语言，是一种定义电子文档结构和描述其内容的国际标准语言，是所有电子文档标记语言的起源。

HTML 是超文本标记语言，主要是用于规定怎么显示网页。

XML 是可扩展标记语言是未来网页语言的发展方向，XML 和 HTML 的最大区别就在于 XML 的标签是可以自己创建的，数量无限多，
而 HTML 的标签都是固定的而且数量有限。

XHTML 也是现在基本上所有网页都在用的标记语言，他其实和 HTML 没什么本质的区别，标签都一样，用法也都一样，就是比 HTML 
更严格，比如标签必须都用小写，标签都必须有闭合标签等。
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="5-dtd-介绍"&gt;5. DTD 介绍&lt;/h4&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;DTD（ Document Type Definition 文档类型定义）是一组机器可读的规则，它们定义 XML 或 HTML 的特定版本中所有允许元
素及它们的属性和层次关系的定义。在解析网页时，浏览器将使用这些规则检查页面的有效性并且采取相应的措施。

DTD 是对 HTML 文档的声明，还会影响浏览器的渲染模式（工作模式）。
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="6-行内元素定义"&gt;6. 行内元素定义&lt;/h4&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;HTML4 中，元素被分成两大类: inline （内联元素）与 block（块级元素）。一个行内元素只占据它对应标签的边框所包含的空
间。

常见的行内元素有 a b span img strong sub sup button input label select textarea
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="7-块级元素定义"&gt;7. 块级元素定义&lt;/h4&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;块级元素占据其父元素（容器）的整个宽度，因此创建了一个“块”。

常见的块级元素有 div ul ol li dl dt dd h1 h2 h3 h4 h5 h6 p 
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="8-行内元素与块级元素的区别"&gt;8. 行内元素与块级元素的区别？&lt;/h4&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;HTML4中，元素被分成两大类：inline （内联元素）与 block （块级元素）。

（1） 格式上，默认情况下，行内元素不会以新行开始，而块级元素会新起一行。
（2） 内容上，默认情况下，行内元素只能包含文本和其他行内元素。而块级元素可以包含行内元素和其他块级元素。
（3） 行内元素与块级元素属性的不同，主要是盒模型属性上：行内元素设置 width 无效，height 无效（可以设置 line-hei
 ght），设置 margin 和 padding 的上下不会对其他元素产生影响。
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="9-html5-元素的分类"&gt;9. HTML5 元素的分类&lt;/h4&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;HTML4中，元素被分成两大类: inline（内联元素）与 block（块级元素）。但在实际的开发过程中，因为页面表现的需要，前
端工程师经常把 inline 元素的 display 值设定为 block （比如 a 标签），也经常把 block 元素的 display 值设定为
inline 之后更是出现了 inline-block 这一对外呈现 inline 对内呈现 block 的属性。因此，简单地把 HTML 元素划分为
inline 与 block 已经不再符合实际需求。

HTML5中，元素主要分为7类：Metadata Flow Sectioning Heading Phrasing Embedded Interactive
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="10-空元素定义"&gt;10. 空元素定义&lt;/h4&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;标签内没有内容的 HTML 标签被称为空元素。空元素是在开始标签中关闭的。

常见的空元素有：br hr img input link meta
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="11-link-标签定义"&gt;11. link 标签定义&lt;/h4&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;link 标签定义文档与外部资源的关系。

link 元素是空元素，它仅包含属性。 此元素只能存在于 head 部分，不过它可出现任何次数。

link 标签中的 rel 属性定义了当前文档与被链接文档之间的关系。常见的 stylesheet 指的是定义一个外部加载的样式表。
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="12-页面导入样式时使用-link-和-import-有什么区别"&gt;12. 页面导入样式时，使用 link 和 @import 有什么区别？&lt;/h4&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;（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 方法是基于文档的，无法使用 @i
 mport 的方式插入样式。
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="13-你对浏览器的理解"&gt;13. 你对浏览器的理解？&lt;/h4&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;浏览器的主要功能是将用户选择的 web 资源呈现出来，它需要从服务器请求资源，并将其显示在浏览器窗口中，资源的格式通常
是 HTML，也包括 PDF、image 及其他格式。用户用 URI（Uniform Resource Identifier 统一资源标识符）来指定所请
求资源的位置。

HTML 和 CSS 规范中规定了浏览器解释 html 文档的方式，由 W3C 组织对这些规范进行维护，W3C 是负责制定 web 标准的
组织。

但是浏览器厂商纷纷开发自己的扩展，对规范的遵循并不完善，这为 web 开发者带来了严重的兼容性问题。

简单来说浏览器可以分为两部分，shell 和 内核。

其中 shell 的种类相对比较多，内核则比较少。shell 是指浏览器的外壳：例如菜单，工具栏等。主要是提供给用户界面操作，
参数设置等等。它是调用内核来实现各种功能的。内核才是浏览器的核心。内核是基于标记语言显示内容的程序或模块。也有一些
 浏览器并不区分外壳和内核。从 Mozilla 将 Gecko 独立出来后，才有了外壳和内核的明确划分。
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="14-介绍一下你对浏览器内核的理解"&gt;14. 介绍一下你对浏览器内核的理解？&lt;/h4&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;主要分成两部分：渲染引擎和 JS 引擎。

渲染引擎的职责就是渲染，即在浏览器窗口中显示所请求的内容。默认情况下，渲染引擎可以显示 html、xml 文档及图片，它也
可以借助插件（一种浏览器扩展）显示其他类型数据，例如使用 PDF 阅读器插件，可以显示 PDF 格式。

JS 引擎：解析和执行 javascript 来实现网页的动态效果。

最开始渲染引擎和 JS 引擎并没有区分的很明确，后来 JS 引擎越来越独立，内核就倾向于只指渲染引擎。
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="15-常见的浏览器内核比较"&gt;15. 常见的浏览器内核比较&lt;/h4&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Trident：这种浏览器内核是 IE 浏览器用的内核，因为在早期 IE 占有大量的市场份额，所以这种内核比较流行，以前有很多
网页也是根据这个内核的标准来编写的，但是实际上这个内核对真正的网页标准支持不是很好。但是由于 IE 的高市场占有率，微
软也很长时间没有更新 Trident 内核，就导致了 Trident 内核和 W3C 标准脱节。还有就是 Trident 内核的大量 Bug 等
安全问题没有得到解决，加上一些专家学者公开自己认为 IE 浏览器不安全的观点，使很多用户开始转向其他浏览器。

Gecko：这是 Firefox 和 Flock 所采用的内核，这个内核的优点就是功能强大、丰富，可以支持很多复杂网页效果和浏览器扩
展接口，但是代价是也显而易见就是要消耗很多的资源，比如内存。

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

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

Blink：谷歌在 Chromium Blog 上发表博客，称将与苹果的开源浏览器核心 Webkit 分道扬镳，在 Chromium 项目中研发 B
link 渲染引擎（即浏览器核心），内置于 Chrome 浏览器之中。其实 Blink 引擎就是 Webkit 的一个分支，就像 webkit 是
KHTML 的分支一样。Blink 引擎现在是谷歌公司与 Opera Software 共同研发，上面提到过的，Opera 弃用了自己的 Presto 
内核，加入 Google 阵营，跟随谷歌一起研发 Blink。
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;详细的资料可以参考：
&lt;a href="http://www.cnblogs.com/fullhouse/archive/2011/12/19/2293455.html"&gt;《浏览器内核的解析和对比》&lt;/a&gt;
&lt;a href="https://blog.csdn.net/Summer_15/article/details/71249203"&gt;《五大主流浏览器内核的源起以及国内各大浏览器内核总结》&lt;/a&gt;&lt;/p&gt;</description></item><item><title>前端面试知识点收集 - CSS篇</title><link>https://time-friend.com/zh/archive/interview-css/</link><pubDate>Sat, 05 Jan 2019 22:17:36 +0000</pubDate><guid>https://time-friend.com/zh/archive/interview-css/</guid><description>&lt;h2 id="css-面试知识点总结"&gt;CSS 面试知识点总结&lt;/h2&gt;
&lt;h4 id="1介绍一下标准的-css-的盒子模型低版本-ie-的盒子模型有什么不同的"&gt;1.介绍一下标准的 CSS 的盒子模型？低版本 IE 的盒子模型有什么不同的？&lt;/h4&gt;
&lt;p&gt;相关知识点：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;（1）有两种盒子模型：IE盒模型（border-box）、W3C标准盒模型（content-box）
（2）盒模型：分为内容（content）、填充（padding）、边界（margin）、边框（border）四个部分

IE盒模型和W3C标准盒模型的区别：

（1）W3C标准盒模型：属性width，height只包含内容content，不包含border和padding
（2）IE盒模型：属性width，height包含content、border和padding，指的是content
+padding+border。

在ie8+浏览器中使用哪个盒模型可以由box-sizing（CSS新增的属性）控制，默认值为content-box，即标准盒模型；
如果将box-sizing设为border-box则用的是IE盒模型。如果在ie6，7，8中DOCTYPE缺失会将盒子模型解释为IE
盒子模型。若在页面中声明了DOCTYPE类型，所有的浏览器都会把盒模型解释为W3C盒模型。
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;回答：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;盒模型都是由四个部分组成的，分别是margin、border、padding和content。

标准盒模型和IE盒模型的区别在于设置width和height时，所对应的范围不同。标准盒模型的width和height属性的
范围只包含了content，而IE盒模型的width和height属性的范围包含了border、padding和content。

一般来说，我们可以通过修改元素的box-sizing属性来改变元素的盒模型。
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;详细的资料可以参考：
&lt;a href="https://juejin.im/post/59ef72f5f265da4320026f76"&gt;《CSS 盒模型详解》&lt;/a&gt;&lt;/p&gt;
&lt;h4 id="2css-选择符有哪些"&gt;2.CSS 选择符有哪些？&lt;/h4&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;（1）id选择器（#myid）
（2）类选择器（.myclassname）
（3）标签选择器（div,h1,p）
（4）后代选择器（h1 p）
（5）相邻后代选择器（子）选择器（ul&amp;gt;li）
（6）兄弟选择器（li~a）
（7）相邻兄弟选择器（li+a）
（8）属性选择器（a[rel=&amp;#34;external&amp;#34;]）
（9）伪类选择器（a:hover,li:nth-child）
（10）伪元素选择器（::before、::after）
（11）通配符选择器（*）
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="3before-和after-中双冒号和单冒号有什么区别解释一下这-2-个伪元素的作用"&gt;3.::before 和:after 中双冒号和单冒号有什么区别？解释一下这 2 个伪元素的作用。&lt;/h4&gt;
&lt;p&gt;相关知识点：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;单冒号（:）用于CSS3伪类，双冒号（::）用于CSS3伪元素。（伪元素由双冒号和伪元素名称组成）
双冒号是在当前规范中引入的，用于区分伪类和伪元素。不过浏览器需要同时支持旧的已经存在的伪元素写法，
比如:first-line、:first-letter、:before、:after等，
而新的在CSS3中引入的伪元素则不允许再支持旧的单冒号的写法。

想让插入的内容出现在其它内容前，使用::before，否者，使用::after；
在代码顺序上，::after生成的内容也比::before生成的内容靠后。
如果按堆栈视角，::after生成的内容会在::before生成的内容之上。
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;回答：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;在css3中使用单冒号来表示伪类，用双冒号来表示伪元素。但是为了兼容已有的伪元素的写法，在一些浏览器中也可以使用单冒号
来表示伪元素。

伪类一般匹配的是元素的一些特殊状态，如hover、link等，而伪元素一般匹配的特殊的位置，比如after、before等。
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="4伪类与伪元素的区别"&gt;4.伪类与伪元素的区别&lt;/h4&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;css引入伪类和伪元素概念是为了格式化文档树以外的信息。也就是说，伪类和伪元素是用来修饰不在文档树中的部分，比如，一句
话中的第一个字母，或者是列表中的第一个元素。

伪类用于当已有的元素处于某个状态时，为其添加对应的样式，这个状态是根据用户行为而动态变化的。比如说，当用户悬停在指定的
元素时，我们可以通过:hover来描述这个元素的状态。

伪元素用于创建一些不在文档树中的元素，并为其添加样式。它们允许我们为元素的某些部分设置样式。比如说，我们可以通过::be
fore来在一个元素前增加一些文本，并为这些文本添加样式。虽然用户可以看到这些文本，但是这些文本实际上不在文档树中。

有时你会发现伪元素使用了两个冒号（::）而不是一个冒号（:）。这是CSS3的一部分，并尝试区分伪类和伪元素。大多数浏览
器都支持这两个值。按照规则应该使用（::）而不是（:），从而区分伪类和伪元素。但是，由于在旧版本的W3C规范并未对此进行
特别区分，因此目前绝大多数的浏览器都支持使用这两种方式表示伪元素。
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;详细资料可以参考：
&lt;a href="http://www.alloyteam.com/2016/05/summary-of-pseudo-classes-and-pseudo-elements/"&gt;《总结伪类与伪元素》&lt;/a&gt;&lt;/p&gt;
&lt;h4 id="5css-中哪些属性可以继承"&gt;5.CSS 中哪些属性可以继承？&lt;/h4&gt;
&lt;p&gt;相关资料：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;每个CSS属性定义的概述都指出了这个属性是默认继承的，还是默认不继承的。这决定了当你没有为元素的属性指定值时该如何计算
值。

当元素的一个继承属性没有指定值时，则取父元素的同属性的计算值。只有文档根元素取该属性的概述中给定的初始值（这里的意思应
该是在该属性本身的定义中的默认值）。

当元素的一个非继承属性（在Mozilla code里有时称之为reset property）没有指定值时，则取属性的初始值initial v
alue（该值在该属性的概述里被指定）。

有继承性的属性：

（1）字体系列属性
font、font-family、font-weight、font-size、font-style、font-variant、font-stretch、font-size-adjust

（2）文本系列属性
text-indent、text-align、text-shadow、line-height、word-spacing、letter-spacing、
text-transform、direction、color

（3）表格布局属性
caption-side border-collapse empty-cells

（4）列表属性
list-style-type、list-style-image、list-style-position、list-style

（5）光标属性
cursor

（6）元素可见性
visibility

（7）还有一些不常用的；speak，page，设置嵌套引用的引号类型quotes等属性


注意：当一个属性不是继承属性时，可以使用inherit关键字指定一个属性应从父元素继承它的值，inherit关键字用于显式地
指定继承性，可用于任何继承性/非继承性属性。
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;回答：&lt;/p&gt;</description></item><item><title>前端面试知识点收集 - 综合篇</title><link>https://time-friend.com/zh/archive/interview-comprehensive/</link><pubDate>Fri, 04 Jan 2019 22:17:36 +0000</pubDate><guid>https://time-friend.com/zh/archive/interview-comprehensive/</guid><description>&lt;h2 id="html-httpweb-综合问题"&gt;$HTML， HTTP，web 综合问题&lt;/h2&gt;
&lt;h3 id="常见排序算法的时间复杂度空间复杂度"&gt;常见排序算法的时间复杂度,空间复杂度&lt;/h3&gt;
&lt;p&gt;&lt;img src="img/sort-compare.png" alt="排序算法比较"&gt;&lt;/p&gt;
&lt;h3 id="前端需要注意哪些-seo"&gt;前端需要注意哪些 SEO&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;合理的 title、description、keywords：搜索对着三项的权重逐个减小，title 值强调重点即可，重要关键词出现不要超过 2 次，而且要靠前，不同页面 title 要有所不同；description 把页面内容高度概括，长度合适，不可过分堆砌关键词，不同页面 description 有所不同；keywords 列举出重要关键词即可&lt;/li&gt;
&lt;li&gt;语义化的 HTML 代码，符合 W3C 规范：语义化代码让搜索引擎容易理解网页&lt;/li&gt;
&lt;li&gt;重要内容 HTML 代码放在最前：搜索引擎抓取 HTML 顺序是从上到下，有的搜索引擎对抓取长度有限制，保证重要内容一定会被抓取&lt;/li&gt;
&lt;li&gt;重要内容不要用 js 输出：爬虫不会执行 js 获取内容&lt;/li&gt;
&lt;li&gt;少用 iframe：搜索引擎不会抓取 iframe 中的内容&lt;/li&gt;
&lt;li&gt;非装饰性图片必须加 alt&lt;/li&gt;
&lt;li&gt;提高网站速度：网站速度是搜索引擎排序的一个重要指标&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="web-开发中会话跟踪的方法有哪些"&gt;web 开发中会话跟踪的方法有哪些&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;cookie&lt;/li&gt;
&lt;li&gt;session&lt;/li&gt;
&lt;li&gt;url 重写&lt;/li&gt;
&lt;li&gt;隐藏 input&lt;/li&gt;
&lt;li&gt;ip 地址&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="img的title和alt有什么区别"&gt;&lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt;的&lt;code&gt;title&lt;/code&gt;和&lt;code&gt;alt&lt;/code&gt;有什么区别&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;title&lt;/code&gt;是&lt;a href="http://www.w3.org/TR/html-markup/global-attributes.html#common.attrs.core"&gt;global attributes&lt;/a&gt;之一，用于为元素提供附加的 advisory information。通常当鼠标滑动到元素上的时候显示。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;alt&lt;/code&gt;是&lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt;的特有属性，是图片内容的等价描述，用于图片无法加载时显示、读屏器阅读图片。可提图片高可访问性，除了纯装饰图片外都必须设置有意义的值，搜索引擎会重点分析。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="doctype-是什么举例常见-doctype-及特点"&gt;doctype 是什么,举例常见 doctype 及特点&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;!doctype&amp;gt;&lt;/code&gt;声明必须处于 HTML 文档的头部，在&lt;code&gt;&amp;lt;html&amp;gt;&lt;/code&gt;标签之前，HTML5 中不区分大小写&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;!doctype&amp;gt;&lt;/code&gt;声明不是一个 HTML 标签，是一个用于告诉浏览器当前 HTMl 版本的指令&lt;/li&gt;
&lt;li&gt;现代浏览器的 html 布局引擎通过检查 doctype 决定使用兼容模式还是标准模式对文档进行渲染，一些浏览器有一个接近标准模型。&lt;/li&gt;
&lt;li&gt;在 HTML4.01 中&lt;code&gt;&amp;lt;!doctype&amp;gt;&lt;/code&gt;声明指向一个 DTD，由于 HTML4.01 基于 SGML，所以 DTD 指定了标记规则以保证浏览器正确渲染内容&lt;/li&gt;
&lt;li&gt;HTML5 不基于 SGML，所以不用指定 DTD&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;常见 dotype：&lt;/p&gt;</description></item></channel></rss>