2024前端面试题第一弹(真实,一般人我还不给看)

  • 发布日期:2024-04-09     来源:数媒在线课堂
  • 为什么要初始化css?

    避免浏览器差异,解决兼容问题

    网格布局

    display: grid;

    grid-template-columns: 1fr 1fr 1fr

    less的优点

    可以兼容,可以嵌套,循环,运算,定义变量和继承样式(extend)

    computed和watch的区别;computed和methods的区别

    computed和watch:

    computed是计算缓存,需要return,第一次加载就监听

    watch触发一次就执行一次回调,不需要return,可以设置immediate:true

    computed和methods:

    computed是响应式,调用值,引用的属性发生变化时才会计算

    methods不是响应式,调用函数,每次被调用都要执行

    vue列表中key的作用,以及能用index下标来标记吗

    用来识别一个独立的元素,识别dom元素更准更快,优化diff算法,高效更新虚拟dom,区分同名元素

    不能用i和index,因为不管数组顺序如何颠倒,index顺序都是0,1,2,3...从而可能会导致dom旧节点复用错误,做很多额外的工作或出现bug

    谈谈对promise的理解

    解决异步编程回调地狱(传统解决异步编程的方式是通过回调函数,而回调嵌套过多会导致回调地狱(callbackhell))的一种解决方案,可以通过Promise的方式以同步的方式表达出来,从而解决代码臃肿和可读性差的问题。

    程序有三种状态:pending(等待)、resolved(成功)、rejected(失败)。

    Promise 的实例可以看做是一个状态展示器,我们可以将拥有状态及改变状态的业务通过Promise来实现,然后再结合async function进一步提升程序的可读性及易维护性

    像前端很多库都是基于Promise封装的,比如axios,antd等,所以理解并且能使用它是一名合格前端所必备的技能

    一般Promise我都用来接受ajax请求结果之后的回调以及图片的预加载(Promise.all)

    http请求方式

    get,post,put,delete,head,options,trace,connect。可以说常用的只有前四个,其它的了解不多

    常见http状态码

    200,成功

    301,临时跳转

    302,永久性的重定向

    304,请求成功,但是是从缓存中读取的,节省资源

    403,请求的权限不够,或者该ip被封掉了

    404,找不到请求的资源(最常见)

    500,程序本身错误,也就是后端的问题,可以对他说,热烈的马

    js是单线程吗

    是的,单线程是指Js引擎执行Js时只分了一个线程给他执行,也就是执行js时是单线程的。

    异步方法

    回调函数,事件监听,发布订阅(双向绑定用到),Promise,async/await,ajax,定时器延时器,then,catch,finally

    闭包使用场景

    比如说回调函数,还有按钮的节流,频繁点击的时候,只要在规定的事件内检测到设置的flag还是没改变,则直接返回啥也不做,或设置按钮状态为disabled也可以

    销毁生命周期一般做哪些业务

    消除定时器,解绑事件,清除无用的变量常量等,以免造成内存溢出

    vue中nextTick

    在vue中,并不是数据一更新,DOM就立即更新,页面立即渲染,而是当一个事件循环结束后,DOM才会完成更新,页面才会成功渲染;

    如通过一个for循环改变一个数据,即使这个for循环100次,DOM也只会在第100次时才更新,而不是循环100次,DOM就更新100次。

    使用场景:初始化绑定或操作Dom,获取元素宽高等

    vue自定义指令

    Vue 自定义指令有全局注册和局部注册两种方式。

    先来看看注册全局指令的方式,通过 Vue.directive( id, [definition] )方式注册全局指令。然后在入口文件中进行 Vue.use()调用

    局部自定义指令是定义在组件内部的,只能在当前组件中使用,directives后是一个对象,对象里面key是指令名字,值是一个对象,这个对象里面有钩子函数update(更新),bind(只调用一次),inserted(插入父元素时),参数是el,binding,vnode,钩子函数里面书写逻辑

    常用例子,系统权限显示按钮级:自定义一个权限数组,判断用户角色在不在这个数组内,在的话则显示,不在的话则移除该dom,使用的时候给v-自定义指令赋值判断即可

    vue3和vue2的区别

    双向绑定原理不同:vue2是object.defineProperty()对数据对象的setter,getter进行数据劫持,并且结合发布订阅模式完成双向绑定,vue3是通过proxy代理来处理数据,好处是可以监听整个对象和数组,不用闭包,for..in等内容来提高效率

    生命周期不同:vue2生命周期为创建前后,挂载前后,更新前后,销毁前后,vue3则没有创建前后,用setup替代,生命周期前面多个on,且销毁生命周期前后由原来的destroyed改为onbeforeUnmounted和onUnmounted

    vue3可以拥有多个根节点,vue2不行

    vue2选项式,vue3组合式,不用划分不同的属性去写代码,比如data,methods等,直接书写即可,比较整洁和方便

    定义数据,vue3多了两个钩子函数,ref和reactive

    父子传值不同:vue2是props和$emit

    vue3是defineProps和defineEmits

    父子传值详细代码可以看这位博主的博客,写的挺详细 点击这里

    16、hooks的理解

    名为钩子,函数的一种写法,就是将文件的一些单独功能的js代码进行抽离出来,放到单独的js文件中,或者说是一些可以复用的公共方法/功能

    17.如果用户跳过登陆页面,直接在地址栏输入地址跳转,路由是如何进行拦截的

    一般的js网络请求库都会有拦截器(interceptor),可以针对所有的请求和响应进行预处理。如果用户正常登陆,前端会把session id(或者是一个token)保存在cookie中。之后的每一次ajax请求都会附上这个id或者token。之后,后端针对前端的每一次(需要验证用户登陆状态和是否有权限调用这个接口)请求,都会利用这个id进行检验。假如没有通过,就会返回http 401。所以你需要在针对响应(response)的预处理中进行判断,如果是401,就重定向到登陆页。

    18.canvas有哪些方法和属性

    getContext() 返回一个对象,提供了用于在画布上绘图的方法和属性

    beginPath() 起始一条路径,或重置当前路径

    closePath() 创建从当前点回到起始点的路径

    lineTo() 添加一个新点,然后在画布中创建从该点到最后指定点的线条

    rect() 创建矩形

    arc() 创建弧/曲线

    moveTo() 把路径移动到画布中的指定点,不创建线条

    stroke() 绘制已定义的路径

    19.vue中什么是单向数据流

    指数据总是从父组件传递到子组件,子组件无权更改,否则会报错,首先如果更改了,那么其它依赖于该父组件的子组件也会出错,其次就是如果子组件更改了父组件的数据的话,那么父组件就不知道是哪个子组件更改了数据,从而出bug,正确的做法就是通知父组件要更改数据,然后父组件更改完数据之后再传递给子组件

    20.组件的作用域

    我们在定义组件时,作用域是组件本身,在调用组件时,作用域是父组件

    21.权限判断

    大概有两种,一种是登陆后获取用户权限信息,然后筛选有权限进入的路由,通过addRoutes动态添加路由,用到router.beforeEach(),另一种是初始化挂载全部路由,在路由上标记出所需的权限,最后在路由跳转(beforeRouteLeave)之前,验证用户有没有该权限

    22.setup的执行时机

    在beforeCreate之前执行一次

    文章来源于网络侵删

    原文链接:https://blog.csdn.net/m0_49207266/article/details/128983310

    Copyright © 2016-2021 版权所有: 成都数媒在线课堂教育科技有限公司