一、个人介绍
Hello!大家好,我是小问。是的,我的花名跟网名非常像,我网名叫小问,而花名也叫晓问,今天我的分享是如何拿下淘宝p6+的offer。
1.1 个人简介
首先做一个自我介绍,2016-2019 年在七牛云实习,担任前端开发、前端架构设计、数据产品研发。2019 年 - 2020 年在 XMind 从事桌面端软件研发,并于 2019 年本科毕业。今年 4 月份我加入了淘系技术部的营销活动团队,我们团队主要负责双 11 等一些大促活动的落地支撑。主要的负责产品是千帆。我的技术栈比较多样,除了 Web 开发以外,还有一些后端开发,以及数据研发人工智能方面的。我写过一本书叫作《实战 ES2015》 、一本掘金小册《基于 JavaScript 开发灵活的数据应用》,然后感兴趣的话可以先扫我微信加一下我。
1.2 个人经历
今天我的分享的大概是这么一个流程,第一部分是我个人的介绍。
虽然外面说我有 1 年的工作经验,但其实我写代码的时间已经 10 年了。我最先接触的编程语言是 Pascal,然后后面学过 Basic、C# 等。在 Web 开发领域的话,我最开始学的就是 PHP,后来接触了前端以后,就开始学习JavaScript,后面接触了 Node.js、 CoffeeScript,以及现在比较流行的 Golang 和 TypeScript,移动端就了解一点 Swift。而数据研发方面使用较多的是 R、Scala 和 Python。
我自己是“混”过开源社区的,我只能说是混过,而不是呆过。作为早期接触 Node.js 的一员,开发过如 webjs 的框架。也基于富应用的场景,开发过一个叫 mindb 的 JS 数据库。
1.3 项目经历
我说一说我自己的一些项目经历,我在七牛云的时候担任前端架构设计。首先第一个比较重要的是这个架构设计和技术选型,因为之前七牛的前端项目是基于 Angular 开发的,加入以后的第一个任务就是要基于 React 做一个新的前端架构,也就是定义新的技术栈。其中也包括了一个基于 Ant Design 进行二次开发的内部 UI 库,同时基于了 Mobx 和 TypeScript。然后后面是现在比较流行的一个词叫“微前端”,当时七牛云也遇到这么一个需求,但是当时还没有“微前端”的概念,主要解决了在同一个站点下多个 Portal 多框架的研发、发布、加载机制。当时主要的问题是 Angular 和 React ,需要同时在一个页面上的使用,以及怎么样隔离。
在产品方面的话,我当时在七牛云做过一个内部的创业项目,是一个对标 GrowingIO 和神策的数据产品。我负责整个项目的产品设计和研发,包括后端还有数据分析部分。在七牛云做过一个服务公司内部的数据仓库和 BI 产品,相当于一个数据分析的平台。然后来到我的第二个公司是 XMind,现在大家用的这款软件中,里面的大纲模式和自定义主题编辑都是我做的,它主要的技术栈是 Vue 和 Electron。
二、加入淘系技术部
2.1 面试准备
然后来讲讲我加入淘系技术部以后的事情。我为什么要选择阿里巴巴,因为阿里巴巴是一个大公司大平台,有很多的机会,至于为什么是淘阿里巴巴里面的淘系技术部的话,因为淘系技术部虽然说是比较稳定的一个业务体系,但是它并不缺乏创新点,还是有很多的机会的。然后我自己的面试准备的话是,就是一个自我审视的过程,要向老板一样去思考一些问题。然后另外一种方式就是要跳出我们作为技术人的一个思维方式,我觉得这是非常重要的。
2.1.1 向老板一样思考
什么叫像老板一样思考?第一个点:就是列出在以往的学习、工作中参与过和负责过的项目。比如说你作为什么角色,是参与者还是负责人,然后用尽可能简洁的语言,来描述自己在这个项目当中你做的事情和你扮演的角色。你是怎么去参与到这个项目当中的,做了什么事情,做过哪些决策,甚至说你的哪些决定影响了这个项目,你必需要想清楚。然后最重要是要思考这个项目,在你的大团队、甚至在你公司层面上的商业意义,而不是只站在参与者的角度。
2.1.2 七牛云项目举例
后面我会拿详细的项目来举例说明,说说我在七牛云的最后一个项目,刚刚我说的内部的 BI 平台,先说结果是这个项目是黄掉了的。项目背景是因为需要有一个内部的数据管理平台,原本使用了一个开源的表单平台 Metabase,虽然原有项目已经用了快两年了,但当时的老板说这个平台的表现力和能力上的有一些不足,需要开发新项目来替换。但实际上这个老板是空降的过来的,需要有一个项目撑腰。但是没关系,一定要理解清楚你所做的项目背景,而我当时在这个项目里决策是技术负责人负责前后端的开发用的,技术站是 React 和后端的 Golang。
2.1.3 七牛云项目结果
但是有一个问题,就是很多人觉得我做的项目最后黄掉了,是不是我做的这个项目是没有意义、没有收益的。其实并不是,关键在于你从这个项目中有没有进行一些思考。 比如说在业务领域方面,这个项目的客户是谁?这些客户的诉求究竟是什么?有没有站在客户的角度去考察这个项目的实际应用场景是什么。还有比如说刚刚这个项目,他原本已经有方案,为什么要重新做一个东西出来去替换它?这是需要去理解的、要去思考的。
而从技术这方面来说,第一个,你在选型的时候,有没有考虑过这些选型的学习成本、可维护性,以及所在团队成员的接纳程度,甚至在公司层面的接纳程度。因为在项目完成以后,可能会有其他人接手进来,然后他们可能会对你选择的新技术,没办法接受或学习难度太大。第二个就是在研发的过程中有没有新的尝试,比如说新的选型、新的架构、新的理念,重要是这些技术选型或者说技术研发的尝试,能否对自己和团队有一些沉淀,这是非常重要的。我这边会有一个二维码,当这个项目的最后我离开了七牛云以后,写的一个总结,相当于是我自己的一篇笔记,最后开放出去了。
2.1.4 跳出技术人思维
我这里引用现在链家的 CTO,鸟哥说的一句话。他说“很多的技术人员会说我不喜欢社交,我只想写代码,我不想去做写代码以外的事情”,但是这样真的是好的吗?“纯粹的技术人”真的是个褒义褒义词吗?我并不这么认为。
2.1.5 自我审视
面试之前,你要先审视自己在过去的工作经历当中的成长。比如说你学会了一个新的技术点,你要知道你这个学会的新技术,对项目和公司的意义是什么。比如现在非常火的 React Hooks、前端可视化、微前端这些比较新的概念。对你的项目有什么意义?有哪些价值?然后比如说你作为一个架构师,你涉及的某种框架,这个框架是怎么演变过来的,演变成为它的因素是什么?
好的方面可能是因为你项目的业务属性、业务的边界、面对客户类型是怎样的,还有可能是你团队的一些组成因素需要去做一个这样的架构演变,或者说遇到了之前的一些技术瓶颈需要做一些突破,然后诞生了一个新的架构,这是好的方面。 但很多情况下会有其他的不好的因素,比如说你是完全盲目的、基于个人的热情,看到某个新技术就想去尝试一下,就盲目的去调整;或者说看到某个大厂,比如 Facebook、Google、阿里巴巴这样的公司,他们发布某一个新的架构,或者说某某人做了一些分享,他们的架构是怎样的优秀。然后想要去去模仿他们,或者在自己或别人负责的老项目中有一些技术债,需要你把它清掉,这些都是很不好的一些方向。
1.6 XMind项目分析
再来说我在 XMind 的第一个项目,我是负责重做了 Outliner 的大纲模式。先说结果吧,经过我的努力后,其他的同事可以无痛切入(下文解释)。说下项目的背景,首先大纲模式在之前的版本上,无论从代码层面还是体验层面都有很大的问题,基本上可能很难用或者说很不好用,维护成本很高。而我扮演的角色就是要重新设计这个模式的技术架构,包括重新梳理、编写业务代码。而我做的事情,就是使用 ECS 架构对大纲模式进行重构。 ECS 架构一般应用在游戏中。但我想要在外部领域去探索一下,当然我对 ECS 架构是有一定的了解的。探索之后发现,能够以此为契机在这里尝试一下。
在我完成了架构的开发以后,我的一个同事需要在我的大纲模式里加一个功能。他在我并不知晓、且没有帮助的情况下,完成了一个新的功能从 0 到开发上线。当时我在忙其他事情,我是不清楚的。最后是完美上线了。我设计的这个架构可以让大家的协同成本大大降低,是非常有价值的。
2.2 面试经历
然后讲讲我的淘系面试经历。我面试的时间比较长,经历了 6 轮面试。前面两轮主要就是一些技术摸底,或者是深入了解一些技术能力。第三面是我现在的主管面,主要考查我跟团队的适配度。第四面是来自其他团队的老大的一个交叉面试,最终面是 HRG 和我们大团队的 Leader,主要是价值观和潜力的考察。
2.3 入职感受
我入职之后印象比较深的就是我们的百年阿里,更深入的了解阿里巴巴集团以及背后的故事。阿里巴巴有一个特点就是师生文化,在我入职之前就会有一个师兄去联系你,在工作或生活上去帮助你。比如说我是外地来的,我就会得到他们的一些关心和帮助。还有我老板非常 Nice,跟对人,做对的事情,这是我入职以后感受比较深的事情。
2.4 候选人建议
如果想来阿里或淘系技术部,我有一些建议:
要保持对技术的敏感度和客观态度,这是非常重要的。比如说新技术出来了,可以关注,但不要盲目去追捧。比如说最近 Facebook 新出来的 Recoil,还有很多来自其他大厂的新项目,可以关注,但不要盲目的追捧。你要一定要切实际的思考。新的东西它背后的场景和他作者或者他所属公司的场景是什么,跟自己的理解,或者说自己说处团队或公司的差别是什么,一定要思考这中间的一些区别,不能盲目的跟从。要切实际的去思考它背后的场景,未来能在你负责的项目中产生多大的价值,而不是凭空的去想象。
要不断的积累除技术以外的项目经验,除了技术以外,可能是 PM、测试、或者其他的团队成员角色。比如说我们在淘系技术团队,就经常要跟其他团队成员去沟通的。因为你的技术必须要基于业务场景来开发,而不会是盲目的埋头造火箭,这样肯定是需要更多的沟通,更多的会议。或者说对一些项目经历的整理,能不能更简洁直观,这就需要低成本且高效的沟通方式。因为我认为市场上从来不缺技术厉害的人,而这些软实力反却是你脱颖而出的一个亮点。就像刚刚上面说的校招看潜力,社招看价值。可能刚从学校出来不会有多么厉害的经验,更多的是看重你的学习能力和发展潜力。社招的话可能是看中你能为团队带来多大的价值,这都是软实力的体现。
三.书籍推荐
推荐两本书,当然可能就是跟我们全场有比较大的一个出入了,第一本书叫《贝叶斯思维》,我并不是科班出身的,我大学专业是数学。我觉得贝叶斯思维是一个非常好、能够带给我们在开发或者说思考问题上的一个更好的思维逻辑方式。统计方法能够让我们去面对一个问题的解耦、需求的解耦,去整理思路是非常好的一个方法。而且能就像说我可以理解什么叫先验概率、后验概率。 另外一本我推荐《为什么》,这本其实我自己还没有看完,但是我觉得非常价值。它是一本融合了非常多学科,以从生物的生物学到哲学到计算机科学到做人工智能,都包括包含了一个跨学科的领域,它也是锻炼我们的思维方式的。虽然我现在还没看完,但我觉得这本书非常优秀。
最后 需要这些面试资料的,可以关注公众号 清风酔 领取
有疑问加站长微信联系(非本文作者)