纸上得来终觉浅,绝知此事要躬行。
面试是大家都无法避免的一个话题。我所在的公司是一个不算小的公司,在这个公司做外包两年,转正一年。在金九银十面试的季节里也按奈不住想去面试一下。面试的经验除了现在呆的公司再也没面试过其他公司。在这里没有什么BAT,没有什么美团、小米等大公司,只是单纯的想写一下本次面试的过程。
我面试的公司是一个搞互联网金融的小贷公司,据说是外资投资,福利待遇很好。不过是刚起步招聘的是核心成员,要求相对很高。由于是一个刚起步的公司技术面和HR面都是同一个人,面试我的是一个全栈开发工程师。
长话短说,下面是我面试时面试官所问的一些问题:
1. 自我介绍
自我介绍可以说是在正规公司面试流程的第一步,公司了解一个人就是先从你的自我介绍开始。在这个阶段,我只是简单的说了一下从毕业(15年毕业)到现在,在公司做的一些大型项目和用到的一些技术。这个根据个人不同的情况自由发挥,在此不做大篇幅的介绍。
2. 技术问答
2.1 Vue、React、smarty
在8102年Vue、React、Angularjs三大框架横行的时代,我的面试官也提出了一些问题。提问了Vue的生命周期和子组件和父组件之间的传值,模拟了一个修改数据的场景问我是在哪个生命周期去调用。
由于我在简历上写了我也用React开发过,所以面试官就问我Vue和React相比较各自的优缺点。在这个问题上我只是简单的说了一下Vue和React的特点,主要说了一下自己的感受并没有深入的去比较过他们之间的差别。
如何理解Vue,Vue与smarty模板的差别?面试真的能让人大开眼界,不仅可以了解自己的不足还可以举一反三的对比各种技术。面试官如果不问我这个问题我还没有比较过这些东西,后续如果有时间我会把他们之间的差别介绍一下。
2.2 怎么理解http是一个无状态协议?(卒)
作为一个优秀的前端网络工程师,了解基本的http知识是很有必要的,但作为一个前端菜鸟的我忽略了这方面的知识我检讨。
在网上查阅了一些资料以后明白为什么说http是一个无状态协议,通俗的讲无状态就是客户端请求数据,服务端对这个请求不去记录、不去关注。若我理解的有偏差欢迎各位大佬给我留言沟通交流。
2.3 如何理解 DOCTYPE
面试官突然问我这个问题一下把我搞蒙了,这个问题感觉已经是一个被淘汰掉的问题,我接触前端有3年了算不上很高深,没有使用过刀耕火种的技术去开发前端网页。对这个问题没能回答的上来。只是说它是告诉浏览器是使用了那种语言规范。
在网上找到了很多关于这些方面的介绍,可以说前端飞快的发展但是也不要忘记最基本的知识。
2.4 get和post的区别
经典面试题之一,凭感觉自己回答了一下但是不是很深入,在这里有一篇文章解答的很好。一个优秀的前端不仅仅只在于表象,要有专研精神把某一个问题了解透彻这样才能有进步。
2.5 跨域问题
经典面试题之一,网上资料一大把。
2.6 HTML5、CSS3
在8102年HTML5和CSS3已经得到很多浏览器的支持学习好新的规范也是前端必备之一。了解并使用HTML5的一些新特性,是很重要的一块。我的面试官问了我H5的新特性都有那些?css3的选择器有那些?css3选择器它们之间的权重和优先级?(感觉问的应该是css的选择器)。如何画一个类似心电图的线?
2.7 ES6
简单的说一下ES6新增的方法,除了promise还有那些异步方法,解构的原理。
2.8 移动端和PC端
如何适应移动端不同分辨率不同尺寸,PC端适配移动端,自适应和重新开发移动端的优缺点。根据不同的场景去使用不同的方法,具体情况具体分析。
2.9 算法
大数据时代都要考一些算法?下面是面试官的考题分析给大家,希望大家能帮我指点迷津。
一个整型数组,将其划分为相同的N(整数)个切片,每个切片加总和是相同的,是否可以找到而已的切片,如果找到就找到了所谓的N等分点,输出true,否则输出false。
如:N=4,输入数组[2,3,5,1,2,2,1,1,3],切片结果为:[2,3],[5],[1,2,2],[1,1,3],也就找到所谓的4等分点,结果输出为true。请写出一个方法实现这个操作。
这个问题的主要思路就是:先求出平均数,然后依次去取数组里面,加起来等于平均数的元素。最后就一定要刚好数组取完了,分片的数量也等于传入的n。
/**
* @description 是否能够找到指定数组的N等分点
* @param { Array } integerArr 整型数组
* @param { Number } n 几等份
* @return { Boolean }
*/
function isFindAverage(integerArr, n){
if(!integerArr || !Array.isArray(integerArr) || !(n - 0)){
// 入參不符合要求
return false;
}
// 如果总和不能平均整数,则一定不能平均分片
const average = integerArr.reduce((prev, curr) => prev + curr) / n;
if(average !== parseInt(average)){
return false;
}
// 可以分为几片
let result = 0;
// 当前分片的总和
let total = 0;
for (var i = 0; i < integerArr.length; i++) {
// 相加刚好为平均数,则去除数组符合条件的整数,并增加分片数,从头开始再相加
if(total + integerArr[i] === average){
result++;
integerArr.splice(i , 1);
i = -1;
total = 0;
}else if(total + integerArr[i] < average){
// 相加小于average 则继续循环相加
total += integerArr[i];
integerArr.splice(i , 1);
i--;
} };
// 分片长度为所传n 且 数组必须更好长度为0
if(result === n && integerArr.length === 0){
return true;
}
return false;
}复制代码
3. 面试官的回答
跳槽可以说是一个很重要的选择,到最后面试官一般会问一下是否有什么想了解的。其实在面试之前,面试者就应该对一个公司简单的了解一下。在网上查找一下这个公司的基本情况,从招聘简介中也可以看到公司的一些情况。当面询问也是一个很好的途径,毕竟面试是相互选择的。在这个时候可以询问一下自己想了解的或者不明白的,可以询问刚才的技术问题。其他的因人而异。
4. 总结
以后的前端工作不再是简简单单的切图仔的工作了,浏览掘金的用户前端开发肯定不是简简单单切图的。从面试的来看企业招人的要求提高了,作为开发者也要相应的提高自己的技术,既要巩固基础知识,也要学习新的知识。一个合格的开发者要不断的学习,没有一个行业能够一劳永逸。其实面试也是巩固自己知识的一个途径,隔一段时间去面试一下不仅可以了解其他公司所使用的技术,所重视的方向;同时也是对自己学习的检验。文中如果有什么纰漏请各位大佬帮忙指出一下。
路漫漫其修远兮,吾将上下而求索。