2019/8/14更新
css部分:relative是相对于自己本身进行定位的
数据请求在vue中生命周期的哪个阶段:一般在created里就可以,如果涉及到页面加载完成之后用的话就使用mounted
行内块元素在同一行显示的时候有默认的3px的空白原因:代码换行符导致的
解决:给他的父元素加:font-size:0px;或者删除换行符
js部分:给dom元素绑定事件的方法:1.在标签里面写。2.在函数里面写onclick。3.绑定事件监听函数 addeventListener和attachEvent
数组中常用的遍历方法:1.for 2.for…in 3.foreach没返回值 4.map有返回值可以得到新数组 5.forof
js执行机制:单线程、任务队列
vue:
v-for中key值的作用:给每个节点作一个唯一标识 从而高效的更新虚拟dom
v-if和v-show的区别:
1.v-if会构建或者删除节点,v-show只是改变的元素的css样式
2.v-if是惰性的如果条件为假,渲染dom树的时候就不会构建
3.v-if消耗性能,频繁切换的时候用v-show
2019/8/9更新
什么是vuex以及vuex的工作原理:
vuex是一个专门为vue.js应用程序开发的状态管理模式,
它和vue的对应关系:data—>status methods—>mutations compute---->getter
actions 是为了处理异步单独多加的一层
在vuex中 vue 的组件通过dispatch可以触发actions中的方法,actions中的commit可以触发mutations中的方法
axios和ajax的区别
axios是通过promise对ajax的一种封装,简单来说axios是ajax,ajax不止axios
优缺点:
1.ajax本身是针对mvc的编程,不符合现在mvvm的浪潮,
2.基于原生的XHR开发,XHR本身的架构不清楚,已经有了fetch的替代方案
3.单纯使用ajax却要引入整个jq非常不方便
axios:
1.从nodejs创建http请求
2.支持Promise API
3.客户端支持CSRF
4.提供了一些并发请求的接口(重要,方便了很多操作)
2019/8/8更新
html第一行!doctype是做什么用的:
声明文档的解析类型,避免浏览器的怪异模式
建立符合document type(文档类型)标准的网页
css的动画特性可以用js实现,为什么还要用css实现?
1.导致js效率低的两个因素:操作dom和使用页面动画,实现动画这俩都占了,频繁的操作dom和css会导致浏览器不停的重排(reflow)和重绘(repaint)—考虑优化
2.css3代替js模拟动画不占用js主线程
3.可以利用硬件加速
4.浏览器对动画做优化,元素不可见时不动画,减少对FPS的影响
5.css3的3d动画无法在js中实现
Ajax请求数据重新处理和拦截器
后台在ajax请求头上打上标记 (REDIRECT ),标记(REDIRECT )这个请求要重定向,而前台接受到响应后 根据标记(REDIRECT )判断这个响应头是否需要 重定向 如果需要则 则获取重定向地址 就可以了
bootstrap中栏栅的24个布局怎么做到的:
一行有12列,实现一行中嵌套两个
git的常用操作:
push、fetch、add、commit、merge、clone、status、rm(删除文件)、checkout、pull
js原型和原型链:
1.所有的引用类型(对象、数组、函数)可以自由扩展属性(除null以外)
2.所有引用类型都含有_proto_属性(也叫隐式原型,他是一个普通的对象)
3.所有的函数都有一个prototype属性(这也叫显示原型,他是一个普通的对象)
4.所有引用类型,它的_proto_属性指向它的构造函数的prototype属性
5.当试图得到一个对象的属性时,如果这个对象本身不存在这个属性,就会去它的原型链里找。
get和post的区别:
1.性能方面get优于post,消耗的资源少,安全方面post貌似高于get(参数url可见)
2.get对请求的格式有限制post没有
3.get一般是请求数据可缓存,post是发送数据,修改服务器上的数据
4.get方法的长度限制(跟http没有关系,主要是浏览器和服务器的原因,一般是不超过4k),post通过body体传输参数,没有长度限制
5.后退页面的反应,post会重新提交请求,get没影响
const定义对象能否改变?
能,因为定义的对象还是存储在堆当中
let和var在全局定义的时候的区别:
1.作用域不同,var是全局,let是块级作用域
2. let不能在定义之前访问该变量,但是var是可以得。
3. let不能被重新定义,但是var是可以的。
js三大事件:
鼠标事件、键盘事件、html事件
事件冒泡和事件捕获,阻止默认事件( event.preventDefault())
阻止事件冒泡(event.stopPropagation())
Es6新特性:
1.let、const
2.""模板字面量
3.解构
4.箭头函数
5.for in 循环
6.”…“ 展开运算符
7.使用新的super和extends关键字扩展类
js构造函数:
同普通函数的区别:
1.命名规范,一般函数采用驼峰的写法,构造函数一般首字母大写
2.使用New来生成实例对象
3.this指向,构造函数中的this指向我们即将要生成的实例化对象
构造函数的缺点:
所有的实例对象都可以继承构造函数中的属性和方法。但是,同一个对象实例之间无法共享属性
解决思路:
通过原型链prototype来实现,他相当于一个公共容器
Es6的class
类内部定义函数不用加function和函数之间不需要“,”
数据结构篇“
数组和链表的区别:
在内存上:
数组:数组相当于申请了一块连续的内存地址空间,编译阶段就确定了大小,在运行阶段一般是不能改变的,不能适应数据动态的删减的情况,当数据增加时,可能超出原先定义的范围个数,造成 数据越界,当内存减少时又可能会造成内存的浪费
链表:链表动态的进行存储分配,现用分配,可以适应数据的增加,删除等操作,链表必须根据next指针找到下一个元素。
数组可以直接根据下表存取数据,如果从表面看,需要快速访问数据,很少或者不插入和删除元素,就应该用数组,反之,如果需要经常插入和删除元素就需要用到链表数据结构。
vue的传值:
父—>子 props 子---->父 $emit 非父子组件:定义公共的仓库bus
自我介绍:
项目介绍:你遇到的问题,以及解决方案
*js垃圾回收机制:
1.垃圾收集器会周期性的找出那些不再继续使用的变量,然后释放其内存。
包含两种方式:1.标记清除 2.引用计数
标记清除:当变量进入环境时,就标记为进入环境,当变量离开环境时就将其标记为离开环境,这些外界无法访问到的变量就是将要清除的变量。
2.引用计数:跟踪记录每个值被引用的次数,声明的时候是0,引用过就+1,引用过的变量重新再赋值就-1,当引用次数变为0,也就无法访问了。
js闭包(重中之重):
要点:
1.函数声明的时候会形成一个作用域链
2.同一作用域的对象可以互相访问
3.作用域呈层级包含状态,形成作用域链,子作用域的对象可以访问父作用域的对象,反之不能;另外子作用域会使用最近的父作用域的对象
闭包的现象:
1.能够访问到其他函数的作用域中变量的函数
2.能够将变量保存在内存中
3.因为外部函数还依赖这个变量,所以不会被js中的垃圾清除机制所回收。会造成内存泄露,所以尽量在使用完成之后主动销毁它
4.闭包只能取得包含函数中的任何变量的最后一个值,可以使用立即执行函数传参的方式解决
创建闭包的最常见方式,
在一个函数内部创建另一个函数并返回
从输入url到页面完成渲染的过程
304状态码:自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。进而节省带宽和开销
缓存机制:你上次请求的时间和你请求文件的修改时间做一个比较,假如文件没有修改过就直接返回304,说明不需要给你重新发响应数据。
js防抖:防止疯狂触发某个事件,给后端的数据交互造成压力,解决方法,时间延迟,设置一个时间间隔,若上一次和这一次的时间,间隔没有超过设定的事间间隔就不触发该事件。
vue:mvvm:底层实现原理
数据劫持结合 发布者-订阅者模式实现
通过Object.defineProperty( ) 给每个属性都设置上get、set方法
view—》data 通过事件监听
data–》view 对属性设置一个set函数,当数据改变了触发这个函数,把要更新view的方法放在这个里面。
当数据有修改的时候
js继承-----原型继承、构造函数继承
function animate() {
this.name=“name”;
this.age=18;
}
function dog(shu){
//第一种继承,使用call回调 缺点:无法继承父类原型上的方法
// animate.call(this,“peng”,15);
this.shu=shu;
}
//第二种继承、原型继承 缺点:父类的属性不会初始化,
dog.prototype=new animate();
let cat=new animate();
let dog2=new dog();
console.log(dog2.age);