最近很多朋友跟我谈起裸辞的事,无非都是年中绩效不满意、公司问题多、老板不喜欢、职业发展受限等等原因,作为一个前端工程师,辞职跳槽也属常事,在实力允许的情况下,薪资自然也会翻一番,但是在辞职之前,一定要有所准备,看透这些面试题,做到胸有成竹,offer自然不会少。
一:记忆化斐波那契函数(Memoization)
题目:斐波那契数列指的是类似于以下的数列:
1,1,2,3,5,8,13,....
也就是,第n个数由数列的前两个相加而来:f(n)=f(n-1)+f(n-2)
请你完成fibonacci函数,接受n作为参数,可以获取数列中第n个数,例如:
fibonacci(1)//=1fibonacci(2)//=1fibonacci(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})()
二:解析字串
题目:完成一个extractStr函数,可以把一个字符串中所有的:到.的子串解析出来并且存放到一个数组当中,例如:
extractStr(Mynameis:Jerry.Myageis:12.)//=[Jerry,12]
注意,:和.之间不包含:和.。也即是说,如果::abc..,则返回[abc]。
(本题来源:《JavaScriptCookbook》)答案:
constextractStr=(str)={constret=str.match(/:([^:\.])*?\./g)
[]returnret.map((subStr)=subStr.replace(/[:\.]/g,))}
三:safeGet
题目:有时候我们需要访问一个对象较深的层次,但是如果这个对象某个属性不存在的话就会报错,例如:
vardata={a:{b:{c:ScriptOJ}}}data.a.b.c//=scriptojdata.a.b.c.d//=报错,代码停止执行console.log(ScriptOJ)//=不会被执行
请你完成一个safeGet函数,可以安全的获取无限多层次的数据,一旦数据不存在不会报错,会返回undefined,例如:
vardata={a:{b:{c:ScriptOJ}}}safeGet(data,a.b.c)//=scriptojsafeGet(data,a.b.c.d)//=返回undefinedsafeGet(data,a.b.c.d.e.f.g)//=返回undefinedconsole.log(ScriptOJ)//=打印ScriptOJ
答案:
constsafeGet=(o,path)={try{returnpath.split(.).reduce((o,k)=o[k],o)}catch(e){returnvoid}}
四:判断两个矩形是否重叠
题目:用一个对象的数据来表示一个矩形的位置和大小:
{x:,y:,width:,height:}
它表示一个宽为高为的矩形在页面上的(,)的位置。
请你完成一个函数isOverlap可以接受两个矩形作为参数,判断这两个矩形在页面上是否重叠。例如:
constrect1={x:,y:,width:,height:}constrect2={x:,y:,width:,height:}isOverlap(rect1,rect2)//=true
答案:
//原理: