首先,希望这篇博客对即将面试的小伙伴们能产生一些帮助。
然后,这篇博客里有一些问题我还没有解决,如果小伙伴们有什么想法、解决方案或者更好的观点,我真诚的希望您能在这篇博客下面留下您的看法,我希望我们所有人都能在这个过程中有所成长。
人生第一次面试,电话面试,面试官很好,在我回答不出来的时候会转移话题,不至于让场面很尴尬,正因如此,我才没有太紧张。
面试官在确认过我的身份并且自我介绍后就开始问问题了,我准备了两天的自我介绍根本没派上用场。。。
这次面试的问题很发散,范围比较广,我将题目大概分成了以下几个类型:摸底题、经验题、案例题、思维题、视野题、意向题、情景题、算法题、忠诚题。我觉得在问问题的角度上,这位面试官是用了心的。
▍摸底题
1、学过什么开发语言?
C、C++、JAVA
2、你的课程里面没有前端语言的,但是你申请的职位是前端工程师,你的前端应该是自学的吧,你是怎么样自学的?
看一些教学视频和书籍。
3、看过哪些前端书籍?
学什么技术就看什么书,学HTML、CSS、JS的时候就看这相关方面的书,学AngularJS的时候就看AngularJS方面的书。
问题分析:面试官应该希望面试者看过《JS权威指南》、《JS高级程序设计》之类的书。
但是我之前没有看过这之类的书,所以只能错开话题说。
4、你有学过C++,为什么不选C++,为什么要选择JavaScript,C++跟JavaScript有什么区别?
因为当时学习C++的时候没怎么理解,然后JavaScript能通过HTML展现出一些效果,表现力更强,我觉得更有意思一些。区别我没研究过。
问题分析:区别如下:
1、C++是静态语言,JavaScript是动态语言;
2、C++是编译型语言,JavaScript是解释型语言;
3、C++有指针,JavaScript无指针;
4、JavaScript是函数式编程语言,C++不是;
5、C++的继承是基于类的,JavaScript的继承基于原型;
6、JavaScript的一个重要特性是闭包(当前作用域可以访问并保存外部作用域的变量);
7、JavaScript可以显示的设置上下文。
5、我们知道C++和JavaScript相比,C++的效率会更高一些,这是为什么呢?
这个我也不太清楚。估计电话那头的面试官会感觉浑身发冷。
▍经验题
1、有没有过实习经验?
有,在一个公司里面学了一个月的微信小程序,现在在接手做一个商业的微信小程序前端。
问题分析:面试官的期望应该是应聘者有在一些大公司的实习经历,接触或者亲身参与过一些很牛的项目。
但是很抱歉,我没有。
2、除了刚刚说的微信小程序的项目,有没有接触过什么项目?
我学习前端有一年了,接触过一些项目,比较正式的有三个,除了刚刚说到的微信小程序的项目,另一个是当时为了参加大学生服务外包创新创业大赛所做的基于微信公众号的O2O资源回收平台,还有一个是PC端的在线答题系统。
3、项目里有用到哪些技术或者有哪些收获?
我是通过第一个项目学到了Bootstrap、Weui还有JQuery,然后也学到了SVN还有Git,这是我做的第一个移动端的项目,也是第一个团队项目;第二个项目我是团队负责人,从需求分析到项目部署都是我一手在把控,项目里面用到了AngularJS。
4、项目团队有多少人(这个问题是在上一个问题中我说到团队项目时穿插问的)?
总共有四个人。
5、除了你说到的AngularJS,你还知道其他目前比较流行的一些JS框架吗?
React、Vue
6、为什么选择了AngularJS,而不是另外两个框架?他们的区别是什么?
当时接触有关于它的信息多一点就选了。它们的区别我不太清楚。是的,我再一次跪了。。。
问题分析:
Angular:一个完整的框架,意味着不需要太多的工作,就可以使用于大部分的业务场景。
React:非常纯粹的组件式开发,所有的页面元素均由各大小组件组合而成。
Vue:一套构建用户界面的渐进式框架,专注于MVVM 模型的 ViewModel 层。
7、学习的是AngularJS的几个版本?
2吧。
8、在你学习AngularJS2的时候,React和Vue正是开始火的时候,而AngularJS1的市场覆盖面已经在消退了,为什么还是选择了它?
冷场。。我回答不了,面试官也知道我回答不了,就说:我们换个话题吧。。
▍案例题
1、现在有一个下拉框,在输入框里面输入一些内容,然后在下方显示相关的内容,如何实现?
首先给一个输入框,然后给输入框绑定一个事件,当用户输入的时候就调用函数,使用AJAX到后台去取数据,然后把获取到的数据展示出来。
2、每次都向后台请求数据好像不太好,可以哪些优化呢?
我现在能想到的只有缓存。
3、你刚刚说到事件绑定,事件绑定的方式有哪些?
一共有三种。第一种是DOM绑定,直接在标签里绑定一个函数,这一种是不推荐的;第二种是用JS获取到该元素,然后在给他绑定一个函数;第三种是添加事件监听器(addEventListener)。
4、如何确定是哪一个元素发出的活动?
如果是在微信小程序里面就是currentTarget、如果是在浏览器里面就是target或者是srcElement。
额,好像又翻车了。。
5、知道事件委托吗,优势和劣势?
事件委托就是将事件绑定到父元素上。有两种应用情况:第一种是多个元素共用一个监听器,如果给每一个元素都绑一个监听器,那样会给浏览器造成很大的压力;第二种情况是在动态添加元素的时候,如果每次动态添加一个元素都要给新元素绑定一个事件就太麻烦了,这个时候可以使用事件委托,直接给它的父元素绑一个事件,这样就不用每次都要重新绑定一次了。
劣势我不太了解。
问题分析:
优势:
1、减少事件注册,节省内存;
2、简化了dom节点更新时,相应事件的更新。
劣势:
1、事件委托基于冒泡,对于不冒泡的事件不支持;
2、层级过多,冒泡过程中,可能会被某层阻止掉;
3、理论上委托会导致浏览器频繁调用处理函数,虽然很可能不需要处理,所以建议就近委托;
4、把所有事件都用代理就可能会出现事件误判。
▍思维题
拿上面那个下拉框效果来说,你会想到哪些优化的方法?
第一,在UI上做优化;
第二,在用户的输入后面用灰色显示可能要输入的文字。
我记得我当时好像说了三点,但是我真的忘记了我当时怎么说的。
问题分析:这道题应该是综合考量应聘者的实践经验以及思维拓展能力。
我不得不承认,在这方面我还是有所欠缺的。
▍视野题
1、AI未来的发展方向;
我不知道怎么说,然后面试官举了一个例子:比如说PC端的业务好多都已经转移到移动端了。听到PC端,移动端,我脑海里第一反应就是小程序,感觉自己好像中毒了。。
微信小程序。
问题分析:这个问题应该与搜狗公司未来的发展方向相关,所以想问一下应聘者对这一块有多少了解。现在回头想想AI的发展方向应该是最近很火的物联网方向。也不知道当时怎么就头脑一热,说了个微信小程序,这简直就是把自己往死路上逼啊。
2、你为什么认为是微信小程序?
上面的问题问题是我乱答的,结果还要我说原因,只能瞎编咯。
第一小程序不用安装用起来方便;第二人们平时用惯了支付宝微信,熟悉了这样的交互方式,使用小程序也会更好一些。
3、微信小程序有很多的限制,比如说页面层级的限制,你觉得应该怎么办?
让我瞎编出原因已经很不容易了,还给我出难题。。。
我觉得可以模块化,将大的功能划分成一个个小的模块,然后再进行整合。
问题分析:我真有点怀疑是不是我瞎编的原因让面试官产生了认同感,所以想继续了解我有什么新颖的观点。
很抱歉,我想不到。
▍意向题
1、你更中意大公司还是初创团队?为什么?
我更喜欢大公司。因为初创团队不太稳定,制度也不完善。
问题分析:弄清楚应聘者是不是一个意向明确的人。
2、对未来发展的城市有要求吗?比如说北京。
我更希望能去上海或者杭州发展,当然北京也可以。
问题分析:意思应该就是愿不愿意被调剂。
3、你会强烈要求公司帮你解决户口问题吗?
暂时没有这个意愿。
问题分析:这个问题是在问应聘者会不会在这座城市里扎根,这也是考量应聘者入职后会不会跳槽的可能性标准之一。如果你本身就有意愿在相应的城市扎根,个人觉得最好的回答示例是:我其实很想要一个北京户口,如果公司能帮我达成这个意愿更好,如果实在没有办法我会自己去处理,不会对公司有这方面的要求。一来表达你跳槽的可能性小一些,二来表达你不会为难公司,三来直接用“公司”而不是“贵公司”表示自己已经将自己认同成为了公司的一员。
▍情景题
如果你有一个特别好的创意,你会怎样去告诉你的上司?
我会先去搜集资料,整理成报告,用数据和图表去说服上司。
问题分析:我也不知道这样说对不对,但是这是我能想到的最得体的回答了,只能硬着头皮上了。
▍算法题
两个人玩游戏,一个人说1或者2,然后另外一个人在刚刚的树枝上加1或者加2,谁先数到20就算赢。如果一方想要赢或者输,说说你的思路怎样去实现它?
我说我算法不太好,面试官说只要说说思路就可以了。
我觉得可以反过来,从20开始,减1或者减2,然后如果是减1,那么前面就剩下19个数,同样是减1或者减2,如果是减2也是一样的。我也不知道这叫不叫二分法。
问题分析:说实话,这道题所涉及到的算法真的不难,但是我的算法是真的垃圾,想不出来答案。事后我想到我真的是笨到家了,第一反不反过来结果都是一样的,第二我TM不懂还多嘴什么二分法,我能感觉到电话那头的面试官可能要翻一个大白眼。
▍忠诚题
1、我们搜狗有哪些产品?
我已经用好几年的搜狗输入法了,还知道搜狗浏览器,另外好像了解到目前在往AI方面发展。
问题分析:这个问题一出来我就知道是要考忠诚度了,只能怪自己看了这么多次搜狗校招的网页却没想到要记住几个他们的事业部门的名字。
2、我们搜狗的老板是谁?
这个……。这个问题真是问的我蛋疼,去应聘,结果连老板是谁都不知道,真的是尴尬。
▍总结
1、自己应该继续学习,补充更多的前端知识,提升自己的知识水平与实践技能;
2、对性能优化、可访问性、可维护性方面的知识要强化,大公司大项目都会很重视这一点;
3、拓展自己的视野,多关注一些新兴技术,去了解这些新兴技术火热的原因以及未来的发展趋势,有大局观和长远规划对自己未来的发展很重要;
4、算法是我的薄弱项,但这却是大多数中大型公司都会考量的一个重要标准,即使我应聘的是前端岗位,所以在这方面还要继续加强;
5、在面试之前一定要了解清楚该公司的相关情况(老板、部门建设、未来发展路线),可不能像我一样,连公司老板的名字都忘记了(如果是电话面试还可以在电脑上提前打开他们网站的介绍,可是现场面试就不行了哦)。
▍参考文章
React.js,Angular.js,Vue.js学习哪个好 - 知乎