最全最详细前端面试题及答案

本文汇总了前端开发领域的核心知识点,涵盖HTML、CSS、JavaScript、DOM操作、事件处理、网络通信、性能优化、安全问题等多个方面,旨在帮助开发者全面掌握前端技术栈。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

面试题 :

  1. cooke特点:(游览器对它有大小限制,安全性问题,自动设置过期时间)

2. 游览器本地存储:web storage分为localstorage(长期存储数据,浏览器关闭后数据不丢失)和sessionstorage(浏览器关闭后 自动删除).

3. Display:none,元素隐藏后不占用空间,visibility:hidden,元素隐藏空间仍然占用(透明)。

4. link与@import的区别:link是html标签,页面加载时一起加载,不存在兼容性问题。             @import是css里的样式,所引用的css等页面加载完才加载,IE5以上的版本才能识别,link的权重比@import的权重高。

5. Position:reletive相对定位,   absolute绝对定位,相对于父元素,父元素变化跟着变化。      fixed相对于游览器,与游览器距离始终保持不变。共同:改变行内元素呈现方式,元素脱离普通流不占用空间,覆盖非定位元素。

6. IE 盒子模型、标准 W3C 盒子模型;

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

7. css选择符:子选择器,标签选择器,伪类选择器,类选择器,id选择器,通配符选择器,属性选择器,后代选择器,相邻选择器。

8.css3新增属性:属性:圆角,旋转,位移,缩放,动画,线性。 媒体元素,video,aideo。多栏布局。Rgba。新增选择器。新增伪类。   

 9. h5新标签:新的语义化标签, 表单扩展, 本地存储 web storage:locaStorage、sessionStorage, 媒体元素:vidoe、audio, 绘图功能:canvas

10. 初始化css: 浏览器兼容问题,不同浏览器对有些标签的默认值是不同的,如没对CSS初始化往往会出现浏览器之间的页面显示差异。

11. BFC规范:格式化上下文,是W3C css 2.1中的一个概念,决定了元素如何对其内容进行布局。BFC盒子中的css是独立的,不会影响盒子外边其他元素。同一个BFC内的两个盒子在垂直方向上margin会发生重叠。

12. CSS Sprices 就是把网页中的一些背景元素整合在一个图片文件中组合图片背景 定位,可以减少图片请求耗时,减小服务器压力。(组合定位:“background-image”,“background- repeat”,“background-position”)

13. 语义化(1)页面呈现清晰结构(2)SEO搜索引擎优化,助于爬虫获取信息(3)助于其他设备识别(4)便于团队开发维护,具有可读性,减小差异化。

14. <!DOCTYPE>声明位于文档最上方,告知游览器以何种方式解析网页。

严格模式是以游览器执行的最高标准运行的。//混杂模式是以兼容向后的方式运行,兼容低版本游览器。  <!DOCTYPE>不存在或格式不正确会以混杂模式呈现。

15. Doctype文档类型:严格版本,过渡版本,基于框架的HTML文档。

     标准模式(严格模式); 包容模式(兼容模式);

16. HTML,XHTML区别:须有结束标记;属性用引号引着;元素,属性用小写;特殊符号用编码表示;XML合理嵌套;注释中不要--;图片有文字说明;属性赋一个值;

17. 常见兼容性问题:(1.PNG24位在ie6会有背景,ie6对png格式支持性差----做成PNG8;(2每个游览器默认padding,margin不同的--- *{padding:0;margin:0};(3.IE6下如果对元素设置了浮动,同时设置了margin-left或margin-right,margin会翻倍----{display:inline};(4.渐进识别的方式,\9 ;(5.IE可以用常规方式获取自定义属性,也可以用getAttribute();火狐只能用getAttribute();----统一用getAttribute();(6.ie下event对象有x,y属性,没有pageX,pageY属性;火狐与ie相反;----(条件注释);(7.谷歌中文界面最小字体12px----- -webkit-text-size-adjust: none;(8.超链接访问后hover\active不存在-------改变超链接属性排列顺序:L-V-H-A;(9.漏写DTD声明,火狐中仍按标准模式解析,IE下会出现怪异模式------H5推荐写法:`<doctype html>;(10.上下margin重合:IE和火狐中,两个相邻div上下margin会重合------同时采用margin-top或margin-bottom.

18. 浮动脱离普通文档流,不占空间。碰到包含他的边框或浮动元素边框停留。

  清除浮动:(1添加空标签:clear:both;--弊端:增加无意义标签;(2给父元素设置overflow:auto; zoom:1;(ie6识别);(3使用after伪对象(适用于非IE游览器,伪对象设置height:0,)

浮动问题(1父元素高度无法撑开,影响父元素同级元素(2同级非浮动元素会紧跟其后(3若非第一个元素,则前边元素也需浮动[18(1)可解决(2(3]

19. IE8以下盒模型宽高不包括内边距,边框-----box-sizing:boreder-box;

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

21.  (1)创建createDocumentFragment()//创建一个DOM片段
 createElement()//创建一个具体元素 createTextNode()//创建一个文本节点
(2)添加appendChild();移除 removeChild();替换replaceChild();

插入insertBefore() //在已有的子节点前插入一个新的子节点
(3)查找getElementsByTagName()//标签名称;getElementById() //Id唯一
 getElementsByName()//(IE容错能力强,得到一个数组包括id=name值)

22. h5新特性,移除元素新标签兼容问题区分 HTML, H5?<1>(1H5主要是关于图像,位置,存储,多任务等功能的增加;(2拖拽释放(Drag,drop)AP;(3语义化更好的内容标签header,nav,footer,aside,article,section;(4)音视频audio,video;(5画布(Canvas);(6地理 API;(7本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;sessionStorage 浏览器关闭后数据自动删除(8表单控件,calendar,date,time,email,url,search;(9新技术webworker,websocket,Geolocation;<2(1纯表现basefont,big,center,font,s,strike,tt,u;(2对可用性产生负面影响的元素:frame,frameset,noframes;<3(IE8/7/6支持通过document.createElement方法,让浏览器支持H5新标签,需添加默认样式:html5shim框架<!--[if lt IE9]><script>src="http://html5shim.googlecode.com/svn/trunk/html5.js" </script> <![endif]--> )<4区分: DOCTYPE声明\新增的结构元素\功能元素

23. iframe优点:解决加载缓慢第三方内容Security sandbox,并行加载脚本。缺点:阻塞主页面的Onload事件;即使内容为空,加载也需时间;无语意

24.实现浏览器内多个标签页通信: 调用localstorge、cookies等本地存储方式

(在一个页面存储,在另一个页面请求)

25.webSocket如何兼容低浏览器:  Adobe Flash Socket,ActiveX HTMLFile (IE),基于 multipart 编码发送 XHR ,基于长轮询的 XHR

26.线程与进程的区别:(一个进程代表一个程序,开一个进程代表开一个程序。相互独立。)【一个程序至少有一个进程,一个进程至少有一个线程. 】

27.对网站的文件和资源进行优化?
(1)文件合并(精灵图 js css第一次打开比较慢)(2)文件最小化/压缩(3) CDN 托管(4)缓存(get src href url)(5)其他

28.减少页面加载时间的方法(1优化图片 (2图像格式(GIF提供的颜色较少,用在对颜色要求不高的地方)(3优化CSS(压缩合并) (4网址后加斜杠 (5标明高度宽度(如没有这两个参数,要边下载图片边计算大小,浏览器要不断地调整页面。影响速度,浏览体验,当有高度宽度参数,即使图片暂时无法显示,页面上也会腾出图片的空位,继续加载后面内容,加载时间快浏览体验也更好) (6.减少http请求(合并文件,图片)。

29.使用哪些工具来测试代码的性能?Profiler,JSPerf,Dromaeo

30. FOUC?如何避免?( Flash Of Unstyled Content 文档样式闪烁),

 <style type="text/css" media="all">@import "../fouc.css";</style>

IE先加载整个文档DOM,然后导入外部CSS,因此在DOM加载完成到CSS导入完成中间一段时间页面内容没有样式的,时间的长短跟网速,电脑速度都有关系。

解决方法:::在<head>之间加入一个<link>或<script>元素。

31. null和undefined的区别?::undefined表示"无"的原始值,转为数值时当声明的变量还未被初始化时,变量的默认值为null(引用值)用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。 

Undefined:(1变量声明但没赋值.(2调用函数时,应提供的参数没有提供.(3对象没有赋值的属性.(4函数没有返回值.

Null:(1作为函数的参数,表示该参数不是对象.(2作为对象原型链的终点。

32.new操作符具体干什么:(1创建一个空对象,this 变量引用该对象,同时继承该函数的原型。(2属性和方法被加入到 this 引用的对象中( 3新创建的对象由 this 所引用,并且最后隐式的返回 this 。

33. JSON: 轻量级的数据交换格式。基于JS的一个子集。数据格式简单, 易于读写, 占用带宽小(内置对象,把任意对象转JSON类型字符串).(json与js对象的关系:json是js对象的字符串表示法,使用文本表示一个JS对象的信息,本质是一个字符串。//json转化为对象:JSON.parse().)

34.js延迟加载方式[下载JS文件同步会阻断代码,其他文件异步],Defer,async,动态创建DOM(创建script,插到DOM中,加载完毕后callBack)、按需异步载入js

35. 解决JS跨域问题? (跨域:网页请求其他服务器;正常请求src href,表单请求:ajax,自动拦截)。jsonp、 document.domain+iframe、window.name、window.postMessage、服务器上设置代理页面。 常用:(1)jsonp原理是动态插入script标签、(2)后台方法:设置响应头。

36.documen.write和 innerHTML的区别

document.write重绘整个页面;        innerHTML可以重绘页面的一部分

37.call() .apply()区别作用

作用:动态改变某个类的某个方法的运行环境.(改变方法中的this)

区别:(带参:call()参数直接写后边,apply(),传数组。Null,没改this)

38. 哪些操作造成内存泄漏?详见:详解js变量、作用域及内存

[[指任何对象用完了该删没有删仍然存在]]js回收是循环不定时回收。(1)setTimeout 第一个参数用字符串而非函数的话会引发内存泄漏。(2)闭包(在全局使用局部变量,局部变量,函数不能及时释放)(3控制台日志、(4)循环(两个对象彼此引用且彼此保留时,就会产生循环)

39.JS作用域,变量声明提升?详见:详解JavaScript函数模式(预编译)

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

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

前端:游览器执行的js为window; 后端:服务器执行的js为global.

41. 优雅降级:Web在所有新式浏览器中都正常工作,如使用老式浏览器,则检查确认它们能否正常工作。由于IE盒模型,针对不同版本IE的hack优雅降级,为浏览器增加候选方案,使之在旧浏览器上以降级体验却不至于完全失效.

渐进增强:从所有浏览器支持的基本功能开始,逐步添加新浏览器支持的无害于基础浏览器的额外样式和功能。当浏览器支持,会自动呈现并发挥作用。

42.Node优缺点?   *(优)Node是基于事件驱动和无阻塞的,所以非常适合处理并发请求,因此构建在Node上的代理服务器相比其他技术实现(如Ruby)要好得多。与Node代理服务器交互的客户端代码是由javascript语言编写的,因此客户端和服务器端都用同一种语言编写。  *(缺点)Node是一个相对新的开源项目,不太稳定,它总是一直在变,且缺少足够多的第三方库支持。看起来,就像是Ruby/Rails当年的样子/

43.对前端界面工程师职位理解?前景?

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

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

44.开放问题::::::团队角色,作用?怎样是前端工程师(Full Stack developer)?得意作品?项目遇到问题?解决?优缺点?管理前端团队?最近在学?谈你未来3,5年的规划?

45.性能优化的方法?详情:雅虎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图片预加载,样式表放顶部,脚本放底部,加上时间戳。

46.http状态码?代表? 100-199指定客户端相应的某些动作。/200-299请求成功./300-399 已经移动的文件并且常被包含在定位头信息中指定新的地址信息。/400-499 指出客户端的错误./400 语义有误,当前请求无法被服务器理解./401当前请求需要用户验证。/403服务器已经理解请求,但是拒绝执行。/500-599支持服务器错误。/503 – 服务不可用  

//200成功   300重定向     400语义有误     500服务器错误

47.页面输入url到加载完成过程?详情:从输入url到浏览器接收过程中发生了什么事情?

4个步骤(1)当发送一个URL时,不管这个URL是Web页面的URL还是页面上每个资源的URL,浏览器都会开启一个线程来处理请求,同时在远程DNS服务器上启动一个DNS查询,使浏览器获得对应的IP地址。// //(2) 浏览器与远程Web服务器通过TCP三次握手协商建立一个TCP/IP连接。包括一个同步报文,一个同步-应答报文,一个应答报文,三个报文在浏览器和服务器之间传.首先由客户端尝试建立起通信,服务器应答并接受客户端的请求,最后由客户端发出该请求已经被接受的报文。(3)一旦连接建立,浏览器会通过该连接向远程服务器发送HTTP的GET请求。远程服务器找到资源并使用HTTP响应返回该资源,值为200的HTTP响应状态表示一个正确的响应(4)此时,Web服务器提供资源服务,客户端开始下载资源。请求返回后,便进入前端模块/// // /简单说,浏览器会解析HTML生成DOM Tree,其次会根据CSS生成CSS Rule Tree,而javascript又根据DOM API操作DOM

简述:(1.通过dns解析获取ip。(2.tcp链接。(3.客户端发送http请求。(4.tcp传输报文。(5.服务器处理请求返回http报文。(6.客户端解析渲染页面 (构建DOM树 –> 构建渲染树 –> 布局渲染树:计算盒模型位置和大小 –> 绘制渲染树)。///////////

48.如何管理项目?-------- --------先期必须确定好全局样式,编码模式(utf-8) 等;/编写习惯必须一致(如继承式写法,单样式都写成一行);/标注样式编写人,各模块及时标注;/页面进行标注/CSS,HTML 分文件夹并行存放,命名统一/JS 分文件夹存放 命名英文翻译。图片采用整合的 images.png png8 格式文件使用 尽量整合在一起使用方便将来的管理

49.最近最流行?常去网站?  //Node.js、Mongodb、npm、MVVM、MEAN、three.js,React 。

网站:w3cfuns,sf,hacknews,优快云,慕课,博客园,InfoQ,w3cplus等

50. javascript对象的几种创建方式。1工厂模式 2构造函数模式,3原型模式,4混合构造函数和原型模式,5动态原型模式,6寄生构造函数模式,7稳妥构造函数模式

51.javascript继承的6种方法/详情:JavaScript继承方式详解

(1原型链继承       (2借用构造函数继承      (3组合继承(原型+借用构造)

(4原型式继承       (5寄生式继承                (6寄生组合式继承

52.ajax过程/详情:JavaScript学习总结(七)Ajax和Http状态字

(1)创建一个异步调用对象.(2)创建一个新的HTTP请求,并指定方法,URL及验证信息.(3)设置响应函数. (4)发送请求.(5)获取异步调用返回的数据. (6)使用JavaScript和DOM实现局部刷新.

53.异步加载的方案:1. 动态插入script标签。2.通过ajax去获取js代码,然后通过eval执行。3.script标签上添加defer或者async属性。4.创建并插入iframe,让它异步执行js。

延迟加载:有些js代码并不是页面初始化的时候就立刻需要,而稍后的某些情况才需要的。

54.前端安全问题?(XSS,sql注入,CSRF)// //CSRF:跨站请求伪造,通过伪造身份提交POST GET请求进行跨域攻击。**完成CSRF需两个步骤:**1.登陆受信任的网站A,本地生成COOKIE。2.在不登出A或者本地COOKIE没有过期的情况下,访问危险网站B。

55.ie各版本和chrome可以并行下载多少个资源

IE6 两个并发,iE7升级后6个并发,之后版本也是,Firefox,chrome也是6个

56.javascript里面的继承怎么实现,如何避免原型链上面的对象共享

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

57.grunt,YUI compressor,google clojure进行代码压缩的用法。YUI Compressor 是用来压缩JS和CSS文件的工具,采用Java开发。详情请见:你需要掌握的前端代码性能优化工具

//压缩JS --java -jar yuicompressor-2.4.2.jar --type js --charset utf-8 -v src.js > packed.js

//压缩CSS--java -jar yuicompressor-2.4.2.jar --type css --charset utf-8 -v src.css > packed.css

58.Flash、Ajax各自优缺点,使用中如何取舍?

       Flash适合处理多媒体、矢量图形、访问机器;对CSS、处理文本上不足,不容易被搜索。

       Ajax对CSS、文本支持很好,支持搜索;多媒体、矢量图形、机器访问不足。

共同点:与服务器的无刷新传递消息、用户离线和在线状态、操作DOM

59. JavaScript 同源策略::是客户端脚本(尤其是Netscape Navigator2.0,目的是防止某个文档或脚本从多个不同源装载----协议,域名,端口相同,同源策略是一种安全协议。 指一段脚本只能读取来自同一来源的窗口和文档的属性。

60.为什么要有同源限制?比如一个黑客程序,他利用Javascript读取到你的表单中的用户名和密码然后登录你的银行账户窃取数据。//  什么是 "use strict"; ? 使用它好坏处? Javascript在更严格的条件下运行。 设立"严格模式"的目的:(1 消除Javascript语法一些不合理不严谨之处,减少怪异行为;(2 消除代码运行的一些不安全,保证运行安全(3提高编译器效率,增加运行速度(4为未来新版本Javascript做好铺垫。---缺点:现在网站的merge后,这个串到文件中没有指示严格模式,压缩后浪费字节。

61. GET:用于信息获取,用URL传递参数,发送信息的数量有限制,一般2000个字符

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

GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form//也就是说Get是通过地址栏来传值,而Post是通过提交表单。然而在以下情况中,请使用 POST 请求:::1.无法使用缓存文件(更新服务器上的文件或数据库)2.向服务器发送大量数据(POST没有数量限制) 3发送包含未知字符时,POST比GET 更稳定更可靠。

(1.get是从服务器上获取数据,post是向服务器传送数据;(2.get请求可以将查询字符串参数追加到url的末尾; post请求应该把数据作为请求的主体提交.(3.get请求数据有大小限制;post没有(4.post比get安全性更高。

62.哪些地方会出现css阻塞,js阻塞?

 js阻塞特性:所有浏览器在下载JS、解析、执行完毕后才开始继续JS,但浏览器为了防止出现DOM树,需重新构建嵌入JS会阻塞其后内容显示,2种方式都会阻塞其后资源下载。外部样式不会阻塞外部脚本加载,但会阻塞执行。

CSS本可并行下载:(在测试观察中,CSS都是阻塞加载)当JS的时候:浏览器会维持css和JS,阻塞后面的资源加载,就会出现上面嵌入 1、放在底部,虽然照样会阻塞呈现,但不会阻塞资源下载。 2、如果嵌入JS放在head中,请放在CSS头部。 3、使用defer(只支持IE) 4、不要在嵌入的JS中调用运行时间较长的函数,可以用setTimeout来调用

63.Javascript无阻塞加载方式:将脚本放在底部head中,用保证在<script>标签放在``前。//成组脚本:由于每个<script>总数也可以改善性能。适用于内联脚本和外部脚本。``前。

非阻塞脚本:页面加载后,再加载window.onload事件发出后开始下载代码。(1fierfox3.5更高版本浏览器(2动态脚本元素:DOM允许用js动态创建 。重点:无论何处启动下载,文件下载运行都不会阻塞其他页面处理过程。即使在head里(除用于下载的http链接)。

64.闭包相关问题?详情请见:详解js闭包 

65.js事件处理程序问题? 详情请见:JavaScript学习总结(九)事件详解

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

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

67.写一个通用的事件侦听器函数? // event(事件)工具集,来源:github.com/markyun

68.Node.js的适用场景?:高并发、聊天、实时消息推送   

69.JavaScript原型原型链 ? 特点? *原型对象也是普通的对象,是对象一个自带隐式的 __proto__ 属性,如果一个原型对象的原型不为null的话,就称之为原型链。

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

原型链实际上就是js中数据继承的继承链。在访问一个实例的属性的时候,现在实例本身中找,如果没找到就去它的原型中找,还没找到就再往上找,直到找到。这就是原型链。

70. 页面重构?:编写CSS、页面结构更合理化-提升用户体验-实现良好的页面效果提升性能。

71.WEB从服务器主动推送Data到客户端方式?html5 websoket,WebSocket,Flash,XHR长时间连接,XHR Multipart Streaming,不可见的Iframe ,<script>标签的长时间连接(可跨域)

72.IE与火狐事件机制区别?阻止冒泡?(1,我们在网页中的某个操作(如:点击一个按钮就会产生一个事件)是可以被JavaScript侦测到的。( 2,IE是事件冒泡、firefox同时支持两种事件模型:捕获型事件,冒泡型事件。(3, ev.stopPropagation();旧ie的方法: ev.cancelBubble = true;

73.ajax ?交互模型?同异步?跨域? 详情:JavaScript学习总结(七)Ajax和Http状态字

(1异步模式提升用户体验//优化浏览器和服务器之间的传输,减少不必要的数据往返,减少带宽占用//Ajax在客户端运行,承担了一部分服务器承担的工作,减少了大用户量下服务器负载。(2 Ajax的最大的特点是::实现动态不刷新(局部刷新)( readyState属性状态有5个可取值 0=未初始化/1=启动/2=发送/3=接收/4=完成) .(3.ajax的缺点:不支持back按钮//安全问题 :暴露与服务器交互细节//对搜索引擎支持较弱//破坏程序的异常机制//不易调试。

(4跨域:jsonp、iframe、window.name、window.postMessage、服务器上设置代理页面

74.js对象的深度克隆

75.AMD和CMD 规范的区别? 详情请见:详解JavaScript模块化开发

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

2对于传统的网站来说:表格(table)布局改为DIV+CSS/使网站前端兼容于现代浏览器(针对于不合规范的CSS、如对IE6有效的)/对于移动平台的优化/针对于SEO进行优化

3深层次网站重构应考虑:减少代码间的耦合//代码保持弹性//严格按规范编写代码// 设计可扩展的API// 代替旧有的框架、语言(如VB)//增强用户体验//---通常来说对于速度的优化也包含在重构中//压缩JS、CSS、image等前端资源(通常由服务器解决)//程序的性能优化(如数据读写)//采用CDN来加速资源加载//对于JS DOM的优化//HTTP服务器的文件缓存

77.如何获取UA?

  <script>  function whatBrowser() {  document.Browser.Name.value=navigator.appName; document.Browser.Version.value=navigator.appVersion;document.Browser.Code.value=navigator.appCodeName;   document.Browser.Agent.value=navigator.userAgent; }   </script>

78.js数组去重:以下是数组去重的三种方法

  Array.prototype.unique1 = function () {var n = []; //一个新的临时数组

    for (var i = 0; i < this.length; i++) //遍历当前数组{ //如果当前数组的第i已经保存进了临时数组,那么跳过,//否则把当前项push到临时数组里面

 if (n.indexOf(this[i]) == -1) n.push(this[i]); } return n; }

 

  Array.prototype.unique2 = function(){var n = {},r=[]; //n为hash表,r为临时数组

 for(var i = 0; i < this.length; i++) //遍历当前数组 { if (!n[this[i]]) //如果hash表中没有当前项

 { n[this[i]] = true; //存入hash表 r.push(this[i]); //把当前项push到临时数组里面}}return r; }

  Array.prototype.unique3 = function(){var n = [this[0]]; //结果数组

  for(var i = 1; i < this.length; i++) //从第二项开始遍历 {//如果当前数组的第i项在当前数组中第一次出现的位置不是i,//那么表示第i项是重复的,忽略掉。否则存入结果数组

 if (this.indexOf(this[i]) == i) n.push(this[i]);} return n; }

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

80.cache-control::网页缓存是由HTTP消息头中的private、no-cache、max-age、must-revalidate等,默认为max-age的效果。但是如果同时存在,则被max-age覆盖。Expires = "Expires" ":" HTTP-date///例如 Expires: Thu, 01 Dec 1994 16:00:00 GMT (必须是GMT格式) 如果把它设置为max-age都可以用来指定文档的过期时间,但是二者有一些细微差别:

(1).Expires在HTTP/1.0中已经定义,Cache-Control:max-age在HTTP/1.1中才定义,为了向下兼容,仅使用max-age不够; (2).Expires指定一个绝对的过期时间(GMT格式),会导致至少2个问题:1)客户端和服务器时间不同步Expires的配置出现问题。 2)很容易在配置后忘记具体过期时间,过期来临出现浪涌现象;  3).max-age 指定的是从文档被访问后的存活时间,是个相对值(比如:3600s),相对的是文档第一次被请求时服务器记录的Request_time(请求时间)。 4).Expires指定的时间是相对文件的最后访问时间(Atime)或者修改时间(MTime),而max-age相对对的是文档的请求时间(Atime)。 如果值为no-cache,那么每次都会访问服务器。如果值为max-age,则在过期之前不会重复访问服务器。

 

附加

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

闭包有三个特性:1).函数嵌套函数2).函数内部可以引用外部的参数和变量3).参数和变量不会被垃圾回收机制回收

2. 前端安全问题?
sql注入原理:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。总的来说有以下几点:
(1.永远不要信任用户的输入,要对用户的输入进行校验,可以通过正则表
达式,或限制长度,对单引号和双”-”进行转换等。(2.永远不要使用动态拼装SQL。可以使用参数化的SQL或者直接使用存储过程进行数据查询存取。(3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。(4.不要把机密信息明文存放,请加密或者hash掉密码和敏感的信息

3. XSS与CSRP有什么区别吗?
XSS是获取信息。不需要提前知道其他用户页面的代码和数据包。CSRP
是代替用户完成指定的动作,需要知道其他用户页面的代码和数据包。
要完成一次CSRF攻击,受害者必须依次完成两个步骡:(1.登录受信任网站A。并在本地生成Cookie。(2.在不登出A的情况下,访问危险网站B。
CSRF的防御:(1.服务端的CSRP方式方法很多样,但总的思想都是一致的,就是在客户端页面增加伪随机数。(2.使用验证码

4. Javascript垃圾回收方法:(1.标记清除(mark and sweep),这是JavaScript最常见的垃圾可收方式,当变量进入执行环境的时候,比如函数中声明一个变量,垃圾回收器将其标记为“进入环境”,当变量离开环境的时候(函数执行结束)将其标记为“离开环境”。  垃圾回收器会在运行的时候给存储在内存中的所有变量加_上标记,然后去掉环境中的变量以及被环境中变量所引用的变量(闭包),在这些完成之后仍存在标记的就是要删除的变量了。(2.引用计数(reference counting) 在低版本IE中经常会出现内存泄露,很多时候就是因为其采用引用计数方式进行垃圾回收。引用计数的策略是跟踪记录每个值被使用的次数,当声明了一个变量并将一个引用类型赋值给该变量的时候这个值的引用次数就加1,如果该变量的值变成了另外一个,则这个值得引用次数减1,当这个值的引用次数变为0的时候,说明没有变量在使用,这个值没法被访问了,因此可以将其占用的空间回收,这样垃圾回收器会在运行的时候清理掉引用次数为0的值占用的空间。 在IE中虽然JavaScript对象通过标记清除的方式进行垃圾回收,但BOM与DOM对象却是通过引用计数回收垃圾的,也就是说只要涉及BOM及DOM就会出现循环引用问题。


5. 谈谈性能优化问题

(1.代码层面: 避免使用css表达式,避免使用高级选择器,通配选择器。(2.缓存利用: 缓存Ajax,使用CDN(内容分发网络--快/稳定),使用外部js和css文件,添加Expires头(控制缓存失效的日期),服务端配置Etag,减少DNS查找等。(3.请求数量:合并样式和脚本,使用css图片精灵,初始首屏之外的图片资源按需加载,静态资源延迟加载。(4.请求带宽:压缩文件,开启GZIP,移动端性能优化尽量使用css3动画,开启硬件加速。适当使用touch事件代替click事 件。避免使用css3渐变阴影效果。尽可能少的使用box-shadow与gradients(往往都是页面的性能杀手)。

简述: 1.减少http请求:使用sprite图、合并js和css文件。2.使用cdn:将用户安排在近的服务器上。3.使用缓存:缓存ajax,使用外部的css和js以便缓存,使用expire,cach-control,etag。4.压缩资源:使用gzip压缩js和css文件。5.代码层面:避免使用样式表达式、通配符选择器、样式放在顶部、脚本放在底部////////////////


6. Etag?:浏览器下载组件的时候,会将它们存储到浏览器缓存中。如果需要再次获取相同的组件,浏览器将检查组件的缓存时间,假如已经过期, 那么浏览器将发送一个条件GET请求到服务器,服务器判断缓存还有效,则发送一个304响应,告诉浏览器可以重用缓存组件。(缓存更高效,节省宽带)


7. 服务器是根据什么判断缓存是否还有效?:答案有两种方式,一种是前面提到的ETag,另一种是根据Last-HModi,fiedExpires, Cache,Control,Expires要求客户端和服务端的时钟严格同步。
HTTP1.1引入Cache Control来克服Expires头的限制。如果max* rage和Expires同时出现,则max-age有更高的优先级。


8. 栈,队列区别?:栈的插入和删除操作都是在一端进行的,而队列的操作却是在两端进行的。//队列先进先出,栈先进后出。栈只允许在表尾一端进行插入和删除,而队列只允许在表尾一端进行插入,在表头一端进行删除
9. 栈和堆的区别?
栈区(stack)一由编译器自动分配释放,存放函数的参数值,局部变量的值等。堆区(heap)一一般由程序员分配释放,若程序员不释放,程序结束时可能由0S回收。堆(数据结构):堆可以被看成是一棵树,如:堆排序; 栈(数据结构):一种先进后出的数据结构。


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

11. Node,Koa用的怎么样: koa是一个相对于express来说,更小,更健壮,更富表现力的Web框架,不用写回调。///koa是从第一个中间件开始执行,遇到next进入下一个中间件,执行到最后一个中间件,在逆序async await语法的支持

12. react和vue有哪些不同 说说你对这两个框架的看法
都用了virtual(虚函数),dom的方式,性能都很好。//ui上都是组件化的写法,开发效率很高。//vue是双向数据绑定,react是单项数据绑定,当工程规模比较大时双向数据绑定会很难维护。//vue适合不会持续的,小型的web应用,使用vue.js能带来短期内较高的开发效率. 否则采用react

13. Webpack,gulp不同:Webpack是模块打包工具,他会分析模块间的依赖关系,然后使用loaders处理它们,最后生成一个优化并且合并后的静态资源。

gulp是前端自动化工具 能够优化前端工作流程,比如文件合并压缩

14. 为什么看起来content-box更合理,但是还是经常使用border-box?
content-box 是W3C的标准盒模型 元素宽度=内容宽度+padding+border
border-box 是ie的怪异盒模型,他的元素宽度等于内容宽度,内容宽度包含了padding和border。比如有时候在元素基础上添加内距padding或border会将布局撑破 但是使用border-box就可以轻松完成。

15. cookie和session有什么联系和区别

区别:cookie数据存放在客户的浏览器上,session数据放在服务器上。//session比cookie更安全(别人可以分析存储在本地的cookie并进行cookie欺骗)。//单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。//session会在一定时间内保存在服务器上,访问过多,比较占用服务器性能。//  // 联系:一般用cookie来存储sessionid。session是通过cookie工作的,通过$_cookie[“phpsessid”]。session是唯一的。

16. javaScript中的this是什么,有什么用,它的指向是什么

全局代码中的this是指向全局对象。//作为对象的方法调用时指向调用这个函数的对象。//作为构造函数指向新创建的对象//使用apply和call设置this

17. 跨域通信方案(jsonp,flash,ifame,xhr2,cors)(js,cookie只请求当前源)
(1.JSONP:由于同源策略,XmlHttpRequest只允许请求当前源,script无同源限制。通过动态<script>元素使用,为src指定一个跨域url。回调函数处理JSON数据,兼容性好(不支持post)。//原理:首先在客户端注册一个callback,然后把名字传给服务器。此时服务器先生成一个function,function名字就是传递的参数。最后将json数据以入参的方式放置到function中,就生成了一段js语法的文档,返回给客户端。客户端浏览器,解析script标签,并执行返的js文档,此时数据作为参数,传入到了客户端预先定义好的callback函数里。

(2.cors:通过设置Access-Control-Allow-Origin(跨域资源共享)来允许跨域 cors可用ajax发请求获取数据,但是兼容性没有jsonp好。(cors允许一个域上的网络应用向另一个域提交AJAX请求。)

18. nginx好处?和node比较(高并发,响应快.//一个更专业,一个更全面:

相似点:异步非阻塞I/O, 事件驱动;

不同点:Nginx 用C编写,性能更高,但仅适于做web服务器,用于反向代理或负载均衡等服务,业务层编程思路是同步编程方式,如PHP。// NodeJs高性能平台,web服务只是其中一块,处理业务层用JS编写,是异步编程和思维方式。

19.  MVVM,MVC区别,原理?: mvc的界面和逻辑关联紧密,数据直接从数据库读取,必须通过Controller来承上启下,通信都是单向的。mvvm的View 和 ViewModel可以互相通信,界面数据从viewmodel中获取。

20.父子组件怎么通信的?

vue:父组件通过props属性给子组件通信,在子组件里面emit,在父组件监听

react:props传递,父给子传一个回调函数 将数据传给父亲处理。

21. 如何解决ajax无法后退问题:HTML5里引入了新的API:history.pushState,history.replaceState,可以通过pushState和replaceState接口操作浏览器历史,并且改变当前页面的URL。onpopstate监听后退

22. setTimeout,setInterval,requestAnimationFrame之间的区别
setInterval如果函数执行的时间过长,第二次的函数会放到队列中,等函数执行完再执行第二次,导致时间间隔发生错误。  而settimeout是在这个时间定时结束之后,它才会执行。  requestAnimationFrame是为了做动画专用的一个方法,这种方法对于dom节点的操作会比较频繁。

23. 显示器最小频率60hz,即1秒刷新60次。setInterval:最小4毫秒;clearInterval:10毫秒。

24. display:inline-block 什么时候会显示间隙(携程)  

  移除空格、使用 margin 负值、使用 font-size:0、letter-spacing、word-spacing  //  ------(真正的清除:加浮动)//

25. Javascript 如何实现继承  -----通过原型(对象)和构造器(构造方法)

 面向对象:先模块化设计,在模块化开发。对象创建方式(5种)

26. 事件处理机制:以前IE是冒泡,火狐是捕获。现在都支持冒泡。冒泡。

27. $(),JQuery的入口函数。负责将jquery代码解析为js代码,执行。

 28. $(this)与this:  $(this),谁调用this,指谁(对象)。This指一个元素。

29. window.onload与$(document).reday()不同。 JQuery执行速度比JS快。jquery等页面加载完执行,不等图片加载。JS页面加载完等图片加载完才执行。

30. $.each(array,function(i,value);循环数组对象;  $(‘div’).each(function(index){});根据JQuery对象的长度,决定执行几次,传的参数为索引号---

31.. webSocket 如何兼容低浏览器(阿里)【dobe Flash Socket 、 ActiveX HTMLFile (IE) 、 基于 multipart 编码发送 XHR 、基于长轮询的 XHR】//   答:是H5新增的一种通信协议,实现游览器与服务器全双工通信。使用XMLHttpRequest或iframe和长轮询,用flash./// 引用WebSocket.js,需要把WebSocket.swf放在页面相同目录下。

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

33. localstorage在一个标签页里被增删改查时,都会触发一个storage事件,通过在另一个标签页里监听storage事件,即可得到localstorage存储的值。//

34.使用cookie+setInterval,将要传递的信息存储在cookie中,每隔一段时间读取cookie信息,即可随时获取要传递的信息。

35. 闭包方法里边返回方法;/ 造成的结果:内存泄漏。

36. new与Object.create的作用,区别:

  在js中,构造函数只是一些使用new操作符时被调用的函数。(执行操作:1-创建/构造一个全新的对象。2-新对象被执行[[原型]]([[Prototype]])连接。3-这个对象绑定到函数调用的this。4-如果没有返回其他对象,new表达式函数调用会自动返回这个新对象。--结果为undefined.)//  //  //调用Object.create(..)会凭空创建一个新对象并把新对象内部的[[Prototype]]关联到你指定的对象。(结果为NaN.)

一、基本知识
DOM结构——两个节点之间可能存在哪些关系以及如何在节点之间任意移动。
DOM操作——怎样添加、移除、移动、复制、 创建和查找节点。
事件——怎样使用事件以及IE和DOM事件模型之间存在哪些主要差别。
XMLHttpRequest——这是什么、怎样完整地执行一次GET请求、怎样检测错误。
严格模式与混杂模式——如何触发这两种模式,区分它们有何意义。
盒模型——外边距、内边距和边框之间的关系,IE8以下版本的浏览器中的盒模型有什么不同。
块级元素与行内元素——怎么用CSS控制它们、它们怎样影响周围的元素以及你觉得应该如何定义它们的样式。
浮动元素——怎么使用它们、它们有什么问题以及怎么解决这些问题。
HTML与XHTML——二者有什么区别,你觉得应该使用哪一个并说出理由。
JSON——它是什么、为什么应该使用它、到底该怎么使用它,说出实现细节来。

  

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值