前言
“程序员必备的面试技巧,就像是编写一段完美的代码一样重要。在面试战场上,我们需要像忍者一样灵活,像侦探一样聪明,还要像无敌铁金刚一样坚定。只有掌握了这些技巧,我们才能在面试的舞台上闪耀光芒,成为那个令HR们心动的程序猿!”
一、不同工程师的职责和技能要求
在不同层,对于工程师的职责、技能要求都会存在差异。
1、数仓开发工程师
根据企业的要求搭建数仓体系(DW),是企业所有级别决策的制定过程,基于分析性报告和决策支持目的,为需要业务智能的企业,提供指导业务流程赶紧、监视时间、成本、质量以及控制,为战略策略做数据支持。主要负责核心业务模块数据仓库的构建,对数据模型进行设计,ETL实施、ETL性能优化、ETL数据监控以及一系列技术问题的解决;构建用户主题、各业务线主题、推荐主题、BI门户系统,并对全产品线数据字典维护,提升数据资产质量。
需要熟悉的技能:
(1)需要深入理解常用的数据建模理论,独立把控数据仓库的各层级设计;
(2)熟练掌握Hive/SQL、Spark/Map-Reduce/MPI分布式计算框架;
(3)熟悉大数据的离线和实时处理,可以进行海量数据模型的设计、开发。
2、算法挖掘工程师
在大厂重创新、研究,在小厂重赋能、产品,有本质上的区别,也分很多种类型,包括搜索算法、导航算法、NLP、视觉算法、图像识别、自动驾驶、安全算法、通信算法等,需要掌握的技能差异性也很大,整体来看,有以下共性。
需要熟悉的技能:
(1)数据分析:通过编程语言进行科学分析,python、sql、spark,分布式计算框架Hadoop/Spark/Storm/ map-reduce/MPI;
(2)文献阅读:能够关注市面上的主流比赛算法应用,能够对学术、工业论坛、论文有非常多的积累;
(3)创新思维:场景迁移/举一反三能力,例如看到广告推荐中的根因定位,应该能马上切换到安全中的异常溯源;
(4)算法原理:机器学习、深度学习、强化学习、算法导论等;
(5)数学功底:扎实的数学功底,能够完成公式推导,并进行调优。
3、大数据平台开发工程师
大数据平台开发有两个方面,平台自研、应用开发,需要熟悉Web后端开发语言、大数据开源组件,至少精通掌握一种开发语言golang、php、java; 对开发框架的原理&源码都有一定的了解(如laravel)。
需要熟悉的技能:
(1)平台自研,属于研发级开发,基于Hadoop组件开发HBase、Hive、Avro、Zookeeper等,完成元数据系统、数据质量、数据采集、数据计算平台、任务调度平台等系统性建设;
(2)应用开发,在大数据平台Hadoop及Spark进行具体的应用开发,搭建数据报表平台、自助数据分析平台、数据地图、标签库等。
4、大数据前端开发工程师
给用户看到的都叫做前端,比如APP界面、Web 界面,与交互设计师、 视觉设计师协作,根据设计图,依据相关编程语言进行界面内容实现,把界面更好地呈现给用户;前端从业人员主要分布于我国中东、南部地区,其中北京的前端开发工程师最多,其次是深圳、上海、成都、杭州、广州、武汉、南京、长沙和西安。
需要熟悉的技能:
(1)熟悉W3C技术标准,精通HTML、Javascript、Ajax、DOM、HTML5、CSS3等前端开发技术;
(2)熟练掌握Vue、jequry、webpack等前端框架和相关技术并了解其实现原理,熟悉nginx、nodejs等webserver技术;
(3)熟悉前端性能分析和调优,并保证兼容性和执行效率,可编写复用的用户界面组件;
(4)掌握前端开发的安全风险和对策,良好的分析和解决问题的能力。
二、大数据技术架构图
可以参考一下大数据的技术架构:
在企业里面,如果按照数据流向来看,有一个主链路:
(1)系统对接:大数据平台开发工程师负责,对接各个业务系统,提供数据接入的能力;
(2)采集存储:数仓开发工程师,通过工具定期进行数据接入,并进行维度建模,抽象出DW层,建立指标;
(3)数据挖掘:算法挖掘工程师,结合数仓的底层模型表,dws表构建数据特征,挖掘数据的业务价值;
(4)数据呈现:大数据前端开发工程师,根据数据接口信息,在前端进行数据的可视化图表呈现,系统集成。
三、大数据相关的技术内容
由于数据中台的出现,组织架构和分工可能会有一定到差异,根据所需要做的内容和事情,所需要掌握的技能树是类似的,按照日常使用情况,可以归纳为以下几种:
1、关于python、sql、spark、hadoop和消息
综合对大数据开发过程的技术要求,比较主流的几个工具和技术:
(1)python:主要解决数据处理、分析、挖掘的内容;
(2)SQL:主要是在数仓存储、模型存储、指标接口开发过程中需要非常熟练;
(3)Spark:在算法挖掘、大批量数据计算、机器学习应用方面的应用;
(4)Hadoop神态:对数据存储、大数据平台开发都有非常强的要求,依赖HDFS、HIVE等特性;
(5)消息:数据接口开发,对于数据应用,和上层应用系统之间的互通有比较高的要求。
2、关于实时计算相关的技术栈
flink:在实时计算,处理批、流数据,实现秒级计算并赋能给业务系统的核心技术。flink:在实时计算,处理批、流数据,实现秒级计算并赋能给业务系统的核心技术。
四、大数据面试经验
目前市面上的大数据开发岗位主要分为两大方向:【大数据ETL开发】和【大数据分析】。
不同的岗位对技术要求的侧重点不一样,前者的市场岗位需求更大。
1、大数据开发岗位
岗位简介:
这个岗位的核心工作是负责将原始的数据源接入到大数据平台,然后用平台中的各种大数据组件对数据做各种数据的转换、清洗,然后有的就可以直接入库,用于各种BI系统的报表展现;而有的清洗后的数据则提供给大数据分析人员作为数据源,用于各种机器学习算法、人工智能模型等手段进行分析、挖掘,最终得出想要的结果。
(1)全局视角:一个好的大数据ETL开发,应该对你所在的大数据系统(或者叫大数据平台)有一个全局性的认识。这样,才清楚每一次代码开发,对应运行在这个系统的哪个位置,会与哪些模块交互、模块间的兼容性如何、上下游的数据处理链路是怎么样的。任何一个大数据系统它都是有套路的,都可以将其拆解为3大部分:数据源接入模块、数据计算模块、结果存储模块。
(2)局部思维:在写代码开发具体的功能的时候,是否想过为什么要用这个技术?使用这个技术的优劣势在哪?为什么不用另个一个呢?比如在对数据源接入时,很多时候都用kafka这个组件,来承接数据的落地,那为什么会选这个组件?都知道它快,为什么快,是什么原理支撑它快的,数据结构?通信原理?等等。
(3)业务理解能力:所有的开发,目的都是完成业务需求,那么对业务数据的理解能力就显得特别重要。比如在数据处理过程中常常遇到的效率优化问题,用计算引擎对数据计算时出现分区之间数据不平衡问题(也叫数据倾斜)如何解决?这个时候其实需要对业务有比较深的理解才可以,不是单纯的技术问题能解决的,如果要平衡新的分区,就要基于当前业务要求作出新的调整。
(4)基础能力:这里指的是计算机基础,编程语言基础。任何一个坚实稳定的软件工程都需要一个牢靠的地基支撑。这个也是每次面试的必考察项。比如:JVM原理、常用容器类型、常用数据结构与算法、网络IO、计算机组成等等。
2、大数据分析岗位
岗位简介:
这个岗位跟上一个岗位相比,从理论上来说应该是要少很多的,但是一些注重算法的公司在这个岗位上的人员投入比例却非常的大。
(1)理论知识:
一是基础数学统计知识,二是市场研究方法论。
基础数学统计知识,这里不过多的介绍。一方面因为只要大学里学过统计学,有一定的数理分析能力基本就能过关,另一方面也是因为我们有各种各样的计算器及计算软件可以辅佐。
具备良好的市场研究方法论,是一个优秀数据分析师的基础。因为作为一个数据分析师,当你面对海量的数据,只有快速找到并牵起那根线头,才能开展后续所有的工作。这个“找线头”的工作,往往需要数据分析师们通过充分的市场环境调查、市场基本情况调查、客户情况调查与竞争对手调查,进行多方面信息收集和调研分析。信息收集为市场调查提供数据,调研分析能够对数据的内在规律进行深入的剖析。
(2)常用分析工具:
1)数据库
我们可以将数据库简单理解为,企业为自己搭建的,根据数据结构组织、存储和管理数据的“仓库”。要进行数据分析时,我们需要将一些数据放入这个“仓库”中,根据我们的需求进行相应的处理。比如说人力资源部,将各个部门的员工当年固定工资、绩效奖金、年终奖,员工的工龄、岗级等数十项数据放入“仓库”,再结合正确的数据筛选和抽取、计算方法,就可以以此为基础制作一份企业的人力成本分析报告,供管理层参考与决策使用。
2)专业软件
数据分析师可使用的专业软件种类繁多,但最常用的其实就3种——SQL、BI和Python。这些软件想要用到精深,每一个都需要花大量的时间,下苦功夫,但如果只是做到熟练掌握基本功能,满足日常范围内的数据检索、调用和分析需求,难度则大为下降一一通过专业化、系统化的学习和培训即可。
3)日常办公软件
与数据分析师日常联系最密切相关的办公软件,就是Excel了——这也是使用者上限和下限差异巨大的软件,可能没有之一。在普通人手中,这就是个填表格的软件,但在高手手中,Excel甚至能做一些微型编程工作。对于数据分析师来说,熟练掌握Excel的函数和数据透视表功能,基本上已经能够完成日常大部分数据的基础处理工作了。
总结
对于大数据,随着技术的不断迭代,数字化的发展,对数据职能的区分度会越来越细分,持续保持对前沿知识的关注,通过和周边的大佬进行学习,结合场景进行深度应用,在数字化的道路上才能走的更长远。