美文网首页
前端面试题总结知识

前端面试题总结知识

作者: 沈神奇 | 来源:发表于2020-03-18 21:11 被阅读0次

    1解释下闭包

        闭包就是能够读取其他函数内部变量得函数。可以理解为定义在一个函数内部的函数。本质上闭包是将函数内部和函数外部连接起来的桥梁。

    CSS左右定宽 中间自适应怎样呈现代码(左右div假设宽度为200px)

        1. 采用绝对定位。两个div都设置绝对定位,左边div的top和left为0,右边div的top和right为0,将中间div的margin-left和margin-right都设置为200px,可实现此布局。

        2.采用浮动定位。左边div设置float: left,右边div设置float: right,将中间div的margin-left和margin-right都设置为200px,可实现此布局。

    前端三种缓存的区别 (LocalStorage,SessionStorage和cookie)

        localStorage有效期:永不失效,除非web应用主动删除。作用域是限定在文档源,文档源通过协议、主机名以及端口三者来确定。

        sessionStorage有效期:窗口关闭或者标签页关闭,存储的数据也就失效了。作用域也是限定在文档源,相同文档源的页面渲染在不同的标签中,sessionStorage的数据是无法共享的。(新建标签打开同一个页面时是无法使用同一个session的)。

        cookie默认的有效期非常短,存在于web浏览器会话期间,当浏览器关闭,cookie也就消失了。

       三种储存方式中,只有cookie是自动提交到后台的。 cookie最大4k,sessionstorage 和localstorage可以达到5m甚至是更大 。

        针对三种存储方式的不同可以应用于不同的场景,cookie多用于登陆状态保存,sessionstorage和localstorage多用于统计访问次数等特定数据的统计和存储

    vue的路由和路由钩子函数

        vue-router是Vue.js官方的路由插件。vue的单页面应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来。

        第一种:全局钩子函数。   

        router.beforeEach((to, from, next) => { // 举例: 路由跳转前的操作

        console.log('beforeEach')

        //next() //如果要跳转的话,一定要写上next()

        //next(false) //取消了导航

        next() //正常跳转,不写的话,不会跳转

      })

      router.afterEach((to, from) => { // 举例: 通过跳转后改变document.title

        if( to.meta.title ){

          window.document.title = to.meta.title //每个路由下title

        }else{

          window.document.title = '默认的title'

        }

      })

        第二种:针对单个路由钩子函数

        beforeEnter(to, from, next){

        console.log('beforeEnter')

        next() //正常跳转,不写的话,不会跳转

      }

        第三种:组件级钩子函数

        beforeRouteEnter(to, from, next){ // 这个路由钩子函数比生命周期beforeCreate函数先执行,所以this实例还没有创建出来

        console.log("beforeRouteEnter")

        console.log(this) //这时this还是undefinde,因为这个时候this实例还没有创建出来

        next((vm) => { //vm,可以这个vm这个参数来获取this实例,接着就可以做修改了

          vm.text = '改变了'

        })

      },

      beforeRouteUpdate(to, from, next){//可以解决二级导航时,页面只渲染一次的问题,也就是导航是否更新了,是否需要更新

        console.log('beforeRouteUpdate')

        next();

      },

      beforeRouteLeave(to, from, next){// 当离开组件时,是否允许离开

        next()

      }

    vue的生命周期

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

        beforeCreate(创建前) created(创建后)完成数据观测,属性和方法的运算,初始化事件。

        beforeMount(载入前) mounted(载入后) 在el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用。

        beforeUpdate(更新前)updated(更新后) 在由于数据更改导致的虚拟DOM重新渲染和打补丁之后调用。

        beforeDestroy(销毁前) 在实例销毁之前调用。实例仍然完全可用。

        destroyed(销毁后) 在实例销毁之后调用。调用后,所有的事件监听器会被移除,所有的子实例也会被销毁。该钩子在服务器端渲染期间不被调用。

    vue的父子组件传值

        1.父组件与子组件传值

        父组件传给子组件:子组件通过props方法接受数据;

        子组件传给父组件:$emit方法传递参数

        2.非父子组件间的数据传递,兄弟组件传值

        eventBus,就是创建一个事件中心,相当于中转站,可以用它来传递事件和接收事件。项目比较小时,用这个比较合适。(虽然也有不少人推   荐直接用VUEX,具体来说看需求咯。技术只是手段,目的达到才是王道。)

    vue的vuex如何使用

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

        在main.js引入store,注入。新建了一个目录store,….. export 。

    vue中对keep-alive 的了解

        keep-alive是 Vue 内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染。

        在vue 2.1.0 版本之后,keep-alive新加入了两个属性: include(包含的组件缓存) 与 exclude(排除的组件不缓存,优先级大于include) 。

    vue的axios如何实现拦截

        axios.interceptors.request.use() // 开始进行拦截请求。

        axios.interceptors.response.use()//拦截请求响应数据。

    vue的axios的如何设置请求头

        在封装的get或post请求里增加headers:{}对象 去设置所需要的请求头信息。

    vue中 this.$nextTick()

        this.$nextTick()将回调延迟到下次 DOM 更新循环之后执行.。回调的 this 自动绑定到调用它的实例上。

    vue中 key 值的作用

        key的作用主要是为了高效的更新虚拟DOM。

    vue中 v-on 可以绑定多个方法吗

        可以

    vue.js的两个核心是什么

        数据驱动、组件系统

    vue中v-if 和 v-show 区别

        v-if按照条件是否渲染,v-show是display的block或none。

    vue中route和router的区别

        route是路由信息对象,包括path,params,hash,query,fullpath,name,matched等路由信息参数。

        而router是“路由实例”对象包括了路由的跳转方法,钩子函数等。

    vue几种常用的指令

        v-for 、 v-if 、v-bind、v-on、v-show、v-else

    vue常用的修饰符

        .prevent: 提交事件不再重载页面;.stop: 阻止单击事件冒泡;.self: 当事件发生在该元素本身而不是子元素的时候会触发;.

        capture: 事件侦听,事件发生的时候会调用

    原生JS中的事件委托

        事件委托:给父元素绑定事件,用来监听子元素的冒泡事件。也就是事件目标(子元素)不处理事件,把事件委托给父元素去处理。

     原生js中的事件冒泡,如何阻止事件冒泡

        事件冒泡:同一个事件从最里层冒泡到最外层。

        阻止冒泡事件: e.stopPropagation()。 不阻止默认行为,但阻止事件冒泡 。

        默认事件: a标签的跳转事件就是默认事件。

        阻止默认事件: e.preventDefault(); 不阻止事件冒泡,但阻止默认行为。

    什么是跨域,跨域如何解决

        浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域。

        解决跨域: 1. 前端本地proxy跨域代理。2. nginx代理。3.jsonp跨域。4.后端修改设置请求头header

    前端的兼容性你做了哪些

        1.const问题。说明:Firefox下,可以使用const关键字或var关键字来定义常量; IE下,只能使用var关键字来定义常量. 

        解决方法:统一使用var关键字来定义常量

        2.集合类对象问题。问题说明:IE下,可以使用 () 或 [] 获取集合类对象;Firefox下,只能使用 [ ]获取集合类对象。

        解决方法:统一使用 [] 获取集合类对象

        3.为什么web标准中IE无法设置滚动条颜色了

         解决办法是将body换成html。(更多兼容性问题可百度了解)

    前端的插件你用过哪些(目前项目vue,所以只举例vue的插件)

       1.element-ui 饿了么出品的Vue2的web UI工具套件

        2.mint-ui  Vue 2的移动UI工具套件

        3.vue-swiper 易于使用的轮播滑块组件

        4.vue-quill 适用于Vue2的富文本编辑器

        5.vue-charts 轻松渲染一个图表

    移动端适配, rem,px,em的区别

        px:表示的是绝对的像素值,1px就是1像素大小

        em:关于em,网上有资料说是关于父元素的,但是其实个人感觉这种说法是不对的,其实em的大小是根据自身的font-size确定的,而只是正常的情况下子元素继承了父元素的font-size

        rem:是指根元素的大小,比如跟元素大小是16px(浏览器默认font-size),那么1rem的大小就是16px

    CSS3 新特性有哪些

        CSS3实现圆角 (border-radius: 8px)

        阴影 (box-shadow: 10px)

        对文字加特效 (text-shadow)

        线性渐变(gradient)

        旋转(transform):rotate(9deg)

        缩放 (transform):scale(0.85,0.90)

        倾斜(transform):skew(-9deg,0deg)

        过渡效果(transition)

        动画效果(animation)

    css预处理器常用的有哪些

        1.SASS     2.LESS      3. stylus

    如何让一个div在一个div中垂直水平居中

        1.常用方法

        ①首先是利用定位:子绝父相

        ②然后将子盒子的left和top均设置为50%,因为定位的原点是在左上角,所有现在的位置是偏右下的

        ③利用transform的translate()方法移动子盒子宽和高的一半,这样子盒子就到中间来了 或者 margin-left和margin-top盒子宽和高的一半。

        2.利用margin:auto;子元素绝对定位,四个参数均为0

        3.利用display:flex; 内容居中justify-content:center;两端居中align-items:center。

    es6用过哪些

        1.申明变量let和const

        let和const申明变量,const是申明常亮(申明后值不可修改,修改会报错),let是变量,都是块级作用域,在{}内有效

        2.箭头函数 

        箭头函数的this是定义时的this,不是运行时的,比如在vue中method找this.data的时候找不到,原因是this指向的不是运行时vue的实例,而是定义时的windos

        3.字符串模板 ``

        4.Promise 

        最大的好处就是可以链式的调用函数,起到异步回调函数的作用. es7还推出了更加简洁的写法Async/await

        5.展开运算符 [...,123,]

        6.import导入模块、export导出模块

    数组去重(包含es6)

        1.利用下标查询

        2.es6的Set与Array.from()

        set是一种新的数据结构,它可以接收一个数组或者是类数组对象,自动去重其中的重复项目,set返回的是一个对象。

        Array.from()的作用,可以把伪类数组对象,可迭代对象转化为数组。

        3.利用对象的属性去重

            思路:每次取出原数组的元素,然后在对象中访问这个属性,如果存在就说明重复

    JS的数据类型有哪些

         Undefined、Null、Boolean、Number和String,Object,symbol 表示独一无二的值、bigInt 表示任意大的整数

    解释原型链

        JavaScript 对象(除了 null)在创建的时候就会关联一个对象,这个对象就是原型,每一个对象都会从原型上继承属性,

        原型也是对象,所以原型也有原型对象,层层往上,直到 Object.prototype,这就是原型链。

        对象都会有一个 __proto__ 属性来访问自己的原型,同时这个原型就是生成该对象的构造函数的 prototype 属性值。

        每个原型对象都有一个 constructor 属性,指向相关联的构造函数。

    this指向,如何改变this指向

    this就是函数运行时自动生成的一个内部对象。 this的指向不是在创建时就决定了,而是由执行环境决定的

        全局环境下,this就代表window对象。

        对象环境下,this指向对象。

        事件对象,在 DOM 事件中使用 this,this 指向了触发事件的 DOM 元素本身

        总结下来就是一句话:是谁调用的,this就指向谁

        1.可以使用局部变量来代替this指针

    常用方法

        2.使用call 或 apply 方法

            apply和call的作用一样,不同的是传参的形式。 第一个参数都是要更改this指向的对象。后面的参数不同,apply需要以数组的形式传递参数,call是直接字符串参数传递。

    git的使用

        1.git clone url 先把远程的项目clone下来

        2.git add * 把它们添加到缓存区

        3.git commit -m '增加备注' 代码提交信息

        4.git push origin master 可以把 master 换成你想要推送的任何分支。

        5.git pull 同步远程仓库代码

        还有其他命令 git checkout 切换分支, git status 查看文件状态, git branch -d 删除某个分支 git log 查看日志等

    前端页面有哪三层构成,作用是什么

        HTML:结构层 、CSS:样式层 、JavaScript:行为层

    H5语义化标签有哪些

        Nav, header,footer,Article,Aside,Mark,Section,Video,Datalist 强烈推荐,在我看来就是模糊查询,除了样式之外,非常好用

        Canvas,Main主要内容,等等(可以自主去了解)

    给你一串字符串 或者一组数组,如何找到重复的 次数(思路是什么)

        声明一个变量=0,声明一个空数组,循环判断这组数据,如果空数组中没有这个数据,将这个数据push进去,同时将变量+=1。以此类推。就能得到重复数据的次数。监测数组中是否存在这个元素的属性是includes()。(个人看法)

    http状态码

        200 OK:请求已正常处理。

        400("Bad Request") 客户端方面的问题

        500("Internal Server Error") 服务器方面的问题

        301("Moved Permanently") 当客户端触发的动作引起了资源URI的变化时发送此响应代码

        404("Not Found") 和410("Gone") 当客户端所请求的URI不对应于任何资源时,发送此响应代码

        409("Conflict") 当客户端试图执行一个”会导致一个或多个资源处于不一致状态“的操作时,发送此响应代码

    状态码系列

        1XX:通知

         2XX: 成功

         3XX:重定向

         4XX:客户端错误 

         5XX:服务端错误

    前端的性能的优化

        1.将图片用base64处理

        2.使用字体图标来代替图片

        3.雪碧图

        4.css,html,js以及图片压缩等

        5.减少请求数量

        6.优化资源加载

            1、CSS文件放在head中,先外链,后本页

      2、JS文件放在body底部,先外链,后本页

      3、处理页面、处理页面布局的JS文件放在head中,如babel-polyfill.js文件

      4、body中间尽量不写style标签和script标签

        7.webpack优化 等等 

    告辞!总结到此结束!

    相关文章

      网友评论

          本文标题:前端面试题总结知识

          本文链接:https://www.haomeiwen.com/subject/tmrcyhtx.html