写在前面
作为一个双非一本渣校,还不是应届(去年毕业的),个人还是很想去大公司氛围好的团队(虽然很菜但是还是想去哈哈),然后就选了上海的两件比较不错的去面试:携程和哈罗单车。
携程
我是在 Boss 直聘上投的,因为公司业务也算是和携程相近,所以就想试试,投的第二天就收到了 hr 的信息,然后简单聊了几个问题:你简历上怎么写的毕业后至今职位是打杂?(下次不会这样了,就是自嘲一下的) 跟 hr 解释了一番之后,邀请了去面试。
一大早去的凌空 soho,感觉满满的一股互联网的年轻气息,人山人海。
到了之后联系 hr,hr 小姐姐相当热情,告诉我指示以后跟着指示进了办公区,然后开始等面试官,大约等了半个多小时(反正我倒也无所谓),面试官开完会终于来了,态度挺不错的,然后先让我做个自我介绍,我就总结了一下现在手头的一些工作之类的。然后就进入正式的面试环节了:
问的基本都是原生 js 的东西,就把自己能记住的写下来:
- 什么是闭包?(说了点闭包,然后还有闭包的 gc)
- ajax 实现(就是 XMLHttpRequest 那里的东西)
- 给你一个移动端翻页的需求,你会怎么做?(监听滚动到底部,讲了一下节流函数,然后还有图片懒加载,然后弄个动画之类的)
- cookie 和 storage 区别
- 事件捕获和事件冒泡(这里记得不清楚了,就答了一个捕获是由外到内,冒泡是由内到外)
- 跨域,优化(我顺带还把 cors 然后携带 cookie 那里说了一下)
- 总结下你能想到的操作 dom 的方法(jq 的、document 上的 getElementById/ClassName/TagName/Name,还有 querySelector、querySelectorAll 就想起这些)
- setTimeout 的运行机制(eventloop 机制)
- 说一下 dom 上面的属性的功能和用途(把 vue 里面所用的讲了一下)
- 如何实现一个数据驱动(又把 vue 的讲了一下哈哈)
- 在调试一个页面的时候鼠标一直在闪,你会从哪几个方面去找问题的原因
- 性能优化
- 还有的想不起来了,待补充
- 你还有什么想问的吗
总体来说感觉面得蛮爽也蛮久的,最后谈了很多关于他们的部门业务还有想招什么样的人,面试官中间也会给一些提示什么的,就是最后那个题感觉比较懵逼,实在不太好答(其实我是想说是不是写了一个无限 reload 之类的才一直闪或者 chrome 内存溢出之类的哈哈)
能够从里面总结一些自己的不足和今后需要努力的,比较细的一个方向吧。
中午出来拍了张照片,随便拍的哈哈:
哈罗单车
这里是两面, 而且这次的除了穿插一些 es6es7 的东西以外主要问了好多 vue 当中的东西:(问的挺多的能记住多少写多少吧。。)
一面
- vue1 向 2 迁移(没迁移过,只记得钩子函数名称变了,然后还有 sync。)
- 子向父组件通信(子组件$emit 父组件监听,$parent 访问父组件,sync 修饰符-2.3 加的,然后问 vue1 和 vue2 的 sync 的原理,我知道 2 的其实就是个语法糖,1 没看过,sync 用在解析一个复杂表达式的时候有问题也没去了解)
- 数组搜索值(includes、indexOf),有啥区别(想了半天最后终于想起来:
NaN
) - typeof、instanceof、Object.defineProperty 这些
- es6 有啥不好用 es5 去实现的吗(Symbol、Map、WeakMap 这些,原因巴拉巴拉)
- seo (然后就巴拉巴拉把 ssr 和 spa 区别啥的都说了,还有 ssr 原理,然后还有确定你的目的性,如果只是部分页面想要 seo,只需要 prerender 并不要 seo 要明白最终目的)
- 你知道 webpack 吗?说说理解什么的
- 引一个 lodash 要怎么样打包(CommonsChunkPlugin 来公用模块拆出来,webpack4 不用这个写,在 optimization 写一个 splitChunks)
- 代码分割( 用上面的拆分公共模块防止重复,css 也有一个 plugin 去分离,然后用动态导入的方式-> vue-router 懒加载)
- 最终你发现打包出来有点问题,你会怎么去找问题,怎么看(web 官方文档有,有 3 种方法,还好用过 23333)
- vue 双向绑定相关(数组那里只能重写数组的方法,因为 Object.defineProperty 没办法去监听数组的 set,然后把 Proxy 说一下,在 set 时候去触发 Dep 的 notify,然后用 return Reflect.set(target, name, value, receiver))
- 还有什么想问我的
- 还有一些忘了,想起来加上
二面
二面是 leader 面,问了好多发散性的问题吧,可能自己答得不太好:
- 你第一个项目负责的部分,主要做了哪些功能
- 说一下具体的一个实现
- 你读过哪些源码
- 简单讲一个你读的最深刻的源码
- 说一说你读源码的一些心得,你从源码当中 学到了什么
- 性能优化
- 对自己的定位,规划
- 平常去哪些地方学习、遇到过比较棘手的问题
- 为什么想跳槽,为什么投我们
- 还有什么想问我的
面试官很 nice,人也很好,问的问题也相当有深度,就是感觉脑壳像被挖干了一样很难受哈哈