记一次基础面试(5.18)

188 阅读5分钟

出现问题

1.自我介绍过于简短

2.简历是图片合成的pdf,面试官想点项目链接查看项目,点不开,只能扫二维码查看。

面试题

css

1.说一下css掌握的程度

2.说一下sass

3.说一下你项目中用到的styled-components

4.css布局具体说一下

5.align-content和align-items有什么区别(flex布局)

答:align-items 和 align-content的区别

  虽然两者都表示设置子元素在侧轴上的排列方式,但:
  align-items 应用于子元素没有换行(父元素代码中没有flex-wrap:wrap;)的情况下
  align-content 应用于子元素出现换行的(父元素代码中有flex-wrap:wrap;)的情况下

总结:单行(列)找align-items,多行(列)找align-content

juejin.cn/post/686691…

6.canvas用过吗?

7.一般是怎么做兼容性布局

答:flex布局,flex:1.

8.如果一个页面有很多图片,加载的很慢,应该怎么优化

9.骨架屏你做过吗?原理是什么样的?

10.水平居中了解过的方式有多少种。

juejin.cn/post/684490…

js

1.说一下事件委托机制的过程

事件委托:把子级的事件委托给父级来处理,比如平时要删除元素,添加元素,如果每一个元素都绑定事件的话效率性能可能会很低。为了提高性能我们需要使用事件委托。这样就能删除任意在同一父级下的子节点了。

图片.png

e.target是访问最小的事件

图片.png

2.事件流分多少个阶段,分别是做什么的

js事件模型正确的顺序是,事件捕获-》事件处理-》事件冒泡

图片.png

3.js常见的内存泄露有哪些,分别是怎么处理的

juejin.cn/post/698418…

4.对浏览器本地存储了解吗,这些存储的区别是什么?具体展开说一下。

5.说一下对原型/原型链的理解

6.是不是每个对象都有prototype,什么样的对象才会有prototype

7.说一下new这个操作符具体做了什么,过程是什么

7.1 创建了一个空对象;

图片.png

7.2将空对象的原型指向构造函数的原型

图片.png

7.3将空对象作为构造函数的上下文(改变this指向)

图片.png

7.4对构造函数有返回值的处理和判断,如果是返回基本数据类型,那new就会忽略,如果是引用数据类型,那么new就不生效。

图片.png

图片.png

自己实现一个new

图片.png

8.说一下call()/apply()/bind()的区别和相同点

9.关于this指向的题

a = 1;
function foo() {
    console.log(this.a); 
}
const obj = {
    a: 10,
    bar() {
        foo(); 
    }
}

obj.bar(); // 1

这里虽然obj.bar(),但是只是执行了bar()里面的foo()并没有任何人调用foo(),所以还是指向window。

10.你对ES6了解有多少,说一下

11.promise和async/await还有setTimeout他们之间有什么区别

12.promise有什么缺点和优化方法

13.说一下浏览器的事件循环机制

JavaScript 是一门单线程的语言,它的异步和多线程的实现是通过 Event Loop 事件循环机制来实现的,大体由三个部分组成,调用栈(call stack)、消息队列(Message Queue)、微任务队列(Microtask Queue)

图片.png

Event Loop 开始时会从全局代码一行一行执行,遇到函数调用会把它压入调用栈中,被压入的函数叫做帧(Frame),当函数返回后会从调用栈中弹出并执行。

JavaScript中的异步操作,例如fetch、事件回调、setTimeout、setInterval中的回调函数,会入队到消息队列中称为消息(宏任务)。消息会在调用栈清空的时候被压入调用栈执行。

图片.png

使用promise、async、await创建的异步操作,可以加入到微任务队列,调用栈为空,所以执行微任务队列中的任务,把他们压入调用栈并执行,最后压入消息队列中的任消息并执行,先同步再异步,先执行微任务再执行宏任务。

图片.png

14.说一下闭包,

15.下面这段代码的执行结果是多少

function fn(){
    var arrFn = []
    for(var i = 0;i<5;i++){
        arrFn[i]=function(){
            return i
        }
    }
    return arrFn
}
var box = fn()
for (var j = 0; j < box.length; j++) {
    console.log(box[j]())
} 

vue

1.vue中的data为什么是一个函数

2.dom渲染是在那个生命周期完成的

3.说一下v-for中key的作用

4.diff算法的原理是什么(代码大概是怎么实现的)

4.1用vnode来描述一个dom结构:虚拟节点就是用一个对象来描写真实的dom元素

图片.png

判断孩子是不是一个对象,如果是对象的话说明ta会再次调用_c这个方法,如下图中的p。如果不是对象,就会调用一个叫vnode的方法,通过这个方法把它转成一个对象。

图片.png

会将template ast树=>codegen(代码生成)=>转化成render函数 =>内部调用方法就是_c方法,最终的结论就是我们将模板转成虚拟dom(template => 虚拟dom)。虚拟dom一变会触发对应的watcher重新渲染

4.2diff算法的时间复杂度:问diff算法的时间复杂度,就是问vue中的diff做了那些优化,一般vue中都是同级比较,所以是O(n)

图片.png

4.3简述vue中diff算法原理

  1. 先同级比较,再比较子节点
  2. 先判断一方有儿子,一方没儿子的情况,如果新的有儿子,旧的没儿子,就把新的全部插到老的节点里。如果老的节点有新的节点没有,那就直接把老的节点删掉就可以了。
  3. 比较两个都有儿子的情况。
  4. 递归比较子节点。

5.keep-alive的原理是什么

6.vue路由模式有多少种

7.如果使用history造成了白屏,原因是什么,如何解决这个问题

8.讲一下动态路由和权限这个模块在项目中是怎么实现的

9.路由拦截一般都用到什么api比较多

10.vue是怎么处理基础数据类型和对象类型的,怎么去渲染更新。

11.computer和watch的区别,实现原理(代码)

12.说一下vuex

13.action是怎么去通过mation实现更新的

14.vuex分模块是怎么分的,不同模块之间应该怎么调用

其他

1.实际开发中都做过那些性能优化,把知道的都说一下

2.小程序了解吗,说一下你用过和知道的框架