很多Java程序员在应聘一些中大型互联网公司的Java工程师职位时,经常会遇到以下困惑。
这些同学表示,他们也做了精心的准备,在网上收集了大量的Java面试问题。
但是,当我真正去一家互联网公司面试的时候,发现人家问的和你准备的完全不匹配。面试现场常常弥漫着尴尬的气氛,对比后的面试结果不言而喻!
我们先来体验一把真实的面试连环枪。
那么,为什么这些妓院会出现这种情况呢?让我们一起来看看前锋广Java边肖吧!
首先我们来看看一二线互联网公司的真实面试现场,看看大公司的面试官是怎么提问的。
简单来说,一些中大型互联网公司的面试官在面试应聘者时,一般会采用连环枪的策略,深入挖掘一个应聘者的技术水平。
比如说你的简历上写着熟悉的消息中间件(MQ技术)。那么也许我们会有如下的连环枪问题:
贵公司的在线生产环境中使用的是什么消息中间件?
那么你的在线系统的技术挑战是什么,为什么一定要在系统中引入消息中间件?
你的消息中间件技术为什么选择RabbitMQ?
为什么不用RocketMQ或者卡夫卡?技术选择的依据是什么?
如何保证消息中间件的高可用性?避免消息中间件故障导致的整体系统故障?
使用消息中间件技术时,如何保证传递的消息不会丢失?
如何保证只有一条消息且只有一条消息,不会出现重复数据?
如果重复消费消息,如何保证数据的准确性?
当您在您的在线业务中使用消息中间件时,您需要确保消息的顺序吗?
如果不需要保证消息顺序,为什么不呢?如果我有一个保证消息顺序的场景,你该怎么保证?
如果下游消费者系统宕机,导致消息中间件积压了上百万条消息,此时如何处理?
你在网上遇到过消息积压的制作失败吗?如果没有,想想怎么处理。
你用RabbitMQ?RabbitMQ的底层架构原理、逻辑架构、物理架构、数据持久化机制怎么样?
你的RabbitMQ每秒的QPS峰值是多少?它是如何在线部署的,部署了多少台机器,机器是如何配置的?
你用卡夫卡?然后说说Kafka的底层架构原理,如何在磁盘上存储数据,如何实现整体的分布式架构?
先说卡夫卡如何保证数据的高容错性。零拷贝等技术是如何使用的?如何在高通量下优化生产者和消费者的绩效?
你读过卡夫卡的源代码吗?如果有,说说你对卡夫卡源代码的理解?
你用RocketMQ?RocketMQ的一大特点是支持分布式事务。你能告诉我这个机制的基本原理吗?
你看过RocketMQ的源代码吗?说说你对RocketMQ源代码的理解?
如果要求您实现一个分布式消息中间件,您将如何设计和实现整体架构?
以上只是MQ相关技术问题的一部分。其实更好的面试官的问题是从技术方面,技术点,项目实践来提问。
技术广度调查
首先考察应聘者的技术完整性,因为工作中需要有一定的技术眼光,不能只懂消息中间件,而对分布式缓存一无所知。
类似上次高考,你语文特别好,物理特别差,也是不合适的。
所以工程师首先要避免自己的技术短板,尤其是有三到五年经验的学生,他们已经完全度过了职业生涯人生的初级阶段。
所以你在工作三到五年的时候,一定要保证自己的技术绝对没有短板,技术栈作为一个整体,多多少少要知道一些东西,不能有盲点。
例如,我现在问你,在你的公司里有没有可以使用NoSQL的业务场景?现在国内公司都在用什么类型的NoSQL技术?NoSQL能解决什么问题?
如果什么都不懂,这就是典型的技术短板。你至少需要一个大概的概念,每种技术一般什么时候用,怎么用,解决了什么问题。
所以上面提到的技术包括消息中间件、分布式缓存、海量数据、分布式搜索、NoSQL、分布式架构、高并发、高可用、高性能。工作几年的同学,并不是真的要求掌握源码水平。
意思是工作几年后,你要有一定的技术广度和广阔的技术视野。
底层技术调查
现在很多互联网巨头都会有一个基础调查。比如可以处理Java虚拟机的核心原理,内存模型,垃圾回收,在线FullGC性能优化,在线OOM内存溢出。
Java并发中的Volatile、锁优化和AQS源代码;
Netty背后的IO和网络知识。
实际上,这种底层技术是在线高负载大型系统的架构设计和开发所必需的。
由于底层技术不扎实,很多中间件或者其他高层技术都无法深入理解其原理。
而且很多时候,需要这些技术来解决在线系统的生产故障。所以,掌握底层技术是一个优秀工程师必须具备的素质。
技术深度调查
另外,对于考生日常工作中熟悉和常用的一些技术,我们一定会进行深入的研究。
例如,您在项目中使用了Redis或Elasticsearch。
只要你用过,而且是你一个项目中的核心技术,你一定会用连环枪提问,深入到各种细节,底层,以及生产环境中可能遇到的技术挑战。
简而言之,就是要用压力测试来了解你这个技术水平掌握的有多深,实际操作经验有多强。
好的面试官,技术功底扎实,可以就一项技术问一系列连环枪,比如上面的消息中间件连环枪。
而且,只要面试官比应聘者更有技术深度,就有可能通过深化提问,找出应聘者在自己熟悉的技术领域的技术深度。
举个例子,比如你是否掌握了一项源代码层面的技术?
是否对一个框架或中间件的底层源代码实现有深刻的理解,并从源代码层面解释其架构原理?
这项技术在网上是否有高度可用的部署,以过多的并发流量进行访问?
你为这个技术在线生产环境解决了各种复杂的技术挑战吗?
您是否将该技术应用到您的业务系统中,并设计各种复杂的系统架构?
通过这种连环枪,可以很好的考察一个考生对技术深度的掌握。
技术深度的考察是中大型互联网公司面试官考察一个大四/大四候选人的必经之路。
因为如果一个人工作了5年以上来应聘高级职位,那么我们肯定要求他至少在一个技术领域有比较深入的研究。
比如你至少要深入阅读一个热门技术的核心源代码,有一定的技术基础,能解决一些复杂的在线故障。
技术的广度决定了你可以利用各种技术做项目,但是技术的深度决定了你的技术基础。
未来你学习新事物的速度有多快,能否快速定位并解决线上系统故障,能否基于对技术的深刻理解,为公司的项目设计开发出复杂优秀的架构,这些都取决于技术的深度。
摘要
综上所述,本文用一个面试连环枪,引出大中型互联网公司的面试官通常是如何提问的。
然后从技术广度、底层技术、技术深度三个角度,大致说说如何考察考生的技能。
知己知彼,面试也是一样。只有真正了解面试官的选择标准和考察范围,才能更好的做好针对性的准备,成为一个会走路的“offer收割机”
- 2024-04-22 中专100多分没有五年专全日制福州
- 2024-04-22 厦门职高学费多少
- 2024-04-22 华天职业技术学校
- 2024-04-22 宁德古田技校
- 2024-04-22 厦门市有哪些职业技术学校