华为前端社招面经(已拿offer)
之前在招聘网站上更新了简历后没多久就有华为的hr来加微信,解释了社招OD的性质以后就是机试+性格测试,然后就进入了面试环节
华为OD是什么?
简单来说就是:
1、不跟华为签合同:
目前华为社招15级还是17级以下的(级别我记不清了)+社招的都是跟德科签合同,校招进的才直接跟华为签
前端机试只有一题笔试题,不难:
题目:
xAyB猜字游戏,输入两组数字,每组数字包含4个非负整数,同一组中的四个数字互不相同,数字间以空格分隔。
第一组数字为猜数字游戏的正确答案,第二组数字为玩家所猜的答案,根据以下规则输出猜数字的结果xAyB。
规则1:如果数字相同,且位置相同,则得到一个A
规则2:如果数字相同,且位置不同,则得到一个B
输入描述:两组数字,每组数字包含4个非负整型数字,同一组中的四个数字互不相等,数字以空格分隔
输出描述:xAyB
示例:
输入:
1 2 3 4
1 2 5 3
输出:
2A1B
答案可以参照:https://blog.csdn.net/zhangsh87/article/details/81109900
性格测试:
性格测试通过以后,hr会问你要工资证明或流水以及身份证复印件,不得不说华为这点还挺严格
一面:hr视频面
hr面没问什么,主要就问了下离职原因,以及侧面问你是不是考核过不了被淘汰了才出来找工作,薪资要求等,剩下就聊天。hr人还挺nice。
二面:技术电话面
1、自我介绍
3、做过的项目中,哪些可以体现你的技术水平的地方?
4、js函数的4种调用方式讲一下
作为函数调用
作为对象的方法调用
使用 call 和 apply 动态调用
new 命令间接调用
具体可见:http://c.biancheng.net/view/5700.html
5、this的使用场景
我听到这个题目的时候也懵逼了,后来查了下,其实想考察的是this的指向。。。
于是我回答的时候回答偏了,面试官不太满意,也没有引导
this的指向有哪几种情况?
- 作为函数直接调用,非严格模式下,this指向window,严格模式下,this指向undefined;
- 作为某对象的方法调用,this通常指向调用的对象。
- 使用apply、call、bind 可以绑定this的指向。
- 在构造函数中,this指向新创建的对象
- 箭头函数没有单独的this值,this在箭头函数创建时确定,它与声明所在的上下文相同。
6、regexp正则,讲讲贪婪模式
正则默认是贪婪模式,默认的贪婪模式会尽可能多的匹配所搜索的字符串。
非贪婪模式:
当?字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串
7、vue和react的区别
我简历里写的vue和react都会,所以才被问了这样的问题
网上的参考答案:
相同点:
1.数据驱动视图,提供响应式的视图组件
2.都有virtual DOM, 组件化开发,通过props参数进行父子组件数据的传递,都实现webComponents规范
3.都支持服务端渲染
4.都有native解决方案,reactnative(facebook团队) vs weex(阿里团队)
不同点:
1.vuex是一个针对VUE优化的状态管理系统,而redux仅是一个常规的状态管理系统(Redux)与React框架的结合版本。
2.开发模式:React本身,是严格的view层,MVC模式;Vue则是MVVM模式的一种方式实现
3.数据绑定:Vue借鉴了angular,采取双向数据绑定的方式;React,则采取单向数据流的方式
4.数据更新:Vue采取依赖追踪,默认是优化状态:按需更新;
React在则有两种选择:
1)手动添加shouldComponentUpdate,来避免冗余的vdom,re-render的情况
2)Components 尽可能都用 pureRenderMixin,然后采用 redux 结构 + Immutable.js
5.社区:react相比来讲还是要大于vue,毕竟背后支撑团队不同。
facebook vs 个人!当然目前vue的增长速度是高于react的增速,不知道未来的发展趋势是如何。
我当时回答的是从:vue双绑/react单向数据流;diff算法;组件通信这几点讲了下
8、你还有什么问题问我吗?
问了下刚刚面试的表现,因为感觉面试官不太满意,怕面试挂了于是就提这个问题看看能不能翻盘,隔了一天后hr通知三面
三面:技术电话面
3、问大学学了哪些语言,这些语言跟js的区别
当时答曰:
学了c++,java
js是动态弱语言,java是静态语言,因此js没法进行数据类型的检查
于是面试官:这是编译型和解释型的区别吧
我:。。。(感觉面试官可能也搞混了)
这里顺便贴一下【编译型和解释型、动态语言和静态语言、强类型定义语言和弱类型定义语言区别】
编译型和解释型的区别
先来看看编译型语言定义:
编译型语言首先是将源代码编译生成机器指令,再由机器运行机器码(二进制)。
再来看看解释型语言的定义:
解释型语言的源代码不是直接翻译成机器指令,而是先翻译成中间代码,再由解释器对中间代码进行解释运行。
咋看一眼,还是一脸懵逼。下面打个比方:
* 编译型相当于用中英文词典(翻译器)将一本英文书一次性翻译(编译)成一本中文书。以后查看直接就是中文了。可想而知,以后读书(运行)会非常非常方便。
* 而解释型相当于用中英文词典(翻译器)将一本英文书读一段翻译一段(解释)中文。以后查看时还是需要重新翻译。这样效率会低一些,必须依赖解释器,但是跨平台性好。
动态语言和静态语言
我们常说的动态语言和静态语言,其实是指动态类型语言和静态类型语言。先来看看动态类型语言:
动态类型语言,是指数据类型的检查是在运行时做的。用动态类型语言编程时,不用给变量指定数据类型,该语言会在你第一次赋值给变量时,在内部记录数据类型。
再来看看静态类型语言的定义:
静态类型语言,是指数据类型的检查是在运行前(如编译阶段)做的。
强类型定义语言和弱类型定义语言
(1)强类型定义语言:强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。举个例子:如果你定义了一个整型变量a,那么程序根本不可能将a当作字符串类型处理。强类型定义语言是类型安全的语言。
(2)弱类型定义语言:数据类型可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值。
强类型定义语言在速度上可能略逊色于弱类型定义语言,但是强类型定义语言带来的严谨性能够有效的避免许多错误。另外,“这门语言是不是动态语言”与“这门语言是否类型安全”之间是完全没有联系的!
4、你还有什么问题?
本来以为三面挂了,因为第三题并没有答好,过了两天hr通知四面