2023开年第一面:滴滴

lxf2023-03-17 17:33:01

背景:新年过完了,当然要勇敢(不是)的迈出实习的第一步。碰巧有学长可以帮忙内推,于是将人生中的第一份简历送出去了。交完简历过了两三天就接到了滴滴的电话,然后就是约时间面试。

心理:这次作为人生中的第一次面试,多多少少会有点紧张;在与滴滴约了面试的时间后,我的心情也像过山车一样从刚约完时间的紧张,到第二天的无所谓自信即巅峰的一种放松,再到面试前的紧张。

现在开始面试的正文:

开始

本次面试是一次线上的面试,于是提前进入了会议等待面试官的出现。终于在约定时间的前两分钟见到了我的面试官。于是就是我的自我介绍:老师好,我是xxx,来自xx大学,目前是大三,然后简单的说了一下自己掌握的技术栈。(这里的自我介绍说的时候有点磕磕碰碰,个人感觉可以说的稍微详细一点,然后提前准备好自我介绍)。

自我介绍完毕之后就开始进入正题: 一开始面试官就边听我的自我介绍边看我的简历,于是问我写的什么项目,我就将自己写的React、Vue以及微信小程序简单的介绍了一下。就有了面试官的第一个问题

1. 你是怎么解决项目里面的跨域问题?

听到这个问题我马上想到了解决跨域的三种方法:

  1. JSONP

  2. Cors

  3. node代理

当然最好先介绍一下产生跨域的原因,然后再讲解一下解决跨域的方法。

然后就是问题1.1:讲一下Cors是怎么让响应的时候不跨域的: 在这里我也只是大概的知道Cors解决跨域的一些原理,但是里面具体的操作是没有详细的去了解,只是知道在响应头里面配置一些白名单之类的。

2. 问的是项目里面做了一个路由匹配实现页面的跳转,这个是怎么做的?

对于这个问题我的回答是:单页面应用使用路由匹配进行页面的跳转实现页面内容的更新。于是我就对于这个问题讲了三个知道的前端路由原理:

  1. history模式
  2. hash模式
  3. abstract路由模式

对于前面两个的原理还是比较的熟悉,第三个是vue路由中的第三种模式,当然这个模式我了解的也不多,也只是知道有这么一个模式,大致的记得它的实现效果,并不清楚其深层原理。

3. 问我项目使用仓库存储数据具体是什么?

当然我写的项目就是使用了仓库保存了一些数据状态,实现了数据管理的一个效果,而最终面试官问我项目有没有使用数据库,我的答案是否定的。

4. 你有了解过小程序的大概原理吗?

对于小程序本人是很早之前使用其开发过一个很简单的项目,但是被问到它的原理时,我当时也是大脑一片空白。

5. 简单的讲一下CSS中的盒模型,怎么触发?有什么效果?

盒模型:标准盒模型以及IE怪异盒模型的理解;

差异:标准盒模型总宽度:width + padding + border + margin 怪异盒模型总宽度:width + margin

也就是说标准盒模型的 width/height 是内容的宽度和高度之比,而不包含 padding 和 border 在里面;而怪异盒模型的 width/height 是包含了 padding 和 border 在里面的。

6. 手写一个 元素水平垂直于父元素

遇到这个问题的时候,当时脑子里面想到的第一个就是父盒子实现弹性布局;然后用绝对定位加上一些margin;以及已知各个容器的宽度,直接用margin。虽然这个问题听起来很简单,但是不可以掉以轻心,非常考察基础,实现这个效果的方法远不止这一些,当时面试官也跟我说了一些其他的实现方法,个人感觉当时回答的不满意,当时以为这种问题可能不会被问到或者最多是简单的问问,没想到是直接手写。当然如果小伙伴们也有不记得的方法,可以上网查查复习一下。

7. JS的基础类型? var、let、const的区别

基础类型以及这三个声明方式的区别当然是要记住的。

8. 你了解过这个ES module 吗?

这个问题当时被问到是非常懵的,然后调整了一下回想到 ES6 模块的导入模块使用 import 。这一块知识点也确实没有认真的去学习,所以当时被问到的时候非常懵。

9. webpack在处理import是怎么做的?

我当时回答的是webpack是怎么打包的,当然针对于这方面还需要进行学习,面试官也是让我回去看一下这方面的知识。

10. Promise 你有用过吗?

我是从介绍,使用场景以及用法三个方面进行介绍的;面试官丢了一道题目出来让我看执行结果,但是回答的有问题,可能是紧张加上自己以为这种问题要是被问到肯定没问题的心理没有复习这个知识点,但究其原因还是掌握的不够;当然对于 promise 的介绍以及使用场景回答的还不错,但是一看题目就有点懵;像极了以前高中月考的时候,对某个知识点极其仔细,但是考场上一看到题目就只会理论。所以还是需要多加学习的。

11. 你了解过 Js 的事件循环吗?宏任务有哪些?微任务有哪些?

我的回答是是什么?然后宏任务、微任务。

12. JS 中的 this ,以及怎么改变this? 手写一个 bind

this以及改变this的方法我会使用,但是手写就不会了,得 又摸到了一个不会的,还得继续学习。

13. 讲讲vue3的响应式,vue3的内部是怎么代理的?

我的理解就是vue3的响应式是vue2的升级,然后介绍了这两个实现响应式的方法的区别,介绍vue2响应式的缺点;对于vue3的内部是怎么代理的?我只知道vue3内部使用api的方法,但是面试官想问的是:响应式具体是怎么实现的。

14. vue3 的响应式库是独立出来的,它单独使用的时候是什么效果?

我的回答是可以实现页面上数据更新,数据源的数据也可以更新这种效果。对于这个问题我也不知道回答的是对还是错。当然面试官让我可以多看看这方面的,也跟我说响应式是收集依赖和依赖变化这种东西,当然我是不了解的,所以需要更加深入的学习。

15. vue3 的一些响应式api你有用过吗?

我回答了 ref() 与 reactive() 这两个以及其区别。

16. 可以简单的写一下reactive()实现ref()吗?

对于reactive()实现ref()当时没想到,但是后面看了感觉好像也不是很难。

17. 讲一下v-dom吧,讲一下为什么使用这个,它有什么优缺点?

我介绍了一下虚拟dom是什么,然后回答了频繁的修改真实dom的缺点,对于虚拟dom的优点我回答可以提升性能,但是对于其缺点我还是不知道。

18.二叉树算法题、合并有序链表

对于算法我还是需要加强学习,对于二叉树我不会,于是面试官给我换了一道合并有序链表,并且也对我的算法提供了一些有用的建议嘿嘿。

总结:这次面试发现了自己的不少问题,就比如对于CSS的一些基础问题掌握的不是很深很熟练,当然一次面试一次收获,这次面试让我找出了自己的一些问题,还需要更加努力的学习;这次面试也有点紧张,面试官也很好,很有耐心的让我思考,从11点不到面到快12:20,后面也向我提出一些中肯的建议。emmm 这就是我的第一次面试!