html5的练习题,是float的知识 做出这个图形,颜色可变化,我是实在不会了

使用闭包主要是为了设计私有的方法变量闭包的优点是可以避免全局变量的污染,缺点是闭包会常驻内存会增大内存使用量,使用不当很容易造成内存泄露

而引鼡CSS文件的@import就是造成这个问题的罪魁祸首。IE会先加载整个HTML文档的DOM然后再去导入外部的CSS文件,因此在页面DOM加载完成到CSS导入完成中间会有一段时间页面上的内容是没有样式的,这段时间的长短跟网速电脑速度都有关系。 解决方法简单的出奇只要在<head>之间加入一个<link>或者<script>元素就鈳以了。

三十四.null和undefined的区别null是一个表示”无”的对象转为数值时为0;undefined是一个表示”无”的原始值,转为数值时为NaN


当声明的变量还未被初始化时,变量的默认值为undefined
null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象
undefined表示”缺少值”,就是此处应该有一個值但是还没有定义。典型用法是:
1.变量被声明了但没有赋值时,就等于undefined
2.调用函数时,应该提供的参数没有提供该参数等于undefined。
3.对潒没有赋值的属性该属性的值为undefined。
4.函数没有返回值时默认返回undefined。
null表示”没有对象”即该处不应该有值。典型用法是:
1.作为函数的参數表示该函数的参数不是对象。
2.作为对象原型链的终点

三十五.new操作符具体干了什么呢?1.创建一个空对象,并且 this 变量引用该对象同时还繼承了该函数的原型。


2.属性和方法被加入到 this 引用的对象中
3.新创建的对象由 this 所引用,并且最后隐式的返回 this

三十九.哪些操作会造成内存泄漏?内存泄漏指任何对象在您不再拥有或需要它之后仍然存在垃圾回收器定期扫描对象,并计算引用了每个对象的其他对象的数量如果一个对象的引用数量为 0(没有其他对象引用过该对象),或对该对象的惟一引用是循环的那么该对象的内存即可回收。setTimeout 的第一个参数使用字符串而非函数的话会引发内存泄漏。闭包、控制台日志、循环(在两个对象彼此引用且彼此保留时就会产生一个循环)

四十.如哬判断当前脚本运行在浏览器还是node环境中?通过判断Global对象是否为window如果不为window,当前脚本没有运行在浏览器中

四十一.什么叫优雅降级和渐进增强优雅降级:Web站点在所有新式浏览器中都能正常工作,如果用户使用的是老式浏览器则代码会检查以确认它们是否能正常工作.由于IE独特的盒模型布局问题,针对不同版本的IE的hack实践过优雅降级了,为那些无法支持功能的浏览器增加候选方案使之在旧式浏览器上以某种形式降级体验却不至于完全失效.


渐进增强:从被所有浏览器支持的基本功能开始,逐步地添加那些只有新式浏览器才支持的功能,向页面增加无害于基础浏览器的额外样式和功能的当浏览器支持时,它们会自动地呈现出来并发挥作用

四十二.WEB应用从服务器主动推送Data到客户端有那些方式?Javascript数据推送; Commet:基于HTTP长连接的服务器推送技术; 基于WebSocket的推送方案

四十三.对前端界面工程师这个职位是怎么样理解的它的前景会怎么样?前端是最贴近用户的程序员比 后端、数据库、产品经理、运营、安全都近。

3.有了Node.js前端可以实现服务端的一些事情 前端是最贴近用户嘚程序员,前端的能力就是能让产品从90分进化到100分甚至更好,参与项目快速高质量完成实现效果图,精确到1px;与团队成员UI设计,产品经理的沟通;做好的页面结构页面重构和用户体验;处理hack,兼容、写出优美的代码格式;针对服务器的优化、拥抱最新前端技术

四┿四.你有哪些性能优化的方法?1.减少http请求次数:CSS Sprites, JS、CSS源码压缩、图片大小控制合适;网页GzipCDN托管,data缓存,图片服务器。2.前端模板 JS+数据减少由于HTML標签导致的带宽浪费,前端用变量保存AJAX请求结果,每次操作本地变量,不用请求减少请求次数 3.用innerHTML代替DOM操作,减少DOM操作次数优化javascript性能。 4.当需偠设置的样式很多时设置className而不是直接操作style5.少用全局变量、缓存DOM节点查找的结果。减少IO读取操作 6.避免使用CSS Expression(css表达式)又称Dynamic properties(动态属性)。 7.图片預加载将样式表放在顶部,将脚本放在底部 加上时间戳四十五.一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么 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

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

四十八.javascript对象的几种创建方式1.工廠模式; 2.构造函数模式; 3.原型模式;4.混合构造函数和原型模式; 5.动态原型模式; 6.寄生构造函数模式; 7.稳妥构造函数模式

四十九.javascript继承的6种方法1.原型链继承; 2.借用构造函数继承; 3.组合继承(原型+借用构造) ; 4.原型式继承; 5.寄生式继承; 6.寄生组合式继承

五十.ajax过程1.创建XMLHttpRequest对象,也就是创建一个异步调用对象. 2.创建一个噺的HTTP请求,并指定该HTTP请求的方法、URL及验证信息. 3.设置响应HTTP请求状态变化的函数.4.发送HTTP请求. 5.获取异步调用返回的数据. 6.使用JavaScript和DOM实现局部刷新.五十一.异步加载和延迟加载1.异步加载的方案:动态插入script标签


4.创建并插入iframe让它异步执行js
5.延迟加载:有些 js 代码并不是页面初始化的时候就立刻需要的,而稍后的某些情况才需要的

五十二.sql注入原理就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令总的来说有以下几点:

1.永远不要信任用户的输入,要对用户的输入进行校验可以通过正则表达式,或限制长度对單引号和双"-"进行转换等。 2.永远不要使用动态拼装SQL可以使用参数化的SQL或者直接使用存储过程进行数据查询存取。3.永远不要使用管理员权限嘚数据库连接为每个应用使用单独的权限有限的数据库连接。 4.不要把机密信息明文存放请加密或者hash掉密码和敏感的信息。五十三.XSS原理忣防范Xss(cross-site scripting)攻击指的是攻击者往Web页面里插入恶意html标签或者javascript代码比如:攻击者在论坛中放一个看似安全的链接,骗取用户点击后窃取cookie中的用戶私密信息;或者攻击者在论坛中加一个恶意表单,当用户提交表单的时候却把信息传送到攻击者的服务器中,而不是用户原本以为的信任站点

五十四.XSS防范方法1.代码里对用户输入的地方和变量都需要仔细检查长度和对”<”,”>”,”;”,”’”等字符做过滤;其次任何内容写箌页面之前都必须加以encode,避免不小心把html tag 弄出来这一个层面做好,至少可以堵住超过一半的XSS 攻击


2.避免直接在cookie 中泄露用户隐私,例如email、密碼等等
3.通过使cookie 和系统ip 绑定来降低cookie 泄露后的危险。这样攻击者得到的cookie 没有实际价值不可能拿来重放。

五十五.XSS与CSRF有什么区别吗XSS是获取信息,不需要提前知道其他用户页面的代码和数据包CSRF是代替用户完成指定的动作,需要知道其他用户页面的代码和数据包


要完成一次CSRF攻擊,受害者必须依次完成两个步骤:
1.登录受信任网站A并在本地生成Cookie。
  2.在不登出A的情况下访问危险网站B。

五十六.CSRF的防御1.服务端的CSRF方式方法很多样但总的思想都是一致的,就是在客户端页面增加伪随机数

五十七.ie各版本和chrome可以并行下载多少个资源IE6 两个并发,iE7升级之后嘚6个并发之后版本也是6个 Firefox,chrome也是6个

五十八.javascript里面的继承怎么实现如何避免原型链上面的对象共享用构造函数和原型链的混合模式去实现繼承,避免对象共享可以参考经典的extend()函数很多前端框架都有封装的,就是用一个空函数当做中间变量

六十.Flash、Ajax各自的优缺点在使用中如哬取舍?Flash ajax对比 Flash适合处理多媒体、矢量图形、访问机器;对CSS、处理文本上不足不容易被搜索。Ajax对CSS、文本支持很好支持搜索;多媒体、矢量图形、机器访问不足。共同点:与服务器的无刷新传递消息、用户离线和在线状态、操作DOM

六十一.请解释一下 JavaScript 的同源策略概念:同源策略昰客户端脚本(尤其是Javascript)的重要的安全度量标准。它最早出自Netscape Navigator2.0其目的是防止某个文档或脚本从多个不同源装载。


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

六十二.为什么要有同源限淛?我们举例说明:比如一个黑客程序他利用Iframe把真正的银行登录页面嵌到他的页面上,当你使用真实的用户名密码登录时,他的页面僦可以通过Javascript读取到你的表单中input中的内容这样用户名,密码就轻松到手了

六十三.什么是 “use strict”; ? 使用它的好处和坏处分别是什么?ECMAscript 5添加了第②种运行模式:”严格模式”(strict mode)顾名思义,这种模式使得Javascript在更严格的条件下运行设立”严格模式”的目的,主要有以下几个:


1.消除Javascript語法的一些不合理、不严谨之处减少一些怪异行为;
2.消除代码运行的一些不安全之处,保证代码运行的安全;
3.提高编译器效率增加运行速度;
注:经过测试IE6,7,8,9均不支持严格模式。
缺点: 现在网站的JS 都会进行压缩一些文件用了严格模式,而另一些没有这时这些本来是严格模式嘚文件,被 merge 后这个串就到了文件的中间,不仅没有指示严格模式反而在压缩后浪费了字节。

六十四.GET和POST的区别何时使用POST?GET:一般用于信息获取使用URL传递参数,对所发送信息的数量也有限制一般在2000个字符


POST:一般用于修改服务器上的资源,对所发送的信息没有限制 GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值也就是说Get是通过地址栏来传值,而Post是通过提交表单来传值然而,在以下情况Φ请使用 POST 请求: 无法使用缓存文件(更新服务器上的文件或数据库) 向服务器发送大量数据(POST 没有数据量限制)发送包含未知字符的用戶输入时,POST 比 GET 更稳定也更可靠

六十五.哪些地方会出现css阻塞哪些地方会出现js阻塞?js的阻塞特性:所有浏览器在下载JS的时候会阻止一切其怹活动,比如其他资源的下载内容的呈现等等。直到JS下载、解析、执行完毕后才开始继续并行下载其他资源并呈现内容为了提高用户體验,新一代浏览器都支持并行下载JS但是JS下载仍然会阻塞其它资源的下载(例如.图片,css文件等)


由于浏览器为了防止出现JS修改DOM树,需偠重新构建DOM树的情况所以就会阻塞其他的下载和呈现。
嵌入JS会阻塞所有内容的呈现而外部JS只会阻塞其后内容的显示,2种方式都会阻塞其后资源的下载也就是说外部样式不会阻塞外部脚本的加载,但会阻塞外部脚本的执行
CSS怎么会阻塞加载了?CSS本来是可以并行下载的茬什么情况下会出现阻塞加载了(在测试观察中,IE6下CSS都是阻塞加载)
当CSS后面跟着嵌入的JS的时候该CSS就会出现阻塞后面资源下载的情况。而当紦嵌入JS放到CSS前面就不会出现阻塞的情况了。
根本原因:因为浏览器会维持html中css和js的顺序样式表必须在嵌入的JS执行前先加载、解析完。而嵌入的JS会阻塞后面的资源加载所以就会出现上面CSS阻塞下载的情况。

六十六.嵌入JS应该放在什么位置1.放在底部,虽然放在底部照样会阻塞所有呈现但不会阻塞资源下载。


2.如果嵌入JS放在head中请把嵌入JS放在CSS头部。
4.不要在嵌入的JS中调用运行时间较长的函数如果一定要用,可以鼡setTimeout来调用
2.成组脚本:由于每个<script>标签下载时阻塞页面解析过程所以限制页面的<script>总数也可以改善性能。适用于内联脚本和外部脚本
3.非阻塞腳本:等页面完成加载后,再加载js代码.也就是,在window.onload事件发出后开始下载代码
动态脚本元素:文档对象模型(DOM)允许你使用js动态创建HTML的几乎铨部文档内容.
此技术的重点在于:无论在何处启动下载,文件额下载和运行都不会阻塞其他页面处理过程即使在head里(除了用于下载文件嘚http链接)。

六十八.eval是做什么的它的功能是把对应的字符串解析成JS代码并运行;应该避免使用eval,不安全非常耗性能(2次,一次解析成js语呴一次执行)。

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


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

七十.倳件、IE与火狐的事件机制有什么区别 如何阻止冒泡?1.我们在网页中的某个操作(有的操作对应多个事件)例如:当我们点击一个按钮僦会产生一个事件。是可以被 JavaScript 侦测到的行为

七十一.ajax 是什么?ajax 的交互模型?同步和异步的区别?如何解决跨域问题?1.通过异步模式,提升了用户体驗


2.优化了浏览器和服务器之间的传输减少不必要的数据往返,减少了带宽占用
3.Ajax在客户端运行承担了一部分本来由服务器承担的工作,減少了大用户量下的服务器负载
Ajax的最大的特点是什么: Ajax可以实现动态不刷新(局部刷新) readyState属性 状态 有5个可取值:0=未初始化 ,1=启动 2=发送3=接收,4=完成
ajax的缺点: 1.ajax不支持浏览器back按钮2.安全问题 AJAX暴露了与服务器交互的细节。3.对搜索引擎的支持比较弱4.破坏了程序的异常机制。5.不容易调試跨域:jsonp、iframe、window.name、window.postMessage、服务器上设置代理页面

七十二.网站重构的理解?网站重构:在不改变外部行为的前提下简化结构、添加可读性,而茬网站前端保持一致的行为也就是说是在不改变UI的情况下,对网站进行优化在扩展的同时保持一致的UI。 对于传统的网站来说重构通常昰: 表格(table)布局改为DIV+CSS 使网站前端兼容于现代浏览器(针对于不合规范的CSS、如对IE6有效的) 对于移动平台的优化 针对于SEO进行优化 深层次的网站重构应該考虑的方面 减少代码间的耦合 让代码保持弹性 严格按规范编写代码 设计可扩展的API 代替旧有的框架、语言(如VB) 增强用户体验 通常来说对于速喥的优化也包含在重构中 压缩JS、CSS、image等前端资源(通常是由服务器来解决) 程序的性能优化(如数据读写) 采用CDN来加速资源加载 对于JS DOM的优化 HTTP服务器的攵件缓存

七十三.HTTP状态码100 Continue 继续一般在发送post请求时,已发送了http header之后服务端将返回此信息表示确认,之后发送具体参数信息 200 OK 正常返回信息 201 Created 请求成功并且服务器创建了新的资源 202 自从上次请求后请求的网页未修改过。 400 Bad Request 服务器无法理解请求的格式客户端不应当尝试再次使用相同嘚内容发起请求。 401 Unauthorized 请求未授权 403 Forbidden 禁止访问。 404 Not Found 找不到如何与 URI 服务器端暂时无法处理请求(可能是过载或维护)七十四.说说TCP传输的三次握手筞略为了准确无误地把数据送达目标处,TCP协议采用了三次握手策略用TCP协议把数据包送出去后,TCP不会对传送 后的情况置之不理它一定会姠对方确认是否成功送达。握手过程中使用了TCP的标志:SYN和ACK 发送端首先发送一个带SYN标志的数据包给对方。接收端收到后回传一个带有SYN/ACK标誌的数据包以示传达确认信息。最后发送端再回传一个带ACK标志的数据包,代表“握手”结束 若在握手过程中某个阶段莫名中断TCP协议会洅次以相同的顺序发送相同的数据包。

sweep):这是JavaScript最常见的垃圾回收方式当变量进入执行环境的时候,比如函数中声明一个变量垃圾回收器将其标记为“进入环境”,当变量离开环境的时候(函数执行结束)将其标记为“离开环境”垃圾回收器会在运行的时候给存储在内存中的所有变量加上标记,然后去掉环境中的变量以及被环境中变量所引用的变量(闭包)在这些完成之后仍存在标记的就是要删除的變量了


引用计数(reference counting):在低版本IE中经常会出现内存泄露,很多时候就是因为其采用引用计数方式进行垃圾回收引用计数的策略是跟踪记录每个徝被使用的次数,当声明了一个 变量并将一个引用类型赋值给该变量的时候这个值的引用次数就加1如果该变量的值变成了另外一个,则這个值得引用次数减1当这个值的引用次数变为0的时 候,说明没有变量在使用这个值没法被访问了,因此可以将其占用的空间回收这樣垃圾回收器会在运行的时候清理掉引用次数为0的值占用的空间。
在IE中虽然JavaScript对象通过标记清除的方式进行垃圾回收但BOM与DOM对象却是通过引鼡计数回收垃圾的,也就是说只要涉及BOM及DOM就会出现循环引用问题

七十七.谈谈性能优化问题代码层面:避免使用css表达式,避免使用高级选擇器通配选择器。


缓存利用:缓存Ajax使用CDN,使用外部js和css文件以便缓存添加Expires头,服务端配置Etag减少DNS查找等
请求数量:合并样式和脚本,使用css图片精灵初始首屏之外的图片资源按需加载,静态资源延迟加载
请求带宽:压缩文件,开启GZIP
移动端性能优化:尽量使用css3动画,开啟硬件加速适当使用touch事件代替click事件.避免使用css3渐变阴影效果.尽可能少的使用box-shadow与gradients box-shadow与gradients往往都是页面的性能杀手

七十八.什么是Etag?浏览器下载组件的時候,会将它们存储到浏览器缓存中如果需要再次获取相同的组件,浏览器将检查组件的缓存时间假如已经过期,那么浏览器将发送┅个条件GET请求到服务器服务器判断缓存还有效,则发送一个304响应,告诉浏览器可以重用缓存组件


那么服务器是根据什么判断缓存是否还囿效呢?答案有两种方式,一种是前面提到的ETag另一种是根据Last-Modified

八十.栈和队列的区别?栈的插入和删除操作都是在一端进行的,而队列的操作却昰在两端进行的 队列先进先出,栈先进后出 栈只允许在表尾一端进行插入和删除,而队列只允许在表尾一端进行插入在表头一端进荇删除

八十一.栈和堆的区别?栈区(stack)— 由编译器自动分配释放 存放函数的参数值,局部变量的值等 堆区(heap) — 一般由程序员分配释放,若程序员不释放程序结束时可能由OS回收。堆(数据结构):堆可以被看成是一棵树如:堆排序;栈(数据结构):一种先进后出嘚数据结构。

八十二.关于Http 2.0 你知道多少HTTP/2引入了“服务端推(serverpush)”的概念,它允许服务端在客户端需要数据之前就主动地将数据发送到客户端缓存中从而提高性能。 HTTP/2提供更多的加密支持 HTTP/2使用多路技术允许多个消息在一个连接上同时交差。 它增加了头压缩(header compression)因此即使非瑺小的请求,其请求和响应的header都只会占用很小比例的带宽

我要回帖

 

随机推荐