前端面试总结(at, md)
引入
面试过去了这么久,把八月份面试题和总结发一下吧,虽然年底大家可能都不换工作~ 还是可以看看的。
关于面试,引用叶老湿的一句话。你的简历是自己工作的答卷,项目经历是你给面试官出的考纲。所以,我的面试一定是与我的简历、工作经历相关的,一些面试题并不一定适用于任何人,但是你可以从中了解他们考察的点,以及侧重点。基础知识可以查漏补缺。
原文链接
moka
一家小型创业公司。因为同事有去面过的,他说面试感觉挺 diao 的,我就想去试一下啦,拿它先热热身,就从 boss 上投了简历。
一轮
-
用 setTimeout 实现 setInterval,可不必关心返回值的类型。
我听错了条件,我以为要注意返回值的类型必须跟原生的一样,也就是返回一个 number,并可以 clear。无清除定时器功能的马上就写出来了,但是加清除定时器,还有返回值的问题,就费了半天劲... 也没弄明白。面试官比较着急了,跟我沟通的时候,我才知道返回值不一定非要跟原生的一样。
-
给了一个栗子,结合
- pdf.js
的示例代码,找出这个栗子中为什么分辨率很低。主要是看你通过调试去解决问题的能力。
-
然后就各种结合项目各种问呗,如何解决问题的,如何团队协作沟通的。
-
还给了我一个题,让我回去用 React 实现一个群组的 CheckBox,其实最后看就是 treeselect 的雏形啊。 我的实现
二面
- 自我介绍
- 最近做的一个项目,其中的难点,过程。
- 最近做没做过技术调研,我捡我了解的说,比如 redux 和 mobx 的区别。
- 做技术分享的时候会关注哪几个点,
答: 它的实现原理,简单的一张图。一个简单的 demo 引入,并看一些实现。充分表现它的优势,然后跟现有的技术栈是否能结合,快速上手。有什么缺陷。
- 在第一家公司有没有记忆深刻的项目,经历。项目的话就是最开始的时候,让我自己写一个页面的时候,在一周之内搞完。。有一个特效是在轮播图上加放大镜,用 swiper 和自己写的放大镜。当时各种努力工作终于把这个功能做完,但是忽略了兼容性的问题。在 ie8,9 是无法滚动的。然后立马切换到另一个 slide.js,替换上之后放大镜失效了。当时好像是插件内部阻止了冒泡行为,我那个放大镜取不到事件了。 因为已经到 deadline 了,通过我们的 leader 跟运营人员沟通,先不要这个功能了。就上了。后来查的时候,swiper2 的兼容性比较好,ie8.
- 个人的缺点 。技术上就是还是比较 low, 然后就是个人的毅力感觉一般,但是最近健身感觉自己很不错。
- 怎么算是分布式的应用呢,属于自己挖坑。
- 问了我好多不是技术 "点" 的问题,都是大的面,细节很少。记不清了。
三四面
就是 hr 和 ceo 了,就是问一些离职原因,跟公司价值观方面的问题了。
总结
无论是一面的 pdf,让我实现一个功能,还是二面的问题,都是偏重于项目实战的。他们想要的是入职就能干活的人,先能负责某块开发任务。并且在独立解决问题,团队分享方面有所表现。
腾讯 (omg)
一面
- 平常开发怎么设计 react 组件的。比如 container 组件,业务组件等等的。
- 手写一个观察者,发布订阅模式。
- 什么是函数式,跟面向对象有什么区别,因为我简历写了正在学习 fp。
- 科里化,写一个
- cache-control,http-only
- url 输入到服务器中间发生
- redux 源码
- vue 跟 angular 像不像
- vue 跟 react 的模板渲染分别是怎么做的
- 实现垂直水平居中
二面
-
react 组件的结构,其实是问组件实例对象的结构,问题没理解。我说在 children 里就能看到。他问是吗,是什么样的,你平常应该用过 children 啊,应该知道啊。我推测 children 是数组,因为有 children.map 方法。他又问一定是吗。
这个问题上来就暴露了我对这些细节是没有关注的,而他期望的是,你用 React,连它的实例都没看过,children 可能是一个,可能是多个也不清楚。
-
那我再问一个特别简单的问题,组件之间的通信,比如父到子,子到父。再说一个兄弟组件怎么通信,嵌套了好多层呢?
嵌套多层的他直接说有好几种方法,你随便说几种吧。我从来木有总结过,整个人有点懵逼,也没有回答好。后来整理了一下 React 组件之间的通信
-
再问一个稍微有难度的,组件的 state 嵌套多层的时候,我要让最里面那个 state 变化,怎么做。我开始没理解这是啥意思,他解释说 state 是
- { a: { b: { c: { d: 1 } } }
这样,你 setState 的时候,怎么改属性 d 的。我说一层一层的找进去,setState 新对象。他又说那几层是可以的,假如说一百层呢,也这样吗?我就懵逼了。
他说 react helper 里面有个 immutable 的库,就是用来处理这种情况的。
immutable 我是知道的,但是我了解的是通常处理不可变数据的。后来查了一下,应该是这种操作。
- import { formJS } from 'immutable';
- const obj1 = { a: { b: { c: { d: 1 } } } }
- const obj2 = Immutable.fromJS(obj1).updateIn(['a', 'b', 'c', 'd'], value => value + 1)
- console.log(obj2.toJS); //{ a: { b: { c: { d: 2 } } } }
-
你简历上说你看过 redux 的源码,简单说一下吧。
终于认可了我一次,说这个确实看过,能说出来。我有点尴尬了。
-
你说你读过 《深入浅出 nodejs》,那你在项目中用过 node 吗。
-
移动端做过吗,适配问题。750px 的设计稿,你怎么做适配,给几种方案。
-
rem 的原理是什么。这个答的也不好
-
然后就是让我问了一些问题,还跟我说你工作才一两年,你要的这个薪资肯定给不到,腾讯卡工作年限很严格,评级方面。最后就是现在不会直接给你面试结果,他们会横向比较几个候选人。
总结
腾讯面试的感觉就是,没有那么正式,都是部门的技术直接联系的你,然后二面就是部门负责人了,决定了是否入职。二面给我的感觉就是,他从 React 入手问一些基础的问题(一些需要留心注意的)。如果没有注意这些点,没有总结,或者看过类似的总结文章,是很难有条理的回答出来的。其实我不太喜欢他这种,"我觉得很简单... 你就应该会的" 的方式。但是这次我发现了自己的一个问题,就是面试的时候爱说一些了解的名词,但是实际没用过,恰好这个面试官都比较深入了解,也比较反感,他认为你这是 "不懂装懂"。所以面大公司,不会的还是尽量要说不会,不要犯了面小公司的错误。自己也确实没有做到注意总结,了解也确实比较浅显,为自己以后的工作学习敲响警钟。
阿里 (天猫)
一面
由于一面是电话面试,主要问了好多项目的问题,如何解决问题的。
- 比如问其中一个项目,查询多字段对应处理的问题,sql 语句怎么拼的,你的自定义配置是怎么回事。
- session 和 cookie 的区别
- 使用 redux 和 mobx 的区别
- 什么是 bfc
- node 了解多少,用过吗
- 算法怎么样
- 好多问题,有点忘了,就是各种知识点... 其实百分之八九十能答出来,他也觉得不错,让我后面好好准备,架构方面,原理方面。
二面
面对面
- 介绍一下你的工作历程(经验)
- 我们找一个产品或者项目具体聊聊,让我自己说。
- 介绍一下项目,技术栈,我是不会问的。
- 你用过 vue, react。你觉得他们有什么区别。
- 说一下你是怎么用的 redux
- 我自己提到了通常放在 container,他问了一个 connect 怎么做到注入 state 的。我就说 connect 是一个高阶组件,注入进来的 store,通过 state 维护?他又问那是怎么实时 render 的?我说 connect 里面应该有 监听 store 的 changes 吧。最后就说没看过 react-redux 的源码,只看过 redux 的源码。
- 看了我的一篇博客,问了一个 this.children 是实例还是 class
- react router 的 hash ,history api 有什么区别,我说了一些表层的区别,url 的不同,实现的原理不同。他继续问还有什么内部的不同吗,我就说不了解了。
- mobile 端有接触吗,我说做的不多,主要还是 pc 端吧,我说你可以提问。问了一个 viewport 的,如果 width=device-width,iphone6 上页面宽是多少,plus 是多少。如果 viewport 里设为 width=375,plus 上会缩小还是放大。
总结
让我自己去聊项目,去考察我的组织、表达能力,以及沟通能力。而且这也最大程度上能了解到,关于这个项目,你自己思考了多少,主导程度。然后考察主要使用的技术栈,了解的深度如何。然后就是他们业务常用的点。刚面完,自己感觉其实还可以,因为都能回答出来,但是可能深度还不够吧。天猫的要求还是比较高的,而且面试官是从杭州过来专门面试的,也有很多候选人同时面试,只能说明自己在这里面还不够出色,不能脱颖而出。
滴滴
一面
二面