前端开发面试题

前端开发知识点:

HTML&CSS:
	对Web标准的理解、浏览器内核差异、兼容性、hack、CSS基本功:布局、盒子模型、选择器优先级、
	HTML5、CSS3、Flexbox

JavaScript:
    数据类型、运算、对象、Function、继承、闭包、作用域、原型链、事件、RegExp、JSON、Ajax、
	DOM、BOM、内存泄漏、跨域、异步装载、模板引擎、前端MVC、路由、模块化、Canvas、ECMAScript 6、Nodejs

其他:
    移动端、响应式、自动化构建、HTTP、离线存储、WEB安全、优化、重构、团队协作、可维护、易用性、SEO、UED、架构、职业生涯、快速学习能力

作为一名前端工程师,无论工作年头长短都应该掌握的知识点

此条由 王子墨 发表在 攻城师的实验室

	1、DOM结构 —— 两个节点之间可能存在哪些关系以及如何在节点之间任意移动。

	2、DOM操作 —— 如何添加、移除、移动、复制、创建和查找节点等。

	3、事件 —— 如何使用事件,以及IE和标准DOM事件模型之间存在的差别。

	4、XMLHttpRequest —— 这是什么、怎样完整地执行一次GET请求、怎样检测错误。

	5、严格模式与混杂模式 —— 如何触发这两种模式,区分它们有何意义。

	6、盒模型 —— 外边距、内边距和边框之间的关系,及IE8以下版本的浏览器中的盒模型

	7、块级元素与行内元素 —— 怎么用CSS控制它们、以及如何合理的使用它们

	8、浮动元素 —— 怎么使用它们、它们有什么问题以及怎么解决这些问题。

	9、HTML与XHTML —— 二者有什么区别,你觉得应该使用哪一个并说出理由。

	10、JSON —— 作用、用途、设计结构。

更新时间: 2016-3-25

HTML

  • Doctype作用?标准模式与兼容模式各有什么区别?

      (1)、<!DOCTYPE>声明位于位于HTML文档中的第一行,处于 <html> 标签之前。告知浏览器的解析器用什么文档标准解析这个文档。DOCTYPE不存在或格式不正确会导致文档以兼容模式呈现。
    
      (2)、标准模式的排版 和JS运作模式都是以该浏览器支持的最高标准运行。在兼容模式中,页面以宽松的向后兼容的方式显示,模拟老式浏览器的行为以防止站点无法工作。
    
  • HTML5 为什么只需要写 <!DOCTYPE HTML>

       HTML5 不基于 SGML,因此不需要对DTD进行引用,但是需要doctype来规范浏览器的行为(让浏览器按照它们应该的方式来运行);
    
       而HTML4.01基于SGML,所以需要对DTD进行引用,才能告知浏览器文档所使用的文档类型。
    
  • 行内元素有哪些?块级元素有哪些? 空(void)元素有那些?

      首先:CSS规范规定,每个元素都有display属性,确定该元素的类型,每个元素都有默认的display值,如div的display默认值为“block”,则为“块级”元素;span默认display属性值为“inline”,是“行内”元素。
    
      (1)行内元素有:a b span img input select strong(强调的语气)
      (2)块级元素有:div ul ol li dl dt dd h1 h2 h3 h4…p
    
      (3)常见的空元素:
      	<br> <hr> <img> <input> <link> <meta>
      	鲜为人知的是:
      	<area> <base> <col> <command> <embed> <keygen> <param> <source> <track> <wbr>
    
      不同浏览器(版本)、HTML4(5)、CSS2等实际略有差异
      参考: http://stackoverflow.com/questions/6867254/browsers-default-css-for-html-elements
    
  • 页面导入样式时,使用link和@import有什么区别?

      (1)link属于XHTML标签,除了加载CSS外,还能用于定义RSS, 定义rel连接属性等作用;而@import是CSS提供的,只能用于加载CSS;
    
      (2)页面被加载的时,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载;
    
      (3)import是CSS2.1 提出的,只在IE5以上才能被识别,而link是XHTML标签,无兼容问题;
    
  • 介绍一下你对浏览器内核的理解?

      主要分成两部分:渲染引擎(layout engineer或Rendering Engine)和JS引擎。
      渲染引擎:负责取得网页的内容(HTML、XML、图像等等)、整理讯息(例如加入CSS等),以及计算网页的显示方式,然后会输出至显示器或打印机。浏览器的内核的不同对于网页的语法解释会有不同,所以渲染的效果也不相同。所有网页浏览器、电子邮件客户端以及其它需要编辑、显示网络内容的应用程序都需要内核。
    
      JS引擎则:解析和执行javascript来实现网页的动态效果。
    
      最开始渲染引擎和JS引擎并没有区分的很明确,后来JS引擎越来越独立,内核就倾向于只指渲染引擎。
    
  • 常见的浏览器内核有哪些?

      Trident内核:IE,MaxThon,TT,The World,360,搜狗浏览器等。[又称MSHTML]
      Gecko内核:Netscape6及以上版本,FF,MozillaSuite/SeaMonkey等
      Presto内核:Opera7及以上。      [Opera内核原为:Presto,现为:Blink;]
      Webkit内核:Safari,Chrome等。   [ Chrome的:Blink(WebKit的分支)]
    
    详细文章:[浏览器内核的解析和对比](http://www.cnblogs.com/fullhouse/archive/2011/12/19/2293455.html)
    
  • html5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分 HTML 和 HTML5? * HTML5 现在已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增加。 绘画 canvas; 用于媒介回放的 video 和 audio 元素; 本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失; sessionStorage 的数据在浏览器关闭后自动删除; 语意化更好的内容元素,比如 article、footer、header、nav、section; 表单控件,calendar、date、time、email、url、search; 新的技术webworker, websocket, Geolocation;

        移除的元素:
      	  纯表现的元素:basefont,big,center,font, s,strike,tt,u;
      	  对可用性产生负面影响的元素:frame,frameset,noframes;
    
      * 支持HTML5新标签:
      	 IE8/IE7/IE6支持通过document.createElement方法产生的标签,
        	 可以利用这一特性让这些浏览器支持HTML5新标签,
        	 浏览器支持新标签后,还需要添加标签默认的样式。
    
           当然也可以直接使用成熟的框架、比如html5shim;
      * 如何区分HTML5: DOCTYPE声明\新增的结构元素\功能元素
    
  • 简述一下你对HTML语义化的理解?

      用正确的标签做正确的事情。
      html语义化让页面的内容结构化,结构更清晰,便于对浏览器、搜索引擎解析;
      即使在没有样式CSS情况下也以一种文档格式显示,并且是容易阅读的;
      搜索引擎的爬虫也依赖于HTML标记来确定上下文和各个关键字的权重,利于SEO;
      使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解。
    
  • 请描述一下 cookies,sessionStorage 和 localStorage 的区别?

      cookie是网站为了标示用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)。
      cookie数据始终在同源的http请求中携带(即使不需要),记会在浏览器和服务器间来回传递。
      sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。
    
      存储大小:
      	cookie数据大小不能超过4k。
      	sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。
    
      有期时间:
      	localStorage    存储持久数据,浏览器关闭后数据不丢失除非主动删除数据;
      	sessionStorage  数据在当前浏览器窗口关闭后自动删除。
      	cookie          设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭
    
  • iframe有那些缺点?

      *iframe会阻塞主页面的Onload事件;
      *搜索引擎的检索程序无法解读这种页面,不利于SEO;
    
      *iframe和主页面共享连接池,而浏览器对相同域的连接有限制,所以会影响页面的并行加载。
    
      使用iframe之前需要考虑这两个缺点。如果需要使用iframe,最好是通过javascript
      动态给iframe添加src属性值,这样可以绕开以上两个问题。
    
  • Label的作用是什么?是怎么用的?

      label标签来定义表单控制间的关系,当用户选择该标签时,浏览器会自动将焦点转到和标签相关的表单控件上。
    
      <label for="Name">Number:</label>
      <input type=“text“name="Name" id="Name"/>
    
      <label>Date:<input type="text" name="B"/></label>
    
  • HTML5的form如何关闭自动完成功能?

      给不想要提示的 form 或某个 input 设置为 autocomplete=off。
    
  • 如何实现浏览器内多个标签页之间的通信? (阿里)

      WebSocket、SharedWorker;
      也可以调用localstorge、cookies等本地存储方式;
    
      localstorge另一个浏览上下文里被添加、修改或删除时,它都会触发一个事件,
      我们通过监听事件,控制它的值来进行页面信息通信;
      注意quirks:Safari 在无痕模式下设置localstorge值时会抛出 QuotaExceededError 的异常;
    
  • webSocket如何兼容低浏览器?(阿里)

      Adobe Flash Socket 、
      ActiveX HTMLFile (IE) 、
      基于 multipart 编码发送 XHR 、
      基于长轮询的 XHR
    
  • 页面可见性(Page Visibility API) 可以有哪些用途?

      通过 visibilityState 的值检测页面当前是否可见,以及打开网页的时间等;
      在页面被切换到其他后台进程的时候,自动暂停音乐或视频的播放;
    
  • 网页验证码是干嘛的,是为了解决什么安全问题。

      区分用户是计算机还是人的公共全自动程序。可以防止恶意破解密码、刷票、论坛灌水;
      有效防止黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试。
    
  • title与h1的区别、b与strong的区别、i与em的区别?

      title属性没有明确意义只表示是个标题,H1则表示层次明确的标题,对页面信息的抓取也有很大的影响;
    
      strong是标明重点内容,有语气加强的含义,使用阅读设备阅读网络时:<strong>会重读,而<B>是展示强调内容。
    
      i内容展示为斜体,em表示强调的文本;
    
      Physical Style Elements -- 自然样式标签
      b, i, u, s, pre
      Semantic Style Elements -- 语义样式标签
      strong, em, ins, del, code
      应该准确使用语义样式标签, 但不能滥用, 如果不能确定时首选使用自然样式标签。
    

CSS

  • 介绍一下标准的CSS的盒子模型?低版本IE的盒子模型有什么不同的?

      (1)有两种, IE 盒子模型、W3C 盒子模型;
      (2)盒模型: 内容(content)、填充(padding)、边界(margin)、 边框(border);
      (3)区  别: IE的content部分把 border 和 padding计算了进去;
    
  • CSS优先级算法如何计算?

      *   优先级就近原则,同权重情况下样式定义最近者为准;
      *   载入样式以最后载入的定位为准;
    
      优先级为:
      	同权重: 内联样式表(标签内部)> 嵌入样式表(当前文件中)> 外部样式表(外部文件中)。
      	!important >  id > class > tag
      	important 比 内联优先级高
    
  • 如何居中div?

    • 水平居中:给div设置一个宽度,然后添加margin:0 auto属性

       div{
       	width:200px;
       	margin:0 auto;
        }
      
    • 让绝对定位的div居中

       div {
       	position: absolute;
       	width: 300px;
       	height: 300px;
       	margin: auto;
       	top: 0;
       	left: 0;
       	bottom: 0;
       	right: 0;
       	background-color: pink;	/* 方便看效果 */
       }
      
    • 水平垂直居中一

       确定容器的宽高 宽500 高 300 的层
       设置层的外边距
      
       div {
       	position: relative;		/* 相对定位或绝对定位均可 */
       	width:500px;
       	height:300px;
       	top: 50%;
       	left: 50%;
       	margin: -150px 0 0 -250px;     	/* 外边距为自身宽高的一半 */
       	background-color: pink;	 	/* 方便看效果 */
      
        }
      
    • 水平垂直居中二

       未知容器的宽高,利用 `transform` 属性
      
       div {
       	position: absolute;		/* 相对定位或绝对定位均可 */
       	width:500px;
       	height:300px;
       	top: 50%;
       	left: 50%;
       	transform: translate(-50%, -50%);
       	background-color: pink;	 	/* 方便看效果 */
      
       }
      
    • 水平垂直居中三

       利用 flex 布局
       实际使用时应考虑兼容性
      
       .container {
       	display: flex;
       	align-items: center; 		/* 垂直居中 */
       	justify-content: center;	/* 水平居中 */
      
       }
       .container div {
       	width: 100px;
       	height: 100px;
       	background-color: pink;		/* 方便看效果 */
       }  
      
  • display有哪些值?说明他们的作用。

        block       	块类型。默认宽度为父元素宽度,可设置宽高,换行显示。
        none        	缺省值。象行内元素类型一样显示。
        inline      	行内元素类型。默认宽度为内容宽度,不可设置宽高,同行显示。
        inline-block  默认宽度为内容宽度,可以设置宽高,同行显示。
        list-item   	象块类型元素一样显示,并添加样式列表标记。
        table       	此元素会作为块级表格来显示。
        inherit     	规定应该从父元素继承 display 属性的值。
    
  • position的值relative和absolute定位原点是?

        absolute
      	生成绝对定位的元素,相对于值不为 static的第一个父元素进行定位。
        fixed (老IE不支持)
      	生成绝对定位的元素,相对于浏览器窗口进行定位。
        relative
      	生成相对定位的元素,相对于其正常位置进行定位。
        static
      	默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right z-index 声明)。
        inherit
      	规定从父元素继承 position 属性的值。
    
  • CSS3有哪些新特性?

        新增各种CSS选择器	(: not(.input):所有 class 不是“input”的节点)
        圆角		    (border-radius:8px)
        多列布局	    (multi-column layout)
        阴影和反射	(Shadow\Reflect)
        文字特效		(text-shadow、)
        文字渲染		(Text-decoration)
        线性渐变		(gradient)
        旋转		 	(transform)
        缩放,定位,倾斜,动画,多背景
        例如:transform:\scale(0.85,0.90)\ translate(0px,-30px)\ skew(-9deg,0deg)\Animation:
    
  • 请解释一下CSS3的Flexbox(弹性盒布局模型),以及适用场景?

       一个用于页面布局的全新CSS3功能,Flexbox可以把列表放在同一个方向(从上到下排列,从左到右),并让列表能延伸到占用可用的空间。
       较为复杂的布局还可以通过嵌套一个伸缩容器(flex container)来实现。
       采用Flex布局的元素,称为Flex容器(flex container),简称"容器"。
       它的所有子元素自动成为容器成员,称为Flex项目(flex item),简称"项目"。
       常规布局是基于块和内联流方向,而Flex布局是基于flex-flow流可以很方便的用来做局中,能对不同屏幕大小自适应。
       在布局上有了比以前更加灵活的空间。
    
  • 经常遇到的浏览器的兼容性有哪些?原因,解决方法是什么?

  • 为什么要初始化CSS样式。

      - 因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面显示差异。
    
      - 当然,初始化样式会对SEO有一定的影响,但鱼和熊掌不可兼得,但力求影响最小的情况下初始化。
    
  • css定义的权重

      以下是权重的规则:标签的权重为1,class的权重为10,id的权重为100,以下例子是演示各种定义的权重值:
    
      /*权重为1*/
      div{
      }
      /*权重为10*/
      .class1{
      }
      /*权重为100*/
      #id1{
      }
      /*权重为100+1=101*/
      #id1 div{
      }
      /*权重为10+1=11*/
      .class1 div{
      }
      /*权重为10+10+1=21*/
      .class1 .class2 div{
      }
    
      如果权重相同,则最后定义的样式会起作用,但是应该避免这种情况出现
    
  • 请解释一下为什么需要清除浮动?清除浮动的方式

    清除浮动是为了清除使用浮动元素产生的影响。浮动的元素,高度会塌陷,而高度的塌陷使我们页面后面的布局不能正常显示。

  • 移动端的布局用过媒体查询吗?

    假设你现在正用一台显示设备来阅读这篇文章,同时你也想把它投影到屏幕上,或者打印出来, 而显示设备、屏幕投影和打印等这些媒介都有自己的特点,CSS就是为文档提供在不同媒介上展示的适配方法

    当媒体查询为真时,相关的样式表或样式规则会按照正常的级联规被应用。 当媒体查询返回假, 标签上带有媒体查询的样式表 仍将被下载 (只不过不会被应用)。

    包含了一个媒体类型和至少一个使用 宽度、高度和颜色等媒体属性来限制样式表范围的表达式。 CSS3加入的媒体查询使得无需修改内容便可以使样式应用于某些特定的设备范围。

  • 使用 CSS 预处理器吗?喜欢那个?

      SASS (SASS、LESS没有本质区别,只因为团队前端都是用的SASS)
    
  • CSS优化、提高性能的方法有哪些?

      关键选择器(key selector)。选择器的最后面的部分为关键选择器(即用来匹配目标元素的部分);
      如果规则拥有 ID 选择器作为其关键选择器,则不要为规则增加标签。过滤掉无关的规则(这样样式系统就不会浪费时间去匹配它们了);
      提取项目的通用公有样式,增强可复用性,按模块编写组件;增强项目的协同开发性、可维护性和可扩展性;
      使用预处理工具或构建工具(gulp对css进行语法检查、自动补前缀、打包压缩、自动优雅降级);
    
  • 浏览器是怎样解析CSS选择器的?

      样式系统从关键选择器开始匹配,然后左移查找规则选择器的祖先元素。
      只要选择器的子树一直在工作,样式系统就会持续左移,直到和规则匹配,或者是因为不匹配而放弃该规则。
    
  • 在网页中的应该使用奇数还是偶数的字体?为什么呢?

  • margin和padding分别适合什么场景使用?

      margin是用来隔开元素与元素的间距;padding是用来隔开元素与内容的间隔。
      margin用于布局分开元素使元素与元素互不相干;
      padding用于元素与内容之间的间隔,让内容(文字)与(包裹)元素之间有一段
    
  • 什么是响应式设计?响应式设计的基本原理是什么?如何兼容低版本的IE?

  • 视差滚动效果,如何给每页做不同的动画?(回到顶部,向下滑动要再次出现,和只出现一次分别怎么做?)

JavaScript

  • JavaScript原型,原型链 ? 有什么特点?

     每个对象都会在其内部初始化一个属性,就是prototype(原型),当我们访问一个对象的属性时,
     如果这个对象内部不存在这个属性,那么他就会去prototype里找这个属性,这个prototype又会有自己的prototype,
     于是就这样一直找下去,也就是我们平时所说的原型链的概念。
     关系:instance.constructor.prototype = instance.__proto__
    
     特点:
     JavaScript对象是通过引用来传递的,我们创建的每个新对象实体中并没有一份属于自己的原型副本。当我们修改原型时,与之相关的对象也会继承这一改变。
    
  • Javascript如何实现继承?

     1、构造继承
     2、原型继承
     3、实例继承
     4、拷贝继承
    
     原型prototype机制或apply和call方法去实现较简单,建议使用构造函数与原型混合方式。
    
     	function Parent(){
     		this.name = 'wang';
     	}
    
     	function Child(){
     		this.age = 28;
     	}
     	Child.prototype = new Parent();//继承了Parent,通过原型
    
     	var demo = new Child();
     	alert(demo.age);
     	alert(demo.name);//得到被继承的属性
    
  • JavaScript继承的几种实现方式?

  • javascript创建对象的几种方式?

     javascript创建对象简单的说,无非就是使用内置对象或各种自定义对象,当然还可以用JSON;但写法有很多种,也能混合使用。
    
    
     1、对象字面量的方式
    
     	person={firstname:"Mark",lastname:"Yun",age:25,eyecolor:"black"};
    
     2、用function来模拟无参的构造函数
    
     	function Person(){}
     	var person=new Person();//定义一个function,如果使用new"实例化",该function可以看作是一个Class
     	person.name="Mark";
     	person.age="25";
     	person.work=function(){
     	alert(person.name+" hello...");
     	}
     	person.work();
    
     3、用function来模拟参构造函数来实现(用this关键字定义构造的上下文属性)
    
     	function Pet(name,age,hobby){
     	   this.name=name;//this作用域:当前对象
     	   this.age=age;
     	   this.hobby=hobby;
     	   this.eat=function(){
     	      alert("我叫"+this.name+",我喜欢"+this.hobby+",是个程序员");
     	   }
     	}
     	var maidou =new Pet("麦兜",25,"coding");//实例化、创建对象
     	maidou.eat();//调用eat方法
    
    
     4、用工厂方式来创建(内置对象)
    
     	 var wcDog =new Object();
     	 wcDog.name="旺财";
     	 wcDog.age=3;
     	 wcDog.work=function(){
     	   alert("我是"+wcDog.name+",汪汪汪......");
     	 }
     	 wcDog.work();
    
    
     5、用原型方式来创建
    
     	function Dog(){
    
     	 }
     	 Dog.prototype.name="旺财";
     	 Dog.prototype.eat=function(){
     	 alert(this.name+"是个吃货");
     	 }
     	 var wangcai =new Dog();
     	 wangcai.eat();
    
    
     5、用混合方式来创建
    
     	function Car(name,price){
     	  this.name=name;
     	  this.price=price;
     	}
     	 Car.prototype.sell=function(){
     	   alert("我是"+this.name+",我现在卖"+this.price+"万元");
     	  }
     	var camry =new Car("凯美瑞",27);
     	camry.sell();
    
  • Javascript作用链域?

     全局函数无法查看局部函数的内部细节,但局部函数可以查看其上层的函数细节,直至全局细节。
     当需要从局部函数查找某一属性或方法时,如果当前作用域没有找到,就会上溯到上层作用域查找,
     直至全局函数,这种组织形式就是作用域链。
    
  • 谈谈This对象的理解。

  • this总是指向函数的直接调用者(而非间接调用者);

  • 如果有new关键字,this指向new出来的那个对象;

  • 在事件中,this指向触发这个事件的对象,特殊的是,IE中的attachEvent中的this总是指向全局对象Window;

  • eval是做什么的?

     它的功能是把对应的字符串解析成JS代码并运行;
     应该避免使用eval,不安全,非常耗性能(2次,一次解析成js语句,一次执行)。
     由JSON字符串转换为JSON对象的时候可以用eval,var obj =eval('('+ str +')');
    
  • 什么是window对象? 什么是document对象?

     window对象是指浏览器打开的窗口。
     document对象是Documentd对象(HTML 文档对象)的一个只读引用,window对象的一个属性。
    
  • javascript 代码中的"use strict";是什么意思 ? 使用它区别是什么?

     use strict是一种ECMAscript 5 添加的(严格)运行模式,这种模式使得 Javascript 在更严格的条件下运行,
    
     使JS编码更加规范化的模式,消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为。
     默认支持的糟糕特性都会被禁用,比如不能用with,也不能在意外的情况下给全局变量赋值;
     全局变量的显示声明,函数必须声明在顶层,不允许在非函数代码块内声明函数,arguments.callee也不允许使用;
     消除代码运行的一些不安全之处,保证代码运行的安全,限制函数中的arguments修改,严格模式下的eval函数的行为和非严格模式的也不相同;
    
     提高编译器效率,增加运行速度;
     为未来新版本的Javascript标准化做铺垫。
    
  • 如何判断一个对象是否属于某个类?

       使用instanceof (待完善)
        if(a instanceof Person){
            alert('yes');
        }
    
  • new操作符具体干了什么呢?

     	 1、创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型。
      2、属性和方法被加入到 this 引用的对象中。
     	 3、新创建的对象由 this 所引用,并且最后隐式的返回 this 。
    
     var obj  = {};
     obj.__proto__ = Base.prototype;
     Base.call(obj);
    
  • 用原生JavaScript的实现过什么功能吗?

  • Javascript中,有一个函数,执行时对象查找时,永远不会去查找原型,这个函数是?

     hasOwnProperty
    
     javaScript中hasOwnProperty函数方法是返回一个布尔值,指出一个对象是否具有指定名称的属性。此方法无法检查该对象的原型链中是否具有该属性;该属性必须是对象本身的一个成员。
     使用方法:
     object.hasOwnProperty(proName)
     其中参数object是必选项。一个对象的实例。
     proName是必选项。一个属性名称的字符串值。
    
     如果 object 具有指定名称的属性,那么JavaScript中hasOwnProperty函数方法返回 true,反之则返回 false。
    
  • JSON 的了解?

     JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。
     它是基于JavaScript的一个子集。数据格式简单, 易于读写, 占用带宽小
     如:{"age":"12", "name":"back"}
    
     JSON字符串转换为JSON对象:
     var obj =eval('('+ str +')');
     var obj = str.parseJSON();
     var obj = JSON.parse(str);
    
     JSON对象转换为JSON字符串:
     var last=obj.toJSONString();
     var last=JSON.stringify(obj);
    
  • [].forEach.call($$("*"),function(a){a.style.outline="1px solid #"+(~~(Math.random()*(1<<24))).toString(16)}) 能解释一下这段代码的意思吗?

  • js延迟加载的方式有哪些?

     defer和async、动态创建DOM方式(用得最多)、按需异步载入js
    
  • Ajax 是什么? 如何创建一个Ajax?

     ajax的全称:Asynchronous Javascript And XML。
     异步传输+js+xml。
     所谓异步,在这里简单地解释就是:向服务器发送请求的时候,我们不必等待结果,而是可以同时做其他的事情,等到有了结果它自己会根据设定进行后续操作,与此同时,页面是不会发生整页刷新的,提高了用户体验。
    
     (1)创建XMLHttpRequest对象,也就是创建一个异步调用对象
     (2)创建一个新的HTTP请求,并指定该HTTP请求的方法、URL及验证信息
     (3)设置响应HTTP请求状态变化的函数
     (4)发送HTTP请求
     (5)获取异步调用返回的数据
     (6)使用JavaScript和DOM实现局部刷新
    
  • Ajax 解决浏览器缓存问题?

      1、在ajax发送请求前加上 anyAjaxObj.setRequestHeader("If-Modified-Since","0")。
    
      2、在ajax发送请求前加上 anyAjaxObj.setRequestHeader("Cache-Control","no-cache")。
    
      3、在URL后面加上一个随机数: "fresh=" + Math.random();。
    

       4、在URL后面加上时间戳:“nowtime=” + new Date().getTime();。

    5、如果是使用jQuery,直接这样就可以了 $.ajaxSetup({cache:false})。这样页面的所有ajax都会执行这条语句就是不需要保存缓存记录。
  • 同步和异步的区别?

    同步的概念应该是来自于OS中关于同步的概念:不同进程为协同完成某项工作而在先后次序上调整(通过阻塞,唤醒等方式).同步强调的是顺序性.谁先谁后.异步则不存在这种顺序性.

    同步:浏览器访问服务器请求,用户看得到页面刷新,重新发请求,等请求完,页面刷新,新内容出现,用户看到新内容,进行下一步操作。

    异步:浏览器访问服务器请求,用户正常操作,浏览器后端进行请求。等请求完,页面不刷新,新内容也会出现,用户看到新内容。

    (待完善)

  • 你有用过哪些前端性能优化的方法?

        (1) 减少http请求次数:CSS Sprites, JS、CSS源码压缩、图片大小控制合适;网页Gzip,CDN托管,data缓存 ,图片服务器。
    
        (2) 前端模板 JS+数据,减少由于HTML标签导致的带宽浪费,前端用变量保存AJAX请求结果,每次操作本地变量,不用请求,减少请求次数
    
        (3) 用innerHTML代替DOM操作,减少DOM操作次数,优化javascript性能。
    
        (4) 当需要设置的样式很多时设置className而不是直接操作style。
    
        (5) 少用全局变量、缓存DOM节点查找的结果。减少IO读取操作。
    
        (6) 避免使用CSS Expression(css表达式)又称Dynamic properties(动态属性)。
    
        (7) 图片预加载,将样式表放在顶部,将脚本放在底部  加上时间戳。
    
        (8) 避免在页面的主体布局中使用table,table要等其中的内容完全下载之后才会显示出来,显示比div+css布局慢。
        对普通的网站有一个统一的思路,就是尽量向前端优化、减少数据库操作、减少磁盘IO。向前端优化指的是,在不影响功能和体验的情况下,能在浏览器执行的不要在服务端执行,能在缓存服务器上直接返回的不要到应用服务器,程序能直接取得的结果不要到外部取得,本机内能取得的数据不要到远程取,内存能取到的不要到磁盘取,缓存中有的不要去数据库查询。减少数据库操作指减少更新次数、缓存结果减少查询次数、将数据库执行的操作尽可能的让你的程序完成(例如join查询),减少磁盘IO指尽量不使用文件系统作为缓存、减少读写文件次数等。程序优化永远要优化慢的部分,换语言是无法“优化”的。
    
  • http状态码有那些?分别代表是什么意思?

      	简单版
      	[
      		100  Continue	继续,一般在发送post请求时,已发送了http header之后服务端将返回此信息,表示确认,之后发送具体参数信息
      		200  OK 		正常返回信息
      		201  Created  	请求成功并且服务器创建了新的资源
      		202  Accepted 	服务器已接受请求,但尚未处理
      		301  Moved Permanently  请求的网页已永久移动到新位置。
      		302 Found  		临时性重定向。
      		303 See Other  	临时性重定向,且总是使用 GET 请求新的 URI。
      		304  Not Modified 自从上次请求后,请求的网页未修改过。
    
      		400 Bad Request  服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求。
      		401 Unauthorized 请求未授权。
      		403 Forbidden  	禁止访问。
      		404 Not Found  	找不到如何与 URI 相匹配的资源。
    
      		500 Internal Server Error  最常见的服务器端错误。
      		503 Service Unavailable 服务器端暂时无法处理请求(可能是过载或维护)。
      	]
    
        完整版
        1**(信息类):表示接收到请求并且继续处理
      	100——客户必须继续发出请求
      	101——客户要求服务器根据请求转换HTTP协议版本
    
        2**(响应成功):表示动作被成功接收、理解和接受
      	200——表明该请求被成功地完成,所请求的资源发送回客户端
      	201——提示知道新文件的URL
      	202——接受和处理、但处理未完成
      	203——返回信息不确定或不完整
      	204——请求收到,但返回信息为空
      	205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件
      	206——服务器已经完成了部分用户的GET请求
    
        3**(重定向类):为了完成指定的动作,必须接受进一步处理
      	300——请求的资源可在多处得到
      	301——本网页被永久性转移到另一个URL
      	302——请求的网页被转移到一个新的地址,但客户访问仍继续通过原始URL地址,重定向,新的URL会在response中的Location中返回,浏览器将会使用新的URL发出新的Request。
      	303——建议客户访问其他URL或访问方式
      	304——自从上次请求后,请求的网页未修改过,服务器返回此响应时,不会返回网页内容,代表上次的文档已经被缓存了,还可以继续使用
      	305——请求的资源必须从服务器指定的地址得到
      	306——前一版本HTTP中使用的代码,现行版本中不再使用
      	307——申明请求的资源临时性删除
    
        4**(客户端错误类):请求包含错误语法或不能正确执行
      	400——客户端请求有语法错误,不能被服务器所理解
      	401——请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
      	HTTP 401.1 - 未授权:登录失败
      	  HTTP 401.2 - 未授权:服务器配置问题导致登录失败
      	  HTTP 401.3 - ACL 禁止访问资源
      	  HTTP 401.4 - 未授权:授权被筛选器拒绝
      	HTTP 401.5 - 未授权:ISAPI 或 CGI 授权失败
      	402——保留有效ChargeTo头响应
      	403——禁止访问,服务器收到请求,但是拒绝提供服务
      	HTTP 403.1 禁止访问:禁止可执行访问
      	  HTTP 403.2 - 禁止访问:禁止读访问
      	  HTTP 403.3 - 禁止访问:禁止写访问
      	  HTTP 403.4 - 禁止访问:要求 SSL
      	  HTTP 403.5 - 禁止访问:要求 SSL 128
      	  HTTP 403.6 - 禁止访问:IP 地址被拒绝
      	  HTTP 403.7 - 禁止访问:要求客户证书
      	  HTTP 403.8 - 禁止访问:禁止站点访问
      	  HTTP 403.9 - 禁止访问:连接的用户过多
      	  HTTP 403.10 - 禁止访问:配置无效
      	  HTTP 403.11 - 禁止访问:密码更改
      	  HTTP 403.12 - 禁止访问:映射器拒绝访问
      	  HTTP 403.13 - 禁止访问:客户证书已被吊销
      	  HTTP 403.15 - 禁止访问:客户访问许可过多
      	  HTTP 403.16 - 禁止访问:客户证书不可信或者无效
      	HTTP 403.17 - 禁止访问:客户证书已经到期或者尚未生效
      	404——一个404错误表明可连接服务器,但服务器无法取得所请求的网页,请求资源不存在。eg:输入了错误的URL
      	405——用户在Request-Line字段定义的方法不允许
      	406——根据用户发送的Accept拖,请求资源不可访问
      	407——类似401,用户必须首先在代理服务器上得到授权
      	408——客户端没有在用户指定的饿时间内完成请求
      	409——对当前资源状态,请求不能完成
      	410——服务器上不再有此资源且无进一步的参考地址
      	411——服务器拒绝用户定义的Content-Length属性请求
      	412——一个或多个请求头字段在当前请求中错误
      	413——请求的资源大于服务器允许的大小
      	414——请求的资源URL长于服务器允许的长度
      	415——请求资源不支持请求项目格式
      	416——请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求也不包含If-Range请求头字段
      	417——服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求长。
    
        5**(服务端错误类):服务器不能正确执行一个正确的请求
      	HTTP 500 - 服务器遇到错误,无法完成请求
      	  HTTP 500.100 - 内部服务器错误 - ASP 错误
      	  HTTP 500-11 服务器关闭
      	  HTTP 500-12 应用程序重新启动
      	  HTTP 500-13 - 服务器太忙
      	  HTTP 500-14 - 应用程序无效
      	  HTTP 500-15 - 不允许请求 global.asa
      	  Error 501 - 未实现
        HTTP 502 - 网关错误
        HTTP 503:由于超载或停机维护,服务器目前无法使用,一段时间后可能恢复正常
    
  • 一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么?(流程说的越详细越好)

        注:这题胜在区分度高,知识点覆盖广,再不懂的人,也能答出几句,
        而高手可以根据自己擅长的领域自由发挥,从URL规范、HTTP协议、DNS、CDN、数据库查询、
        到浏览器流式解析、CSS规则构建、layout、paint、onload/domready、JS执行、JS API绑定等等;
    
        详细版:
      	1、浏览器会开启一个线程来处理这个请求,对 URL 分析判断如果是 http 协议就按照 Web 方式来处理;
      	2、调用浏览器内核中的对应方法,比如 WebView 中的 loadUrl 方法;
          3、通过DNS解析获取网址的IP地址,设置 UA 等信息发出第二个GET请求;
      	4、进行HTTP协议会话,客户端发送报头(请求报头);
          5、进入到web服务器上的 Web Server,如 Apache、Tomcat、Node.JS 等服务器;
          6、进入部署好的后端应用,如 PHP、Java、JavaScript、Python 等,找到对应的请求处理;
      	7、处理结束回馈报头,此处如果浏览器访问过,缓存上有对应资源,会与服务器最后修改时间对比,一致则返回304;
          8、浏览器开始下载html文档(响应报头,状态码200),同时使用缓存;
          9、文档树建立,根据标记请求所需指定MIME类型的文件(比如css、js),同时设置了cookie;
          10、页面开始渲染DOM,JS根据DOM API操作DOM,执行事件绑定等,页面显示完成。
    
        简洁版:
      	浏览器根据请求的URL交给DNS域名解析,找到真实IP,向服务器发起请求;
      	服务器交给后台处理完成后返回数据,浏览器接收文件(HTML、JS、CSS、图象等);
      	浏览器对加载到的资源(HTML、JS、CSS等)进行语法解析,建立相应的内部数据结构(如HTML的DOM);
      	载入解析到的资源文件,渲染页面,完成。
    
  • 部分地区用户反应网站很卡,请问有哪些可能性的原因,以及解决方法?

  • 从打开app到刷新出内容,整个过程中都发生了什么,如果感觉慢,怎么定位问题,怎么解决?

  • 除了前端以外还了解什么其它技术么?你最最厉害的技能是什么?

  • 你用的得心应手用的熟练地编辑器&开发环境是什么样子?

      Sublime Text 3 + 相关插件编写前端代码
      Google chrome 、Mozilla Firefox浏览器 +firebug 兼容测试和预览页面UI、动画效果和交互功能
      Node.js+Gulp
      git 用于版本控制和Code Review
    
  • 对前端工程师这个职位是怎么样理解的?它的前景会怎么样?

      前端是最贴近用户的程序员,比后端、数据库、产品经理、运营、安全都近。
      1、实现界面交互
      2、提升用户体验
      3、有了Node.js,前端可以实现服务端的一些事情
    
    
      前端是最贴近用户的程序员,前端的能力就是能让产品从 90分进化到 100 分,甚至更好,
    
      参与项目,快速高质量完成实现效果图,精确到1px;
    
      与团队成员,UI设计,产品经理的沟通;
    
      做好的页面结构,页面重构和用户体验;
    
      处理hack,兼容、写出优美的代码格式;
    
      针对服务器的优化、拥抱最新前端技术。
    
  • 你怎么看待Web App 、hybrid App、Native App?

  • 你移动端前端开发的理解?(和 Web 前端开发的主要区别是什么?)

  • 你对加班的看法?

      加班就像借钱,原则应当是------救急不救穷
    
  • 平时如何管理你的项目?

      先期团队必须确定好全局样式(globe.css),编码模式(utf-8) 等;
    
      编写习惯必须一致(例如都是采用继承式的写法,单样式都写成一行);
    
      标注样式编写人,各模块都及时标注(标注关键样式调用的地方);
    
      页面进行标注(例如 页面 模块 开始和结束);
    
      CSS跟HTML 分文件夹并行存放,命名都得统一(例如style.css);
    
      JS 分文件夹存放 命名以该JS功能为准的英文翻译。
    
      图片采用整合的 images.png png8 格式文件使用 尽量整合在一起使用方便将来的管理
    
  • 如何设计突发大规模并发架构?

  • 当团队人手不足,把功能代码写完已经需要加班的情况下,你会做前端代码的测试吗?

  • 说说最近最流行的一些东西吧?常去哪些网站?

      	ES6\WebAssembly\Node\MVVM\Web Components\React\React Native\Webpack 组件化
    
  • 知道什么是SEO并且怎么优化么? 知道各种meta data的含义么?

  • 移动端(Android IOS)怎么做好用户体验?

      清晰的视觉纵线、
      信息的分组、极致的减法、
      利用选择代替输入、
      标签及文字的排布方式、
      依靠明文确认密码、
      合理的键盘利用、
    
  • 简单描述一下你做过的移动APP项目研发流程?

  • 你在现在的团队处于什么样的角色,起到了什么明显的作用?

  • 你认为怎样才是全端工程师(Full Stack developer)?

  • 介绍一个你最得意的作品吧?

  • 你有自己的技术博客吗,用了哪些技术?

  • 对前端安全有什么看法?

  • 是否了解Web注入攻击,说下原理,最常见的两种攻击(XSS 和 CSRF)了解到什么程度?

  • 项目中遇到国哪些印象深刻的技术难题,具体是什么问题,怎么解决?。

  • 最近在学什么东西?

  • 你的优点是什么?缺点是什么?

  • 如何管理前端团队?

  • 最近在学什么?能谈谈你未来3,5年给自己的规划吗?

前端学习网站推荐

1. 极客标签:     http://www.gbtags.com/

2. 码农周刊:     http://weekly.manong.io/issues/

3. 前端周刊:     http://www.feweekly.com/issues

4. 慕课网:       http://www.imooc.com/

5. div.io:		 http://div.io

6. Hacker News: https://news.ycombinator.com/news

7. InfoQ:       http://www.infoq.com/

8. w3cplus:     http://www.w3cplus.com/

9. Stack Overflow: http://stackoverflow.com/

10.w3school:    http://www.w3school.com.cn/

11.mozilla:     https://developer.mozilla.org/zh-CN/docs/Web/JavaScript

文档推荐

  1. jQuery 基本原理

  2. JavaScript 秘密花园

  3. CSS参考手册

  4. JavaScript 标准参考教程

  5. ECMAScript 6入门

备注:

根据自己需要选择性阅读,面试题是对理论知识的总结,让自己学会应该如何表达。

资料答案不够正确和全面,欢迎欢迎Star和提交issues。

格式不断修改更新中。

在 github 项目的右上角,有三个按钮,分别是 watch、star、fork,新来的同学注意不要用错了,无休止的邮件提醒会给你造成不必要的信息干扰。

当你选择Watching,表示你以后会关注这个项目的全部动态,以后只要这个项目发生变动,被别人提交了pull request、被发起了issue等情况你都会收到邮件通知。

star相当于是点赞或收藏,方便以后查找。

fork表示你想要补充完善这个项目的内容。

更新记录:

	2016年10月20日:更新一些已被发现的问题。

	2016年3月25日:新增ECMAScript6 相关问题

更新时间: 2016年10月20日

爱机车、爱骑行、爱旅行、爱摄影、爱阅读的前端开发攻城师。

我的微博:http://weibo.com/920802999