滴滴面试后!很痛但💗

在这近期这段时间内,我面试了两次滴滴(先后两个不一样的部门),也面试了一些小公司,这些面试对个人帮助是很大的,不仅是为了一份实习生的工做,一次又一次的面试后个人心态上愈加平稳,也发现了本身在学习上的一些缺陷,一直也没对其进行一次系统的总结,这篇文章就用来总结下个人感触和领悟吧!前端

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

1. 滴滴面试的内容

第一次

基础部分:面试

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

一道思路讲解:算法

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

写代码部分:后端

  • leetcode 227题 基本计算器II
  • 版本号比较大小(按部就班的慢慢提出新问题,并解决)

第二次

不得不说第二次的面试官很是好,不会太有压力,其面试的风格也不同(我甚至能现场查文档百度😜)。浏览器

前半部分

介绍本身的项目,而后面试官会找出一些项目的问题来叫你解决,不会很难,也许就是布局的一些缺陷。服务器

后半部分

面试官出了一道题(不会很难),你来获得结果,而后叫使用另外一种方法,另外一种思路实现,最后再叫简化代码,将代码压缩到使用一行就实现功能。这里面试官主要是看看我写代码的习惯和思路。微信

简单刨析下面试题

第一次的面试官面试时面了我一个多小时,大概就是半个小时JS基础的考察加上半小时手写代码的考察,JS基础部分就不在这里总结了,推荐你们面试前必定多看看《你不知道的Javascript上册》,下面说说第一次的几个手写题和后面第二次的一些项目上被挑出来的缺点,与改进。版本号比较的就不写了,这是一个面试中用于层层递进的考察题。markdown

1.基本计算器题目

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

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

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.项目优化改错

抛出张图:

image.png

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

image.png

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

image.png

这里介绍下flex-shrink属性:
flex-shrink(定义了项目的缩小比例)
属性值:任意正数值,小数,整数,负值是不被容许的。默认为1
默认为1,即若是空间不足,该项目将缩小。
若是全部项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。
若是一个项目的flex-shrink属性为0,其余项目都为1,则空间不足时,前者不缩小。
注意:flex-shrink的宽度的缩小的分配是使用加权运算的。能够看看这里,flex-shrink的宽度分配

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

image.png

因而调了下margin-top值。

image.png

项目在介绍后就给现场改了下这些错,个人项目仍是太糙了,作一个项目必定要奔着能拿出来用的想法去,多方面都要考虑到位。

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

题目:

QQ图片20210417094832.png

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

  • 第一步,面试官叫我经过'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
}
复制代码

2.面试注意点总结

我面试的都是实习生岗位,不少公司对实习生的招聘是很看重基础的,必定要把基础打牢

下面我将总结个人血的教训带来的面试经验总结😭

开头自我介绍

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

后来我就反思了下,面试官不了解你,他须要经过你的自我介绍来了解你,一个完整的自我介绍是对面试官的基本尊重。

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

面试时被考察时

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

在面试时,不要说你之前好像作过好像会多是这样,这种的模糊字眼,这样有点令人感受没有准备好就参加了面试,这确定是影响面试官心态的,面试官想看到的是能理性解决问题的人,若是面试官提的问题你会,你就沉稳的组织答案,为面试官理性分析,若是你不会,那你也不能放弃,你也许能够向面试官询问点提示,本身推断下答案,要充满热情的对待问题去解决,而不是逃避,面试官有和我说,他们出的问题都会介于咱们会与不会之间,你会就继续深刻,总会问到不会的地方,咱们须要带着探索的心态和热情去寻找答案,看咱们解决问题的习惯。

另外,在平时也要多学习,积攒知识,才能应对的了。。😥,建议多看看阮一峰的博客,和掘金讶羽,神三元等众多大佬的博客,但也别脱离了系统的书籍方面的学习基础知识点。(好多要看😆)

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

介绍项目

先说说咱们应该怎样的项目吧!
我第二次面滴滴的那个面试官老师,在我问他什么样的项目能获得他们的青睐时,他就说,若是是本身想法作出来的就很好,好比是解决本身身边事情的项目。好比面试官老师本身,他说他大三时作了一个能实时显示寝室电费余额的项目,由于他们学校只有特定的两天才能充电费,若是错过了,电费用完了就没电用,就要等到能充费的那天才能充费用电

这样的项目能体现出咱们对技术的热情
而且,咱们作项目必定要有个作出来就能用的想法,要细致,页面布局要细致,功能要完善,这个项目最后也许会接触到先后端编码,以及搭建服务器等等,你接触到的技术栈就会特别丰富。

怎么介绍项目:
项目怎么来的 + 解决了什么问题,想作成什么 + 说说项目里的需求, + 使用了什么技术栈,采用了什么行动方式,具体作了哪些工做内容 + 有哪些难点,怎么解决的 + 结果如何,有什么体会总结

我以为这篇就很详细:STAR法则

唉,我还要继续努力,努力,继续写项目,作题目,学习知识点,认认真真的写一些总结文章,如今的我有点菜。。。最后说一句,第二次滴滴面试遇到的面试官老师真的好。

笔者如今正在找一份前端实习的工做,wx:xieHB-frontend-178,加个微信一块儿学习😜,但愿有大佬给个内推,哈哈!

相关文章
相关标签/搜索