前端面试题总结:HTML5,JS,CSS3,兼容性。

1、 请写出至少20个HTML5标签

<article><aside>
<audio><video>
<canvas><datalist><command> <details><embed>
<figcaption><figure>
<footer><header><nav><section>
<hgroup><keygen>
<mark><time><summary>

2、 简述jpg。Gif。png-8.png-24的区别,分别使用场景

  gif、jpg、png格式的图片在网站制作中的区别

  Gif格式特点:
  1.透明性,Gif是一种布尔透明类型,既它可以是全透明,也可以是全不透明,但是它并没有半透明(alpha透明)。
  2.动画,Gif这种格式支持动画。
  3.无损耗性,Gif是一种无损耗的图像格式,这也意味着你可以对gif图片做任何操作也不会使得图像质量产生损耗。
  4.水平扫描,Gif是使用了一种叫作LZW的算法进行压缩的,当压缩gif的过程中,像素是由上到下水平压缩的,这也意味着同等条件下,横向的gif图片比竖向的gif图片更加小。例如500*10的图片比10*500的图片更加小
  5.间隔渐进显示,Gif支持可选择性的间隔渐进显示
  由以上特点看出只有256种颜色的gif图片不适合照片,但它适合对颜色要求不高的图形(比如说图标,图表等),它并不是最优的选择,我们会在后面中看到png是最优的选择。
  Jpeg格式特点:
  1.透明性,它并不支持透明。
  2.动画,它也不支持动画。
  3.损耗性,除了一些比如说旋转(仅仅是90、180、270度旋转),裁切,从标准类型到先进类型,编辑图片的原数据之外,所有其它操作对jpeg图像的处理都会使得它的质量损失。所以我们在编辑过程一般用png作为过渡格式。
  4.隔行渐进显示,它支持隔行渐进显示(但是ie浏览器并不支持这个属性,但是ie会在整个图像信息完全到达的时候显示)。
  由上可以看出Jpeg是最适web上面的摄影图片和数字照相机中。
  Png格式特点:
  1.类型,Png这种图片格式包括了许多子类,但是在实践中大致可以分为256色的png和全色的png,你完成可以用256色的png代替gif,用全色的png代替jpeg
  2.透明性,Png是完全支持alpha透明的(透明,半透明,不透明),尽管有两个怪异的现象在ie6(下面详细讨论)
  3.动画,它不支持动画
  PNG图片格式现在包含三种类型:
  1.PNG8256色PNG的别名
  2.PNG24全色PNG的别名
  3.PNG32全色PNG的别名
  基本上PNG32就是PNG24,但是附带了全alpha通道。就是说每个像素上不仅存储了24位真色彩信息还存储了8位的alpha通道信息,就如同GIF能存储透明和不透明信息一样。当我们把图片放到不太搭配的背景上的时候,透明PNG图片的边缘会显示得更加平滑。
  当然,我也知道你的想法,“但是Photoshop也能生成带透明通道的PNG图片!”我也知道,它只是表面上这么说是PNG24,让我也产生困惑了。
  作为一个伤感的Fireworks倡导者,我只使用PNG32支持附带alpha通道的真色彩图片。不管怎样,如果你习惯使用Photoshop,你就应该知道,Photoshop在“存储为WEB格式”中只提供PNG8和PNG24两种PNG格式。
  我敢肯定你经常会勾选“支持透明”选项,以获得带有透明度的PNG图片,但是这样你就获取了一张PNG32图片。——Photoshop只是觉得把PNG32这个名称给隐藏掉了。奇怪吧?……
  对png8的误解
  Png8的在ie中的怪异表现:
  半透明的png8在ie6以下的浏览器显示为全透明。
  Alpha透明的全色PNG(png32)在ie6中会出现背景颜色(通常是灰色)。
  由上面可以总结:
  (a)全透明的png8可以在任一浏览器正常显示(就像gif一样)。半透明的png8在除了ie6及其以下的浏览器下错误的显示成全透明,其它浏览器都能正常显示半透明。这个bug并不需要特殊对待,因为在不支持半透明的浏览器下只是显示为全透明,对用户体验影响不大,它反而是透明gif的加强版。
  (b)第二个bug没有什么好的方法解决,只能通过影响性能的方法AlphaImageLoader与需要加特殊标签(VML)。
  因此得出结论就是:请使用PNG8。
  Png8的软件问题:
  Photoshop只能导出布尔透明的PNG8。
  Fireworks既能导出布尔透明的PNG8,也能导出alpha透明的PNG8。

3、 能够设置文本加粗的样式属性是什么

字体加粗(font-weight)   

功能:用于设置字体笔划的粗细。   

属性值:正常度 - normal   

相对度 - bold, bolder, light, lighter   

渐变度 - 100, 200, 300, 400(相当于normal), 500, 600, 700(相当于 bold、 lighter、 bolder、以及数值100-900。   

语法为:h1 {font-weight: 属性值}

4、 编写一个布局,页面宽度自适应,最小宽度300px,左边定宽35%,右边定宽65%

 <div class="container">
<div class="left"></div>
<div class="right"></div>
</div> <style>
.container {
height: 600px;
_width: 300px;
min-width: 300px;
}
.left {
width: 35%;
height: 100%;
background: #ff0;
float: left;
}
.right {
overflow: hidden;
width: 65%;
height: 100%;
background: #0f0;
}
</style>

5、 谈谈对html5的了解

(1)、良好的移动性,以移动设备为主。

(2)、响应式设计,以适应自动变化的屏幕尺寸

(3)、支持离线缓存技术,webStorage本地缓存

(4)、新增canvas,video,audio等新标签元素。新特殊内容元素:article,footer,header,nav,section等,新的表单控件:calendar,date,time,email,url,search。

(5)、地理定位...

(6)、新增webSocket/webWork技术

6、 Js面向对象的几种方式

(1)、对象的字面量 var obj = {}

(2)、创建实例对象 var obj = new Object();

(3)、构造函数模式 function fn(){} , new fn();

(4)、工厂模式:用一个函数,通过传递参数返回对象。function fn(params){var obj =new Object();obj.params = params; return obj;},fn(params);

(5)、原型模式:function clock(hour){} fn.prototype.hour = 0; new clock();

首先,每个函数都有一个prototype(原型)属性,这个指针指向的就是clock.prototype对象。而这个原型对象在默认的时候有一个属性constructor,指向clock,这个属性可读可写。而当我们在实例化一个对象的时候,实例newClock除了具有构造函数定义的属性和方法外(注意,只是构造函数中的),还有一个指向构造函数的原型的指针,ECMAScript管他叫[[prototype]],这样实例化对象的时候,原型对象的方法并没有在某个具体的实例中,因为原型没有被实例。

7、前端页面有哪三层构成,分别是什么,作用是什么

Css: 层叠样式表 ,表现,  由css负责创建。css对“如何显示有关内容”的问题做出了回答。

Html:超文本标记语言 ,结构,由 HTML 或 xhtml之类的标记语言负责创建。标签,也就是那些出现在尖括号里的单词,对网页内容的语义含义做出了描述,但这些标签不包含任何关于如何显示有关内容的信息。例如,P标签表达了这样一种语义:“这是一个文本段。”

Js: 客户端脚本语言 ,行为, 内容应该如何对事件做出反应。

8、 如何对网站的文件和资源进行优化

(1)、文件合并(目的是减少http请求)

(2)、文件压缩 (目的是直接减少文件下载的体积)

(3)、使用cdn托管资源

(4)、使用缓存

(5)、gizp压缩你的js和css文件

(6)、meta标签优化(title,description,keywords),heading标签的优化,alt优化

(7)、反向链接,网站外链接优化。

9、 JQuery中有几种类型的选择器

(1)、层叠选择器$(“form input”)
(2)、基本过滤选择器:first:last:not()
(3)、内容过滤选择器:odd:eq():animated
(4)、可视化过滤选择器:hidden:visible
(5)、属性过滤选择器:div[id]
(6)、子元素过滤选择器:first-child:last-child:only:child
(7)、表单元素过滤选择器:enabled:disabled:checked:selected
(8)、id,类,类型,元素...

10、说几条javasprit的基本规范

(1)、不要在同一行声明多个变量。
(2)、请使用 ===/!==来比较true/false或者数值
(3)、使用对象字面量替代new Array这种形式
(4)、不要使用全局函数。
(5)、Switch语句必须带有default分支
(6)、函数不应该有时候有返回值,有时候没有返回值。
(7)、For循环必须使用大括号
(8)、If语句必须使用大括号
(9)、for-in循环中的变量 应该使用var关键字明确限定作用域,从而避免作用域污染。

11、 Html5中本地存储概念是什么,有什么优点

cookie是网站为了标示用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)。

cookie数据始终在同源的http请求中携带(即使不需要),记会在浏览器和服务器间来回传递。

sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。

存储大小

cookie数据大小不能超过4k。

sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。

有期时间

localStorage    存储持久数据,浏览器关闭后数据不丢失除非主动删除数据;

sessionStorage  数据在当前浏览器窗口关闭后自动删除。

cookie          设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭

12、什么是ajax和json,它们的优缺点

ajax的全称:Asynchronous Javascript And XML。

异步传输+js+xml。

所谓异步,在这里简单地解释就是:向服务器发送请求的时候,我们不必等待结果,而是可以同时做其他的事情,等到有了结果它自己会根据设定进行后续操作,与此同时,页面是不会发生整页刷新的,提高了用户体验。

(1)创建XMLHttpRequest对象,也就是创建一个异步调用对象

(2)创建一个新的HTTP请求,并指定该HTTP请求的方法、URL及验证信息

(3)设置响应HTTP请求状态变化的函数

(4)发送HTTP请求

(5)获取异步调用返回的数据

(6)使用JavaScript和DOM实现局部刷新

13、 你知道那些针对jQuery的优化方法

基于Class的选择性的性能相对于Id选择器开销很大,因为需遍历所有DOM元素。

频繁操作的DOM,先缓存起来再操作。用Jquery的链式调用更好。

比如:var str=$("a").attr("href");

for (var i = size; i < arr.length; i++) {}

for 循环每一次循环都查找了数组 (arr) 的.length 属性,在开始循环的时候设置一个变量来存储这个数字,可以让循环跑得更快:

for (var i = size, length = arr.length; i < length; i++) {}

14、编写一个方法求一个字符串的字节长度,假设:一个英文字符占用一个字节,一个中文字符占用两个字节

 function num(str) {
var num1 = str.length;
var num2 = 0;
for (var i = 0; i < str.length; i++) {
if (str.charCodeAt(i) >= 10000) {
num2++;
}
}
console.log(num1 + num2)
}

15、简述ECMASCRIPT6的新特性

1.增加块作用域

2.增加let const

3.解构赋值

4.函数参数扩展 (函数参数可以使用默认值、不定参数以及拓展参数)

5.增加class类的支持

6.增加箭头函数

7.增加模块和模块加载(ES6中开始支持原生模块化啦)

8.math, number, string, array, object增加新的API

16、Apply和call方法的异同

相同点:两个方法产生的作用是完全一样的,第一个参数都是对象;

不同点:

call()方法参数将依次传递给借用的方法作参数,即fn.call(thisobj, arg1,arg2,arg3...argn),有n个参数

apply()方法第一个参数是对象,第二个参数是数组fn.apply(thisobj,arg),此处的arg是一个数组,只有两个参数

17、 为什么利用多个域名来提供网站资源会更有效?

(1)、突破浏览器的并发限制(浏览器同一域名最大的并发请求数量为6个,ie6为2个)
(2)、节约cookie带宽
(3)、CDN缓存更方便
(4)、防止不必要的安全问题(尤其是cookie的隔离尤为重要)
(5)、节约主机域名连接数,优化页面响应速度

18、身为以为web前端工程师,你肯定知道现在最流行的前端技术吧,有那些?

Vuejs2.0/Angular2.0/React Native /es6//Nodejs

http2

gulp/webpack

19、 你如何从浏览器的URL中获取参数信息

浏览器宿主环境中,有一个location对象,同时这个对象也是window对象和document对象的属性。

location对象中提供了与当前窗口加载的文档有关的的信息,即URL信息。

如 https://www.baidu.com/api/sousu?search=baidu&id=123#2

location.href: 完整URL

location.protocol: 返回协议(https:)

location.host: 返回服务器名称和端口号(www.baidu.com

location.hostname: 返回服务器名称(www.baidu.com

location.port:返回服务器端口号(http默认80,https默认443)

location.pathname:返回URL中的目录和文件名(api/sousu)

location.search:返回查询字符串(?search=baidu&id=123#2)

location.hash:返回hash值(#2)

20、 请戳出ie6/7下特有的cssbug

(1)、li边距“无故” 增加

设置ul的显示形式为*display:inline-block;即可,前面加*是只 针对IE6/IE7有效

(2)、IE6 不支持min-height属性,但它却认为height就是最小高度

使用ie6不支持但其余浏览器支持的属性!important。

(3)、Overflow:

在IE6/7中,overflow无法正确的隐藏有相对定位position:relative;的子元素。解决方法就是给外包容器.wrap加上position:relative;。

(4)、border:none 在IE6不起作用: 写成border:0 就可以了,

(5)、100%高度

在IE6下,如果要给元素定义100%高度,必须要明确定义它的父级元素的高度,如果你需要给元素定义满屏的高度,就得先给html和body定义 height:100%;。

(6)、双边距 Bug

当元素浮动时,IE6会错误的的把浮动方式的margin值双倍计算,给float的元素添加一个display:inline

(7)、躲猫猫bug

些定义了:hover的链接,当鼠标移到那些链接上时,在IE6下就会触发躲猫猫。
1.在(那个未浮动的)内容之后添加一个<span style=”clear: both;”></span>
2.触发包含了这些链接的容器的hasLayout,一个简单的方法就是给其定义height:1%;

(8)、IE6 绝对定位的元素1px 间距bug

当绝对定位的父元素或宽度为奇数时,bottom和right会多出现1px,

解决方案,针对IE6进行hack处理

***如果感觉有一点点收获得话,请帮忙点下推荐!!!

上一篇:apue——读目录操作


下一篇:HDU 1166.敌兵布阵-完全版线段树(单点增减、区间求和)