一面结束后五分钟hr打来电话,要求今天稍后进行二面(真刺激)。二面是另外一个面试官,基本全部问项目,并且个人感觉比一面更加难受,询问项目里面用到的框架和技术的底层实现,我这方面十分薄弱,基本是拿来主义,这点需要改正。
面试官先询问你的基本情况。可实习时长,工作地点是否冲突。
面试时长:30 分钟
略。
这里我分别说了 富文本编辑器 和 vuex
(1)项目中存在编写博客的部分,要在线编写博客的话就需要一个富文本编辑器了。最后也是在队友的帮助下在网上找到了一个第三方的插件。
(2)其次是在开发的时候发现vue的组件之间的传值很痛苦,如果两个同级组件之间传值会很麻烦。所以在上网查询之后决定使用 vuex ,也成功解决了问题。
我说没有,面试官说这些你需要课余时间去了解一下,不要用完就不管了。
我说好的。。。。
富文本编辑器的实现:https://www.jianshu.com/p/5997a90aab64
我说了我目前对于vuex 的了解。
一个 store 模式,可以 模块化 存储 需要全局保存的值;其他组件需要拿 这类 值的时候就可以直接从 vuex 中获取,减少组件与组件之间传值耦合。
我说 比如两个同级组件之间进行传值,我会先让父组件接收一个组件 emit 出来的值,然后传给另一个子组件,但是这么写会炸掉。
我说,将数据挂到 window 上会污染全局变量,而且 vuex 可以分模块化存储数据,在 window 上直接挂 数据会比较麻烦。
面试官追问:其实在 window 上挂 也可以实现模块化开发,vuex 和 vue 的原理都是挂到window上的啊。
其实 vuex 官网有说明 vuex 和 全局对象的区别:vuex
面试官发现我对以上的解决方案和之后的措施之后说,不光是解决问题了就行了,你还要去了解它是怎么实现的,不要停留在会用的地步。
我只能频频点头。。。
一开始我说了 vue 开发 是面向组件的,可以 将 html css js 代码集中管理;
这里 vue 的最大的好处应该是 业务代码 可以和 组件代码 分离。
我说虚拟DOM我知道 是 实际DOM 的js 对象副本,然后实际DOM发生变化的时候进行最小差值比较。
2019 年 11 月 11 日 更新
参考 react 的话,有 react Fiber,WIP 树比较等等:掘金|react fiber
还有 snabbdom 算法,等等
我直接说出了我的难处,把自己的基本情况和面试官说,说技术选型是老师负责,我没办法。。。
把面试官逗笑了。。。
js继承:
如果现在有 Person 类,Teacher 类继承Person类
var teacher = new Teacher();
teacher instanceof Teacher; // true
意思就是 teacher 是否是 Teacher 的实例,是的
instanceof
的原理就是 teacher.__proto__
(一次或多次隐式原型) 之后能否指向 Teacher.prototype
很明显: teacher.__proto__ === Teacher.prototype;
①
那么如果要让 Teacher
继承 Person
,
即 teacher instanceof Person; // true
也就是说 teacher.__proto__.__proto__ === Person.prototype;
②
根据①式带入②式可以得到
Teacher.prototype.__proto__ === Person.prototype;
既要把 Teacher.prototype
的隐式原型指向 Person.prototype
,方可完成继承;
最终的继承代码:取自 MDN:MDN|继承
function Person(name) {
this.name = name;
}
Person.prototype.sayName = function() {
console.log(this.name);
};
function Teacher(name,subject) {
Person.call(this,name);
this.subject = subject;
}
// Teacher.prototype.__proto__ = Person.prototype;
Teacher.prototype = Object.create(Person.prototype);
Teacher.prototype.constructor = Teacher;
Teacher.prototype.saySubject = function() {
console.log(this.subject);
};
var teacher = new Teacher('张三','高数');
teacher.sayName();
teacher.saySubject();
console.log(teacher instanceof Person);
二面官说得对,框架组件拿来用完就算了是不行的,还需要理解其底层实现,否则一直停留在使用的地步,开源就没有什么意义了。