cvte面试总结

2018-04-25  本文已影响271人  Gopal

面试内容

1.你对于electron的理解

这个问题回答得不是很好,当时就简单的介绍了一下electron,甚至面试官问了用了哪个版本都答不上来,个人只是简单的介绍了一下electron,还有electron-vue。

个人觉得可以从下面的几个方面回答:

版本

Electron是由Github开发,用HTML,CSS和JavaScript来构建跨平台桌面应用程序的一个开源库。 Electron通过将ChromiumNode.js合并到同一个运行时环境中,并将其打包为Mac,Windows和Linux系统下的应用来实现这一目的。

Electron于2013年作为构建Github上可编程的文本编辑器Atom的框架而被开发出来。这两个项目在2014春季开源。

image

使用node。除了Node自带的完整API,还可以使用超过300000个已经被编写好并托管于npm上的模块

支持最新版的chrome

IPCMain和IPCRenderer(进程之间的通信)

该项目的目的,是为了要避免使用 vue 手动建立起 electron 应用程序。electron-vue 充分利用 vue-cli 作为脚手架工具,加上拥有 vue-loader 的 webpack、electron-packager 或是 electron-builder,以及一些最常用的插件,如vue-router、vuex 等等。

2.移动端项目的布局
回答了一下响应式布局相关。

3.rem相关

CSS

html {
    font-size : 20px;
}
@media only screen and (min-width: 401px){
    html {
        font-size: 25px !important;
    }
}
@media only screen and (min-width: 428px){
    html {
        font-size: 26.75px !important;
    }
}
@media only screen and (min-width: 481px){
    html {
        font-size: 30px !important; 
    }
}
@media only screen and (min-width: 569px){
    html {
        font-size: 35px !important; 
    }
}
@media only screen and (min-width: 641px){
    html {
        font-size: 40px !important; 
    }
}

JavaScript

//designWidth:设计稿的实际宽度值,需要根据实际设置
//maxWidth:制作稿的最大宽度值,需要根据实际设置
//这段js的最后面有两个参数记得要设置,一个为设计稿实际宽度,一个为制作稿最大宽度,例如设计稿为750,最大宽度为750,则为(750,750)
;(function(designWidth, maxWidth) {
    var doc = document,
    win = window,
    docEl = doc.documentElement,
    remStyle = document.createElement("style"),
    tid;

    function refreshRem() {
        var width = docEl.getBoundingClientRect().width;
        maxWidth = maxWidth || 540;
        width>maxWidth && (width=maxWidth);
        var rem = width * 100 / designWidth;
        remStyle.innerHTML = 'html{font-size:' + rem + 'px;}';
    }

    if (docEl.firstElementChild) {
        docEl.firstElementChild.appendChild(remStyle);
    } else {
        var wrap = doc.createElement("div");
        wrap.appendChild(remStyle);
        doc.write(wrap.innerHTML);
        wrap = null;
    }
    //要等 wiewport 设置好后才能执行 refreshRem,不然 refreshRem 会执行2次;
    refreshRem();

    win.addEventListener("resize", function() {
        clearTimeout(tid); //防止执行两次
        tid = setTimeout(refreshRem, 300);
    }, false);

    win.addEventListener("pageshow", function(e) {
        if (e.persisted) { // 浏览器后退的时候重新计算
            clearTimeout(tid);
            tid = setTimeout(refreshRem, 300);
        }
    }, false);

    if (doc.readyState === "complete") {
        doc.body.style.fontSize = "16px";
    } else {
        doc.addEventListener("DOMContentLoaded", function(e) {
            doc.body.style.fontSize = "16px";
        }, false);
    }
})(750, 750);

rem自适应布局的回顾总结

4.vue的双向数据绑定(画图)

自己说得不是很好,就单纯的说了Object.defineProperty(),画图的时候很懵逼。

参考:https://segmentfault.com/a/1190000006599500

5.vue的生命周期

6.如果给你设置的话,你还会在这个基础之上添加哪些生命周期

讲了一个nextTick类似的功能

7.实现垂直方向的居中
经常性问题,不累赘介绍

8.canvas画画,放大,倾斜,动画

参考:
http://blog.csdn.net/github_38927899/article/details/77433979

9.手写实现一个计算器的功能cal(12).add(1).del(3).mul(6)

使用原型的方法

Number.prototype.add=function(num){
    return this+num;
}
Number.prototype.reduce=function(num){
    return this-num;
}

Number(10).add(2).reduce(4)

使用链式调用方法:

链式调用

10.在项目中,你遇到哪些问题,怎么解决的呢

11.你对闭包的理解

就回答了闭包的定义以及它的作用。

总结:

1.项目总结不够

2.基础不扎实

其他同学面试经验:

第一题链接

https://leetcode.com/problems/first-bad-version/description/

image
上一篇 下一篇

猜你喜欢

热点阅读