最近一段面试的总结

前言

前端时间面了几家公司,陆续收到一些offer,最终选择一家做智能家居的公司,感觉以后物联网更会有发展前途。在新公司上班有一周时间,架构跟业务都基本已熟悉,凑着星期天,对前段时间面试的问题总结。

HTML

  • 对 DIV, Table 布局的理解
  • 语义化的HTML理解
  • 对HTML5的理解
  • 对doctype的理解

其他都很简单,我主要说说对doctype的理解,之前熟悉个大概,但是自己感觉没有表达清楚。

<!DOCTYPE>处于<html>标签之前,此标签可告知浏览器文档使用哪种HTML或XHTML规范。
该标签可声明三种DTD类型,分别表示严格版本、过渡版本以及基于框架的HTML版本(假如文档中的标记不遵循doctype声明所指定的DTD,这个文档除了不能通过代码校验之外,还有可能无法在浏览器中正确显示。)

1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

解析:在上面的声明中,声明了文档的根元素是 html,它在公共标识符被定义为 “-//W3C//DTD XHTML 1.0 Strict//EN” 的 DTD 中进行了定义。浏览器将明白如何寻找匹配此公共标识符的 DTD。如果找不到,浏览器将使用公共标识符后面的 URL 作为寻找 DTD 的位置。

    • : 表示组织名称未注册。Internet 工程任务组(IETF)和万维网协会(W3C)并非注册的 ISO 组织。+为默认,表示组织名称已注册。
  • DTD : 指定公开文本类,即所引用的对象类型。 默认为DTD(document type definition)。
  • HTML:指定公开文本描述,即对所引用的公开文本的唯一描述性名称。后面可附带版本号。默认为HTML。
  • URL:指定所引用对象的位置。
  • Strict:排除所有 W3C 专家希望逐步淘汰的代表性属性和元素。

三种HTML文档类型

HTML 4.01 规定了三种文档类型:Strict、Transitional 以及 Frameset

  • Strict:
    1
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" " http://www.w3.org/TR/html4/strict.dtd">

如果需要干净的标记,免于表现层的混乱,用HTML Strict DTD类型。

  • Transitional:
    1
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " http://www.w3.org/TR/html4/loose.dtd">

Transitional DTD 可包含 W3C 所期望移入样式表的呈现属性和元素. 如果用户使用了不支持层叠样式表(CSS)的浏览器以至于你不得不使用 HTML 的呈现特性时,用 Transitional DTD 类型

  • Frameset:
    1
    !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" " http://www.w3.org/TR/html4/frameset.dtd">

Frameset DTD 被用于带有框架的文档。除 frameset 元素取代了 body 元素之外,Frameset DTD 等同于 Transitional DTD

三种 XML 文档类型:

  • Strict
  • Transitional
  • Frameset

XHTML 1就是HTML 4.01的XML化,是一种不向前兼容的格式。

最新的 HTML5的doctype 不需要对DTD引用。

CSS

  • 盒子模型的理解
  • box-sizing的理解
  • positon的理解
  • 如何清除浮动
  • 选择器的权重
  • 实现上下作用居中的几种方法
  • css的解析顺序,link 引入 与import引入的区别

我主要说一下最后一个问题。

css的解析顺序 是从右往左的,这点非常重要,可以主导你写出快速选择的高效的css选择器。
link引入的按照顺序同步加载的而@import引入的css需要等待页面加载完成才会加载,是异步的。

JS

js问的问题比较多,我只能回忆一些部分内容

  • 闭包的理解,及运用的一些问题
  • 原型链理解
  • 事件冒泡理解
  • 函数声明,变量提升一些问题
  • 正则表达式的运用
  • 实现深拷贝的功能。有很多方法,最简单的是Object.create()。其他方法参见之前的博客
  • 用原生js实现Jquery的链式操作。最简单的方式在每个方法里return this,其他的可参照Jquery,underscore的实现方法。
  • Cookie, SessionStorage, Localstorage区别及运用
  • 多种方法实现继承。(红宝书里有详细说明,最经典的实现方式是原型,然后还有组合继承,寄生式继承,寄生组合式继承)
  • 轮询,长连接,实时通讯的理解

其他

  • SEO了解吗
  • img 的 alt 跟 title区别(alt是当图片不存在时的替代文字,爬虫读的属性;title是对图片的描述与进一步说明,也就是鼠标移动上去显示的文字)
  • HTTP 的头部了解(我只能说出大概,有时间买呗HTTP的书籍好好研究研究)
  • 前端如何优化(雅虎36条军规)
  • 一些状态码了解
  • XSS,CSRF了解吗,如何防范
  • 对前端工程化的了解
  • 对当前流行的MVVM框架原理了解吗
  • 算法数据结构熟悉吗

总结

总之很多面试考察的都是基础,总体面试还不错,关于 HTTP 以及 算法,MVVM的原理,正则等这些问题还要好好学习研究