今天介绍一位学习群同学的大数据转型和面试经历,他是二本材料专业毕业,毕业后干了一年销售,又当了两年兵,退伍后开始学习大数据的内容,一开始进了家小公司,沉淀了一年后拿了转转、作业帮、百度等年薪40W+的offer。
一、自身情况
大家好,可以称呼我为HU,今年 28 了吧,93 年。2015 年 6 月毕业于一个普通的二本院校,专业嘛,俗称就是烧锅炉的,材料类的。对于计算机基础的学习,学校里面,也就仅限于word,ppt,excel 的使用,平时也就是和大多数人一样,逃课,打游戏。唯独需要保持的底线,不挂科,英语也比较差,但是还能顺利毕业。
毕业后,有不错的朋友说了句,去当兵吧,当时找了一个销售类工作,工作了有一年,也觉得上班没啥意思,就索性辞职,一起去当兵了。当兵之前的信念还是很坚定的,是知道会有些苦,但是心中就一个想法,别人能吃得苦,我也可以。当时分配的是,山西某单位,属于是基层野战陆军。那条件,是相当艰苦,真的是应了那句话,当完兵,除了生孩子,没有不会的。
去之前,心中还是有想考取军官的想法。但是,随着看到的,感受到的,以及自身的想法,对于未来工作的展望,遂,放弃*内工作的想法,两年顺利退役。第一年拿到优秀义务兵,第二年拿到嘉奖,也算是对得起这两年的付出。
二、人生道路的抉择
在决定退役后,要考虑自己未来的路该怎么走。因为在部队里的两年时间,身边的同学,基本大都有了稳定的工作。放弃*内的选择,也经历过大学销售的工作,看着家里的房价,最终权衡过后,依靠退役时给的退役金,19 年 3 月初,自己来北京,就开始了学习的道路。
这里不太方便透露学习的机构,总之,师傅领进门,修行看个人。半年时间,无论是当时自己找视频,还是问老师,最终目的,就是要找到一份能养活自己的工作。
培训了半年后,到了准备写简历找工作了,发现自己知识储备还是比较零散,简历都不知如何下手。虽然培训班每天课程满满,感觉很充实的样子,但实际消化进去的并不多。机构老师帮我们写好简历之后,投了一些也面了一些,但效果并不理想,毕竟简历内容不是完全掌握,而且被问的也有点迷。
也是那时候在网上搜大数据面经看到峰哥的公众号,于是让他帮忙修改了简历并针对我的情况做了一些知识规划和调整,毕竟他也是转行的,指出的一些点还是能命中要害。
重新开始投简历之后,面试的第二家就拿到的offer,定薪17K。入职后一周,由于公司发展方向的调整,当时的部门领导,就离职了,好在工作没有受到太大影响。
三、技术快速积累
由于,公司规模不是很大,当时在入职后的第二周,收到的任务是,写算法,大致需求,是数据经纬度点集的外轮廓(凹壳)计算。当时的情况,就是,刚从培训班走出来,虽说是入职的大数据开发的岗位,但是,需求来了,硬着头皮也要上。
经过一周时间,各方面搜索查找,终于有正确的方向,之后在进行测试、调整、优化,终于算是可以交付,也算是,自己正式转正的安心丸。
因为公司属于非互联网公司,开发任务不是很重,峰哥建议我趁着这些时间好好沉淀沉淀,之后可以找个机会进大厂。帮我指导了学习方向之后,我就利用业余时间,补算法,学底层,对于之前一知半解的问题,深入学习,去力扣刷题,夯实基础,优化自己的垃圾代码,学习设计模式。
之后,在业余时间,把 spring 框架补起来,到第二年,就可以写一些后台接口,能自己独立完成一个小平台的大数据项目,包括后端查询,数据存取,数据分析,数据展示。
因为目前公司还是 spark 的流处理框架,暂无 flink 的生产经验,所以,就集中目前手中使用的技术栈深挖,源码实现。
看过的书,以及课程:
- Hbase 原理与实践
- 深入理解 Java 虚拟机:JVM 高级特性与最佳实践(第3版)
- 深入理解 Kafka:核心设计与实践原理
- Redis5 设计与源码分析
- Mybaties3 源码深度解析
- Linux 内核设计与实现
- 极客时间 Mysql45 讲,Java 并发编程实战
- 算法是,找的左程云的视频学习的
- Spark 源码解析,找的 周志垒 老师的视频
通过学习,快速扩充自己的技术栈深度。
经过一年的沉淀和积累,想试试好一些的公司,峰哥建议我从小公司开始积累一些面试经验,慢慢向大厂过渡。刚开始拿了一些20,21K的中小公司offer,后面开始拿了转转、作业、大数据 25,26K,总包40W+的offer.
四、面经
#### 百度大数据开发(面试,均为现场,已 offer)
#### 一面:(1 个半小时)
先是两道算法,屏幕共享,在 IDE 中编写
题目:力扣 第 10 题,第 86 题
1. java 语言特性,封装继承多态,的个人理解
2. IO 模型
3. String 的初始化过程
4. 多线程 sleep wait synchronized 个人理解(比较宽泛,把自己能知道的都说)
5. JVM 内存模型,垃圾回收算法
6. Hdfs 读写流程
7. Hdfs HA,中 NN active 节点宕机,DN 宕机,过程中的主备切换,副本复制,涉及到脑裂
8. MapReduce 的整个流程,map shuffle reduce
9. 详细的 shuffle 流程,环形缓冲区的,实现细节,kv 存储,赤道的概念,以及中间结果集存储形式
10. Redis 持久化方式,优缺点
11. Redis 内存淘汰机制
12. kafka 从生产到消费的数据模型
13. kafka 零拷贝的具体实现,sendfile 指令的整个过程,涉及到 DMA
14. 最后是经典的,大文件,统计频次,这里最后说了一下,可以使用 redis 的 hyperloglog 基数统计
#### 二面(1 小时)
先是询问项目,讲述项目中数据流向,自己负责的部分,遇到的技术难点,以及解决方案。
然后是一道算法题,屏幕共享,在 IDE 编写,
题目:力扣 第 54 题
之后是一道逻辑题
25 匹马,5 个跑道,每次只能跑 5匹,如果用最少的次数选出最快的 3 匹马,讲述过程。
这道题百度有详细答案,不细说了。
#### 三面(1 小时)
项目架构,整个数据流向,服务器配置,从 Nginx 配置,一直到最终 Hbase 存储,全部实现细节。
并且,屏幕共享,分析了入职时凹壳的算法实现过程,并对面试官提出的疑问进行解答。
#### 四面(1 小时)
这位面试官,数据交叉面,不是大数据方向的负责人,所以问的问题,过得倾向 spring
1. java 基础一部分知识,相对基础
2. spring IOC AOP
3. spring 中循环依赖的原因,解决方式
4. spring cloud 组件,以及功能
5. alibaba-nacos 优缺点
6. 之后是数据对接协议,这里属于物联网范围
7. tcp 的三次握手,四次挥手
8. 基本的 linux 指令
9. 常用的 java 相关的指令,jstack jmap jps
最后是一道算法题,屏幕共享,IDE 编写
题目:力扣第 92 题,第 102 题
#### 作业帮大数据开发(已 offer)
#### 一面(1 小时,现场)
1. 讲讲对 spark 的了解,从 RDD 宽窄依赖,到 shuffle,从 spark wordcount 到整个 spark job on yarn 提交的过程,再到 spark job 提交的源码的过程
2. 细问 shuffle 的实现过程
3. MapReduce 与 spark 的 shuffle 异同
4. spark sql 的执行过程,如果转换为 job 提交
5. spark streaming 消费 kafka 的 offset 提交形式
6. spark streaming 消费 kafka 中,对分区修改,spakr 做出什么变化,删除 topic 重建,有什么变化
7. hive sql 编写,开窗函数,使用 RDD 和 普通 java 去实现
8. Hbase 的读写流程
9. Redis 常用的类型,以及常用 API
10. 布隆过滤器,实现原理
11. redis 事务是否为原子性
12. redis 多路复用到 IO 模型的整个发展,(read-write,poll,epoll)
13. 讲讲项目中自己负责部分,具体的数据流向,遇到的问题,如何解决
14. 口述 力扣第 239 滑动窗口最大值,实现过程
#### 二面(1 小时,现场)
1. 讲述项目,数据流向,负责部分
2. Hbase 的整体架构,读写过程
3. 遇到过 Hbase 的 GC 问题吗
4. Hbase 的 region 的 flush 过程
5. Hbase 的 hfile 存储的 KV 形式
6. Hbase 的 Hlog 的存储形式,宕机恢复
7. 这里涉及到一个滴滴的 Hbase 集群的高可用的主备集群的复制,Hlog 的回放
8. spark workcount 读写 hdfs 的整个流程,细化到 InputTextFormat OutputTextFormat 中关键的方法,以及 LineRecordReader
9. 如何修改输入的分区数(这是涉及到一个切片信息 SplitInfo 的实现)
10. mysql 日常 sql 编写注意事项
11. 给定一个 10 层,每个节点有 10 个子节点的目录树,目录结构不变,如何设计 mysql 存储,能够满足,大量查询,给定节点的全部下级节点,给出提示,可以参考 linux 的目录树的存储以及 mysql B+树的存储,能够使用 like 最左匹配。
12. Redis 源码中 string 的实现,zset 实现
五、总结
对于我这种年龄、学历和专业、以及毕业后的履历,可以称的上是一副烂牌。转型之前也想过会失败,但毕竟当过兵,想着失败大不了从头再来,还好现在成功了,也走的比较顺利。但如峰哥所说的:转型找到工作只是起点,还得考虑之后的规划和发展,技术没有一劳永逸的,共勉!
--end--