大数据开发,不知道叫什么帖
解题思路
前天刚签完三方,秋招也算正式结束了,我找的是大数据开发岗位(偏平台开发/框架开发,非数仓(数仓理论不会)),秋招投了:阿里、腾讯、字节、快手、华为,拿了字节、快手、华为的offer。一路过来受到很多人的帮助,所以也想写一贴( 算是分享贴?)分享下之前自己的学习途径。如果对读者有帮助,那太好了哈哈哈哈哈,很开心。如果有错,欢迎批评指正! 帖子分两部分吧: 个人学习经历 和 框架学习建议 (感觉也不算建议,大家互相探讨就行) 面经相关: 牛客上在大数据方面其实大佬很多很多,之前我也是看了他们的面经贴学了很多,在这列举下哈哈哈哈哈哈(一定不全,欢迎补充): reswqa, InstantCWeed, 优秀的张先生, Commando201804,啊猩猩星星(牛客指导老师,感觉如果是大数据开发,可以以该老师为目标(3年P7 XDDD)https://www.nowcoder.com/discuss/607015), Offer快来吧please(大佬,非科班转码,希望大佬有时间发个帖子), BowenXiao(如果也是知乎上的id,那这人是个巨佬!!!) , 星河弱水,机智多(算是我Flink的引路人,哈哈哈哈哈哈哈), 胡胡达 (大佬,很多面经), superpen, MarshalJS , 林子啦啦啦, 魔力鸟flying, Chihyung (巨巨巨佬,校招时就已经是Spark的contributor了),TD2022(大数据引路人,哈哈哈哈哈哈),kumo_ 还有好多好多。。。 面经的使用: 1. 学习前可以让我们把握学习的重点 2. 学完后可以查漏补缺 3. 面试前压压题??? 本人情况: 双非本,985硕(学校很好,本人一般),科班,无奖,无实习(导师不放)无论文,很垃圾的项目(导师的项目,负责项目的主管一周解决不了类加载不到的问题。。。),略懂Flink DataStream和Spark core的源码,大数据方面纯自学 个人学习经历: ps 本科很水,试了计算机中很多很多方向,基本简历是一穷二白。最后一年也是随大流,咬咬牙靠运气上了985硕(用哥哥和阿sam的《沉默是金》中一句话形容" 受了教训 得了书经的指引 ... 不再像以往那般笨"), 所以研一入学我拼命地想学技术。然后导师给了个CV项目,当时我想的是以后要做CV算法工程师!!! 但是学长找工作的艰难和我偷偷去面试商汤实习的失败,以及当时看了很多深度学习相关的数学推导(告辞),我直接放弃了,太难了。。。 然后偶然遇到talkdata(b站上up,我还买了他两本笔记XDDDD非广告)的视频,发现居然还有大数据这个方向,当时是想选后端,但是想了想,别人如果也算法劝退,那么估计都会去走后端,那我这之后加上不能实习不得被卷死?所以走了大数据 我的大数据学习路线: 首先你得会Java(一定要会!!!),这部分主要就是Java语法,集合,并发,JVM(基本就是八股文水平,这几块大家可以看其他人怎么学的,然后对照比如JavaGuide、Java3y八股文,理解性记忆 一定要形成自己一套东西,这样你面试时候才能扯!!!!!!!!!),比如举个例子: JVM中GC? 这块首先你得明确什么是垃圾?两种判断方式的优缺点:计数法,不止循环引用的缺点!,然后可达性分析,具体三色标记法的实现,并发标记情况下三色标记法的问题,然后多标、漏标带来的问题,如何解决,不同的解决的思路就对应着后面的CMS和G1.... (可能有错,我已经很久没看八股文了 orz)这些就是需要自己去理解才能串起来,这样你嘴巴才能像机枪,哒哒哒哒哒哒哒哒 这种 串起来 的方法也适用于后面大数据组件的学习!!! ------------------------ 学完Java八股文后,这里就是大数据和后端的分水岭:如果走后端,那就SSM一套(当然可能会学redis、kafka、mysql ),如果走大数据,那就开始学习大数据组件--------------------------- 我的大数据组件学习顺序: mysql(会sql,leetcode上sql 2020.2月前的题基本都刷完了,会八股文) redis(看了,后面一直没复习,就没用了,简历也没写) hive(看了,后面一直没复习,就没用了,简历也没写) hadoop(MR: 原先看了源码,没什么卵用,直接说自己会Spark源码,Yarn:八股文水平,但是注意cgroup和namespace机制,HDFS:八股文水平(美团两篇文章+https://www.imbajin.com/tags/hdfs/ 够够的了!)) spark(core 源码层面) flink(datastream源码层面) kafka(基本原理+高级特性(事务、时间轮)+一点点的源码) hbase (基本原理+基本特性(二级索引)+一点点源码) zk(基本原理+基本操作+zab协议) paxos/raft/zab(看知乎上朱一聪 paxos 整整看了两天的水平,看哭了。。。不推荐面试说paxos,反而说raft更好,推荐知乎丁凯+原论文) 框架学习建议: mysql: 这个我不太行,我就是看完《Mysql必知必会》后刷了好久的sql(其实到面试时,因为自己一直没复习sql,所以还是说sql不太会,各位一定要注意复习啊啊啊!),然后底层的存储引擎基本不怎么了解,事务、锁这些八股文一定要像前面那样,串起来 redis:talkdata说要学,我感觉随便吧,我这种情况基本算是没学 hive:走数仓的同学一定要学。对于有时间的同学,可以稍微了解下底层sql到具体mr任务的实现(快手三面问到了) hadoop:我看了《Hadoop权威指南》(这本书一定不能从头看到尾,里面有很多过时东西,按照上面几个组件挑着看就行),hadoop其实就三块,MR(这块的源码,如果你会Spark源码,那直接跳过这部分,如果你是走数仓那条,那MR源码这块最好要会,毕竟之后数据倾斜一些原理其实从源码上就能看出来什么原因了,我看很多面试官会纠结内存中环形缓冲区怎么实现,具体可以看看),Yarn这块就是调度器的调度机制,以及稍微深一点的cgroup、namespace( 内存隔离、CPU隔离),HDFS就按照上面资料,重点可以关注:NN、DN结构,作用,读写过程(能说到API最好),读写容错,HA,联邦这些 spark:首先可以看看尚视频(很粗浅的,尽量倍数)有个大概印象,然后看《大数据处理框架Apache Spark设计与实现》(为数不多需要全部看完的书)《Spark技术内幕》(部分), 基本上看完这两本就会在原有的视频基础上有个拔高(这时候可以跟着刷刷spark一些经典题),至于SparkSQL(如果有时间可以学学,推荐《 Spark SQL内核剖析》),之后就到源码层面的了,此时就需要《Spark内核设计的艺术》很厚很厚的书,大概800多页,不是全看(注意前面的书,一定不要全看。。。还是那句话挑重点,重点哪里来?面经里来,面经哪里来?牛客里来... ),Spark源码可以关注几个部分:RDD的五大特性、宽窄依赖的实现(reducebykey一定会产生shuffle???什么情况不会产生shuffle?), SparkContext(也就是Driver, TaskScheduler、DAGScheduler、SchedulerBackend各个职责), shuffle过程(三种shuffle write+一种shuffle read,其实三种write中主要还是BypassMergeSortShuffleWriter+SortShuffleWriter, 剩下那个UnsafeShuffleWriter,要看你spark内存管理掌握如何了,如果可以那就说,如果不可以就不说,面试可不能玩火,言多必失拉低面试官好感),blockManager,Broadcast变量实现,checkpoint实现,Spark内存管理( 说实话,这部分我也不太熟,我也只了解到每个Executor进程有个MemoryManager,其内部包含MemoryManager,包含:四个memoryPool,两个MemoryAllocator 各自作用。。。)最后就是在这些源码基础上的一些引申题了,比如RDD为什么不可变啊,Spark频繁GC什么问题啊,最后学完Spark一定要问自己一个问题,为什么Spark能够处理TB、PB级别的数据而不会发生溢出?ans:分区、流水线、迭代器模式三个方面去考虑,这样整个数据在框架中怎么流动就基本掌握清楚了 flink:插曲:原先面的flink-runtime团队,很可惜,马哥把我挂了,这也直接把我之后方向也改变了,orz 变数太大了。 flink这块的资料,首推b站上flink官方视频,看完基础部分后看committer崔星灿翻译的《基于Apache Flink的流处理》,还是不用看完,看到连接器哪章就差不多了。然后可以做一做https://github.com/ververica/flink-training-exercises 里面的练习。之后如果感兴趣就可以开始阅读源码了。推荐几个flink源码资料:https://blog.jrwang.me/tags/flink/(*) 、http://www.whitewood.me/ 、http://wuchong.me/、 flink官方文章、 https://www.jianshu.com/u/49e6a4e2bf69(如果挂了百度搜索littlemagic)公众号推荐:大数据渣渣瑞、zhisheng, 章鱼沉思录。 源码这块的话我看了很多,我也不知道哪些是重点哪些不是重点,基本上就是按照 * 的过程去看的。首先你得知道基本原理,然后对照着 * 的内容一步步下来,第一次看完后,你绝逼会看很细很细,然后你需要看第二次,这时候你要做抽象,做总结,比如你只要关注某个类,某个类中的成员变量,以及一些重要的方法,像我这样: 最后第三遍整张A4纸,假装你要说给别人听,然后在A4纸上疯狂地说,疯狂的画就行,然后面试遇到面试官就可以哒哒哒哒哒哒哒哒,对于flink中一些论文可以去读读,像C_L、ABS算法还是很巧妙的,之后有些特性就是要完善这些算法的缺点,有时间可以阅读试试,还是能让你变得会扯 之后flink这块的话可以结合源码,然后比如尝试分析出现反压可以怎么去分析,通过Java bin工具或者linux 命令去定位,然后解决。。。 7. kafka: kafka这块其实就围绕几个问题: 为什么使用kafka?然后就高吞吐、高可靠、高可用三点 高吞吐:生产者异步、压缩、批量发送啦、网络模型I/O多路复用高效啦、写入pageCache啦、顺序I/O啦、baseOffset形成跳表啦、零拷贝啦、批量拉取啦,一条龙整上,爽歪歪 高可靠:如何做到不重不漏不乱序?典中典了 高可用:Controller HA、PartitionHA(可以说到ISR、ISR概念,为什么设定ISR、如何保证消费一致性啦.............) 这几个点理解完后基本没啥问题,然后其他问题,可以 看看面经进行查漏补缺, 原谅我是八股文砖家哈哈哈 8. hbase: HBase的学习需要从它的本质( 多维 排序 稀疏 分布式 Map),架构入手,表分region,region分store,store分memstore,diskstore,然后各个的作用,可能会出现什么操作(region merge、split、memstore的flush),然后到Hbase的写入读取过程,最后rowkey热点问题,如何实现二级索引,事务等等。这个推荐范欣欣《HBase原理与实践》(也是不全看,因为我们没那时间,重点调前面讲过的几点)和 http://hbasefly.com/author/libisthanksgmail-com/他个人博客的评论( 注意是评论,文章内容就是书籍内容,都一样,评论才精彩!!!可以学到很多) 9. zk: 首先了解下zab协议,然后可以参考下面我总结的这些内容来看 ZooKeeper是一个可用于维护配置信息,命名,提供分布式同步等功能的 高可用分布式协调服务。 为了实现这些功能,其首先设定了自己的存储数据的数据结构Znode Znode主要包含 三个部分 stat: 包含Znode的 版本( CAS)、 权限( 读写,创建子节点,删除子节点...)等信息 data:Znode中存储的数据 children:Znode的子节点 节点的 种类主要分成临时节点(不能在其下面创建子节点),持久节点,顺序节点。临时节点和客户端-服务端的会话有关, 会话结束(不是连接结束,导致结束有宕机、网络超时等原因)则临时节点会被删除,持久节点则不会。)比如0000000001, 0000000002加以区分,这样节点种类就被区分成临时节点、临时顺序节点、持久节点、持久顺序节点(顺序节点假如设置成W0000000001,W0000000002,之后如果全部删除,下一个创建的顺序节点序列号将从W0000000003开始,zk肯定维护了这个序列号) 当然zookeeper还提供了使用这些节点的操作(创建create()、获取子节点getChildren()、获取节点数据getData()、更新数据setData()) 多个Znode会组成一种类似文件系统中 目录树 结构,保存在内存中。内存数据丢失可以靠history回放,同时zookeeper会将这些数据定期保存快照到磁盘中,也能从其恢复。 为什么同时将快照、事务日志落盘,落盘一个不就好了?出于数据粒度的考虑。。。 树的操作有些 约束: 1. 节点只能通过绝对路径访问 2. 不能递归创建、也不能递归删除节点(删除有子节点的节点) 3. 临时节点下不能创建子节点 上面说的 这些功能都以某种形式被分布式应用程序(zk客户端)使用, 这就涉及到zk客户端和zk服务端之间通信? 除了 正常心跳外就是通过watcher对象。zk客户端在自己所要关注的Znode上注册Watcher对象,一旦Znode的data、children发生变化时( stat中权限改变不会触发NodeDataChangedWatcher),或者连接状态变化,注册在其上的Watcher对象触发,zk客户端将会收到通知从而做出反应。Watcher是一次性的, 触发后就会被移除,如果还需要继续监听则客户端需 重新注册,zk客户端收到的通知不会包含具体的内容(现在的data、现在的children,只能再次getData、getChildren获取),而仅仅是 节点路径 , 连接状态 , 事件类型(data变化、children变化,节点增删) zookeeper是 高可用 的服务运行在奇数数量的集群上,要 保持高可用 就往往需要多副本,如何保持多副本之间数据的一致 ?zookeeper使用zab算法 zookeeper集群节点分成三种角色leader、follower、observer 。。。 使用observer的原因:。。。 zab算法主要分成4个阶段:leader election + discovery + synchronization(recovery) + broadcast 。。。 实现是3个阶段 只有处在broadcast阶段中集群才能向外提供服务 基于以上的这些,zookeeper实现了上述配置中心,命名服务,分布式锁/队列等功能 如果有空可以使用zk实现个分布式锁。zk操作可以推荐 《从paxos到zookeeper分布式一致性》,前面2pc,3pc,zab理论就别看了,乱的一批给我看懵了。这些理论部分去知乎上看大V文章(比如丁凯,范斌。。。) 10. raft: 看知乎文章+原论文 大数据最好的项目就是实习,所以一定要去实习!没实习那只能b站、github上实时数仓或者离线数仓咔咔往上怼喽,然后再读点源码,秋招应该没啥问题 面试体验: 字节,最佳,整整一星期发意向 快手,hr慢点,其他和字节差不多 阿里,持续一个月,然后gg 腾讯,更加蜜汁操作。。。 华为,大家都知道 最近在赶论文,所以有些内容没写太详细,如果各位有需要的可以在评论区说下,有时间我补充补充。 最后感谢那些帮助我的人(几位师兄,TD2022,秋招小伙伴....),很感谢很感谢!!!!!!!!!!!!!尤其感谢字节跳动-视频架构团队,第一个意向给了我很大的信心,感谢! 帮助他人,攒人品,保佑盲审过过过过过过!!!毕业顺顺顺顺顺顺利利利利利利利!!! 更多模拟面试 查看更多 > 模拟面试第 17 名 中国农业银行 模拟面试 有人42分钟前测试并获得了面试报告 模拟面试第 15 名 哔哩哔哩 模拟面试 有人1小时前测试并获得了面试报告 (226) (744) 分享 举报 精华采集 浏览19740


讨论区

题目列表

扫描二维码
请添加深了个蓝微信
请备注【智商测验题库】
编辑题目
题干
解题思路
设置题目所属题包

- 二级分类专属题包
- 测试题包1
- 网抑云
- 牛客网爬的数据2
- nkw爬取数据
请选择题目所属岗位(请最多选择6个)
请选择题目所属公司

- 测试公司
- 计算机
- test专用
- 大疆无人机
- 哔哩哔哩
- 百度智能
- 字节跳动
- 英伽教育
- 北京校苑
- 环球赛乐
- 深蓝前沿科技
解题思路解锁方式

您还有0次解锁机会,是否解锁本题思路?

