1、页面渲染的步骤是什么?
具体分为5步:(1)HTML解析出DOM树(2)CSS解析出style样式表(3)将两者关联生成渲染树(4)相关布局根据渲染树计算每个结点的信息(5)根据计算好的信息绘制整个页面。
webkit浏览器和Gecko在名词上有些微不同,步骤一样。
浏览器会在下载完成全部CSS之后才对整个页面进行渲染,因此最好的做法是将CSS放在页面最上面,让浏览器尽快下载CSS(这是一个异步过程)。如果将 CSS放在其他地方比如 BODY中,则浏览器有可能还未下载和解析到 CSS就已经开始渲染页面了,这就导致页面由无 CSS状态跳转到 CSS状态(页面回闪),用户体验比较糟糕,所以可以考虑将CSS放在HEAD中。
Javascript则相反,浏览器在加载javascript后立即执行,有可能会阻塞整个页面,造成页面显示缓慢,因此javascript最好放在页面最下面。但如果页面解析时就需要用到javascript,这时放到底部就不合适了。
2、页面重绘和页面重排的区别,分别在什么时候发生?
重绘:屏幕的一部分重画,元素几何尺寸不变
重排:元素几何尺寸改变,要重新验证并计算渲染树
重排成本远高于重绘。
3、css实现三角形
利用border属性,元素不定宽高,某一边的border为0;
4、scss比css的优势
5、opacity和rgba表示透明度的区别
opacity:可继承;rgba不会
6、cdn内容分发网络的原理
内容就近分发,利用网关进行缓存,源服务器将内容备份存储在各个中间服务器上,浏览器发送请求是,通过DNS域名解析,找到离自己最近的中间服务器,获取到备份的信息。因为就近,加快了处理请求的速度。(缓存机制的一种)
7、口述js原型链
让对象a的原型等于对象b的实例,这时a对象实例的proto属性指向a的原型对象-》b的原型对象;若b的原型等于c的实例,则又会指向c,一次向上,直至指向object,形成一条继承链。真正实现原型链的是proto属性而不是原型对象。
8、webpack打包及原理
9、commenJS、AMD、CMD的区别
异步模块加载机制;commenJS主要用于服务端,比如nodejs;AMD依赖前置,预执行;CMD依赖就近,懒执行。
10、npm install --save什么意思,npm install和 npm run dev从哪里开始执行?
11、深复制、浅复制的区别于实现
浅复制:复制的是引用
深复制:会再生成一个新对象,与原对象没有关系。
逐个递归实现深复制(具体代码)
12、DOM节点的操作有哪些
13、缓存的原理
cache-control Etag ....
14、基本类型与引用类型的存储区别
基本类型存储在栈中,直接存值;引用类型存储在堆中,是利用引用(指针)进行赋值、调用
15、<style>为什么放在<head>里,<script>为什么放在<body>里
<body>中存放的是dom树的信息,为了使html与css分离,将<style>放在<head>中(内嵌式),否则就是内联式。
<script>是立即下载并执行的,js文件是阻塞的,放在body尾部,是为了使dom节点都加载完毕后再对其进行操作,否则,会引发页面回流重计算以及获取不到DOM节点的问题。
16、同源策略
同域名、同协议、同端口
17、浏览器数据存储的方法
web缓存 本地缓存
18、HTML5中解决跨域新增的方法
postMessage()方法允许来自不同源的脚本采用异步方式进行有限的通信,可以实现跨文本档、多窗口、跨域消息传递。postMessage(data,origin)方法接受两个参数,其中data是要传递的数据,origin是目标窗口的源。通过在另一个窗口上监听window的message事件就可以接收到任何窗口传来的数据。
19、VUE双向数据绑定实现的原理
发布订阅者模式+数据劫持
20、会用grid布局吗?
21、git工作区、暂存区、版本库的区别
git工作区:电脑里能看到的目录,里面存放的是从远程拉取到的某个版本,我们的修改就是基于工作区的基础上,文件的当前状态;
暂存区:当我们做出了修改,利用git-add指令加入修改时,做出的修改是存放到暂存区的;
版本库:git-commit将暂存区中的修改提交到版本库,作为本地电脑的一个新版本,可以撤回commit;
git-push是将本地的新版本发布到远程,则整个团队都可以拉取到。
git的一个重要的特性是支持分支。当我们正在进行一个主分支,临时有另外一个需求要解决,可以把它放到一个分支中,当对这个小分支编程并测试成功后,并入主分支中。这样就不会对其他人的工作产生干扰。
git merge 合并分支