前端面试题-01

本文主要探讨了前端面试中常见的问题,包括src和href的区别、元素隐藏方式、盒模型、移动端适配方案、JavaScript基本数据类型及其差异、数据类型转换、let、const与var的区别、箭头函数与普通函数的不同、回调地狱及其解决方案、原生Ajax实现步骤、跨域问题及解决方法、Vue的生命周期、v-for绑定key的重要性、v-show与v-if、v-bind与v-model的差异、Vue组件通信方式、data、computed与watch的区别、keep-alive的作用、vue-router与a标签的对比、Vuex的使用场景。这些问题涵盖了前端开发的基础和进阶知识,对于面试和提升技能具有指导意义。
摘要由CSDN通过智能技术生成

1.src和href的区别 ?

1、请求资源类型不同
(1) href是Hypertext Reference的缩写,表示超文本引用。用来建立当前元素和文档之间的链接。常用的有:link、a。
(2)在请求 src 资源时会将其指向的资源下载并应用到文档中,常用的有script,img 、iframe;

2、作用结果不同
(1)href 用于在当前文档和引用资源之间确立联系;

(2)src 用于替换当前内容;

       * href 不是用来引用资源,而是为了建立联系,让当前标签能够链接到目标地址。

    *   src就是把引用的资源放在文档里面

2.页面元素隐藏方式 和各自特点?

       

display:none

        设置为display:none;的元素将不会再占用页面空间,其占用的空间会被其他元素所占有,从而会引起浏览器的重排和重汇。

visibility:hidden

        这种做法虽然能够隐藏元素,但是该元素仍会占用页面空间,因此只会导致浏览器的重汇而不会引起重排。

opacity:0

        效果与visibility:hidden;方式一样,同样会占据页面空间

      *  display:none;隐藏后就相当于空出了这个标签的位置,别的标签会过来占用这个位置

       * visibility:hidden;隐藏后依旧占着位置

        *opacity:0;与visibility:hidden;一样

3.用过哪些盒模型?

        标准盒模型(W3C盒子模型),设置的width或height是对 实际内容(content)的width或height进行设置,内容周围的border和padding另外设置,即盒子模型的width(height)=设置的content的宽高+padding+border+margin

        怪异盒模型(IE盒子模型),设置的width或height是对 实际内容(content)+内边距(padding)+边框(border)之和的width和height进行设置的,其盒模型的width(height)=设置的width(height)+外边距margin

        box-sizing: content-box 是W3C盒子模型

        box-sizing: border-box 是IE盒子模型

标准盒子模型就是内容区域加边框,比如内容100px,边框是1px那宽度就是102px

怪异盒子模型就是内容有多大宽高就多大

display : flex

flex弹性盒子模型

4.谈谈你的移动端适配方案有哪些?

        1)viewport(scale=1/dpr)
        2)rem
        3)flex
        4)vm/vh      

5.js基本数据类型是什么?它们之间的区别是什么

     Number(数值)、String(字符串)、 boolean(布尔)、 Underfind(未知)、Null(空)、Symbol (唯一)

引用数据类型有对象(Object)、数组(Array)、函数(Function)。

                区别

            基本类型在栈内存,引用类型在堆内存分配地址.
      不同的内存分配机制也带来了不同的访问机制
深拷贝和浅拷贝的不同
参数传递的不同

6.数据类型强制转化和隐式转化的分别怎么使用?

         

       隐式转换都是以强制转换为基础的。强制转换主要指使用一些特定函数,手动将各种类型的值,转换为其对应的类型

                使用:

                        强转换

                                通过String(),Number(),Boolean()函数强制转换
 

7.let const 和 var 的区别 ?

        1.var定义的变量,没有块的概念,可以跨块访问, 不能跨函数访问。

        2.let定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问。

        3.const用来定义常量,使用时必须初始化(即必须赋值),只能在块作用域里访问,而且不能修改

        *var有变量提升,没有块作用域,

        *let没有变量提升,有块作用域不可以声明同名变量

        *const不可以声明同名变量,声明后不可以修改

8.箭头函数和普通函数的区别 ?

        箭头函数:不能当做构造函数 相当于匿名函数,不可以使用new命令,this永远指向上下文的this无法改变其指向

        普通函数:this指向调用它的那个对象

        *箭头函数就是一个匿名函数,this指向所在的上下文,this也没法改变指向,用不了new

        *普通函数的this就指向调用它的那个对象

9.解释什么叫回调地狱 ,以及怎么解决回调地狱 ?

        回调函数套回调函数,这种回调函数中嵌套回调函数的情况就叫做回调地狱。

        用Promise解决回调地狱

unction buildCatList(list, returnVal) {
 
      return new Promise(function (resolve, reject) {
 
           setTimeout(function (name) {
 
                 var catList = list === '' ? name : list + ',' + name
 
                 resolve(catList)
 
            }, 200, returnVal)
 
      })
 
}
 
buildCatList('', 'Panther').then(function (res) {
 
       return buildCatList(res, 'Janguar')
 
 }).then(function (res) {
 
       return buildCatList(res, 'Lion')
}).then(function (res) {
 
       console.log(res)
})//本质上还是函数套函数

        *一个函数嵌套一个函数嵌套一个函数嵌套一个函数就是回调地狱


10.说明原生ajax的实现步骤?

        1创建对象

        2设置请求方式和请求地址

        3发送请求

        4监听状态变化

        5返回数据

        例:

var xhr = new XMLHttpRequest()
 
    xhr.onreadystatechange = function(){
 
        if(xhr.readyState != 4)return;
 
           if(xhr.status == 200 && xhr.readyState == 4){
 
                  console.log(xhr.responseText)
 
           }else{
 
                  console.log("请求失败")
 
          }
 
    }
 
xhr.open("get","http://localhost:3030")
 
xhr.send()


1.      创建ajax对象

    var xhr = new XMLHttpRequest();

2.      告诉ajax请求地址以及请求方式(ajax下的open方法)

    xhr.open(‘get’,’http://www.example.com’); 第一个参数为请求方式,第二个参数为请求地址/服务器端对应的路由请求地址

3.      发送请求

    xhr.send();

4.      获取服务器端与客户端的响应数据

    xhr.onload = function () {

         console.log(xhr.responseText);  xhr.responseText 获取服务器端的响应数据

}


11.什么情况下会导致跨域?怎么解决

        不同源策略时会导致跨域

        解决方法:

        正向代理和反向代理

        1)jsonp:原理就是利用了script标签src属性外联引入文件不受同源策略的限制,在页面中动态插入了script,script标签的src属性就是后端api接口的地址,并且以get的方式将前端回调处理函数名称告诉后端,后端在响应请求时会将回调返还,并且将数据以参数的形式传递回去;

        2)document.domin:两个域名必须属于同一基础域名,并且所有的协议端口完全一致,否则无法跨域;例:beijing.58.com
tianjing.58.com ;

        3)iframe、hash :父页面向子页面传输数据:将要传递的数据添加到子页面的url的hash值上,子页面通过location.hash
并添加定时器实时地动态父页面传来的数据;子页面向父页面传输数据:利用window.name的特性,及页面重新加载但当前页的name值不变,即使换了一个页面。需要三个页面配合使用。一个应用页面,一个数据页面,一个代理文件。代理文件一般是一个没有任何内容的html页面,需要和应用页面在同一域下。将数据页面的窗口换成代理页面,代理页面通过window.name获取数据页面留下的数据,应用页面再访问和它同源的代理页面获取数据,就完成了跨域;

        4)CORS(Cross-Origin-Resource-Sharing):在服务器端设置的,不需要客户端进行操作。Cors背后的思想是使用自定义的http头部让浏览器和服务器进行沟通,从而决定请求或响应是否应该成功,还是应该失败。浏览器向服务器发送请求,如果服务器认为这个请求可以接受,就在Access-Control-Allow-Origin头部中回发相同的源信息(如果是公共资源,可以回发*);如果没有这个头部,或者有这个头部但信息源不匹配,浏览器就会驳回请求。正常情况下,浏览器会处理请求。(请求和响应都不包含cookie信息);

        5)服务器跨域,服务器中转代理:前端向本地服务器发送请求,本地服务器代替前端再向服务器接口发送请求进行服务器间通信,本地服务器是个中转站的角色,再将响应的数据返回给前端

        *协议 域名 端口号,只要前面的一个不同就会发生跨域

        *用get获取jsonp,或者设置代理

12.vue 有几个生命周期 以及各个生命周期的调用时机 

(面试题)

beforeCreate创建前    created创建后   

befoerMount 载入前   mounted载入后 

beforeUpdate更新前   updated更新后      

beforeDestroy销毁前   destroyed销毁后

13. 使用vue中的v-for时,为什么要绑定 :key?  如果不绑定会有什么效果?

因为vue组件高度复用增加Key可以标识组件的唯一性,为了更好地区别各个组件 key的作用主要是为了高效的更新虚拟DOM

如果不绑定的话会导致所有列表DOM重新渲染。化性能无法最大化,

14.v-show 和 v-if 的作用和区别, v-bind 和 v-model的作用和区别?

v-if的原理是根据判断条件来动态的进行增删DOM元素,操纵dom节点

v-show是根据判断条件来动态的进行显示和隐藏元素,操纵css属性

v-bind是单向绑定数据,

v-model是双向绑定数据,一方修改数据另一方也会更改

15.vue 组件通信如何实现 ?列举至少三种方式 并详细说明其机制?   

父组件向子组件传递参数

子组件向父组件传递参数

使用vuex

        在vuex设置的数据可以用this.$store.state使用

也可以使用下面的引入后调用后直接使用

import {mapState、mapGetters、mapActions} from 'vuex'

16.详细说明vue组件中 data ,computed 和 watch的区别?

data储存数据

computed是计算属性

watch作用是监听数据会返回两个值,第一个为新值,第二个为旧值

              

data:Vue 实例的数据对象。Vue 将会递归将 data 的 property 转换为 getter/setter,从而让 data 的 property 能够响应数据变化。对象必须是纯粹的对象 (含有零个或多个的 key/value 对)

                Computed:是一个计算属性具有依赖性只执行一次就拿出来调用下一次获取computed的值时才会重新计算   

                        computed默认只有getter方法

                                2.计算属性最大的优点:产生缓存 如果数据没有发生变化 直接从缓存中取

                                      提升了代码运行效率

                  Watch: 是调用一次执行一次 如果监听数据变化都会执行回调

17.keep-alive的是什么? 使用它的目的是什么?

在平常开发中,有部分组件没有必要多次初始化,这时,我们需要将组件进行持久化,使组件的状态维持不变,在下一次展示时,也不会进行重新初始化组件。
也就是说,keepalive 是 Vue 内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染 。也就是所谓的组件缓存

使用它的目的是避免一个同样的数据重复请求

*keep-alive可以产生一个缓存,然后如果再次请求相同的数据时,就不再请求,而是使用缓存中的数据

18.vue-router的作用是什么? 为什么不使用a标签?

a标签

从一张页面跳转到另一张页面,但从这里来说就违背了多视图的单页Web应用这个概念

通过a标签进行跳转,页面会被重新渲染,即相当于重新打开一个新的网页,体现为视觉上的“闪烁”(如果是本地的项目基本看不出来)

vue-router

组件支持用户在具有路由功能的应用中 (点击) 导航。 通过 to 属性指定目标地址,默认渲染成带有正确链接的  标签,可以通过配置 tag 属性生成别的标签.。

通过router-link进行跳转不会跳转到新的页面,也不会重新渲染,它会选择路由所指的组件进行渲染,避免了重复渲染的“无用功”。

19.vuex 是什么? 怎么使用?为什么用使用它?

        Vuex状态管理架构,统一管理和维护各个vue组件的可变化状态

        是状态管理,在main。Js引入store,注入。只用来读取的状态集中放在store中;改变状态的方式是提交mutatios,这是个同步的事物;异步逻辑应该封装在action中。

        应用场景:单页面应用中,组件间的状态,音乐播放,登陆状态,加入购物车vuex是一种集中式管理状态模式,按照一定的规则管理状态,保证状态的变化是可预测的

20.请谈一下你对 使用原生js开发和 使用vue开发的看法。(至少20字以上)

      原生js:

               使用原生js可以根据自己的能力写自己的代码,更有针对性,没有多余的代码;缺点是如果经验不足的话代码的兼容性和扩展能力较差,代码抽象的层次较低,要想做好的话需要经验和大量的时间和精力,最后也许会形成自己的框架。

使用框架的优势是代码兼容性较好,扩展能力好,抽象层次高,开发效率高,不需要太多经验也可以上手;缺点是业务简单时框架里的大部分代码是无用的,框架掩盖了一些问题的本质,对新手积累经验无益。

还有一点要说的是框架的执行效率并不低,效率低是因为没有用正确的方法使用框架。

        vue:

                DOM操作频繁,或涉及多页面切换的需求,采用vue开发,现有功能(如信用分)暂时保持不变。
 

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值