本文是一份非常不错的2014年web前端开发工程师的面试题集锦,并附有参考答案,推荐大家参考下。
试题目录:
面试注意点:
面试题目:根据你的等级和职位变化,入门级到专家级:范围↑、深度↑、方向↑。
题目类型:技术视野、项目细节、理论知识题,算法题,开放性题,案例题。
进行追问:可以确保问到你开始不懂或面试官开始不懂为止,这样可以大大延展题目的区分度和深度,知道你的实际能力。因为这种关联知识是长时期的学习,绝对不是临时记得住的。
回答问题再棒,面试官(可能是你的直接领导面试),会考虑我要不要这个人做我的同事?所以态度很重要。(感觉更像是相亲)
资深的工程师能把absolute和relative弄混,这样的人不要也罢,因为团队需要的你这个人具有可以依靠的才能(靠谱)。
试题大纲:
HTML&CSS:对Web标准的理解、浏览器内核差异、兼容性、hack、CSS基本功:布局、盒子模型、选择器优先级及使用、HTML5、CSS3、移动端适应
JavaScript:数据类型、面向对象、继承、闭包、插件、作用域、跨域、原型链、模块化、自定义事件、内存泄漏、事件机制、异步装载回调、模板引擎、Nodejs、JSON、ajax等。
其他:HTTP、安全、正则、优化、重构、响应式、移动端、团队协作、可维护、SEO、UED、架构、职业生涯
web前端工程师知识点:
1、DOM结构——两个节点之间可能存在哪些关系以及如何在节点之间任意移动。
2、DOM操作——如何添加、移除、移动、复制、创建和查找节点等。
3、事件——如何使用事件,以及IE和标准DOM事件模型之间存在的差别。
4、XMLHttpRequest——这是什么、怎样完整地执行一次GET请求、怎样检测错误。
5、严格模式与混杂模式——如何触发这两种模式,区分它们有何意义。
6、盒模型——外边距、内边距和边框之间的关系,及IE8以下版本的浏览器中的盒模型
7、块级元素与行内元素——怎么用CSS控制它们、以及如何合理的使用它们
8、浮动元素——怎么使用它们、它们有什么问题以及怎么解决这些问题。
9、HTML与XHTML——二者有什么区别,你觉得应该使用哪一个并说出理由。
10、JSON——作用、用途、设计结构。
Doctype作用严格模式与混杂模式如何区分?它们有何意义
用什么文档类型规范来解析这个文档。
(2)、严格模式的排版和JS运作模式是以该浏览器支持的最高标准运行。
(3)、在混杂模式中,页面以宽松的向后兼容的方式显示。模拟老式浏览器的行为以防止站点无法工作。
(4)、DOCTYPE不存在或格式不正确会导致文档以混杂模式呈现。
行内元素有哪些?块级元素有哪些?空(void)元素有那些?
(1)CSS规范规定,每个元素都有display属性,确定该元素的类型,每个元素都有默认的display值,
比如div默认display属性值为“block”,成为“块级”元素;
span默认display属性值为“inline”,是“行内”元素。
(2)行内元素有:abspanimginputselectstrong(强调的语气)
块级元素有:divulollidldtddh1h2h3h4…p
(3)知名的空元素:
鲜为人知的是:
iframe有那些缺点?
*iframe会阻塞主页面的Onload事件;
*iframe和主页面共享连接池,而浏览器对相同域的连接有限制,所以会影响页面的并行加载。
使用iframe之前需要考虑这两个缺点。如果需要使用iframe,最好是通过javascript
动态给iframe添加src属性值,这样可以可以绕开以上两个问题。
请描述一下cookies,sessionStorage和localStorage的区别?
cookie在浏览器和服务器间来回传递。sessionStorage和localStorage不会
sessionStorage和localStorage的存储空间更大;
sessionStorage和localStorage有更多丰富易用的接口;
sessionStorage和localStorage各自独立的存储空间;
如何实现浏览器内多个标签页之间的通信(阿里)
调用localstorge、cookies等本地存储方式
webSocket如何兼容低浏览器?(阿里)
AdobeFlashSocket、ActiveXHTMLFile(IE)、基于multipart编码发送XHR、基于长轮询的XHR
介绍一下CSS的盒子模型?
(1)有两种,IE盒子模型、标准W3C盒子模型;IE的content部分包含了border和pading;
(2)盒模型:内容(content)、填充(padding)、边界(margin)、边框(border).
CSS选择符有哪些?哪些属性可以继承?优先级算法如何计算?CSS3新增伪类有那些?
*1.id选择器(#myid)
2.类选择器(.myclassname)
3.标签选择器(div,h1,p)
4.相邻选择器(h1+p)
5.子选择器(ul
6.后代选择器(lia)
7.通配符选择器(*)
8.属性选择器(a[rel="external"])
9.伪类选择器(a:hover,li:nth-child)
*可继承的样式:font-sizefont-familycolor,ULLIDLDDDT;
*不可继承的样式:borderpaddingmarginwidthheight;
*优先级就近原则,同权重情况下样式定义最近者为准;
*载入样式以最后载入的定位为准;
优先级为:
!important>id>class>tag
important比内联优先级高
CSS3新增伪类举例:
p:first-of-type选择属于其父元素的首个
元素的每个
元素。
p:last-of-type选择属于其父元素的最后
元素的每个
元素。
p:only-of-type选择属于其父元素唯一的
元素的每个
元素。
p:only-child选择属于其父元素的唯一子元素的每个
元素。
p:nth-child(2)选择属于其父元素的第二个子元素的每个
元素。
:enabled:disabled控制表单控件的禁用状态。
:checked单选框或复选框被选中。
如何居中div?如何居中一个浮动元素?
给div设置一个宽度,然后添加margin:0auto属性
div{
width:200px;
margin:0auto;
居中一个浮动元素
确定容器的宽高宽500高300的层
设置层的外边距
.div{
Width:500px;height:300px;//高度可以不设
Margin:-150px00-250px;
position:relative;相对定位
//方便看效果
left:50%;
top:50%;
列出display的值,说明他们的作用。position的值,relative和absolute定位原点是?
1.
block象块类型元素一样显示。
none缺省值。象行内元素类型一样显示。
inline-block象行内元素一样显示,但其内容象块类型元素一样显示。
list-item象块类型元素一样显示,并添加样式列表标记。
2.
*absolute
生成绝对定位的元素,相对于static定位以外的第一个父元素进行定位。
*fixed(老IE不支持)
生成绝对定位的元素,相对于浏览器窗口进行定位。
*relative
生成相对定位的元素,相对于其正常位置进行定位。
*static默认值。没有定位,元素出现在正常的流中
*inherit规定从父元素继承position属性的值。
CSS3有哪些新特性?
CSS3实现圆角(border-radius:8px),阴影(box-shadow:10px),
对文字加特效(text-shadow、),线性渐变(gradient),旋转(transform)
transform:rotate(9deg)scale(0.85,0.90)translate(0px,-30px)skew(-9deg,0deg);//旋转,缩放,定位,倾斜
增加了更多的CSS选择器多背景rgba
一个满屏品字布局如何设计
经常遇到的CSS的兼容性有哪些?原因,解决方法是什么?
为什么要初始化CSS样式。
-因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面显示差异。
-当然,初始化样式会对SEO有一定的影响,但鱼和熊掌不可兼得,但力求影响最小的情况下初始化。
*最简单的初始化方法就是:*{padding:0;margin:0;}(不建议)
淘宝的样式初始化:
body,h1,h2,h3,h4,h5,h6,hr,p,blockquote,dl,dt,dd,ul,ol,li,pre,form,fieldset,legend,button,input,textarea,th,td{margin:0;padding:0;}
body,button,input,select,textarea{font:12px/1.5tahoma,arial,\5b8b\4f53;}
h1,h2,h3,h4,h5,h6{font-size:100%;}
address,cite,dfn,em,var{font-style:normal;}
code,kbd,pre,samp{font-family:couriernew,courier,monospace;}
small{font-size:12px;}
ul,ol{list-style:none;}
a{text-decoration:none;}
a:hover{text-decoration:underline;}
sup{vertical-align:text-top;}
sub{vertical-align:text-bottom;}
legend{color:#000;}
fieldset,img{border:0;}
button,input,select,textarea{font-size:100%;}
table{border-collapse:collapse;border-spacing:0;}
absolute的containingblock计算方式跟正常流有什么不同?
position跟display、margincollapse、overflow、float这些特性相互叠加后会怎么样?
对BFC规范的理解?
(W3CCSS2.1规范中的一个概念,它决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用。)
css定义的权重
以下是权重的规则:标签的权重为1,class的权重为10,id的权重为100,以下例子是演示各种定义的权重值:
/*权重为1*/
/*权重为10*/
.class1{
/*权重为100*/
#id1{
/*权重为100+1=101*/
#id1div{
/*权重为10+1=11*/
.class1div{
/*权重为10+10+1=21*/
.class1.class2div{
如果权重相同,则最后定义的样式会起作用,但是应该避免这种情况出现
解释下浮动和它的工作原理?清除浮动的技巧
用过媒体查询,针对移动端的布局吗?
使用CSS预处理器吗?喜欢那个?
SASS
多数显示器默认频率是60Hz,即1秒刷新60次,所以理论上最小间隔为1/60*1000ms=16.7ms
display:inline-block什么时候会显示间隙?(携程)
移除空格、使用margin负值、使用font-size:0、letter-spacing、word-spacing
JavaScript原型,原型链有什么特点?
eval是做什么的?
它的功能是把对应的字符串解析成JS代码并运行;
应该避免使用eval,不安全,非常耗性能(2次,一次解析成js语句,一次执行)。
null,undefined的区别?
写一个通用的事件侦听器函数。
markyun.Event={
//页面加载完成后
readyEvent:function(fn){
if(fn==null){
fn=document;
varoldonload=window.onload;
if(typeofwindow.onload!='function'){
window.onload=fn;
}else{
window.onload=function(){
oldonload();
fn();
};
},
//视能力分别使用dom0||dom2||IE方式来绑定事件
//参数:操作的元素,事件名称,事件处理程序
addEvent:function(element,type,handler){
if(element.addEventListener){
//事件类型、需要执行的函数、是否捕捉
element.addEventListener(type,handler,false);
}elseif(element.attachEvent){
element.attachEvent('on'+type,function(){
handler.call(element);
});
element['on'+type]=handler;
//移除事件
removeEvent:function(element,type,handler){
if(element.removeEnentListener){
element.removeEnentListener(type,handler,false);
}elseif(element.datachEvent){
element.detachEvent('on'+type,handler);
element['on'+type]=null;
//阻止事件(主要是事件冒泡,因为IE不支持事件捕获)
stopPropagation:function(ev){
if(ev.stopPropagation){
ev.stopPropagation();
ev.cancelBubble=true;
//取消事件的默认行为
preventDefault:function(event){
if(event.preventDefault){
event.preventDefault();
event.returnValue=false;
//获取事件目标
getTarget:function(event){
returnevent.target||event.srcElement;
//获取event对象的引用,取到事件的所有信息,确保随时能使用event;
getEvent:function(e){
varev=e||window.event;
if(!ev){
varc=this.getEvent.caller;
while(c){
ev=c.arguments[0];
if(ev&&Event==ev.constructor){
break;
c=c.caller;
returnev;
Node.js的适用场景?
高并发、聊天、实时消息推送
介绍js的基本数据类型。
number,string,boolean,object,undefined
Javascript如何实现继承?
通过原型和构造器
["1","2","3"].map(parseInt)答案是多少?
[1,NaN,NaN]因为parseInt需要两个参数(val,radix)但map传了3个(element,index,array)
如何创建一个对象(画出此对象的内存图)
functionPerson(name,age){
this.name=name;
this.age=age;
this.sing=function(){alert(this.name)}
谈谈This对象的理解。
this是js的一个关键字,随着函数使用场合不同,this的值会发生变化。
但是有一个总原则,那就是this指的是调用函数的那个对象。
this一般情况下:是全局对象Global。作为方法调用,那么this就是指这个对象
事件是?IE与火狐的事件机制有什么区别?如何阻止冒泡?
1.我们在网页中的某个操作(有的操作对应多个事件)。例如:当我们点击一个按钮就会产生一个事件。是可以被JavaScript侦测到的行为。
2.事件处理机制:IE是事件冒泡、火狐是事件捕获;
3.ev.stopPropagation();
什么是闭包(closure),为什么要用它?
执行say667()后,say667()闭包内部变量会存在,而闭包内部函数的内部变量不会存在.使得Javascript的垃圾回收机制GC不会收回say667()所占用的资源,因为say667()的内部函数的执行需要依赖say667()中的变量。这是对闭包作用的非常直白的描述.
functionsay667(){
//Localvariablethatendsupwithinclosure
varnum=666;
varsayAlert=function(){alert(num);}
num++;
returnsayAlert;
varsayAlert=say667();
sayAlert()//执行结果应该弹出的667
"usestrict";是什么意思使用它的好处和坏处分别是什么?
如何判断一个对象是否属于某个类?
使用instanceof(待完善)
if(ainstanceofPerson){
alert('yes');
new操作符具体干了什么呢
1、创建一个空对象,并且this变量引用该对象,同时还继承了该函数的原型。
2、属性和方法被加入到this引用的对象中。
3、新创建的对象由this所引用,并且最后隐式的返回this。
varobj={};
obj.__proto__=Base.prototype;
Base.call(obj);
Javascript中,有一个函数,执行时对象查找时,永远不会去查找原型,这个函数是?
hasOwnProperty
JSON的了解?
JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。
它是基于JavaScript的一个子集。数据格式简单,易于读写,占用带宽小
{'age':'12','name':'back'}
js延迟加载的方式有哪些?
defer和async、动态创建DOM方式(用得最多)、按需异步载入js
ajax是什么
同步和异步的区别
如何解决跨域问题
jsonp、iframe、window.name、window.postMessage、服务器上设置代理页面
模块化怎么做?
立即执行函数,不暴露私有成员
varmodule1=(function(){
var_count=0;
varm1=function(){
//...
varm2=function(){
return{
m1:m1,
m2:m2
})();
AMD(Modules/Asynchronous-Definition)、CMD(CommonModuleDefinition)规范区别?
异步加载的方式有哪些?
(1)defer,只支持IE
(2)async:
(3)创建script,插入到DOM中,加载完毕后callBack
documen.write和innerHTML的区别
document.write只能重绘整个页面
innerHTML可以重绘页面的一部分
.call()和.apply()的区别?
例子中用add来替换sub,add.call(sub,3,1)==add(3,1),所以运行结果为:alert(4);
注意:js中的函数其实是对象,函数名是对Function对象的引用。
functionadd(a,b)
{
alert(a+b);
functionsub(a,b)
alert(a-b);
add.call(sub,3,1);
Jquery与jQueryUI有啥区别?
*jQuery是一个js库,主要提供的功能是选择器,属性修改和事件绑定等等。
*jQueryUI则是在jQuery的基础上,利用jQuery的扩展性,设计的插件。
提供了一些常用的界面元素,诸如对话框、拖动行为、改变大小行为等等
JQuery的源码看过吗?能不能简单说一下它的实现原理?
jquery中如何将数组转化为json字符串,然后再转化回来?
jQuery中没有提供这个功能,所以你需要先编写两个jQuery的扩展:
$.fn.stringifyArray=function(array){
returnJSON.stringify(array)
$.fn.parseArray=function(array){
returnJSON.parse(array)
然后调用:
$("").stringifyArray(array)
针对jQuery的优化方法?
*基于Class的选择性的性能相对于Id选择器开销很大,因为需遍历所有DOM元素。
*频繁操作的DOM,先缓存起来再操作。用Jquery的链式调用更好。
*for(vari=size;i for循环每一次循环都查找了数组(arr)的.length属性,在开始循环的时候设置一个变量来存储这个数字,可以让循环跑得更快: for(vari=size,length=arr.length;i 如何编写高性能的Javascript? 那些操作会造成内存泄漏? 内存泄漏指任何对象在您不再拥有或需要它之后仍然存在。 垃圾回收器定期扫描对象,并计算引用了每个对象的其他对象的数量。如果一个对象的引用数量为0(没有其他对象引用过该对象),或对该对象的惟一引用是循环的,那么该对象的内存即可回收。 setTimeout的第一个参数使用字符串而非函数的话,会引发内存泄漏。 闭包、控制台日志、循环(在两个对象彼此引用且彼此保留时,就会产生一个循环) JQuery一个对象可以同时绑定多个事件,这是如何实现的? 如何判断当前脚本运行在浏览器还是node环境中?(阿里) 通过判断Global对象是否为window,如果不为window,当前脚本没有运行在浏览器中 你遇到过比较难的技术问题是?你是如何解决的? 常使用的库有哪些?常用的前端开发工具?开发过什么应用或组件? 页面重构怎么操作? 列举IE与其他浏览器不一样的特性? 99%的网站都需要被重构是那本书上写的? 什么叫优雅降级和渐进增强? 之前在看一些css3效果demo的时候,发现有些写css3属性时,兼容性的写法顺序不太一样,比如transition属性,有些把transition放在前面有些是放在后面,当然这也有可能包含了coder个人的习惯或是强迫性,比如下面这两种: .transition{ -webkit-transition:all.5s; -moz-transition:all.5s; -o-transition:all.5s; transition:all.5s; transition:all.5s;-o-transition:all.5s; 带前缀的排列应该只是为了整齐吧(还是代表了对浏览器的喜好程度)?但是transition放在前面还是后面却引申了两个概念:优雅降级和渐进增强。 什么是渐进增强(progressiveenhancement)、优雅降级(gracefuldegradation)呢? 渐进增强progressiveenhancement:针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。 优雅降级gracefuldegradation:一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。 区别:优雅降级是从复杂的现状开始,并试图减少用户体验的供给,而渐进增强则是从一个非常基础的,能够起作用的版本开始,并不断扩充,以适应未来环境的需要。降级(功能衰减)意味着往回看;而渐进增强则意味着朝前看,同时保证其根基处于安全地带。 “优雅降级”观点 “优雅降级”观点认为应该针对那些最高级、最完善的浏览器来设计网站。而将那些被认为“过时”或有功能缺失的浏览器下的测试工作安排在开发周期的最后阶段,并把测试对象限定为主流浏览器(如IE、Mozilla等)的前一个版本。 “渐进增强”观点 内容是我们建立网站的诱因。有的网站展示它,有的则收集它,有的寻求,有的操作,还有的网站甚至会包含以上的种种,但相同点是它们全都涉及到内容。这使得“渐进增强”成为一种更为合理的设计范例。这也是它立即被Yahoo!所采纳并用以构建其“分级式浏览器支持(GradedBrowserSupport)”策略的原因所在。 WEB应用从服务器主动推送Data到客户端有那些方式? 对Node的优点和缺点提出了自己的看法? *(优点)因为Node是基于事件驱动和无阻塞的,所以非常适合处理并发请求, 因此构建在Node上的代理服务器相比其他技术实现(如Ruby)的服务器表现要好得多。 此外,与Node代理服务器交互的客户端代码是由javascript语言编写的, 因此客户端和服务器端都用同一种语言编写,这是非常美妙的事情。 *(缺点)Node是一个相对新的开源项目,所以不太稳定,它总是一直在变, 而且缺少足够多的第三方库支持。看起来,就像是Ruby/Rails当年的样子。 你有哪些性能优化的方法? (看雅虎14条性能优化原则)。 (2)前端模板JS+数据,减少由于HTML标签导致的带宽浪费,前端用变量保存AJAX请求结果,每次操作本地变量,不用请求,减少请求次数 (3)用innerHTML代替DOM操作,减少DOM操作次数,优化javascript性能。 (4)当需要设置的样式很多时设置className而不是直接操作style。 (5)少用全局变量、缓存DOM节点查找的结果。减少IO读取操作。 (6)避免使用CSSExpression(css表达式)又称Dynamicproperties(动态属性)。 (8)避免在页面的主体布局中使用table,table要等其中的内容完全下载之后才会显示出来,显示比div+css布局慢。 100-199用于指定客户端应相应的某些动作。 200-299用于表示请求成功。 300-399用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。 400-499用于指出客户端的错误。4001、语义有误,当前请求无法被服务器理解。401当前请求需要用户验证403服务器已经理解请求,但是拒绝执行它。 500-599用于支持服务器错误。503–服务不可用 一个页面从输入URL到页面加载显示完成,这个过程中都发生了什么?(流程说的越详细越好) 查找浏览器缓存 DNS解析、查找该域名对应的IP地址、重定向(301)、发出第二个GET请求 进行HTTP协议会话 客户端发送报头(请求报头) 服务器回馈报头(响应报头) html文档开始下载 文档树建立,根据标记请求所需指定MIME类型的文件 文件显示 [ 浏览器这边做的工作大致分为以下几步: 加载:根据请求的URL进行域名解析,向服务器发起请求,接收文件(HTML、JS、CSS、图象等)。 解析:对加载到的资源(HTML、JS、CSS等)进行语法解析,建议相应的内部数据结构(比如HTML的DOM树,JS的(对象)属性表,CSS的样式规则等等) 除了前端以外还了解什么其它技术么?你最最厉害的技能是什么? 你常用的开发工具是什么,为什么? sublime 2012年6月26日推出新版本的SublimeText2.0,与之前版本相比主要有较大的改善:支持Retina视网膜屏、快速跳到下一个、文本拖放、改善构建系统、CSS自动完成和高亮设置等。 GBKtoUTF8 zenCoding zenCoding是一种快速的html、css编写方式。默认用tab键. 已经更名为Emmet。 JSFormat 一个JS代码格式化插件。默认ctrl+alt+f BracketHighlighter 括弧高亮插件,清晰明了 Git 代码版本管理 对前端界面工程师这个职位是怎么样理解的?它的前景会怎么样? 前端是最贴近用户的程序员,比后端、数据库、产品经理、运营、安全都近。 1、实现界面交互 2、提升用户体验 3、有了Node.js,前端可以实现服务端的一些事情 前端是最贴近用户的程序员,前端的能力就是能让产品从90分进化到100分,甚至更好, 参与项目,快速高质量完成实现效果图,精确到1px; 与团队成员,UI设计,产品经理的沟通; 做好的页面结构,页面重构和用户体验; 处理hack,兼容、写出优美的代码格式; 针对服务器的优化、拥抱最新前端技术。 加班的看法? 加班就像借钱,原则应当是------救急不救穷 平时如何管理你的项目? 先期团队必须确定好全局样式(globe.css),编码模式(utf-8)等; 编写习惯必须一致(例如都是采用继承式的写法,单样式都写成一行); 标注样式编写人,各模块都及时标注(标注关键样式调用的地方); 页面进行标注(例如页面模块开始和结束); CSS跟HTML分文件夹并行存放,命名都得统一(例如style.css); JS分文件夹存放命名以该JS功能为准的英文翻译。 图片采用整合的images.pngpng8格式文件使用尽量整合在一起使用方便将来的管理 如何设计突发大规模并发架构? 说说最近最流行的一些东西吧?常去哪些网站? Node.js、Mongodb、npm、MVVM、MEAN、three.js 移动端(AndroidIOS)怎么做好用户体验 清晰的视觉纵线、信息的分组、极致的减法、 利用选择代替输入、标签及文字的排布方式、 依靠明文确认密码、合理的键盘利用、 你在现在的团队处于什么样的角色,起到了什么明显的作用? 你认为怎样才是全端工程师(FullStackdeveloper)? 介绍一个你最得意的作品吧? 你的优点是什么?缺点是什么? 如何管理前端团队 最近在学什么?能谈谈你未来3,5年给自己的规划吗? 想问公司的问题? 问公司问题: 前端团队如何工作的(实现一个产品的流程)? 公司的薪资结构是什么样子的? Web开发工程师笔试题(js) 本文为大家整理的是几道Web开发工程师笔试题(js方向),感兴趣的同学参考下。 1,判断字符串是否是这样组成的,第一个必须是字母,后面可以是字母、数字、下划线,总长度为5-20 varreg=/^[a-zA-Z][a-zA-Z_0-9]{4,19}$/; reg.test("a1a__a1a__a1a__a1a__"); 2,截取字符串abcdefg的efg varstr="abcdefg"; if(/efg/.test(str)){ varefg=str.substr(str.indexOf("efg"),3); alert(efg); 3,判断一个字符串中出现次数最多的字符,统计这个次数 //将字符串的字符保存在一个hashtable中,key是字符,value是这个字符出现的次数 varstr="abcdefgaddda"; for(vari=0,l=str.length;i varkey=str[i]; if(!obj[key]){ obj[key]=1; obj[key]++; /*遍历这个hashtable,获取value最大的key和value*/ varmax=-1; varmax_key=""; varkey; for(keyinobj){ if(max javascript工程师笔试试题 本文为大家整理的是一份javascript工程师笔试试题,感兴趣的同学参考下。 一、单选题 1、以下哪条语句会产生运行错误:(a) A.varobj=();//语法错误 B.varobj=[];//创建数组 C.varobj={};//创建对象 D.varobj=//; 原因:varobj=newArray();是对的;JavaScript中大括号默示创建对象。varobj={id:1,name:"jacky"};alert(obj.name);上例默示创建一个具有属性id(值为1)、属性name(值为jacky)的对象。属性名称可以用引号引起来成"id"、"name",也可以不引。 当然除了属性,也可以创建办法。 实验代码 /*window.onload=function() //varobj=(); varobj1=[];//object varobj2={};//object varobj3=//;//undefine alert(typeof(obj1)); alert(typeof(obj2)); alert(typeof(obj3)); }*/ functionshowName() alert(this.name); varobj={id:1,name:"jacky",showName:showName}; obj.showName(); 运行成果是jacky 2、以下哪个单词不属于javascript保存字:(b) A.with B.parent C.class D.void 以下的保存字不成以用作变量,函数名,对象名等,此中有的保存字是为今后JAVASCRIPT扩大用的. ·abstract ·boolean ·break ·byte ·case ·catch ·char ·class ·const ·continue ·default ·do ·double ·else ·extends ·false ·final ·finally ·float ·for ·function ·goto ·if ·implements ·import ·in ·instanceof ·int ·interface ·long ·native ·new ·null ·package ·private ·protected ·public ·return ·short ·static ·super ·switch ·synchronized ·this ·throw ·throws ·transient ·true ·try ·var ·void ·while ·with 3、请选择成果为真的表达式:(c) A.nullinstanceofObject(if(!(nullinstanceofObject))是真的) B.null===undefined C.null==undefined D.NaN==NaN(false) (1)null确切可以懂得为原始类型,不克不及当Object懂得! null,int,float.....等这些用关键字默示的类型,都不属于Object. 至于可以把null作为参数,只是特别规定罢了. 可以这么懂得: 对象的引用代表的是一个内存的值,null是一个空引用,可以懂得为内存的值为0;按这个意思对代码 (2)functionf1(){ 1.alert(f1instanceofFunction);//true 2.alert(f1instanceofObject);//true 3.alert(FunctioninstanceofObject);//true 4.alert(ObjectinstanceofFunction);//true Function是Object的实例,Object又是Function的实例 Function是函数的机关函数,而Object也是函数,Function自身也是函数 Object.prototype是一切原型链的顶点,instanceof会查找全部原型链 window.onload=function() if(NaN==NaN) alert("ddd"); 不会alert因为NaN==NaNisfalseandasloNaN==""NaN""isfalse 二、不定项选择题 4、请选择对javascript懂得有误的:(abcd) A.JScript是javascript的简称 B.javascript是网景公司开辟的一种Java脚本说话,其目标是为了简化Java的开起事度 C.FireFox和IE存在多量兼容性题目的首要原因在于他们对javascript的支撑不合上 D.AJAX技巧必然要应用javascript技巧 5、foo对象有att属性,那么获取att属性的值,以下哪些做法是可以的:() A.foo.att B.foo(“att”) C.foo[“att”] D.foo{“att”} E.foo[“a”+”t”+”t”] 6、在不指定特别属性的景象下,哪几种HTML标签可以手动输入文本:() 7、以下哪些是javascript的全局函数:(abc) A.escape B.parseFloat C.eval D.setTimeout E.alert 8、关于IFrame表述正确的有:(abcd) A.经由过程IFrame,网页可以嵌入其他网页内容,并可以动态更改 B.在雷同域名下,内嵌的IFrame可以获取外层网页的对象 C.在雷同域名下,外层网页脚本可以获取IFrame网页内的对象 D.可以经由过程脚本调剂IFrame的大小 9、关于表格表述正确的有:(abcde) A.表格中可以包含TBODY元素 B.表格中可以包含CAPTION元素 C.表格中可以包含多个TBODY元素 D.表格中可以包含COLGROUP元素 E.表格中可以包含COL元素 10、关于IE的window对象表述正确的有:(acd) A.window.opener属性本身就是指向window对象 B.window.reload()办法可以用来刷新当前页面 D.定义了全局变量g;可以用window.g的体式格式来存取该变量 三、问答题: 1、谈谈javascript数组排序办法sort()的应用,重点介绍sort()参数的应用及其内部机制 sort的实现的功能类似JAVA的斗劲器,数据排序从数组的第一维开端排序 可以本身定义排序办法,很不久不多的函数 2、简述DIV元素和SPAN元素的差别。 DIV有回车,SPAN没有 3、连络text这段布局,谈谈innerHTMLouterHTMLinnerText之间的差别。 innerHTML对象里面的HTML,outerHTML包含对象和里面的HTML innerText对象里面的文本 4、说几条XHTML规范的内容(至少3条) 属性加引号,不克不及有不匹配的标签,加定义 5、对Web标准化(或网站重构)知道哪些相干的常识,简述几条你知道的Web标准 网页首要由三项目组构成:布局(Structure)、发挥解析(Presentation)和行动(Behavior)。对应的网站标准也分三方面:布局化标准说话,首要包含XHTML和XML;发挥解析标准说话首要包含CSS;行动标准首要包含对象模型(如W3CDOM)、ECMAScript等。 互联网公司web前端工程师笔试题目汇总 随着各大互联网公司设立了web前端开发工程师、设计工程师等职位,web前端越来越得到互联网企业的认可。而且其重视程度与地位也随着浏览器端的富客户端的体现而日益提高。眼前对html5的未来和走向,业内的预测是会和flash、silverlight等相结合,从而取代传统的客户端应用程序。而实现这个目标的客户端核心工作是有web前端工程师来完成的。从另一个角度,对于web产品来说,交互和用户体验是产品的第一价值,这部分价值的体现就是在web前端。可以说web前端是一个web产品的长相和谈吐、行为。 下面就简单的说明一下web前端的组成部分。 1.ui设计部分 这是web产品化的第一步。这个部分通常在稍大型的公司里,被单独设立为一个部门或者一些人来工作。主要是要掌握photo,ai,可以很快的将创意转化为平面设计图,并制作png等小图片。同时,ui设计还要预包含用户交互设计的元素,如何和用户交互的基本原型等。 2.html/css,页面静态化 这是web产品化的2步,就是将ui设计师的设计图切成静态页面。这里的“切”不是单纯的切,而是使用css里面背景色和边框样式等方式对设计原稿进行解读,并形成符合web标准的html代码。这里web前端还需要将图片、html页面以及css样式进行合理的文件分布安排等 3.javascript,as客户端动态化 这是web产品化的3步,工程师使用dom操作、ajax,实现数据和服务端的通信以及本地样式的切换。同时,由于javascript、as是一门动态语言,所以这部分的编码要求web前端工程师有较好的编码习惯,能写高效率的oop代码,并对代码进行压缩上线以降低带宽消耗等。 4.flash、silverlight、video多媒体化 这部分针对不同web产品有不同的要求,通常要求是可以使用flash和web、server进行交互,并对flash进行设计与开发。 5.php、java等cgi,服务端通信基本知识和编码 这部分主要是更好的使用ajax等技术,了解服务端的工作方式将更有利于web前端工程师工作的开展。通常优秀的web前端工程师都是对服务端的一种开发语言很了解。 下面是webryan整理的百度web前端笔试和面试的一些题目和过程,提供给大家借鉴。 百度web前端笔试试卷上的题目: 1.判断字符串是否是这样组成的,第一个必须是字母,后面可以是字母、数字、下划线,总长度为5-20 2.截取字符串abcdefg的efg 3.让一个input的背景颜色变成红色 4。给一个页面,写htmlcss 5。div的高宽等于浏览器可见区域的高宽,浏览器滚动,div始终覆盖浏览器的整个可见区域 6。判断一个字符串中出现次数最多的字符,统计这个次数 7。ie与ff脚本兼容性问题 又重新问的是1,4,6,7,这次问出题者的意图,并且让给出7的更多答案,以及ieff不兼容的原因 然后看了看简历,没有问简历上的项目,而是让自己随便谈谈 1对于web客户端技术未来趋势发展谈谈看法 javascript+ajax=ria adobeflashas3 flex sliveright 2web开发团队人员应该如何分工协作 布局css脚本 比如脚本人员长期的积累可能铸造类型yui这样的产品级脚本库(亮点) 3web开发曾经的团队有没有别人遇到问题,什么问题,向你请教 4如果要实习,什么时候可以 5自己在开发的过程中遇到什么问题,谈谈看法 6web开发脚本开发环境用什么、调试用什么 试过aptana,现在就用editplus 调试肯定用firebug,ie下看页面dom用ieinspector 7如果有个新技术,现在需要掌握,你会怎么做 新技术的发现我一般是通过rss工具,比如我用googlereader 每天有半个小时左右在看最新的资讯、技术走向 发现新技术,首先有个大概了解,如果有深入的必要 我一般会看他的官网,比如jquery,我会搜索到www.jquery.com,然后看docs、samples 如果要用到项目中,有困难的问题,我会svn得到最新的这个技术的源码,深入跟踪进去,看实现原理 一般现在涌现的技术都是opensource 1百度web开发脚本是否有做类似yui库的打算 2百度web开发工程师打算招多少人 首先是自我介绍 然后谈谈做的web项目 然后开始问技术问题 前端开发的优化问题 答: 产品发布时,js的压缩,即函数名替换、整个文件压缩成一行 css开发的时候注释写清楚,先有个base.css,然后根据不同页面需要再加css,发布的时候将css中的一个定义写成一行,目的是压缩文件大小 最终发布的时候甚至可以将css,js分别压缩成一个文件,甚至css、js通过技巧压缩到一个里边(亮点) web前端产品的开发流程 答:首先根据产品的定位、用户群,确定配色,然后纸上设计整体布局,然后png或者psd出效果图,切出需要的小图片,然后手写代码div+css构造出页面,然后根据功能写脚本 规避javascript多人开发函数重名问题 答:首先是通过命名规范,比如根据不同的开发人员实现的功能,在函数名加前缀,虽然函数名看起来复杂,发布的时候还是可以替换,从而优化。 还有一种办法是,每个开发人员都把自己的函数封装到类中,然后调用的时候即使函数名相同,但是因为是要类.函数名来调用,所以也减少了重复的可能性。 javascript面向对象中继承实现 答:我是用prototype.jsextend.js扩展 然后子类中parent.initialize()… 答的不好 正确答案: //1.构造器 functionanimal(){}; functionmammal(){}; functioncanine(){}; functiondog(){}; //2.原型链表 mammal.prototype=newanimal(); canine.prototype=newmammal(); dog.prototype=newcanine(); prototype.js实现的基本原理 答: 将功能封装 比如ajax.request,还是有判断浏览器的代码;position这样的实现页面元素位置的计算 prototye太大,如果一个页面功能不需要这样的,自己实现,怎么做 答:首先页面、css、脚本分离之后,脚本中将整个模块功能写成一个类vardo={} 其中初始化函数init:function(){},然后最后做do.init() 其中init会对页面上form中需要交互的元素绑定事件,比如$(’input1′).onclick=function(){} ie、ff下面脚本的区别 1.ie有outerhtml,ff没有 2.页面元素id,ie可以直接取,ff必须document.getelementbyid() ff下面实现outerhtml 答:.parenet.firstchild.parent.innerhtml 这个没答好 正确答案:原理是,get:取到这个标签的tagname,然后属性循环构造成这个标签的属性 set:把字符串用insertbefore插入到这个元素前面,然后removechild这个元素 ie、ff下面css的解释区别 1.png透明背景,ff下面没有问题,ie需要用滤镜通道 2.z-index在ie、ff下面的解释问题, ie会认为第一个z-index=0 3.长字符串,word-wrap:break-all可以解决ie,但是ff需要overflow:hidden才行 冯舒娅补充: 1、有些标签在ff中不能用,比如button 2、滤镜 3、鼠标cursor:handcursor:pointer 4、div的高度自适应 5、对box模型解析不一样 6、ul、ol的padding和margin ie都能识别*,标准浏览器(如ff)不能识别*; ie6能识别*,但不能识别!important; ie7能识别*,也能识别!important; ff不能识别*,但能识别!important; 例如style=”*width:10px;!importantwidth:20px;” 这样在ie6下宽度为10px,在ie7下宽度时20px web前端技术的展望 答:javascriptajax;flashas;flex;sliveright 附上网上的百度web开发工程师笔试问题集 1编写一个方法求一个字符串的字节长度 2编写一个方法去掉一个数组的重复元素 3说出3条以上ff和ie的脚本兼容问题 4用脚本写去除字符串的前后空格 string.prototype.trim=function(mode) {//前后去空格 if(mode==’left’){ return((this.charat(0)==”“&&this.length>0)this.slice(1).trim(’left’):this); }else if(mode==’right’){ return((this.charat(this.length-1)==”“&&this.length>0)this.slice(0,this.length-1).trim(’right’):this); returnthis.trim(’left’).trim(’right’); 5算出字符串中出现次数最多的字符是什么,出现了多少次 6写出3中使用this的典型应用 在html元素事件属性中inline方式使用this关键字: 7.最后一个问题是,如何制作一个combo选项,就是可以输入可以下拉菜单选择。 这个网上有很多成品,主要是通过绝对定位和相对定位结合的方式,改造原有的select标签和input标签的方法。 附上javascript正则表达式的基本知识: g:全局匹配 i:忽略大小写 ^匹配一个输入或一行的开头,/^a/匹配”ana”,而不匹配”ana” $匹配一个输入或一行的结尾,/a$/匹配”ana”,而不匹配”ana” *匹配前面元字符0次或多次,/ba*/将匹配b,ba,baa,baaa +匹配前面元字符1次或多次,/ba*/将匹配ba,baa,baaa 匹配前面元字符0次或1次,/ba*/将匹配b,ba (x)匹配x保存x在名为$1…$9的变量中 x|y匹配x或y {n}精确匹配n次 {n,}匹配n次以上 {n,m}匹配n-m次 [xyz]字符集(characterset),匹配这个集合中的任一一个字符(或元字符) [^xyz]不匹配这个集合中的任何一个字符 [b]匹配一个退格符 b匹配一个单词的边界 b匹配一个单词的非边界 cx这儿,x是一个控制符,/cm/匹配ctrl-m d匹配一个字数字符,/d/=/[0-9]/ d匹配一个非字数字符,/d/=/[^0-9]/ n匹配一个换行符 r匹配一个回车符 s匹配一个空白字符,包括n,r,f,t,v等 s匹配一个非空白字符,等于/[^nfrtv]/ t匹配一个制表符 v匹配一个重直制表符 w匹配一个可以组成单词的字符(alphanumeric,这是我的意译,含数字),包括下划线,如[w]匹配”$5.98′中的5,等于[a-za-z0-9] w匹配一个不可以组成单词的字符,如[w]匹配”$5.98′中的$,等于[^a-za-z0-9