Java-大数据面经(华od)
概述
我是2024年1月了解到OD的信息,在找工作的过程中,我进一步了解到了OD的相关信息。
填写信息及一轮机试
首先,我填写了信息并报名参加了机试,分数是346分。只要前期做好刷题准备,问题不大,根据栗栗小姐姐的参考来也可以。机试的前两道题难度中等。第一题,我有一些印象,结合自己的理解写出来了;第二题我我有刷到过,导致第二题的重复率非常高;第三题比较难,是一个文件系统,难度中等偏上。
以下是我具体的三道题:
题目1:最长合法表达式
题目2:数组最大N个数与最小N个数的和
题目3:文件缓存系统
二轮综测
在进行二轮测试时,根据攻略,结合自己的实际情况,偏向积极的方向填写内容,同时不会刻意选择不符合自己性格的选项。通常这样做可以比较轻松地通过测试。
资格面试
在资格面试前,HR会收集一些面试资料。这些资料只需正常提供给对接的HR栗栗小姐姐即可,没有特别需要注意的地方。资格面试是部门HR对我基础情况的了解,主要包括以下几个方面:
1. 学历背景的确认:核实我的教育背景和相关证书。
2. 自我介绍:需要特别强调与岗位相关的亮点。
3. 断档说明和稳定性:合理解释跳槽频繁的原因,以及家庭因素对入职风险和工作稳定性的影响。【我没有这个问题,经历稳定】
4. 意向:了解我对企业文化的认可程度。
5. 目前薪资和涨幅比例:如果期望的涨幅较大(一般超过30%),需要说明原因。【我没有这个问题】
三轮技术一面
我的运气比较好,直接被某个部门接收,所以在一轮面试时已经知道要去哪个部门了,因此进行了针对性的准备。 技术一面和技术二面的面试官都是部门随机分配的。我的技术一面包括一道算法题,是力扣上的原题,难度偏低。我花了40分钟完成题目,之后面试官问了两个关于多线程的问题。我虽然没有特别充分的准备,但基本上回答出了思想和原理。面试结束后,我立刻补上了这个知识点的漏洞。
在算法题方面,我的解法存在一些问题,时间复杂度较高。面试官要求我进行优化,我尝试使用不同的算法来降低时间复杂度,虽然最终没有成功优化出来,但我和面试官讨论了我的思路,他也认可了我的想法。最后,我提交了时间复杂度较高的答案。总的来说,技术一面的参考意义不是很大,因为做题时间较长,基本上没有机会问其他问题。 具体的技术问题:
1. 对Java多线程的理解是什么样的?——网络中的例子和程序中的例子说明
2. 项目中哪些地方用到了多线程技术?——一时紧张没记住多少,讲的概念
四轮技术二面
技术二轮面试是一个标准的面试流程,首先给了一道难度较低的算法题。重点在于我写完代码后,面试官立刻问我在看到题目时是如何思考的,以及我是如何一步步写出代码的。对此,我提前做了针对性的准备,比如在30分钟的时间内,我分配了20分钟写代码,8分钟写注释,2分钟理清思路。
接下来,面试官问了我一些Java的基础知识,如JVM的工作原理、垃圾回收机制、SpringBoot的源码以及多线程问题(两次面试都问到了,还好我有准备)。面试官还注意到我简历上有大数据的经历,于是问了我一些大数据的标准问题,比如项目组的人员配置、我在项目中的具体角色、服务器的配置、数据的来源、离线数仓的分层架构以及数据的应用方向等。这些问题我都能够正常回答。
Java部分技术问题:
1. 说一下Redis,以及在工作中是怎么使用的。——(我的回答套路为:Redis概念+Redis工作应用+Redis的String底层实现)
2. Redis的持久化机制。——(RDB和AOF)
3. 关系数据库设计中的三范式(3NF)——(1~3NF + 我在实际应用中并没有完全遵循)
1. 追问:为什么不遵循?——(数据冗余问题、性能考虑、成本、复杂性)
2. 追问:实际项目中怎样不遵循的?——(说出实际的数据库设计案例)
4. 你是怎么做 MySQL 数据备份的?——(mysqldump)
5. String 和 StringBuffer、StringBuilder 的区别是什么?
6. SpringBoot和SpringMVC的区别和联系?
7. Spring的核心概念及源码解析。——(IOC【BeanFactory、ApplicationContext、BeanDefinition】、AOP【@Aspect、@Before、 AnnotationAwareAspectJAutoProxyCreator、ProxyFactory、CGLIB动态代理】)
8. 多线程在项目中的应用。——多服务器、负载均衡等
大数据部分技术问题:
1. (通过项目切入)说一下Spark技术——(回答Spark的RDD、内存管道等)
2. 离线部分使用的Hive技术概念原理?与Spark的区别?——(回答MapReduce、一个是硬盘迭代一个是内存迭代)
3. 说一下项目的分层架构——(我通过一个具体的下单业务说明分层架构,在最后说数据的用处及BI看板时被面试官打断,说面试时间太长了)
五轮领导综合面试
在技术面试之后,我进行了部门领导的综合面试。在这个环节,我的思路是表达我对这个部门的极大兴趣,并表现出迫不及待想要加入的态度。最重要的是与主管建立良好的沟通。我简单介绍了自己的技能,并谈到了我的Java项目经验(因为我了解到未来80%的工作都是Java相关 的,而我有一些大数据的工作背景,能够为部门带来一些新的思路)。接下来,部门领导向我介绍了部门的具体情况,并确认了我的入职时间。
具体问题:
1. 自我介绍
2. 讲解项目中自己做的事情
3. (主管介绍我未来的工作……)
谈薪资
总结
OD的面试流程相对较长,有些环节看似简单,但如果未通过,就没有再面试的机会,需要等待它的有效期过去才可以再次参加,比如机试和综测。技术面试则完全依赖于技术水平,因此没有太多可说的。
在HR栗栗小姐姐的帮助下,我在流程上省去了很多心力,能够全身心投入到具体的技术准备中。她的帮助对我来说是无可替代的,我非常感激OD的HR栗栗小姐姐提供的支持。如果没有她,我的面试流程不会进行得如此顺利。