程序猿找工作面试需要准备的,这是我面试的总结:
一.CSS盒模型:
1.box-sizing:content-box -- 默认的标准盒模型,元素的宽高不包括内边距和边框的尺寸。
其盒模型分为两类:标准盒子模型和IE盒子模型
标准盒模型包括:margin,border,padding,content,并且content部分不包括其它部分。
IE盒模型包括:margin,border,padding,content,和标准盒子模型不同的是,content部分包含了border和padding。
二. 什么是闭包?
闭包就是有权访问另一个函数作用域内变量的函数都是闭包。
这里 inc 函数访问了构造函数 a 里面的变量 n,所以形成了一个闭包。再来看一段代码:
function a(){
var n = 0; //声明了一个变量n,赋值为0(初始值)
function inc(){ //声明了一个变量inc,指向一个函数作用域(保存了此函数对象的地址)
n++; //执行n++
console.log(n); //输出n的值
}
return inc; //外层函数返回变量inc(内层函数作用域的地址)
}
var c = a(); //调用了外层函数=>得到返回的内层函数的地址,即inc指向的内层函数的地址=>赋值给了变量c(其实c就是保存内层函数作用域的地址)
c(); //控制台输出1
c(); //控制台输出2
总结:
闭包就是一个函数引用另外一个函数的变量,因为变量被引用着所以不会被回收,因此可以用来封装一个私有变量。这是优点也是缺点,不必要的闭包只会徒增内存消耗!另外使用闭包也要注意变量的值是否符合你的要求,因为他就像一个静态私有变量一样。闭包通常会跟很多东西混搭起来,接触多了才能加深理解。
三.你是如何做到性能优化的?
1.减少http请求,合理设置缓存:
就是把css,javascript,图片合并,把浏览器要访问的js和css合并成一个文件,这样浏览器只需要一次请求,图片就是多张合成一张。
2.使用浏览器缓存
如果将css,js,logo和图标缓存在浏览器的话,这样可以提高性能,可以通过http头中的cache-control和expires的属性,可设定浏览器缓存,缓存时间可以是数天,甚至几个月。
3.启动压缩
在浏览器对文件进行压缩,可有效减少通信传输的数据量。
4.Css sprites
合并css图片,减少请求的次数
5.Css放在页面最上部,js放在页面最下面
就是浏览器会在下载完成全部css之后才对整个页面进行渲染,而js相反,浏览器在加载js后立即执行,有可能会阻塞整个页面,造成页面显示缓慢,因此js最好放在页面最下面。
6.减少cookie传输
Cookie包含在每次请求和相应中,太大的cookie会严重影响数据传输,因此哪些数据需要写入cookie需要慎重考虑,尽量减少cookie中传输的数据量。
四.什么情况会引起内存泄漏?
1.意外的全局变量引起的内存泄漏
原因:全局变量,不会被回收
解决:使用严格模式避免
2.闭包引起的内存泄漏
原因:闭包可以维持函数内部局部变量,使其得不到释放
解决:将事件处理函数内局部变量解除闭包,或在定义事件处理函数的外部函数中删除dom的引用。
3.没有清理的Dom元素
原因:虽然别的地方删除了,但是对象中还存在对DOM引用
解决:手动删除
4.被遗忘的定时器或者回调
原因:定时器中有dom的引用,即使dom删除了,但是定时器还在,所以内存中还是有这个dom
解决:手动删除定时器和dom
五.什么是vue及特点?
Vue是一个基于MVVM的,渐进式,纯前端的js框架。
特点:组件化开发,可复用,前后端解耦。
六.vue生命周期钩子函数有哪些?分别代表什么??
总共分为8个阶段:
1.创建前(beforeCreate) 组件还未开始初始化
2.创建后(created)data的数据初始化,还未挂载,el还未生成
3.载入前(beforeMount) 虚拟Dom已生成,还未挂载到DOM树
4.载入后(mounted) 组件已经初始化完成,已经成功挂载到DOM树,此时可以有关DOM的操作
5.更新前(beforeUpdate)date的数据变化会触发更新前和更新后的方法
6.更新后(updated)
7.销毁前(beforeDestroy)
8.销毁后(destried)vue实例已经解除了对DOM的事件监听和绑定,但DOM结构依然存在
七.什么是MVVM?
MVVM是Model View ViewModel的缩写。
1.Model:代表数据模型,可以在model中定义数据修改和操作的业务逻辑
2.View代表是视图,负责将数据模型转化为UI展现出来
3.ViewModel:是一个自动同步View和Model对象,是一个控制器
4.在MVVM架构下,Model和ViewModel之间交互是双向的,因此View的数据变化会同步到Model中。Model的数据变化也会立即反应到View上。
八.Vue是如何渲染页面的及特点?
new Vue()内包含两大子系统:
1.响应系统:
将data中每个变量,都重新封装为new Vue()对象的访问器属性。 只要修改new Vue()的属性,就会触发set() set()除了修改模型数据外,还通知Vue,该模型变量发生了变化,需要修改DOM树。
2.虚拟DOM树:
new Vue()对受监视的页面元素,重新扫描后构建的简化版DOM树。 模型数据发生变化,会通知虚拟DOM树 虚拟DOM树会通过遍历自己的方式查找到受影响的元素 用自己封装好的DOM API仅更新受影响的元素。
特点:
- 遍历快:仅保存了受影响的元素和属性
- 仅更新受影响的DOM元素,效率比整体替换高!
九. vuex特性是什么?有什么优点?vuex有哪几种属性?
Vuex就是一个仓库,仓库里放了很多对象,其中state就是数据存放地,类似于vue中的data。 State里面存放的数据是响应式的,只要其中的数据发生变化,就会通知其他依赖这些数据组件更新数据。
优点: 当你打算开发大型单页应用,会出现多个视图组件依赖同一个状态,来自不同视图的行为需要变更同一个状态。遇到以上情况时候,你就应该考虑使用Vuex了,它能把组件的共享状态抽取出来,当做一个全局单例模式进行管理。这样不管你在何处改变状态,都会通知使用该状态的组件做出相应修改
属性:
有5种:分别是
state //存放要保存的数据
getter //定义取出保存数据的方法
mutation //定义修改保存的数据的方法
action //异步修改数据的方法
module //把数据模块化
十.axios是什么?
Axios是请求后台资源的模块。
1.axios是一个基于promise的HTTP库,支持promise的所有AP。;
2.它可以拦截请求和响应。
3.它可以转换请求数据和响应数据,并对响应回来的内容自动转换为json类型的数据。
4.它安全性更高,客户端支持防御XSRF。
5.支持多种请求的方式:put post get delete patch。
6.axios可以配。
十一.vue组件之间的传参?
1.父组件传给子组件
父组件通过给子组件的标签上面定义属性,在子组件内通过props接受父组件传过来的属性值。
2.子组件传给父组件
父组件通过给子组件标签定义一个方法,在子组件通过$emit(定义方法的触发名,要传的参数),触发父组件定义的方法,并把参数传给父组件
3.兄弟组件间的传参
在main.js里面给vue的原型定义实例方法,通过$on给要接收参数的组件绑定方法,要传递参数
十二.vue路由传参的是哪三种方式?
1.this.$router.push()
2.通过路由属性的name,用params来传递参数
3.用path来匹配路由,通过query传递参数
十三.什么是HTTP协议及HTTP协议的工作过程?
HTTP是比TCP更高层次的应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。是一个无状态的协议(同一个客户端的这次请求和上次请求是没有对应关系)。
1.地址解析
浏览器把地址栏的URL解析成协议名、主机名、端口、对象路径等,然后需要请求DNS服务器,把得到的域名解析成对应的IP地址。
2.封装HTTP请求数据包
把以上部分结合本机自己的信息,封装成一个HTTP请求数据包
3.封装成TCP包,建立TCP连接(TCP的三次握手
因为HTTP比TCP更高层的应用层协议,所以根据规则,只有低层协议建立连接之后,才能进行更高层的协议连接。 因此,首先要建立TCP连接,然后才能HTTP的连接。一般TCP连接的端口号是80。这里是8080端口
4.客户机发送请求命令
建立连接之后,客户机发送一个请求给服务器
5.服务器响应
服务器接到请求后,给予相应的响应信息,其格式为一个状态行
6.服务器关闭TCP连接
十四.Vue双向绑定原理?
是使用了访问器属性,object.defineProperty()来劫持各个属性的setter和getter,在数据变动发布消息给订阅者,触发相应的监听回调。
十五.Conputed和methods有什么区别?
Conputed:计算属性是基于他们的依赖进行缓存的,只有在他的相关依赖发生改变时才会重新求值。
Methods:只要发生重新渲染,method调用总会执行该函数。