总结面试题

1.HTML与XHTML——二者有什么区别

  最主要的不同:XHTML 元素必须被正确地嵌套。XHTML 元素必须被关闭。标签名必须用小写字母。XHTML 文档必须拥有根元素。

2.简单说一下浏览器本地存储是怎样的

    在较高版本的浏览器中,js提供了sessionStorage和globalStorage。在HTML5中提供了localStorage来取代globalStorage。html5中的Web Storage包括了两种存储方式:sessionStorage和localStorage。sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁。因此sessionStorage不是一种持久化的本地存储,仅仅是会话级别的存储。而localStorage用于持久化的本地存储,除非主动删除数据,否则数据是永远不会过期的。

3.display:none和visibility:hidden的区别?

   display:none  隐藏对应的元素,在文档布局中不再给它分配空间,它各边的元素会合拢,就当他从来不存在。visibility:hidden  隐藏对应的元素,但是在文档布局中仍保留原来的空间。

4.position的absolute与fixed共同点与不同点

   A:共同点:1.改变行内元素的呈现方式,display被置为inline-block;2.让元素脱离普通流,不占据空间;3.默认会覆盖到非定位元素上

B不同点:absolute的”根元素“是可以设置的,而fixed的”根元素“固定为浏览器窗口。当你滚动网页,fixed元素与浏览器窗口之间的距离是不变的。

5.介绍一下CSS的盒子模型?

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

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

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

 CSS 选择符: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)

  可继承的样式:1.font-size  2.font-family  3.color  4.text-indent

   不可继承的样式: 1.border  2.padding  3.margin  4.width  5.height

优先级算法:

  1 .优先级就近原则,同权重情况下样式定义最近者为准;  2.载入样式以最后载入的定位为准; 3.!important >  id > class > tag  

 4.important 比 内联优先级高,但内联比 id 要高

 CSS3新增伪类举例:

p:first-of-type 选择属于其父元素的首个

元素的每个

元素。

p:last-of-type  选择属于其父元素的最后

元素的每个

元素。

p:only-of-type  选择属于其父元素唯一的

元素的每个

元素。

p:only-child    选择属于其父元素的唯一子元素的每个

元素。

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

元素。

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

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

7.列出display的值,说明他们的作用。position的值, relative和absolute分别是相对于谁进行定位的?

display 的值的作用:

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

2.inline 缺省值。象行内元素类型一样显示。

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

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

position 的值的定位区别:

1.absolute 生成绝对定位的元素,相对于 static 定位以外的第一个祖先元素进行定位。

2.fixed 生成固定定位的元素,相对于浏览器窗口进行定位(老IE不支持)。

3.relative 生成相对定位的元素,相对于其在普通流中的位置进行定位。

4.static 默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right z-index 声明)。

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

8.CSS3有哪些新特性?

1. CSS3实现圆角(border-radius),阴影(box-shadow),

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

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

4. 增加了更多的CSS选择器  多背景 rgba

5. 在CSS3中唯一引入的伪类是 ::selection.

6. 媒体查询,多栏布局

7. border-image

9.为什么要初始化CSS样式。

因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面显示差异。当然,初始化样式会对SEO有一定的影响,但鱼和熊掌不可兼得,但力求影响最小的情况下初始化。*最简单的初始化方法就是(不建议):{padding: 0; margin: 0;}

10.解释下 CSS sprites,以及你要如何在页面或网站中使用它。

CSS Sprites 其实就是把网页中一些背景图片整合到一张图片文件中,再利用 CSS 的"background-image","background-repeat","background-position" 的组合进行背景定位,background-position 可以用数字能精确的定位出背景图片的位置。这样可以减少很多图片请求的开销,因为请求耗时比较长;请求虽然可以并发,但是也有限制,一般浏览器都是6个。对于未来而言,就不需要这样做了,因为有了 http2。

11.说说你对语义化的理解?

1. 去掉或者丢失样式的时候能够让页面呈现出清晰的结构

2. 有利于SEO:和搜索引擎建立良好沟通,有助于爬虫抓取更多的有效信息:爬虫依赖于标签来确定上下文和各个关键字的权重;

3. 方便其他设备解析(如屏幕阅读器、盲人阅读器、移动设备)以意义的方式来渲染网页;

4. 便于团队开发和维护,语义化使得网页更具可读性,是进一步开发网页的必要步骤,遵循W3C标准的团队都遵循这个标准,可以减少差异化。

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

1. 声明位于文档中的最前面,处于 标签之前。告知浏览器以何种模式来渲染文档。 

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

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

4. DOCTYPE不存在或格式不正确会导致文档以混杂模式呈现。 

13.你知道多少种Doctype文档类型?

1. 该标签可声明三种 DTD 类型,分别表示严格版本、过渡版本以及基于框架的 HTML 文档。

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

3. XHTML 1.0 规定了三种 XML 文档类型:Strict、Transitional 以及 Frameset。

4. Standards (标准)模式(也就是严格呈现模式)用于呈现遵循最新标准的网页,而 Quirks(包容)模式(也就是松散呈现模式或者兼容模式)用于呈现为传统浏览器而设计的网页。

14.html常见兼容性问题?

1. png24位的图片在iE6浏览器上出现背景

解决方案:做成PNG8,也可以引用一段脚本处理.

2. 浏览器默认的margin和padding不同

解决方案:加一个全局的 *{margin:0;padding:0;} 来统一。

3. IE6双边距bug:在IE6下,如果对元素设置了浮动,同时又设置了margin-left或margin-right,margin值会加倍。

1

#box{ float:left; width:10px; margin:0 0 0 10px;} 

这种情况之下IE会产生20px的距离

解决方案:在float的标签样式控制中加入 _display:inline; 将其转化为行内属性。( _ 这个符号只有ie6会识别)

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

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

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

1

2

3

4

5

6

.bb{

    background-color:#f1ee18; /*所有识别*/

    .background-color:#00deff\9; /*IE6、7、8识别*/

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

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

5.IE下,可以使用获取常规属性的方法来获取自定义属性,也可以使用 getAttribute() 获取自定义属性;Firefox下,只能使用getAttribute()获取自定义属性

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

6. IE下,event对象有 x、y 属性,但是没有 pageX、pageY属性; Firefox下,event对象有 pageX、pageY 属性,但是没有 x、y 属性

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

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

解决方法:可通过加入 CSS 属性 -webkit-text-size-adjust: none; 解决

8. 超链接访问过后 hover 样式就不出现了,被点击访问过的超链接样式不在具有 hover 和 active 了

解决方法:改变CSS属性的排列顺序 L-V-H-A

1

2

3

4

a:link {}

a:visited {}

a:hover {}

a:active {}

9. 怪异模式问题:漏写 DTD 声明,Firefox 仍然会按照标准模式来解析网页,但在 IE 中会触发怪异模式。为避免怪异模式给我们带来不必要的麻烦,最好养成书写 DTD 声明的好习惯。现在可以使用[html5](http://www.w3.org/TR/html5/single-page.html) 推荐的写法:

10. 上下margin重合问题:ie和ff都存在,相邻的两个div的margin-left和margin-right不会重合,但是margin-top和margin-bottom却会发生重合。

解决方法:养成良好的代码编写习惯,同时采用margin-top或者同时采用margin-bottom。

11. ie6对png图片格式支持不好

解决方案:引用一段脚本处理

15.解释下浮动和它的工作原理?清除浮动的技巧

浮动元素脱离文档流,不占据空间。浮动元素碰到包含它的边框或者浮动元素的边框停留。

1. 使用空标签清除浮动。

这种方法是在所有浮动标签后面添加一个空标签 定义css clear:both. 弊端就是增加了无意义标签。

2. 使用overflow。

给包含浮动元素的父标签添加css属性 overflow:auto; zoom:1; zoom:1用于兼容IE6。

3. 使用after伪对象清除浮动。

该方法只适用于非IE浏览器。具体写法可参照以下示例。使用中需注意以下几点。一、该方法中必须为需要清除浮动元素的伪对象中设置 height:0,否则该元素会比实际高出若干像素;

可以给父元素设置overflow:auto或者hidden

16.IE 8以下版本的浏览器中的盒模型有什么不同

 IE8以下浏览器的盒模型中定义的元素的宽高包括内边距和边框

20.DOM操作——怎样添加、移除、移动、复制、创建和查找节点。

1. 创建新节点

1

2

3

createDocumentFragment() // 创建一个DOM片段

createElement() // 创建一个具体的元素

createTextNode() // 创建一个文本节点

2. 添加、移除、替换、插入

1

2

3

4

appendChild()

removeChild()

replaceChild()

insertBefore() // 在已有的子节点前插入一个新的子节点

3. 查找

 

 

getElementsByTagName() // 通过标签名称

getElementsByName() // 通过元素的Name属性的值(IE容错能力较强,会得到一个数组,其中包括id等于name值的)

getElementById() // 通过元素Id,唯一性

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

新特性:

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

1. 拖拽释放(Drag and drop) API 

2. 语义化更好的内容标签(header,nav,footer,aside,article,section)

3. 音频、视频API(audio,video)

4. 画布(Canvas) API

5. 地理(Geolocation) API

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

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

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

9. 新的技术webworker, websocket, Geolocation

移除的元素:

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

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

支持HTML5新标签:

1. IE8/IE7/IE6支持通过 document.createElement 方法产生的标签,可以利用这一特性让这些浏览器支持 HTML5 新标签,浏览器支持新标签后,还需要添加标签默认的样式(当然最好的方式是直接使用成熟的框架、使用最多的是html5shiv框架)

22.如何实现浏览器内多个标签页之间的通信?

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

23.请说出三种减少页面加载时间的方法

1. 优化图片 

2. 图像格式的选择(GIF:提供的颜色较少,可用在一些对颜色要求不高的地方) 

3. 优化CSS(压缩合并css,如 margin-top, margin-left...) 

4. 网址后加斜杠(如www.campr.com/目录,会判断这个目录是什么文件类型,或者是目录。) 

5. 标明高度和宽度(如果浏览器没有找到这两个参数,它需要一边下载图片一边计算大小,如果图片很多,浏览器需要不断地调整页面。这不但影响速度,也影响浏览体验。 

当浏览器知道了高度和宽度参数后,即使图片暂时无法显示,页面上也会腾出图片的空位,然后继续加载后面的内容。从而加载时间快了,浏览体验也更好了) 

6. 减少http请求(合并文件,合并图片)

24.null和undefined的区别?

null是一个表示"无"的对象,转为数值时为0

undefined是一个表示"无"的原始值,转为数值时为NaN

当声明的变量还未被初始化时,变量的默认值为undefined

null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象

undefined表示 “缺少值”,就是此处应该有一个值,但是还没有定义。典型用法是:

1. 变量被声明了,但没有赋值时,就等于 undefined

2. 调用函数时,应该提供的参数没有提供,该参数等于 undefined

3. 对象没有赋值的属性,该属性的值为 undefined

4. 函数没有返回值时,默认返回 undefined

null表示“没有对象”,即该处不应该有值。典型用法是:

1. 作为函数的参数,表示该函数的参数不是对象

2. 作为对象原型链的终点

25.new操作符具体干了什么呢?

1. 创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型

2. 属性和方法被加入到 this 引用的对象中

3. 新创建的对象由 this 所引用,并且最后隐式的返回 this

1

2

3

var obj  = {};

obj.__proto__ = Base.prototype;

Base.call(obj); 

26.对JSON 的了解?

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它是基于JavaScript的一个子集。数据格式简单, 易于读写, 占用带宽小。

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

 

 

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

1. defer和async

2. 动态创建DOM方式(创建script,插入到DOM中,加载完毕后callBack)

3. 按需异步载入js

28.如何解决跨域问题?

1. jsonp(jsonp 的原理是动态插入 script 标签)

2. document.domain + iframe

3. window.name、window.postMessage

4. 服务器上设置代理页面

29.documen.write和 innerHTML 的区别

document.write 只能重绘整个页面

innerHTML 可以重绘页面的一部分

30..call() 和 .apply() 的作用?

动态改变某个类的某个方法的运行环境

31.哪些操作会造成内存泄漏?

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

垃圾回收器定期扫描对象,并计算引用了每个对象的其他对象的数量。如果一个对象的引用数量为 0(没有其他对象引用过该对象),或对该对象的惟一引用是循环的,那么该对象的内存即可回收。

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

2. 闭包

3. 控制台日志

4. 循环(在两个对象彼此引用且彼此保留时,就会产生一个循环)

32.如何判断当前脚本运行在浏览器还是node环境中?

通过判断 Global 对象是否为window,如果不为window,当前脚本没有运行在浏览器中。即在node中的全局变量是global ,浏览器的全局变量是window。 可以通过该全局变量是否定义来判断宿主环境

33.对Node的优点和缺点提出了自己的看法?

优点:

1. 因为Node是基于事件驱动和无阻塞的,所以非常适合处理并发请求,因此构建在Node上的代理服务器相比其他技术实现(如Ruby)的服务器表现要好得多。

2. 与Node代理服务器交互的客户端代码是由javascript语言编写的,因此客户端和服务器端都用同一种语言编写,这是非常美妙的事情。

缺点:

1. Node是一个相对新的开源项目,所以不太稳定,它总是一直在变。

2. 缺少足够多的第三方库支持。看起来,就像是Ruby/Rails当年的样子(第三方库现在已经很丰富了,所以这个缺点可以说不存在了)。

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

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

1. 实现界面交互

2. 提升用户体验

3. 有了Node.js,前端可以实现服务端的一些事情

前景:

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

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

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

4. 做好的页面结构,页面重构和用户体验;

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

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

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

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. 图片预加载,将样式表放在顶部,将脚本放在底部,加上时间戳

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

1. 100-199 用于指定客户端应响应的某些动作

2. 200-299 用于表示请求成功

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

4. 400-499 用于指出客户端的错误

400:语义有误,当前请求无法被服务器理解

401:当前请求需要用户验证

403:服务器已经理解请求,但是拒绝执行它

5. 500-599 用于指出服务器错误

503:服务不可用

37.一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么?

分为4个步骤:

1. 当发送一个 URL 请求时,不管这个 URL 是 Web 页面的 URL 还是 Web 页面上每个资源的 URL,浏览器都会开启一个线程来处理这个请求,同时在远程 DNS 服务器上启动一个 DNS 查询。这能使浏览器获得请求对应的 IP 地址。

2. 浏览器与远程 Web 服务器通过 TCP 三次握手协商来建立一个 TCP/IP 连接。该握手包括一个同步报文,一个同步-应答报文和一个应答报文,这三个报文在 浏览器和服务器之间传递。该握手首先由客户端尝试建立起通信,而后服务器应答并接受客户端的请求,最后由客户端发出该请求已经被接受的报文。

3. 一旦 TCP/IP 连接建立,浏览器会通过该连接向远程服务器发送 HTTP 的 GET 请求。远程服务器找到资源并使用 HTTP 响应返回该资源,值为 200 的 HTTP 响应状态表示一个正确的响应。

4. 此时,Web 服务器提供资源服务,客户端开始下载资源。

请求返回后,便进入了我们关注的前端模块

简单来说,浏览器会解析 HTML 生成 DOM Tree,其次会根据 CSS 生成 CSS Rule Tree,而 javascript 又可以根据 DOM API 操作 DOM

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

最流行的一些东西:1. Node.js2. Mongodb3. npm4. MVVM5. MEAN6. three.js7. React

常去的网站:1. 牛客网2. Github3. CSDN

39.javascript继承的 6 种方法

1. 原型链继承

2. 借用构造函数继承

3. 组合继承(原型+借用构造)

4. 原型式继承

5. 寄生式继承

6. 寄生组合式继承

40.ajax 的过程是怎样的

1. 创建XMLHttpRequest对象,也就是创建一个异步调用对象

2. 创建一个新的HTTP请求,并指定该HTTP请求的方法、URL及验证信息

3. 设置响应HTTP请求状态变化的函数

4. 发送HTTP请求

5. 获取异步调用返回的数据

6. 使用JavaScript和DOM实现局部刷新

41.请解释一下 JavaScript 的同源策略。

概念:

同源策略是客户端脚本(尤其是Javascript)的重要的安全度量标准。它最早出自Netscape Navigator2.0,其目的是防止某个文档或脚本从多个不同源装载。

这里的同源策略指的是:协议,域名,端口相同,同源策略是一种安全协议,指一段脚本只能读取来自同一来源的窗口和文档的属性。

为什么要有同源限制:

我们举例说明:比如一个黑客程序,他利用Iframe把真正的银行登录页面嵌到他的页面上,当你使用真实的用户名,密码登录时,他的页面就可以通过Javascript读取到你的表单中input中的内容,这样用户名,密码就轻松到手了。

42.GET和POST的区别,何时使用POST?

GET:一般用于信息获取,使用URL传递参数,对所发送信息的数量也有限制,一般在2000个字符

POST:一般用于修改服务器上的资源,对所发送的信息没有限制

GET方式需要使用 Request.QueryString 来取得变量的值

POST方式通过 Request.Form 来获取变量的值

也就是说 Get 是通过地址栏来传值,而 Post 是通过提交表单来传值。

在以下情况中,请使用 POST 请求:

1. 无法使用缓存文件(更新服务器上的文件或数据库)

2. 向服务器发送大量数据(POST 没有数据量限制)

3. 发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠

43.Node.js 的适用场景

1. 高并发 2. 聊天 3. 实时消息推送   

44.JavaScript 原型,原型链 ? 有什么特点?

1. 原型对象也是普通的对象,是对象一个自带隐式的 __proto__ 属性,原型也有可能有自己的原型,如果一个原型对象的原型不为 null 的话,我们就称之为原型链

2. 原型链是由一些用来继承和共享属性的对象组成的(有限的)对象链

45.怎么重构页面?

1. 编写 CSS

2. 让页面结构更合理化,提升用户体验

3. 实现良好的页面效果和提升性能

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

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

2. 事件处理机制:IE是事件冒泡、firefox同时支持两种事件模型,也就是:捕获型事件和冒泡型事件

3. ev.stopPropagation();

注意旧ie的方法:ev.cancelBubble = true;

47.Ajax 是什么?Ajax 的交互模型?同步和异步的区别?如何解决跨域问题?

Ajax 是什么:

1. 通过异步模式,提升了用户体验

2. 优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用

3. Ajax 在客户端运行,承担了一部分本来由服务器承担的工作,减少了大用户量下的服务器负载。

Ajax 的最大的特点:

1. Ajax可以实现动态不刷新(局部刷新)

2. readyState 属性 状态 有5个可取值: 0 = 未初始化,1 = 启动, 2 = 发送,3 = 接收,4 = 完成

Ajax 同步和异步的区别:

1. 同步:提交请求 -> 等待服务器处理 -> 处理完毕返回,这个期间客户端浏览器不能干任何事

2. 异步:请求通过事件触发 -> 服务器处理(这是浏览器仍然可以作其他事情)-> 处理完毕

ajax.open方法中,第3个参数是设同步或者异步。

Ajax 的缺点:

1. Ajax 不支持浏览器 back 按钮

2. 安全问题 Ajax 暴露了与服务器交互的细节

3. 对搜索引擎的支持比较弱

4. 破坏了程序的异常机制

5. 不容易调试

解决跨域问题:

1. jsonp

2. iframe

3. window.name、window.postMessage

4. 服务器上设置代理页面

48.对网站重构的理解

网站重构:在不改变外部行为的前提下,简化结构、添加可读性,而在网站前端保持一致的行为。也就是说是在不改变 UI 的情况下,对网站进行优化,在扩展的同时保持一致的 UI。

对于传统的网站来说重构通常是:

1. 表格(table)布局改为 DIV + CSS

2. 使网站前端兼容于现代浏览器(针对于不合规范的CSS、如对 IE6 有效的)

3. 对于移动平台的优化

4. 针对于 SEO 进行优化

5. 深层次的网站重构应该考虑的方面

6. 减少代码间的耦合

7. 让代码保持弹性

8. 严格按规范编写代码

9. 设计可扩展的API

10. 代替旧有的框架、语言(如VB)

11. 增强用户体验

12. 通常来说对于速度的优化也包含在重构中

13. 压缩JS、CSS、image等前端资源(通常是由服务器来解决)

14. 程序的性能优化(如数据读写)

15. 采用CDN来加速资源加载

16. 对于JS DOM的优化

17. HTTP服务器的文件缓存

49.js 数组去重

1)var arry =[1,25,15,1,2,15,5,15,25,35,1]
var set =new Set(arry)
console.log([...set])

2)[1,1,2,2,3,3,3,3].filter(function(elem, index, self) {
    return index == self.indexOf(elem);
})

50.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 服务器端暂时无法处理请求(可能是过载或维护)

51.谈谈jquery与vue的不同

1.jquery介绍:想必大家都用过jquery吧,这个曾经也是现在依然最流行的web前端js库,可是现在无论是国内还是国外他的使用率正在渐渐被其他的js库所代替,随着浏览器厂商对HTML5规范统一遵循以及ECMA6在浏览器端的实现,jquery的使用率将会越来越低

2.vue介绍:vue是一个兴起的前端js库,是一个精简的MVVM。从技术角度讲,Vue.js 专注于 MVVM 模型的 ViewModel 层。它通过双向数据绑定把 View 层和 Model 层连接了起来,通过对数据的操作就可以完成对页面视图的渲染。当然还有很多其他的mvmm框架如Angular,React都是大同小异,本质上都是基于MVVM的理念。 然而vue以他独特的优势简单,快速,组合,紧凑,强大而迅速崛起

3.vue和jquey对比 

jQuery是使用选择器($)选取DOM对象,对其进行赋值、取值、事件绑定等操作,其实和原生的HTML的区别只在于可以更方便的选取和操作DOM对象,而数据和界面是在一起的。比如需要获取label标签的内容:$("lable").val();,它还是依赖DOM元素的值。 

Vue则是通过Vue对象将数据和View完全分离开来了。对数据进行操作不再需要引用相应的DOM对象,可以说数据和View是分离的,他们通过Vue对象这个vm实现相互的绑定。这就是传说中的MVVM。

4.举例说明

场景一:列表添加一个元素,下图为vue和jquery两种操作的代码,我们从中可以看出vue只需要向数据message里面push一条数据即可完成添加一个li标签的操作,而jquery则需要获取dom元素节点,并对dom进行添加一个标签的操作,如果dom结构特别复杂,或者添加的元素非常复杂,则代码会变得非常复杂且阅读性低

52.vuejs是什么,特点是什么

Vue.js是一个轻巧、高性能、可组件化的MVVM库,同时拥有非常容易上手的API;

   Vue.js是一个构建数据驱动的Web界面的库。

   Vue.js是一套构建用户界面的 渐进式框架。与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计。Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合。另一方面,Vue 完全有能力驱动采用单文件组件和 Vue 生态系统支持的库开发的复杂单页应用。数据驱动+组件化的前端开发。

简而言之:Vue.js是一个构建数据驱动的 web 界面的渐进式框架。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。核心是一个响应的数据绑定系统。

Vue.js的特性如下:

1.轻量级的框架

2.双向数据绑定

3.指令

4.插件化

53.nodejs是什么,特点是?

是js的在服务器端的解析器。Node.Node.js不是一门语言,也不是一个javascript框架或者javascript类库,不同于Jquery ExtJS;Node.js是一个可以让javascript运行在服务器端的平台;

Node.js具有以下特点:

①是一个javascript运行环境或者平台

②依赖于Chrome V8引擎进行代码解释

③基于事件驱动

④异步式I/O(非阻塞I/O)

⑤单进程、单线程

⑥轻量、可伸缩,适用于实时数据交互应用

通过以上的特点,我们可以总结一句话:

Node.js是用异步式I/O和事件驱动,依赖于Chrome的V8引擎进行代码解释的javascript运行环境;

Node.js最大的特点就是异步式I/O和事件驱动,对于高并发的解决方法,Node.js摒弃了传统的多线程模型,

使用的是单线程模型,对所有的I/O请求都采用异步式请求的方式;

异步式I/O和事件驱动:异步式I/O,又叫非阻塞I/O,在阻塞状态下,当线程遇到I/O操作时,会等待I/O操作的完成,从而造成阻塞,而一个线程只能处理一项任务,要想提供吞吐量必须通过多线程;非阻塞状态下,不会等待I/O操作的结果返回,继续执行下一条语句,当结果返回时,I/O以事件的方式通知;

Node.js的异步式I/O由回调函数完成,事件的回调函数在遇到I/O请求并且当I/O操作完成时,会发送一个事件

到事件队列,而Node.js的事件循环机制会检查队列中有没有未处理的事件,直到程序结束,所以可以说,

Node.js程序由事件循环开始,到事件循环结束。
Node.js的用途

Node.js适合应用在高并发、I/O密集、少量业务逻辑的场景

善于I/O,不善于计算。因为Node.js最擅长的就是任务调度,如果你的业务有很多的CPU计算,实际上也相当于这个计算阻塞了这个单线程,就不适合Node开发。

当应用程序需要处理大量并发的I/O,而在向客户端发出响应之前,应用程序内部并不需要进行非常复杂的处理的时候,Node.js非常适合。Node.js也非常适合与web socket配合,开发长连接的实时交互应用程序。

比如:

● 用户表单收集

● 考试系统

● 聊天室

● 图文直播

● 提供JSON的API(为前台Angular使用)

不适合的场景:

1.计算密集型应用

2.单用户多任务的程序

3.逻辑十分复杂的事务

4.unicode与国际化

54.ajax是什么,ajax怎么获取数据

     AJAX的全称是Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。

  ajax不是新的编程语言,而是一种使用现有标准的新方法。ajax是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下。

  ajax是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。

  ajax是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换。ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。而传统的网页(不使用ajax)如果需要更新内容,必须重载整个网页面。

ajax的优点:

  1、最大的一点是页面无刷新,用户的体验非常好。
  2、使用异步方式与服务器通信,具有更加迅速的响应能力。。
  3、可以把以前一些服务器负担的工作转嫁到客户端,利用客户端闲置的能力来处理,减轻服务器和带宽的负担,节约空间和宽带租用成本。并且减轻服务器的负担,ajax的原则是“按需取数据”,可以最大程度的减少冗余请求,和响应对服务器造成的负担。
  4、基于标准化的并被广泛支持的技术,不需要下载插件或者小程序。
  5、ajax可使因特网应用程序更小、更快,更友好。

  ajax的缺点:

  1、ajax不支持浏览器back按钮。
  2、安全问题 AJAX暴露了与服务器交互的细节。
  3、对搜索引擎的支持比较弱。
  4、破坏了程序的异常机制。
  5、不容易调试。

 

55.url组成

1.协议部分:该URL的协议部分为“http:”,这代表网页使用的是HTTP协议。在Internet中可以使用多种协议,如HTTP,FTP等等本例中使用的是HTTP协议。在"HTTP"后面的“//”为分隔符

2.域名部分:该URL的域名部分为“www.aspxfans.com”。一个URL中,也可以使用IP地址作为域名使用

3.端口部分:跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分,如果省略端口部分,将采用默认端口

4.虚拟目录部分:从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。本例中的虚拟目录是“/news/”

5.文件名部分:从域名后的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一个URL必须的部分,如果省略该部分,则使用默认的文件名

6.锚部分:从“#”开始到最后,都是锚部分。本例中的锚部分是“name”。锚部分也不是一个URL必须的部分

7.参数部分:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“boardID=5&ID=24618&page=1”。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。


 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(总结面试题)