深度剖析互联网一线大厂Vue面试题

简介: 熟练使用框架的必要性

熟练使用框架的必要性

说到使用前端框架,已经不是什么新鲜事了,目前大部分公司都会要求你熟练使用Vue或React框架,这也成了前端工程师面试的家常便饭。

所以这也是我们的必备技巧,同时也经历了一波发展变化,不得不防。那么,现在我去面试,面试官会问哪些关于Vue的问题呢?不要慌,客官接着往下看。


回顾一下16-19年Vue的经典面试题及分析:


      1. 父子组件传值(Vue面试高频题目,现在估计也会顺带提一下,不过相信大家都烂熟于心了)


      2. 请描述一下slot 插槽的作用以及使用 (低频问题,简单来说就是分发DOM)


      3. 如何定义全局的属性或方法(基本不问了)


      4. Watch,Computed区别与使用场景(偶尔问)


      5. v-show与v-if 区别与使用场景(技巧性问题,现在仍然会问)


      6. Vue里的key有什么作用,可以用数组的 index 代替么?(显然是不可以的,key是唯一的,index可能重复)


      7. Vue优化首屏加载优化(现在仍然会问,路由懒加载解决)


      8. created和mounted的区别(渲染模板前后调用的区别)


      ......


      并未详尽,统计了一些常见的,同时也相信这类基础大家都能回答上来。


都2020年了,现在Vue都会问些啥呢 —— 互联网一线大厂面试题分析

刚刚都是些皮毛,但是并不是说皮毛就不学了,还是要去看一下的。  

那么,互联网一线大厂或是高级前端工程师面试的时候会碰到什么棘手或是难缠的Vue的面试题呢?接下来带着大家一起就Vue这个专题来分析。

5.png

我们都会配置路由。那么如何编码才能保证多路由模块解耦、保证更方便增加新的路由模块?

如何手写出一个类Vue的MVVM响应式框架(Vue的底层实现)

Vue项目做完后我们会打包。那么如何编写配置文件能让打包速度达到最优化?

我们都会写组件。那么如何让组件成为高复用性的组件库型组件?(可以脱离于项目拿到别的项目上使用)

Vue3.0你了解多少?


6.png


路由解耦与快捷新增


7.png

上图是主路由文件,核心函数是webpack的api ——require.context(),通过执行此函数获取一个特定的上下文,主要用来实现自动化导入模块。


       项目中各个业务的路由可以充分解耦,路由文件后缀名为xxx.routers.js即可,主路由文件会自动化导入新增的各业务路由文件。


手写一个类vue的MVVM框架



  Vue的响应式是利用了数据劫持实现的,知道这个就很简单了。


  这里写一个简易的,面试的时候大致说出思路即可,后续更新一个完整的MVVM框架,感兴趣的同学可以关注一下~


  第一步:建立订阅器模型

// 订阅器模型
var Dep = {
    clientList: {},
    listen: function (key, fn) {
        if (!this.clientList[key]) {
            this.clientList[key] = [];
        }
        this.clientList[key].push(fn);
    },
    trigger: function () {
        var key = Array.prototype.shift.call(arguments),
            fns = this.clientList[key];
        if (!fns || fns.length === 0) {
            return false;
        }
        for (var i = 0, fn; fn = fns[i++];) {
            fn.apply(this, arguments);
        }
    }
};

第二步:设置劫持方法,对数据进行劫持

// 劫持方法
var dataHijack = function ({ data, tag, datakey, selector }) {
    var value = '',
        el = document.querySelector(selector);
    // 数据劫持
    Object.defineProperty(data, datakey, {
        get: function () {
            console.log('我获取到值了');
            return value;
        },
        set: function (newValue) {
            console.log('我设置到值了');
            value = newValue;
            Dep.trigger(tag, newValue);
        }
    });
    // 绑定观察者
    Dep.listen(tag, function (text) {
        el.innerHTML = text;
    });
}

第三步:调用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>demo</title>
</head>
<body>
    <div id="app">
        订阅视图-1:<span class="box-1"></span>
        订阅视图-2:<span class="box-2"></span>
    </div>
    <script src="index.js"></script>
    <script>
        // 数据
        var dataObj = {};
        // 数据劫持
        dataHijack({
            data: dataObj,
            tag: 'view-1',
            datakey: 'one',
            selector: '.box-1'
        });
        dataHijack({
            data: dataObj,
            tag: 'view-2',
            datakey: 'two',
            selector: '.box-2'
        });
        // 初始化赋值
        dataObj.one = 'one';
        dataObj.two = 'two';
    </script>
</body>
</html>

 有意思的也是精华部分是:当你在控制台修改数值,网页内的视图也会跟着更改,如下:

9.png

简单两步就搞定了。实际上,这些问题并不是很难,那么很多同学为什么不知道呢?


一是没有去了解Vue的源码以及底层实现。


二是缺少最佳实践。这些优化代码大型公司随处可见,拿过来学习一下就明白。但是可能对大家来说,在中小公司工作的程序员,写着平时的业务代码,很少有机会接触到大厂的优秀实践,Vue原来还有这种操作?

10.png

 Vue 3.0



  Vue3.0还没正式发布,预计2020年年终或是2021年初出现,建议大家还是去关注下。

  详见 Vue3.0,我们需要关注的点


  Vue插件编写


  目前没有看到网上有很完全的,给大家整理好了。

  详见 Vue插件编写




目录
相关文章
|
4月前
|
JavaScript 前端开发 应用服务中间件
【Vue面试题三十】、vue项目本地开发完成后部署到服务器后报404是什么原因呢?
这篇文章分析了Vue项目在服务器部署后出现404错误的原因,主要是由于history路由模式下服务器缺少对单页应用的支持,并提供了通过修改nginx配置使用`try_files`指令重定向所有请求到`index.html`的解决方案。
【Vue面试题三十】、vue项目本地开发完成后部署到服务器后报404是什么原因呢?
|
4月前
|
JavaScript
【Vue面试题十五】、说说你对slot的理解?slot使用场景有哪些?
这篇文章深入探讨了Vue中的`slot`概念,包括它的定义、使用场景和分类(默认插槽、具名插槽和作用域插槽),并通过代码示例展示了如何在组件中使用插槽来实现内容的分发和自定义。同时,文章还对插槽的工作原理进行了分析,解释了`renderSlot`函数和`$scopedSlots`对象的角色。
【Vue面试题十五】、说说你对slot的理解?slot使用场景有哪些?
|
4月前
|
JavaScript 前端开发
【Vue面试题二十五】、你了解axios的原理吗?有看过它的源码吗?
这篇文章主要讨论了axios的使用、原理以及源码分析。 文章中首先回顾了axios的基本用法,包括发送请求、请求拦截器和响应拦截器的使用,以及如何取消请求。接着,作者实现了一个简易版的axios,包括构造函数、请求方法、拦截器的实现等。最后,文章对axios的源码进行了分析,包括目录结构、核心文件axios.js的内容,以及axios实例化过程中的配置合并、拦截器的使用等。
【Vue面试题二十五】、你了解axios的原理吗?有看过它的源码吗?
|
4月前
|
JavaScript 前端开发 数据处理
【Vue面试题二十八】、vue要做权限管理该怎么做?如果控制到按钮级别的权限怎么做?
这篇文章讨论了Vue中实现权限管理的策略,包括接口权限、路由权限、菜单权限和按钮权限的控制方法,并提供了不同的实现方案及代码示例,以确保用户只能访问被授权的资源。
【Vue面试题二十八】、vue要做权限管理该怎么做?如果控制到按钮级别的权限怎么做?
|
4月前
|
JavaScript 前端开发
【Vue面试题二十七】、你了解axios的原理吗?有看过它的源码吗?
文章讨论了Vue项目目录结构的设计原则和实践,强调了项目结构清晰的重要性,提出了包括语义一致性、单一入口/出口、就近原则、公共文件的绝对路径引用等原则,并展示了单页面和多页面Vue项目的目录结构示例。
|
3月前
|
缓存 JavaScript 前端开发
vue面试题
vue面试题
173 64
|
2月前
|
JavaScript 前端开发
vue尚品汇商城项目-day01【8.路由跳转与传参相关面试题】
vue尚品汇商城项目-day01【8.路由跳转与传参相关面试题】
43 0
vue尚品汇商城项目-day01【8.路由跳转与传参相关面试题】
|
4月前
|
JavaScript 安全 前端开发
【Vue面试题二十九】、Vue项目中你是如何解决跨域的呢?
这篇文章介绍了Vue项目中解决跨域问题的方法,包括使用CORS设置HTTP头、通过Proxy代理服务器进行请求转发,以及在vue.config.js中配置代理对象的策略。
【Vue面试题二十九】、Vue项目中你是如何解决跨域的呢?
|
4月前
|
JavaScript 前端开发 编译器
【Vue面试题三十二】、vue3有了解过吗?能说说跟vue2的区别吗?
这篇文章介绍了Vue 3相对于Vue 2的改进和新增特性,包括性能提升、体积减小、更易维护、更好的TypeScript支持、新的Composition API、新增的Teleport和createRenderer功能,以及Vue 3中的非兼容性变更和API的移除或重命名。
【Vue面试题三十二】、vue3有了解过吗?能说说跟vue2的区别吗?
|
4月前
|
JavaScript 前端开发 API
【Vue面试题三十一】、你是怎么处理vue项目中的错误的?
这篇文章讨论了Vue项目中错误的处理方式,包括后端接口错误和代码逻辑错误的处理策略。文章详细介绍了如何使用axios的拦截器处理后端接口错误,以及Vue提供的全局错误处理函数`errorHandler`和生命周期钩子`errorCaptured`来处理代码中的逻辑错误。此外,还分析了Vue错误处理的源码,解释了`handleError`、`globalHandleError`、`invokeWithErrorHandling`和`logError`函数的作用和处理流程。
【Vue面试题三十一】、你是怎么处理vue项目中的错误的?
下一篇
DataWorks