当前位置: 首页 > 面试经验 >

面试官:既然只学了一个月,那就问些基础问题吧

优质
小牛编辑
161浏览
2023-03-28

面试官:既然只学了一个月,那就问些基础问题吧

前言

楼主非科班零基础转前端(提桶跑路.jpg

当时也不知道哪来的自信,给自己定了自学一个月上岸实习的目标

显然,这么短的时间来不及把书从头到尾看一遍,那该怎么办呢

有一天,突然在牛客发现了面经这一好东西

于是,我尝试着把近几个月面经中的高频题搜集下来

配合着GitHub上的一些学习笔记,强行把答案背下来,直接把计算机学成文科

一个月后,我收到了一家独角兽的面试邀请,开启了我的第一次被拷打经历

拷打现场

一段磕磕绊绊的自我介绍后

面试官:既然你只学了一个多月,我就不问框架了,问你一些基础问题吧!

我:好啊好啊(内心窃喜)

面试官:我先问些CSS吧,说一下你对BFC的理解。

我:BFC就是一个独立的容器,容器里面的元素不会影响容器外的元素,容器外的元素也不会影响容器里的元素(前几天刚好背到嘿嘿)

面试官:嗯嗯,那BFC有哪些作用呢?

我:BFC的作用不就是充当一个封闭的容器嘛

面试官:那这个容器有哪些功能呢,或者说有哪些特性?

我:功能?功能不就是为了隔离容器内外的元素…

面试官:好吧,那你说一下哪些情况会触发BFC?

我:我记得有以下几种情况,float不为none,position为absolute或fixed,overflow为visible…

面试官:等等,你确定是overflow为visible的时候触发BFC吗?

我:不…不…太确定(我意识到好像背错了)

面试官:那我问一些JS吧,你知道var和let的区别吗?

我:区别主要有以下几点:

  1. let存在块级作用域,var不存在
  2. var可以重复声明,let不可以
  3. var存在变量提升,let不存在
  4. 如果在声明let前使用这个变量,会出现暂时性死区
    (这回应该没背错吧)

面试官:好,来看一段代码,这里的 x 输出多少

{
    x = 1;
    let x = 2;
}

我:这应该会报错吧,因为存在暂时性死区

面试官:你确定吗?

我:确...确...定吧(难道我又理解错了吗)

面试官:好的,这是对的,我就是诈一下你。那如果改成这样呢

var x = 1;
{
    let x = 2;
}

我:应该也是暂时性死区吧,毕竟在声明 x 之前使用了

面试官:那你说一下对暂时性死区是怎么理解的,报错会报什么错?

我:暂时性死区就是在声明这个变量前不能使用,至于错误类型的话我没了解过

面试官:那如果我再改成这样,x 应该是多少呢?

{
    let x = 1;
    var x = 2;
}

我:应该是2吧,虽然let不能重复声明,但下面用的是var,所以应该是2

面试官:好吧,既然你没学过数据结构和算法,那我也不出算法题了。你试着实现一个Promise.all吧

我:磨叽半天,靠着仅存的一丝记忆,默写了如下版本的Promise.all

Promise.prototype.myAll = function (arr) {
    const results = [];
    return new Promise(function (resolve, reject) {
        for (const p of arr) {
            Promise.resolve(p).then(function (val) {
                results[i] = val;
                if (results.length === arr.length) {
                    return resolve(results);
                }
            }, function (err) {
                return reject(err);
            });
        }
    });
};

面试官:整体思路是对的,但第7行有个小错误,你能改一下吗?

我:可以提示一下下吗

面试官:假如最后一个Promise率先完成了,但其他的Promise还没完成,那不就触发resolve了嘛,你可以换一个判断条件

我:对哦,但我好像也不知道怎么改(毕竟背的)

后记

第一次面试,以完败收场,我觉得面试官这辈子都没见到过这么无语的候选人

这次失败给我的最大教训是:学前端一定要有自己的理解,多动手实践,形成系统化的知识体系

如果只是死背面试题的话,很容易经不住问。比如上文中提到的关于var和let的区别,我只是把面试题中的四点区别生搬硬套过来,并没有实践过,也不知道为什么需要有var和let这两种变量声明方式。

另外,网上的面试题答案大多存在一些问题。事后我检查了一下,我当时默写的Promise.all和我背的面试题答案几乎一样,遗憾的是我背的那个刚好是一个错误版本的Promise.all。因此,面试题只能作为检验学习成果的一个参考,而不应该是知识的来源。

什么是系统化的知识体系?简单来说就是把有关联的知识点串起来,在脑海中形成一张图谱。比如上文中提到的BFC,我们不仅需要知道BFC这个概念,还需要理解:为什么要有BFC;BFC有什么作用;它在实际工作中是怎么使用的;它的全称块级格式化上下文到底是什么意思;除了块级,还有其他的格式化上下文嘛等等都一系列问题。自此,从BFC可以引申出很多其他的知识点,比如IFC、标准文档流、清除浮动、外边距重叠等等。一旦真正理解了BFC,也就不会出现我上面回答的overflow为visible会触发BFC这种低级错误了。

以上就是我的第一次实习面试经历和一些感悟,希望能给刚入门的前端人一些帮助~

本文正在参与 【实习出道计划活动 】!欢迎一起来聊实习那些事,赢京东卡、牛币、名企联名工牌奖励吧 ~

#实习面试初体验##实习##前端##前端工程师##面经#
 类似资料: