深圳市闻迅数码科技有限公司(套题)
选择题 | 填空题 | 问答题 | 编程题 | 试题难度 |
---|---|---|---|---|
0 | 0 | 10 | 0 | 一般 |
问答题
1、html5和css3各有哪些新特性?
答:
html5的主要特性
1.新增了布局标签 <header> <footer> <nav> <section><article><aside>等
2.新增了音频和视频标签 <audeo> <video>
3.提供了<canvas>画布标签,可以绘制丰富的图形,<svg>绘制矢量图
css3主要特性
1.新增了css3,包括圆角、弹性盒子、动画还有丰富的选择器
2、请描述一下cookies,sessionStrorage和localStorage的区别?
都可以用来存储前端的数据,而且都只能存储字符串信息
cookie存储数据比较常用,也是早期的前端存储方式,cookie信息往返浏览器与服务器之间,cookie的信息会提交到服务器,服务器也可以写cookie信息,存储大小为4KB左右。
sessionStorage是html5新增的,用于存储临时的会话数据,页面关闭就销毁
localStoreage 也是html5新增的,用于永久存储客户端数据
sessionStorage和localStoreage存储的数据都要比cookie大,约为5MB。
4、经常遇到的浏览器的兼容性有哪些?原因,解决方法是什么,常用hack的技巧?
1.最常见的兼容性问题就是,不同浏览器的默认margin和padding值不同,一般都需要初始化样式
*{margin:0;padding:0;}
2.图片默认有间距,可以使用浮动图片或设置图片行内块级元素解决
3.透明度一般浏览器使用opacity,IE浏览器使用滤镜filter来设置。
强调:兼容性存在的问题很多,你只需要讲出三个常用的兼容性就可以了。
css hack主要是针对IE浏览器的不同版本这是样式。大致分为三种形式的hack
第一种:属性级Hack:比如IE6能识别下划线”_”和星号” * “,IE7能识别星号” * “,但不能识别下划线”_”,而firefox两个都不能认识。
第二种:选择符级Hack:比如IE6能识别*html .class{},IE7能识别*+html .class{}或者*:first-child+html .class{}。
第三种:IE条件注释Hack,通常用于判断浏览器的版本。
例如针对所有IE:<!–[if IE]><!–您的代码–><![endif]–>
针对IE6及以下版本:<!–[if lt IE 7]><!–您的代码–><![endif]–>
5、css优化、提高性能的方法有哪些?
答:
1、在优化方面通常是精简css样式,提取公共的样式,减少代码的冗余。
2、用ID样式来划分每个功能的样式,每个功能样式的定义都以对应功能的ID开头,这样样式比较规整,容易维护
3、样式属性值也可以优化:如0px可以写成0,十六进制颜色 #ffffff这种相同的可以简化 #fff
4、尽量避免float、定位这样需要高性能渲染的布局样式
5、上线前,将代码进行压缩,减少体积,也尽量将css嵌入到页面减少请求次数。
6、什么是闭包(closure),为什么要用它?
答:
闭包的主要作用就是封装,将使用的变量封装在一个封闭的作用域,这个作用域叫做“闭包域”,这样就不会污染全局变量的使用了。
通过闭包形成一个私有的通过,通常通过return返回一个函数,来调用内容的实现。
闭包需要特别注意的是,变量需要手动的释放资源,否则容易占用资源,导致内存泄露。
早期通常使用即时函数来实现,在es5、es6,可以使用CommonJS、AMD、UMD的方式来实现模块化开发,一个JS文件就是一个模块也就是一个单独的作用域。
7、如何解决跨域问题?
提示:这种问题我还是建议根据实际经验来回答,按照以下的方式回答,会更能体现出你的表达力和理解能力
答:跨域的方式非常多
第一种方式使用代理方式跨域,不过这种只能用户开发环境,上线后就不行了。
第二种方式 使用jsonp,其原理是通过<script>访问脚本是可以跨域访问的。
第三种方式 设置请求头,指定允许跨域的站点,我们开发使用的是这种方式。后端同事在Response Header
上添加了 Access-Control-Allow-Credentials: true 和 Access-Control-Allow-Origin: http://admin.zxwyit.com
Access-Control-Allow-Credentials 是否允许cookie发送到服务器
Access-Control-Allow-Origin 可访问的地址
8、做的项目中,有没有用过或自己实现一些polyfill方案(兼容性处理方案)?
这个是有的,我们的项目中要求月、日都是两位数,不够两位要用0补齐,在es5提供了padStart函数,很容易实现,但早期的js字符串没有这个方法,所以需要兼容处理,我们的做法是在String原型上添加padStart方法,来实现兼容性的问题。
温馨提示:下面的代码供参考学习用,在面试上可以不用说话来
if (!"".padStart) {
String.prototype.padStart = function (fixWidth, startWith) {
var str = this.toString();
do {
var len = str.length;
if (len < fixWidth) {
str = startWith + str;
} else {
break;
}
} while (true);
return str;
};
};
9、一个页面从输入url,到页面加载显示完成,这个过程中发生了什么?(流程说得越详细越好)
答:根据域名查找服务器,下载服务器的文档内容,下载完后浏览器开始解释执行这些html代码,渲染页面,并行下载所需的资源,图片、css、js文件等。
10、var data=[ {"id":"123","name":"a","code":"0903"}, {"id":"129","name":"b","code":"0901"}, {"id":"126","name":"c","code":"0903"}, {"id":"121","name":"d","code":"0907"}, . . . ], 如何对这些数据进行分组归类得到一个以code值为key的结果对象,请写出具体的js代码
var obj={};
var len=data.length;
for(var i=0;i<len;i++){
var item=data[i];
obj[item.code]=item;
}