前言
二面结束后第二天中午11:00,收到hr电话,约好三面时间。
刚开始以为是hr 面,放松了下心情,但是还是很紧张。三面官不知道为何比一二面官亲近点。三面官从组件,架构,到算法,都问了。一面问基础,二面问项目,三面问内功。
面试时长:45 分钟
题目
1.询问 jquery 项目的事情,详细询问了组件化 是怎么个组件化
我拿 (搜索框 和 搜索按钮)举例,还拿了 表格 组件举例
2.面试官追问:试着写一下表格组件 的组件化代码
略。
3.你还有个项目用到了Vue,你了解 Vue 的双向数据绑定吗?
MVVM: 指 Model 、View 和 ViewModel。
Model 模型,数据存放于模型层
View 视图,视图层展示数据
Model 和 View 之间不直接联系,靠 ViewModel 联系起来。当Model的值发生变化的时候,通过数据绑定通知ViewModel,ViewModel再去改变View;当View 中发生用户交互导致数据变化时,ViewModel 通过DOM 事件监听,通知Model改变变化了的值。
面试追问,那么你知道 Model 是通过什么方式改变 View的值的吗?
每个Vue 实例中的 data 属性中的 每个值,在实例化过程中都会 给它 加上 getter/setter 函数,当 调用 setter 方法的时候,setter 方法内部会通知 ViewModel 改变 View 的值。
4.高德地图,百度地图,腾讯地图。
现在要我封装一个 地图组件, 兼容这些地图,屏蔽三种地图的方法,我不需要知道他们的方法名,就可以调用这些地图。现尝试写一下。
我说具体代码我暂时写不出,但是我觉得这个是适配器模式。
面试官说:是的,你有思路了。
在面试官的引导下,写了一个简陋的地图类,未完成,但是因为思路说出来了,
面试官只是让我说下适配器模式具体怎么实现,我说出来之后,这题也是放我走了。
5.数据结构和算法记得吗,说下二叉树和栈,写下 二叉树 的层次遍历
栈是先进后出
二叉树的层次遍历:
function outputTree(root) {
const arr = [];
if(!root) {
return arr;
}
const queue = [];
queue.push(root);
let node = null;
while(queue.length) {
const len = queue.length;
for(let i = 0;i < len;i++) {
node = queue.shift();
arr.push(node.val);
if(node.left) {
queue.push(node.left);
}
if(node.right) {
queue.push(node.right);
}
}
}
return arr;
}
6.问我最近在干嘛,学了什么,对什么比较感兴趣
我说了最近在了解 nodeJS,javascript 现在变得越来越 全面,还说了 Electron 和 React Native。
感想
三面总体感觉比一二面要好很多,最后面试官说他和我同一个大学毕业(难怪三面官感觉亲近),面试官最后也向我说明了目前公司里面的前端的三个主要职位方向:
(1)面向客户,制作 html5 + css3 为主的界面
(2)纯技术,制作 js 组件
(3)面向全栈,后台系统
我说我对前两个感兴趣。
继续加油吧。