关于前端:滴滴前端面试问题没被难倒自我介绍面试时被考察等环节回答却是灾难现场

8次阅读

共计 4154 个字符,预计需要花费 11 分钟才能阅读完成。

前言

在这近期这段时间内,我面试了两次滴滴(前后两个不同的部门),也面试了一些小公司,这些面试对我的帮忙是很大的,不只是为了一份实习生的工作,一次又一次的面试后我的心态上越发安稳,也发现了本人在学习上的一些缺点,始终也没对其进行一次零碎的总结,这篇文章就用来总结下我的感触和领悟吧!

滴滴的面试是比拟有代表性的,这篇文章就以滴滴的面试内容与面试官反馈为主来引入吧!

滴滴面试的内容

第一次

根底局部:

  • 原型链
  • 作用域晋升,变量晋升
  • 执行上下文和执行栈
  • 事件循环机制 Eventloop
  • this 的指向问题

一道思路解说:

  • 不必 if-else,switch,或 >,< 等比拟大小的符号,总分为 100 的考试,失去学生的等级(90-100 为一等生,80-90 为二等生,以此类推),我说的思路是求余,大佬们在评论区给给思路😃

写代码局部:

  • leetcode 227 题 根本计算器 II
  • 版本号比拟大小(循序渐进的缓缓提出新问题,并解决)

第二次

不得不说第二次的面试官十分好,不会太有压力,其面试的格调也不一样(我甚至能现场查文档百度😜)。

前半部分

介绍本人的我的项目,而后面试官会找出一些我的项目的问题来叫你解决,不会很难,兴许就是布局的一些缺点。

后半局部

面试官出了一道题(不会很难),你来失去后果,而后叫应用另一种办法,另一种思路实现,最初再叫简化代码,将代码压缩到应用一行就实现性能。这里面试官次要是看看我写代码的习惯和思路。

简略刨析上面试题

第一次的面试官面试时面了我一个多小时,大略就是半个小时 JS 根底的考查加上半小时手写代码的考查,JS 根底局部就不在这里总结了,举荐大家面试前肯定多看看 《你不晓得的 Javascript 上册》,上面说说第一次的几个手写题和 前面第二次的 一些我的项目上被挑出来的毛病,与改良。版本号比拟的就不写了,这是一个面试中用于层层递进的考查题。

1. 根本计算器题目

题目:1 <= s.length <= 3 * 105,s 由整数和算符 ('+', '-', '*', '/') 组成,两头由一些空格隔开 s 示意一个 无效表达式 表达式中的所有整数都是 ** 非负整数 **,且在范畴 [0, 231 - 1] 内 题目数据保障答案是一个 32-bit 整数。

思路:咱们能够用一个栈,保留这些(进行 乘除 (分优先级) 运算后的)整数的值。对于加减号后的数字,将其间接压入栈中;对于乘除号后的数字,能够间接与栈顶元素计算,并替换栈顶元素为计算后的后果。

var calculate = function(s) {// s=s.trim();// 去除两边的空格
    const stack=[];// 数值栈
    let sign='+';// 符号
    let ans=0;// 累加和
    s = s.replace(/\s/g, '')
    for(let i=0 ; i<s.length ; i++){
        let num ='';
        // 判断是否是符号
        if(s[i]<'0'){sign=s[i];
        }else{while(s[i]>='0'&&i<s.length){num=num+s[i];
                i++;// 这里是用于组合两位数以上的值
            }
            i--;// 如果下面跳进去了就多了一次,最大是 s.length
            // 接下来,把数据压入栈
            num=Number(num);
            switch(sign){case '+':stack.push(num);
                break;
                // 减法化为正数
                case '-':stack.push(-num);
                break;
                // 乘除就与栈顶元素进行运算再压入栈
                case '*':stack.push(stack.pop()*num);
                break;
                case '/':
                    stack.push(stack.pop() / num | 0);
                // 留神这 | 的用法,它能失去一个整数
            }
        }
    }
    // 最初只须要累加
    while(stack.length){ans+=stack.pop();
    }
    return ans;
};
复制代码

2. 我的项目优化改错

抛出张图:

这里个人主页我用了 flex 布局使头像和用户名位于同一行,然而屏幕宽度发生变化后,圆形头像变成了椭圆形。面试官老师就叫我改属性解决这个问题。(这个页面的图我也是切的过于粗犷,羞愧羞愧)

到这里就不得不多说一句,flex 属性肯定要烂记于心。。。因为我的页面用的都是 antd 的 UI 组件,刚开始我还认为是组件的什么属性没有设置好,就去 antd 文档那看, 最初没发现问题,而后面试官就疏导我到页面应用浏览器的开发者工具来查看,最初发现是 flex 的属性 flex-shrink 的问题,于是给头像盒子加了个flex-shrink:0, 使头像变回圆形(但还是存在很多问题的,比方头像变回了圆形却没有同步放大,屏幕变小了,头像大小却没变)。

这里介绍下 flex-shrink 属性:
flex-shrink(定义了我的项目的放大比例)
属性值:任意正数值,小数,整数,负值是不被容许的 。默认为 1
默认为 1,即如果空间有余,该我的项目将放大。
如果所有我的项目的 flex-shrink 属性都为 1,当空间有余时,都将等比例放大。
如果一个我的项目的 flex-shrink 属性为 0,其余我的项目都为 1,则空间有余时,前者不放大。
留神:flex-shrink 的宽度的放大的调配是应用加权运算的。

而后还有一点,就是我我的项目的首页的侧边栏的标签,高低挨的太近了。

于是调了下 margin-top 值。

我的项目在介绍后就给现场改了下这些错,我的我的项目还是太糙了,做一个我的项目肯定要奔着能拿进去用的想法去,多方面都要思考到位。

3. 第二次滴滴面试时写的代码

题目:

这道题不难,面试官想看看咱们的代码习惯了思路怎么样。

  • 第一步,面试官叫我通过 'a.b.c' 与 obj 失去 c 的值。

惯例得法:

let obj = {
    a: {
        b: {c: 666}
    }
}
let str = 'a.b.c'// 先失去 'a.b.c' 再失去 'a.f.c' 要返回谬误

function getData(obj, str) {let arr=str.split('.');
     for(let i=0;i<arr.length;i++){obj=obj[arr[i]]
     }
     return obj;
}
console.log(getData(obj, str)) //666
复制代码

刚开始我用了一步很粗犷得办法😏

function getData(obj, str) {return eval(`obj.${str}`);// 间接运行字符串,一步到位,太粗犷简略了
}
复制代码
  • 第二步,思考 a.f.c 这样的状况, 即混入不存在的属性。
function getData(obj, str) {let arr=str.split('.');
    for(let i=0;i<arr.length;i++){if(!(obj=obj[arr[i]])){return false;};
    }
    return obj;
}
复制代码
  • 第三步应用 es6 里的迭代器,比方 reduce,将代码写成一行就失去后果
function getData(obj, str) {return str.split('.').reduce((x,y)=>(x?x[y]:x),obj);
    // 使用三元运算符判断,如果是 a.f.c, 就返回的是 undefined
}
复制代码

面试留神点总结

我面试的都是实习生岗位,很多公司对实习生的招聘是很 看重根底的,肯定要把根底打牢

小编整顿了份前端根底面试题,点击就能够支付

上面我将总结我的血的教训带来的面试经验总结😭

1、结尾自我介绍

面试官一半结尾都会叫咱们先自我介绍,记得刚开始第一次面试时,我只介绍说,我是某某大学,大三学生,想应聘前端实习生,学前端一两年了,而后没了。。。难堪😱。
这个之后,不出预料,面试官就会问你,你是什么业余的,你感觉你前端哪方面学的最好这样的。

起初我就反思了下,面试官不理解你,他须要通过你的自我介绍来理解你,一个残缺的自我介绍是对面试官的根本尊重。

我当初个别是这样介绍的:我的学校 + 我的业余 + 大三在读 + 学习里学的重点课程 + 本人在校状况,拿过什么奖之类 + 为什么抉择前端 + 前端学的怎么样,都会哪些[+ 本人平时是否有在写技术博客这样总结的习惯]+ 本人做了什么我的项目

2、面试时被考查时

这个我又血的教训。。。😭

在面试时,不要说你 以前如同做过 如同会 可能是这样 , 这种的含糊字眼,这样有点使人感觉 没有筹备好就加入了面试,这必定是影响面试官心态的,面试官想看到的是能感性解决问题的人,如果面试官提的问题你会,你就沉稳的组织答案,为面试官理性分析,如果你不会,那你也不能放弃,你兴许能够向面试官询问点提醒,本人推断下答案,要充满热情的看待问题去解决,而不是回避,面试官有和我说,他们出的问题都会介于咱们会与不会之间,你会就持续深刻,总会问到不会的中央,咱们须要带着摸索的心态和激情去寻找答案,看咱们解决问题的习惯。

另外面试时算法和源码也是重头戏,平时必须多刷刷这些(低微笔者,始终在膜拜算法和源码,正在致力)。

3、介绍我的项目

先说说咱们应该怎么的我的项目吧!
我第二次面滴滴的那个面试官老师,在我问他什么样的我的项目能失去他们的青眼时,他就说,如果是本人想法做进去的就很好,比方是解决本人身边事件的我的项目。比方面试官老师本人,他说 他大三时做了一个能实时显示寝室电费余额的我的项目,因为他们学校只有特定的两天能力充电费,如果错过了,电费用完了就没电用,就要等到能充费的那天能力充费用电

这样的我的项目能体现出咱们 对技术的激情
并且,咱们做我的项目肯定要有个 做进去就能用的想法,要粗疏,页面布局要粗疏,性能要欠缺,这个我的项目最初兴许会接触到前后端编码,以及搭建服务器等等,你接触到的技术栈就会特地丰盛。

怎么介绍我的项目:
我的项目怎么来的 + 解决了什么问题,想做成什么 + 说说我的项目里的需要,+ 应用了什么技术栈,采纳了什么口头形式,具体做了哪些工作内容 + 有哪些难点,怎么解决的 + 后果如何,有什么领会总结

最初

总体面试下来,就像之前说的很多公司对实习生的招聘是很 看重根底的,肯定要把根底打牢。所以小编针对这次的面试具体整顿的一份前端根底面试题材料,不要认为根底很简略本人都会哦,查漏补缺的看下,确保面试问到根底题时十拿九稳。

篇幅无限起因,图片展现了局部题目,须要完整版 PDF 的前端根底面试题小伙伴点击这收费支付

喜爱这篇文章的小伙伴们请 点赞 + 评论 反对噢,比心

正文完
 0