阅读量:0
26. 阐述你对语义化的理解?
参考回答:
1,去掉或者丢失样式的时候能够让页面呈现出清晰的结构 2,有利于SEO:和搜索引擎建立良好沟通,有助于爬虫抓取更多的有效信息:爬虫依赖于标签来确定上下文和各个关键字的权重; 3,方便其他设备解析(如屏幕阅读器、盲人阅读器、移动设备)以意义的方式来渲染网页; 4,便于团队开发和维护,语义化更具可读性,是下一步吧网页的重要动向,遵循W3C标准的团队都遵循这个标准,可以减少差异化。
27. 常见前端开发测试兼容性问题?
参考回答:
png24位的图片在iE6浏览器上出现背景,解决方案是做成PNG8.也可以引用一段脚本处理. 浏览器默认的margin和padding不同。解决方案是加一个全局的* { margin:0; padding:0; } 来统一。 IE6双边距bug:块属性标签float后,又有横行的margin情况下,在ie6显示margin比设置的大。 浮动ie产生的双倍距离(IE6双边距问题:在IE6下,如果对元素设置了浮动,同时又设置了margin-left或margin-right,margin值会加倍。) #box { float:left; width:10px; margin:0 0 0 100px; } 这种情况之下IE会产生20px的距离,解决方案是在float的标签样式控制中加入 _display:inline; 将其转化为行内属性。(_这个符号只有ie6会识别) 渐进识别的方式,从总体中逐渐排除局部。 首先,巧妙的使用“9”这一标记,将IE游览器从所有情况中分离出来。 接着,再次使用“+”将IE8和IE7、IE6分离开来,这样IE8已经独立识别。 css .bb { background-color:#f1ee18; /*所有识别*/ .background-color:#00deff9; /*IE6、7、8识别*/ +background-color:#a200ff; /*IE6、7识别*/ _background-color:#1e0bd1; /*IE6识别*/ } 怪异模式问题:漏写DTD声明,Firefox仍然会按照标准模式来解析网页,但在IE中会触发 怪异模式。为避免怪异模式给我们带来不必要的麻烦,最好养成书写DTD声明的好习惯。现在 可以使用[html5](http://www.w3.org/TR/html5/single-page.html)推荐的写法:``
28. 阐述异步加载和延迟加载?
参考回答:
1.异步加载的方案: 动态插入script标签 2.通过ajax去获取js代码,然后通过eval执行 3.script标签上添加defer或者async属性 4.创建并插入iframe,让它异步执行js 5.延迟加载:有些 js 代码并不是页面初始化的时候就立刻需要的,而稍后的某些情况才需要的。
29. 简述Promise 的构造函数?
参考回答:
构造一个 Promise,最基本的用法如下: var promise = new Promise(function(resolve, reject) { if (...) { // succeed resolve(result); } else { // fails reject(Error(errMessage)); } }); Promise 实例拥有 then 方法(具有 then 方法的对象,通常被称为 thenable)。它的使用方法如下: promise.then(onFulfilled, onRejected) 接收两个函数作为参数,一个在 fulfilled 的时候被调用,一个在 rejected 的时候被调用,接收参数就是 future,onFulfilled对应 resolve, onRejected 对应 reject。
30. 简述严格模式的限制?
参考回答:
严格模式主要有以下限制: 变量必须声明后再使用 函数的参数不能有同名属性,否则报错 不能使用with语句 不能对只读属性赋值,否则报错 不能使用前缀0表示八进制数,否则报错 不能删除不可删除的属性,否则报错 不能删除变量delete prop,会报错,只能删除属性delete global[prop] eval不会在它的外层作用域引入变量 eval和arguments不能被重新赋值 arguments不会自动反映函数参数的变化 不能使用arguments.callee 不能使用arguments.caller 禁止this指向全局对象 不能使用fn.caller和fn.arguments获取函数调用的堆栈 增加了保留字(比如protected、static和interface) 设立”严格模式”的目的,主要有以下几个: 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为; 消除代码运行的一些不安全之处,保证代码运行的安全; 提高编译器效率,增加运行速度; 为未来新版本的Javascript做好铺垫。 注:经过测试IE6,7,8,9均不支持严格模式。
31. 阐述网络各种协议?
参考回答:
ICMP协议: 因特网控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。 TFTP协议: 是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。 HTTP协议: 超文本传输协议,是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。 DHCP协议: 动态主机配置协议,是一种让系统得以连接到网络上,并获取所需要的配置参数手段。
32. 关于Web端iframe有那些缺点?
参考回答:
1、缺点: 在网页中使用框架结构最大的弊病是搜索引擎的"蜘蛛"程序无法解读这种页面。当"蜘蛛"程序遇到由数个框架组成的网页时,它们只看到框架而无法找到链 接,因此它们会以为该网站是个死站点,并且很快转身离去。对一个网站来说这无异于一场灾难。如果你想销售产品,你需要客户;如想得到客户,你首先要让人们 访问你的网站,而要做到这一点,你就非求助于搜索引擎不可。你花费了大量的时间、精力和金钱开设了一家网上商店,却又故意不让搜索引擎检索你,这就好象开 家零售商店,却将窗户全部漆成黑色,而且还不挂任何招牌一样。 2、优点: 从上文中我们可以发现,使用ifame框架的弊端是无法被搜索引擎所爬行抓取。但凡事总是具有两面性。它的这个缺点也可能是他的优点。利用这一点那我 们就可以把我们站点上一些需要给我们的用户查看,但是不需要搜索引擎爬行的内容用ifame框架进行显示,这样就可以让ifram发挥真正的效果了,而且 有我们站点中的代码也可以得到很大的精简,举一个例子,就如笔者上文提到的添加微博直播信息,这些微博信息我们并不需要提供给搜索引擎,而我们需要提供的 是与访客的一个互动的体验,如下图所示,而如果我们使用ifame框架嵌入微博的信息,不仅可以简便的添加站点的微博直播平台,同时我们看到代码也十分的 精简。 iframe好在能够把原先的网页全部原封不动显示下来,但是如果用在首页,是搜索引擎最套讨厌的.那么你的网站即使做的在好,也排不到好的名次!如 果是动态网页,用include还好点!但是必须要去除他 的
33. 请描述一下Cookies,SessionStorage和LocalStorage的区别?
参考回答:
共同点:都是保存在浏览器端,且同源的。 区别: 安全性、大小、有效期、作用域 1 cookie数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来回传递。而sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。cookie数据还有路径(path)的概念,可以限制cookie只属于某个路径下。 2存储大小限制也不同,cookie数据不能超过4k,同时因为每次http请求都会携带cookie,所以cookie只适合保存很小的数据,如会话标识。sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。 3 数据有效期不同,sessionStorage:仅在当前浏览器窗口关闭前有效,自然也就不可能持久保持;localStorage:始终有效,窗口或浏览器关闭也一直保存,因此用作持久数据;cookie只在设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭。 4 作用域不同,sessionStorage不在不同的浏览器窗口中共享,即使是同一个页面;localStorage 在所有同源窗口中都是共享的;cookie也是在所有同源窗口中都是共享的。
34. 设计中使用了非标准的字体,该如何处理?
参考回答:
a.用图片代替。 b.使用一些在线字体库,例如Typekit,Google Webfonts等。 c.使用@font-face
35. XHTML的局限性?
参考回答:
a.语法上更严格,放弃了一些语义不好的标签 b.必须要有head,body.标签必须闭合 c.一些老的浏览器并不兼容
36. 为什么利用多个域名来提供网站资源会更有效?
参考回答:
1.CDN缓存更方便 2.突破浏览器并发限制(一般每个域名建立的链接不超过6个) 3.Cookieless,节省带宽,尤其是上行带宽一般比下行要慢 4.对于UGC的内容和主站隔离,防止不必要的安全问题(上传js窃取主站cookie之类的)。正是这个原因要求用户内容的域名必须不是自己主站的子域名,而是一个完全独立的第三方域名。 5.数据做了划分,甚至切到了不同的物理集群,通过子域名来分流比较省事。这个可能被用的不多。 PS:关于Cookie的问题,带宽是次要的,安全隔离才是主要的。关于多域名,也不是越多越好,虽然服务器端可以做泛解释,浏览器做dns解释也是耗时间的,而且太多域名,如果要走https的话,还有要多买证书和部署的问题。
37. 解释什么是FOUC(无样式内容闪烁)?你如何来避免FOUC?
参考回答:
FOUC(Flash Of Unstyled Content)--文档样式闪烁 <br /> <style type="text/css"media="all">@import"../fouc.css";</style>而引用CSS文件的@import就是造成这个问题的罪魁祸首。IE会先加载整个HTML文档的DOM,然后再去导入外部的CSS文件,因此,在页面DOM加载完成到CSS导入完成中间会有一段时间页面上的内容是没有样式的,这段时间的长短跟网速,电脑速度都有关系。解决方法简单的出奇,只要在<head>之间加入一个<link>或者<script>元素就可以了<br />
38. 浏览器标准模式和怪异模式之间的区别是什么?
参考回答:
W3C标准推出以后,浏览器都开始采纳新标准,但存在一个问题就是如何保证旧的网页还能继续浏览,在标准出来以前,很多页面都是根据旧的渲染方法编写的,如果用的标准来渲染,将导致页面显示异常。为保持浏览器渲染的兼容性,使以前的页面能够正常浏览,浏览器都保留了旧的渲染方法(如:微软的IE)。这样浏览器渲染上就产生了Quircks mode和Standars mode,两种渲染方法共存在一个浏览器上。IE盒子模型和标准W3C盒子模型:ie的width包括:paddingorder。标准的width不包括:paddingorder 在js中如何判断当前浏览器正在以何种方式解析? document对象有个属性compatMode,它有两个值:BackCompat对应quirks mode,CSS1Compat对应strict mode。
39. 如果网页内容需要支持多语言,你会怎么做?
参考回答:
下面这些问题需要考虑: 应用字符集的选择,选择UTF-8编码 语言书写习惯&导航结构 数据库驱动型网站
40. 简述SVG样式?
参考回答:
SVG 意为可缩放矢量图形(Scalable Vector Graphics)。 什么是SVG? SVG 指可伸缩矢量图形 (Scalable Vector Graphics) SVG 用来定义用于网络的基于矢量的图形 SVG 使用 XML 格式定义图形 SVG 图像在放大或改变尺寸的情况下其图形质量不会有所损失 SVG 是万维网联盟的标准 SVG 与诸如 DOM 和 XSL 之类的 W3C 标准是一个整体
41. 解释一下你对盒模型的理解,以及如何在CSS中告诉浏览器使用不同的盒模型来渲染你的布局?
参考回答:
关于盒模型请看文章CSS之布局与定位。 请解释一下*{box-sizing:border-box;}的作用,并且说明使用它有什么好处? 说到IE的bug,在IE6以前的版本中,IE对盒模型的解析出现一些问题,跟其它浏览器不同,将border与padding都包含在width之内。而另外一些浏览器则与它相反,是不包括border和padding的。 在我们开发的过程中会发现,有时候,如果对页面中的大区域进行设置时,将border、padding计算到width和height之内,反而更灵活。但W3C的CSS2.1规范却规定了他们并不能被包含其中。考虑到这个问题,css3中引入了一个新的属性:box-sizing,它具有“content-box”和”border-box“两个值。 1 box-sizing:content-box 当我们设置box-sizing:content-box;时,浏览器对盒模型的解释遵从我们之前认识到的W3C标准,当它定义width和height时,它的宽度不包括border和padding。 1 box-sizing:border-box 当我们设置box-sizing:border-box;时,浏览器对盒模型的解释与IE6之前的版本相同,当它定义width和height时,border和padding则是被包含在宽高之内的。内容的宽和高可以通过定义的“width”和“height”减去相应方向的“padding”和“border”的宽度得到。内容的宽和高必须保证不能为负,必要时将自动增大该元素border box的尺寸以使其内容的宽或高最小为0。
42. 阐述一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么过程?
参考回答:
查找浏览器缓存 DNS解析、查找该域名对应的IP地址、重定向(301)、发出第二个GET请求 进行HTTP协议会话 客户端发送报头(请求报头) 文档开始下载 文档树建立,根据标记请求所需指定MIME类型的文件 文件显示 浏览器这边做的工作大致分为以下几步: 加载:根据请求的URL进行域名解析,向服务器发起请求,接收文件(HTML、JS、CSS、图象等)。 解析:对加载到的资源(HTML、JS、CSS等)进行语法解析,建议相应的内部数据结构(比如HTML的DOM树,JS的(对象)属性表,CSS的样式规则等等)
43. 简述同步和异步的区别 ?
参考回答:
同步是阻塞模式,异步是非阻塞模式。 同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去; 异步是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率
44. 简述完整的HTTP事务是怎样的一个过程?
参考回答:
基本流程: a. 域名解析 b. 发起TCP的3次握手 c. 建立TCP连接后发起http请求 d. 服务器端响应http请求,浏览器得到html代码 e. 浏览器解析html代码,并请求html代码中的资源 f. 浏览器对页面进行渲染呈现给用户
45. 阐述对AMD和Commonjs的理解 ?
参考回答:
CommonJS是服务器端模块的规范,Node.js采用了这个规范。CommonJS规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作。AMD规范则是非同步加载模块,允许指定回调函数。 AMD推荐的风格通过返回一个对象做为模块对象,CommonJS的风格通过对module.exports或exports的属性赋值来达到暴露模块对象的目的。 共同点:两者都是为了实现模块化编程而出现的,对于大型项目,参与人数多,代码逻辑复杂,是最适合使用模块化的思想来完成整个项目的。同时采用这种思想也很便于对整个项目进行管控。 区别:CommonJS是适用于服务器端的,著名的Node执行环境就是采用的CommonJS模式。它是同步加载不同模块文件。之所以采用同步,是因为模块文件都存放在服务器的各个硬盘上,实际的加载时间就是硬盘的文件读取时间。 AMD,Asynchronous Module Definition,即异步模块定义。它是适用于浏览器端的一种模块加载方式。从名字可知,AMD采用的是异步加载方式(js中最典型的异步例子就是ajax)。浏览器需要使用的js文件(第一次加载,忽略缓存)都存放在服务器端,从服务器端加载文件到浏览器是受网速等各种环境因素的影响的,如果采用同步加载方式,一旦js文件加载受阻,后续在排队等待执行的js语句将执行出错,会导致页面的‘假死’,用户无法使用一些交互。所以在浏览器端是无法使用CommonJS的模式的。目前,主要有两个Javascript库实现了AMD规范:require.js和curl.js
46. WEB应用从服务器主动推送Data到客户端有那些方式?
参考回答:
Javascript数据推送 Commet:基于HTTP长连接的服务器推送技术 基于WebSocket的推送方案 SSE(Server-Send Event):服务器推送数据新方式
47. 阐述Cookie的弊端 ?
参考回答:
cookie虽然在持久保存客户端数据提供了方便,分担了服务器存储的负担,但还是有很多局限性的。 第一:每个特定的域名下最多生成20个cookie 1.IE6或更低版本最多20个cookie 2.IE7和之后的版本最后可以有50个cookie。 3.Firefox最多50个cookie 4.chrome和Safari没有做硬性限制 IE和Opera 会清理近期最少使用的cookie,Firefox会随机清理cookie。 cookie的最大大约为4096字节,为了兼容性,一般不能超过4095字节。 IE 提供了一种存储可以持久化用户数据,叫做userdata,从IE5.0就开始支持。每个数据最多128K,每个域名下最多1M。这个持久化数据放在缓存中,如果缓存没有清理,那么会一直存在。 优点:极高的扩展性和可用性 1.通过良好的编程,控制保存在cookie中的session对象的大小。 2.通过加密和安全传输技术(SSL),减少cookie被破解的可能性。 3.只在cookie中存放不敏感数据,即使被盗也不会有重大损失。 4.控制cookie的生命期,使之不会永远有效。偷盗者很可能拿到一个过期的cookie。 缺点: 1.`Cookie`数量和长度的限制。每个domain最多只能有20条cookie,每个cookie长度不能超过4KB,否则会被截掉. 2.安全性问题。如果cookie被人拦截了,那人就可以取得所有的session信息。即使加密也与事无补,因为拦截者并不需要知道cookie的意义,他只要原样转发cookie就可以达到目的了。 3.有些状态不可能保存在客户端。例如,为了防止重复提交表单,我们需要在服务器端保存一个计数器。如果我们把这个计数器保存在客户端,那么它起不到任何作用。
48. 简述Etag概念和应用 ?
参考回答:
ETag是URL的TAG,主要是标志URL对象有没发生改变,用于客户端的缓存。服务器产生ETag,并在HTTP响应头中将其传送到客户端,服务器用它来判断页面是否被修改过,如果未修改返回304,无需传输整个对象。 HTTP协议里ETag是“被请求变量的实体值”。 站点启用ETag的好处有哪些? 1、Sitemap启用ETag后,百度就可以快速的知道Sitemap的更新,在内容没有做更改的情况下,服务器只发回304应答头,对流量的消耗极小,平均每个head在227B大小的通常下,如果24个小时每秒回应的流量消耗仅为18.7M。 2、站长平台对每个站点的Sitemap主动抓取次数是有上限的,目前并没有对所有站点开放,如果你的站点Sitemap开启了ETag,并通过了测试,就可以用较小的流量享受百度及时更新网站的Sitemap的功能,加速了百度收录网站的内容。 3、网站上的文件会出现周期性的更改,但主体的内容并没有改变,仅改变了修改的时间,站长不需要客户端认为这个文件被修改了,而重新GET。 4、网站上的某些文件修改起来会比较麻烦,比如在1秒的期间内,修改了N次,If-Modified-Since能检查到的粒度是秒级,但是这种修改是无法判断的。 正常情况下ETag会与Last-Modified一起使用,这样可利用客户端的缓存。
49. 网站伪静态和静态的区别,网站为什么要做静态URL?
参考回答:
静态URL 1、加载的时候不需要调用数据库,响应速度快。 2、纯静态网页是纯HTML格式的文件,因此不容易遭受黑客攻击,网站的安全性比较高。 3、网站的简洁化提高用户体验度。 伪静态URL 1、后台发布文章的时候,可以实时更新内容。 2、方便的实现对化化引擎的优化,并且比生成静态更加方便。 3、缩短了URL的长度,隐藏文件实际路径提高了安全性,易于用户记忆和输入。 4、占空间比较小。 5、URL地址以HTML为结尾的形式,具有隐藏或加密,跟纯静态的页面一样有防止黑客攻击。 网站为什么要做静态URL? 1、静态URL相对于另外两种HTML页面收录效果比较快、优化程度也比较容易。 2、静态URL比较清晰和更容易读懂,分享的时候有一条链接,动态页面显示是一串链接,并不美观。 3、国内大部分都使用百度搜索引擎,而百度搜索引擎暂时不支持js调用。
50. 列举IE与 Firefox的不同之处?
参考回答:
不同之处如下 (1)IE支持 currentStyle;Firefox使用 get ComputStyle。 (2)IE使用 inner Text;Firefox使用 textContent。 (3)在透明度滤镜方面,正使用 filter:alpha( opacity=num);Firefox使用-moz- opacity :num (4)在事件方面,IE使用 attachEvent:Firefox使用 add Event Listener (5)对于鼠标位置:IE使用 event. clientX;Firefox使用 event. pageX。 (6)IE使用 event. srcElement;Firefox使用 event. target (7)要消除list的原点,IE中仅须使 margin:0即可达到最终效果;Firefox中需要设置margin:0、 padding:0和 list-style:none (8)CSS圆角:IE7以下不支持圆角。