当前位置:首页 » 网页前端 » web面试问题及回答技巧
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

web面试问题及回答技巧

发布时间: 2022-09-08 23:50:03

A. 面试Web前端需要注意什么会面试哪些问题

作为一名HTML5前端工程师,为了工作,为了就业我们免不了要参加各种各样的面试。为此总结了面试前的注意事项:

第一:注意自己的仪容仪表

面试之前,一定要再次从头到脚地将自己的仪容仪表检查一遍。检查时主要包括,自己的牙缝是不是还有食物残渣,所以你需要就近找一个卫生间,如果没有卫生间就近找一个角落也是可以的,但是切记一定不要在大庭广众之下。因此,为了给自己整理出着装的时间请在约定时间前20分钟到达。

第二:再次检查面试时所需的资料是否都已带全

这些资料主要包括:身份证明、学历文凭证明、个人简历、以往作品等等,如果这些东西齐全之后,需要对这些资料做一个整理与排序。因为没有哪个面试官希望看到面试者拿出一堆“莫名其妙”的东西塞给他,让他自己再一页一页的翻找自己需要的内容,如果说这些资料在面试官手中不小心散落一地,结果可想而知。这样的求职者在面试官眼中也一定不是一个让人放心、有条不紊的员工。当然如果检查时发现资料没有带全,也不要紧张。反而你要庆幸幸亏及时检查,也有足够的时间组织语言去向面试官解释。

第三:面试之前将通信工具调成振动或关闭状态

虽然说面试者与面试官之间是一个平等的关系,但毕竟你是去人家公司求职的,始终处于一个被动的状态,所以最起码的尊重还是要做到的。曾经有调查显示,对于面试过程中接电话或是被电话打断的求职者,会被HR减分。

第四:等候面试官时,仔细观察多了解面试公司

在等候面试官时,可以暗自观察一下公司的大体情况比如员工的着装风格、公司的LOGO或是贴在墙上的企业文化、公司的环境等等,一来可以在接下来的面试过程中表现出自己对公司的认同感,二来也可以让自己对求职公司多些了解,以确定是否要接受这里的工作。如果你身边有公司的资料宣传架,不妨取一本翻看一下,也会增加HR对你的好感。

第五:放松心情,保持自信

面试时一定要保持一定的自信,这样也会给面试官留下很好的印象。面试只是你步入工作的第一步,即便是失败了那也是人生重要的经历。失败是为了更好的迎接下一个挑战。

作为一名web前端工程师千万不要觉得懂技术面试就能万事大吉了,像以上五点细节性的东西也是一定要掌握的。

面试题系列:

网页链接

B. 2019Web前端面试题及答案汇总-Jquery篇

今天小编要跟大家分享的文章是关于2019Web前端面试题及答案汇总-Jquery篇。相信最近准备参加Web前端面试的小伙伴一定不在少数,为了帮助大家顺利的通过面试成为一名优秀的Web前端工程师,小编为大家准备了前端面试题系列,通过Web知识的整理以及经验的总结,希望能帮到更多的前端面试者。

Jquery相关


1、jQuery库中的$()是什么?


$()函数是jQuery()函数的别称。$()函数用于将任何对象包裹成jQuery对象,接着你就被允许调用定义在jQuery
对象上的多个不同方法。你可以将一个选择器字符串传入$()函数,它会返回一个包含所有匹配的DOM元素数组的jQuery对象。


2、如何找到所有HTMLselect标签的选中项?


$('[name=selectname]:selected')


3、$(this)和this关键字在jQuery中有何不同?


$(this)返回一个jQuery对象,你可以对它调用多个jQuery方法,比如用text()获取文本,用val()
获取值等等。


而this代表当前元素,它是JavaScript关键词中的一个,表示上下文中的当前DOM元素。你不能对它调用jQuery方法,直到它被
$()函数包裹,例如$(this)。


4、jquery怎么移除标签onclick属性?


获得a标签的onclick属性:$("a").attr("onclick")


删除onclick属性:$("a").removeAttr("onclick")


设置onclick属性:$("a").attr("onclick","test();")


5、jquery中addClass、removeClass、toggleClass的使用。


$(selector).addClass(class):为每个匹配的元素添加指定的类名


$(selector).removeClass(class):从所有匹配的元素中删除全部或者指定的类,删除class中某个值;


$(selector).toggleClass(class):如果存在(不存在)就删除(添加)一个类


$(selector).removeAttr(class);删除class这个属性;


6、JQuery有几种选择器?


(1)、基本选择器:#id,class,element,*;


(2)、层次选择器:parent>child,prev+next,prev~siblings


(3)、基本过滤器选择器::first,:last,:not,:even,:odd,:eq,:gt,:lt


(4)、内容过滤器选择器::contains,:empty,:has,:parent


(5)、可见性过滤器选择器::hidden,:visible


(6)、属性过滤器选择器:[attribute],[attribute=value],[attribute!=value]
,[attribute^=value],[attribute$=value],[attribute*=value]


(7)、子元素过滤器选择器::nth-child,:first-child,:last-child,:only-child


(8)、表单选择器::input,:text,:password,:radio,:checkbox,:submit等;


(9)、表单过滤器选择器::enabled,:disabled,:checked,:selected


7、jQuery中的Delegate()函数有什么作用?


delegate()会在以下两个情况下使用到:


1)、如果你有一个父元素,需要给其下的子元素添加事件,这时你可以使用delegate()了,代码如下:


$("ul").delegate("li","click",function(){$(this).hide();});


2)、当元素在当前页面中不可用时,可以使用delegate()


8、$(document).ready()方法和window.onload有什么区别?


(1)、window.onload方法是在网页中所有的元素(包括元素的所有关联文件)完全加载到浏览器后才执行的。


(2)、$(document).ready()方法可以在DOM载入就绪时就对其进行操纵,并调用执行绑定的函数。


9、如何用jQuery禁用浏览器的前进后退按钮?


实现代码如下:



$(document).ready(function(){

window.history.forward(1);

//ORwindow.history.forward(-1);

});



10、jquery中$.get()提交和$.post()提交有区别吗?


相同点:都是异步请求的方式来获取服务端的数据;


异同点:


1、请求方式不同:$.get()方法使用GET方法来进行异步请求的。$.post()方法使用POST方法来进行异步请求的。


2、参数传递方式不同:get请求会将参数跟在URL后进行传递,而POST请求则是作为HTTP消息的实体内容发送给Web服务器的,这种传递是对用户不可见的。


3、数据传输大小不同:get方式传输的数据大小不能超过2KB而POST要大的多


4、安全问题:GET方式请求的数据会被浏览器缓存起来,因此有安全问题。


11、写出一个简单的$.ajax()的请求方式?

$.ajax({

url:'http://www..com',

type:'POST',

data:data,

cache:true,

headers:{},

beforeSend:function(){},

success:function(){},

error:function(){},

complete:function(){}

});

ja

以上就是小编今天为大家分享的关于2019Web前端面试题及答案汇总-a
Jquery篇的文章,希望本篇文章中的面试题能够对正准备参加Web前端面试的小伙伴们有所帮助。想要了解更多Web前端方面的知识记得关注北大青鸟Web前端培训官网。最后祝愿小伙伴们面试成功成为一名优秀的Web前端工程师。


C. web前端面试经常问到的面试题有哪些

Web前端经常被问到的面试题及答案

一、HTML+CSS

1.对WEB标准以及W3C的理解与认识

标签闭合、标签小写、不乱嵌套、提高搜索机器人搜索几率、使用外
链css和js脚本、结构行为表现的分离、文件下载与页面速度更快、内容能被更多的用户所访问、内容能被更广泛的设备所访问、更少的代码和组件,容易维
护、改版方便,不需要变动页面内容、提供打印版本而不需要复制内容、提高网站易用性;

2.xhtml和html有什么区别

HTML是一种基本的WEB网页设计语言,XHTML是一个基于XML的置标语言

最主要的不同:

XHTML 元素必须被正确地嵌套。

XHTML 元素必须被关闭。

标签名必须用小写字母。

XHTML 文档必须拥有根元素。

3.Doctype? 严格模式与混杂模式-如何触发这两种模式,区分它们有何意义?

用于声明文档使用那种规范(html/Xhtml)一般为 严格 过度 基于框架的html文档

加入XMl声明可触发,解析方式更改为IE5.5 拥有IE5.5的bug

4.行内元素有哪些?块级元素有哪些?CSS的盒模型?

块级元素:div p h1 h2 h3 h4 form ul

行内元素: a b br i span input select

Css盒模型:内容,border ,margin,padding

5.CSS引入的方式有哪些? link和@import的区别是?

内联 内嵌 外链 导入

区别 :同时加载

前者无兼容性,后者CSS2.1以下浏览器不支持

Link 支持使用javascript改变样式,后者不可

6.CSS选择符有哪些?哪些属性可以继承?优先级算法如何计算?内联和important哪个优先级高?

标签选择符 类选择符 id选择符

继承不如指定 Id>class>标签选择

后者优先级高

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

结构层 Html 表示层 CSS 行为层 js

8.css的基本语句构成是?

选择器{属性1:值1;属性2:值2;……}

9.你做的页面在哪些流览器测试过?这些浏览器的内核分别是什么?

Ie(Ie内核) 火狐(Gecko) 谷歌(webkit) opear(Presto)

二、Javascript

1.javascript的typeof返回哪些数据类型

Object number function boolean underfind

2.例举3种强制类型转换和2种隐式类型转换?

强制(parseInt,parseFloat,number)

隐式(== – ===)

3.split() join() 的区别

前者是切割成数组的形式,后者是将数组转换成字符串

4.数组方法pop() push() unshift() shift()

Push()尾部添加 pop()尾部删除

Unshift()头部添加 shift()头部删除

5.事件绑定和普通事件有什么区别

6.IE和DOM事件流的区别

1.执行顺序不一样、

2.参数不一样

3.事件加不加on

4.this指向问题

7.IE和标准下有哪些兼容性的写法

Var ev = ev || window.event

document.documentElement.clientWidth || document.body.clientWidth

Var target = ev.srcElement||ev.target

8.ajax请求的时候get 和post方式的区别

一个在url后面 一个放在虚拟载体里面

有大小限制

安全问题

应用不同 一个是论坛等只需要请求的,一个是类似修改密码的

9.call和apply的区别

Object.call(this,obj1,obj2,obj3)

Object.apply(this,arguments)

10.ajax请求时,如何解释json数据

使用eval parse 鉴于安全性考虑 使用parse更靠谱

11.b继承a的方法

12.写一个获取非行间样式的函数

function getStyle(obj,attr,value)

{

if(!value)

{

if(obj.currentStyle)

{

return obj.currentStyle(attr)

}

else

{

obj.getComputedStyle(attr,false)

}

}

else

{

obj.style[attr]=value

}

}

D. 2020年Web前端面试题汇总(一)

今天小编要跟大家分享的文章是关于2020年Web前端面试题汇总。由于内容较多小编分开为大家介绍,今天首先来和小编一起看一看第一部分的内容,希望这些面试题能够对正准备找Web前端相关工作的小伙伴们有所帮助。

1.说几条写JavaScript的基本规范?


1)不要在同一行声明多个变量;


2)请使用===/!==来比较true/false或者数值;


3)使用对象字面量替代newObject这种形式;


4)减少使用全局函数,全局变量;


5)switch语句必须带有default分支;


6)if语句必须使用大括号;


7)for-in循环中的变量;


应该使用var关键字明确限定作用域;


从而避免作用域全局污染。


2.说说平衡二叉树?


平衡二叉搜索树(Self-balancingbinarysearchtree)


又被称为AVL树。


具有以下性质:


1)它是一棵空树或它的左右两个子树


的高度差的绝对值不超过1,


并且左右两个子树都是一棵平衡二叉树。


2)平衡二叉树必定是二叉搜索树,反之则不一定。


3)平衡二叉树的常用实现方法有红黑树、AVL、


替罪羊树、Treap、伸展树等。


最小二叉平衡树的节点的公式如下:


F(n)=F(n-1)+F(n-2)+1备注:1是根节点,


F(n-1)是左子树的节点数量,


F(n-2)是右子树的节点数量。


3.清除浮动和解决垂直外边距重叠的解决方案?


问题描述:


1)父元素没有设置宽高,尺寸由子元素撑起;


子元素一旦浮动,父元素高度会发生塌陷。


2)子元素设置margin-top会作用的父元素的margin-top;


此时会造成垂直外边距重叠。


.clearfix::after,.clearfix::before{


content:''


display:table;


clear:both;


}


4.sessionStorage、localStorage和cookie?


相同点:


都用于浏览器端存储的缓存数据;


不同点:


1)存储内容是否发送到服务器端


当设置了Cookie后,数据会发送到服务器端,


造成一定的宽带浪费;xxxstorage则会将数据保存


到本地,不会造成宽带浪费;


2)数据存储大小不同


Cookie数据不能超过4K,适用于会话标识;


xxxstorage数据存储可以达到5M;


3)数据存储的有效期限不同


cookie只在设置了Cookid过期时间


之前一直有效,即使关闭窗口或者浏览器;


sessionStorage,仅在关闭浏览器之前有效;


localStorage,数据存储永久有效;


4)作用域不同


cookie和localStorage是在同源同窗口中


都是共享的;


sessionStorage不在不同的浏览器窗口


中共享,即使是同一个页面;


5.判断一个单词是否是回文?


回文是指把相同的词汇或句子,


在下文中调换位置或颠倒过来,


产生首尾回环的情景,


叫做回文,也叫回环。


比如cacac,redivider。


letcheckPalindrom=(str)=>{


returnstr===


str.split('').reverse().join('');


}


6.不借助临时变量,进行两个整数的交换?


输入a=3,b=1,


输出a=1,b=3


letswap=(a,b)=>{


b=b-a;


a=a+b;


b=a-b;


return[a,b];


}


7.请写出至少5个html5新增的标签,并说明其语义和应用场景?


section:定义文档中的一个章节;


nav:定义只包含导航链接的章节;


header:定义页面或章节的头部;


它经常包含logo、页面标题和导航性的目录。


footer:定义页面或章节的尾部;


它经常包含版权信息、法律信息链接和反馈建议用的地址。


aside:定义和页面内容关联度较低的内容,


如果被删除,剩下的内容仍然很合理。


8.get和post请求在缓存方面的区别?


get请求类似于查找的过程,用户获取数据,


可以不用每次都与数据库连接,所以可以使用缓存。


post不同,post做的一般是修改和删除的工作,


所以必须与数据库交互,所以不能使用缓存。


因此get请求适合于请求缓存。


9.如何解决异步回调地狱?


promise、generator、async/await


10.图片的懒加载和预加载?


预加载:提前加载图片,


当用户需要查看时可直接


从本地缓存中渲染。


懒加载:懒加载的主要目的


是作为服务器前端的优化,


减少请求数或延迟请求数。


两种技术的本质:


两者的行为是相反的,


一个是提前加载,


一个是迟缓甚至不加载。


懒加载对服务器前端有一定


的缓解压力作用,


预加载则会增加服务器前端压力。


11.bind,apply,call的区别?


通过apply和call改变函数的this指向,


这两个函数的第一个参数都是一样的,


表示要改变指向的那个对象,


第二个参数,apply是数组,


而call则是arg1,arg2...这种形式。


通过bind改变this作用域


会返回一个新的函数,


这个函数不会马上执行。


12.js怎么控制一次加载一张图片,加载完后再加载下一张?


方法一:





varobj=newImage();


obj.src="#/21.jpg";


obj.onload=function(){


document.getElementById("pic")


.innnerHTML="";


}


加载中

E. web前端经典面试题

为大家带来一些web前端的面试题,希望可以帮助到大家啊。


1.css3有哪些新特性?


选择器、圆角、动画、多重背景、背景的宽度高度flex布局响应式布局边框阴影文本阴影


2.响应式布局怎么理解的,响应式布局是通过什么实现?


根据不同的屏幕加载不同的css样式


1).移动端适配


2).一套代码适配pc端移动端多个


3.js创建对象有哪几种方式?


1).自面量


2).newObject


3).构造函数


4.es6有哪些新特性?


1).letconst


2).模板字符串


3).方法的简写属性的简写


4).三点运算符


5).解构赋值


6).箭头函数


7).setmap


8).class类


9).模块化


5.箭头函数和普通的方法有什么区别?


1).箭头函数省略了function


2).箭头函数里面的this指向上下文(可以改变this指向)


6.gulp可以干什么


gulp自动化构建工具。


压缩代码合并代码压缩图片自动处理前缀创建web服务处理sass


7.清除浮动有哪些方法。


1).浮动元素的父元素overflow:hiddenoverflow:auto


2).浮动元素的最后面加一个空div给他clear:both


3).after伪类清除浮动


.clearfix:after{


content:"";


dislpay:block;


height:0px;


clear:both;


}


4)、给父元素设置高度。


8.行内元素块元素的区别?


1)块元素默认独占一行,行内元素默认情况不独占一行,行内元素的的宽度就是内容的宽度


2)默认情况块元素可以设置宽度高度默认情况行内元素不可以设置宽度高度


3)默认可以margin上下左右,行内默认只能margin左右不能上下。


9.网站加载速度优化?


1).图片不失真尽量小


2).多个背景图片合并


3).代码压缩代码合并


4).js写到页面最底部


5).懒加载


6).不要有冗余代码


7).服务器带宽款一些


8).服务器固态硬盘


9).开启缓存


10.以前写代码什么情况会成出现乱码怎么解决?


解决乱码文件保存的编码和设置的编码必须保持一致


11.以前如何测试调试移动端页面


1).首先在浏览器自带的调试工具模拟器里面调试


2).真机的内置浏览器调试


3).真机上面的UC里面调试


4).真机上的微信里面调试。

F. Web前端面试的常见面试题汇总

今天小编要跟大家分享的文章是关于参加Web前端面试的常见面试题汇总。准备参加Web前端面试的小伙伴们来和小编一起看一看吧,希望本篇文章能够对大家有所帮助。

1.渐进增强与优雅降级


渐进增强
并不是一种技术,而是一种设计思想。各个浏览器的渲染能力各不相同,要做一个每个人都能看到的网页、感受到的体验都一致的网站几乎不可能。但还是得网站的可访问性,保证用户在任何环境下都能正常访问网页得核心内容或能使用基本功能(避免网页打不开、排版错误等),并为他们提供当前条件下最好的体验,这就是渐进增强得核心思想。


优雅降级也是一种设计思想,为了保证在高版本浏览器中提供最好的体验,碰到低版本浏览器再降级进行兼容处理,使其能正常浏览。


这两种思想的区别在于:


1.渐进增强是向上兼容,优雅降级是向下兼容;


2.渐进增强是从简单到复杂,优雅降级是从复杂到简单;


3.渐进增强关注的是内容(保证核心内容),优雅降级关注的是浏览体验(为了兼容低版本浏览器)


2.DOCTYPE














作用


DTD(DocumentTypeDefinition,文档类型定义)是一系列的语法规则,用来定义XML或(X)HTML
的文档类型。浏览器会使用它来判断文档类型,决定何种协议来解析,以及切换浏览模式。


DOCTYPE是用来声明文档类型和DTD
规范的,一个主要的用途便是文件的合法性验证。如果文档代码不合法,那么浏览器解析时便会出现一些差错。


HTML5的文档类型声明:





HTML4.01Strict(HTML4.01严格模式)的DTD包含所有HTML
元素和属性,但不包括展示性的和弃用的元素(如font),它的文档类型声明:


"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">


标准模式与怪异模式


怪异模式(Quirks
Mode)用于模拟旧浏览器的行为。早期的网站并不会遵循完整的规范,随着浏览器支持越来越多的规范,在那些旧的浏览器中开发的页面在显示时会被破坏。为了向后兼容,浏览器发明了怪异模式,一行错误或无效的
DOCTYPE都会触发怪异模式。


浏览器使用文件开头的DOCTYPE来决定用怪异模式处理或标准模式处理。DOCTYPE
可以确保不同浏览器以相同的方式解析文档,以及执行相同的渲染模式。


怪异模式与标准模式的主要区别:


1.怪异模式的宽度和高度会包含padding和border。标准模式不包含,标准模式下可以通过设置box-sizing:
border-box将标准盒模型转化成怪异模式下的盒模型。


2.怪异模式下,当内容超出容器高度时,会将容器拉伸,而不是溢出。


3.怪异模式下,在表格中的字体样式(如font-size)不会继承。


4.怪异模式下颜色值必须使用十六进制标记法。


3.语义化


HTML5
中的语义化就是让元素、属性或属性值有含义,更准确地标记特定类型的内容。对元素语义化的目的是为了让元素的语义和呈现分离,元素只负责文档内容的结构与含义,而CSS
样式控制内容的呈现,像元素,没有语义但却能将字体变粗,这类元素违背了语义化的目的,将会被废弃。


优点


·使得HTML文档结构清晰、布局合理、主体突出、可读性更强。


·有利于SEO,搜索引擎根据标签来确定上下文和各个关键字的权重。


·方便其他设备解析,如盲人阅读器根据语义渲染网页。


·有利于开发和维护,语义化更具可读性,代码更好维护,与CSS3关系更和谐。


语义化标签


·
定义文档的页眉区域,应作为介绍内容或者导航链接栏的容器;


·footer内容的页脚,通常包含该章节作者、版权数据或者与文档相关的链接等信息;


·article
文档、页面、应用或网站中的独立结构,是可独立分配的、可复用的结构,如在发布中,它可能是论坛帖子、杂志或新闻文章、博客、用户提交的评论、交互式组件,或者其他独立的内容项目;


·nav描述一个含有多个超链接的区域,该区域包含跳转到其他页面或页面内部其他部分的链接列表;


·section表示文档中的一个区域(或节),比如,内容中的一个专题组;


·main定义文档的主要内容,该内容在文档中应当是独一无二的,不包含任何在文档中重复的内容,比如侧边栏,导航栏链接,版权信息,网站
logo,搜索框(搜索框作为文档的主要内容);


·aside
表示一个和其余页面内容几乎无关的部分,被认为是独立于该内容的一部分且可以被单独的拆分出来而不会影响整体。通常表现为侧边栏或嵌入内容。


4.超链接伪类


:link、:visited、:active和:hover的声明顺序是怎样的?


:link表示未访问的链接状态;


:visited表示已访问状态;:active表示激活状态(鼠标按下);:hover表示悬停状态。


推荐顺序是LVHA,即:link:visited:hover:active。理由如下:


·当鼠标悬停在未访问的链接上时,:link和:hover都会命中,如果:hover在:link
之前声明,那么(:hover)就会被覆盖;


·当鼠标悬停在已访问的连接上时,:visited和:hover都会命中,如果:hover在:visited
之前声明,那么(:hover)就会被覆盖;


·当鼠标单击链接时,:active和:hover都会命中,我们大多是想让:hover只在悬停时展示样式,按下鼠标时使用:active
样式,因此:active在:hover之后声明;


·综上,:hover应在:link和:visited之后,在:active之前,因此active在最后。而:link和
:visited两者的顺序无所谓,互不影响。


5.CSS常见的长度单位


CSS中除了px长度单位之外,还有下面几个长度单位:


·pc六分之一英寸,1pc=12pt=1/6*1in=16px;


·pt一磅,72分之一英寸。1pt=1/12_1pc=1/72_1in≈1.33px;


·in一英寸,1in=2.54cm=96px;


·ex在含有“X”字母的字体中,它是该字体的小写字母的高度。对于很多字体来说,1ex≈0.5em;


·em1em等于父级元素的字体大小,2em就是父级元素字体大小的二倍;


·rem当用在根元素()的font-size上面时,它代表了它的初始值;


·ch代表元素所用字体font中“0”这一字形的宽度;


·vh1vh相当于视口高度的1%,100vh就是视口的高度;


·vw1vw相当于视口宽度的1%,100vw就是视口的宽度;


·vmax视口高度vw和宽度vh两者中的最小值


·vmin视口高度vw和宽度vh两种中的最大值;


·%相对于父级元素的大小来确定;


参考:CSS[1]


CSSpercentage[2]


6.事件对象


冒泡与捕获


事件冒泡与捕获是事件处理的两种机制,主要描述当在一个元素上有两个相同类型的事件处理器被激活会发生什么。


在点击子元素时,浏览器运行了两种不同的阶段:捕获阶段和冒泡阶段。捕获阶段的行为:


·浏览器检查元素的最外层祖先,是否在捕获阶段中注册了一个onclick事件处理程序,如果是,则运行它;


·
然后,它移动到中单击元素的下一个祖先元素,并执行相同的操作,然后是单击元素再下一个祖先元素,依此类推,直到到达实际点击的元素;


而冒泡与捕获恰恰相反:


·浏览器检查实际点击的元素是否在冒泡阶段中注册了一个onclick事件处理程序,如果是,则运行它;


·然后它移动到下一个直接的祖先元素,并做同样的事情,然后是下一个,等等,直到它到达元素;


而现代浏览器在默认情况下,所有事件处理程序都在冒泡阶段进行注册。因此上面代码在点击子元素时会先执行子元素绑定的事件,然后向上冒泡,触发父元素绑定的事件。


addEventListener函数的第三个参数是个布尔值。含义:


·当布尔值是false时(这也是默认值),表示向上冒泡触发事件;


·当布尔值是true时,表示向下捕获触发事件;


不能冒泡的事件


有些事件是不会冒泡的。比如:


·blur元素失去焦点时触发,focusout事件也是失去焦点时触发,但可以冒泡;


·focus元素获取焦点时触发;


·mouseenter鼠标移动到元素上时会触发该事件,与之对应的是mouseover事件,但会冒泡;


·mouseleave鼠标离开元素时触发,与之对应的是mouseout,但会冒泡;


事件冒泡可以让我们利用事件委托,尤其是处理大量子元素时,如果给每个子元素都绑定事件,这是不优雅的,可以将事件绑定到父元素上,并让子节点上发生的事件冒泡到父节点上,利用
e.target属性可以获取到当前触发事件的子元素。


事件对象中的方法


·stopPropagation()阻止事件冒泡,当设置后,点击该元素时父元素绑定的事件就不会再触发;


·preventDefault()阻止默认事件的发生;


·stopImmediatePropagation()它用来阻止监听同一事件的其他事件监听器被调用以及阻止事件冒泡,比如给同一个div
元素绑定多个click事件(使用addEventListener方法可以注册多个),当在第二个事件函数中调用
stopImmediatePropagation方法时,点击div元素时,后面注册的click将不会被触发,而且还会阻止事件冒泡;


比如下面的例子,给p绑定多个click事件,在第二个事件函数中调用stopImmediatePropagation,第三个click
事件就不会触发,因为也阻止了冒泡,因此父元素的click事件也不会触发。





paragraph




G. web前端面试十大总结,不了解一下吗

在互联网时代,浏览器几乎主宰着一切,而前端开发人员决定着浏览器的内容展现形式和信息的提供,是不可或缺的一部分。前端开发实际上具有很明显的时代特征,它在很大程度上决定着大众的信息摄入,以及用户读取信息的有效方式。那么今天小编为大家总结了一些web前端的面试题,希望对大家有帮助哦!

一:字体高亮函数


题目:请你完成highlight函数,可以把模版字符串中的插入内容替换掉,并且插入文档以后显示红色。例如:


constyourName='ScriptOJ'


constmyName='Jerry'


document.body.innerHTML=highlight`Hello,${yourName}.Iam
${myName}.`


上面例子的页面显示如下:


0_1498033735172_upload-2abd65b1-1e98-46ba-b46f-df4188a036a5


请你完成highlight函数的编写。


答案:


css:


.highlight{


color:red;


}


js:


//考察的是Taggedtemplateliterals的使用


//
#/en-US/docs/Web/JavaScript/Reference/Template_literals


consthighlight=(strings,...args)=>{


returnstrings.rece((str,cur,i)=>{


return`${str}${cur}${args[i]?`class="highlight">${args[i]}`:''}`


},'')


}


二:数组去重


题目:编写一个函数unique(arr),返回一个去除数组内重复的元素的数组。例如:


unique([0,1,2,2,3,3,4])//=>[0,1,2,3,4]


unique([0,1,Ƈ',Ƈ',2])//=>[0,1,Ƈ',2]


答案:


constunique=(arr)=>[...newSet(arr)]


三:解析字串


题目:完成一个extractStr函数,可以把一个字符串中所有的:到.的子串解析出来并且存放到一个数组当中,例如:


extractStr('Mynameis:Jerry.Myageis:12.')//=>['Jerry',཈']


注意,:和.之间不包含:和.。也即是说,如果::abc..,则返回['abc']。


(本题来源:《JavaScriptCookbook》)


答案:·


constextractStr=(str)=>{


constret=str.match(/:([^:.])*?./g)||[]


returnret.map((subStr)=>subStr.replace(/[:.]/g,''))


}


四:spacify题目:


请你给字符串都添加上原型方法spacify,可以让一个字符串的每个字母都多出一个空格的间隔:"ScriptOJ".spacify()//=>
"ScriptO
J"(本题来源:#/interview-questions)答案:String.prototype.spacify
=function(){


returnthis.split('').join('')


}


五:safeGet


题目:有时候我们需要访问一个对象较深的层次,但是如果这个对象某个属性不存在的话就会报错,例如:


vardata={a:{b:{c:'ScriptOJ'}}}


data.a.b.c//=>scriptoj


data.a.b.c.d//=>报错,代码停止执行


console.log('ScriptOJ')//=>不会被执行


请你完成一个safeGet函数,可以安全的获取无限多层次的数据,一旦数据不存在不会报错,会返回undefined,例如:


vardata={a:{b:{c:'ScriptOJ'}}}


safeGet(data,'a.b.c')//=>scriptoj


safeGet(data,'a.b.c.d')//=>返回undefined


safeGet(data,'a.b.c.d.e.f.g')//=>返回undefined


console.log('ScriptOJ')//=>打印ScriptOJ


答案:


constsafeGet=(o,path)=>{


try{


returnpath.split('.').rece((o,k)=>o[k],o)


}catch(e){


returnvoid666


}


}


六:判断两个矩形是否重叠


题目:用一个对象的数据来表示一个矩形的位置和大小:


{


x:100,


y:100,


width:150,


height:250


}


它表示一个宽为150高为250的矩形在页面上的(100,100)的位置。


请你完成一个函数isOverlap可以接受两个矩形作为参数,判断这两个矩形在页面上是否重叠。例如:


constrect1={x:100,y:100,width:100,height:100}


constrect2={x:150,y:150,width:100,height:100}


isOverlap(rect1,rect2)//=>true


答案:


//原理:#/find-two-rectangles-overlap/


constisOverlap=(rect1,rect2)=>{


constl1={x:rect1.x,y:rect1.y}


constr1={x:rect1.x+rect1.width,y:rect1.y+rect1.height}


constl2={x:rect2.x,y:rect2.y}


constr2={x:rect2.x+rect2.width,y:rect2.y+rect2.height}


if(


l1.x>r2.x||


l2.x>r1.x||


l1.y>r2.y||


l2.y>r1.y


)returnfalse


returntrue


}


七:按下标插入


题目:现在有一个数组存放字符串数据:


['item1','item2','item3','item4','item5']


有另外一个数组存放一组对象:


[


{content:'section1',index:0},


{content:'section2',index:2}


]


它每个对象表示的是会往原来的数组的index坐标插入content数据(index不会重复):


01234


item1itme2item3item4item5


^^


||


section1section2


最后结果是:['section1','item1','item2','section2','item3','item4',
'item5']


请你完成injectSections函数,可以达到上述的功能:


injectSections(


['item1','item2','item3','item4','item5'],


[


{content:'section1',index:0},


{content:'section2',index:2}


]


)//=>['section1','item1','item2','section2','item3','item4',
'item5']


答案:


constinjectSections=(items,sections)=>{


/*需要插入坐标对应数据存放到map里面*/


constsectionsMap=newMap(sections.map(({index,content})=>[index,
content]))


/*新建一个数组,然后往里面push原来数组的数据*/


returnitems.rece((ret,item,index)=>{


/*push的时候先检查map里面有没有,有的话先pushmap里面的数据*/


if(sectionsMap.has(index))ret.push(sectionsMap.get(index))


/*再push原来的数据*/


ret.push(item)


returnret


},[])


}


八:数组拍平(二)


题目:编写一个JavaScriptgenerator函数,接受一个仅包含数字的多维数组
,返回一个迭代器,可以遍历得到它拍平以后的结果。例如:


constnumbers=flatten2([1,[[2],3,4],5])


numbers.next().value//=>1


numbers.next().value//=>2


numbers.next().value//=>3


numbers.next().value//=>4


numbers.next().value//=>5


答案:


function*flatten2(arr){


for(leti=0;i

constitem=arr[i]


/*yield*的使用可以大大简化程序编写*/


Array.isArray(item)?yield*flatten2(item):yielditem;


}


}


/*用flatten2来完成flatten也是很方便的*/


//constflatten=(arr)=>[...flatten2(arr)]


九:判断两个Set是否相同


题目:完成isSameSet函数,它接受了两个Set对象作为参数,请你返回true/false来表明这两个set
的内容是否完全一致,例如:


consta={}


constb=1


constc='ScriptOJ'


constset1=newSet([a,b,c])


constset2=newSet([a,c,b])


isSameSet(set1,set2)//=>true


答案:


//codefrom#/js-example.html


/*这道题不能简单地使用sort,使用sort并不靠谱。因为Set里面的内容可能有很多种类


*字符串、对象、数字,不同类型之间是不可对比的,所以排序结果并不会一致


*


*最好的方式是按照数学上集合相等的定义:


*A=B当且仅当A是B的子集并且B是A的子集。


*


*这种判断方式还可以用在对象、map等其他数据类型的判断当中。


*/


constisSameSet=(s1,s2)=>{


/*获取一个集合所有的值,判断另外一个集合是否全部包含该这些值*/


constisSame=(a,b)=>{


constvalues=[...a]


for(letvalofvalues){


/*及时跳出循环,可以降低算法复杂度*/


if(!b.has(val))returnfalse


}


returntrue


}


/*a包含b,b包含a,那么两个集合相同*/


returnisSame(s1,s2)&&isSame(s2,s1)


}


/*By陈小俊*/


//constisSameSet=(set1,set2)=>


//[...set1].every((o)=>set2.has(o))&&


//[...set2].every((o)=>set1.has(o))


十:记忆化斐波那契函数(Memoization)


题目:斐波那契数列指的是类似于以下的数列:


1,1,2,3,5,8,13,....


也就是,第n个数由数列的前两个相加而来:f(n)=f(n-1)+f(n-2)


请你完成fibonacci函数,接受n作为参数,可以获取数列中第n个数,例如:


fibonacci(1)//=>1


fibonacci(2)//=>1


fibonacci(3)//=>2


...


测试程序会从按顺序依次获取斐波那契数列中的数,请注意程序不要超时,也不要添加额外的全局变量。


本题来源:《JavaScript语言精髓》


答案:


constfibonacci=((memo=[0,1])=>{


constfib=(n)=>{


letresult=memo[n]


if(typeofresult!=="number"){


result=fib(n-1)+fib(n-2)


memo[n]=result


}


returnresult


}


returnfib


})()
最后就是反应能力,临场出现意外什么的了,这就看你自己了,万一自己一不留神说错话了,大神给你指出来,请记得谢谢一定要谦虚!在这里小编也希望每一位web培训班毕业的学员都能顺利找到称心的工作!


免责声明:内容和图片源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容
在互联网时代,浏览器几乎主宰着一切,而前端开发人员决定着浏览器的内容展现形式和信息的提供,是不可或缺的一部分。前端开发实际上具有很明显的时代特征,它在很大程度上决定着大众的信息摄入,以及用户读取信息的有效方式。那么今天小编为大家总结了一些web前端的面试题,希望对大家有帮助哦!

一:字体高亮函数


题目:请你完成highlight函数,可以把模版字符串中的插入内容替换掉,并且插入文档以后显示红色。例如:


constyourName='ScriptOJ'


constmyName='Jerry'


document.body.innerHTML=highlight`Hello,${yourName}.Iam
${myName}.`


上面例子的页面显示如下:


0_1498033735172_upload-2abd65b1-1e98-46ba-b46f-df4188a036a5


请你完成highlight函数的编写。


答案:


css:


.highlight{


color:red;


}


js:


//考察的是Taggedtemplateliterals的使用


//
#/en-US/docs/Web/JavaScript/Reference/Template_literals


consthighlight=(strings,...args)=>{


returnstrings.rece((str,cur,i)=>{


return`${str}${cur}${args[i]?`class="highlight">${args[i]}`:''}`


},'')


}


二:数组去重


题目:编写一个函数unique(arr),返回一个去除数组内重复的元素的数组。例如:


unique([0,1,2,2,3,3,4])//=>[0,1,2,3,4]


unique([0,1,Ƈ',Ƈ',2])//=>[0,1,Ƈ',2]


答案:


constunique=(arr)=>[...newSet(arr)]


三:解析字串


题目:完成一个extractStr函数,可以把一个字符串中所有的:到.的子串解析出来并且存放到一个数组当中,例如:


extractStr('Mynameis:Jerry.Myageis:12.')//=>['Jerry',཈']


注意,:和.之间不包含:和.。也即是说,如果::abc..,则返回['abc']。


(本题来源:《JavaScriptCookbook》)


答案:·


constextractStr=(str)=>{


constret=str.match(/:([^:.])*?./g)||[]


returnret.map((subStr)=>subStr.replace(/[:.]/g,''))


}


四:spacify题目:


请你给字符串都添加上原型方法spacify,可以让一个字符串的每个字母

H. 一份超全的Web前端工程师面试题!收藏~

今天小编为大家准备了一份超全的Web前端工程师面试题,准备换工作参加Web前端工程师面试的小伙伴们快来和小编一起看一看这些题目吧,希望能够对你的面试有所帮助!

一、HTML


§Doctype作用?严格模式与混杂模式如何区分?它们有何意义?


§HTML5为什么只需要写?


§行内元素有哪些?块级元素有哪些?空(void)元素有那些?


§页面导入样式时,使用link和@import有什么区别?


§介绍一下你对浏览器内核的理解?


§常见的浏览器内核有哪些?


§html5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分HTML和HTML5?


§简述一下你对HTML语义化的理解?


§HTML5的离线储存怎么使用,工作原理能不能解释一下?


§浏览器是怎么对HTML5的离线储存资源进行管理和加载的呢?


§请描述一下cookies,sessionStorage和localStorage的区别?


§iframe有那些缺点?


§Label的作用是什么?是怎么用的?(加for或包裹)


§HTML5的form如何关闭自动完成功能?


§如何实现浏览器内多个标签页之间的通信?(阿里)


§webSocket如何兼容低浏览器?(阿里)


§页面可见性(PageVisibility)API可以有哪些用途?


§如何在页面上实现一个圆形的可点击区域?


§实现不使用border画出1px高的线,在不同浏览器的Quirksmode和CSSCompat模式下都能保持同一效果。


§网页验证码是干嘛的,是为了解决什么安全问题?


§tite与h1的区别、b与strong的区别、i与em的区别?


二、CSS


§介绍一下标准的CSS的盒子模型?与低版本IE的盒子模型有什么不同的?


§CSS选择符有哪些?哪些属性可以继承?


§CSS优先级算法如何计算?


§CSS3新增伪类有那些?


§如何居中div?如何居中一个浮动元素?如何让绝对定位的div居中?


§display有哪些值?说明他们的作用。


§position的值relative和absolute定位原点是?


§CSS3有哪些新特性?


§请解释一下CSS3的Flexbox(弹性盒布局模型),以及适用场景?


§用纯CSS创建一个三角形的原理是什么?


§一个满屏品字布局如何设计?


§常见兼容性问题?


§li与li之间有看不见的空白间隔是什么原因引起的?有什么解决办法?


§经常遇到的浏览器的兼容性有哪些?原因,解决方法是什么,常用hack的技巧?


§为什么要初始化CSS样式。


§absolute的containingblock计算方式跟正常流有什么不同?


§CSS里的visibility属性有个collapse属性值是干嘛用的?在不同浏览器下以后什么区别?


§position跟display、margincollapse、overflow、float这些特性相互叠加后会怎么样?


§对BFC规范(块级格式化上下文:blockformattingcontext)的理解?


§CSS权重优先级是如何计算的?


§请解释一下为什么会出现浮动和什么时候需要清除浮动?清除浮动的方式


§移动端的布局用过媒体查询吗?


§使用CSS预处理器吗?喜欢那个?


§CSS优化、提高性能的方法有哪些?


§浏览器是怎样解析CSS选择器的?


§在网页中的应该使用奇数还是偶数的字体?为什么呢?


§margin和padding分别适合什么场景使用?


§抽离样式模块怎么写,说出思路,有无实践经验?[阿里航旅的面试题]


§元素竖向的百分比设定是相对于容器的高度吗?


§全屏滚动的原理是什么?用到了CSS的那些属性?


§什么是响应式设计?响应式设计的基本原理是什么?如何兼容低版本的IE?


§视差滚动效果,如何给每页做不同的动画?(回到顶部,向下滑动要再次出现,和只出现一次分别怎么做?)


§::before和:after中双冒号和单冒号有什么区别?解释一下这2个伪元素的作用。


§如何修改chrome记住密码后自动填充表单的黄色背景?


§你对line-height是如何理解的?


§设置元素浮动后,该元素的display值是多少?(自动变成display:block)


§怎么让Chrome支持小于12px的文字?


§让页面里的字体变清晰,变细用CSS怎么做?(-webkit-font-smoothing:antialiased;)


§font-style属性可以让它赋值为“oblique”oblique是什么意思?


§position:fixed;在android下无效怎么处理?


§如果需要手动写动画,你认为最小时间间隔是多久,为什么?(阿里)


§display:inline-block什么时候会显示间隙?(携程)


§overflow:scroll时不能平滑滚动的问题怎么处理?


§有一个高度自适应的div,里面有两个div,一个高度100px,希望另一个填满剩下的高度。


§png、jpg、gif这些图片格式解释一下,分别什么时候用。有没有了解过webp?


§什么是Cookie隔离?(或者说:请求资源的时候不要让它带cookie怎么做)


§style标签写在body后与body前有什么区别?


三、JavaScript


§介绍JavaScript的基本数据类型。


§说说写JavaScript的基本规范?


§JavaScript原型,原型链?有什么特点?


§JavaScript有几种类型的值?(堆:原始数据类型和栈:引用数据类型),你能画一下他们的内存图吗?


§Javascript如何实现继承?


§Javascript创建对象的几种方式?


§Javascript作用链域?


§谈谈This对象的理解。


§eval是做什么的?


§什么是window对象?什么是document对象?


§null,undefined的区别?


§写一个通用的事件侦听器函数(机试题)。


§[“1”,“2”,“3”].map(parseInt)答案是多少?


§关于事件,IE与火狐的事件机制有什么区别?如何阻止冒泡?


§什么是闭包(closure),为什么要用它?


§javascript代码中的”usestrict”;是什么意思?使用它区别是什么?


§如何判断一个对象是否属于某个类?


§new操作符具体干了什么呢?


§用原生JavaScript的实现过什么功能吗?


§Javascript中,有一个函数,执行时对象查找时,永远不会去查找原型,这个函数是?


§对JSON的了解?


§[].forEach.call($$("*"),function(a){a.style.outline="1pxsolid
#"+(~~(Math.random()*(1<<24))).toString(16)})能解释一下这段代码的意思吗?


§js延迟加载的方式有哪些?


§Ajax是什么?如何创建一个Ajax?


§同步和异步的区别?


§如何解决跨域问题?


§页面编码和被请求的资源编码如果不一致如何处理?


§模块化开发怎么做?


§AMD(Moles/Asynchronous-Definition)、CMD(CommonMole
Definition)规范区别?


§requireJS的核心原理是什么?(如何动态加载的?如何避免多次加载的?如何缓存的?)


§让你自己设计实现一个requireJS,你会怎么做?


§谈一谈你对ECMAScript6的了解?


§ECMAScript6怎么写class么,为什么会出现class这种东西?


§异步加载的方式有哪些?


§documen.write和innerHTML的区别?


§DOM操作——怎样添加、移除、移动、复制、创建和查找节点?


§.call()和.apply()的含义和区别?


§数组和对象有哪些原生方法,列举一下?


§JS怎么实现一个类。怎么实例化这个类


§JavaScript中的作用域与变量声明提升?


§如何编写高性能的Javascript?


§那些操作会造成内存泄漏?


§JQuery的源码看过吗?能不能简单概况一下它的实现原理?


§jQuery.fn的init方法返回的this指的是什么对象?为什么要返回this?


§jquery中如何将数组转化为json字符串,然后再转化回来?


§jQuery的属性拷贝(extend)的实现原理是什么,如何实现深拷贝?


§jquery.extend与jquery.fn.extend的区别?


§jQuery的队列是如何实现的?队列可以用在哪些地方?


§谈一下Jquery中的bind(),live(),delegate(),on()的区别?


§JQuery一个对象可以同时绑定多个事件,这是如何实现的?


§是否知道自定义事件。jQuery里的fire函数是什么意思,什么时候用?


§jQuery是通过哪个方法和Sizzle选择器结合的?(jQuery.fn.find()进入Sizzle)


§针对jQuery性能的优化方法?


§Jquery与jQueryUI有啥区别?


§JQuery的源码看过吗?能不能简单说一下它的实现原理?


§jquery中如何将数组转化为json字符串,然后再转化回来?


§jQuery和Zepto的区别?各自的使用场景?


§针对jQuery的优化方法?


§Zepto的点透问题如何解决?


§jQueryUI如何自定义组件?


§需求:实现一个页面操作不会整页刷新的网站,并且能在浏览器前进、后退时正确响应。给出你的技术实现方案?


§如何判断当前脚本运行在浏览器还是node环境中?(阿里)


§移动端最小触控区域是多大?


§jQuery的slideUp动画,如果目标元素是被外部事件驱动,当鼠标快速地连续触发外部元素事件,
动画会滞后的反复执行,该如何处理呢?


§把Script标签放在页面的最底部的body封闭之前和封闭之后有什么区别?浏览器会如何解析它们?


§移动端的点击事件的有延迟,时间是多久,为什么会有?怎么解决这个延时?(click有300ms
延迟,为了实现safari的双击事件的设计,浏览器要知道你是不是要双击操作。)


§知道各种JS框架(Angular,Backbone,Ember,React,Meteor,Knockout)么?
能讲出他们各自的优点和缺点么?


§Underscore对哪些JS原生对象进行了扩展以及提供了哪些好用的函数方法?


§解释JavaScript中的作用域与变量声明提升?


§那些操作会造成内存泄漏?


§JQuery一个对象可以同时绑定多个事件,这是如何实现的?


§Node.js的适用场景?


§(如果会用node)知道route,middleware,cluster,nodemon,pm2,server-side
rendering么?


§解释一下Backbone的MVC实现方式?


§什么是“前端路由”?什么时候适合使用“前端路由”?“前端路由”有哪些优点和缺点?


§知道什么是webkit么?知道怎么用浏览器的各种工具来调试和debug代码么?


§如何测试前端代码么?知道BDD,TDD,UnitTest么?知道怎么测试你的前端工程么(mocha,sinon,jasmin,
qUnit..)?


§前端templating(Mustache,underscore,handlebars)是干嘛的,怎么用?


§简述一下Handlebars的基本用法?


§简述一下Handlerbars的对模板的基本处理流程,如何编译的?如何缓存的?


§用js实现千位分隔符?(来源:前端农民工,提示:正则+replace)


§检测浏览器版本版本有哪些方式?


§我们给一个dom同时绑定两个点击事件,一个用捕获,一个用冒泡,你来说下会执行几次事件,然后会先执行冒泡还是捕获。


四、其他问题


§原来公司工作流程是怎么样的,如何与其他人协作的?如何夸部门合作的?


§你遇到过比较难的技术问题是?你是如何解决的?


§设计模式知道什么是singleton,factory,strategy,decrator么?


§常使用的库有哪些?常用的前端开发工具?开发过什么应用或组件?


§页面重构怎么操作?


§列举IE与其他浏览器不一样的特性?


§99%的网站都需要被重构是那本书上写的?


§什么叫优雅降级和渐进增强?


§是否了解公钥加密和私钥加密。


§WEB应用从服务器主动推送Data到客户端有那些方式?


§对Node的优点和缺点提出了自己的看法?


§你有用过哪些前端性能优化的方法?


§http状态码有那些?分别代表是什么意思?


§一个页面从输入URL到页面加载显示完成,这个过程中都发生了什么?(流程说的越详细越好)


§部分地区用户反应网站很卡,请问有哪些可能性的原因,以及解决方法?


§从打开app到刷新出内容,整个过程中都发生了什么,如果感觉慢,怎么定位问题,怎么解决?


§除了前端以外还了解什么其它技术么?你最最厉害的技能是什么?


§你用的得心应手用的熟练地编辑器&开发环境是什么样子?


§对前端界面工程师这个职位是怎么样理解的?它的前景会怎么样?


§你怎么看待WebApp、hybridApp、NativeApp?


§你移动端前端开发的理解?(和Web前端开发的主要区别是什么?)


§你对加班的看法?


§平时如何管理你的项目?


§说说最近最流行的一些东西吧?常去哪些网站?


§如何设计突发大规模并发架构?


§说说最近最流行的一些东西吧?常去哪些网站?


§是否了解开源的工具bower、npm、yeoman、grunt、gulp,一个npm的包里的package.json
具备的必要的字段都有哪些?(名称、版本号,依赖)


§每个模块的代码结构都应该比较简单,且每个模块之间的关系也应该非常清晰,随着功能和迭代次数越来越多,你会如何去保持这个状态的?


§Git知道branch,diff,merge么?


§如何设计突发大规模并发架构?


§当团队人手不足,把功能代码写完已经需要加班的情况下,你会做前端代码的测试吗?


§说说最近最流行的一些东西吧?平时常去哪些网站?


§知道什么是SEO并且怎么优化么?知道各种metadata的含义么?


§移动端(AndroidIOS)怎么做好用户体验?


§简单描述一下你做过的移动APP项目研发流程?


§你在现在的团队处于什么样的角色,起到了什么明显的作用?


§你认为怎样才是全端工程师(FullStackdeveloper)?


§介绍一个你最得意的作品吧?


§你有自己的技术博客吗,用了哪些技术?


§对前端安全有什么看法?


§是否了解Web注入攻击,说下原理,最常见的两种攻击(XSS和CSRF)了解到什么程度?


§项目中遇到国哪些印象深刻的技术难题,具体是什么问题,怎么解决?。


§最近在学什么东西?


§你的优点是什么?缺点是什么?


§如何管理前端团队?


§最近在学什么?能谈谈你未来3,5年给自己的规划吗?


§
以上就是小编今天为大家分享的关于web前端工程师面试题的文章,希望本篇文章能够对正准备学习编程技术的小伙伴们有所帮助。想要了解更多web前端相关知识记得关注北大青鸟web前端培训官网哦!最后希望小伙伴们能够好好准备这些问题的答案,在面试中取得好成绩,成为一名优秀的web前端工程师!


§

I. 面试web前端的工作,会被问到什么问题

在实际的面试中,你可能需要使用 JavaScript、CSS 和 HTML 来编写代码。在你的面试期间,你可能需要实现 UI、构建窗口小部件或使用 Lodash 和 Underscore.js 这样的库编写常用的实用程序函数。例如:构建常见的 Web 应用程序的布局和交互,例如类似 Netflix 网站那样的。实现小部件,如日期选择器、轮播或电子商务网站购物车。写一个类似 debounce 或深度 clone 对象的函数。

J. 2020年Web前端面试题及答案汇总

今天小编要跟大家分享的文章是关于2020年Web前端面试题及答案汇总。正准备参加Web前端面试的小伙伴们来和小编一起看一看吧,希望本篇文章能够对大家有所帮助。

一、Mysql数据库


1.MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义?


答案:


Varchar是变长字符串,最多存储的大小是65535字节,查询速度相对较慢;Char
是定常字符串,最多存储的大小是255字节,查询速度相对较快;


varchar(50)表示:Mysql4.0表示存放50个字节,5.0存放50个字符。


2.简述浏览器打开#显示页面,中间都经过哪些过程?


答案:


向DNS服务器获取域名对应的IP地址并返回浏览器,通过IP地址向Web服务器发请求,Web服务器从文件服务器获取网页中所需要的文件,从数据库服务器获取网页中所需要的数据,最后讲完整的网页相应给浏览器。


3.如何解决MySQL中存储中文乱码问题?


答案:


脚本文件采用UTF8编码


客户端连接数据库使用UTF8编码


服务器端创建数据库使用UTF8编码


4.Float和Double的区别是什么?


答案:


FLOAT(单精度浮点数)类型数据可以存储至多8位十进制数,并在内存中占4字节。


DOUBLE(双精度浮点数)类型数据可以存储至多18位十进制数,并在内存中占8字节。


5.把数据id等于1的名字oldboy更改为oldgirl?


答案:


updatetestsetname='oldgirl'whereid=1;


6.如何登录mysql数据?


答案:


mysql-uroot。


二、JS基础


1.continue和break有什么区别?


答案:


break和continue都是用来控制循环结构的:


break终止循环,跳出循环体执行循环后面的语句。


continue跳过本次循环,执行下一次循环。


2.i++和++i的区别?


答案:


i++:先用i值后加1,


++i:先加1后用i值,


计算:varn=5;求varnum=n+++++n+n+++++n+n;//37


3.JavaScript都有哪些数据类型?


答案:


原始类型:数值型/字符串型/布尔型/undefined/null


引用类型:对象


4.自调用函数是什么?用于什么地方?


答案:立即执行的函数。(function(){//函数体})();


用于创建一个局部作用域。


5.slice和splice有什么区别?


答案:


slice截取子数组,从指定的数组中,截取几个连续的元素组成一个新数组


splice允许从指定数组中,删除一部分元素,同时再添加另一部分元素


6.typeof返回的类型有哪些?


答案:


number、string、boolean、undefined、object、function


ex:


vararr=[1,2,3,4,5];


console.log(typeof(arr));//object


functionmyDemo(){


returnfunctiontest(){};


}


console.log(typeof(myDemo()));//function


7.取1~11之间的随机数(即包括1不包括11)?


答案:


Math.floor(Math.random()*10+1)


parseInt(Math.random()*10+1)


8.什么是变量声明提前?


答案:


使用var关键字声明的变量,会将声明提升到所在作用域的最前边。。


9.push、pop、shift和unshift区别?


答案:


这两组同为对数组的操作,并且会改变数组的本身的长度及内容。


不同的是push()、pop()是从数组的尾部进行增减,unshift()、shift()是从数组的头部进行增减。。


10.例举4种强制类型转换和3种隐式类型转换?


答案:


强制转换:parseInt/parseFloat/Number/toString


隐式转换:


字符串+数值数值转字符串


数值+布尔型布尔型中true转为1,false转为0


字符串+布尔型布尔型转为字符串。


11.函数声明与函数表达式的区别?


答案:


相同点:两者都可以创建函数。


不同点:函数声明可以存在函数提升(前),函数表达式不存在函数提升(前)。


//函数声明


functionmyFunction(){


functioninnerFunction(){}


}


//以下为函数表达式


varmyFunc=function(){};


myFunc(function(){


returnfunction(){};


});


12.请指出JavaScript宿主对象和原生对象的区别?


答案:


宿主对象:指JavaScript解释器提供的对象,由解释器厂家自定义并提供实现,不同的解释器提供的扩展对象存在较大的差异(DOM和BOM对象)。


原生对象:JavaScript语言本身预定义的对象,在ECMAScript标准中定义,由所有的解释器厂家来提供具体实现(Array,Date,Math,Number,String,Boolean等)。


13.js中有哪些内置函数?


答案:Object,Array,Boolean,Number,String,Function,Date,Math,RegExp,
Error,Global


14.列举出获取日期相关函数


答案:


console.log(Date.now());//返回当前日期和时间񟬢/01/0100:00:00'之间的毫秒值


vardt=newDate();//获取当前时间---年月日时分秒


console.log(dt.getTime());//返回当前日期和时间񟬢/01/0100:00:00'之间的毫秒值


console.log(dt.getFullYear());//年份


console.log(dt.getMonth()+1);//月份(0-11)


console.log(dt.getDate());//日期(0/1-31)


console.log(dt.getDay());//星期(0-6)


console.log(dt.getHours());//小时(0-23)


console.log(dt.getMinutes());//分钟(0-59)


console.log(dt.getMilliseconds);//返回毫秒(0-999)


console.log(dt.getSeconds());//秒(0-59)


15.Math相关函数


答案:


Math.random()-返回0~1之间的随机数


Math.abs(x)-返回数的绝对值


Math.ceil(x)-向上取整


Math.floor(x)-向下取整


Math.round()四舍五入


Math.max()和Max.min()获取一组数据中的最大值和最小值


Math.PI获取圆周率π的值Math.pow()获取一个值的多少次幂


Math.sqrt()对数值开方


Math.pow(10,2)=100;


Math.sqrt(100)=10;


16.null和undefined的区别?


答案:


undefined是访问一个未初始化的变量时返回的值,


null是访问一个尚不存在的对象时所返回的值。因此,可以把undefined看作是空的变量,而null看作是空的对象。


17.==和===有什么不同?


答案:


==抽象相等,比较时,会先进行类型转换,然后再比较值;


===严格相等,判断两个值相等同时数据类型也得相同。


18.setTimeout和setInterval的区别是什么?


答案:


二者都是用来设置定时操作的。


setTimeout:设置一个定时器,在定时器到期后执行一次函数或代码段


setInterval:设置一个定时器,以固定的时间间隔重复调用一个函数或者代码段


19.请说出以下代码执行结果


for(vari=0;i<3;i++){


setTimeout(function(){


console.log(i);


},0);


console.log(i);


}


答案:012333,执行过程如下


vari=0;


console.log(i);i++;


console.log(i);i++;


console.log(i);i++;


setTimeout(function(){console.log(i);


},0);s


etTimeout(function(){


console.log(i);


},0);


setTimeout(function(){


console.log(i);


},0);//输出012333


20.请说出(true+flase)>2+true的执行结果


答案:false


21.当前代码块输出结果是什么?


varz=10;


functionfoo(){console.log(z);}


(function(funArg){varz=20;funArg();})(foo);


答案:10,自调用函数。


22.setTimeout(function(){},10)表示什么意思?


答案:每隔10毫秒调用一次函数。


23.程序中捕获异常的方法?


答案:


try{


}catch(e){


}finally{


}


24.以下代码执行结果?


varuname='jack'


functionchange(){


alert(uname)//?


varuname='lily'


alert(uname)//?


}


change()


答案:undefinedlily


25.如何使用npm下载express模块?


答案:npminstallexpress


26.split和join的区别?


答案:split()将字符串按照指定的字符分割成一个数组,并返回


join()将数组用指定的字符连接成一个字符串,并返回


27.看下列代码会有什么样的输出?


varfoo="11"+2-"1";


console.log(foo);


console.log(typeoffoo);


答案:111number


28.foo=foo||bar,这行代码是什么意思?为什么要这样写?


答案:这种写法称之为短路表达式


相当于:


varfoo;


if(foo){


foo=foo;


}else{


foo=bar;


}


常用于函数参数的空判断


29.用js实现随机选取10_100之间的10个数字,存入一个数组,并排序


答案:


functiongetRandom(istart,iend){


variChoice=iend-istart+1;


returnMath.floor(Math.random()*iChoice+istart);


}variArray=[];


for(vari=0;i<10;i++){


varresult=getRandom(10,100);


iArray.push(result);


}iArray.sort();


30.如何获取javascript三个数中的最大值和最小值?


答案:Math.max(a,b,c);//最大值


Math.min(a,b,c)//最小值


31.实现冒泡排序?


vararray=[5,4,3,2,1];


vartemp=0;


for(vari=0;i

for(varj=0;j

if(array[j]>array[j+1]){


temp=array[j+1];


array[j+1]=array[j];


array[j]=temp;


}


}


三、NODEJS


1.同步和异步有何区别?


答案:


同步:指发送一个请求,需要等待返回,然后才能够发送下一个请求,有等待过程(在一个任务进行中时不能开启其他的任务)。


异步:指发送一个请求,不需要等待返回,随时可以再发送下一个请求,即不需要等待(在一个任务进行中时可以开启其他的任务)。


2.NodeJS中有哪些类型模块,文件操作用哪一个模块?


答案:


模块类型:核心模块、自定义模块、第三方模块。


文件操作:fs模块


3.对NodeJS的优点和缺点提出自己的看法?


答案:CPU密集型任务的特点是进行大量的计算,消耗CPU资源,比如计算圆周率(上千位)、对视频进行编码等,全靠CPU的运算能力
(一般用C语言,java)IO(Input/
Output)密集型任务,这类任务的特点是CPU消耗很少,大部分时间都在等待IO操作。常见的大部分任务都是IO密集型任务,比如Web应用(一般用脚本语言:python/Nodejs)。Nodejs设计思想中以事件驱动、异步、非堵塞I/O密集型为核心,他提供的大多数api都是基于事件的、异步的风格。所以非常适合处理高并发请求。此外,与Node服务器交互的客户端代码是由js语言编写的,因此客户端和服务器端都用同一种语言编写,减少了成本。


4.使用NodeJS完成登录功能(编写HTML页面和路由接口中的代码)?


答案:


HTML页面:





用户:



密码:









user.js路由


constexpress=require('express');


constpool=require('../pool.js');


varrouter=express.Router();


router.post('/login',(req,res)=>{


varobj=req.body;


var$uname=obj.uname;


if(!$uname){


res.send({code:401,msg:'unamerequired'});


return;


}


var$upwd=obj.upwd;


if(!$upwd){res.send({code:402,msg:'upwdrequired'});


return;


}


varsql='SELECT*FROMxz_userWHEREuname=?ANDupwd=?'
pool.query(sql,[$uname,$upwd],(err,result)=>{


if(err)throwerr;


if(result.length>0){


res.send({code:200,msg:'loginsuccess'});


}else{


res.send({code:301,msg:'loginerror'});


}});


});


//路由器导出


mole.exports=router;


5.什么是Nodejs?


Nodejs是一个JavaScript的运行环境,是一个服务器端的“JavaScript解释器”,用于方便高效地搭建一些响应速度快、易于扩展的网络应用。它采用事件驱动、异步编程,为网络服务而设计