汉得面试题

记汉得面试题

盒子模型

  1. 盒子一共有四个属性:分别为外边距(margin)、边框(border)、内边距(padding)、内容(content).
    在这里插入图片描述
    :如何计算宽度
    盒子总大小的计算公式为:盒子的实际高度X盒子的实际宽度。

元素实际宽度(盒子的宽度)=左边界+左边框+左填充+内容宽度+右填充+右边框+右边界。

元素实际宽度(盒子的高度)=上边界+上边框+上填充+内容高度+下填充+下边框+下边界。

意思就是内容本身的宽高以外还要加上的盒子增加的宽高

jQuery和vue的区别

jQuery是使用选择器( $ )选取DOM对象,对其进行赋值、取值、事件绑定等操作,其实和原生的HTML的区别只在于可以更方便的选取和操作DOM对象,而数据和界面是在一起的。比如需要获取label标签的内容:$(“lable”).val();,它还是依赖DOM元素的值。

Vue则是通过Vue对象将数据和View完全分离开来了。对数据进行操作不再需要引用相应的DOM对象,可以说数据和View是分离的,他们通过Vue对象这个vm实现相互的绑定。这就是传说中的MVVM。

ajax和axios的区别

代码

ajax:

  $.ajax({

    url: '接口地址',

    type: 'get', //或者post   请求类型

    dataType: 'json',

    data: { // 要发送的请求参数

      'username' : 'hermit',

      'password' : 'a123'

    },

    success : function (response) {

      console.log(response); // 请求返回的数据

    }

  })

 axios:

  axios({

    url: '接口地址',

    method: 'get', //或者 post    请求类型

    responseType: 'json', //默认格式,如果就是 json 格式可以不写

    data: {

      'username' : 'hermit',

      'password' : 'a123'

    }

  }).then( function(response){ // 请求正确返回的数据

    console.log(response);

    console.log(response.data);

  }).catch( function(error) { // 请求错误返回的数据

    console.log(error);

  })

看代码区别不大

  1. Axios
    Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。
    2 . AJAX
    AJAX 是与服务器交换数据并更新部分网页的,在不重新加载整个页面的情况下。

其实jQuery 将请求技术进行了封装 变成了 ajax , 而 通过 promise 又把 ajax 进行封装就成了 axios。
在现在的前端 mvvm 模式下 axios 更适合于数据请求。

mvvm

MVVM(Model-View-ViewModel), 源自于经典的 Model–View–Controller(MVC)模式。MVVM 的出现促进了 GUI 前端开发与后端业务逻辑的分离,极大地提高了前端开发效率。MVVM 的核心是 ViewModel 层,它就像是一个中转站(value converter),负责转换 Model 中的数据对象来让数据变得更容易管理和使用,该层向上与视图层进行双向数据绑定,向下与 Model 层通过接口请求进行数据交互,起呈上启下作用。View 层展现的不是 Model 层的数据,而是 ViewModel 的数据,由 ViewModel 负责与 Model 层交互,这就完全解耦了 View 层和 Model 层,这个解耦是至关重要的,它是前后端分离方案实施的最重要一环。
在这里插入图片描述

Vue的生命周期函数

  1. 什么是生命周期?
    从Vue实例创建、运行、到销毁期间,总是伴随着各种各样的事件,这些事件统称为生命周期
  2. 生命周期钩子=生命周期函数=生命周期事件
  3. 主要的生命周期函数分类
    • 创建期间
      1)beforeCreate:实例刚在内存中被创建出来,此时还没有初始化好data和methods属性。
      2)created:实例已经在内存中创建好了,此时data和methods已经创建好了,此时还没有开始编译模板
      3)beforeMount:此时已经完成了模板的编译,但是还没有挂载到页面上
      4)mounted:此时,已经将编译好的模板,挂载到了页面指定的容器中
    • 运行期间
      1)beforeUpdate:状态更新之前执行此函数,此时data中的状态值是最新的,但是界面上显示的数据还是旧的,因为此时还没有开始重新渲染DOM节点
      2)updated:实例更新完毕之后调用此函数,此时data中的状态值和界面上显示的数据,都已经完成了更新,界面已经被重新渲染好了
    • 销毁期间
      1)beforeDestroy:实例销毁之前调用,在这一步,实例仍然完全可用
      2)destroyed:Vue实例销毁后调用,调用后,Vue实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁
      在这里插入图片描述
      下面解释一一对应图中的数字

1、var vm = new Vue({}) 表示开始创建一个Vue的实例对象

2、刚初始化一个空的Vue实例对象,此时,在这个对象上,只有一些默认的生命周期函数和默认的事件,其他的都未创建

3、beforeCreate生命周期函数执行时,data和methods中的数据和方法都还没有初始化

4、初始化data和methods

5、在created中,data和methods都已经初始化好了,如果要操作data中的数据或是调用methods中的方法,最早只能在created中操作

6、这个绿框中内容表示Vue开始编辑模板,把Vue代码中的那些指令进行执行,最终,在内存中生成一个编译好的最终的模板字符串对象,然后把这个字符串对象,渲染为内存中的DOM,此时,只是在内存中渲染好了模板,并没有把模板挂载到真正的页面中去

7、beforeMount函数执行时,模板已经在内存中编译好了,但尚未挂载到页面中去,此时,页面还是旧的

8、将内存中编译好的模板,真实的替换到浏览器的页面中区

9、mounted是在页面加载完成后执行的函数,如果要通过某些插件操作页面上的DOM节点,最早是在mounted中进行

10、只要执行完了mounted,就表示整个Vue实例对象已经初始化完毕了,此时组件已经脱离创建阶段,进入运行阶段。

11、蓝框中是组件的运行阶段,运行阶段的生命周期函数只有两个:beforeUpdate和updated,这两个事件会根据data数据的改变,有选择的触发0次到多次

12、当执行beforeUpdate时,页面中显示的数据还是旧的,此时data中的数据是最新的,页面尚未和最新数据同步

13、这一步,先根据data中最新的数据,在内存中,重新渲染出一份最新的内存DOM树,当内存DOM树被更新之后,会把最新的的内存DOM树,重新渲染到真实的页面当中,这时,就完成数据从data(Model层)->view(视图层)的更新

14、updated执行时,页面和data数据已经保持同步,都是最新的

15、当执行beforeDestroy钩子函数时,Vue实例就已经从运行阶段进入销毁阶段,此时,组建中所有data、methods、以及过滤器,指令等,都处于可用状态,此时还未真正执行销毁过程

16、当执行destroyed函数时,组件已经被完全销毁,此时组建中所有data、methods、以及过滤器,指令等,都已经不可用了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值