181

写在前面

现在似乎比较流行分享一些面试经验?正好最近闲来无事,简单分享一下今日关于阿里电话面试的记录,供大家参考吧。

前些日子有位阿里的大佬发私信询问我是否有意去试试【前端/全栈】的职位,说实话我当时其实是处于懵逼状态的,因为深知自己水平一般,但是还是愿意去试一试的,之后简单沟通后就把自己的简历通过邮件发给了他,然后他告诉我按流程应该很快就会接到预约面试的电话。

下面简单记录下电话面试的整个过程,以及期间涉及的问题还有自己的一些见解。

简单介绍一下在当前公司的具体工作内容(业务方向)?

开头并未让我做自我介绍,直接就开始面试了,这个整得我有点懵逼,然后就直接说了说当前工作所涉及的工作内容,之后面试官并未追问什么其他的,应该是一个暖场问题。

平时接触的前端技术可以简单罗列一些吗(较擅长的)?

我接触的前端技术很杂,基本主流的技术都有接触,然后罗列了一下,面试官也没有追问什么,我当时心想可能是面试官需要把握后面的提问方向才问的这个问题(事实证明我错了)。

先考察一下 css 相关的东西,请问如何实现一个左右宽度固定,中间自适应的布局(可以说多种方案)?

这个问题的详细答案网上应该是一搜一大把,这里就不多说了,我当时说了两种,一种是 float + bfc + 圣杯布局,另一种是 flex,关于前者 balabala 说了一堆估计面试官大概明白我意思了,然后简单说说 css 属性就好,不要解释太多原理方面的东西,然后让我说说第二种。

之后我就按他的要求把第二种涉及到的属性讲了一遍,然后他说可以了,然后追问了两个小问题:

  • 左右 div 的 width 属性可不可以被别的属性替换?
  • flex: 1 是一个缩写写法,能不能详细说一说完整的语法,以及每个参数的含义?

这个自然也比较好答,balabala 又大概说了一下,然后面试官说可以了,进行下一个问题。

这里值得一提的是,一定要听好面试官的问题,我在这里可能因为口音的原因,没太听清,以为让我列举 flex 布局涉及到的其他 css 属性,结果一顿说,最后他说只描述 flex 属性就好了。

考察一些 js 方面的东西吧,有遇到过跨域问题吗?能够给出一些解决方案?能够简单对比下不同解决方案间的优缺点吗?

这个也是比较老的问题了,考察 jsonp 和 cors。这里就不展开讲了,网上一搜一大把,我这里答的还算不错,基本从原理到实施大概讲了一下,就是对比优缺点的时候,略微卡了一下,在面试官的提示下,也回答上来了。

react 熟悉吗?

我说现在不太熟悉了,因为当时接触的时候是 0.14 版本之后就转 angular 了,不过对于一些核心的概念还是懂的。面试官没有继续追问别的相关 react 的问题。

那除了 react 的话,angularjs、angular 和 vue 哪个更懂一些?

这里我说都可以。

vue 中实现双向绑定的原理?

简单说了一下 setter/getter 涉及的东西,然后我也不知道当时脑子是短路了还是怎么的,就没继续说了,后来在面试官说你这才说了一半啊,另外一半呢?我这才回过神来,把 dom 相关的事件还有观察者模式说了一些。之后没有追问其他的东西。

angular 中 directive 概念有接触吧?可以描述下声明 directive 的语法以及涉及属性的含义?

当时我追问了一下是哪个 angular,面试官说 angularjs,然后我突然有点懵逼,因为 angularjs 已经好久未用,directive 的概念我是知道的,但是其中涉及的一些属性我是真的忘了。后来停顿了几秒,勉强回忆起部分重要的属性,大概说了一下,之后没有追问任何问题。

问一些 http 相关的东西吧,请问 http 协议是否有仔细研究过?

我这里询问了下具体指哪些方面,面试官说就是 http 协议中关于响应请求的报文格式等东西,关于 http 协议本身,由于我也是一知半解,这里就直接回答不清楚了。

再问点儿别的,linux 操作系统中的文件系统有哪些?

这个一脸懵逼,直接说不知道了。之后面试官说一般日常使用 linux 的话应该有很多机会接触这个知识点的,如果只是工作是部署下服务器,可能确实不知道,就不追问了。

linux 查看磁盘使用状态的命令是什么?

这个也没有答出来,因为确实平日上服务器也不会刻意留意磁盘使用状态,可能之前看关于 linux 的书籍也见过,但是忘了。这里面试官追问,我对于 linux 是什么使用程度,我大概描述了一下,平日是用 macos,部署的话是 ubuntu,说了一些自己平日常用的命令和工具,之后没有继续追问其他问题。

关于查看磁盘使用状态的命令,这里就不赘述了,网上搜索一下,文章很多。

有使用过 nginx 吧? 请问 nginx 与业务服务器是按照什么协议进行通信的?

nginx 作为反向代理,确实已经使用过无数次,但是背后与业务服务器通信的协议真的没有深入了解过。后来查了一下,似乎是一个叫作 cgi 的协议,这里涨知识了。

有一个宽高 100px 的 div,请详细描述一下如何实现拖拽操作(可以说多种方案)?

简单描述了使用 drag、drop 和 mousedown、mousemove、mouseup 事件的两种方案、实现过程以及优缺点。

之后面试官追问了一个问题,如果鼠标移动过快,移出了 div 容器怎么办?这个问题我一开始没有 get 到他提问的点,往边界条件和友好性说了一些,似乎是答非所问了。然后面试官提示我说有听过事件冒泡吗?我说知道,然后往事件委托上答了一些,但是还是没有说明要利用事件委托做什么,最终面试官说往 document 上增加相关事件就好了,然后我一下明白他啥意思了。

我看你简历中有写 python 以及 django,能够简单介绍一下 django 中涉及的核心概念吗?

大概按 django 那个入门文档的角度简单的将了将 django 中的 MVC 是如何表现的,以及一个 http 请求从浏览器发送至业务服务器,再到相关数据被持久化到数据库的整个过程,之后没有追问任何问题。

有什么想要询问我的问题?

我问了问面试官,关于我回答不出的这些问题,如何才能在平日工作中获取?他和我说了两点,一点是靠契机,意思就是确实会遇到相关领域的问题,第二点就是靠意识,在解决问题的时候,挖深一些,不要仅仅拘泥于解决问题的表面。

总结

总体下来,感觉是要凉凉的节奏。因为面试的职位是【前端/全栈】工程师,所以考察的问题并非局限于前端,还包含若干其他领域的知识。看来平日还需多积累,多学习,虽然我一直是以程序员、工程师的角度来要求自己,不贴过多标签,比如前端、后端之类的,对于未知的知识时刻保持好奇心,然而似乎证明力度还是远远不够的。

革命尚未成功,同志还需努力。


littlelyon
7.9k 声望1.5k 粉丝

华丽的跌倒胜过无谓的徘徊