本文转载自微信公众号「Java极客技术」,作者Java极客技术。转载本文请联系Java极客技术公众号。
阿粉不知道大家面试的时候,有没有被面试官问到,我看你简历上写了了解一点某某某,你说一下这块的内容吧?当我们听到这段话的时候,是不是感觉非常的熟悉,对,就是这么熟悉,因为有很多面试官看你是 Java 开发的时候,问过了 Java 相关的知识,既然看到了你自己敢在自己的简历上面写了解一点其他的技术的时候,都会很 “热心” 的问候一波,而阿粉的朋友,就被简历上写的了解大数据的相关内容被疯狂 diss 了一波,阿粉顺便也给大家说说面试都问了些啥?
Java面试问了这些
1.基础知识之 ArrayList 和 LinkedList 使用性能对比。
实际上这个问题就是非常基础的,实际上面试官就是想问你,二者的数据结构是什么样子的,以及他们各自适用于什么样子的场景上。
阿粉的回答就是从这开始入手,然后开始回答面试官的问题。
ArrayList和LinkedList都是实现了Collection和List接口。
ArrayList 底层实际上是大小可变数组的实现,并允许包括 null 在内的所有元素,还提供一些方法来操作内部用来存储列表的数组的大小。
LinkedList 底层就是链表的结构实现,并且允许所有元素(包括 null)LinkedList 类还为在列表的开头及结尾get、remove 和insert 元素提供了统一的命名方法。
这个时候我们就能从数组和链表的不同来分析性能的比较了,毕竟这都是老生常谈,数组结构查询速度快,添加和删除操作慢,而相对的链表结构,查询速度相对来说比较慢,而添加和删除操作比较快。
一般这个答案都是面试官需要的,也有面试官会问你,为什么查询数组就快,链表就慢,这个就涉及到底层的知识了,如果不会,那么肯定只能说,自己写过测试用例,实际对比的,这确实没错,但是肯定不是面试官想要的答案,面试官想要的答案都是:
针对查询操作来说,在数组中,只需对 [基地址+元素大小*k] 就能找到第k个元素的地址,对其取地址就能获得该元素,
而链表要获得第k个元素,首先要在其第k-1个元素寻找到其next指针偏移,再将next指针作为地址获得值,
这样就要从第一个元素找起,多了多步寻址操作,寻址操作次数链表要多一些。
如果你能回答出类似这种方式的答案,一般面试官就放过你了,阿粉面试的时候,十次有九次都是这种,说到这里之后,这个问题就简单的结束了,面试官也就不再进行深挖了。
2.JVM的垃圾回收机制
这么说比较笼统。能够细致问出来的问题就是那些,OOM可能发生在哪些区域上?堆内存结构是怎么样的?Minor Gc和Full GC 有什么不同?
一般出来的问题都是根据这几种的来回变换的,万变不离其宗,阿粉遇到的面试问这个的,大部分都是问的 Minor Gc和Full GC 有什么不同?
Minor Gc和Full GC 有什么不同
Minor GC :发生新生代的的垃圾收集动作,Minor GC非常频繁,回收速度一般也比较快
Full GC :发生在老年代的GC,出现了Major GC经常会伴随至少一次的Minor GC(并非绝对),Major GC的速度一般会比Minor GC的慢10倍以上
然后我们就开始我们对垃圾回收机制的表演就行了,这个要是拆开了说,那可就太多了,如果大家有想深入了解的,阿粉已经准备好了 面试大全PDF 送给大家,大家在后台回复 java极客技术PDF 就可以获取到由阿粉精心为大家准备的内容。
3.你们项目中 Redis 是怎么用的。
如果面试官问出了这块的内容,实际上就是考察 Redis 的一些特性了,比如你们使用 Redis 实现分布式锁,那么实现分布式锁的必要性在哪里。
还有如果你们使用了 Redis 做分布式数据缓存,那么必然导致 Redis 和数据库双写一致性问题,这些问题如果你开始回答了,那就就会掉进一些坑里面,比如说Redis 和数据库双写一致性问题,这玩意阿粉之前面试的时候被问到过,最终的解决方案也就是保证了最终一致性,如果对数据有强一致性要求,不能放缓存。我们所做的一切,只能保证最终一致性。就这么简单。
面试官大致就问了一些这么基础的内容,剩下的都是项目中的了,阿粉就不再给大家赘述了,但是接下来,阿粉就开始被面试官疯狂 diss 了,阿粉在自己的简历上面,写了一句话,了解大数据的相关知识。比如 Hadoop , MapReduce,这些东西,面试官有点感兴趣,就开始了无情的追问。
关于大数据的面试悲剧
面试官:我看你简历上写了了解大数据的相关内容是么?
阿粉朋友:是呀,因为做了好几年的开发了,总想着也学习一下这块的内容啥的。
面试官:那你说说你了解的这些内容吧。
阿粉朋友:了解的哪些内容?
面试官:就你在简历上写的这几个,Hadoop,MapReduce,还有就HDFS。
这时候阿粉朋友心中一万个 ZZ 飘过,这东西咋说,说自己安装?搭建?还是啥,但是这时候也不能慌呀,毕竟也算是自己学习过一点的,虽然没有正式在项目中使用过,于是阿粉朋友就开始说:
Hadoop项目结构实际上由很多个组成部分,像我在简历中写的,HDFS 分布式文件系统,MapReduce 分布式并行编程模型,YARN 资源管理和调度器,Hive 数据仓库,还有就是 HBase 非关系型数据库,
HDFS三个核心组件是 NameNode,DataNode,SecondaryNameNode,比如说 NameNode 是集群的核心, 是整个文件系统的管理节点也是维护者,DataNode 存放具体数据块的节点, 主要负责数据的读写, 定期向 NameNode 发送心跳,而 SecondaryNameNode 算是辅助节点, 同步NameNode中的元数据信息。
然后面试官就开始打断我了,就对阿粉说,这块内容在实际的工作中,你用过么?阿粉朋友的回答的也确实是没有用过这块,自己只是在工作之余,利用业余的时间去学习了一下有关这方面的内容,扩充一下自己的知识面,接下来面试官就好像盯着阿粉不是很了解这块的内容就开始了无情的发问。
1.NameNode 的工作机制你了解么?
阿粉朋友回答:主要分为了2个阶段,第一阶段是 NameNode 启动,第二阶段是 Secondary NameNode 工作,然后简单细说了一下,于是面试官给阿粉的朋友纠正了一些不合适的地方。
2.正常工作的hadoop集群中hadoop都需要启动哪些进程
这阿粉的朋友因为没有在工作中使用过,于是说了不知道,面试官就开始说起了这块的内容,
最后在面试结束的时候,就说了一句,这就是你自学的这块的内容?当阿粉听到面试官有说这句话的时候,是不是就是有点过分的含义,毕竟人家只是自学的,也没有实际的开发经验,就算学的不怎么样,也没必要这么过分不是么?
也可能是面试官确实会这块的内容,但是阿粉听到这里实际上就已经开始听不下去了,毕竟你是面试官,你的主要内容是不是应该面试,毕竟人家面试的是 Java 开发,也不算是大数据工程师,你直接给“整活”,是不是有点不太好。
于是阿粉也劝了自己的这个朋友,尽管这个面试可能面试不上,但是不要放弃,毕竟大部分的面试官对这个东西还是不看重的,毕竟你只是说了自己在开发的过程中自己学习的,只是了解,也不是专门做大数据的,即使你回答的不好,也不能打击到你的自信心,影响你接下来的面试不是吗?
马上金九银十面试季就要来到了,又到了一个跳槽的好月份,大家都准备好了么?如果没有准备好,那么就赶紧回复 java极客技术PDF 获取最新的面试题,找个高薪的工作吧。