JS面试篇
1: 基本类型主要为以下7种
2: 数组的常用方法有哪些
3: JavaScript字符串的常用方法有哪些
4: 谈谈 JavaScript 中的类型转换机制
5: == 和 ===区别,分别在什么情况使用
6:深拷贝浅拷贝的区别?如何实现一个深拷贝
7: 说说你对闭包的理解?
8: 说说你对作用域链的理解
9: javaScript原型,原型链 ? 有什么特点?
10: Javascript如何实现继承
11: 谈谈this对象的理解
12: typeof 与 instanceof 区别
13:说说你对事件循环的理解
14:如何实现一个new
15: 浏览器有哪些缓存: 先强缓存在协商缓存
16:Map 和Object 的区别
17:Module 和 Common JS 区别?
18:简单请求和复杂请求
19:排序算法:
20:垃圾回收:
1)标记清除
当变量进入执行环境时,就标记这个变量“进入环境”,被标记为“进入环境”的变量是不能被回收的,因为他们正在被使用。当变量离开环境时,就会被标记为“离开环境”,
被标记为“离开环境”的变量会被内存释放。
2)引用计数: 引用计数就是跟踪记录每个值被引用的次数
当声明了一个变量并且将一个引用类型赋值给该变量的时候这个值的引用次数就为 1
如果同一个值又被赋给另一个变量,那么引用数加 1
如果该变量的值被其他的值覆盖了,则引用次数减 1
当这个值的引用次数变为 0 的时候,说明没有变量在使用,这个值没法被访问了,回收空间,垃圾回收器会在运行的时候清理掉引用次数为 0 的值占用的内存
新生代的对象为存活时间较短的对象,简单来说就是新产生的对象,通常只支持 1~8M 的容量,而老生代的对象为存活事件较长或常驻内存的对象,
简单来说就是经历过新生代垃圾回收后还存活下来的对象,容量通常比较大
新生代垃圾回收:
新加入的对象都会存放到使用区,当使用区快被写满时,就需要执行一次垃圾清理操作
当开始进行垃圾回收时,新生代垃圾回收器会对使用区中的活动对象做标记,标记完成之后将使用区的活动对象复制进空闲区并进行排序,随后进入垃圾清理阶段,即将非活动对象占用的空间清理掉。最后进行角色互换,把原来的使用区变成空闲区,把原来的空闲区变成使用区
当一个对象经过多次复制后依然存活,它将会被认为是生命周期较长的对象,随后会被移动到老生代中,采用老生代的垃圾回收策略进行管理
另外还有一种情况,如果复制一个对象到空闲区时,空闲区空间占用超过了 25%,那么这个对象会被直接晋升到老生代空间中,设置为 25% 的比例的原因是,当完成 Scavenge 回收后,空闲区将翻转成使用区,继续进行对象内存的分配,若占比过大,将会影响后续内存分配
老生代垃圾回收:
相比于新生代,老生代的垃圾回收就比较容易理解了,上面我们说过,对于大多数占用空间大、存活时间长的对象会被分配到老生代里,因为老生代中的对象通常比较大,
如果再如新生代一般分区然后复制来复制去就会非常耗时,从而导致回收执行效率不高,所以老生代垃圾回收器来管理其垃圾回收执行,
它的整个流程就采用的就是上文所说的标记清除算法了
首先是标记阶段,从一组根元素开始,递归遍历这组根元素,遍历过程中能到达的元素称为活动对象,没有到达的元素就可以判断为非活动对象
清除阶段老生代垃圾回收器会直接将非活动对象,也就是数据清理掉
补充:
setTimeout 最小执行时间是4ms
setInterval 最小执行时间是 10ms
1: 低耦合, 组件之间的依赖越小越好
2: 最好 从父级传入信息,不要在公共组件中请求数据
3: 传入的数据要进行校验
4: 处理事件的方法写在父组件中
async:指外部js文件和当前html页面同时加载(异步加载),在当前js文件加载完成后,执行js代码
但是当脚本加载完成后立即执行 js 脚本,这个时候如果文档没有解析完成的话同样会阻塞
defer:指外部js文件和当前html页面同时加载(异步加载),但只在当前页面解析完成之后执行js代码
这个属性会让脚本的加载与文档的解析同步解析,然后在文档解析完成后再执行这个脚本文件,这样的话就能使页面的渲染不被阻塞
1: 下拉式加载
2: 分批渲染
3: 可是窗口化
4: 懒加载
CSS面试篇
1:说说你对盒子模型的理解?
2:谈谈你对BFC的理解
内部的盒子会在垂直方向上一个接一个的放置
对于同一个BFC的俩个相邻的盒子的margin会发生重叠,与方向无关。
每个元素的左外边距与包含块的左边界相接触(从左到右),即使浮动元素也是如此
BFC的区域不会与float的元素区域重叠
计算BFC的高度时,浮动子元素也参与计算
BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素,反之亦然
BFC目的是形成一个相对于外界完全独立的空间,让内部的子元素不会影响到外部的元素
3:怎么理解回流跟重绘?什么场景下会触发?
概念:当渲染树中部分或者全部元素的尺寸、结构或者属性发生变化时,浏览器会重新渲染部分或者全部文档的过程就称为回流/重排。
触发条件:
页面的首次渲染
浏览器的窗口大小发生变化
元素的内容发生变化
元素的尺寸或者位置发生变化
元素的字体大小发生变化
激活CSS伪类
查询某些属性或者调用某些方法
添加或者删除可见的DOM元素
概念:当页面中某些元素的样式发生变化,但是不会影响其在文档流中的位置时,浏览器就会对元素进行重新绘制,这个过程就是重绘。
触发条件:
color、background 相关属性:background-color、background-image 等
outline 相关属性:outline-color、outline-width 、text-decoration
border-radius、visibility、box-shadow当计算好盒模型的位置、大小及其他属性后,浏览器根据每个盒子特性进行绘制 颜色 文本方向 阴影(外观发生改变)
概念:当页面中某些元素的样式发生变化,但是不会影响其在文档流中的位置时,浏览器就会对元素进行重新绘制,这个过程就是重绘。
触发条件:
color、background 相关属性:background-color、background-image 等
outline 相关属性:outline-color、outline-width 、text-decoration
border-radius、visibility、box-shadow
避免:
避免设置多层内联样式。
如果需要设置动画效果,最好使用absolute或者fixed,使元素脱离文档流,这样他们发生变化就不会影响其他元素。
4:让Chrome支持小于12px 的文字方式有哪些?
5:请简述CSS的权重规则
6:CSS3和H5新特性
1.颜色:新增RGBA,HSLA模式
2. 文字阴影(text-shadow)
3. 边框: 圆角(border-radius)边框阴影: box-shadow
4. 盒子模型:box-sizing
5. 背景:background-size 设置背景图片的尺寸background-origin 设置背景图片的原点background-clip 设置背景图片的裁切区域,以”,”分隔可以设置多背景,用于自适应布局
6. 渐变:linear-gradient、radial-gradient
7. 过渡:transition,可实现动画
8. 自定义动画
9. 在CSS3中唯一引入的伪元素 :selection.
10. 媒体查询,多栏布局
11. border-image
12. 2D转换:transform:translate(x,y) rotate(x,y) skew(x,y) scale(x,y)
13. 3D转换
14.新增选择器:属性选择器、伪类选择器、伪元素选择器。
1. 拖拽释放(Drag and drop) API
2. 语义化更好的内容标签(header,nav,footer,aside,article,section)
3. 音频、视频API(audio,video)
4. 画布(Canvas) API
5. 地理(Geolocation) API
6. 数据存储 localStorage、sessionStorage
7. 表单控件,calendar、date、time、email、url、search
7:display:none 与 visibility:hidden 的区别
8:link和@import的区别