0x00 前言
在交流群结识大佬木东居士,后来被约稿讲讲面试经验,开始觉得自己能力不足,工作年限也太短,后来下定决心通过输出的方式倒逼成长,也就欣然接受。不过思前想后还是希望分享不是充斥着知识点和面试题,一来每个人的成长路径和项目大不相同,二来按照规定面试题和面试内容也不能对外输出,所以是面试心得夹杂着成长过程中的思考。
简单自我介绍:数据挖掘小白,自动化专业背景,焊过电路板,写过机器人代码(还下过工地),做过Java服务端,有离线数仓和实时项目经验,目前主要做用户画像和转化预估模型。
0x01 数据之路
入门
回顾自己的数据从业之路,是从后端项目中使用大量大数据组件开始的。后来自己意识到,随着数字化程度的完善,大数据知识肯定也是每个互联网从业者的必备知识,想到这里,我为什么不借此机会充实自己,转变为一个大数据工程师?
说干就干,毫不犹豫!开始购买并学习大数据系列书籍(除了计算机基础,不限于Java、Scala、JVM、并发编程等,还需要包括Hadoop系列、Spark系列、Kafka系列、分布式存储等知识,限于篇幅,书单不详细列了,会检索的同学很容易找到书单,知识梳理推荐repo
大数据成神之路:https://github.com/wangzhiwubigdata/God-Of-BigData),
不要脸也附上自己的,欢迎follow:https://github.com/YHGui
当然学习过程中会穿插的通过实战来加强实操能力,然而大部分的实战其实规避掉入门的坑,精华和知识都在书籍里,因此基础非常非常的重要。如果是在校学生,即使完全不做实战,也必须把基础知识完完全全掌握,书籍也不是看一遍就能就能通透的,在公司内部问“董西成老师的大数据系列书籍看了几遍?”,大家都会相视一笑。
除了coding能力,大数据工程师都必须要有一定的后端开发知识,不需要服务端的高并发经验,但是要能够快速架起一个后端项目。
总结下来:我相信数据从业之路的选择是明智且正确的,年轻可以折腾,但是不能瞎折腾。
职场
入职后开始参与离线数仓的搭建,入职前感觉数仓理论太枯燥,也没有实战环境,没有过多的学习,后来完全是看内部wiki学习的,当时推荐了参考书籍还有木东居士的博客系列,个人感觉数仓的知识不难,但是理论比较多,需要思考的设计也很多,工作之余也翻看了大部分的参考书籍(可以参考木东居士).毫不意外工作初期做了大量的数据治理、回溯的工作,当然后来在团队中踏实肯干,相继就会开始参与和负责更多的工作,包括
参与开源BI工具Superset(加入字节后,我发现内部BI工具Aeolus基本是在模仿Superset)的维护和二次开发
数据底层存储架构的学习和维护,当时我们选择的是百度开源的基于MPP的交互式SQL数据仓库Doris ,PB级别大数据查询,秒级/毫秒级查询
Spark Streaming实时项目等
机器学习等知识储备(同事告诉我,等数据建设完善后,算法才能有用武之地)
说起数据从业者,有时候经常会自嘲是SQL boy,我们是”SQL boy,SQL boy,SQL all the way“。诚然SQL是一门看似简单的语言,但是它却是处理大数据的最佳开发语言,而且我认识它也是一门成功的语言。我想每个从业者都熟悉这样一句话“可以用SQL解决,尽量用SQL解决”。我们可以拿它作为工具,来快速满足业务方的需求,实现高效产出。
如果不能高效产出,那么可能是你的任务需要优化,而这部分工作对于非数据开发工程师或者数据分析师来说不一定能胜任,往往这时候还需要通过代码的方式来优化,推荐美团技术博客的Spark任务优化指南基础篇和高级篇,同时学习Spark内部原理知识可以参考这个repo和《Spark SQL内核剖析》等书籍,同时优化也是面试中重要的组成部分,积累多个优化经验在面试过程中表现出来也是极为重要的。
很多时候也会被嘲笑为“提数员”,但是不能仅仅作为一个“提数员”。首先要做的是靠谱的完成业务方的需求(即使是提数),你的每次需求都是在积累周边同学的信任度,数据需求很重要的一环是自我校验和业务校验,同时在这个过程中还需要做大量的分析工作。你的能力得到大家的认可,做事十分靠谱,那么更多有挑战且有趣的工作就会找上你,这样也不会仅仅是个“提数员”。
为什么在团队里我能有很多机会接触各种类型的项目,还可以不断的学习?首先我会表明自己成长的诉求,其次做好自己的份内工作,即使工作是回溯数据。把工作抢在预定节点前完成,就可以有机会接触新的项目,如果暂时没有,那么也可以自己学习,等待下一个机遇,完善大数据项目中需要的技术栈。
总结
上述个人经验的分享看似和面试无关,实则和面试息息相关。跳槽再面试,刨除算法知识和手写代码能力,考察的就是项目经验,你的经验是不是团队所需要的,能不能一上来就干活,能不能有靠谱的产出。简而言之,如果跳槽之前发现之前的工作经验无法抽象成项目,或者陷入无尽的提数中,数仓经验零零散散,背调给你的评价极为不靠谱,那么成功跳槽的可能性极低。因此自己总结了几条经验共勉:
工作中态度积极,主动承担责任,积累口碑
梳理自己的知识体系,养成终身学习的习惯,工作之余不忘学习充电,完善自己的技术栈
以项目形式来规划自己的工作,换句话说,如何让你的工作成为下次跳槽时的亮点
0x02 面试
虽然我觉得上面讨论的更重要,但是完全不讲面试相关似乎有点过分。
算法
其实对字节跳动内部的算法考察并不像业界夸大的手写红黑树,了解过的有同学惊讶被面试官让写了个快排,架不住人妹子很漂亮可爱啊(不代表公司观点,求轻拍)。
同时我个人认为需要摆正一个心态,不对手写代码有抵触,不对算法题有情绪,能做到手写代码bug free,白板算法题刷了几百道,你写的bug应该会很少很多(说这话的我正在惭愧捂脸),而且这是一种考察机制,国外硅谷大厂都是这种模式,你只是在遵循一个游戏规则而已。书籍可以看《剑指offer》和《编程之美》等,然后就是自己刷题,注意coding style。罗列一些数据结构和常考算法点:
排序
二分法,看似简单,解题不少
分治法、遍历法
BFS
DFS
Two Pointers
动态规划DP
链表、栈、队列、树、优先队列,高级数据结构
大数据算法问题
项目经验
项目中用到的技术栈和知识点必然要十分熟悉,基础知识都是从项目核心技术栈提炼出来考察的。这一块其实前面已经讲了很多,工作是否可以按照项目制的形式开展,是否有亮点,这些是每天工作都在准备的。可以为公司带来什么经验/技术,才能让公司愿意支付更高的薪水招进来,我想这是每个公司都会考虑的。需要注意的技巧就是:
写了的一定要特别熟悉,不会的完全不写,不是自己做的也不写,突出重点
面试准备前给给自己提问题。假设你是面试官,你会提什么问题?是否能一一解答?
尝试写稿,有条理的叙述自己的项目,突出亮点和自己的工作
软技能
技术是一方面,但是软技能也越来越重要,不外乎以下几条:
工作态度、人生态度
沟通能力
抗压能力
颜值
0xFF 结语
希望自己的一些观点能对大家有帮助,也欢迎大家加入我们团队,搭建公司级画像,助力公司所有业务线,一起搞事情。
参考
https://tech.meituan.com/2016/04/29/spark-tuning-basic.html
https://tech.meituan.com/2016/05/12/spark-tuning-pro.html
https://github.com/JerryLead/SparkInternals
热门文章