2016年最新web前端程序员面试题

随着web前端开发的越来越火热,学习web前端开发的朋友也逐渐变多,学完之后面试web前端程序员(http://www.maiziedu.com/course/web-px/)时,面试官会提出一些面试题,那么面试官一般会问哪些前端开发面试题呢,小编整理了一份,仅供大家参考:

1. em  和 strong  的区别

em 表示强调,strong 表示更强烈的强调。言简意赅,表明了 em 和 strong 的命名来历。并且在浏览器中,em 默认用斜体表示,strong 用粗体表示

2.请用CSS实现按钮  不用图片

使用自定义字体编码

.next:before {

content: "\279C";

}

3.列出清除浮动方法,不使用新的标签

(1)父级div定义 伪类:after 和 zoom

.clearfloat:after{display:block;clear:both;content:"";visibility:hidden;height:0}

.clearfloat{zoom:1}

(2)父级div定义 overflow:hidden

.div1{background:#000080;border:1px solid red;/*解决代码*/width:98%;overflow:hidden}

(3)在需要清除浮动的元素中定义CSS属性:overflow:auto,即可!”zoom:1″用于兼容IE6。

4.常见BUG

双倍边距bug处理 IE6 时,另一个需要记住的事情是,如果在和浮动方向相同的方向上设置外边距(margin),会引发双倍边距。快速修正:给浮动设置 display:inline; 而且不用担心,它依然是块级元素。

3像素间距是指挨着浮动元素的文本会神奇的被踢出去3像素,好像浮动元素的周围有一个奇怪的力场一样。快速修正:在受影响的文本上设置宽度或高度。

IE7 中,底边距 bug是当浮动父元素有浮动子元素时,这些子元素的底边距会被父元素忽略掉。快速修正:用父元素的底内补白(padding)代替。

5.请用CSS3垂直居中固定宽度容器中一个未知宽高的元素

(1)

.wrap {

clear: both;

height: 300px;

background: red;

position: relative;

}

.box {

position: absolute;

background: blue;

text-align: center;

left: 0;

top: 50%;

width: 100%;

transform: translateY(-50%);

-webkit-transform: translateY(-50%);

}

(2)

.wrap {

clear: both;

height: 300px;

line-height: 300px;

background: red;

text-align: center;

padding: 10px;

font-size: 14px;

}

.box {

background: blue;

text-align: center;

display: inline-block;

vertical-align: middle;

line-height: 1.4rem;

}

(3)

display: -webkit-box;

-webkit-box-align: center;

-webkit-box-pack: center;

6.列出js基本数据类型,写出一个函数,传入数据,返回正确的数据类型

undefined - 如果变量是 Undefined 类型的

boolean - 如果变量是 Boolean 类型的

number - 如果变量是 Number 类型的

string - 如果变量是 String 类型的

var   gettype=Object.prototype.toString

var    utility={

isObj:function(o){

return    gettype.call(o)=="[object Object]";

},

isArray:function(o){

return    gettype.call(o)=="[object Array]";

},

isNULL:function(o){

return    gettype.call(o)=="[object Null]";

},

isDocument:function(){

return    gettype.call(o)=="[object Document]"|| [object HTMLDocument];

}

........

}

7.什么是跨域?解决跨域的方法有哪些?

一、通过jsonp跨域

在js中,我们直接用XMLHttpRequest请求不同域上的数据时,是不可以的。但是,在页面上引入不同域上的js脚本文件却是可以的,jsonp正是利用这个特性来实现的。

通过script标签引入一个js文件,这个js文件载入成功后会执行我们在url参数中指定的函数,并且会把我们需要的json数据作为参数传入。所以jsonp是需要服务器端的页面进行相应的配合的。

知道jsonp跨域的原理后我们就可以用js动态生成script标签来进行跨域操作了,而不用特意的手动的书写那些script标签。如果你的页面使用jquery,那么通过它封装的方法就能很方便的来进行jsonp操作了。

原理是一样的,只不过我们不需要手动的插入script标签以及定义回掉函数。jquery会自动生成一个全局函数来替换callback=?中的问号,之后获取到数据后又会自动销毁,实际上就是起一个临时代理函数的作用。$.getJSON方**自动判断是否跨域,不跨域的话,就调用普通的ajax方法;跨域的话,则会以异步加载js文件的形式来调用jsonp的回调函数。

2、通过修改document.domain来跨子域

浏览器都有一个同源策略,其限制之一就是第一种方法中我们说的不能通过ajax的方法去请求不同源中的文档。 它的第二个限制是浏览器中不同域的框架之间是不能进行js的交互操作的。有一点需要说明,不同的框架之间(父子或同辈),是能够获取到彼此的window对象的,但蛋疼的是你却不能使用获取到的window对象的属性和方法(html5中的postMessage方法是一个例外,还有些浏览器比如ie6也可以使用top、parent等少数几个属性),总之,你可以当做是只能获取到一个几乎无用的window对象。比如,有一个页面,它的地址是http://www.example.com/a.html  , 在这个页面里面有一个iframe,它的src是http://example.com/b.html, 很显然,这个页面与它里面的iframe框架是不同域的,所以我们是无法通过在页面中书写js代码来获取iframe中的东西的:

这个时候,document.domain就可以派上用场了,我们只要把http://www.example.com/a.html 和 http://example.com/b.html这两个页面的document.domain都设成相同的域名就可以了。但要注意的是,document.domain的设置是有限制的,我们只能把document.domain设置成自身或更高一级的父域,且主域必须相同。例如:a.b.example.com 中某个文档的document.domain可以设成a.b.example.com、b.example.com 、example.com中的任意一个,但是不可以设成 c.a.b.example.com,因为这是当前域的子域,也不可以设成baidu.com,因为主域已经不相同了。

在页面 http://www.example.com/a.html 中设置document.domain:

在页面 http://example.com/b.html 中也设置document.domain,而且这也是必须的,虽然这个文档的domain就是example.com,但是还是必须显示的设置document.domain的值:

这样我们就可以通过js访问到iframe中的各种属性和对象了。

不过如果你想在http://www.example.com/a.html 页面中通过ajax直接请求http://example.com/b.html 页面,即使你设置了相同的document.domain也还是不行的,所以修改document.domain的方法只适用于不同子域的框架间的交互。如果你想通过ajax的方法去与不同子域的页面交互,除了使用jsonp的方法外,还可以用一个隐藏的iframe来做一个代理。原理就是让这个iframe载入一个与你想要通过ajax获取数据的目标页面处在相同的域的页面,所以这个iframe中的页面是可以正常使用ajax去获取你要的数据的,然后就是通过我们刚刚讲得修改document.domain的方法,让我们能通过js完全控制这个iframe,这样我们就可以让iframe去发送ajax请求,然后收到的数据我们也可以获得了。

3、使用window.name来进行跨域

window对象有个name属性,该属性有个特征:即在一个窗口(window)的生命周期内,窗口载入的所有的页面都是共享一个window.name的,每个页面对window.name都有读写的权限,window.name是持久存在一个窗口载入过的所有页面中的,并不会因新页面的载入而进行重置。

我们看到在b.html页面上成功获取到了它的上一个页面a.html给window.name设置的值。如果在之后所有载入的页面都没对window.name进行修改的话,那么所有这些页面获取到的window.name的值都是a.html页面设置的那个值。当然,如果有需要,其中的任何一个页面都可以对window.name的值进行修改。注意,window.name的值只能是字符串的形式,这个字符串的大小最大能允许2M左右甚至更大的一个容量,具体取决于不同的浏览器,但一般是够用了。

上面的例子中,我们用到的页面a.html和b.html是处于同一个域的,但是即使a.html与b.html处于不同的域中,上述结论同样是适用的,这也正是利用window.name进行跨域的原理。

下面就来看一看具体是怎么样通过window.name来跨域获取数据的。还是举例说明。

比如有一个www.example.com/a.html页面,需要通过a.html页面里的js来获取另一个位于不同域上的页面www.cnblogs.com/data.html里的数据。

data.html页面里的代码很简单,就是给当前的window.name设置一个a.html页面想要得到的数据值。data.html里的代码:

那么在a.html页面中,我们怎么把data.html页面载入进来呢?显然我们不能直接在a.html页面中通过改变window.location来载入data.html页面,因为我们想要即使a.html页面不跳转也能得到data.html里的数据。答案就是在a.html页面中使用一个隐藏的iframe来充当一个中间人角色,由iframe去获取data.html的数据,然后a.html再去得到iframe获取到的数据。

充当中间人的iframe想要获取到data.html的通过window.name设置的数据,只需要把这个iframe的src设为www.cnblogs.com/data.html就行了。然后a.html想要得到iframe所获取到的数据,也就是想要得到iframe的window.name的值,还必须把这个iframe的src设成跟a.html页面同一个域才行,不然根据前面讲的同源策略,a.html是不能访问到iframe里的window.name属性的。这就是整个跨域过程。

4、使用HTML5中新引进的window.postMessage方法来跨域传送数据

window.postMessage(message,targetOrigin)  方法是html5新引进的特性,可以使用它来向其它的window对象发送消息,无论这个window对象是属于同源或不同源,目前IE8+、FireFox、Chrome、Opera等浏览器都已经支持window.postMessage方法。

调用postMessage方法的window对象是指要接收消息的那一个window对象,该方法的第一个参数message为要发送的消息,类型只能为字符串;第二个参数targetOrigin用来限定接收消息的那个window对象所在的域,如果不想限定域,可以使用通配符 *  。

需要接收消息的window对象,可是通过**自身的message事件来获取传过来的消息,消息内容储存在该事件对象的data属性中。

上面所说的向其他window对象发送消息,其实就是指一个页面有几个框架的那种情况,因为每一个框架都有一个window对象。在讨论第二种方法的时候,我们说过,不同域的框架间是可以获取到对方的window对象的,而且也可以使用window.postMessage这个方法。下面看一个简单的示例,有两个页面

使用postMessage来跨域传送数据还是比较直观和方便的,但是缺点是IE6、IE7不支持,所以用不用还得根据实际需要来决定。

时间: 2024-12-16 10:18:41

2016年最新web前端程序员面试题的相关文章

初级web前端程序员面试题整理

以下是收集的一些web前端工程师面试中经常会遇到的经典面试题以及自己面试过程中无法解决的问题,通过对知识的整理以及经验的总结,重新巩固自身的前端基础知识,如有错误或更好的答案,欢迎指正. HTML/CSS部分 1.什么是盒子模型? 在网页中,一个元素占有空间的 大小由几个部分构成,其中包括元素的内容(content),元素的内边距(padding),元素的边框(border),元素的外边距 (margin)四个部分.这四个部分占有的空间中,有的部分可以显示相应的内容,而有的部分只用来分隔相邻的区

2018年一名合格的web前端程序员应该会哪些技术

有朋友让小编说一说web前端在未来几年的发展趋向,对于这个问题,恕小编无能为力,web前端技术日新月异,更新非常快,谁也不能预料未来会发生些什么 小编也只能说在2018年,react native和jquery 的需求会减弱,ie10以下的兼容性要求显著降低,vr 有可能会归入前端技能树 为诸位总结了一些2018年web前端程序员应该掌握的前端技术,只有掌握了以下技术,才算一名合格的前端程序员 html, css, jQuery三者完全掌握,相信每个公司对于前端程序员都会有此要求,这些也是前端写

web前端程序员真的这么值钱吗?

对于互联网公司来说用户就是上帝,做好客户体验一切才有可能.所以互联网公司都会把钱砸向前端,Web前端程序员也越来越受到企业争相聘用. 前端工程师工资也越来越高,目前Web前端工程师工作1~2年后通常会成为Web前端高级软件工程师,年薪可以达到15万以上:工作3-5年后通常可以成为Web前端技术主管或者经理,年薪在15-50万之间:工作年限5年以上,通常会成为互联网公司的技术总监或产品经理,年薪将达到50万-100万之间. 但是web前端程序员真的这么值钱吗? 老大说: "我只要好人"

想要成为web前端程序员需要掌握哪些技能

Web前端开发工程师已经成为发展中的职业香馍馍.几乎整个互联网行业都缺Web前端工程师,无论是刚起步的创业公司,还是上市公司乃至巨头,空缺一样存在.Web前端开发早已不是做带动画的下拉菜单的时代了,他们已成为互联网主宰者,各行业都用其开发互联网应用,但目前整互联网行业的Web前端开发工程师紧俏,优秀的Web前端工程师简直比大熊猫还稀少.企业正高薪求才,薪资待遇一涨再涨!目前,Web前端如日中天,怎样成为一名优秀的Web前端程序员?本文,千锋重庆小编给你答案. 怎样成为一名优秀的Web前端程序员?

为什么我不想成为Web前端程序员

职位名称并不代表技能集 作为一个前端开发人员,你是不是认为自己不需要懂很多技能?然而事实可能并非如此. 我在一个热门的工作论坛就前端开发工作做了一个快速搜索,发现有一个主题经常反复出现,那就是成为中级/高级前端开发者需要什么技能: (X)HTML(5).CSS.SASS / SCSS,LESS. Backbone.Angular.Knockout. 响应式网页设计(例如Bootstrap知识.Foundation等). Adobe Photoshop.Magento. 源控制和某种形式的客户端单

如何成为合格的web前端程序员?只要学会这几点!

做了那么多年Web编程,仔细想想, 其实本质上就那点事儿, 你抓住了几个重点问题, 学起来一点都不难. 1. 理解浏览器/服务器结构 (B/S)B/S 是从 90年代的客户端/服务器端发展而来, 共同点都是由一个(或一组)服务器来服务多个客户端. 差别在于首先,C/S结构的客户端可能是由不同语言编写的,例如VB,Delphi, PowerBuilder等, B/S结构中浏览器成为了一个通用的客户端, 程序以Web的方式呈现,不需要安装,服务器端的升级就意味着所有客户端的升级,这和C/S相比是个翻

收集的WEB前端程序员需要的网站整理

前端学习资源实在是又多又广,在这样的一个知识的海洋里,我们像一块海绵一样吸收,想要快速提高效率,平时的总结不可缺少,以下总结了一些,排版自我感觉良好,推送出来. 一.插件类网站 jQuery插件库:http://www.jq22.com/ 最简单强大的插件框架:http://www.iopenworks.com/ jQuery之家:http://www.htmleaf.com/ 经典模块化前端开发框架:http://www.layui.com/ 进阶攻略|前端最全的框架总结:http://www

web前端开发程序员面试题集锦

随着web前端开发的越来越火热,学习web前端开发的朋友也逐渐变多,学完之后面试web前端程序员(http://www.maiziedu.com/course/web-px/)时,面试官会提出一些面试题,那么面试官一般会问哪些前端开发面试题呢,小编整理了一份,仅供大家参考: 1. em  和 strong  的区别 em 表示强调,strong 表示更强烈的强调.言简意赅,表明了 em 和 strong 的命名来历.并且在浏览器中,em 默认用斜体表示,strong 用粗体表示 2.请用CSS实

<转>程序员如何要薪水以及为什么前端程序员应该拿高薪

今天有个前同事联系到我,抱怨现在好的前端程序员很缺,正好前几天五一的时候看到 Twitter 上很多人公开讨论自己的薪资,有一些感触.大部分程序员,尤其是前端,每天都要关注技术进展,几乎没时间关心别的,性格往往也不善言辞,老实巴交,凡事先反思自己的技术水平,所以我打算写这篇文章谈论一下薪水问题,希望对别人有些帮助. 首先简单介绍一下个人情况:本人之前在北京工作五年,技术能力平平,没多少谈论薪水的经验,相比之下薪水一直不高,好在不太在乎薪水,也有时间想这些乱七八糟的问题.现在离开行业也已经近两年,