1、对于秋招的建议
秋招真是一路被刷到底,不想过多叙述失败经历,更多的是分享在秋招中提炼出来的学习能力和一些感悟。对于秋招的准备,首先需要明确自己想要从事的工程师岗位,在确定所从事工程师岗位的技术栈,不断聚焦去学习,学太多没用的东西既浪费时间也消耗精力。并且对于秋招的策略:
第一步:我认为在3月和四月,如果学习基础不错,直接去实习,无论能不能转正,对于后面的秋招都具有重大意义,
第二步:如果没有实习机会,我们就要面向简历复习,从基础知识点到项目细节,都必须不断深挖,还要对常规算法题的熟练掌握。
2、提炼学习方法论
秋招虽然没有拿到很好的offer,但是提炼出我的学习方法和学习能力,这才是最大的收获,所以我想跟大家分享一下学习心得,在不断积累中突破才能在技术能力中不断迭代,成为大数据领域的专家。
我把我的学习方法提炼为五个层次-三个阶段,在五个层级的基础之上,分三个阶段,对五个层次的知识逐步系统化,具体的学习内容和方法如下所示:
1)第一阶段
第一阶段的学习实操为主,建立具体的思维模型,不要钻牛角尖、基础的掌握以后,快速通过,不明白的后面的学习当中自然而然明白了。
① 第一层次:如果是科班,肯定学过计算组成原理、操作系统、计算机网络还有数据结构与算法吧,如果不是,那就去看一遍,不需要第一遍看的多懂,有个印象就行,对于计算机的基础架构和网络组成还有基础的数据结构具备一定的思维模型就够了。并且算法刷题是一个比较持久的过程,无论是刷剑指Offer或者力扣开始刷起来,为笔试和面试手撕算法做准备。
② 第二层次:就是学习Java学习,首先掌握那些关键字、封装、多态、继承、组合等的概念,对于Java每一个模块的知识都去实操一下,重要的敲代码,很多东西能懂就懂,不懂敲一下代码就过,后面自然会明白。并且尽可能的去熟悉一下JVM的基础内存结构和多线程的编程模型。
③ 第三层次:数据库的学习,我们需要学习典型的关系型数据库MySQL、非关系型数据库Redis,不需要对数据库深入的研究,在第一层次我们会安装,学会基础的DDL、DML语言操作,基础的SQL语句会编写即可。
④ 第四层次:就进入大数据的学习,从大数据采集层(Flume、Sqoop)、大数据存储层(Hive、Kafka、HDFS)、大数据计算层(MR、Spark、Flink)、还有调度组件Yarn和协调组件Zookeeper,不需要深入太多的原理,还是实操为主,学会安装、配置以及基础操作即可。
⑤ 第五层次:大数据项目,如果没有实习经历,还是需要自己做两个项目来支撑一下的,大数据里面最经典的两个项目就是数据仓库和推荐系统,可以尝试去看哔哩哔哩的视频是构建一下,如果时间不充裕,把视频看完,文档研究透,知道项目里的所有细节,也就算实操了这个项目。
2)第二阶段
第二阶段我们就要面向简历复习,抓住关键东西,不断深究原理,很多不明白的就要去不断研究视频和博客,这个阶段就是看的深度了。这里给大家安利TALKDATA(蚂蚁金服大数据开发工程师)整理的大数据和Java基础面经,非常实用有效,第二阶段的学习看他的面经即可,另外可以哔哩哔哩搜索关注TALKDATA。
① 第一层次:有了对计算机基础知识的基础模型和知识,我们就要去重点研究面试要问到的重点。计组的面试题几乎没有,更多的是计算机网络和操作系统,例如在操作系统中进程与线程的区别、虚拟内存的实现、分页分段的区别等;在计算机网络中网址解析过程、TCP三次握手和四次挥手的原因等都需要深入了解。再次重生以一遍,算法不能扔,要持续的去刷,去回顾以往刷的题。
② 第二层次:有了基础Java知识的学习,现在就需要针对面试重点就行学习,Java当中各个关键字的原理和区别(final、Static、interface、abstract)、Java面向对象的体现(多态、继承、封装)、Java集合(LinkedList和ArrayList、HashMap的原理)、以及以下基础方法的理解(equals、hashcode);另外这块根据面试重点去重点突破JVM、多线程的相关重点,在这里不再赘述。
③ 第三层次:数据库也是 需要深入原理的,例如MySQL的SQL执行顺序、索引结构、事务特性以及隔离级别等、Redis的基础数据结构原理、数据备份机制以及单线程的原因等都需要重点掌握。
④ 第四层次: 对于这块的大数据,我们需要重点掌握核心组件的核心原理,核心组件MR、Yarn、HDFS、HIVE、Spark是核心组件,其他组件在掌握研究好这几个的基础之上再去研究,内部原理和比较都需要不断去理解和记忆。
⑤ 第五层次: 这一层次还是基于对大数据知识的深入理解,去不断扩展项目的理解,去实操项目,并且去锻炼自己的HiveSQL能力,面试会手撕HiveSQL。
3)第三阶段
第二阶段我们就要去不断突破自己技术深度和奠定工程师的开发能力,去系统性的构建自己的知识体系,因为面向简历学习的知识比较碎片化,并且不够系统性,在第一、第二基础之上我们已经差不多知道哪些是重点,我们核心突破点在哪。
① 第一层次: 我们需要系统的学习计算机基础知识,每门计算机基础知识都应该架构自己的知识主线,就比如计算机组成原理,以冯诺依曼计算机体系为主线,不断扩展计算机各个组件的功能和运行状态、随着计算机性能的不断要求,就是对这些组件的不断优化,加缓存、多核CPU以及流水线处理指令都是在冯诺依曼计算机体系结构上不断发展而来,才满足现代对于计算的要求。操作系统应该建立操作系统从磁盘引导区启动->建立对个各个计算机组件的抽象(进程是CPU的抽象,地址空间是对内存的抽象、文件是对磁盘的抽象)->启动图形化用户界面(用以监测计算机整体性能和提供便于访问计算的接口)->然后启动驱动程序来检测硬件的状态和输入输出->另外在操作系统上启动任意的应用程序(操作系统提供应用程序访问计算机硬件的接口)这样的主线,其他细节和管理,都应该围绕着这个主线去不断丰富。另外数据结构也应该深入理解数据结构原理和算法的应用。在此基础之上,分布式系统概念与设计在我认为也应该深入学习一下,因为任何的大数据组件都是在虚拟化技术和分布式系统原理的基础之上进行开发的,对于架构分布式技术有很大裨益,我也正在看。
② 第二层次: 对于Java的学习,如果对于基础知识没有任何问题,我们应该结合实战去深入Java当中的设计模式、网络编程、高并发等内容,这些内容是对于理解大数据源码和自己构建中间件都是十分重要的基础,设计模式中的动态代理实现RPC模型的重要内容,网络编程NIO、AIO是分布式计算机通信的基础,高并发更是检验一个优秀组件的重要标准。另外也应该深入JVM的调优实战等内容,只有这样才奠定了深厚的Java基础。
③ 第三层次:对于数据库的学习,我觉得应该告一段落,如果后面工作又遇到,Mysql 的主从备份,以及Redis的分布式锁实现和缓存集群都可以实践一下。
④ 第四层次: 在前面的基础之上,去深入研究Spark、Flink,因为我认为不出意外,我们工作以后打交道最多的就是Spark和Flink,对于源码的研究与不同场景下的调优,具备深层次的理解能力还有实战能力具有很重要的意义。
⑤ 第五层次: 这一层次的学习,我们就需要不断磨练自己的架构能力,不同的场景下搭建数据处理架构,相同处理功能的组件很多,如何去选择合适的组件去搭建做适应场景的大数据架构,不断去实践和打磨,锻炼自己的架构能力。另外应该深入了解一些前沿的数据仓库、数据湖的概念,丰富自己的技术视野,为职业突破做准备。
全部评论
(8) 回帖