常见面试题整理

HTTP请求报文

一个HTTP请求报文由请求行(request line)、请求头部(header)、请求体


堆(heap)和栈(stack)

栈(stack)会自动分配内存空间,会自动释放。堆(heap)动态分配的内存,大小不定也不会自动释放。

基本类型和引用类型

基本类型:简单的数据段,存放在栈内存中,占据固定大小的空间。

引用类型:指那些可能由多个值构成的对象,保存在堆内存中,包含引用类型的变量实际上保存的不是变量本身,而是指向该对象的指针。

基本数据类型包括Undefined,String,Boolean,Null,Number

传值和传址

从一个向另一个变量复制引用类型的值,复制的其实是指针,因此两个变量最终指向同一个对象。即复制的是栈中的地址而不是堆中的对象。

从一个变量复向另一个变量复制基本类型的值,会创建这个值的副本。


什么是闭包?

闭包是指有权访问另一个函数作用域中变量得函数。

怎么创建闭包?

在函数内部嵌套使用函数

为什么使用闭包?

好处:

因为在闭包内部保持了对外部活动对象得访问,但外部的变量无法直接访问内部,避免了全局污染

可以当坐私有成员,弥补了因js语法带来的面向对象编程的不足

可以长久的在内存中保存一个想要的变量

优点:

1、希望一个变量长期驻扎在内存当中(不被垃圾回收机制回收)

2、避免全局变量的污染

3、私有成员的存在

4、安全性提高

缺点:

可能导致内存占用过多,因为闭包携带了自身的作用域

闭包只能取得外部包含函数中的最后一个值


一行代码实现数组去重?


[...new Set([1,2,3,1,'a',1,'a'])]


怎样实现水平垂直居中?

第一种

#container{
    position:relative;
}
#center{
    width:100px;
    height:100px;
    poastion:absolute;
    top:50%;
    left:50%;
    transform:translate(-50%,-50%);
 }

第二种

#container{
    position:relative;
 }
#center{
    width:100px;
    height:100px;
    position:absolute;
    top:50%;
    left:50%;
    margin:-50px 0 0 -50px;
}

第三种

#container{
    position:relative;
}
#center{
    position:absoluter;
    margin:auto;
    top:0;
    left:0;
    right:0;
    bottom;
}

第四种 flex

#container{
    display:flex;
    justify-content:center;
    align-items:center;
}


事件循环机制

执行上下文(Execution context)
函数调用栈(call stack)
队列数据结构(queue)
Promise


事件委托是什么?

通过事件冒泡的原理,让自己所触发的事件,由父元素代替执行

dom 事件委托的原理,有什么优缺点

事件委托原理:事件冒泡机制

优点:

1.可以大量节约内存占用,减少事件注册。
2.可以实现当新增子对象时,无需再对其进行事件绑定

缺点:

事件代理的常用应用应该仅限于上述需求,如果把所有事件都用事件代理,可能会出现事件误判。(本不该被触发的事件被绑定上了事件)


AJAX的工作原理

创建 ajax 对象
判断数据传输方式(GET / POST)
打开链接 open()
发送 send()
当 ajax 对象完成第四步(onreadystatechange)数据接受完成,判断 http 响应状态(status)200-300之间或者 304(缓存)执行回调函数


如何优化自己的代码?

代码复用
避免全局变量(命名空间,封闭空间,模块化mvc[数据层,表现层,控制层].....)
拆分函数避免函数过于臃肿
添加相关注释,使代码更加清晰明了

降低页面加载事件的方法

1、压缩 css,js 文件
2、合并 css,js 文件,减少 http 请求
3、外部 css,js 文件放在最底部
4、减少 dom 操作,尽可能用变量代替不必要的 dom 操作


节点的种类有几种,分别是什么?

1、元素节点:nodeType ===1;

2、文本节点:nodeType ===3;

3、属性节点:nodeType ===2;


null 和 undefined 的区别?

null 是表示“无”的对象,转为数值时为0;undefined 是一个表示“无”的原始值,转为数值时为NaN。

当声明的变量还未被初始化时,变量的默认值为undefined。null用来表示尚未存在的对象。

undefined 表示“缺少值”,就是此处应该有一个值,但是还没有定义。
1、变量被声明了,但是没有赋值,就等于undefined。
2、调用函数时,应该提供的参数没有提供,该参数等于undefined
3、对象没有赋值的属性,该属性的值为undefined。
4、函数没有返回值时,默认返回undefined。

null表示“没有对象”,即该处不应该有值。
1、作为函数的参数,表示函数的参数不是对象
2、作为对象原型链的终点。


VUE

react 和 vue 比较来说有什么区别?

  1. 数据绑定(vue双向,react单向)
    2.计算属性 vue 有,提供方便;而 react 没有
    3.vue 可以 watch 一个数据项; 而 react 不行
    4.vue 哟与提供的direct 特别是预置的 directive 因为场景开发更容易;react 没有
    5.生命周期函数名太长 directive


vue 双向数据绑定的原理是什么?

首先创数对象的双向数据绑定 Object.defineProperty(target,key,decription),在 decription
中设置 get 和 set 属性(此时应该注意 description 中 get 和 set 不能与面熟属性共存)
数的实现与对象不同
同时运用观察者模式实现 wather,用户数据和 view 使徒的更新


什么时vue的生命周期?

vue实例从创建到销毁的过程,就是生命周期。从开始创建,初始化数据,编译模板,挂载Dom→渲染,更新→渲染,销毁等一系列过剩,称为Vue的生命周期。

vue生命周期的共几个阶段?

它可以共分为8个阶段:创建前/后,载入前/后,更新前/后,销毁前/后

vue生命周期的作用是什么?

它的生命周期有多个事件钩子,让我们在控制整个Vue实例的过程中更容易形成好的逻辑。

第一个页面加载会触发哪几个钩子?

会触发 beforeCreate,created,beforeMount,mounted

DOM渲染在那个周期中就已经完成了?

DOM渲染在mounted中就已经完成了


Vue router 跳转和 location.href 跳转游什么区别?

router 是 hash 改变
location.href 是页面跳转,刷新页面


你可能感兴趣的:(常见面试题整理)