前端面试知识点

答案已在最下方公布。javascript

一、如下是HTML5新增的标签是:
    A、<aside>  B、<isindex>  C、<samp>    D、<s>
2、如下不是HTML5的新增的标签是:
    A、<bdi>    B、<xmp>      C、<command>     D、<dialog>
三、如下不是HTML5新增的API是
    A、Media API    B、Command API      C、History API     D、Cookie API
四、如下说法不正确的是:
    A、HTML5 标准还在制定中
    B、HTML5兼容之前HTML4下浏览器
    C、<canvas>标签替代Flash
    D、简化的语法
五、如下不是canvas的方法是:
    A、getContext()
    B、fill()
    C、stroke()
    D、controller()
六、关于HTML5说法正确的是:
    A、HTML5只是对HTML4的一个简单升级
    B、全部主流浏览器都支持HTML5
    C、HTML5新增了离线缓存机制
    D、HTML5主要是针对移动端进行了优化
七、HTML5不支持的视频格式是:
    A、ogg
    B、mp4
    C、flv
    D、WebM
八、不是HTML5特有的存储类型是:
    A、localStorage
    B、Cookie
    C、Application Cache
    D、sessionStorage
九、如下关于FileReader说法正确的是:
    A、readAsText方法有3个参数,其中第二个参数是文本的编码方式,默认值为 UTF-8。
    B、readAsBinaryString:该方法将文件读取为二进制字符串
    C、onabort事件,中断时触发
    D、onload事件,文件读取成功完成时触发
十、如下关于canvas说法正确的是:
    A、clearRect(width, height,left, top)清除宽为width、高为height,左上角顶点在(left,top)点的矩形区域内的全部内容。
    B、drawImage()方法有4中原型
    C、fillText()第3个参数maxWidth为可选参数
    D、fillText()方法可以在画布中绘制字符串
十一、如下关于canvas说法正确的是:
    A、HTML5标准中加入了WebSql的api
    B、HTML5支持IE8以上的版本(包括IE8)
    C、HTML5 仍处于完善之中
    D、Html5将取代Flash在移动设备的地位
十二、如下关于video说法正确的是:
    A、当前,video元素支持三种视频格式,其中WebM = 带有 Thedora 视频编码和 Vorbis 音频编码的 WebM 文件。
    B、source元素能够添加多个,具体播放哪一个有浏览器决定。
    C、video内使用img展现有视频封面
    D、loop属性可使媒介文件循环播放。
1三、如下关于video说法错误的是:
    A、navigator.geolocation能够用来判断浏览器是否支持地理定位
    B、window.navigator.cookieEnabled判断浏览器是否支持cookie
    C、Canvas不依赖分辨率
    D、window.FileReader判断浏览器是否支持FileReader
1四、如下不是input在html5的新类型的是:
    A、DateTime
    B、file
    C、Colour
    D、Range
1五、如下不是HTML5新特性的是:
    A、新的@font-face字体设置
    B、新的离线存储
    C、新的音频、视频API
    D、新的内容标签
1六、关于html5说法正确的是:
    A、HTML5是在原有HTML上的升级版
    B、HTML能够不须要DTD
    C、没有<!DOCTYPE html>HTML5能够正常工做
    D、<output>是html5的新标签
1七、关于html5说法错误的是:
    A、Canvas是HTML中你能够绘制图形的区域
    B、SVG表示可缩放矢量图形
    C、queryselector的功能相似于jQuery的选择器
    D、queryString是html5查找字符串的新方法
1八、关于Web Workers说法错误的是:
    A、Web Worker只能使用terminate()停止
    B、Web worker线程不能修改HTML元素
    C、Web worker线程不能修改全局变量和Window.Location
    D、Web Worker 是 HTML5 提供的一个javascript多线程解决方案
1九、关于应用缓存说法正确的是:
    A、FALLBACK:后退命令,优选使用缓存而不是网络更新    B、NETWORK:不须要缓存命令
    C、CACHE :命令指出哪些文件须要被缓存.
    D、全部manifest文件都以“CACHE MANIFEST”语句开始.
20、关于Web SQL的说法更合理的是:
    A、WebSql是HTML5的一个规范
    B、WebSQL是一个在浏览器客户端的结构关系数据库和使用mysql同样
    C、本地存储没有生命周期
    D、Local storage和Cookie同样。   
答案:    ABDAD      CCBAD      DDCBA      DDAACphp

-----------------------------------------------css

 1. HTML5 以前的HTML版本是什么?html

  答: HTML 4.01前端

  2. HTML5 的正确doctype是?html5

  答:<!DOCTYPE html>java

  3. 在 HTML5 中,哪一个元素用于组合标题元素?node

  答:<hgroup>mysql

  4. HTML5 中是否支持元素?jquery

  答: 否

  5. HTML5 中是否支持元素?

  答: 否

  6. 在HTML5 中,onblur和onfocus是:

  答:事件属性

  7. 用于播放 HTML5 视频文件的正确HTML5 元素是:

  答:<video>

  8. 用于播放 HTML5 音频文件的正确HTML5元素是:

  答:<audio>

  9. 在HTML5 中再也不支持元素的哪一个属性?

  答: rel

  10. 在HTML5中,哪一个方法用于得到用户的当前位置?

  答:getCurrentPosition()

  11. 新的HTML5全局属性,"contenteditable" 用于:

  答:规定元素内容是不是可编辑的。

  12. 在HTML5中,contextmenu和spellcheck是:

  答:HTML 属性

  13. 在HTML5中,您可以直接将SVG元素嵌入HTML页面中。

  答: 正确

  14. 由SVG定义的图形是什么格式的?

  答:XML

  15. HTML5 中的元素用于:

  答:绘制图形

  16. 哪一个HTML5 内建对象用于在画布上绘制?

  答: getContext

  17. 在HTML5中,哪一个属性用于规定输入字段是必填的?

  答: required

  18. 哪一种输入类型定义滑块控件?

  答: range

  19. 哪一种输入类型用于定义周和年控件(无时区)?

  答:week

  20. 哪一个HTML5元素用于显示已知范围内的标量测量?

  答:<meter>

题目类型: 技术视野、项目细节、理论知识题,算法题,开放性题,案例题。

进行追问: 能够确保问到你开始不懂或面试官开始不懂为止,这样能够大大延展题目的区分度和深度,知道你的实际能力。由于这种关联知识是长时期的学习,绝对不是临时记得住的。

回答问题再棒,面试官(多是你的直接领导面试),会考虑我要不要这我的作个人同事?因此态度很重要。(感受更像是相亲)

资深的工程师能把absolute和relative弄混,这样的人不要也罢,由于团队须要的你这我的具备能够依靠的才能(靠谱)。

试题大纲

HTML&CSS:
    对Web标准的理解、浏览器内核差别、兼容性、hack、CSS基本功:布局、盒子模型、选择器优先级及使用、HTML五、CSS三、移动端适应

JavaScript:  
    数据类型、面向对象、继承、闭包、插件、做用域、跨域、原型链、模块化、自定义事件、内存泄漏、事件机制、异步装载回调、模板引擎、Nodejs、JSON、ajax等。

其余:
   HTTP、安全、正则、优化、重构、响应式、移动端、团队协做、可维护、SEO、UED、架构、职业生涯

web前端工程师知识点:

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

二、DOM操做  ——如何添加、移除、移动、复制、建立和查找节点等。

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

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

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

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

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

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

九、HTML与XHTML——两者有什么区别,你以为应该使用哪个并说出理由。

十、JSON  —— 做用、用途、设计结构。

HTML

Doctype做用? 严格模式与混杂模式如何区分?它们有何意义?

(1)、<!DOCTYPE> 声明位于文档中的最前面,处于 <html> 标签以前。告知浏览器的解析器,

      用什么文档类型 规范来解析这个文档。

(2)、严格模式的排版和 JS 运做模式是  以该浏览器支持的最高标准运行。

(3)、在混杂模式中,页面以宽松的向后兼容的方式显示。模拟老式浏览器的行为以防止站点没法工做。

(4)、DOCTYPE不存在或格式不正确会致使文档以混杂模式呈现。

行内元素有哪些?块级元素有哪些? 空(void)元素有那些?

(1)CSS规范规定,每一个元素都有display属性,肯定该元素的类型,每一个元素都有默认的display值,

  好比div默认display属性值为“block”,成为“块级”元素;

  span默认display属性值为“inline”,是“行内”元素。  

(2)行内元素有:a b span img input select strong(强调的语气)

 块级元素有: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>

link 和@import 的区别是?

(1)link属于XHTML标签,而@import是CSS提供的;

(2)页面被加载的时,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载;

(3)import只在IE5以上才能识别,而link是XHTML标签,无兼容问题;

(4)link方式的样式的权重 高于@import的权重.

浏览器的内核分别是什么?

 * IE浏览器的内核Trident、Mozilla的Gecko、Chrome的Blink(WebKit的分支)、Opera内核原为Presto,现为Blink;

常见兼容性问题?

* png24位的图片在iE6浏览器上出现背景,解决方案是作成PNG8.

* 浏览器默认的margin和padding不一样。解决方案是加一个全局的*{margin:0;padding:0;}来统一。

* IE6双边距bug:块属性标签float后,又有横行的margin状况下,在ie6显示margin比设置的大。

  浮动ie产生的双倍距离 #box{ float:left; width:10px; margin:0 0 0 100px;}

 这种状况之下IE会产生20px的距离,解决方案是在float的标签样式控制中加入 ——_display:inline;将其转化为行内属性。(_这个符号只有ie6会识别)

  渐进识别的方式,从整体中逐渐排除局部。

  首先,巧妙的使用“\9”这一标记,将IE游览器从全部状况中分离出来。

  接着,再次使用“+”将IE8和IE七、IE6分离开来,这样IE8已经独立识别。

  css

      .bb{

       background-color:#f1ee18;/*全部识别*/

      .background-color:#00deff\9; /*IE六、七、8识别*/

      +background-color:#a200ff;/*IE六、7识别*/

      _background-color:#1e0bd1;/*IE6识别*/

      }

*  IE下,可使用获取常规属性的方法来获取自定义属性,

   也可使用getAttribute()获取自定义属性;

   Firefox下,只能使用getAttribute()获取自定义属性.

   解决方法:统一经过getAttribute()获取自定义属性.

* IE下,even对象有x,y属性,可是没有pageX,pageY属性;

  Firefox下,event对象有pageX,pageY属性,可是没有x,y属性.

* 解决方法:(条件注释)缺点是在IE浏览器下可能会增长额外的HTTP请求数。

* Chrome 中文界面下默认会将小于 12px 的文本强制按照 12px 显示,

  可经过加入 CSS 属性 -webkit-text-size-adjust: none; 解决.

超连接访问事后hover样式就不出现了 被点击访问过的超连接样式不在具备hover和active了解决方法是改变CSS属性的排列顺序:

L-V-H-A :  a:link {} a:visited {} a:hover {} a:active {}

html5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分 HTML 和 HTML5?

* HTML5 如今已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增长。

* 绘画 canvas  

  用于媒介回放的 video 和 audio 元素

  本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;

  sessionStorage 的数据在浏览器关闭后自动删除

  语意化更好的内容元素,好比 article、footer、header、nav、section

  表单控件,calendar、date、time、email、url、search  

  新的技术webworker, websockt, Geolocation

* 移除的元素

纯表现的元素:basefont,big,center,font, s,strike,tt,u;

对可用性产生负面影响的元素:frame,frameset,noframes;

支持HTML5新标签:

* IE8/IE7/IE6支持经过document.createElement方法产生的标签,

  能够利用这一特性让这些浏览器支持HTML5新标签,

  浏览器支持新标签后,还须要添加标签默认的样式:

* 固然最好的方式是直接使用成熟的框架、使用最多的是html5shim框架

   <!--[if lt IE 9]>

   <script> src="http://html5shim.googlecode.com/svn/trunk/html5.js"</script>

   <![endif]-->

如何区分: DOCTYPE声明\新增的结构元素\功能元素

语义化的理解?

用正确的标签作正确的事情!

html语义化就是让页面的内容结构化,便于对浏览器、搜索引擎解析;

在没有样式CCS状况下也以一种文档格式显示,而且是容易阅读的。

搜索引擎的爬虫依赖于标记来肯定上下文和各个关键字的权重,利于 SEO。

使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解。

HTML5的离线储存?

localStorage    长期存储数据,浏览器关闭后数据不丢失;

sessionStorage  数据在浏览器关闭后自动删除。

(写)描述一段语义的html代码吧。

(HTML5中新增长的不少标签(如:<article>、<nav>、<header>和<footer>等)

 就是基于语义化设计原则)  

    < div id="header">

    < h1>标题< /h1>

    < h2>专一Web前端技术< /h2>

    < /div>

iframe有那些缺点?

*iframe会阻塞主页面的Onload事件;

*iframe和主页面共享链接池,而浏览器对相同域的链接有限制,因此会影响页面的并行加载。

使用iframe以前须要考虑这两个缺点。若是须要使用iframe,最好是经过javascript

动态给iframe添加src属性值,这样能够能够绕开以上两个问题。

请描述一下 cookies,sessionStorage 和 localStorage 的区别?

cookie在浏览器和服务器间来回传递。 sessionStorage和localStorage不会

sessionStorage和localStorage的存储空间更大;

sessionStorage和localStorage有更多丰富易用的接口;

sessionStorage和localStorage各自独立的存储空间;

如何实现浏览器内多个标签页之间的通讯? (阿里)

调用localstorge、cookies等本地存储方式

webSocket如何兼容低浏览器?(阿里)

Adobe Flash Socket 、 ActiveX HTMLFile (IE) 、 基于 multipart 编码发送 XHR 、 基于长轮询的 XHR

CSS

介绍一下CSS的盒子模型?

(1)有两种, IE 盒子模型、标准 W3C 盒子模型;IE的content部分包含了 border 和 pading;

(2)盒模型: 内容(content)、填充(padding)、边界(margin)、 边框(border).

CSS 选择符有哪些?哪些属性能够继承?优先级算法如何计算? CSS3新增伪类有那些?

*   1.id选择器( # myid)

    2.类选择器(.myclassname)

    3.标签选择器(div, h1, p)

    4.相邻选择器(h1 + p)

    5.子选择器(ul < li)

    6.后代选择器(li a)

    7.通配符选择器( * )

    8.属性选择器(a[rel = "external"])

    9.伪类选择器(a: hover, li: nth - child)

*   可继承的样式: font-size font-family color, UL LI DL DD DT;

*   不可继承的样式:border padding margin width height ;

*   优先级就近原则,同权重状况下样式定义最近者为准;

*   载入样式以最后载入的定位为准;

优先级为:

   !important >  id > class > tag  

   important 比 内联优先级高

CSS3新增伪类举例:

p:first-of-type 选择属于其父元素的首个 <p> 元素的每一个 <p> 元素。

p:last-of-type  选择属于其父元素的最后 <p> 元素的每一个 <p> 元素。

p:only-of-type  选择属于其父元素惟一的 <p> 元素的每一个 <p> 元素。

p:only-child    选择属于其父元素的惟一子元素的每一个 <p> 元素。

p:nth-child(2)  选择属于其父元素的第二个子元素的每一个 <p> 元素。

:enabled  :disabled 控制表单控件的禁用状态。

:checked        单选框或复选框被选中。

如何居中div?如何居中一个浮动元素?

给div设置一个宽度,而后添加margin:0 auto属性

div{

    width:200px;

    margin:0 auto;

 }  

居中一个浮动元素

  肯定容器的宽高 宽500 高 300 的层

  设置层的外边距

 .div {

  Width:500px ; height:300px;//高度能够不设

  Margin: -150px 0 0 -250px;

  position:relative;相对定位

  background-color:pink;//方便看效果

  left:50%;

  top:50%;

}

列出display的值,说明他们的做用。position的值, relative和absolute定位原点是?

  1.    block 象块类型元素同样显示。

  none 缺省值。象行内元素类型同样显示。

  inline-block 象行内元素同样显示,但其内容象块类型元素同样显示。

  list-item 象块类型元素同样显示,并添加样式列表标记。

  2.   *absolute

        生成绝对定位的元素,相对于 static 定位之外的第一个父元素进行定位。

  *fixed (老IE不支持)

        生成绝对定位的元素,相对于浏览器窗口进行定位。

  *relative

        生成相对定位的元素,相对于其正常位置进行定位。

  * static  默认值。没有定位,元素出如今正常的流中

  *(忽略 top, bottom, left, right z-index 声明)。

  * inherit 规定从父元素继承 position 属性的值。

CSS3有哪些新特性?

  CSS3实现圆角(border-radius:8px),阴影(box-shadow:10px),

  对文字加特效(text-shadow、),线性渐变(gradient),旋转(transform)

  transform:rotate(9deg) scale(0.85,0.90) translate(0px,-30px) skew(-9deg,0deg);//旋转,缩放,定位,倾斜

  增长了更多的CSS选择器  多背景 rgba

一个满屏 品 字布局 如何设计?

常常遇到的CSS的兼容性有哪些?缘由,解决方法是什么?

为何要初始化CSS样式。

- 由于浏览器的兼容问题,不一样浏览器对有些标签的默认值是不一样的,若是没对CSS初始化每每会出现浏览器之间的页面显示差别。

- 固然,初始化样式会对SEO有必定的影响,但鱼和熊掌不可兼得,但力求影响最小的状况下初始化。

*最简单的初始化方法就是: * {padding: 0; margin: 0;} (不建议)

淘宝的样式初始化:

body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset, legend, button, input, textarea, th, td { margin:0; padding:0; }

body, button, input, select, textarea { font:12px/1.5tahoma, arial, \5b8b\4f53; }

h1, h2, h3, h4, h5, h6{ font-size:100%; }

address, cite, dfn, em, var { font-style:normal; }

code, kbd, pre, samp { font-family:couriernew, courier, monospace; }

small{ font-size:12px; }

ul, ol { list-style:none; }

a { text-decoration:none; }

a:hover { text-decoration:underline; }

sup { vertical-align:text-top; }

sub{ vertical-align:text-bottom; }

legend { color:#000; }

fieldset, img { border:0; }

button, input, select, textarea { font-size:100%; }

table { border-collapse:collapse; border-spacing:0; }

absolute的containing block计算方式跟正常流有什么不一样?

position跟display、margin collapse、overflow、float这些特性相互叠加后会怎么样?

对BFC规范的理解?

(W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行定位,以及与其余元素的关 系和相互做用。)

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 预处理器吗?喜欢那个?

SASS

若是须要手动写动画,你认为最为何?(阿里)

多数显示器默认频率小时间间隔是多久,是60Hz,即1秒刷新60次,因此理论上最小间隔为1/60*1000ms = 16.7ms

display:inline-block 何时会显示间隙?(携程)

移除空格、使用margin负值、使用font-size:0、letter-spacing、word-spacing

JavaScript

JavaScript原型,原型链 ? 有什么特色?

eval是作什么的?

它的功能是把对应的字符串解析成JS代码并运行;

应该避免使用eval,不安全,很是耗性能(2次,一次解析成js语句,一次执行)。

null,undefined 的区别?

写一个通用的事件侦听器函数。

    // event(事件)工具集,来源:github.com/markyun

    markyun.Event = {

        // 页面加载完成后

        readyEvent : function(fn) {

            if (fn==null) {

                fn=document;

            }

            var oldonload = window.onload;

            if (typeof window.onload != 'function') {

                window.onload = fn;

            } else {

                window.onload = function() {

                    oldonload();

                    fn();

                };

            }

        },

        // 视能力分别使用dom0||dom2||IE方式 来绑定事件

        // 参数: 操做的元素,事件名称 ,事件处理程序

        addEvent : function(element, type, handler) {

            if (element.addEventListener) {

                //事件类型、须要执行的函数、是否捕捉

                element.addEventListener(type, handler, false);

            } else if (element.attachEvent) {

                element.attachEvent('on' + type, function() {

                    handler.call(element);

                });

            } else {

                element['on' + type] = handler;

            }

        },

        // 移除事件

        removeEvent : function(element, type, handler) {

            if (element.removeEnentListener) {

                element.removeEnentListener(type, handler, false);

            } else if (element.datachEvent) {

                element.detachEvent('on' + type, handler);

            } else {

                element['on' + type] = null;

            }

        },

        // 阻止事件 (主要是事件冒泡,由于IE不支持事件捕获)

        stopPropagation : function(ev) {

            if (ev.stopPropagation) {

                ev.stopPropagation();

            } else {

                ev.cancelBubble = true;

            }

        },

        // 取消事件的默认行为

        preventDefault : function(event) {

            if (event.preventDefault) {

                event.preventDefault();

            } else {

                event.returnValue = false;

            }

        },

        // 获取事件目标

        getTarget : function(event) {

            return event.target || event.srcElement;

        },

        // 获取event对象的引用,取到事件的全部信息,确保随时能使用event;

        getEvent : function(e) {

            var ev = e || window.event;

            if (!ev) {

                var c = this.getEvent.caller;

                while (c) {

                    ev = c.arguments[0];

                    if (ev && Event == ev.constructor) {

                        break;

                    }

                    c = c.caller;

                }

            }

            return ev;

        }

    };

Node.js的适用场景?

高并发、聊天、实时消息推送

介绍js的基本数据类型。

number,string,boolean,object,undefined

Javascript如何实现继承?

经过原型和构造器

["1", "2", "3"].map(parseInt) 答案是多少?

 [1, NaN, NaN] 由于 parseInt 须要两个参数 (val, radix) 但 map 传了 3 个 (element, index, array)

如何建立一个对象? (画出此对象的内存图)

  function Person(name, age) {

    this.name = name;

    this.age = age;

    this.sing = function() { alert(this.name) }

  }

谈谈This对象的理解。

this是js的一个关键字,随着函数使用场合不一样,this的值会发生变化。

可是有一个总原则,那就是this指的是调用函数的那个对象。

this通常状况下:是全局对象Global。 做为方法调用,那么this就是指这个对象

事件是?IE与火狐的事件机制有什么区别? 如何阻止冒泡?

 1. 咱们在网页中的某个操做(有的操做对应多个事件)。例如:当咱们点击一个按钮就会产生一个事件。是能够被 JavaScript 侦测到的行为。  

 2. 事件处理机制:IE是事件冒泡、火狐是 事件捕获;

 3. ev.stopPropagation();

什么是闭包(closure),为何要用它?

执行say667()后,say667()闭包内部变量会存在,而闭包内部函数的内部变量不会存在.使得Javascript的垃圾回收机制GC不会收回say667()所占用的资源,由于say667()的内部函数的执行须要依赖say667()中的变量。这是对闭包做用的很是直白的描述.

  function say667() {

    // Local variable that ends up within closure

    var num = 666;

    var sayAlert = function() { alert(num); }

    num++;

    return sayAlert;

}

 var sayAlert = say667();

 sayAlert()//执行结果应该弹出的667  

"use strict";是什么意思 ? 使用它的好处和坏处分别是什么?

如何判断一个对象是否属于某个类?

  使用instanceof (待完善)

   if(a instanceof Person){

       alert('yes');

   }

new操做符具体干了什么呢?

     一、建立一个空对象,而且 this 变量引用该对象,同时还继承了该函数的原型。

     二、属性和方法被加入到 this 引用的对象中。

     三、新建立的对象由 this 所引用,而且最后隐式的返回 this 。

var obj  = {};

obj.__proto__ = Base.prototype;

Base.call(obj);

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

hasOwnProperty

JSON 的了解?

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。

它是基于JavaScript的一个子集。数据格式简单, 易于读写, 占用带宽小

{'age':'12', 'name':'back'}

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

defer和async、动态建立DOM方式(用得最多)、按需异步载入js

ajax 是什么?

同步和异步的区别?

如何解决跨域问题?

jsonp、 iframe、window.name、window.postMessage、服务器上设置代理页面

模块化怎么作?

当即执行函数,不暴露私有成员

    var module1 = (function(){

        var _count = 0;

        var m1 = function(){

          //...

        };

        var m2 = function(){

          //...

        };

        return {

          m1 : m1,

          m2 : m2

        };

      })();

AMD(Modules/Asynchronous-Definition)、CMD(Common Module Definition)规范区别?

异步加载的方式有哪些?

  (1) defer,只支持IE

  (2) async:

  (3) 建立script,插入到DOM中,加载完毕后callBack

documen.write和 innerHTML的区别

document.write只能重绘整个页面

innerHTML能够重绘页面的一部分

.call() 和 .apply() 的区别?

  例子中用 add 来替换 sub,add.call(sub,3,1) == add(3,1) ,因此运行结果为:alert(4);

  注意:js 中的函数实际上是对象,函数名是对 Function 对象的引用。

    function add(a,b)

    {

        alert(a+b);

    }

    function sub(a,b)

    {

        alert(a-b);

    }

    add.call(sub,3,1);  

Jquery与jQuery UI 有啥区别?

*jQuery是一个js库,主要提供的功能是选择器,属性修改和事件绑定等等。

*jQuery UI则是在jQuery的基础上,利用jQuery的扩展性,设计的插件。

 提供了一些经常使用的界面元素,诸如对话框、拖动行为、改变大小行为等等

JQuery的源码看过吗?能不能简单说一下它的实现原理?

jquery 中如何将数组转化为json字符串,而后再转化回来?

jQuery中没有提供这个功能,因此你须要先编写两个jQuery的扩展:

    $.fn.stringifyArray = function(array) {

        return JSON.stringify(array)

    }

    $.fn.parseArray = function(array) {

        return JSON.parse(array)

    }

    而后调用:

    $("").stringifyArray(array)

针对 jQuery 的优化方法?

*基于Class的选择性的性能相对于Id选择器开销很大,由于需遍历全部DOM元素。

*频繁操做的DOM,先缓存起来再操做。用Jquery的链式调用更好。   

 好比:var str=$("a").attr("href");

*for (var i = size; i < arr.length; i++) {}

 for 循环每一次循环都查找了数组 (arr) 的.length 属性,在开始循环的时候设置一个变量来存储这个数字,可让循环跑得更快:

 for (var i = size, length = arr.length; i < length; i++) {}

JavaScript中的做用域与变量声明提高?

如何编写高性能的Javascript?

那些操做会形成内存泄漏?

内存泄漏指任何对象在您再也不拥有或须要它以后仍然存在。

垃圾回收器按期扫描对象,并计算引用了每一个对象的其余对象的数量。若是一个对象的引用数量为 0(没有其余对象引用过该对象),或对该对象的唯一引用是循环的,那么该对象的内存便可回收。

setTimeout 的第一个参数使用字符串而非函数的话,会引起内存泄漏。

闭包、控制台日志、循环(在两个对象彼此引用且彼此保留时,就会产生一个循环)

JQuery一个对象能够同时绑定多个事件,这是如何实现的?

如何判断当前脚本运行在浏览器仍是node环境中?(阿里)

经过判断Global对象是否为window,若是不为window,当前脚本没有运行在浏览器中

其余问题

你遇到过比较难的技术问题是?你是如何解决的?

常使用的库有哪些?经常使用的前端开发工具?开发过什么应用或组件?

页面重构怎么操做?

列举IE 与其余浏览器不同的特性?

99%的网站都须要被重构是那本书上写的?

什么叫优雅降级和渐进加强?

WEB应用从服务器主动推送Data到客户端有那些方式?

对Node的优势和缺点提出了本身的见解?

*(优势)由于Node是基于事件驱动和无阻塞的,因此很是适合处理并发请求,

  所以构建在Node上的代理服务器相比其余技术实现(如Ruby)的服务器表现要好得多。

  此外,与Node代理服务器交互的客户端代码是由javascript语言编写的,

  所以客户端和服务器端都用同一种语言编写,这是很是美妙的事情。

*(缺点)Node是一个相对新的开源项目,因此不太稳定,它老是一直在变,

  并且缺乏足够多的第三方库支持。看起来,就像是Ruby/Rails当年的样子。

你有哪些性能优化的方法?

 (看雅虎14条性能优化原则)。

  (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布局慢。

http状态码有那些?分别表明是什么意思?

100-199 用于指定客户端应相应的某些动做。

200-299 用于表示请求成功。

300-399 用于已经移动的文件而且常被包含在定位头信息中指定新的地址信息。

400-499 用于指出客户端的错误。400    一、语义有误,当前请求没法被服务器理解。401   当前请求须要用户验证 403  服务器已经理解请求,可是拒绝执行它。

500-599 用于支持服务器错误。 503 – 服务不可用

一个页面从输入 URL 到页面加载显示完成,这个过程当中都发生了什么?(流程说的越详细越好)

    查找浏览器缓存

    DNS解析、查找该域名对应的IP地址、重定向(301)、发出第二个GET请求

    进行HTTP协议会话

    客户端发送报头(请求报头)

    服务器回馈报头(响应报头)

    html文档开始下载

    文档树创建,根据标记请求所需指定MIME类型的文件  文件显示    [

    浏览器这边作的工做大体分为如下几步:

    加载:根据请求的URL进行域名解析,向服务器发起请求,接收文件(HTML、JS、CSS、图象等)。

    解析:对加载到的资源(HTML、JS、CSS等)进行语法解析,建议相应的内部数据结构(好比HTML的DOM树,JS的(对象)属性表,CSS的样式规则等等)

    }

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

你经常使用的开发工具是什么,为何?

对前端界面工程师这个职位是怎么样理解的?它的前景会怎么样?

     前端是最贴近用户的程序员,比后端、数据库、产品经理、运营、安全都近。

    一、实现界面交互

    二、提高用户体验

    三、有了Node.js,前端能够实现服务端的一些事情

前端是最贴近用户的程序员,前端的能力就是能让产品从 90分进化到 100 分,甚至更好,

 参与项目,快速高质量完成实现效果图,精确到1px;

 与团队成员,UI设计,产品经理的沟通;

 作好的页面结构,页面重构和用户体验;

 处理hack,兼容、写出优美的代码格式;

 针对服务器的优化、拥抱最新前端技术。

加班的见解?

加班就像借钱,原则应当是------救急不救穷

平时如何管理你的项目?

        先期团队必须肯定好全局样式(globe.css),编码模式(utf-8) 等;

        编写习惯必须一致(例如都是采用继承式的写法,单样式都写成一行);

        标注样式编写人,各模块都及时标注(标注关键样式调用的地方);

        页面进行标注(例如 页面 模块 开始和结束);

        CSS跟HTML 分文件夹并行存放,命名都得统一(例如style.css);

        JS 分文件夹存放 命名以该JS功能为准的英文翻译。

        图片采用整合的 images.png png8 格式文件使用 尽可能整合在一块儿使用方便未来的管理

如何设计突发大规模并发架构?

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

    Node.js、Mongodb、npm、MVVM、MEAN、three.js

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

    清晰的视觉纵线、信息的分组、极致的减法、

    利用选择代替输入、标签及文字的排布方式、

    依靠明文确认密码、合理的键盘利用、

你在如今的团队处于什么样的角色,起到了什么明显的做用?

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

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

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

如何管理前端团队?

最近在学什么?能谈谈你将来3,5年给本身的规划吗?

想问公司的问题?

    问公司问题:

    目前关注哪些最新的Web前端技术(将来的发展方向)?

    前端团队如何工做的(实现一个产品的流程)?

    公司的薪资结构是什么样子的?

-------------阿里笔试--------------------------
1.有一个长度未知的数组a,若是它的长度为0就把数字1添加到数组里面,不然按照先进先出的队列规则让第一个元素出队

分析:这道题主要是考核了数组的队列方法和栈方法。 另外,原题还有字数限制的,只有在字数小于30而且结果正确时才能够满分。 因此,咱们可使用三目运算符(: ?)来减小字数。 代码以下:

a.length === 0 ? a.push(1) : a.shift();

我当时忘记了出队是shift仍是unshift,结果居然误用了unshift,晕死了!
2.下面代码会输出什么:

1. var test = (function(a) {

2.     this.a = a;

3.     return function(b) {

4.         return this.a + b;

5.     }

6. } (function(a, b) {

7.     return a;

8. }(1, 2))); 

9. console.log(test(4)); //输出什么????

分析:这道题考了与函数有关的的两个很是重要的概念:自执行函数和闭包。 可是不难,答案应该是5


3.请把<ul><li>第1行</li> <li>第2行</li> ...</ul>(ul之间有10个li元素)插入body里面, 注意:须要考虑到性能问题
分析:这题主要考察了dom操做。 插入节点操做的可使用insertBefore和appendChild方法,随便用一个都行。 可是,题目要求要考虑性能问题,这才是关键,由于,JavaScript操做dom的开销是很大的!提升性能就要减小dom操做。 所以,我当时使用了下面的方法,只操做一次dom就够的了:

1. var lis = "",

2. ul = document.createElement("ul");

3. //把li以字符串形式生成

4. for(var i = 1; i <= 10; i++) {

5.     lis += "<li>第" + i + "行</li>";

6. }

7. // 最后经过innerHTML插入ul里面

8. ul.innerHTML = lis;

9. //这里才操做dom,把ul插入到body

10. document.body.appendChild(ul);

4.不使用loop循环,建立一个长度为100的数组,而且每一个元素的值、、于它的下标
分析:当时看到题目要求不使用loop循环时,“聪明过头”的我立刻就想到了使用间歇性定时器setInterval,代码以下:

1. var a = [],

2.     i = 0;

3. var interval = setInterval(function() {

4.     i < 100 ? a.push(i++) : clearInterval(interval);

5. }, 0);

确实没有使用loop循环,我当时还对本身的聪明感到欣欣自喜呢!可是后来,跟朋友讨论了一下,才知道这道题的目的是在考察咱们对数组的熟练程度,而不是考察定时器!何况用这种方法来建立数组性能也不见得有多高!他的作法是先建立一个长度为100的数组,而后再使用数组 的实例方 法Array.prototype.map来从新赋值,代码以下:

1. var a = new Array(100);

2. a = a.map(function(item, index) {

3.     return index;

4. });

使用了map方法真是高端大气上档期啊!一开始,我也觉得他的答案是正确的了,可是,后来我在控制台打印了一下,却发现也是不对的啊,由于,最终打出来的数组是一个长度为100的空的数组,以下:

好奇怪!这么好用的方法居然输出的结果也不正确,心好累啊!
后来,查了API,才知道, JavaScript数组是稀疏数组,好比,经过new Array(100)建立一个新的数组的,虽然他的长度是100,可是实际上他是一个空数组,也就是说没有真实存在的元素。 因此使用map方法,根本不会去遍历这个数组100次的。 后来,知乎上问了一下,才学到了一个新的可行的方法,以下 :

1. var a = Array(100).join(",").split(",").map(function(item, index) {

2.   return index;

3. });

这个解法充满了曲折啊!先是建立一个数组,而后,经过join方法把它转成字符串,而后,再经过split方法把字符串转成数组,这时候,它就拥有100个值为空的元素了,而后,再经过map函数,改变这些元素的值便可
5.实现对数组进行乱序
这道题考察了数组的sort方法,由于是乱序,因此,还须要用到Math.random()产生随机数,打乱排序规律!代码以下:

1. var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],

2.     sign = 1; 

3. a.sort(function(a, b) {

4.     //由于Math.random产生的数在0-1之间

5.     //因此0.5两边的几率是相、、的

6.     //大于0.5时为升序,小于0.5时为降序

7.     sign = (Math.random() > 0.5) ? 1 : -1;

8.     return (a - b) * sign;

9. });

6.有一个长度为100的数组,请以优雅的方式求出该数组的前10个元素之和
分析:其实,对于数组求和有不少种方法,也很简单。 可是,这题有两个限制条件: 优雅的方式、、前10个元素 对于“前10个元素”这个限制条件可使用Array.prototype.slice()方法来截取,对于"优雅的方式",个人理解是应该尽量使用数组自带的方法,最好可使用高阶函数!因此我以为应该是Array.prototype.reduce()方法。 代码以下:

1. var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],

2. sum = 0;

3. sum = a.slice(0, 10).reduce(function(pre, current) {

4.   return pre + current;

5. });

6. console.log(sum); //55

这样看起开会比使用for循环优雅了很多哈!
后面的全都是主观题,答案不惟一,因此,我也不写解答过程啦

7.JavaScript实现继承的经常使用方法有哪些?你推荐的是哪种?
提示:能够看看《JavaScript高级程序设计》的第六章。 里面详细的介绍了各类继承方法。 其中,值得推荐的是组合方式。 ES5的Object.create()就是使用了该方式实现继承的!

8.在项目开发完成以后,根据雅虎性能优化规则,须要对html,JS,CSS,图片须要作出怎样的处理?是否能够借助构建工具实现自动化?
提示:从减小http请求、减小带宽、提升加载速度、方面进行答题便可。 对于自动化,可使用gulp构建工具!

9.当项目的某个模块发生问题了,你是怎么定位错误的?你经常使用的调试工具是什么?
提示:这题在考察debug的能力。 能够说说本身平时的debug方法,好比断点调试、、。 调试工具,有chrome的控制台,firebug、、

10.咱们在跟后端进行异步请求时,很容易陷入嵌套太深的陷阱?
提示:这道题,我不会作,后来问了朋友,他说可使用promise,能够参考一下什么是promise
https://segmentfault.com/a/1190000002395343

11.请写个正则表达式匹配全部二级域名是9game.cn和其目录下的网址,好比: http://abc.9game.cn/sname/view/
若是这个很是重要的话,怎么保护他呢?

12.项目测试没问题,可是放到线上就有问题了,你是怎么解决的??

------------------------ -----------------------

如下是收集一些面试中常常会遇到的经典面试题以及本身面试过程当中没法解决的问题,经过对知识的整理以及经验的总结,从新巩固自身的前端基础知识,若有错误或更好的答案,欢迎指正。

HTML/CSS部分

一、什么是盒子模型?

在网页中,一个元素占有空间的大小由几个部分构成,其中包括元素的内容(content),元素的内边距(padding),元素的边框(border),元素的外边距(margin)四个部分。这四个部分占有的空间中,有的部分能够显示相应的内容,而有的部分只用来分隔相邻的区域或区域。4个部分一块儿构成了css中元素的盒模型。

二、行内元素有哪些?块级元素有哪些? 空(void)元素有那些?

行内元素:a、b、span、img、input、strong、select、label、em、button、textarea
块级元素:div、ul、li、dl、dt、dd、p、h1-h六、blockquote
空元素:即系没有内容的HTML元素,例如:br、meta、hr、link、input、img

三、CSS实现垂直水平居中

一道经典的问题,实现方法有不少种,如下是其中一种实现:
HTML结构:

    <div class="wrapper">         <div class="content"></div>     </div>    

CSS:

    .wrapper{position:relative;}     .content{         background-color:#6699FF;         width:200px;         height:200px;         position: absolute;        //父元素须要相对定位         top: 50%;         left: 50%;         margin-top:-100px ;   //二分之一的height,width         margin-left: -100px;     }

四、简述一下src与href的区别

href 是指向网络资源所在位置,创建和当前元素(锚点)或当前文档(连接)之间的连接,用于超连接。

src是指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置;在请求src资源时会将其指向的资源下载并应用到文档内,例如js脚本,img图片和frame等元素。当浏览器解析到该元素时,会暂停其余资源的下载和处理,直到将该资源加载、编译、执行完毕,图片和框架等元素也如此,相似于将所指向资源嵌入当前标签内。这也是为何将js脚本放在底部而不是头部。

五、什么是CSS Hack?

通常来讲是针对不一样的浏览器写不一样的CSS,就是 CSS Hack。
IE浏览器Hack通常又分为三种,条件Hack、属性级Hack、选择符Hack(详细参考CSS文档:css文档)。例如:

    // 一、条件Hack    <!--[if IE]>       <style>             .test{color:red;}       </style>    <![endif]-->    // 二、属性Hack     .test{     color:#0909; /* For IE8+ */     *color:#f00;  /* For IE7 and earlier */     _color:#ff0;  /* For IE6 and earlier */     }    // 三、选择符Hack     * html .test{color:#090;}       /* For IE6 and earlier */     * + html .test{color:#ff0;}     /* For IE7 */    

六、简述同步和异步的区别

同步是阻塞模式,异步是非阻塞模式。
同步就是指一个进程在执行某个请求的时候,若该请求须要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去;
异步是指进程不须要一直等下去,而是继续执行下面的操做,无论其余进程的状态。当有消息返回时系统会通知进程进行处理,这样能够提升执行的效率。

七、px和em的区别

px和em都是长度单位,区别是,px的值是固定的,指定是多少就是多少,计算比较容易。em得值不是固定的,而且em会继承父级元素的字体大小。
浏览器的默认字体高都是16px。因此未经调整的浏览器都符合: 1em=16px。那么12px=0.75em, 10px=0.625em

八、什么叫优雅降级和渐进加强?

渐进加强 progressive enhancement:
针对低版本浏览器进行构建页面,保证最基本的功能,而后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。

优雅降级 graceful degradation:
一开始就构建完整的功能,而后再针对低版本浏览器进行兼容。

区别:

a. 优雅降级是从复杂的现状开始,并试图减小用户体验的供给

b. 渐进加强则是从一个很是基础的,可以起做用的版本开始,并不断扩充,以适应将来环境的须要

c. 降级(功能衰减)意味着往回看;而渐进加强则意味着朝前看,同时保证其根基处于安全地带

九、浏览器的内核分别是什么?

IE: trident内核
Firefox:gecko内核
Safari:webkit内核
Opera:之前是presto内核,Opera现已改用Google Chrome的Blink内核
Chrome:Blink(基于webkit,Google与Opera Software共同开发)

JavaScript部分

一、怎样添加、移除、移动、复制、建立和查找节点?

1)建立新节点
createDocumentFragment() //建立一个DOM片断
createElement() //建立一个具体的元素
createTextNode() //建立一个文本节点

2)添加、移除、替换、插入
appendChild() //添加
removeChild() //移除
replaceChild() //替换
insertBefore() //插入

3)查找
getElementsByTagName() //经过标签名称
getElementsByName() //经过元素的Name属性的值
getElementById() //经过元素Id,惟一性

二、实现一个函数clone,能够对JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制。

/**  * 对象克隆  * 支持基本数据类型及对象  * 递归方法  */ function clone(obj) {     var o;     switch (typeof obj) {         case "undefined":             break;         case "string":             o = obj + "";             break;         case "number":             o = obj - 0;             break;         case "boolean":             o = obj;             break;         case "object": // object 分为两种状况 对象(Object)或数组(Array)             if (obj === null) {                 o = null;             } else {                 if (Object.prototype.toString.call(obj).slice(8, -1) === "Array") {                     o = [];                     for (var i = 0; i < obj.length; i++) {    o.push(clone(obj[i])); }                 } else {  o = {};

  for (var k in obj)

{o[k]=clone(obj[k]);   

}  }             }             break;         default:             o = obj;             break;     }     return o; }

三、如何消除一个数组里面重复的元素?

// 方法一: var arr1 =[1,2,2,2,3,3,3,4,5,6],     arr2 = []; for(var i = 0,len = arr1.length; i< len; i++){if(arr2.indexOf(arr1[i])<0){ arr2.push(arr1[i]);     } } document.write(arr2); // 1,2,3,4,5,6

四、想实现一个对页面某个节点的拖曳?如何作?(使用原生JS)。

五、在Javascript中什么是伪数组?如何将伪数组转化为标准数组?

伪数组(类数组):没法直接调用数组方法或指望length属性有什么特殊的行为,但仍能够对真正数组遍历方法来遍历它们。典型的是函数的argument参数,还有像调用getElementsByTagName,document.childNodes之类的,它们都返回NodeList对象都属于伪数组。可使用Array.prototype.slice.call(fakeArray)将数组转化为真正的Array对象。

function log(){       var args = Array.prototype.slice.call(arguments);   //为了使用unshift数组方法,将argument转化为真正的数组       args.unshift('(app)');         console.log.apply(console, args); };

六、Javascript中callee和caller的做用?

caller是返回一个对函数的引用,该函数调用了当前函数;

callee是返回正在被执行的function函数,也就是所指定的function对象的正文。

七、请描述一下cookies,sessionStorage和localStorage的区别

sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问而且当会话结束后数据也随之销毁。所以sessionStorage不是一种持久化的本地存储,仅仅是会话级别的存储。而localStorage用于持久化的本地存储,除非主动删除数据,不然数据是永远不会过时的。

web storage和cookie的区别

Web Storage的概念和cookie类似,区别是它是为了更大容量存储设计的。Cookie的大小是受限的,而且每次你请求一个新的页面的时候Cookie都会被发送过去,这样无形中浪费了带宽,另外cookie还须要指定做用域,不能够跨域调用。
除此以外,Web Storage拥有setItem,getItem,removeItem,clear等方法,不像cookie须要前端开发者本身封装setCookie,getCookie。可是Cookie也是不能够或缺的:Cookie的做用是与服务器进行交互,做为HTTP规范的一部分而存在 ,而Web Storage仅仅是为了在本地“存储”数据而生。

八、手写数组快速排序

关于快排算法的详细说明,能够参考阮一峰老师的文章快速排序
"快速排序"的思想很简单,整个排序过程只须要三步:
(1)在数据集之中,选择一个元素做为"基准"(pivot)。
(2)全部小于"基准"的元素,都移到"基准"的左边;全部大于"基准"的元素,都移到"基准"的右边。
(3)对"基准"左边和右边的两个子集,不断重复第一步和第二步,直到全部子集只剩下一个元素为止。

九、统计字符串"aaaabbbccccddfgh"中字母个数或统计最多字母数。

var str = "aaaabbbccccddfgh"; var obj  = {}; for(var i=0;i<str.length;i++){     var v = str.charAt(i);     if(obj[v] && obj[v].value == v){         obj[v].count = ++ obj[v].count;     }else{         obj[v] = {};         obj[v].count = 1;         obj[v].value = v;     } } for(key in obj){     document.write(obj[key].value +'='+obj[key].count+' '); // a=4  b=3  c=4  d=2  f=1  g=1  h=1  }   

十、写一个function,清除字符串先后的空格。(兼容全部浏览器)

function trim(str) {     if (str && typeof str === "string") {         return str.replace(/(^s*)|(s*)$/g,""); //去除先后空白符     } }

其余

一、一次完整的HTTP事务是怎样的一个过程?

基本流程:

a. 域名解析

b. 发起TCP的3次握手

c. 创建TCP链接后发起http请求

d. 服务器端响应http请求,浏览器获得html代码

e. 浏览器解析html代码,并请求html代码中的资源

f. 浏览器对页面进行渲染呈现给用户

二、对前端工程师这个职位你是怎么样理解的?

a. 前端是最贴近用户的程序员,前端的能力就是能让产品从 90分进化到 100 分,甚至更好

b. 参与项目,快速高质量完成实现效果图,精确到1px;

c. 与团队成员,UI设计,产品经理的沟通;

d. 作好的页面结构,页面重构和用户体验;

e. 处理hack,兼容、写出优美的代码格式;

f. 针对服务器的优化、拥抱最新前端技术。