面试,你需要知道的一些问题

1. 页面导入样式时,使用link和@import有什么区别?

(1)link属于XHTML标签,除了加载css外,还能定义RSS,定义rel连接属性等作用;而@import是css提供的,只能用于加载css;

(2)页面被加载时候,link会同时被加载,而@inport引用的css会等到页面被加载完再加载;

(3)import是css2.1提出的,只有在IE5以上才能被识别,而link是XHTML标签,无兼容问题。

2.简述对html语义化的理解

  用正确的标签做正确的事。html语义化让页面的内容结构化,结构更清晰,便于对浏览器、搜索引擎解析;即使在没有样式css情况下也以一种文档格式显示,并且容易阅读;搜索引擎的爬虫也依赖于HTML标记来确定上下文各个关键字的权重,利于SEO;使阅读源代码的人更容易将网站分块,便于阅读维护理解。

3.常见的内核?

  Trident内核:IE,MaxTom,腾讯TT,The World,360,搜狗浏览器等;---Gecko内核:Netscape6及以上版本,FF,等;---Presto内核:Opera7及其以上;---Webkit内核:safari,Chrome等。Blink内核是Webkit内核的分支。

4.BFC规范(块级格式化上下文)的理解?

   具有 BFC 的元素可以看作是隔离了的独立容器,容器里面的元素不会在布局上影响到外面的元素,并且 BFC 具有普通容器没有的一些特性,例如可以包含浮动元素。

满足下面任一条件的元素,会触发为 BFC ,浮动元素,float 除 none 以外的值;绝对定位元素,position(absolute,fixed);display 为以下其中之一的值 inline-blocks,table-cells,table-captions;overflow 除了 visible 以外的值(hidden,auto,scroll)。

5.说几条JavaScript的基本规范?

1)不要在同一行声明多个变量;

2)请使用===/!==来比较true/false或者数值;

3)使用对象字面量替代new Array这种形式;

4)不要使用全局函数

5)Switch语句必须带有default分支;

6)函数不应该有时候有返回值,有时候没有返回值;

7)For循环必须使用大括号;

8 )for in循环中的变量 应该使用var关键字明确限定作用域,从而避免作用域污染

6.前端性能优化的办法?

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又称Dynamic Properties(动态属性);

7)图片预加载,将样式表放在顶部,将脚本放在底部,加上时间戳;

8)避免在页面的主题布局中使用table,table要等其中的内容完全下载后才会显示出来,显示比div+css布局慢;

总体来说,进来向前端优化、减少数据库操作、减少磁盘IO。向前端优化是指,在不影响功能和体验的情况下,能在浏览器执行的不要在服务端执行,能在缓存服务器上返回的不要到应用服务器,程序能直接取得的结果不要到外部取得,本机能取得的数据不要到远程取,内存能取到的不要到磁盘取。

7.HTML与XHTML —— 二者有什么区别,你觉得应该使用哪一个并说出理由。

1>XHTML 元素必须被正确地嵌套。

错误:

this is example.

正确:

this is example.

2>XHTML 元素必须被关闭。

错误:

this is example.

正确:

this is example.

3>标签名必须用小写字母。

错误:

this is example.

正确:

this is example.

4>空标签也必须被关闭

错误:

正确:

5>XHTML 文档必须拥有根元素。

所有的?XHTML 元素必须被嵌套于 根元素中。

8. 事件委托是什么?

  事件委托就是事件目标自身不处理事件,而是把处理任务委托给其父元素或者祖先元素,甚至根元素(document)。

9.什么叫优雅降级和渐进增强

  优雅降级:Web站点在所有新式浏览器中都能正常工作,如果用户使用的是老式浏览器,则代码会针对旧版本的IE进行降级处理了,使之在旧式浏览器上以某种形式降级体验却不至于完全不能用。如:border-shadow

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

如:默认使用flash上传,但如果浏览器支持 HTML5 的文件上传功能,则使用HTML5实现更好的体验;

10.rgbaopacity的透明效果有什么不同?

  opacity会继承父元素的 opacity 属性,而RGBA设置的元素的后代元素不会继承不透明属性。比如rgba的话,内部的文字透明度不会发生变化,而opacity的话,会影响到内部的文字

11.什么是闭包(closure),为什么要用它?

  闭包就是能够读取其他函数内部变量的函数,如果一个函数内部又定义了一个内部函数,并将该内部函数作为返回值返回或者存储在某个对象的属性里,这时就会形成一个闭包。

使用场景:1.匿名自执行函数2缓存?3实现封装(封装的方式有很多,闭包只是其中一种,不是说到封装就一定会用闭包)

闭包的优缺点

闭包的优点:

1.缓存

2.面向对象中的对象

3.实现封装,防止变量跑到外层作用域中,发生命名冲突

4.匿名自执行函数,匿名自执行函数可以减小内存消耗

闭包的缺点:

1.闭包有一个非常严重的问题,那就内存浪费问题,这个内存浪费不仅仅因为它常驻内存,更重要的是,对闭包的使用不当的话会造成无效内存的产生

2.性能问题?使用闭包时,会涉及到跨作用域访问,每次访问都会导致性能损失。

因此在脚本中,最好小心使用闭包,它同时会涉及到内存和速度问题。不过我们可以通过把跨作用域变量存储在局部变量中,然后直接访问局部变量,来减轻对执行速度的影响。






你可能感兴趣的:(面试,你需要知道的一些问题)