面试官视角的 数据开发面经、岗位认知
五年前在牛客分享过数开方向的面经,这几年发内推贴的时候一直用面经贴收简历。但是毕竟都五年了,旧的内容也没更新过,准备更新一篇,用新的内容收简历。
19年参加校招,到现在24年,正式工作也4年了,23年开始有面试权限,参与了两年实习和校招面试,现在再从面试官角度、工作几年的角度讲讲对数据岗的认识,回馈下牛客。
内容很长。一、三部分比较基础,第二部分是个人近两年面试的数据分析。如果只对数据开发常见的面试题感兴趣,可以直接看第四、五部分。第六部分是与面经完全无关的内容,只是一些感想。
1、面试流程 1.1 通常流程 1.2 美团流程 2、个人面试数据统计 2.1 基础数据 2.2 不通过理由分布 2.3 面试问题分布 3、如何准备简历 3.1 基本问题 3.2 组成部分及内容 3.3 一个例子 4、关于数据开发这个岗位 4.1 数据开发岗位类型 4.2 和数分、商分的异同 4.3 和后端开发有什么区别 5、常见面试问题 5.1 关于表述/表达能力 5.2 SQl 5.3 算法 5.4 计算机基础 5.5 大数据组件 5.6 数据仓库 5.7 项目/实习 5.8 扩展内容 6、杂谈 6.1 关于年龄危机 6.2 关于行业选择 6.3 关于职场政治 6.4 关于阅读 6.5 关于选择
1、面试流程
1.1 通常流程
【轮次】通常4轮以内。大部分的互联网公司研发岗,基本技术面都是2~3轮,通过后有hr面。部分表现得好会有交叉面、加面,如果不是因为被不同部门反复捞,确实是面的轮次越多最后offer越好。
【内容概况】通常考察计算机基础、项目、实习经历。
1.2 美团流程
【投递地址】 https://zhaopin.meituan.com/web/campus
【我的内推码】JTLaZhm (数据开发序列使用后直接进外卖数据组流程)
【志愿】可以填三个志愿。按顺序流转,优先志愿没被捞就会流转到下一个。你最想投的志愿一定放最前面,因为你也可以换位思考,作为面试官你肯定会认为一志愿是有最强意愿,二志愿、三志愿足够优秀肯定也会考虑。
【笔试】目前的规则是一定要做,不然简历捞不了。
【轮次】美团校招面试流程通常是两面技术一面hr,面得特别好会给加面,每个轮次推进是有时间限制的,现在一般是是3个工作日内要推进流程,所以目前不用担心通过了之后没推进进度。以后规则会不会变以校招官网为准。
【内容概况】和上面提的类似,校招主要考察的是基础和聪明程度,如果足够聪明,对这个岗位需要具备的技术栈完全不了解都没有关系;如果有很丰富的实习经历,也会额外考察对实习经历的思考、在实习中学到的内容,对于有实习经历的同学,我会要求高一些。
【其他常见问题】https://zhaopin.meituan.com/web/question/campus
【投递类型】目前校招主要以转正实习、应届校招为主,开启一般在2月底和7月底。美团不像字节招那么多日常实习。
2、个人面试数据统计
以下内容仅是我个人的面试数据统计,不是部门的,更不是整体的。
通过这里分享的样本不能窥见整个公司的情况;即便收集了更多样本,估算整体也会受到不同刚岗位序列、部门甚至面试官个人的喜好影响。相信面数据岗的各位都有这样的数据素养,能够理解这一点。所以数据只是给大家看看,不用带入太多,这不代表美团面试的整体情况,也无法做整体数据的推测。
2.1 基础数据
【通过率】:36%
(1)这份数据的分母仅是我这三批次面试的总量,不是我们组的;
(2)只是一面,不是所有面通过;
(3)虽然要求上秋招、实习标准是一样的,但事实上,秋招相较于校招会有更高的要求,这一阶段很多候选人已经具备了实习经历。
【强烈推荐比率】18% 分母是通过数,分子是强烈推荐数。强烈推荐意味着有可能参与到加面并获得一个更好的offer。
【学历分布】硕-93% 分母是全量面试数。
本科,从面过的本科同学以及观察到的本科面评,准备得不那么充分的比率更高。当然换位思考,我自己大三的时候应该也面不过大厂,那时候没怎么考虑职业发展,更多专注在课程、升学上。但仍然鼓励计划工作的本科同学投递,复习好计算机基础,毕竟主要能考察的就这个了,了解岗位相关专业知识算是锦上添花。
硕士,目前看求职最多的还是硕士同学,样本比较大,所以什么样的都有。而且相较于本科,当下更多的硕士会选择就业而不是升学,所以这天然会导致面试时偏好选择能来(选择就业)的人。
博士,确实有博士同学来面,不过做工程好像又有些大材小用。可能对口博士更适合底层组件、算法(比如调度)之类的数据方向。
【门头沟学院比率】13% 分母是全量面试数。
门头沟学院的同学一样会有表达不清楚的,一样也会有岗位专业知识不足的情况。但确实他们更自信。不过门头沟学院在哪呢,人人都可以是门头沟学院毕业吧。
2.2 不通过的理由分布
(1)内容听着像背的:当然了,八股的背也就背了,但最好还是结合自己所学,加入一些自己的理解。直接硬背的内容,听起来很生硬,稍微多问一点就会完全接不下去。
(2)沟通卡顿无逻辑:可能是本身沟通表达能力的欠缺;也有可能是本身所想的内容就很混乱,所以表达不清楚。不论是什么原因,只要有这种情况,面试官的体验就会很差。所以一知半解、完全不会的场景,就直接说不会;如果是自己了解的、自己写的项目,提前准备好,感觉需要组织语言时告诉面试官要想一想,再结构化地表达出来。
(3)算法未通过:一般是完全写不出来。首先考察的题目没有hard的,因为这个挂了的一般是简单级别的没写出来;其次算法内容基本是数据结构算法、离散数据学等课程上会学的,写不出来很可能是基础薄弱、编码能力薄弱。
(4)计算几基础欠缺:常见的计算机课程相关问题无法回答、编程语言相关简单的问题无法回答。
(5)数据组件了解较少:面试的岗位是数据开发,但是完全不了解数据生态。完全不了解数据生态且基础较差、人不足够聪明,不通过的概率就非常大。数据组件不一定需要清楚了解,
(6)对实习/项目欠缺思考:自己做的内容,没有细想过就写简历上,不能系统地讲述肯定是非常大的减分项;其次
(7)没想清楚面什么数据方向:决定了数分,就面数分,想去做平台开发,就面平台开发。如果都想尝试,就记住在面试的时候直接咬死说就想面这个方向,非常感兴趣,什么都想面,最后只会影响对你意愿的评估。
(8)作弊:现在大都远程面试,有多个设备也很正常。如果只有一个设备,就别乱切屏了,后台都能看到;有多个设备,从眼睛也能看出到底在看哪。如果你习惯在纸上写写画画,就先告诉你的面试官你正拿着纸笔。现在的面试模式确实不如线下面试来的坦诚。
2.3 面试问题分布
【算法】统计仅针对个人面试出的算法题。都是找的leetcode原题,不会出些奇怪的问题。我个人面试的时候,会提前问你擅长什么,因为大部分方向都有一些储备,所以统计结果表现出来也不是问固定某一方向问题。关于这些方向具体考察什么,第五部分会描述。这么看来确实树问的比较多,因为和树有关的算法、数据结构很多,可以考察搜索、递归等重要的点。
【课程】只有写了修读课程才会问。最常见的就是 数据结构与算法、计算机网络、操作系统。如果简历写了离散数学等和计算机、大数据相关的可成也可能被问。
【大数据组件】HDFS, Spark, Hive, Hadoop, HBase, Doris, Clickhouse, Flink。只要简历里面有写到这些,那大概率就会问到。问什么内容第五部分会做分析。
【编程语言】以Java为主。因为数据开发如果不做平台开发,对Java的考察不会特别深,除非简历上有大量项目经理。最频繁的问题是集合,内存、IO、反射、多线程、多态等。
【项目/实习】如果写了这些内容通常是会被问的,问的点无非是(1)过程中有什么难点、让结构化描述所做的内容;或是(2)根据经历衍生到计算机基础、组件基础的问题上。如果你能详细描述出对问题的思考、对解决方案的思考、扩展的技术解决方案肯定是非常加分。
3、如何准备简历
我没有太多地参考网上的书写简历的经验,但我认为写简历和描述其他事物应当是相通的。
简历描述的就是你自己,隐含着目的。写简历就是把自己讲清楚并达到你的目的,目的包括且不限于求得这份工作、引导面试官问你想被问的问题、展现你的长处。
3.1 基本问题
只是针对投互联网技术岗而言,
(1)长度,别太长了,但也不用严格按一页来整理;
(2)奖项,除非很大的奖,没必要写,一般不看;
(3)技能,和岗位没关系的、花里胡哨的别写;
(4)意向(文件名、求职意向),简历的文件名、简历里意向岗位的名字,一定是面试岗位的,别都不是面试岗位的,那肯定判定你也没什么意愿。不要嫌麻烦,每个方向准备一份简历,内容有所侧重。春招就有同学简历名字明明是NLP,结果来面数开,看到名字其实就不太想给面试机会。
(5)论文,因为面数据岗,和岗位有关系的才写;没有项目、实习时可以写。否则没太大必要,除非能很系统地展现和面试岗位有关的技能。
3.2 组成部分及内容
校招简历通常包括:
(1)教育经历。
(2)课程,如果没什么实习经历、项目经历,那也只有聊课程。虽然只用写课的名字,但是准备的内容就很多了,要考虑每个课程核心的知识点、常见的被问到的问题。
(3)技能,如果和课程重合就不用提;如果没有把握也不要罗列,一被问就露馅。技能应该是你熟悉的且有意愿引导面试官问你才写的内容。把要点写出来,例如你觉得Spark调优有经验,或者背得不错,就写Spark xxx调优,解决xxx类型问题;觉得OLAP很熟,Doris 前缀索引、BEFE...,具体的、希望面试官问的、即便扩展下去也能答上的,就细写。
(4)项目经历,没有实习经历的时候,好好整理项目经历。首先要结构化的将项目描述出来,不是记流水账,最简单的可以按STAR来写,背景、目标、行动、结果。其次是考虑项目和你面试的岗位的关系是什么,有关系,就详细描述和岗位相关的内容;没有太强关系,就设法在项目描述中展示你的计算机基础、数据素养。
(5)实习经历,有实习经历则详写这部分,同时要写好才有用,否则也可能起负面效果。和项目经历一样,首先要做到的是能清楚地表述,实习做了什么内容,内容的背景是什么,为什么要做;是怎么做的;取得了什么产出。其次是你在过程中的工作、收获是什么。再次是在实习过程中蕴含计算机基础、数据基础展现,刻意引导面试官问这些关键点;最后如果这项工作具有挑战性,将其明确表述在文本中并在面试过程中提及。
不论是项目经历还是实习,都需要把握细节,写上去的内容,就要准备好被问到。不熟悉的、别人做的,除非了解得很清楚、影响说明完整性,或者考虑好了被问到直接说不会,最好就别写。论文在3.2没有细说了,因为毕竟也不是算法岗,如果写了其要点也是讲清楚、突出个人解决问题能力、计算机及数据基础。
3.3 一个例子
下面是找的一位来这实习同学的简历,这是他来这之前的简历。整体结构是不错的,需要强调的方面、先后的顺序这么写没有太大问题。
(1)教育经历简单写写,所学的课程有把握的可以写写。其他的和教育经历有关的,其实不用写太多了,学校里的奖项之类的内容对技术面没太大帮助。
(2)实习经历,重点写一些经历的项目、需求,体现项目、需求的全貌、难点、以及自身学习到的内容或思考,同时融合着把技术架构写出来。不用像下面这样罗列。如果确实做的都是打杂的工作,那也观察观察实习时身旁的人都做什么,包装一下自己的工作,把事情讲清楚,也是可以的。
(3)项目经历,要求和实习经历一样,事情要描述清楚。如果写了实习还写项目经历,那可以考虑有不同的侧重点,凸显不同的和面试岗位有关的能力。
(4)专业技能,如果能融到实习、项目里,可以不写。写了,应当是有目的,比如下面这种,展示所学技能,引导面试官向这些方面提问。同时要注意每个方向可能被问的问题,不要局限于简历上写的内容,可以提前准备准备,这些技能方向扩展出去还可能有什么问题,可以借助大模型辅助你扩展这些内容。
准备简历也不一定都按照上面写的内容整理,最重要的是这份简历传递什么,例如自身具备的技能、自身的写作能力、思考和潜力。
4、关于数据开发这个岗位
很多时候,面试的第一个问题是如何理解数据开发这个岗位。
这是一个内涵很多的问题,可以反映几个内容:
(1)你对工作内容的理解;
(2)你是否对工作内容感兴趣;
(3)你是否真的有意愿从事这项工作。
对于这个问题怎么回答,如果你核心目标就是取得这个offer,当然得表现出足够的兴趣;然后,至少了解岗位需要具备的技能、了解岗位具体做什么,这些都在招聘的JD里会写,可以很容易获取到这些信息。当都能很好回答时,就表现出了你的态度,给人留下一个好的映像。即便面试官不问这个问题,也可以在自我介绍里谈你的理解,需要具备的技术栈、需要了解的知识点,这时候就可以引导面试到你自己熟悉的领域,同时给人留下一个意愿强烈的印象。
这里有个简要的表格,要看详细异同需要看4.1-4.3。通用的计算机基础技能就没写。
类型 | 工作内容 | 技能 |
数据开发 | 面向业务建设数据仓库并对外提供数据服务。 | Spark、Java、Hadoop、Hive、Flink、建模理论等 |
数据平台开发 | 数据组件、基础数据平台建设、运维、个性化定制。 | Java、Hadoop,各种大数据组件(Spark\Flink\Hive\OLAP\湖) |
数据科学 | 挖掘数据价值并在业务场景落地,将分析方法封装并对外提供服务 | 数学、SQL、Python、基础的编码能力、算法 |
数据分析 | 报告、汇报、分析文档撰写,挖掘数据的业务价值,提供策略导向。 | 数学、SQL、Python、较好的问题分析能力 |
后端开发 | 面向功能的模块、接口实现。 | 编程语言(Java、C++、Go)、数据库、设计模式 |
4.1 类型、工作内容及技能
根据招聘情况、实际的经历,其实主要分为两类,一类是偏向业务的数据开发,一类是偏向基础平台的数据开发。偏向业务的数据开发就是很多人印象中主要写sql的方向;偏向基础平台的则主要维护数据平台,和大数据生态组件关系更紧密,做一些组件的优化、组织内的组件适配、组织内的数据中台建设。
- 数据开发
工作内容和技能是粘的美团的数据开发JD,但其他互联网公司的这个岗位基本做的事情也主要是这些。简短地说,
【工作内容】面向业务建设数据仓库,
(1)收集各种来源数据,
(2)将这些数据进行规范与整序,
(3)加工这些数据成标准的数据,
(4)提供数据表、工具、服务对外提供,支撑搜推广各种算法特征加工、业务运营分析、营销投放动作。
【技能】数据加工的一整条链路,从数据收集-数据存储-计算引擎-OLAP/数据服务,涉及到的技术点非常多。我不认为我已经完全掌握,这几年看的内容主要整理在 https://www.jianshu.com/u/d0b810cc4b2e这里。比较重要的是Spark、Java、Hadoop、Hive、Flink、建模理论;可以额外看的,包括HBase、ES、Kafka、各种OLAP(Kylin、Doris、Clickhouse)、Hudi/Iceberg、数据治理。
从上面的描述看,sql肯定也是一部分,但不是这个岗位的全部,要做好数据开发需要掌握的技能也会很多。
如果时间有限,可以看看上面的简书链接,搜一下各个方向的知识点;或者看看林子雨老师这本书,算是比较贴近业界实际技能的教材。 https://book.douban.com/subject/27606713/
工作内容
1.数据仓库的建设、组织和管理,沉淀数据资产;
2.数据建设过程的各项工具研发,如数据安全、数据质量、数据开发的工具链等;
3.数据应用的研发,如商业智能、挖掘、分析报告、数据可视化等;
4.其他服务于业务各环节的数据运营工作。
技能要求
1.计算机、信息技术相关专业本科及以上学历,对数据技术感兴趣;
2.熟练掌握至少一种编程语言(包括但不限于Python、Java、C++等),熟练掌握算法数据结构,有编程实践经验;
3.掌握数据库基本原理和知识,熟练使用SQL。
具备以下经验者优先:
1.具备相关行业互联网公司核心项目实习经验;
2.发表过相关技术方向国际顶会或核心期刊一作论文;
3.对大型开源软件项目有核心开发贡献;
4.熟悉大数据技术(Hadoop、Spark、Storm等)。
- 数据平台开发
各种公司里要做数据建设、分析人员要查询数据、算法要拿数据训模型,离不开数据组件的搭建与建设。没有数据存储、没有计算引擎、没有各种数据组件,也谈不上数据建设、数据服务、数据分析。
下面这段工作内容也是在网上找的JD里的描述,可能是腾讯的。
【工作内容】
(1)一方面是大数据组件的部署与运维,存储的HDFS、计算引擎Spark、Flink、OLAP、数据间导入组件都需要部署与维护;
(2)另外是对开源组件在公司内运用进行适配,进行个性化优化、深度定制。像字节应该就对clickhouse有深度的定制,这应该也是数据平台开发会做的;很多公司做了Spark的rss服务,也是平台开发额度定制工作;
(3)还有就是大数据组件对外服务的平台,部署后需要对外服务,建设查询、开发平台。
【技能】
更侧重工程能力,同时也需要对各种组件有更深入的了解。如果有开源组件的贡献经历肯定是非常加分。即便没有,可以看看别人怎么理解各数据组件核心内容,有时间看看最核心模块的源码解析应该也很有帮助。如果对写后端代码比较感兴趣,对数据组件比较感兴趣,这应该是个不错的方向。
不论是做数据平台开发还是数据开发,应该熟悉两者所具备的技能。做应用熟悉底层组件,做底层组件熟悉应用方法,相互之间的联系紧密;不论是数据加工的技能还是数据组件后端的技能,熟悉之后,对专进某一方向会有帮助。
工作内容
1. 负责基础数据平台,基于Hadoop/Hive/Tez/Flink/HBase/ClickHouse等开源组件的架构设计与实现,满足基础平台 批量/交互式/流式/复杂 等各种计算存储场景的功能性/非功能性需求;有数据同步datax/canal/debezium经验优化。
2. 负责数据开发平台,数据治理、数据门户等功能工具系统的设计与实现;
3. 大数据相关业务应用场景的,大数据平台相关技术方案设计与项目支持;
4. 保障上述大数据平台相关系统的可用性、容量、性能、安全等运营指标,确保系统持续稳定、高效运行;深入理解上述大数据平台组件/系统,及熟悉其相关依赖组件/系统工作原理(如Linux,Docker,MySQL,JVM等),高效调优排障;
- 数据科学开发
数据科学岗很多时候是分到数据分析类,只是这个方向美团今年有招而且归到数据开发里。如果去面试了,了解好所在部门具体的工作方向,支持的是谁,分析结果是否有影响力,和数据分析、其他公司数据科学岗的区别。
只从数据科学角度讲,结合下面JD写的工作内容描述中的几点,可以简单地说是通过数据科学方法挖掘数据价值并在业务场景落地,或是将数据科学方法封装在数据平台能力中对外提供服务。 因果推断这个方向应该有很多论文,按JD描述是会有一些探索,在中国公司里更多的应该还是要支撑业务,服务于业务分析,不会是纯科学研究。
技能上,数据科学除了计算机基础、数据基础肯定更加看重数学基础。下文找到的JD内容也提到了很多关于因果推断、AB实验的内容。此外机器学习、各种算法肯定也都需要了解一些。
工作内容
1.主导通过因果分析的方法,其中主要是A/B实验,来衡量业务和技术动作的增量价值,推动data first 的意识价值交付的工作机制的落地;
2.和各场景的业务紧密协同,深入理解业务和产品,将业务和产品的问题转化为数据和技术的问题,并且设计合理的解决方案;
3. 通过主动的数据探索和挖掘来发现改进产品和业务的机会;
4.调研新的,适用于业务的因果推断、统计推断,异常检测以及其它数据科学的方法,并把这些方法应用到实际业务问题。
技能要求
1.本科及以上学历,在统计学、应用数学、因果推断领域的其中之一,有比较深入科研经历;
2.有比较强的调研能力,对sql、python等数据分析和数据科学实施的开发语言和工具有实践经验;
3.有较强的逻辑分析能力及沟通技巧,出色的团队协作能力;
4.具备以下经历者优先:
1) 在统计学领域内的权威期刊(JASA、JRSSB等)或顶级会议(IMS -China ICSP,IMS -NRC,STAT等)发表过文章;
2) 在各类国际的计算机编程大赛获得优异成绩;
3) 组织或深度参与过AB实验设计。
4.2 和数分/商分有什么区别
2.2里统计的不通过理由,很多情况下不通过是因为没想清楚具体要做什么;看了4.1的分析之后应该有一个初步的认识,数据开发各个方向基本是做什么。
【不同点】
一是工作内容上,数据开发肯定会更多涉及写代码的工作,建设数据工具、提供数据服务、数据建模,需要编写代码完成开发和建设,保障数据流高效、高质量;数据分析也会写代码,但会有更多的报告、汇报、分析文档撰写的工作,重要的是挖掘数据中的价值,提出意见对业务、经营、功能产生影响。
二是技能要求上,数据开发会要求计算机基础、编程语言、数据建模、数据组件有掌握;数据分析可能对工程相关的考察相对弱一些,会更注重数学、算法的考察,同时更加注重逻辑能力、分析框架。
【相同点】
至少国内的大部分公司内,是都需要寻求业务价值,哪怕是做基础组件肯定业需要支撑业务的数据团队发挥数据价值,数据分析就更需要挖掘数据价值,例如美团的商分,他们分析结果通常比较有影响力,服务的用户很多时候是决策者,分析的对象是整个公司运营产生的各种数据,产出的内容是分析报告,产生的影响是公司在行动上的策略,会有较大影响;
技能上,两个方向都需要有一定的数据素养,有基本的逻辑和分析数据问题的能力。
这两个方向区别还是较大,选择哪一种更多是自己的考量,没有优劣之说,优先选自己感兴趣的。面试的时候有所侧重,如果都感兴趣,可以实习的时候多做些尝试。
4.3 和后端有什么区别
技能上,数据开发在具备后端技能的同时,需要具备数据技能。数据开发对后端技能要求没有后端研发要求高,有很多组件是能使用、掌握基本原理即可。
工作内容上,后端更多实现功能、交互接口,很多时候功能是直接面向各端用户的;数据开发也会有数据系统功能开发,但很多时候功能是面向内部用户,某种意义上压力会小一些。面对的挑战两个方向也不一样,数据开发遇到的挑战可能与海量数据、数据结构、数据质量有关,后端开发可能会面临高并发、高复杂系统等问题,两者都会面临的挑战是复杂业务抽象。
选择上,后端需求一般比数据大,可以走的方向可能也多一些,但根本技能上两者有相通的地方。仍然推荐遵循个人兴趣选择,只有个人感兴趣的才是最优的。
5、常见面试问题
以下的内容只是可能会考察的点,不一定是遇上的所有面试官都会考虑的点。
这几年也看了一些技术书,内容都整理在简书上,记得比较简单,主要方便自己看。但是也可以参考,数据方向大概需要掌握哪些内容。https://www.jianshu.com/u/d0b810cc4b2e
5.1 关于表述/表达能力
第一部分讲的不是问题,是一些面试时基本的点。
【自信】
当你自信地表达出所学、所会的内容,基本已经通过一半。
自信来自于哪里?一是来自基础;二是已有的经历;三是刻意练习。
1、基础扎实,自然就无所谓面试会问什么问题,什么都能答,那还能没自信,当然这一点就属于废话了,没什么参考价值。
2、经历丰富,当面试的足够多,大概率会问到什么问题都已经清楚。所以准备面试的时候不一定把最想去的就最先面了,从简单的开始,积累一些经验。
3、刻意练习,自己想表述的内容,多加练习,在面试前心理已经有结构了面试时也不会慌。
【逻辑】
逻辑,这是个很难界定的概念,在诸多概念里最重要的是,逻辑能够通过话语揭示出一些荫蔽的内容。没有逻辑、混乱的描述很难揭示有用内容。
要让面试或者简历有逻辑,有很多方法,前面也提到过,包括STAR、5W2H、SMART等等,方法搜也能搜出来很多,借助一些现成的方法组织好语言、简历,能够更好揭示出所做的事、所具备的能力。
面对面试里一些突发的问题,没有提前结构化准备的,可以停下来想一想,考虑演绎推理或总分描述答案。
【诚实】
技术面不会的就直接说不会,正常的面试官不会为难人。如果有联想到相关的、熟悉的内容,可以讲一讲。
不要做的是在不会的问题上一直想,如果没能回想到答案,留下的映像会比较差。
5.2 SQL
数据开发都爱考察SQL,但是SQL会不会写并没有太大的区分度。但还是讲下SQL考察常见点:
(1)连接,考察对左右连接、内外连接的理解。
(2)关键字,GROUP BY、HAVING、DISTRIBUTE BY、CLUSTER BY。考察作用和原理。
(3)窗口函数,row_number() rank() dense_rank() lag() lead()。现在觉得考察这个确实有点问题,反正我自己每次写的时候我就查查怎么写,我也没背过。重点是在有复杂的数据操作时,能够想到这些窗口函数。
(4)行列转化,熟练运用CASE WHEN + GROUP BY,熟练运用EXPLODE() + LATERAL VIEW。 这其实也没啥好考的,每个人学学都能会的东西,没什么区分度。
(5)自定义UDF/UDTF/UDAF,如果面试官出了一个你感觉用常规语法写不出的,你可以考虑这个方向,一般不会故意这么问,他要是故意这么问,就想想这几类内嵌的函数都是干什么的,是否可以运用到你被问到的场景。
常见的问题是行列转换、连续登陆,所以着重考虑case when、join、group by计数或者窗口函数。
5.3 算法
工作过程中,面对真正困难的性能、优化问题时,对数据结构、算法的了解程度直接决定了能否解决这些问题。
1、推荐一个Github上的记录,可以按该记录系统练习。https://github.com/azl397985856/leetcode 出题的时候,通常也更偏好找和数据结构有关的问题。如果学数学,会出偏向数学的编程题目。如果没有时间,可以把这个github连接里的经典题目看一看,或者刷刷剑指offer。这里只简单摘一摘这个github链接里的要点,具体内容还是需要细看。
(1)链表,考虑它的操作方法,插入、删除、遍历。大多考察指针修改、合并。考虑头结点的设置、快慢指针、画图。
(2)树,考虑树的遍历,前中后序、广度深度。一些特殊的树结构,完全二叉树、二叉搜索树。递归。
(3)堆,考虑最大堆、最小堆特点,理解其构建特性,动态求极值。
(4)二分,提到搜索或者想到要用搜索,联想到二分。考虑边界。
(5)dp,状态、状态转移、递归。
(6)回溯,递归、剪枝、递归的终止状态。回溯一般是有比较结构化的写法。
还有一些其他的,前缀树、并查集、位运算,这些在上面的github链接里都有介绍。
2、先讲思路。面试的时候看完题,可以先和面试官描述你的思路。疫情已经改变了面试的方式,以前线下手撕代码操作的空间很大,手写的有执行不了的,面试官不一定能直接看出来,但现在依靠牛客或者线上的功能,执行不出来就是执行不出来。所以先讲思路,如果偏离得很远,面试官也会提醒你,另外如果真的没执行通过,面试官看你的思路、代码没太大问题一般也不会说判定算法这一环节有巨大问题。
3、注意代码风格。哪怕去看看别人整理的《代码整洁之道》内容,可以网上找找例子丰富的。https://www.jianshu.com/p/e4295dd69dba 这就像写作文时注重书面整洁一样。
做好2、3两点,即便最后没做出来,至少比闷头写了半天写不出来好很多。算法没做出来就查漏补缺,数据开发的算法一般不会特别困难。
5.4 计算机基础
这方面网上总结已经非常多了,重点是要有意识准备,并且对于常见的问题需要能够结合实际情况、自身经历作出解释,背下来八股只是基本要求,进一步解释才能体现对问题的理解。
考察的方向主要是计网、操作系统、数据结构和算法、数据库。
(1)计网,五层/七层结构,TCP\UDP\IP,挥手握手,常见状态码,是很高频的考察点。
(2)操作系统,线程、进程、通信,LRU/LFU,死锁相关问题比较常见。
比较全的问题总结:https://zhuanlan.zhihu.com/p/670022176
(3)数据库, mysql,索引、事务、b+\b\红黑,这些非常八股。
比较全的问题总结:https://cloud.tencent.com/developer/article/2075853
(4)数据结构和算法,这个方向把上面算法题刷一刷其实就不用太担心会答不上数据结构算法的问题。常见的能口头问的问题,排序的对比、不同类型树的特点、哈希冲突。找数据结构方面问题可以分方向去找,对哪一方面不熟悉,搜哪一方面面试题。
(5)编程语言,常见的问题通常和Java集合类、内存模型、多态、抽象类/接口、文件IO、多线程、框架(Spring)有关。
Java的面试题归纳非常多,稍微找一找就能找到很多https://blog.csdn.net/myydnz/article/details/131473266,有余力可以看看阿里巴巴Java开发手册,内容非常丰富。
八股背了再尽可能结合自己所学、所经历的思考下具体的应用场景。
5.5 大数据组件
大数据组件,在学校的经历中确实能接触到的机会比较少,所以这部分如果不了解,可以多准备计算机基础、算法、SQL。如果希望对大数据的基础有初步了解,除了前面推荐的《大数据技术原理与应用》https://book.douban.com/subject/27606713/,还可以看下谷歌的三篇论文概述https://blog.csdn.net/u011510825/article/details/122816587,有余力可以看原文:
《The Google File System》 https://pdos.csail.mit.edu/6.824/papers/gfs.pdf
《MapReduce: Simplified Data Processing on Large Clusters》 https://research.Google.com/archive/mapreduce-osdi04.pdf
《Bigtable: A Distributed Storage System for Structured Data》https://static.googleusercontent.com/media/research.google.com/zh-CN//archive/bigtable-osdi06.pdf
如果已经有实习经历了,这部分肯定会被问到。
(1)Spark,
- API抽象,DataFrame Dataset上的常见操作;
- 执行计划,逻辑计划、物理计划、访问者模式;
- RDD,弹性的含义、RDD特性、动作和转换原理及常见的算子;https://www.cnblogs.com/xuziyu/p/10857937.html
- Spark提交任务过程、运行任务过程、DAG。https://blog.csdn.net/weixin_42011858/article/details/129516511
- 常见Spark任务性能问题及调优方式,结合SparkSQL中的算子、stage思考,另外可以找下网上介绍SparkUI的内容看下。https://tech.meituan.com/2016/04/29/spark-tuning-basic.html、https://tech.meituan.com/2016/05/12/spark-tuning-pro.html
以上都是比较常见的问题。
一些常见面试题总结,里面有的是确实常问,有的需要有实际经历才会有深入认识,找常见题目时按上面几个方向去找,没找到答案的,拿大模型扩展下。https://cloud.tencent.com/developer/article/2130989 、https://zhuanlan.zhihu.com/p/679253575、 https://www.jianshu.com/nb/47688853、
有余力可以看看源码,Spark源码注释比较完善。比如.sql()点下去,可以看到背的八股里的执行计划如何转化;map、reduce、count等常见算子点下去,对API抽象、算子设计都会有更深入理解。
(2)Hive,
- 存储和计算,一定注意它并不自己存储数据,计算借助MR实现。Hive的元数据(如表的定义等)本质上是Hadoop的目录文件,达到元数据与数据存储分离的目的。
- 算子,常考察的是Hive比较有特点的算子,Sort By 、Distribute By、Map join;
- 列式存储,Hive底层的列式存储结构。https://cloud.tencent.com/developer/article/1757868
- 执行过程,HiveSQL转换成MR的过程。建议先看SparkSQL转换成执行计划的过程,现在Hive用的相对少。https://blog.51cto.com/u_14048416/2342658
- 调优,Map端、Reduce端、shuffle、combiner、小文件调整。
- MR过程,很多人都背过,我也背过,但最重要的是了解MR的思想,有余力则看下Google的MR论文。
常见面试题目,https://blog.csdn.net/m0_55834564/article/details/124255992,或者按上面几个方向找下去。
(3)HDFS、Yarn,https://www.cnblogs.com/si-137/p/13289673.html、 https://www.cnblogs.com/chang09/p/16419483.html 、https://www.jianshu.com/p/6ecfc8c05f31 涵盖了大部分,但是启动方法、配置方法,如果不是找平台开发的岗,这些不用看,主要关注其工作原理、小文件问题、namenode/datanode相关的内容。
(4)Flink,
- 内部组件结构,JobManager ResourceManager TaskManager Dispatch,怎么交互任务如何提交;事件时间处理,水位线的定义;状态管理、状态后端;checkpoints、savepoints。
- Datastream,常见的Datasteam,keyed、connected、joined;
- 时间相关操作,如何生成水位线;processFunction;触发器;窗口算子,窗口中如何聚合、如何根据水位触发;流之间join;迟到数据测流输出。
- 状态,流式操作中如何保持之前发生的一些计算的结果,常见的状态算子。端到端一致性。
流式计算,有些概念比较难理解,实际用过后才理解。比如水位,是一行数据的时间标识,虽然看名字是个形象比喻,但是不看到真正地任务还是很抽象:在一个流式处理的源头,一直有一个水位下发器,标识了每条数据的水位,这个水位是可以自定义的,如现在是12点,来了一条数据,可以设置这条数据水位是12点,也可以是11点30,作用就是下游的各种和时间有关的算子,基于这个水位触发计算逻辑,比如做一个窗口聚合设置时间后不会立刻执行里面的操作,为了等待数据到齐,会等各个分区里水位涨到一定时间后才触发。
比较全的问题总结:https://cloud.tencent.com/developer/article/2212524 、https://blog.csdn.net/weixin_41767872/article/details/139074131 、 https://www.jianshu.com/nb/51206051
(5)HBase,
- 结构,表、列族、行、行键、Region;
- HFile、KeyValue、WAL、HLog、回放;
- 读写过程;
- 实际适用的场景。
比较全的问题总结:https://zhuanlan.zhihu.com/p/664225235、https://blog.csdn.net/xdx_dili/article/details/132673089
(6)OLAP相关,如果没实习经历,接触OLAP的可能性比较小。只是校招面试,可以多了解下OLAP和OLTP区别,为什么OLAP效率比关系型数据库高得多。如果已经有实习经历了,就结合经历谈一下认识。下面列的比较基础,不一定全,不了解OLAP可以看下官网的简介,有个初步映像。
- Clickhouse,核心特性,列式存储、向量化计算、表引擎、数据分片;MergeTree,存储结构、索引结构;数据分片、副本。
- Doris,https://doris.apache.org/zh-CN/docs/get-starting/what-is-apache-doris
- Kylin,https://kylin.apache.org/cn/
(7)一些比较新的大数据组件,数据湖Hudi、Iceberg、Paimon;数据编排Alluxio;内存计算Ignite,如果有了解肯定也对面试有帮助。
以上的很多内容只提了考察方向,没有答案,如果找不到答案,建议用大模型扩展。
5.6 数据仓库
回答数据仓库相关的问题前,先想下数据仓库是什么。它通常是面向业务的、经过整序的、高质量的数据集合,用于支撑业务决策、运营或算法优化。
因为要面向业务,要整序,要保障质量,所以数仓要划分主题。主题内部的数据是针对某个特定业务诉求或分析领域,有高内聚特性。同质的数据汇总在一起可以有效地保障其一致性、质量。同质的数据存放在一起,提升使用效率。
因为要保障数据质量,数据做了分层,公共逻辑下沉到底层,下游使用相同的上游加工逻辑从而获得一致的字段逻辑;在聚合层进行维度建模,实现指标、维度标准化,下游基于此进行加工保障指标一致性且能够获得较高的效率。
因为要对数据做整序、面向业务,所以有建模方法作为数据整序的基础方法论。常见的数仓建模是Kimball的维度建模和Inmon的实体建模。常见的针对维度建模的问题,维度建模过程,事实、维度、粒度的含义,快照,雪花和星形,一致性维度,总线矩阵,度量。常见的针对实体建模的问题,实体建模的流程(业务-领域-逻辑-物理),领域建模,范式。
很多问题并没有标准答案,核心是记住数仓的目标。这里写的七点目标来自Kimball的《数据仓库工具箱》1、方便地保存数据;2、数据一致性;3、适应变化;4、及时展现数据;5、信息安全;6、数据权威;7、支撑业务。
这七点可以与许多数仓问题产生关联,例如前面已经提到的主题、分层;没有提到的诸如缓慢变化、桥接维度等诸多数仓技术。最重要的是从目标出发回答数仓相关的问题,例如建模方法,并不存在好坏,核心是抽离出变与不变的内容,组织数据,适应变化,保持数据一致性,同时提升扩展性;数据分层或者不分层,也不是绝对的,如果性能足够、能够满足及时展现数据的诉求、质量能够保障,那也无所谓分层不分层;数仓中的诸多技术,各种类型的事实表,很多时候并不是因为技术原因选择事实表建设类型而是为了支撑业务而选择。
5.7 项目/实习
需要注意的点在第3部分已经讲过,项目、实习会问到的问题主要围绕所具备的技能、收获、难点展开。可以提前总结好。
5.8 扩展内容
有很多开源的内容可以获取。
(1)公众号。各个公司的技术公众号,阿里云开发者、字节跳动技术团队、字节跳动数据平台、美团技术团队、网易数帆等。一些涉及数据技术的公众号,DataFunTalk、大数据文摘、InfoQ等。也有一些搬运别人文章的公众号。
(2)技术论坛。掘金、CSDN、博客园。
(3)会议论文。ICDE、SIGMOD、VLDB。
(4)GitHub。大数据组件很多是Apache项目,新的动态、讨论除了其官网文档外,还可以关注GitHub上开源项目里的讨论。另外Flink方面,每年阿里也搞FlinkForwardAsia,可以看看这个。
(5)行业报告。
6、杂谈
以上5点内容很多,基本涵盖了能分享的关于面试、数据开发岗位我了解的所有内容。最后还想基于浅薄的阅历说些别的内容,也许这是更重要的。
6.1 关于年龄危机
非彼无我,非我无所取。
在校招的面经分享里写年龄危机似乎不太合理,但这可以视作为下一部分进行的铺垫。这一部分写的也不是年龄危机的根因,只是一种对年龄危机的认识。不知道会不会有学马哲或者文科的同学找数开岗,如果看到了就当我是班门弄斧吧。
这里提的是一个普通打工人也能够理解的年龄危机视角,这是一种辩证的视角。开头的这句话,应该有很多种解释,这里以辩证的方式理解,如果没有对方,也就没有我;如果没有我,也就失去一切可以执取之物。类似地,新的总会成为旧的,旧的曾经是新的,没有新的也就没有旧的,没有旧的也就没有新的。哪怕只是针对一个个体,其内在应该也具有新的与旧的部分。新与旧总是斗争着的,新的方面由小变大,上升为支配的东西;旧的方面则由大变小,变成逐步归于灭亡的东西。
之于6.1这个问题,新的是什么,旧的是什么,是显而易见的。35之于人的寿命不是旧的,但之于某些行业却是旧的,也即新、旧是与外界环境有关、由外界环境定义的。在企业的新陈代谢中,新的逐渐取代了旧的,新的逐渐也会变成旧的,新与旧是斗争着的,新人便宜好用取代了roi低的老人、新人拥有高潜力看似有更多可能。但新的、旧的,他们其实是同一类事物,并没有本质的区别。
这样的认识,没有涉及到危机的本质,危机的本质可能与企业责任和价值观、社会偏见、法规缺失、人口结构、经济发展等诸多因素有关,这只是一种见解,那它究竟有什么用?当无法改变这些根本因素的情况下,
一方面,认识到新旧是统一的,在作为新的时,认识到新的总会成为旧的,早做打算,例如注重个人支出、杠杆,有规划地生活,发展更多能力曲线,在工作中利用好作为新的时的身份;
一方面,认识到新旧只是相对的,是环境定义了新旧。如果这个环境就是容不下相对旧的,难道没有一个可安身立命的环境将人作为新的接纳吗?也许这个能找到的新的环境在薪酬、在工作内容上比原来的环境更差,但提前可以有预期或提前有规划。曾经的环境受到诸多因素影响,容不下相对旧的,这并不是对个人的否定,而是一种畸形的风气,人总是可以作为新的,生活下去。
6.2 关于行业选择
来这实习的同学大部分选择了互联网,但也有最终没选互联网的。近年的形式也注定之前热门的行业可能没那么吃香,持续的降本增效、年龄危机、薪酬限制等,看似曾经好的行业现在也没那么好。虽然是三百六十行,行行出状元,但很多时候似乎选择行业就选择了一生,那到底应该怎么做行业选择。
和6.1类似,这里给的也不是答案,只从两点出发谈一些认识。一是周期,或是均值回归。二是心流,或是积极心理学。
周期,这是在数学、经济、投资中常出现的概念。这里借着霍华德的《周期》书中的概念做一些阐释。
周期有很多种,有基本面的,有心理的,和行业选择直接相关的是基本面周期,即经济周期、逆调节周期、企业盈利周期,当经济周期、企业盈利周期都很好的情况下,似乎每个行业都很好,都能赚钱;但当面临下行周期时,冲击便在所难免,可即便在下行周期中,企业盈利周期也有可能是向上的,例如temu走出的曲线就是逆势上升的。因此,做出选择的第一步就是初步判断究竟处于什么样的经济、行业周期位置,这会很难,只有通过客观数据(例如招录比、增长率等)和主观认识做衡量。
其次,心理周期,金融市场繁荣时,人们的风险偏好高,类似地,经济蓬勃发展,求职市场里,稳定的行业就并不怎么吃香,人们通常喜欢风险更大能赚大钱的行业。当周期下行,即便稳定行业已经卷得飞起,性价比已所剩无几,高风险行业的边际收益已经高得看不到边,但人们心里仍然偏好稳定。因此,看看现在人们的心理偏好究竟是什么,并不一定就要逆向选择,而是对作出选择后可能的收益有预期。
进一步地,结合周期的重要的两个特点,“不会相同只会相似、少走中间多走极端”,可以做进一步判断。有许多可参考的内容,发生在当下的事,虽然没有完全一样的事情发生,但在别的国家或别的时间里应该有类似的情况发生。周期像是钟摆,大部分时候不停留在极点,当一些事情去向极致时,一定会发生均值回归。结合以上内容,可以收获一些客观的对于环境的衡量。下面这部分是主观的衡量。
心流,这是一个心理学的概念。即在做事过程中有明确的目标、及时的反馈、持续不断地挑战性,人能够达到的一种忘我的状态,一种最优的体验。可能这更常出现在电子游戏中,最开始很菜,什么都打不过,但随着技能的提升,持续获得正反馈,人可能会达到一种沉迷忘我的状态,心流可能是快乐诸多形态中最常见的一种。
这个概念也常常、也需要出现在工作中,它甚至决定了究竟应该做什么。通常情况下,做一件事有两个维度的衡量,一是事情的难度,一是技能的熟练度,当两者匹配时,人就容易达到心流,而这两者不匹配时,做一件事就会感到无趣或有压力,技能的熟练度、事情的难度逐步提高,会使人持续地处于一种最优的体验中。这隐含的意思是心流随着成长给人带来快乐。到底什么样的行业、职业会带给个人这样的体验?应当是个人所感兴趣有志向从事的行业,这是在工作中获得快乐的基础,如果从根本上厌恶一些事情,那生活中的乐趣可能就此缺失了一大部分。选择喜欢的,为自己不断设立目标,提升自己的能力,去完成一些挑战,这不仅是个人成长事半功倍的路径,也是获得快乐、获得意义的重要路径。
因此,究竟选择去往哪个行业,建议是结合客观的环境与主观的兴趣而选择。这里是提供了一种方法,而不是一种判断。
6.3 关于职场政治
在未入职场时,对这个概念,也抱有一种厌恶、畏惧的心理。但人是社会的动物,人的存在因与他人、与世界有联系而得到确认,逃避终究不能解决问题,所以不如去认识,然后选择自己的态度。
政治究竟是什么,应该是有诸多定义。可能在政治课上我们都背过——经济基础决定上层建筑、政治是经济的集中体现,人是社会存在物,经济、社会最终会衍生出级别,政治就是各级别间的斗争,斗争的中心是获取权力从而表达符合自身利益的诉求。
这里面有一些要素同样可以类比到职场上,职场政治的基础是什么,可能是各个部门的效益、人的多少而能产生的影响。只要存在于职场环境下,人就会有类别的归属、会有自身诉求,不同类别的人之间必然会有交互,这种交互在激烈的情况下就表现为斗争。当斗争获得胜利时,这个人或这群人就容易获得更大的利益,更能实现自身的诉求。具体地理解一些现象,为什么管理者总想着扩张,因为人更多决定了上层权力的大小;为什么有的部门没太大话语权,因为其作为基础的作用本就不大;为什么部门之间会有斗争,因为不同的部门有不同的利益诉求,蛋糕一定时,别人分得多我就分的少。
一些常见的职场现象,也可以用政治学的概念去解释,例如,
为什么向上负责如此明显?因为职场中的权力结构与所处环境的权力结构有类似之处、职场中的人同样受社会观念影响。环境中权威以一种卡里斯玛式权威展现,集中力量办大事、快速迭代就需要一种垄断的权力能随时施行,在每一层级中都需要有这种力量能够快速响应,于此同时上级又决定着个人利益,诸多因素决定了上级的意见就是最高意见、业绩并不是个人利益的核心影响因素,唯向上负责现象一定会常常出现。
权力的来源是什么?是上级授予。
其合法性是什么?有明确的规则吗,其实更多是由上级考察而决定。
为什么靠汇总日报也能当管理者?因为基层掌握的信息永远比上层多,而上层为了稳固其治理地位一定需要事无巨细地了解基础信息,如果有信息收集不到就可能受到架空、权力的斗争就可能失败,所以很多人吐槽信息差,而信息差确实会成为管理的本钱。
前面讲的内容比较宏观,之于个人究竟应该怎么做。意识上,意识到世界是不公平的,公平很多时候只是一件工具,除非公平对某些人有利;意识到直属上级的重要性,这也是求职过程中需要重点关注的,你的面试官你是否喜欢,是否能让你尊重,面试也是选择未来上级的过程;意识到斗争是必然存在的;意识到政治与道德,就如马基雅维利所说的,可以没有必然联系。行动上,重视自身影响力的建设,通过意见的表达让自己更多被看见(当然这建立在能力基础上);与上级保持良好的关系,一方面是得有拿的出手的业绩,一方面是恭维,这里有段研究内容很有意思,“恭维效用呈现倒U型,随着恭维增加,效果会递减,但是至今仍然没发现让恭维无效的点在哪里。”;还有,解耦道德和职场行为,感兴趣也可以去看下面引用的这本书。
珍妮弗·查特曼(Jennifer Chatman)是加州大学伯克利分校教授,在一项尚未发表的研究中,她力图求证是否存在着某个点,超越这个点的恭维会变得无效。她认为,恭维的有效性曲线可能呈倒U形,随着恭维的增加,效果也增加到一个制高点,但超过了那个点之后,恭维就会被看作是曲意逢迎了。正如她所告诉我的,这样一个让恭维变得无效的点确实可能存在,但她的研究没有发现这个点。(《权利,为什么只为某些人拥有》)
如果仍觉得这些内容很抽象,可以看看小说,像《沧浪之水》,虽然这肯定不是官场的真实写照,但能让人理解很多职场政治的逻辑;也可以看看寓言,像《职场动物进化手册》,内容比较生动,这本寓言里把职场里的动物按照能力、服从性和政治意识三个方面划分,有能力、会服从但没有政治意识,就只能是无出头之日的“蠢驴“,当服从性、能力、政治意识均衡时,则会成为在任何环境下都会脱颖而出的"狗"。
6.4 关于阅读
有很多事情,比我们聪明许多的人已经为我们写下了答案。
当今,要获得一些信息,要了解一些知识已经比以前容易太多。各种短视频、长视频平台,各种内容平台有无数的整理好的的内容,想要了解一些东西只需要几分钟甚至几十秒就可以得到一个大概;大模型的出现更是极大加速了知识获取的速度,困难的书、困难的概念,大模型能很快为你解答。甚至现在写下的这篇内容也类似,是整理好的、他人经历的知识。
但真正的知识应当怎么获取?还是应当阅读。现在还没有机械飞升,意识尚不能模拟,虽然很期待有那天,可现在想要真正获取见解还需要阅读。《一块石头》,这个微电影https://www.bilibili.com/video/BV1zV4y117Rd 的主旨非常适用于这部分,“书就像石头,世上的石头千千万,只有投进你心里,才会荡起涟漪。”
之前内网有人发帖说为什么三十岁就不想活了,配了一堆B站博主吐槽人生不易、传播焦虑的截图,说自己是虚无主义者、存在主义者,但还是觉得人生艰难。在下面问他真的了解虚无主义吗,真理解“重复”吗,后来帖子删了。有很多不能理解的,甚至看上去是天大的事情,前人、比我们聪明百倍的人已经写下了答案,只是是否愿意去知道。除此之外,阅读更是一种永远向前的态度和途径,事物永远是发展的,向前是注定的,阅读是向前最简单的途经。
6.5 关于选择
这里的选择不是6.2所说的选择,但也可以说,上面所有内容都是选择。如果有学哲学的同学也找数据开发岗看到了这段,也当我是班门弄斧吧。
就像上一部分写的,自诩是存在主义者,但还能发“三十岁就不想活了”这种帖子。各种内容平台上,有诸如裁员、离职、“知道了很多道理还是过不好这一生”等各种焦虑内容的传播。
究其根本,是我们大部分人都没有思考过选择的意义。
可能就在求职、工作这一节点上,人对选择的感受特别明显,通俗地说“人生是旷野”在这时候会具象化。求职时,可以考虑各行各业,不一定局限在个人专业;想去到哪里,可以根据个人的意志去选择,所谓的找不到工作,是否定了很多选择可能后的局面。工作后,不再有求学时明确的目标,想学什么,想做什么,想成为什么,已不再有限制,一切都依赖于个人的选择。
但莫大的自由后,是否也导向焦虑?
海德格尔说生存即是能在,说人话大概是我们有很多的可能,只是我们实现了其中的某一些,就比如对这篇文章的读者而言,当下这个时间点,你可去考虑当数据开发,可以考虑当数据分析,可以考虑做后端开发,或者可以去打灰,可以送外卖,可以啃老休息着,可以gap去旅行,这都是可能的。但大部分人沉沦在固定的道路中,到了固定的时间,就做固定的事情,总之别人都是这么做的。时候未到,就放纵一下自己,追求感官的愉悦,每天熬夜刷刷视频,加个餐胡吃海塞下,看看内容平台上又传播了什么焦虑,沉沦在当下迷人眼的消遣,等时候到来时,许多可能性已经消失,传播的焦虑真的变成了现实。
这是我们的逃避。“结婚,你会后悔;不结婚,你也会后悔;无论结婚还是不结婚,你都会后悔。上吊,你会后悔;不上吊,你也会后悔;上吊或者不上吊,你都会后悔。真正的永恒不在非此即彼的后面,而是在它前面。”结果从不是重要的,重要的是结果之前的事物,我们在逃避这在它前面的事物。只要沉沦着,享受着感官的娱乐,不用思考自己到底是谁,每天让自己做一些重复的、分散注意力的事,似乎这就是生活。可是当想玩的游戏玩腻,视频刷到了三四点,那一刻是否会感觉到虚无,这样的正反馈并不是永恒的。我们以一种审美的态度,逃避着,就像唐璜一样夜夜当新郎,当一个姑娘腻了之后,就找新的取乐、轮作,这最终只会引向绝望,并没有实现一种超越。
为什么我们会逃避,可以从沉沦的角度理解,因为跟随着常人,跟随着日常,便可以苟且偷安,自我麻痹,不用思考自己到底是谁,“常人自以为生活得完满而又真实,根本无须乎现身在世并从源始现象那里获得理解。”;也可以从虚无的角度理解,“朝生暮死的人类,命运的不幸产儿,你们为什么一定要我说出那些你们最好不要听的话呢?对你们来说,最好的事情是永远达不到的:根本不要出生,不要存在,要归于无物;而次好的事则是早点去死。”我们拥有了极大的自由,可以做很多想做的事情,但所做的一切,带来的快乐似乎都是短暂的,似乎都没什么意义。人都会死,是不是不要想那么多,醉生梦死也挺好。而社会文化、形而上的理论也为我们提供了诸多确定性,到了时间就去工作,在工作中获得所谓的“成长”,工作几年就该结婚生子,成功的生活可以定义,甚至世界背后绝对的本质也可以揭示,这一切似乎不用思考,听听别人说的,按部就班地过也可以。
如何去逃脱这种绝望,前人给的答案是去选择,在选择中承担起责任,成为一个人。审美的生活,沉沦在感官的享受中,缺乏赋予生命存在的统一性。选择的瞬间,是持久承诺所承载的瞬间,这一时刻,分散的生命被聚集为一个整体,这是永恒的瞬间。当多年后再回想时,你不会为作出的选择后悔,因为每一次选择都是思想的汇聚,是你所意愿的,你承担起自己将何所是的责任。甚至在发现一切(比如获取一个好的offer、获得所谓的成长、走上一个社会公允的成功道路)似乎都没有意义,生活只是在一日日地重复,仍然以强者的悲观(虚无)主义去选择,去创造意义。存在不在于一劳永逸之中,而在于不断地成为他们自己之中。自我并不是一种潜在的、永恒的实体,而是一种有待完成的任务。
7、最后的
希望这篇内容对看到的同学都有帮助。大家能够稳定发挥,回答上面试问题,获得好的offer。
也欢迎数据方向以及其他方向的同学投递美团校招,美团的文档是较为完善的,对于校招成长比较友好;近年也比较重视校招,给校招预留的人员配额也比较足。
这几年春招、秋招都在牛客发帖,去年到家春招实习内推第4名,秋招内推第2名。不过没建什么群,没天天在各种软件上发,也没主动维护与内推人的联系,但还是有很多人用了这个内推码。所有想查进度的同学,所有在牛客或者其他平台的IM上联系过我的人,我都帮忙看了,也帮忙回复了。这里再发一遍【投递地址】 https://zhaopin.meituan.com/web/campus【内推码】JTLaZhm 开启校招后(24年是7.29)可进行投递,内推码应该是一直不会变,长期可用。
上面的两万字,不一定都正确,任何内容都应该经过自己的思考得到最终转化。这两万字也写给我,但还有很多还梳理、思考得不到位的,先凑合一下。
最后,如果你看完了这两万字,我想你至少已经比五年前写下第一篇面经时的我知道得更多,不论是数开面试会问什么还是其他的;那时候我还有很多东西不理解,所以有很多事情并没有做出最好的选择,但我不是个习惯于后悔的人。这最后是《论文与日记》里的一段话,虽然这本来是吐槽大一统哲学体系的,但坚持这样的观点,能够超越诸如“别人认为你该怎么样”、“环境不好过不下去”、“工作没有成长性”等诸多徒增焦虑、毫无意义的问题,
#面经##数据人的面试交流地##我的求职思考##秋招##24届软开秋招面试经验大赏#如果我发现了一个所谓的客观真理,或者如果我掌握了哲学家的体系,能够根据要求将其一一描述,指出每个循环中的不一致之处,那又有什么用呢?或者,提出一种关于国家的理论。把各个地方的所有碎片整合成一个整体,构建一个我自己也不居住、只是提供给别人的世界,这又有什么用呢?
我真正需要的是明确自己要做什么,而不是我必须知道什么。我要找到一个对我而言是真的真理,一个我愿为之生为之死的理念。