快手前端面经
全程面试体验很好,面试官很nice。
一面:主要是根据我的笔试的错题来展开的。(2道选择题,一道简答题)
1.BFC?怎么触发BFC?有哪些作用?
2.因为我最后一题关于dom操作的题写的不是很好,所以聊了下这个,并且扯到了jquery。
3.问了下缓存的东西,正好前天写了博客总结,就把我知道的都讲了,面试官还算满意。
4.img元素使用margin-top有作用吗?行内元素和块级元素?行内替换和非替换元素?
5.问了些我的经历,对java和node的看法。对目前的前端和以前的jsp的看法。
6.讨论了下公司目前做的业务,公司的技术栈,问了我vue的学习情况,做过哪些项目?写过小程序没?问了下github上的项目。
7.手撕代码1:
给出出栈序列和入栈序列,判断是否正确。
比较紧张,没a出来,没办法我是那种愚钝的人,代码不够熟练,无法将自己思路转化为代码,只能把思路讲给面试官听了。
面试官说思路对的,不过建议我不能因为有其他offer就表现的不积极,就算要花很长时间也不要放弃,不会可以问面试官。(虚心接受)
大家刷题不要停,否则就会和我一样,成为惨案。
8.手撕代码2:(这个还好比较简单,写个递归函数就行,主要注意判断不同情况)
将json字符串'{"a": 1, "b": "str", "c":[2, 3], "d":{"e": 4}}'
转化为如下格式:
{
"a": 1,
"b": "str",
"c": [
2,
3
],
"d": {
"e": 4
}
} 有人问了下这道题的解答,我给下我的答案吧
let obj=JSON.parse('{"a": 1, "b": "str", "c":[2, 3], "d":{"e": 4}}');
let s="";
s+="{\n"+solve(obj,1)+"}";
function solve(obj,tab) {//没有缩进版本的
let tmp="";
if(Array.isArray(obj)){
tab++;
for(let i in obj){
tmp+=addEmpty(tab)+i+",\n";
}
}else{
for(let i in obj){
tmp+=addEmpty(tab);
if(typeof obj[i]!="object"){
if(typeof obj[i]=="string"){
tmp+='\"'+i+'\":\"'+obj[i]+'\"';
}else{
tmp+='\"'+i+'\":'+obj[i];
}
}else if(Array.isArray(obj[i])){
tmp+='\"'+i+'\":'+"[\n"+solve(obj[i],tab)+addEmpty(tab)+"]";
}else{
tmp+='\"'+i+'\":'+"{\n"+addEmpty(tab)+solve(obj[i],tab)+addEmpty(tab)+"}";
};
tmp+=",\n";//这里还需要处理下,因为最后一项是没有逗号的,但是我的是每一项有逗号。
}
}
return tmp;
}
function addEmpty(tab){
let tmp="";
for(let i=0;i<tab;i++){
tmp+=" ";
}
return tmp;
}
console.log(s);
总之整个面试过程体验很好(除了手撕代码题1),基本都像和老师聊天一样,没有什么不敢说的话题,快手确实是一家技术不错的公司。 然后聊了会让我等二面通知,二面完的话,继续更新在此贴,突然有点想去北京了。。。。。
二面:
1.问了我学习各种东西的程度,学习中遇到的困难怎么解决的。
2.问了些JSP的东西。。。。全忘了。。。
3.手撕代码:函数柯里化。。。又写砸了。。。磕磕绊绊总算写完了。。。也是把思路告诉了面试官。。。。
4.聊了一下快手目前的发展。
居然过了。。。(感觉挺幸运的,我觉得我应该算是好看的那种,感谢面试官不杀之恩)。
#春招##面经#
查看24道真题和解析