2018Web前端开发面试题集锦

前端开发html面试题目|前端开发面试题主要知识点分布|前端开发工程师就业试题
H5前端面试题及答案(1)
1.新的 HTML5 文档类型和字符集是?

HTML5 文档类型很简单:

<!doctype html>

HTML5 使用 UTF-8 编码示例:

<meta charset=”UTF-8″>

2.HTML5 中如何嵌入音频?

当前,audio 元素支持三种音频格式:

复制代码

<!– control 属性供添加播放、暂停和音量控件 –>
<!– audio 元素允许多个 source 元素。source 元素可以链接不同的音频文件。浏览器将使用第一个可识别的格式 –>
<audio controls=”controls”>
<source src=”jamshed.mp3″ type=”audio/mpeg”>
<source src=”jamshed.ogg″ type=”audio/ogg”>
Your browser does’nt support audio embedding feature.
</audio>

复制代码
3.HTML5 中如何嵌入视频?

当前,video 元素支持三种视频格式:

<!– 跟 audio 元素一样 –>
<video width=”320″ height=”240″ controls=”controls”>
<source src=”movie.ogg” type=”video/ogg”>
<source src=”movie.mp4″ type=”video/mp4″>
Your browser does not support the video tag.
</video>

4.除了 audio 和 vidio,HTML5还有哪些媒体标签?

<embed> 标签定义嵌入的内容,比如插件。

<embed src=”helloworld.swf” />

<source> 标签允许您规定可替换的视频/音频文件供浏览器根据它对媒体类型或者编解码器的支持进行选择。

<video width=”320″ height=”240″ controls=”controls”>
<source src=”movie.ogg” type=”video/ogg”>
<source src=”movie.mp4″ type=”video/mp4″>
Your browser does not support the video tag.
</video>

<track> 播放带有字幕的视频:

<video width=”320″ height=”240″ controls=”controls”>
<source src=”forrest_gump.mp4″ type=”video/mp4″ />
<source src=”forrest_gump.ogg” type=”video/ogg” />
<track kind=”subtitles” src=”subs_chi.srt” srclang=”zh” label=”Chinese”>
<track kind=”subtitles” src=”subs_eng.srt” srclang=”en” label=”English”>
</video>

5.HTML5 存储类型有什么区别?

HTML5 能够本地存储数据,在之前都是使用 cookies 使用的。HTML5 提供了下面两种本地存储方案:

localStorage - 没有时间限制的数据存储,数据永远不会过期,关闭浏览器也不会丢失
sessionStorage - 针对一个 session 的数据存储,同一个会话中的页面才能访问并且当会话结束后数据也随之销毁。

6.HTML5 canvas 元素有什么作用?

用于在网页上绘制图形,该元素标签强大之处在于可以直接在 HTML5 上进行图形操作
复制代码

<!doctype html>
<html lang=”en”>
<head>
<meta charset=”UTF-8″>
<title>Document</title>
</head>
<body>
<canvas id=”canvas”></canvas>
<script>
var canvas=document.getElementById(‘canvas’);
var ctx=canvas.getContext(‘2d’);
ctx.fillStyle=’#FF0000′;
ctx.fillRect(0,0,200,200);
</script>
</body>
</html>

复制代码

效果:

7.HTML5 有哪些新增的表单元素?

新的input类型:

新的表单元素:

8.HTML5 废弃了那些 HTML4 标签?

9.HTML5 标准提供了哪些新的API?

1:canvas,不用多说,可以画出很多绚丽的图形,甚至可以直接做出伪3D游戏。

2:媒体控制,也很好理解(直译就是回放功能,假如只用html5.0以下的标签写,以前的音乐播放是不可能实现滚动条的。)

3:离线网页程序,可以把资源文件完全缓存在客户端,并且通过js的一些方法清空缓存

4:文档编辑,应该是更好的支持对文档的编辑。

5:拖动,可以将文件拖动到某些区域上传

6:跨文档请求,websocket,一种更加高效的通讯方式

7:历史管理,可以通过js管理和插入历史记录

8:MIME头自定义

9:客户端数据存储,localstoage sessionstoage

10:地理位置共享

11:本地数据库

12:索引数据库
10.HTML5 应用程序缓存和浏览器缓存有什么区别?

HTML5 引入了应用程序缓存,这意味着 web 应用可进行缓存,并可在没有因特网连接时进行访问。

应用程序缓存为应用带来三个优势:

离线浏览 – 用户可在应用离线时使用它们

速度 – 已缓存资源加载得更快

减少服务器负载 – 浏览器将只从服务器下载更新过或更改过的资源。

实现借助于 manifest 文件

<html manifest=”demo.appcache”>
11.doctype 作用?严格模式与混合模式如何区分?它们有何意义?

<!DOCTYPE> 声明可告知浏览器文档使用哪种 HTML 或 XHTML 规范。

在标准模式中,浏览器根据规范呈现页面;在混杂模式中,页面以一种比较宽松的向后兼容的方式显示
复制代码

<!– HTML4.01文档严格定义类型,此类型定义的文档可以使用HTML中的标签与元素,不能包含不被W3C推荐的标签,不可以使用框架 –>
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01//EN” “http://www.w3.org/TR/html4/strict.dtd”&gt;
<!– HTML4.01文档过渡定义类型,此类型定义的文档可以使用HTML中的标签与元素包括一些不被W3C推荐的标签,不可以使用框架 –>
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”&gt;
<!– HTML4.01文档框架定义类型,此类型等同于HTML4.01文档过渡定义类型,但可以使用框架 –>
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Frameset//EN” “http://www.w3.org/TR/html4/frameset.dtd”&gt;

<!– XHTML1.0文档过渡定义类型,此类型定义的文档可以使用HTML中的标签与元素包括一些不被W3C推荐的标签,不可以使用框架 –>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”&gt;
<!– XHTML1.0文档严格定义类型,此类型定义的文档只可以使用HTML中定义的标签与元素,不能包含不被W3C推荐的标签,不可以使用框架 –>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”&gt;
<!– XHTML1.0文档框架定义类型,等同于XHTML1.0文档过渡定义类型,但可以使用框架 –>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Frameset//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd”&gt;

<!– XHTML1.1文档严格定义类型,等同于XHTML1.0文档过渡定义类型 –>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.1//EN” “http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd”&gt;

复制代码
12.行内元素有哪些?块级元素有哪些?空(void)元素有哪些?

块级元素:

address – 地址

blockquote – 块引用

center – 举中对齐块

dir – 目录列表

div – 常用块级容易,也是css layout的主要标签

dl – 定义列表

fieldset – form控制组

form – 交互表单

h1 – 大标题

h2 – 副标题

h3 – 3级标题

h4 – 4级标题

h5 – 5级标题

h6 – 6级标题

hr – 水平分隔线

isindex – input prompt

menu – 菜单列表

noframes – frames可选内容,(对于不支持frame的浏览器显示此区块内容

noscript – 可选脚本内容(对于不支持script的浏览器显示此内容)

ol – 排序表单

p – 段落

pre – 格式化文本

table – 表格

ul – 非排序列表

行级元素:

a – 锚点

abbr – 缩写

acronym – 首字

b – 粗体(不推荐)

bdo – bidi override

big – 大字体

br – 换行

cite – 引用

code – 计算机代码(在引用源码的时候需要)

dfn – 定义字段

em – 强调

font – 字体设定(不推荐)

i – 斜体

img – 图片

input – 输入框

kbd – 定义键盘文本

label – 表格标签

q – 短引用

s – 中划线(不推荐)

samp – 定义范例计算机代码

select – 项目选择

small – 小字体文本

span – 常用内联容器,定义文本内区块

strike – 中划线

strong – 粗体强调

sub – 下标

sup – 上标

textarea – 多行文本输入框

tt – 电传文本

u – 下划线

空元素,没有内容的 HTML 元素被称为空元素:

<br> – 定义换行

<hr> – 分割线

<img>

<input>
13.link 和 @import 的区别是?

引用css的两种方式:

<link rel=”stylesheet” href=”taojiaqu.css” type=”text/css” />

<style type=”text/css”>@import url(taojiaqu.css) </style>

1.link是XHTML标签,除了加载CSS外,还可以定义RSS等其他事务;@import属于CSS范畴,只能加载CSS。

2.link引用CSS时,在页面载入时同时加载;@import需要页面网页完全载入以后加载。

3.link是XHTML标签,无兼容问题;@import是在CSS2.1提出的,低版本的浏览器不支持。

4.link支持使用Javascript控制DOM去改变样式;而@import不支持。
14.浏览器的内核分别是什么?

Trident(IE内核),是微软开发的一种排版引擎。

Gecko(Firefox内核),是一套开放源代码的、以C++编写的网页排版引擎。

Presto(Opera前内核) (已废弃)。

Webkit(Safari内核,Chrome内核原型,开源)。
15.常见兼容性问题及解决方案?

1.清除图片下方出现几像素的空白间隙

img{display:block;}

img{vertical-align:top;}

2.不同浏览器的标签默认的外边距和内边距不同

*{margin:0;padding:0}

这个还有很多,之后再来整一篇。有些遇到了才会发现…
16.用js写个原生的ajax过程
复制代码

window.onload=function(){
document.getElementsByTagName(‘a’)[0].onclick=function(){
if (window.XMLHttpRequest){
var xmlhttp=new XMLHttpRequest();
}else{
var xmlhttp=new ActiveXObject(“Microsoft.XMLHTTP”);
}
var method=’GET’;
var url=this.href;
xmlhttp.open(method,url);
xmlhttp.send();
xmlhttp.onreadystatechange=function(){
if(xmlhttp.readyState==4){
if(xmlhttp.status==200||xmlhttp.status==304){
var txt=xmlhttp.responseText;
var json=eval(‘(‘+txt+’)’);
document.getElementById(‘name’).innerHTML=’姓名’+json.ruei.name;
document.getElementById(‘age’).innerHTML=’年龄’+json.ruei.age;
document.getElementById(‘job’).innerHTML=’工作’+json.ruei.job;
}
}
}
return false;
}
}

复制代码
17.请实现,鼠标点击页面中的任意标签,alert 该标签的名称(注意兼容性)
复制代码

<!doctype html>
<html lang=”en”>
<head>
<meta charset=”UTF-8″>
<title>alert标签名</title>
</head>
<body>
<div class=”alert”>div</div>
<a href=”javascript:;” class=’alert’>a</a>
<b class=”alert”>b</b>
<script>
function WClassName(className){
if(document.getElementsByClassName){
return document.getElementsByClassName(className);
}else{
var tag= document.getElementsByTagName(“*”);
var lengths=tag.length;
var divs=[];
for (var i=0; i<lengths; i++) {
if(tag[i].className==className){
divs.push(tag[i])
}
}
return divs;
}
}
window.onload=function(){
var tagObj=WClassName(‘alert’);
for(var i=0,max=tagObj.length;i<max;i++){
tagObj[i].onclick=function(){
alert(this.tagName);
}
}
}
</script>
</body>
</html>

复制代码

方法2:
复制代码

<!doctype html>
<html lang=”en”>
<head>
<meta charset=”UTF-8″>
<title>alert标签名</title>
</head>
<body>
<div>div</div>
<a href=”javascript:;”>a</a>
<b>b</b>
<script>
function elementName(evt){
evt = evt|| window.event; // IE: window.event
// IE用srcElement获取事件源,而FF用target获取事件源
var selected = evt.target || evt.srcElement;
alert(selected.tagName);
}
window.onload = function(){
var el =document.getElementsByTagName(‘body’);
el[0].onclick = elementName;
}
</script>
</body>
</html>

复制代码
18.请指出以下代码的性能问题,并进行优化。
复制代码

var info=”淘家趣(www.taojiaqu.com)是一个关注潮流的资讯类购物网站。”;
info+=”提供新鲜好玩的家装资讯,电子科技,家趣产品。”;
info+=”精选的趣家商品,创意的家趣装修。”;
info+=”淘-趣家优品,享-生活乐趣。”;
info=info.split(“,”);
for(var i=0 in info){
alert(info[i]);
};

复制代码
更改后:

火狐测试后,平均时间块2-3毫秒,有可以改进的还望指出…

1.字符串相加效率比较慢

2.考虑到代码要的效果,可以用数组直接实现,省去 info.split()

复制代码

var info=new Array();
var info[0]=”淘家趣(www.taojiaqu.com)是一个关注潮流的资讯类购物网站。提供新鲜好玩的家装资讯”;
var info[1]=”电子科技,家趣产品。精选的趣家商品”;
var info[2]=”创意的家趣装修。淘-趣家优品”;
var info[3]=”淘-趣家优品,享-生活乐趣。”;
for(var i=0,max=info.length;i<max;i++){
alert(info[i]);
}

复制代码

19.请给出异步加载js方案,不少于两种。

默认情况javascript是同步加载的,也就是javascript的加载时阻塞的,后面的元素要等待javascript加载完毕后才能进行再加载,对于一些意义不是很大的javascript,如果放在页头会导致加载很慢的话,是会严重影响用户体验的。

1.defer(只支持IE)

<script type=”text/javascript” defer=”defer”>
alert(‘taojiaqu’);
</script>

2.async规定一旦脚本可用,则会异步执行,只适用于外部脚本

<script type=”text/javascript” src=”taojiaqu.js” async=”async”></script>

3.创建script,插入到DOM中,加载完毕后callBack
复制代码

<!doctype html>
<html lang=”en”>
<head>
<meta charset=”UTF-8″>
<title>alert标签名</title>
</head>
<body>
<script>
function loadScript(url, callback){
var script = document.createElement(“script”)
script.type = “text/javascript”;
if (script.readyState){ //IE
script.onreadystatechange = function(){
if (script.readyState == “loaded” || script.readyState == “complete”){
script.onreadystatechange = null;
callback();
}
};
} else { //Others: Firefox, Safari, Chrome, and Opera
script.onload = function(){
callback();
};
}
script.src = url;
document.body.appendChild(script);
}

loadScript('http://www.taojiaqu.com/resource/public/jquery/jquery-1.11.2.min.js',function(){
    alert('ok');
})
</script>

</body>
</html>

复制代码

20。请写出jquery绑定事件的方法,不少于两种。

.bind()是直接绑定在元素上

.live()则是通过冒泡的方式来绑定到元素上的。更适合列表类型的,绑定到document DOM节点上。和.bind()的优势是支持动态数据。(live由于性能原因已经被废弃)

.delegate()则是更精确的小范围使用事件代理,性能优于.live()

.on()则是最新的1.9版本整合了之前的三种方式的新事件绑定机制

1.无论使用bind、on、delegate、click(function())都是重复绑定,即绑定的同类型事件被放到一个事件队列中,依次执行,后绑定的事件不会替换之前绑定的,对于on使用off,delegate用undelegate,bind及click使用unbind来解除绑定,例如unbind(type)传递为事件类型,如果不传type则解出所有事件绑定;需要注意的是元素本身自带的事件无法unbind(如button1)

2.要绑定自定义事件,如’open’,以上函数都可以使用,但激活需要使用trigger

3.建议使用on函数
复制代码

$(‘.myClass’).on({
click:function(eleDom){
…do someting
},
dbclick:function(eleDom){
…do someting
}
})

复制代码

21.请设计一套方案,用于确保页面中js加载完全。
复制代码

<!doctype html>
<html lang=”en”>
<head>
<meta charset=”UTF-8″>
<title>alert标签名</title>
</head>
<body>
<script>
//加载完成后执行回调
function loadScript(url, callback){
var script = document.createElement(“script”)
script.type = “text/javascript”;
if (script.readyState){ //IE
script.onreadystatechange = function(){
if (script.readyState == “loaded” || script.readyState == “complete”){
script.onreadystatechange = null;
callback();
}
};
} else { //Others: Firefox, Safari, Chrome, and Opera
script.onload = function(){
callback();
};
}
script.src = url;
document.body.appendChild(script);
}

loadScript('http://www.taojiaqu.com/resource/public/jquery/jquery-1.11.2.min.js',function(){
    alert('ok');
})
</script>

</body>
</html>

复制代码
22.请优化某页面的加载速度。

1.JS、CSS、HTML做gzip压缩(不要对图片进行Gzip压缩)

2.删除js、css、html文件的注释,回车符,以及无效字节

3.javascript放置网页底部,避免阻塞下载

4.CSS放到header中,避免白屏

5.合并JS和CSS;压缩JS和CSS;

6.优化缓存:对没有变化的css、js,图片等网页元素,直接利用客户端的浏览器缓存读取来有效减少http请求数。

6.通过增加expires header(给文件加上关于过期时间的header报文)可以告诉浏览器,那些网页元素可以缓存和缓存多长时间。

7.采用CSS sprites(CSS Sprites其实就是把网页中一些背景图片整合到一张图片文件中)技术来实现。

8.把脚本和图片放在不同的服务器和域名,做成并行下载。

9.利用H5的缓存技术
23.对 string 对象进行扩展,使其具有删除前后空格的方法。

1.用prototype添加方法

String.prototype.trim=function(){
return this.replace(/(^\s)|(\s$)/g, “”);
}

2.利用 substring() 函数
复制代码

String.prototype.deletSpace = function(){
var str = this; //提取需要操作的字符串
while(str[0] == ” “){ //删除前面的空格
str = str.substring(1);
}
while(str[str.length – 1] == ” “){ //删除后面的空格
str = str.substring(0,str.length-1);
}
return str;
}

复制代码

方法还是有的,欢迎举例
24.完成一个正则表达式,验证用户是否输入正确的身份证号码

var string=’35021119920102353X’;
var stringExp=new RegExp(/^(\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$/);
alert(stringExp.test(string)); //true

//15位或18位,如果是15位,必需全是数字
//如果是18位,最后一位可以是数字或字母Xx,其余必需是数字

25.介绍一下CSS的盒子模型。

当IE6~8处于怪异模式下就会使用IE盒子模型,否则将使用W3C标准盒子模型
26.CSS选择符有哪些?哪些属性可以继承?优先级算法如何计算?CSS3新增伪类有哪些?

哪些元素可继承(网站找的,供参考;大致常用的都有了)

不可继承的:display、margin、border、padding、background、height、min-height、max- height、width、min-width、max-width、overflow、position、left、right、top、 bottom、z-index、float、clear、table-layout、vertical-align、page-break-after、 page-bread-before和unicode-bidi。

所有元素可继承:visibility和cursor。

内联元素可继承:letter-spacing、word-spacing、white-space、line-height、color、font、 font-family、font-size、font-style、font-variant、font-weight、text- decoration、text-transform、direction。

终端块状元素可继承:text-indent和text-align。

列表元素可继承:list-style、list-style-type、list-style-position、list-style-image。

表格元素可继承:border-collapse
优先级算法

1.选择器都有一个权值,权值越大越优先;

2.当权值相等时,后出现的样式表设置要优于先出现的样式表设置;

3.创作者的规则高于浏览者:即网页编写者设置的CSS 样式的优先权高于浏览器所设置的样式;

4.继承的CSS 样式不如后来指定的CSS 样式;

5.在同一组属性设置中标有“!important”规则的优先级最大;

css3伪类:
27.如何居中 DIV ?如何居中一个浮动元素?

//绝对定位,负边距(这种方式实际项目中不可以)
.div{width:200px;height: 200px;position:absolute;left:50%;top:50%;margin:-100px 0 0 -100px}

//父元素和子元素同时左浮动,然后父元素相对左移动50%,再然后子元素相对右移动50%,或者子元素相对左移动-50%也就可以了
.div{position: relative;left:50%;float: left;}
.con{width:200px;height: 200px;float:left;position:relative;right:50%;background: #000}

<div class=”div”><div class=”con”></div></div>

28.CSS3有哪些新特性?

新的选择器:上方题目有例子

特效:圆角,阴影,渐变,背景,边框背景,元素变形效果,动画,过渡
29.一个满屏 品 字布局 如何设计?
复制代码

<!doctype html>
<html lang=”en”>
<head>
<meta charset=”UTF-8″>
<title>alert标签名</title>
<style>*{margin:0;padding:0}
.top{position: absolute;top:0;bottom: 50%;background:red;width: 100%;}
.con{position: absolute;top:50%;bottom: 0;width: 100%;}
.left{position: absolute;left:0;top:0;height: 100%;width: 50%;background: #000}
.right{position: absolute;right:0;top:0;height: 100%;width: 50%;background: yellow}
</style>

</head>
<body>
<div class=”top”></div>
<div class=”con”>
<div class=”left”></div>
<div class=”right”></div>
</div>########
</body>
</html>

复制代码

效果:

30.经常遇到CSS的兼容性有哪些?原因,解决方法是什么?****

参考前一篇15题
31.为什么要初始化CSS样式

防止不同浏览器,对标签的默认样式设置不同…
32.absolute 的 containing block 计算方式跟正常流有什么不同?
33.position 跟 display、margin collapse、overflow、float 这些特征相互叠加后会怎么样?
34.对 BFC 规范的理解?

前端开发面试题2018|前端开发笔试面试题

赞(0)
前端开发者 » 2018Web前端开发面试题集锦
64K

评论 抢沙发

评论前必须登录!