原文首发于个人博客,欢迎关注~前端
今年的春招(暑期实习)批已通过去大半了,相信很多同窗已经拿到了心仪的offer了~原本打算暑假有空再写写这段经历,不过今天正好有空就记录一下吧,但愿能给正在或者从此要找前端实习、工做的同窗一点点启发和建议。(因为我妹子在北京读书,因此实习的话我只想着申请北京的实习机会,这是本文的大前提)。vue
我本身是北邮研二的学生,「主修」前端。我本身的面试经历很少,从1月份到如今总共只面了3家:头条,腾讯·微信和蚂蚁金服·支付宝,很幸运都拿到了offer。其实我以为主要仍是内推对个人帮助特别大,没有内推的话我估计也很难拿offer了。因此经验第一条:能找内推尽可能经过内推来获取面试资格。帮你内推的学长学姐通常会帮你查看(甚至修改)简历,有的能够直接部门直推给leader,等于省去了HR筛简历的步骤,因此能找到内推就尽可能走内推而不是单纯走网申吧。node
1月份的时候有个头条的学长经过邮件联系到我,对个人作的PicGo很感兴趣。跟我要了很是简陋的简历,就把我内推了。webpack
不事后来面试邮件发来后我才知道给个人推的职位是iOS研发工程师
。他们组是移动端的组,要招前端,可是可能没有前端名额,就用iOS
的职位给我内推了。而后我也就稀里糊涂的去面试了。说实话毕竟是第一次面试,而且当时周边的同窗也都没有开始找实习,在仅有的几天时间里我准备的特别不充分。git
头条总共面了我三面,都是视频面。其中一面二面是连着的(一面一结束,立刻二面面试官来面我)。因为这个组的性质比较特殊,来面个人面试官都不是写前端的,所以问的网络、计算机相关的问题会更多点。我过后(3月份面完微信和蚂蚁以后)才以为当时1月份面头条的时候简直回答得一塌糊涂。github
不过感受本身作的很正确的一件事就是面试完立刻把问题记下来了。从中也看出三家公司的侧重点不一样。web
头条一面是个年轻的小哥,是作移动端的。先问了个人项目,由于都是前端的他也没太了解,就开始问问题了:面试
一面算法题虽然思路说对了,可是没写出来的时候我以为本身已经凉了。结果竟然面试官说「你等一下,我去叫二面面试官」。算法
和一面就隔了3分钟。二面是交叉面,是另一个部门的面试官来面的。这个面试官年龄一看就比一面面试官大。简单自我介绍以后,他就开始问我问题了:vue-cli
算法题2如今看来真的超级简单。当时我真的没刷过题,平时对算法训练也不多,因此说的思路能过可是不是最优解。面试官说「行吧」(当时以为凉了哈哈)。
三面和二面隔了大概几天吧。其实面完二面以为仍是很悬,结果仍是收到HR的三面约时间电话。三面面试官是部门leader了。这个面试相对来讲最轻松,基本没有问什么复杂的问题:
因为卡着1月底快过年了,因此HR那边在年前给了我口头offer,年后回来就给我发了正式的offer。
做为人生中第一份offer,仍是挺激动的。不过不是 前端开发
的职位让我内心一直有点不舒服。我想去的实际上是专业的前端团队,以及以后入职后作的东西也不是本身特别喜欢的,因此我在想着年后回学校再找找有没有本身更喜欢的实习岗位。固然头条这个岗位也很棒了!
经验总结二:算法、数据结构和计算机、网络基础知识很重要,哪怕是前端研发工程师,也是一名工程师。 因此我寒假回去后就开始针对本身薄弱的算法和数据结构部分开始了恶补。
腾讯今年春招(暑期实习)开始的时间特别早,从2月底就开始能网申、内推了。尤为3月份一整个月是提早批,而且4月1号以前没走完流程的同窗,都要必须参加4月份的笔试。因此理论上是越早内推越好,越到后面简历越多并且万一4月前流程没走完,就得参加笔试了。
原本我想着先面几家小一点的公司攒攒经验再去投腾讯和蚂蚁金服的,毕竟这两家门槛仍是至关高的。本来打算投北京微信的前端岗,可是问了上一届的一个学长说北京的微信不招前端,因而个人重心就放在蚂蚁金服的北京实习了。不过有件事情的发生打破了我本来的规划。
我有个在微信工做的学长,据说了个人状况以后帮我从微信HR那边问到北京微信今年招前端的状况,可是HC不多。我一听,呀,好机会。赶忙修改了简历发给了学长。内推后没两天我就收到了北京微信的现场面试邀请,内心仍是很忐忑的,毕竟那但是微信啊。并且也是个人第一次现场面试。
到现场后,有个年龄跟我相仿的学长找到了我,说「我是你的一面面试官」。微信的现场面试没有我想象中那么拘谨(两我的一间小屋子那种),是在开阔的大厅里,有不少小圆桌,光线也很好。总之面试体验仍是很好的。同时我还看到了不少其余来面试的人。
一面面试官说他也是北邮毕业的,一会儿就感受放松了很多。接下去就基本是他拿着个人简历开始问问题了。
一面的问题基本都答上来了,面试官也以为很满意,就让我等会,叫来了二面面试官,跟我说是专门搞算法的。(内心一凉)
面试官跟我说他是北师毕业的,跟个人学校(北邮)很近(哈哈)。而后说,「咱们来到简单的算法题吧,不须要你写,只须要你说说思路」
算法题又是没作出来(虽说了最蠢的解法)内心又是一凉,感受gg。结果面试官说「小伙子思惟还挺灵活」(有么!)而后让我等会,叫来了三面面试官。
三面是个女leader,她对我说「前面的面试官对你的评价很高啊」。因而开始问个人我的经历和项目相关。最后问了我何时能来?我一听奇怪,我不是投的暑期实习么?而后她说最近有个项目急着要上线,因此缺人,就额外要了一个前端的HC。我说我实验室暑假前并不放人...因此须要再考虑一下。而且这个时候我听闻他们组实际是作AI的,而前端若是我去了也只有两我的。到这时我感受有点不对劲,不过leader说以后还有一个广州的电面要我准备一下。
没过两天就是4面,也是我第一次电话面试。四面就纯粹围绕着我作的项目PicGo开始说了。问的比较注重的部分是我对于PicGo的思考。从开发者和使用者和产品的角度去说明。好比如何维护、如何打磨产品,遇到的问题如何克服,与用户的意见不一样时如何应对等等。我感受更考量我对PicGo的认知和将来的规划,究竟是一个用心作的产品还仅仅只是一个star收集者。
四面面完,没两天三面的leader就打电话过来问我啥时候能去实习。然而在四面面完的这几天里,我就决定了不去了。首先实验室6月底前放不了人;第二个跟我预期的有所出入,我觉得是微信的前端团队招实习生(但不是),由于我其实想在前端这块能继续作深刻一些,因此就仍是把这个offer给拒了。当时想法是若是北京微信这边没有喜欢的岗位,那也没事,好好准备一下蚂蚁金服的面试就好。
回宿舍我跟舍友一说我把微信的offer拒了,他们只丢过来一句「暴殄天物」。舍得舍得,有舍才有得,后面会再说。
在面微信的面试阶段前,有个支付宝的北邮师兄经过微信联系上我。他说关注个人GitHub很久了,想给我内推到支付宝的前端团队那边。我天然是开心地答应了。不过我当时想着先完善简历+先把微信面完。否则一会儿准备两个大厂的面试,压力大不说,万一时间撞上了反而更尴尬。在拒了微信后我把简历发给了师兄,开始了支付宝那边的内推。
支付宝这边技术面总共三面+HR一面。全程电话面试。
内推没多久,一面面试官就经过微信联系我,跟我约好了面试时间(次日晚上7点半)并说「我这一面很轻松的」。在面试以前我有据说蚂蚁金服的面试是比较难的,虽然师兄说很简单但也是作好了被挂的准备。
7点半准时电话响起。面试官说他也是北邮毕业的,让我稍稍有所放松。而后接下来的问题就让我冷汗直冒。
一面的难度应该是面的这三个大厂以来最难的。面试过程当中我仍是比较紧张的,不过一开始确实紧张,后面说开了就好多了。面试官面完以后说等二面联系我吧。二面面试官是他们部门的leader。
一面面完的次日面试官就加我了,直接约了当天晚上7点半的电面。(等于昨天一面今天二面...)事前我从内推个人师兄那里了解到二面面试官是很厉害的一我的,因此难度应该会比一面面试官高。听到这个消息不觉咽了一下口水,难受。
7点半准时电话响起。二面面试官的声音和语气给个人感受是一开始比较低沉的,感受比较严肃。而后后面的问题果真「没让我失望」地难。
面完感受很凉,问题的深度是真的深。以前的面试不多有彻底答不上来的,而此次二面对 vue-hot-reload
的问题就基本没有答上来。面试官最后给个人反馈大概仍是不错的,因此我就在忐忑中等待三面的通知。
过了几天,三面面试官经过电话跟我约了时间,听声音仍是很和蔼的。不过,问题仍是依然颇有难度啊!问题很少,总共问了三个问题,可是第一问就让我很难受:
这个面试总共只有45分钟不到,面试官说不能太长不然影响个人评价。我就说我第一题答得不够好。面试官说「不是不够好兄弟,是很很差!你第二题答得很不错,第三题有所误差,可是你第一题答地太差了」
哈哈,当时听完以为应该是凉了吧~而后面试官最后说了一句,「等以后HR会联系你」。噫,因此仍是有戏?
经验总结三:只知其然不知其因此然是不行的,要对原理了解更深才能更好地解决问题。
不过人生老是有所波澜。
在我面支付宝结束先后,微信那边的HR小姐姐联系到我问我为何把北京的岗位拒了。我说了以前我考虑的理由(主要是团队不符合预期啊啥的)。原本觉得跟微信的缘分就这样了。而后HR小姐姐不死心,帮我联系了广州微信小程序的前端部门,问我去不去那边实习。我跟妹子商量了一下,暑期实习去广州两个月也能接受。因而就答应了。不太小程序那边还须要加面 。小程序这个部门作的是小程序开发者工具的,我以为很合个人胃口,正好我也比较喜欢写工具类。
一波三折,在等待支付宝HR给我电话的这段时间里,我在两天内就拿到了微信小程序的offer。
三月最后一周的周一下午,我记得很清楚。3点开始一面。面试官给了我一个连接,让我一小时内作完题而后他再跟我电话聊。
一个小时总共两道题:
实现一个 HardMan:
HardMan("jack") 输出:
I am jack
HardMan("jack").rest(10).learn("computer") 输出
I am jack
//等待10秒
Start learning after 10 seconds
Learning computer
HardMan("jack").restFirst(5).learn("chinese") 输出
//等待5秒
Start learning after 5 seconds
I am jack
Learning chinese
复制代码
不难,主要是链式调用要处理好this
以及用一个setTimeout
作异步调用任务队列。我没有用ES6的Class实现,用了常规的funciton实现以下:
const HardMan = function (name) {
this.queueList = [() => console.log(`I am ${name}`)]
this.learn = function (subject) {
this.queueList.push(() => console.log(`Learning ${subject}`))
return this
}
this.handleTime = function (time) {
return () => new Promise((resolve, reject) => {
setTimeout(() => {
console.log(`Start learning after ${time} second`)
resolve()
}, time * 1000)
})
}
this.rest = function (time) {
this.queueList.push(this.handleTime(time))
return this
}
this.restFirst = function (time) {
this.queueList.unshift(this.handleTime(time))
return this
}
setTimeout(async () => {
for (let todo of this.queueList) {
await todo()
}
}, 0)
return this
}
复制代码
微信小程序团队一共有 n 名成员,决定出去秋游,在海边遇到出租摩托艇的杰克马,马先生手上有 m 辆待出租的摩托艇,价格分别是 b1 、b2 ... bm; 因为习惯了微信支付,团队中每一个人身上的现金都有限,分别是 a1 a2 ... an,对了,一块儿出门的老板还带有 S 元的团队经费,这个经费是每一个人均可以使用的
那么考虑如下两个场景
场景1 团队成员都颇有爱,都愿意借钱给其余同事,那么这时候团队最多能租到多少摩托艇
function max( Array n, Array m, S) {
return num;
}
复制代码
个人答案:
// 能借钱说明能够把钱汇总起来从而算出能接多少摩托艇
function max(n, m, S) {
let sum = n.reduce((a, b) => a + b, 0) + S
m = m.sort((a,b) => a - b)
let num = 0
m.forEach(item => {
sum -= item
if (sum >= 0) {
num++
}
})
return num
}
复制代码
场景2 团队成员都十分小气,是不肯意借钱给别人的,那么请考虑如下两个问题
//问题一 老板是否能想到一个策略,使得全部人都能租到摩托艇?
function isAll(Array n, Array m, S){
return bool;
}
复制代码
个人答案:
// 将摩托艇的费用和我的费用排序使得钱最少的人租最便宜的车,一一对应
// 若是钱不够再向老板借钱
// 直到老板的钱S被借完为止
function isAll (n, m, S) {
if (m.length < n.length) { // 摩托艇不够
return false
}
m = m.sort((a, b) => a - b)
n = n.sort((a, b) => a - b)
let length = n.length
for (let i = 0; i < length; i++) {
let diff = n[i] - m[i]
if (diff < 0) {
S += diff
if (S < 0) {
return false
}
}
}
return true
}
复制代码
//问题二 请问给出一个策略
// - 使得整个团队租到最多的摩托艇
// - 在租到最多摩托艇的状况下,总体的支出尽可能的少
function max( Array n, Array m, S) {
// 采用动态规划解,
return {
num,// 多少摩托艇
cost // 整体资金支出
}
复制代码
由于时间关系我没有写完。因此跟就把大概写了,这是道背包问题,后面跟面试官说了一下思路。
// 一个背包问题,不过我没写出来
// 以dp[i][j]表明第i我的要不要买第j辆车
// 有两种状况
// 1. 第i我的没租车,那么意味着第i - 1我的可能租这辆车
// 2. 第i我的租了车,那么意味着是在i - 1我的租了j - 1辆车的状况下租了j这辆车
// 统计最高的S不为负数的J即为买了最多的车。
// 当J相同的状况下比较S的大小,S越大说明越省钱
// 优化思路:1. 当S小于0的时候就不必继续算了 2. 一开始两个数组依然像第二题同样排序
复制代码
这两个笔试题作完,面试官电话就过来了,简单问了一些问题:
面试官问了大概半小时,就说以后二面的leader会联系我。因为笔试题都作出来,因此感受仍是比较良好的。只是不知道二面来得这么快。
二面面试官隔了大概半小时就打电话来了,主要就看着个人PicGo这个项目在问,多是由于技术栈(Electron)和小程序开发者工具(NW.js)比较接近吧。
面试官的语气很是和蔼,跟我探讨的时候也是基本以商量的语气。末了还夸了一下这个项目作得仍是挺完整的。(其实还有一个很重要的「测试」部分没写。。。)考察的重点问题已经不是功能问题,并且相似安全、更新策略等这些平时可能写东西的时候不会太注意的问题。因此若是只是一个玩具项目,可能确实谈不上来。还好以前不少坑本身踩过,因此跟面试官聊起来也比较愉快。
经验总结四:一个好的(开源)项目很是加分。好的意思不是star多,而是你对它的思考、实践多。 经验总结五:若是你有一个作得很好的项目,必定要让面试官看到,并引导他问你的项目来把你熟悉的东西说出来。
次日收到HR电话联系说已经经过面试了,第三天就发了Offer。
因为小程序这个组作的东西是开发者工具,很合个人胃口,因而我就接了这个Offer,而此时我还没接到支付宝的HR电话。微信的这个「抢人」速度是真的快。
支付宝HR电话在后面很久才打来。此时我已经接了小程序的offer了,因而暑期就没办法去支付宝实习了。我说了一下我暑假可能无法去实习,可是秋招还要回北京秋招。因此问可否保留秋招终面资格(跟去年同样)。支付宝的HR给个人反馈就是不必定,很差说。我想一想反正若是不保留资格,到时候回北京再面就是了。
因而前两天终于发来的offer,也只能拒掉了。同时我也只能跟头条的HR说了一下状况,真的很很差意思,秋招还有机会。
个人春招(暑期实习)之旅也就这样结束。其实我大可接受支付宝的offer实习而后直接转正,不过我想着既然有一个更喜欢的机会去尝试一下又未尝不可呢。其实从第一次拒绝微信的offer到后面又接了小程序的offer,我以为都是由于我想作本身喜欢作的事吧。
最后经验总结六:Do what you love, love what you do.
但愿这份经历也能给你带来帮助。
我本身的主要开源项目
以及PicGo-Group的项目。
我参与的开源项目
:
命令支持】等等。