记一次滴滴SP现场面试——前端开发(秋招)

998 阅读7分钟

     记一次,滴滴现场面,前几天投递了简历,没想到收到了面试邀请,就在滴滴数字山谷下沉广场的白树咖啡厅,第一次现场面试,进去后看到了很多面试官和应聘者,1v1,内心还是很紧张的,进去了后,工作人员将我带到了休息厅,进行了签到,然后等待叫号,等待面试,对于这次提前批滴滴新锐的面试,我没想着我能过,因为我的能力我自己心里清楚,就是体验一番现场面试的感觉。

    滴滴滴,我是28号,不久就喊我了,然后被工作人员带到了面试官面前,拿出简历,给面试官一份,准备开始面试了。紧张,紧张,紧张,刚开始自我介绍,面试官说他也是西安的,突然觉得很亲切,就不怎么紧张啦,开始面试~

  • 一面
  1. 自我介绍
  2. js中的数据类型有哪些,它们的区别(基本数据类型,引用数据类型,QAQ紧张的竟然想不起Boolean...,还好面试官提醒了我) 
    • 基本数量类型:Undefined Null Symbol Boolean String Number
    • 引用数据类型:Object
    • 基本数据类型存储在栈中,即存放在栈内存中的简单数据段,数据大小确定,内存大小可以分配,是直接安置存放的,所以可以直接访问。 
    • 引用类型(object)是存放在堆内存中的,变量实际上是一个存放在栈内存的指针,这个指针指向堆内存中的地址。每个空间大小不一样,要根据情况开进行特定的分配。
  3. js中的隐式转换
    • null == 0 ?  false
    • [] == 0 ?  true
    • "" == [] ?  true
    • [] + 0 = ?  "0"
  4. 一道处理数组的题: var a = ['A1','A2','B1','B2']; var b = ['A','B','C']                                得到 c = ['A1','A2','A','B1','B2','B','C']     
  5. 原型 原型链
    • __proto__ 、 prototype 和 constructor 之间的关系
    • Function 和 Object 之前的关系,原型链中,Object怎么连接到Function(这一点不是很清楚)
  6. 继承的方法,各种的优缺点。
    • 原型链继承
    • 借用构造函数继承
    • 组合式继承
    • 寄生式继承
    • 原型式继承
    • 寄生组合式
  7. CSS盒模型:由四部分组成,content padding border margin
    • W3C标准盒模型的width = content
    • IE盒模型的width = content + padding + border
    • box-sizing 属性可以被用来调整这些表现:

      • 标准盒模型box-sizing:content-box 是默认值。如果你设置一个元素的宽为100px,那么这个元素的内容区会有100px 宽,并且任何边框和内边距的宽度都会被增加到最后绘制出来的元素宽度中。
      • IE盒模型box-sizing:border-box 告诉浏览器:你想要设置的边框和内边距的值是包含在width内的。也就是说,如果你将一个元素的width设为100px,那么这100px会包含它的border和padding,内容区的实际宽度是width减去(border + padding)的值。大多数情况下,这使得我们更容易地设定一个元素的宽高。
  8. CSS中的选择器,权重如何计算。                                                                                   

    !important>行内样式>ID选择器 > 类选择器 | 属性选择器 | 伪类选择器 > 元素选择器
    • 行内样式总会覆盖外部样式表的任何样式(除了!important)
    • 单独使用一个选择器的时候,不能跨等级使css规则生效
    • 如果两个权重不同的选择器作用在同一元素上,权重值高的css规则生效
    • 如果两个相同权重的选择器作用在同一元素上:以后面出现的选择器为最后规则.
    • 权重相同时,与元素距离近的选择器生效

9. Less中是怎么实现样式继承的,有过了解吗

10.  let const 和 var的区别

    • let const 不存在变量提升
    • const的作用域与let命令相同:只在声明所在的块级作用域内有效。
    • let命令、const命令、class命令声明的全局变量,不属于顶层对象的属性。也就是说,从 ES6 开始,全局变量将逐步与顶层对象的属性脱钩。
    • 本质:const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针,const只能保证这个指针是固定的(即总是指向另一个固定的地址),至于它指向的数据结构是不是可变的,就完全不能控制了。

11. ES6中的symbol有用过吗?ES6中如何实现继承,extend的原理是什么?

12. Object.create() 有了解吗

13. js如何异步加载,我扯到了js单线程,Event Loop,hahaha

    • 将 <script> 标签放在<body>底部
    • 给 <script>设置 defer属性
    • 给 <script>设置 async属性
    • 动态创建 <script> 标签

defer 和 async 的区别是什么?没有回答上来...

14. 由于我扯到了事件循环,然后他就问了一道js输出顺序的题,然后我就说了宏任务和微任务~

15. 事件冒泡 和 事件捕获,事件代理

16. HTTP缓存: 强制缓存 和 协商缓存,你知道from disk cache(磁盘缓存)from memory cache(内存缓存)两类缓存吗,两者有什么区别呢?

17. 同源策略是什么,跨域的解决方法,jsonp的原理,为什么jsonp只能用get方法,不能用post方法。

18. 重排和重绘是什么?

19. 虚拟Dom,Diff算法,Vue和React中diff算法有什么区别。

暂时一面就回忆到了这么写问题,面完一面都12点多了,十一点开始面试的,时长一个小时,然后被工作人员带去休息厅,吃了提供的盒饭,是田老师的~,然后吃完了,没过多久,就让我二面,这时候真的头疼,中午也没有休息,没状态,就这么去了二面。。。

  • 二面,应该就是滴滴D8级别的大佬了吧。。。过去后我坐在了他的面前,他似乎很忙的样子,我把我简历给了他,他说让我等一会,觉得一面面试官很和蔼,二面的大佬很冷漠,我都不想再面试了。。。
  1. 自我介绍
  2. 介绍在实习期间干的事,给我几分钟介绍。
  3. 手写vue父子组件传值,假设给父组件传过来一个数组,然我尽量把代码写全,实现父子组件传值,并在子组件中获取值,然后进行渲染。

    let data = [{
      title: 'a',
      url: 'xxx'
    },{
      title: 'a', 
      url: 'xxx'},{  
      title: 'a', 
      url: 'xxx'
    }]

4. Vue最核心的是什么,我说是响应式,双向数据绑定,MVVM模式。让我手写一个响应式原理,利用 Object.defineProperty 来实现。

5. 数据结构了解吗,基本的数据结构知道几个,链表是什么,如何用栈实现一个队列,基本都是手写代码。。。

6.  手写一个函数实现,每次调用,让counter+1,他看了我写的函数之后说写的对着,我竟然写对了一道题。。。

// function counter() {}
// var c1 = counter()
// c1() 输出 1
// c1() 输出 2
function counter() {
  var count = 0;
  function fn() {
    return count += 1
  }
   return count
}

// 然后又问我 

 var c1 = counter()
  c1() 输出 1
  c1() 输出 2
 var c2 = counter()
  c1() 输出什么?
  c2() 输出什么? 为什么

7. 盒模型画一下,实现以下布局,说出具体怎么实现的(类似于三栏布局,两栏布局吧,很久没复习了。。。)

8. 一道题,写出一个函数统计数量,比如统计com的数量是3,com.cn数量是1....

var arr = [
    'www.baidu.com',
    'baidu.com',
    'google.com',
    'a.image.com.cn'
]

肯定是凉凉了,二面状态不好,很多没写出来,不过还是有收获的,体验了一下现场面试,觉得自己需要更加的努力了,加油!!!(一面过了还是很开心的~)