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

怎么面试web前端

发布时间: 2022-10-11 06:54:05

A. Web 前端面试

博客园整理了一下,有好的面试题欢迎大家发在评论区哟
1. 闭包
2. 数组去重
3. 原型和原型链
4. call,apply,bind三者的区别?
5. 请介绍常见的 HTTP 状态码(至少五个)
6. 深浅拷贝
7. 实现(5).add(3).minus(2)输出6
8. null和undefined区别
9. MVC和MVVC?
10. Vue生命周期
11. Vue数据双向绑定原理
12. Vue组件传参
13. 说说各浏览器存在的兼容问题
14. router和route
15. active-class属于Vue哪一个moles,有什么作用
16. v-if和v-show
17. computed和watch有什么区别
18.Vue 组件中 data 为什么必须是函数
19. vue中子组件调用父组件的方法
20. vue中 keep-alive 组件的作用
21. vue中如何编写可复用的组件?
22. Vue 如何去除url中的 #
23. Vue 中 key 的作用
24. Vue 中怎么自定义指令
25. Vue 中怎么自定义过滤器
26. NextTick 是做什么的
27. Vue 组件 data 为什么必须是函数
28. 计算属性computed 和事件 methods 有什么区别
29. scoped(死够扑的)
30. vue如何获取dom?
31. promise
32. vue常用指令有哪些
33.vue-loader是什么?使用和用途?
34.css样式局部化,如何让css只在当前组件起作用?scss和stytus样式穿透

闭包指有权访问另一个函数中变量的函数,
MDN: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures
B站视频: https://www.bilibili.com/video/BV1YJ411R7ap?from=search&seid=18157596230752413126

https://www.jianshu.com/p/9c3547450a52

https://search.bilibili.com/all?keyword=%E5%8E%9F%E5%9E%8B%E9%93%BE%20%E9%BB%91%E9%A9%AC

都是用来改变this指向的

call和apply都是function原型上的方法,每一个函数作为function的实例都可以调用这两个方法,而这两个方法都是用来改变this指向的

一般情况下this指向其调用者()

fun.call(thisArg,arg1,ary2,...)
主要作用可以实现继承
调用函数,改变this指向

继承

fun.apply(thisArg,[argsArray])

作用:调用函数,改变函数内部this指向
参数必须是数组
apply主要应用于借助数学对象等

bind()方法不会调用函数,但可以改变函数内部this指向
fun.bind(thisArg,arg1,arg2,...)
thisArg:在fun函数运行时指定的this值
arg1,arg2:传递的其他参数
返回由指定的this值和初始化参数改造的原函数拷贝

call的性能要比apply好一些,尤其当传递参数超过3个,后期开发可多用call

时间测试

状态码是由 3 位数组成,第一个数字定义了响应的类别,且有五种可能取值:

1xx:指示信息–表示请求已接收,继续处理。

2xx:成功–表示请求已被成功接收、理解、接受。

3xx:重定向–要完成请求必须进行更进一步的操作。

4xx:客户端错误–请求有语法错误或请求无法实现。

5xx:服务器端错误–服务器未能实现合法的请求。

阮一峰: http://www.ruanyifeng.com/blog/2014/03/undefined-vs-null.html

MVC 是后端中的概念

MVVC中 是前端概念

最终实现V和M数据的同步,因此开发者只需关注业务逻辑,不需要手动操作Dom,mvvm是vue的核心

这两个不同的结构可以看出两者的区别,他们的一些属性是不同的。

active-class 属于vue-router的样式方法
当routerlink标签被点击时将会应用这个样式

使用有两种方法
routerLink标签内使用

在使用时会有一个Bug
首页的active会一直被应用
解决办法
为了解决上面的问题,还需加入一个属性exact,类似也有两种方式:
在router-link中写入exact

在路由js文件,配置active-class

还可以不用exact这种方法去解决,例如

首页
路由中加入重定向

computed

computed是计算属性,也就是计算值,它更多用于计算值的场景
computed具有缓存性,computed的值在getter执行后是会缓存的,只有在它依赖的属性值改变之后,下一次获取computed的值时重新调用对应的getter来计算
computed适用于计算比较消耗性能的计算场景
watch

watch更多的是[观察]的作用,类似于某些数据的监听回调,用于观察props $emit或者本组件的值,当数据变化时来执行回调进行后续操作
无缓存性,页面重新渲染时值不变化也会执行
小结

当我们要进行数值计算,而且依赖于其他数据,那么把这个数据设计为computed
如果你需要在某个数据变化时做一些事情,使用watch来观察这个数据变化。

去这里看一下​blog.csdn.net

vue-router 默认使用 hash 模式,所以在路由加载的时候,项目中的 url 会自带 #。如果不想使用 #, 可以使用 vue-router 的另一种模式 history

new Router({
mode: 'history',
routes: [ ]
})

需要注意的是,当我们启用 history 模式的时候,由于我们的项目是一个单页面应用,所以在路由跳转的时候,就会出现访问不到静态资源而出现 404 的情况,这时候就需要服务端增加一个覆盖所有情况的候选资源:如果 URL 匹配不到任何静态资源,则应该返回同一个 index.html 页面

具体参考 官方API

参考 官方文档-自定义指令

过滤器也同样接受全局注册和局部注册

具体可参考官方文档 深入响应式原理

我们可以将同一函数定义为一个 method 或者一个计算属性。对于最终的结果,两种方式是相同的

不同点:

让css只在当前组件中起作用

B. web前端如何 面试

站到HR的角度来思考问题:
当HR问出一个问题的时候,你要站到他的角度想,他为什么会提出这个问题,根本原因是什么,这样立马分析回答下来一般不会跑偏。比如:你对加班怎么看?立马思考:为什么问我这个问题,这家可能有加班文化啊,好 回答,锻炼自己能力 觉得加班真是个大好学习的机会。
专业技术点要撸明白:
简历里你写的各种熟悉:HTML,CSS,JS,等等这些专业技能点,基础面试题一定要多看,做到面试能答上。
GitHub里搜索:前端面试题,很多爱心伙伴已经整理,试着找一下。
项目经验要对所用技术点以及坑有很好的了解:
既然做过项目,爬过的坑,用到的技术点,就是面试中很可能会被问到的内容,提前需要温习好。

C. web前端的面试自我介绍解析

web前端的面试自我介绍解析

自我介绍这个问题,不用多说了,面试必定会问!接下来我为你带来web前端的面试自我介绍解析,希望对你有帮助。

【如何进行自我介绍】

如果想要在自我介绍的时候就能够打动面试官,吸引面试官对我们的兴趣,那么像我们这种接受过PHP培训的程序员的自我介绍当然不能和应届生或者其他非技术岗位一样。如何进行自我介绍比较好?有没有什么套路呢?当然有。

如何进行自我介绍?看看老师是怎么建议大家的`!

1、我叫xxx,来自于吉林敦化,从网上看得到公司招聘的这个职位,觉得非常适合自己的发展。所以来这里争取下这份工作。

2、接下来可以讲解自己的核心竞争力(最强的技能、最深入研究的知识领域、个性中最积极的部分)和闪光点(做过的最成功的事,主要的成就)。核心就是要体现自己胜任这份工作(介绍时候要自然有底气,合情合理,面试前要充分准备好)。

3、先介绍到这里,面试官看看有什么问题,我可以再补充。

4、最后要说谢谢,任何HR都喜欢有礼貌的人!

注意:自曝其短(说自己的缺点)没有必要,自我介绍的时候千万不要和简历有冲突!

【你有什么优劣势】

这个问题是企业面试过程中被问到的概率很大的! 面试官想通过这一类问题的解答了解到: 1、这个人能否对自己做出正确的估价;2、主试人最关注的是该人的缺点、弱点,如这方面的问题比较突出,那就不适合做某项工作。作为前端工程师,我们应该如何巧妙的答这道题,给自己加分呢?

你有什么优劣势?请看前端老师的是怎么教我们答的:

1

作为程序员,最重要的能够给企业做好事(包括与人合作一起干事),能解决问题。所以我们可以这样说:

1、优点往狠里说 (技术狂热、学习能力强、为人谦和)

2、劣势可以提自己不是(本专业出身), 但是(对技术很狂热)

【你为什么选择我们公司】

1

你为什么选我择们的公司,对于这个问题,其实是面试官试图从中了解你求职的动机、愿望以及对此项工作的态度。这个问题,也是经常会被面试官问到的,所以各位面试的时候,一定要有所准备!

;

D. web前端工程师面试自我介绍_web前端工程师面试自我介绍怎么说

自我介绍 ,就是自己将自己介绍给他人或众人的一种介绍方式。那么web前端工程师 面试 时自我介绍应该怎么说?以下是我为您整理的web前端工程师 面试自我介绍 内容,希望能帮到你。

web前端工程师面试自我介绍第一篇

我喜欢 篮球 和 乒乓球 ,曾担任大学校篮球队队员。在篮球队中深刻体会到在大家共同努力下击败对手的成就感!

对于计算机有着狂热的喜爱,虽掌握软件众多,但对编程情有独钟!在每一次解决了问题后都有一种成就感!我喜欢这种感觉,让我能沉迷于我的代码的世界中!

爱好 程序设计,喜欢开发自已的小型产品,追求技术上的满足感;稳固的架构,健壮的代码,团结的合作,是我的不懈追求。

有良好的编程习惯,以及程序错误控制和解决能力,我爱程序员这个岗位,当每天敲着代码,听着音乐,是很快乐的

用心工作,用心生活!我可能不是最好的,最合适的,我觉得我是最有潜力的!2016,一起加油!

web前端工程师面试自我介绍第二篇(英文)

good morning, my name is jack, it is really a great honor to have this opportunity for a interview, i would like to answer whatever you may raise, and i hope i can make a good performance today, eventually enroll in this prestigious university in september. now i will introce myself briefly,i am 21 years old,born in heilongjiang province ,northeast of china,and i am curruently a senior student at beijing xx uni.my major is packaging engineering.and i will receive my bachelor degree after my graation in june.in the past 4 years,i spend most of my time on study,i have passed cet4/6 with an ease. and i have acquired basic knowledge

of packaging and publishing both in theory and in practice. besides, i have attend several packaging exhibition hold in beijing, this is our advantage study here, i have taken a tour to some big factory and company. through these i have a deeply understanding of domestic packaging instry. compared to developed countries such as us, unfortunately, although we have made extraordinary progress since 1978,our packaging instry are still underdeveloped, mess, unstable, the situation of employees in this field are awkard. but i have full confidence in a bright future if only our economy can keep the growth pace still. i guess you maybe interested in the reason itch to law, and what is my plan ring graate study life, i would like to tell you that pursue law is one of my lifelong goal,i like my major packaging and i won't give up,if i can pursue my master degree here i will combine law with my former ecation. i will work hard in thesefields ,patent ,trademark, right, on the base of my years study in department of p&p, my character? i cannot describe it well, but i know i am optimistic and confident. sometimes i prefer to stay alone, reading, listening to music, but i am not lonely, i like to chat with my classmates, almost talk everything ,my favorite pastime is valleyball,playing cards or surf online. through college life,i learn how to balance between study and entertainment. by the way, i was a actor of our amazing drama club. i had a few glorious memory on stage. that is my pride.

web前端工程师面试自我介绍第三篇(英文)

my name is zhao wanjun. wanjun is my given name. wan means sweet and jun means person, so my name means a sweet-tempered girl. i actually am! but you can call me june, for your convenience, j-u-n-e, IT's similar to my chinese name jun. i am from enping, a small cITy in the southwest of guangdong province, near hongkong and macao. maybe you have never been there before, IT's well known for the hot springs there.

in 2014, i got the highest score in the college entrance examinations in my cITy and entered zhongshan universITy. my major is computer science. my gpa ranks in the top 40% among all students, but i have stronger c++ programming skills than many others. also, i was the first one to learn java in my class.

i was chosen by a teacher of mine to participate in his project. the project was about a lan chat room, and i developed the instant messaging system in IT. i was the only female student in this project team.

besides study and the project, i worked in the student union for two years, first year as a member, next year promoted to be the general secretary. my colleagues describe me as a reliable and considerate person.

ibm is top on my job hunting list for of the reasons you hear every day. i look forward to joining a famous company as IT means good training, good pay, and good people to work wITh, just like you gentlemen!

technical support engineer is my ideal job because i have both a technical background and the abilITy to deal wITh clients. also, traveling isn’t a problem although i am a woman.

>>>下一页更多精彩“求 职自我 介绍”

E. web前端初级面试要求

想要通过前端面试顺利进入一线大厂成就高薪前端梦。那么首先,我们得知道前端面试中,社招和校招究竟有啥区别?

对于前端开发来说,如果说社招更看重对前端技术体系的深入理解,以及解决问题的能力话,那校招更看重的其实是基本功和学习能力(或者说是潜力)。

但其实,无论是社招还是校招,面试的时候都会问到一些曾经操作过的项目,尤其是大厂,或者热门高薪部门,面试官除必问的技术经验外,也会对技术深度进行一个基础的考核,那在这种情况下如何hold住大厂面试呢?

前端面试三要素:简历、个人介绍、技术能力。下面,就来分别聊一聊。

1、简历筛选关:

HR一般会去看简历中所提的技术栈是否匹配,怎么看呢?我们可以抓住简历中的技术名词,一般来说如果一点技术名词都没有提到,那么大概有以下几种可能:很水、很牛但概率很小、不会写简历。所以,一部分人可能会因为简历的问题没有了面试机会,这点是需要非常注意的。

2、个人介绍关:

通过了简历筛选阶段,就真正到了面试环节。这时候一定要准备好一段最多3分钟的个人介绍。请注意,最多3分钟!言简意赅的说明自己的工作时间,擅长技术栈和自己的工作预期。

3、项目经验表达:

对前端开发学习者而言,JS并不陌生,但大厂的JS面试题却总是显得很“陌生”,怎么样能够真正做到深入理解与高级应用?这不仅是面试过程中对前端求职者的要求,也是大多数前端开发者的痛点。

大厂面试中,面试官除了关注你的项目经验外,还往往喜欢和面试者深入探讨前端某些技术领域成体系的前端知识。比如:模块化、异步解决方案、网络、框架及原理、线程等,但在与面试官的正面battle中,求职者总会败下阵来。

所以,建议大家在Web前端面试前一定要注重这三个方面的内容。注重了这些想找找到一份适合的Web前端开发工作并不是难事。

F. 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,可以让一个字符串的每个字母

G. 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




H. 如何面试Web前端开发工程师

近来几个月,一直在努力寻找前端战友,未果,一路的招聘经历下来,心生不少感慨,
一直都很小心翼翼的,怕错失了高人,又更加怕失误把关不够招到不合格的同学进来公司,对公司对项目造成某些影响。


面试前端工程师对我来说是一件非常有意思的事,因为面试过程很大程度上也是自我提升的过程。无论大公司还是小公司,之所以在如何招聘到真正有能力的
前端工程师方面会遇到同样的问题,就是因为负责招聘的那些人不知道自己公司需要什么样的人,结果问问题时也问不到点子上。经过这几年在行业里的摸索,我总
结出了自己的一套很有效的面试前端工程的方法。


有的应聘者说我不好对付,但留给他们这样的印象也并非我所愿。我觉得之所以他们说我不好对付,主要是因为我问他们问题时问得太细了。以前我曾专门写过一些
东西,告诉应聘者怎么才能通过我的面试(Survivinganinterviewwithme)以及优秀的前面工程师应该具备什么样的素质(What
makesagoodfrontend
engineer?),而我的面试可以说完全是按照那两篇文章的标准进行的。我不会问一些特别偏门的问题,也不认为出几道逻辑题就能考出人的真实水平。我
唯一的想法就是确定你能否胜任我们要招的这个职位。为此,我需要简单地考察如下几个方面。


基本知识


我们生活在互联网时代,你想知道的任何事情几乎都能在15分钟内找到相关信息。可是,能找到信息并不等于你会使用它。我认为所有前端工程师至少都应
该掌握某些基本的知识,才能有效地完成自己的工作。如果一遇到问题,就停下工作上网四处搜索解决方案,怎么可能保证按期完成工作呢?听听,还有谁在说“我
不知道,但我可以上网搜到。”请这些同学把手举起来,让大家认识一下(immediatelyraisesaflagfor
me.)。下面我列出一些基本的知识点,这些都是我认为一名前端工程师(无论工作年头长短)在没有任何外来帮助的情况应该知道的。


DOM结构——两个节点之间可能存在哪些关系以及如何在节点之间任意移动。


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


事件——怎样使用事件以及IE和DOM事件模型之间存在哪些主要差别。


XMLHttpRequest——这是什么、怎样完整地执行一次GET请求、怎样检测错误。


严格模式与混杂模式——如何触发这两种模式,区分它们有何意义。


盒模型——外边距、内边距和边框之间的关系,IE8以下版本的浏览器中的盒模型有什么不同。


块级元素与行内元素——怎么用CSS控制它们、它们怎样影响周围的元素以及你觉得应该如何定义它们的样式。


浮动元素——怎么使用它们、它们有什么问题以及怎么解决这些问题。


HTML与XHTML——二者有什么区别,你觉得应该使用哪一个并说出理由。


JSON——它是什么、为什么应该使用它、到底该怎么使用它,说出实现细节来。


重申一下,上述这些知识点都应该是你应该“想都不用想”的东西。我一开始问的所有问题都是想摸清你对所有这些领域知识的掌握程度。虽然上面列出的这些知识点并没有面面俱到,但我觉得你至少应该掌握这些,才有可能跟我坐到一间办公室里来。


少量提问


我非常赞同面试者问的问题越少越好。反复问应聘者各种问题既不公平,也很无聊。我在任何一次面试中,通常只问三个大问题,但每个问题又会涉及我所能想到的多个方面。回答每个大问题一般要经过几个步骤,这样我就可以在每个步骤中穿插着问一些小问题。比如说:


现在有一个正显示着Yahoo!股票价格的页面。页面上有一个按钮,你可以单击它来刷新价格,但不会重新加载页面。请你描述一下实现这个功能的过程,假设服务器会负责准备好正确的股票价格数据。


这个问题牵扯到一组我想要考察的基本知识点:DOM结构、DOM操作、事件处理、XHR和JSON。如果我要求你对换一种处理股票价格的方式,或者
让你在页面中显示其他信息,就可以把更多的知识点包括进来。对于经验比较丰富应聘者,我也可以自如地扩展要考察的知识范围,最简单像JOSN与XML的区
别、安全问题、容量问题,等等。


我还希望应聘者给出的任何解决方案中都不要使用库。我想看到最原生态的代码,你就当页面中没有包含任何库。你说你对哪个库了解多少多少,但我不能把
关于库的知识作为评判能力的因素,因为库是会随时间变化的。我需要的是真正理解库背后的机制,特别是能够徒手写出一个自己的库的人。


解决问题


做为一名前端工程师,最值得高兴的事莫过于解决同一个问题会有很多种不同的方法,而你要做的就是找出最合适的方法来。我在提问的时候,经常会在应聘
者解释完一种方法后问他们还有没有第二种方法。此时我会跟他们说,假设你的这个方法由于种种原因被否决了,那么你还能不能给出另一种方法。这样做可以达到
两个目的。


首先,可以测试出他们是否在毫无意义地复述书本中的东西。不能不承认,某些人确实有过目不忘的天赋,听他们在那里滔滔不绝地讲,你会觉得他们什么都
明白。可是,只要一跟这些人谈到怎么查找方案无效的原因,以及能否拿出一个新方案来,他们往往就傻眼了。这时候,如果我听到“我不明白这个方案为什么不够
好”之类的反问,心里立刻就明白我的问题已经超出了他们的能力范围,而他们只是想拿自己死记硬背的结论来蒙混过关。


其次,可以测试出他们已经掌握的(还是那句话,“想都不用想”)浏览器技术知识。如果他们对浏览器平台的核心知识有较好的理解,想出解决同一问题的不同方案根本没有那么难。


对一名前端工程师来说,这绝对是最重要的能力。前端工程师在工作中遇到本该如此却并未如此的难题(说你啦,IE6),应该说是一件很平常的事。一个方案无效就无计可施的人,做不了前端工程师。


考核应聘者解决问题能力的另一层原因,与我的个人喜好有关。在搞清楚应聘者知道什么不知道什么之后,我就会想着问一个他们知识领域之外的问题。这样
做的目的,就是想看看他们怎样运用已有的知识解决新问题。在解决问题的每一步,我也准备了一些提示,以防有人会卡壳打艮(在我面前15分钟一言不发,对我
评价这个人毫无帮助)。我真正感兴趣的,是他们能够从上一步前进到下一步。我希望看到一个人就在我眼前学到新知识。


注意:所有问题都与浏览器技术相关。我不相信出几道抽象的逻辑题,就能够考出某人解决Web技术问题的能力。在我看来,这无异于让素描大师画肖像(或者让刘翔跟博尔特同场竞技),没有意义,也得不到任何有价值的信息。


有激情


要成为一名优秀的前端工程师,最重要的莫过于对自己做的事要有激情。我们技能都不是从学校中或者从研讨会上学来的,因此前端工程师必须具备自学能
力。浏览器技术的变化可谓日新月异,所以也只有不断提升自己的技能才做得到与时俱进。我虽然不能强迫谁必须多看博客、不断学习,但想应聘前端工程师的人恐
怕还是必须这么做的。


你怎么知道谁对这种工作有没有激情?实际上非常简单。我只问一个简单的问题:“目前你对什么Web技术最感兴趣?”这个问题永远不会过期,而且也几
乎不可能出错除非你答不上来。就眼下来说,我希望你对这个问题给出的技术中包括WebSocket、HTML、WebGL、客户端数据库,等等。只有
对Web开发充满激情的人,才会坚持不懈地学习新知识、掌握新技能;这些人才是我真正想要的。当然,我会让他们详细解释自己提到的技术,以保证他们不是随
口说了几个时髦的新词汇。


最后一点


计算机科学或者Web设计方面的知识当然也有用,但那都是基本知识之外的东西。只要基本知识在那儿了,一切就都有了基础,想扩充知识面也不难。可
是,如果等到正式上班以后,还得从头学习基本技能,那种难度是不可同日而语的。另外,高级前端工程师与一般工程师相比,肯定需要掌握更多的技能。而面试几
乎没有经验大学毕业生,同样也会有一套完全不同的程序。我在这篇文章里列出来的都是一些最基本的东西。


对于那些还没有多少面试经验的人,我总是喜欢告诉他们,面试完了只要问自己一个问题就行:你想以后跟这个人在一起共事吗?如果不管为什么,回答是不,那就是不。


*免责声明:转载文章和图片均来自公开网络,版权归作者本人所有,推送文章除非无法确认,我们都会注明作者和来源。如果出处有误或侵犯到原作者权益,请与我们联系删除或授权事宜。

I. web前端实用技巧助成功面试

相信大家在web前端的面试中都遇到很多技术问题吧,今天北大青鸟web前端培训专家给大家分享10个常见的web前端面试题,希望大家能够在面试时更加从容不迫。


1.HTML5为什么只需要写?


html5不基于SGML(标准通用语言),因此不需要对DTD(文档类型定义)进行引用,但需要doctype来规范浏览器的行为(让浏览器按照它们应该的方式运行)


而html4.01基于SGML,所以需要对DTD进行应用,才能告知浏览器文档所使用的文档类型。


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


1).link属于XHTML标签,而@import是CSS提供的;


2).页面被加载的时,link会同事被加载,而@import引用的CSS会等到页面被加载完再加载;


3).import只有在IE5以上才能被识别,而link是XHTML标签,无兼容问题;


4).link方式的样式的权重>@import的权重


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


IE浏览器的内核:Trident、


Mozilla的Gecko、


Chrome的Blink(WebKit的分支)、


Opera内核原为Presto,现为Blink


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


HTML语义化是指根据内容的结构化(内容语义化),选择合适的标签(代码语义化)便于开发者阅读和写出更优雅的代码的同时让浏览器的爬虫和机器很好地解析。


HTML语义化的主要目的是:


1).为了在没有css的情况下,页面也能呈现出很好地内容结构、代码结构


2).有利于用户体验


3).有利于SEO和搜索引擎建立良好的沟通。


4).方便其他设备解析以意义的方式来渲染网页、


5).便于团队开发和维护,增加可读性。


5.xhtml和html有什么区别


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


最主要的不同:


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


XHTML元素必须被关闭。


标签名必须用小写字母。


XHTML文档必须拥有根元素


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


块级元素:divph1h2h3h4formul


行内元素:abbrispaninputselect


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


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


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


8.标签上title与alt属性的区别是什么?


Alt当图片不显示是用文字代表。


Title为该属性提供信息


9.你如何对网站的文件和资源进行优化?


文件合并


文件最小化/文件压缩


使用CDN托管


缓存的使用


10.解释jsonp的原理,以及为什么不是真正的ajax


动态创建script标签,回调函数


Ajax是页面无刷新请求数据操作


以上这10个web前端开发技巧希望能给你带来帮助,如果你对web前端开发有更多优秀的想法,欢迎去北大青鸟web前端培训机构实地访查,欢迎加入北大青鸟大家庭。