整理一波最近遇到的面试题

147 阅读2分钟

CSS:

1、BFC

BFC即为块格式化上下文,页面中的一块渲染区域,并且有一套自己的渲染规则,决定了其他子元素如何定位以及和其他元素的关系、相互作用。与区域外部毫不相干。

满足下列CSS声明的会生成BFC:

根元素html

float的值不为none

overflow的值不为visible

display的值为inline-block、table-cell、tabel-caption

position的值为absolute或fixed

BFC约束规则:

内部的box在垂直方向上排列

垂直方向上的距离由margin决定,会发生margin重叠

BFC的区域不会与float的元素区域重叠

计算BFC的高度时,浮动子元素也参与计算

BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面元素,反之亦然

看到以上的几条约束,想想我们学习css时的几条规则

Block元素会扩展到与父元素同宽,所以block元素会垂直排列垂直方向上的两个相邻DIVmargin会重叠,而水平方向不会(此规则并不完全正确)

浮动元素会尽量接近往左上方(或右上方)

为父元素设置overflow:hidden或浮动父元素,则会包含浮动元素

BFC应用:

防止margin塌陷
清除浮动
自适应两栏布局

2、伪元素与伪类的区别:

juejin.cn/post/697664…

3、重排与重绘:

4、flex布局属性:

Js部分: 1、闭包、垃圾回收机制

2、原型链

3、es6方法

4、promise

5、async、await

6、

class B {
    fn() {
        console.log(this);
    }
}
let b = new B();
let Fn = b.fn();
Fn();

7、forEach、map的区别以及怎么中断。

相同点:都是循环遍历数组的每一项

不同点:map会返回一个新的数组,forEach不会返回新数组

不能使用break、continue,只能使用throw Error()抛出异常进行终止循环。

8、浏览器的事件循环

9、设计模式

10、ts基本类型、交叉类型、联合类型

11、js深拷贝浅拷贝

12、匀速、匀加速、匀减速js动画实现(window.requestAnimationFrame)

13、字符串模板函数实现

    const template = "My name is ${name}, age is ${age}";
    const str = sprintf(template, {
        name: "xiaoming",
        age: 18
    });  // My name is xiaoming, age is 18

14、数组扁平化、去重、排序实现。

15、堆栈、内存泄露、常见的内存泄露:(闭包,setInterval)

16、跨域,除了ajax请求,还有哪些会报跨域错误。

vue:

1、$nextTick原理及实现

2、vue props原理