资源描述
JavaScript类库:jQuery、PrototypeJavaScript框架:BackBone、Vuejs、Angular.js、React.jsCSS预编译器:LessCss、SassJavaScript模块加载器:RequireJS、Browserify项目构建工具:Grunt、Gulp项目管理和协同工具的使用:SVN、Git前端测试框架以及工具:Jasmine、Mocha基本后端开发:NodeJS、Pythonweb相关技术:MongoDB、CoffeeScript、SEO、Socket.io、Express、Tornado等1、 谈谈cookie的弊端:cookie虽然在持久保存客户端数据提供了方便,分担了服务器存储的负担,但还是有很多局限性的。第一:每个特定的域名下最多生成20个cookie1.IE6或更低版本最多20个cookie2.IE7和之后的版本最后可以有50个cookie。3.Firefox最多50个cookie4.chrome和Safari没有做硬性限制IE和Opera 会清理近期最少使用的cookie,Firefox会随机清理cookie。cookie的最大大约为4096字节,为了兼容性,一般不能超过4095字节。IE 提供了一种存储可以持久化用户数据,叫做uerData,从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.有些状态不可能保存在客户端。例如,为了防止重复提交表单,我们需要在服务器端保存一个计数器。如果我们把这个计数器保存在客户端,那么它起不到任何作用。二、浏览器本地存储:在较高版本的浏览器中,js提供了sessionStorage和globalStorage。在HTML5中提供了localStorage来取代globalStorage。html5中的Web Storage包括了两种存储方式: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仅仅是为了在本地“存储”数据而生浏览器的支持除了IE及以下不支持外,其他标准浏览器都完全支持(ie及FF需在web服务器里运行),值得一提的是IE总是办好事,例如IE7、IE6中的UserData其实就是javascript本地存储的解决方案。通过简单的代码封装可以统一到所有的浏览器都支持web storage。localStorage和sessionStorage都具有相同的操作方法,例如setItem、getItem和removeItem等四、display:none和visibility:hidden的区别?display:none 隐藏对应的元素,在文档布局中不再给它分配空间,它各边的元素会合拢,就当他从来不存在。visibility:hidden 隐藏对应的元素,但是在文档布局中仍保留原来的空间。五、CSS中 link 和import 的区别是?(1) link属于HTML标签,而import是CSS提供的;(2) 页面被加载的时,link会同时被加载,而import引用的CSS会等到页面被加载完再加载;(3) import只在IE5以上才能识别,而link是HTML标签,无兼容问题;(4) link方式的样式的权重 高于import的权重.六、position的absolute与fixed共同点与不同点A:共同点:1.改变行内元素的呈现方式,display被置为block;2.让元素脱离普通流,不占据空间;3.默认会覆盖到非定位元素上B不同点:absolute的”根元素“是可以设置的,而fixed的”根元素“固定为浏览器窗口。当你滚动网页,fixed元素与浏览器窗口之间的距离是不变的。 七、介绍一下CSS的盒子模型?参考答案1)盒模型: 内容(content)、填充(padding)、边界(margin)、 边框(border)2) 有两种, IE 盒子模型、标准 W3C 盒子模型;IE的content部分包含了 border 和 pading;3)八、CSS 选择符有哪些?哪些属性可以继承?优先级算法如何计算? CSS3新增伪类有那些?参考答案CSS 选择符:1.id选择器(# myid)2.类选择器(.myclassname)3.标签选择器(div, h1, p)4.相邻选择器(h1 + p)5.子选择器(ul li)6.后代选择器(li a)7.通配符选择器( * )8.属性选择器(arel = external)9.伪类选择器(a: hover, li:nth-child)可继承的样式:1.font-size2.font-family3.color4.text-indent不可继承的样式:1.border2.padding3.margin4.width5.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 单选框或复选框被选中。九、列出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 属性的值。十、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选择器 多背景 rgba5. 在CSS3中唯一引入的伪元素是 :selection.6. 媒体查询,多栏布局7. border-image十一、为什么要初始化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, 5b8b4f53; 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; 十二、对BFC规范的理解?参考答案BFC,块级格式化上下文,一个创建了新的BFC的盒子是独立布局的,盒子里面的子元素的样式不会影响到外面的元素。在同一个 BFC 中的两个毗邻的块级盒在垂直方向(和布局方向有关系)的 margin 会发生折叠。W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行布局,以及与其他元素的关系和相互作用。十三、解释下 CSS sprites,以及你要如何在页面或网站中使用它。参考答案CSS Sprites 其实就是把网页中一些背景图片整合到一张图片文件中,再利用 CSS 的background-image,background-repeat,background-position 的组合进行背景定位,background-position 可以用数字能精确的定位出背景图片的位置。这样可以减少很多图片请求的开销,因为请求耗时比较长;请求虽然可以并发,但是也有限制,一般浏览器都是6个。对于未来而言,就不需要这样做了,因为有了 http2。十四、说说你对语义化的理解?参考答案1. 去掉或者丢失样式的时候能够让页面呈现出清晰的结构2. 有利于SEO:和搜索引擎建立良好沟通,有助于爬虫抓取更多的有效信息:爬虫于标签来确定上下文和各个关键字的依赖权重;3. 方便其他设备解析(如屏幕阅读器、盲人阅读器、移动设备)以意义的方式来渲染网页;4. 便于团队开发和维护,语义化更具可读性,是下一步吧网页的重要动向,遵循W3C标准的团队都遵循这个标准,可以减少差异化。十五、Doctype作用? 严格模式与混杂模式如何区分?它们有何意义?参考答案1. 声明位于文档中的最前面,处于 标签之前。告知浏览器以何种模式来渲染文档。2. 严格模式的排版和 JS 运作模式是以该浏览器支持的最高标准运行。3. 在混杂模式中,页面以宽松的向后兼容的方式显示。模拟老式浏览器的行为以防止站点无法工作。4. DOCTYPE不存在或格式不正确会导致文档以混杂模式呈现。十六、你知道多少种Doctype文档类型?参考答案1. 该标签可声明三种 DTD 类型,分别表示严格版本、过渡版本以及基于框架的 HTML 文档。2. HTML 4.01 规定了三种文档类型:Strict、Transitional 以及 Frameset。3. XHTML 1.0 规定了三种 XML 文档类型:Strict、Transitional 以及 Frameset。4. Standards (标准)模式(也就是严格呈现模式)用于呈现遵循最新标准的网页,而 Quirks(包容)模式(也就是松散呈现模式或者兼容模式)用于呈现为传统浏览器而设计的网页。十七、HTML与XHTML二者有什么区别参考答案1. 所有的标记都必须要有一个相应的结束标记2. 所有标签的元素和属性的名字都必须使用小写3. 所有的 XML 标记都必须合理嵌套4. 所有的属性必须用引号 括起来5. 把所有 和 & 特殊符号用编码表示6. 给所有属性赋一个值7. 不要在注释内容中使用 -8. 图片必须有说明文字十八、html常见兼容性问题?参考答案1. png24位的图片在iE6浏览器上出现背景解决方案:做成PNG8,也可以引用一段脚本处理.2. 浏览器默认的margin和padding不同解决方案:加一个全局的 *margin:0;padding:0; 来统一。3. IE6双边距bug:在IE6下,如果对元素设置了浮动,同时又设置了margin-left或margin-right,margin值会加倍。#box float:left; width:10px; margin:0 0 0 10px;这种情况之下IE会产生20px的距离解决方案:在float的标签样式控制中加入 _display:inline; 将其转化为行内属性。( _ 这个符号只有ie6会识别)4. 渐进识别的方式,从总体中逐渐排除局部。首先,巧妙的使用“9”这一标记,将IE游览器从所有情况中分离出来。接着,再次使用 + 将IE8和IE7、IE6分离开来,这样IE8已经独立识别。.bb background-color:#f1ee18; /*所有识别*/ .background-color:#00deff9; /*IE6、7、8识别*/ +background-color:#a200ff; /*IE6、7识别*/ _background-color:#1e0bd1; /*IE6识别*/5.IE下,可以使用获取常规属性的方法来获取自定义属性,也可以使用 getAttribute() 获取自定义属性;Firefox下,只能使用getAttribute()获取自定义属性解决方法:统一通过getAttribute()获取自定义属性十九、解释下浮动和它的工作原理?清除浮动的技巧参考答案浮动元素脱离文档流,不占据空间。浮动元素碰到包含它的边框或者浮动元素的边框停留。1. 使用空标签清除浮动。这种方法是在所有浮动标签后面添加一个空标签 定义css clear:both. 弊端就是增加了无意义标签。2. 使用overflow。给包含浮动元素的父标签添加css属性 overflow:auto; zoom:1; zoom:1用于兼容IE6。3. 使用after伪对象清除浮动。该方法只适用于非IE浏览器。具体写法可参照以下示例。使用中需注意以下几点。一、该方法中必须为需要清除浮动元素的伪对象中设置 height:0,否则该元素会比实际高出若干像素;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-Aa: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图片格式支持不好解决方案:引用一段脚本处理二十、浮动元素引起的问题和解决办法?参考答案浮动元素引起的问题:1. 父元素的高度无法被撑开,影响与父元素同级的元素2. 与浮动元素同级的非浮动元素会跟随其后3. 若非第一个元素浮动,则该元素之前的元素也需要浮动,否则会影响页面显示的结构解决方法:使用 CSS 中的 clear:both; 属性来清除元素的浮动可解决2、3问题,对于问题1,添加如下样式,给父元素添加clearfix样式:.clearfix:aftercontent: .;display: block;height: 0;clear: both;visibility: hidden;.clearfixdisplay: inline-block; /* for IE/Mac */清除浮动的几种方法:1. 额外标签法,(缺点:不过这个办法会增加额外的标签使HTML结构看起来不够简洁。)2. 使用after伪类#parent:after content:.; height:0; visibility:hidden; display:block; clear:both;3. 浮动外部元素4. 设置 overflow 为 hidden 或者 auto二十一、IE 8以下版本的浏览器中的盒模型有什么不同参考答案IE8以下浏览器的盒模型中定义的元素的宽高不包括内边距和边框二十二、DOM操作怎样添加、移除、移动、复制、创建和查找节点。参考答案1. 创建新节点createDocumentFragment() / 创建一个DOM片段createElement() / 创建一个具体的元素createTextNode() / 创建一个文本节点2. 添加、移除、替换、插入appendChild()removeChild()replaceChild()insertBefore() / 在已有的子节点前插入一个新的子节点3. 查找getElementsByTagName() / 通过标签名称getElementsByName() / 通过元素的Name属性的值(IE容错能力较强,会得到一个数组,其中包括id等于name值的)getElementById() / 通过元素Id,唯一性二十三、html5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分 HTML 和 HTML5?参考答案新特性:HTML5 现在已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增加。1. 拖拽释放(Drag and drop) API2. 语义化更好的内容标签(header,nav,footer,aside,article,section)3. 音频、视频API(audio,video)4. 画布(Canvas) API5. 地理(Geolocation) API6. 本地离线存储 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 新标签,浏览器支持新标签后,还需要添加标签默认的样式(当然最好的方式是直接使用成熟的框架、使用最多的是html5shim框架): src=http:/html5shim.googlecode.com/svn/trunk/html5.js如何区分:DOCTYPE声明新增的结构元素、功能元素二十四、iframe的优缺点?参考答案优点:1. 解决加载缓慢的第三方内容如图标和广告等的加载问题2. Security sandbox3. 并行加载脚本缺点:1. iframe会阻塞主页面的Onload事件2. 即时内容为空,加载也需要时间3. 没有语意二十五、如何实现浏览器内多个标签页之间的通信?调用 localstorge、cookies 等本地存储方式二十六、webSocket 如何兼容低浏览器?Adobe Flash Socket 、 ActiveX HTMLFile (IE) 、 基于 multipart 编码发送 XHR 、 基于长轮询的 XHR二十七、线程与进程的区别参考答案1. 一个程序至少有一个进程,一个进程至少有一个线程2. 线程的划分尺度小于进程,使得多线程程序的并发性高3. 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率4. 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制5. 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别二十八、你如何对网站的文件和资源进行优化?期待的解决方案包括:1. 文件合并2. 文件最小化/文件压缩3. 使用 CDN 托管 4. 缓存的使用(多个域名来提供缓存)二十九、请说出三种减少页面加载时间的方法 参考答案1. 优化图片2. 图像格式的选择(GIF:提供的颜色较少,可用在一些对颜色要求不高的地方)3. 优化CSS(压缩合并css,如 margin-top, margin-left.)4. 网址后加斜杠(如www.campr.com/目录,会判断这个目录是什么文件类型,或者是目录。)5. 标明高度和宽度(如果浏览器没有找到这两个参数,它需要一边下载图片一边计算大小,如果图片很多,浏览器需要不断地调整页面。这不但影响速度,也影响浏览体验。当浏览器知道了高度和宽度参数后,即使图片暂时无法显示,页面上也会腾出图片的空位,然后继续加载后面的内容。从而加载时间快了,浏览体验也更好了)6. 减少http请求(合并文件,合并图片)三十、你都使用哪些工具来测试代码的性能?1. Profiler2. JSPerf(http:/jsperf.com/nexttick-vs-setzerotimeout-vs-settimeout)3. Dromaeo三十一、什么是 FOUC(无样式内容闪烁)?你如何来避免 FOUC?参考答案FOUC - Flash Of Unstyled Content 文档样式闪烁import ./fouc.css;而引用CSS文件的import就是造成这个问题的罪魁祸首。IE会先加载整个HTML文档的DOM,然后再去导入外部的CSS文件,因此,在页面DOM加载完成到CSS导入完成中间会有一段时间页面上的内容是没有样式的,这段时间的长短跟网速,电脑速度都有关系。解决方法简单的出奇,只要在之间加入一个或者元素就可以了。三十二、null和undefined的区别?null是一个表示无的对象,转为数值时为0undefined是一个表示无的原始值,转为数值时为NaN当声明的变量还未被初始化时,变量的默认值为undefinednull用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象undefined表示 “缺少值”,就是此处应该有一个值,但是还没有定义。典型用法是:1. 变量被声明了,但没有赋值时,就等于 undefined2. 调用函数时,应该提供的参数没有提供,该参数等于 undefined3. 对象没有赋值的属性,该属性的值为 undefined4. 函数没有返回值时,默认返回 undefinednull表示“没有对象”,即该处不应该有值。典型用法是:1. 作为函数的参数,表示该函数的参数不是对象2. 作为对象原型链的终点三十三、new操作符具体干了什么呢?参考答案1. 创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型2. 属性和方法被加入到 this 引用的对象中3. 新创建的对象由 this 所引用,并且最后隐式的返回 thisvar obj = ;obj._proto_ = Base.prototype;Base.call(obj);三十四、对JSON 的了解?参考答案JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它是基于JavaScript的一个子集。数据格式简单, 易于读写, 占用带宽小。age:12, name:back三十五、js延迟加载的方式有哪些?1. defer和async2. 动态创建DOM方式(创建script,插入到DOM中,加载完毕后callBack)3. 按需异步载入js三十六、如何解决跨域问题?1. jsonp(jsonp 的原理是动态插入 script 标签)2. document.domain + iframe3. window.name、window.postMessage4. 服务器上设置代理页面三十七、documen.write和 innerHTML 的区别document.write 只能重绘整个页面innerHTML 可以重绘页面的一部分三十八、.call() 和 .apply() 的作用?动态改变某个类的某个方法的运行环境三十九、哪些操作会造成内存泄漏?内存泄漏指任何对象在您不再拥有或需要它之后仍然存在。垃圾回收器定期扫描对象,并计算引用了每个对象的其他对象的数量。如果一个对象的引用数量为 0(没有其他对象引用过该对象),或对该对象的惟一引用是循环的,那么该对象的内存即可回收。1. setTimeout 的第一个参数使用字符串而非函数的话,会引发内存泄漏。2. 闭包3. 控制台日志4. 循环(在两个对象彼此引用且彼此保留时,就会产生一个循环)四十、如何判断当前脚本运行在浏览器还是node环境中?通过判断 Global 对象是否为window,如果不为window,当前脚本没有运行在浏览器中41、什么叫优雅降级和渐进增强?1. 优雅降级:Web站点在所有新式浏览器中都能正常工作,如果用户使用的是老式浏览器,则代码会检查以确认它们是否能正常工作。由于IE独特的盒模型布局问题,针对不同版本的IE的hack实践过优雅降级了,为那些无法支持功能的浏览器增加候选方案,使之在旧式浏览器上以某种形式降级体验却不至于完全失效。2. 渐进增强:从被所有浏览器支持的基本功能开始,逐步地添加那些只有新式浏览器才支持的功能,向页面增加无害于基础浏览器的额外样式和功能的。当浏览器支持时,它们会自动地呈现出来并发挥作用。42、对Node的优点和缺点提出了自己的看法?优点:1. 因为Node是基于事件驱动和无阻塞的,所以非常适合处理并发请求,因此构建在Node上的代理服务器相比其他技术实现(如Ruby)的服务器表现要好得多。2. 与Node代理服务器交互的客户端代码是由javascript语言编写的,因此客户端和服务器端都用同一种语言编写,这是非常美妙的事情。缺点:1. Node是一个相对新的开源项目,所以不太稳定,它总是一直在变。2. 缺少足够多的第三方库支持。看起来,就像是Ruby/Rails当年的样子(第三方库现在已经很丰富了,所以这个缺点可以说不存在了)。43、对前端界面工程师这个职位是怎么样理解的?它的前景会怎么样?参考答案前端是最贴近用户的程序员,比后端、数据库、产品经理、运营、安全都近。1. 实现界面交互2. 提升用户体验3. 有了Node.js,前端可以实现服务端的一些事情前景:1. 前端是最贴近用户的程序员,前端的能力就是能让产品从 90分进化到 100 分,甚至更好2. 参与项目,快速高质量完成实现效果图,精确到1px;3. 与团队成员,UI设计,产品经理的沟通;4. 做好的页面结构,页面重构和用户体验;5. 处理hack,兼容、写出优美的代码格式;6. 针对服务器的优化、拥抱最新前端技术。44、你有哪些性能优化的方法?1. 减少http请求次数:CSS Sprites, JS、CSS 源码压缩、图片大小控制合适;网页 Gzip,CDN 托管,data 缓存 ,图片服务器2. 前端模板 JS + 数据,减少由于HTML标签导致的带宽浪费,前端用变量保存 AJAX 请求结果,每次操作本地变量,不用请求,减少请求次数3. 用 innerHTML 代替 DOM 操作,减少 DOM 操作次数,优化 javascript 性能4. 当需要设置的样式很多时设置 className 而不是直接操作 style5. 少用全局变量、缓存DOM节点查找的结果。减少 IO 读取操作6. 避免使用 CSS Expression(css表达式)又称 Dynamic properties(动态属性)7. 图片预加载,将样式表放在顶部,将脚本放在底部,加上时间戳45、http状态码有那些?分别代表是什么意思?1. 100-199 用于指定客户端应相应的某些动作2. 200-299 用于表示请求成功3. 300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息4. 400-499 用于指出客户端的错误 400:语义有误,当前请求无法被服务器理解 401:当前请求需要用户验证 403:服务器已经理解请求,但是拒绝执行它 404:表示请求失败,请求所希望得到的资源未被在服务器上发现5. 500-599 用于支持服务器错误 503:服务不可用46、一个页面从输入 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 操作 DOM47、平时如何管理你的项目?参考答案1. 先期团队必须确定好全局样式(globe.css),编码模式(utf-8) 等2. 编写习惯必须一致(例如都是采用继承式的写法,单样式都写成一行)3. 标注样式编写人,各模块都及时标注(标注关键样式调用的地方)4. 页面进行标注(例如 页面 模块 开始和结束)5. CSS 跟 HTML 分文件夹并行存放,命名都得统一(例如 style.css)6. JS 分文件夹存放 命名以该 JS 功能为准的英文翻译7. 图片采用整合的 images.png png8 格式文件使用 尽量整合在一起使用方便将来的管理48、说说最近最流行的一些东西吧?常去的哪些网站?最流行的一些东西:1. Node.js2. Mongodb3. npm4. MVVM5. MEAN6. three.js7. React常去的网站:1. 牛客网2. Github3. CSDN49、javascript对象的几种创建方式1. 工厂模式2. 构造函数模式3. 原型模式4. 混合构造函数和原型模式5. 动态原型模式6. 寄生构造函数模式7. 稳妥构造函数模式50、javascript继承的 6 种方法1. 原型链继承2. 借用构造函数继承3. 组合继承(原型+借用构造)4. 原型式继承5. 寄生式继承6. 寄生组合式继承51、ajax 的过程是怎样的1. 创建XMLHttpRequest对象,也就是创建一个异步调用对象2. 创建一个新的HTTP请求,并指定该HTTP请求的方法、URL及验证信息3. 设置响应HTTP请求状态变化的函数4. 发送HTTP请求5. 获取异步调用返回的数据6. 使用JavaScript和DOM实现局部刷新52、异步加载和延迟加载1. 异步加载的方案: 动态插入 script 标签2. 通过 ajax 去获取 js 代码,然后通过 eval 执行3. script 标签上添加 defer 或者 async 属性4. 创建并插入 iframe,让它异步执行 js5. 延迟加载:有些 js 代码并不是页面初始化的时候就立刻需要的,而稍后的某些情况才需要的53、前端的安全问题?1. XSS2. sql注入3. CSRF:是跨站请求伪造,很明显根据刚刚的解释,他的核心也就是请求伪造,通过伪造身份提交POST和GET请求来进行跨域的攻击完成CSRF需要两个步骤:1. 登陆受信任的网站A,在本地生成 COOKIE2. 在不登出A的情况下,或者本地 COOKIE 没有过期的情况下,访问危险网站B。54、ie 各版本和 chrome 可以并行下载多少个资源1. IE6 2 个并发2. iE7 升级之后的 6 个并发,之后版本也是 6 个3. Firefox,chrome 也是6个55、javascript里面的继承怎么实现,如何避免原型链上面的对象共享用构造函数和原型链的混合模式去实现继承,避免对象共享可以参考经典的extend()函数,很多前端框架都有封装的,就是用一个空函数当做中间变量56、grunt, YUI compressor 和 google clojure用来进行代码压缩的用法。grunt:UglifyJS 是基于 NodeJS 的 Javascript 语法解析/压缩/格式化工具官网:http:/lisperator.net/uglifyjs/ 或者 https:/github.com/mishoo/UglifyJS2安装:$ npm install uglify-js -g使用方法见官网 demoYUI compressor:YUI Compressor 是一个用来压缩 JS 和 CSS 文件的工具,采用Java开发。使用方法:/ 压缩JSjava -jar yuicompressor-2.4.2.jar -type js -charset utf-8 -v src.js packed.js/ 压缩CSSjava -jar yuicompressor-2.4.2.jar -type css -charset utf-8 -v src.css packed.cssGoogle Closure Compiler:官网:https:/developers.google.com/closure/compiler/使用方法:1. 在命令行下使用一个google编译好的java程序2. 使用google提供的在线服务3. 使用google提供的RESTful API57、Flash、Ajax各自的优缺点,在使用中如何取舍?Flash:1. Flash适合处理多媒体、矢量图形、访问机器2. 对CSS、处理文本上不足,不容易被搜索Ajax:1. Ajax对CSS、文本支持很好,支持搜索2. 多媒体、矢量图形、机器访问不足共同点:1. 与服务器的无刷新传递消息2. 可以检测用户离线和在线状态2. 操作DOM58、请解释一下 JavaScript 的同源策略。概念:同源策略是客户端脚本(尤其是Javascript)的重要的安全度量标准。它最早出自Netscape Navigator2.0,其目的是防止某个文档或脚本从多个不同源装载。这里的同源策略指的是:协议,域名,端口相同,同源策略是一种安全协议,指一段脚本只能读取来自同一来源的窗口和文档的属性。59、为什么要有同源限制:我们举例说明:比如一个黑客程序,他利用Iframe把真正的银行登录页面嵌到他的页面上,当你使用真实的用户名,密码登录时,他的页面就可以通过Javascript读取到你的表单中input中的内容,这样用户名,密码就轻松到手了60、什么是 use strict; ? 使用它的好处和坏处分别是什么?ECMAscript 5添加了第二种运行模式:严格模式(strict mode)。顾名思义,这种模式使得Javascript在更严格的条件下运行。设立严格模式的目的,主要有以下几个:1. 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;2. 消除代码运行的一些不安全之处,保证代码运行的安全;3. 提高编译器效率,增加运行速度;4. 为未来新版本的Javascript做好铺垫。注:经过测试 IE6,7,8,9 均不支持严格模式。缺点:现在网站的 JS 都会进行压缩,一些文件用了严格模式,而另一些没有。这时这些本来是严格模式的文件,被 merge 后,这个串就到了文件的中间,不仅没有指示严格模式,反而在压缩后浪费了字节。61、GET和POST的区别,何时使用POST?GET:一般用于信息获取,使用URL传递参数,对所发送信息的数量也有限制,一般在2000个字符(参数在url中,不安全,数据量小,ASCII码)POST:一般用于修改服务器上的资源,对所发送的信息没有限制(参数在数据体中,安全,数据量大即上传只能用POST,支持整个字符集)GET方式需要使用 Request.QueryString 来取得变量的值POST方式通过 Request.Form 来获取变量的值也就是说 Get 是通过地址栏来传值,而 Post 是通过提交表单来传值。在以下情况中,请使用 POST 请求:1. 无法使用缓存文件(更新服务器上的文件或数据库)2. 向服务器发送大量数据(POST 没有数据量限制)3. 发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠62、哪些地方会出现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头部。3. 使用 defer(只支持IE)4. 不要在嵌入的JS中调用运行时间较长的函数,如果一定要用,可以用 setTimeout 来调用Javascript无阻塞加载具体方式:1. 将脚本放在底部。还是放在head中,用以保证在js加载前,能加载出正常显示的页面。标签放在前。2. 阻塞脚本:由于每个标签下载时阻塞页面解析过程,所以限制页面的总数也可以改善性能。适用于内联脚本和外部脚本。3. 非阻塞脚本:等页面完成加载后,再加载js代码。也就是,在 window.onload 事件发出后开始下载代码。4. defer属性:支持IE4和fierfox3.5更高版本浏览器5. 动态脚本元素:文档对象模型(DOM)允许你使用js动态创建HTML的几乎全部文档内容。代码如下: var script=document.createElement(script); script.type=text/javascript; script.src=file.js; document.getElementsByTagName(head)0.appendChild(script);此技术的重点在于:无论在何处启动下载,文件额下载和运行都不会阻塞其他页面处理过程,即使在head里(除了用于下载文件的 http 链接)。
展开阅读全文