收到不少读者反馈,说自己在应聘一些中大型互联网公司的Java工程师岗位时遇到了不少困惑。

  这些同学说自己也做了精心准备,网上搜集了不少Java面试题,然而实际去互联网公司面试才发现,人家问的,和你准备的对不上号,这就很尴尬了。。。

  主要跟大家聊聊中大型互联网公司Java面试中的一些热门、高频的技术问题。

  希望这个系列的文章,能在年后金三银四的跳槽季中,助各位小伙伴一臂之力。

  二、先来体验一个真实的面试连环炮

  好,闲话不多说,我们进入正题!

  本系列文章,我们将会从消息中间件、分布式缓存、分布式搜索、分布式架构、海量数据、NoSQL、高并发、高可用、高性能、数据库、JVM虚拟机等各方面聊一下面试中的高频技术问题。

  现在一些中大型互联网公司的面试官,在面试候选人时,一般都会采取连环炮的策略来深挖一个候选人的技术水平。

  

  举个例子,比如说看你简历上写了熟悉消息中间件(MQ技术)。那么可能我们就会有一个类似下面这样的连环炮式发问:

  说说你们公司线上生产环境用的是什么消息中间件?

  那你们线上系统是有哪些技术挑战,为什么必须要在系统里引入消息中间件?

  你们的消息中间件技术选型为什么是RabbitMQ?

  为什么不用RocketMQ或者是Kafka?技术选型的依据是什么?

  你们怎么保证消息中间件的高可用性?避免消息中间件故障后引发系统整体故障?

  使用消息中间件技术的时候,你们怎么保证投递出去的消息一定不会丢失?

  你们怎么保证投递出去的消息只有一条且仅仅一条,不会出现重复的数据?

  如果消费了重复的消息怎么保证数据的准确性?

  你们线上业务用消息中间件的时候,是否需要保证消息的顺序性?

  如果不需要保证消息顺序,为什么不需要?假如我有一个场景要保证消息的顺序,你们应该如何保证?

  下游消费系统如果宕机了,导致几百万条消息在消息中间件里积压,此时怎么处理?

  你们线上是否遇到过消息积压的生产故障?如果没遇到过,你考虑一下如何应对?

  你们用的是RabbitMQ?那你说说RabbitMQ的底层架构原理,逻辑架构、物理架构以及数据持久化机制?

  你们RabbitMQ的最高峰QPS每秒是多少?线上如何部署的,部署了多少台机器,机器的配置如何?

  你们用的是Kafka?那你说说Kafka的底层架构原理,磁盘上数据如何存储的,整体分布式架构是如何实现的?

  再说说Kafka是如何保证数据的高容错性的?零拷贝等技术是如何运用的?高吞吐量下如何优化生产者和消费者的性能?

  看过Kafka的源码没有。如果看过,说说你对Kafka源码的理解?

  你们用的是RocketMQ?RocketMQ很大的一个特点是对分布式事务的支持,你说说他在分布式事务支持这块机制的底层原理?

  RocketMQ的源码看过么,聊聊你对RocketMQ源码的理解?

  如果让你来动手实现一个分布式消息中间件,整体架构你会如何设计实现?

  上面仅仅是MQ相关技术问题的一部分,实际上,一个比较好的面试官的问题,就是从技术面、技术点、项目实践几块来抽丝剥茧的发问。

  三、技术广度的考察

  首先考察候选人技术面的完整性,因为工作中是需要具备一定的技术视野的,不能说光知道消息中间件,但是分布式缓存却一无所知。

  类似于以前高考的时候,你语文特别好,结果物理特别差,那也是不太合适的。

  所以工程师首先要避免自己的技术短板,尤其是三到五年经验的同学,已经彻底度过了自己人生的职场生涯的初期小白入门菜鸟阶段。

  所以,务必在工作三到五年的时候,保证自己的技术绝对没有任何短板,整体技术栈要或多或少都知道一些,不能出现盲区。

  

  比如,我现在问你,你们公司有没有什么业务场景是可以用NoSQL的?现在国内各个公司用NoSQL的技术都有哪些选型?具体NoSQL可以解决什么问题?

  如果你一问三不知,这就是典型的技术短板,你至少需要大概知道,每个技术一般在什么情况下用,怎么来用,解决的是什么问题。

  因此,上面说的消息中间件、分布式缓存、海量数据、分布式搜索、NoSQL、分布式架构、高并发、高可用、高性能这些技术。并不是说真的要求工作几年的同学都要精通到源码层面。

  而是说你工作几年以后,应该有一定的技术广度,开阔的技术视野。

  四、底层技术的考察

  现在很多互联网大厂都会有基本功的考察,举个例子,Java虚拟机的核心原理、内存模型、垃圾回收、线上FullGC卡顿性能优化、线上OOM内存溢出问题你处理。

  Java并发中的volatile、锁优化、AQS源码;

  Netty背后的IO、网络相关的知识。

  其实这种底层技术,是线上高负载大型系统的架构设计和开发,必须要具备的。

  因为底层技术不扎实,很多中间件或其他高阶的技术,都无法深入理解其原理。

  而且很多时候,解决线上系统的生产故障,都需要这些技术。因此,底层技术的掌握是一个优秀工程师必须具备的素养。

  五、技术深度的考察

  此外,我们一定会深入考察候选人平时工作中熟悉的以及常用的一些技术。

  举个例子,比如你项目里用了Redis或者是Elasticsearch。

  只要你用过了,而且是你某个项目里的核心技术,那么一定会用连环炮式的发问,深入各种细节、底层、生产环境可能遇到的技术挑战。

  总之,就是要用压力测试出来你在这块技术水平掌握的到底有多深,实践经验有多强。

  一个好的面试官,自己本身技术功底扎实,是可以对一个技术问出一连串的连环炮的,就比如上面的那个消息中间件的连环炮发问。

  而且只要面试官在一个技术上的深度超过候选人,那么通过不断加深的发问,是可以考察出来一个候选人在自己最熟悉的技术领域的技术深度的。

  

  举个例子,比如说你对一个技术的掌握是否达到了源码级别?

  是否对某个框架,或者是中间件深入的理解底层的源码实现,从源码级别说清楚他的架构原理?

  是否对这个技术有过线上的高可用部署,承载过高并发流量的访问?

  是否对这个技术在线上生产环境解决过各种各样的复杂技术挑战?

  是否基于这个技术落地到你的业务系统中,设计出各种复杂的系统架构?

  通过这种连环炮,可以非常好的考察出某个候选人对技术深度的掌握。

  技术深度的考察是中大型互联网公司面试官对一个高级/资深的候选人必须考察的。

  因为如果一个人工作5年以上,来应聘高级职位的话,那我们绝对是要求他对至少一个技术领域有着较为深入的研究的。

  比如说起码你得深入阅读过某个热门技术的核心源码,有一定的技术功底,可以解决一些复杂的线上故障。

  技术广度决定了你可以利用各种技术来做项目,但是技术深度决定了你的技术功底。

  你未来学新东西有多快,线上系统出了故障你能否快速定位和解决,你能否基于对技术的深刻理解为公司的项目设计和开发出复杂而且优秀的架构出来,这都取决于技术深度。

  你只有真正了解了面试官的选拔标准,考察范围,才能更好的进行针对性的准备,成为行走的“offer收割机”。

2019热门JAVA面试问题的更多相关文章

  1. 2019滴滴java面试总结 (包含面试题解析)

    2019滴滴java面试总结  (包含面试题) 本人6年开发经验.今年年初找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.滴滴等公司offer,岗位是既有php也有Java后端开发,最终选择去了滴滴 ...

  2. 2019头条java面试总结 (包含面试题解析)

    2019滴滴java面试总结  (包含面试题) 本人8年开发经验.今年年初找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.滴滴等公司offer,岗位是Java后端开发. 面试了很多家公司,感觉大部分 ...

  3. 2019 北森java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.北森等公司offer,岗位是Java后端开发,因为发展原因最终选择去了北森,入职一年时间了,也成为了面试官,之 ...

  4. 2019 美柚java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.美柚等公司offer,岗位是Java后端开发,因为发展原因最终选择去了美柚,入职一年时间了,也成为了面试官,之 ...

  5. 2019 开创java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.开创等公司offer,岗位是Java后端开发,因为发展原因最终选择去了开创,入职一年时间了,也成为了面试官,之 ...

  6. 2019 荔枝java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.荔枝等公司offer,岗位是Java后端开发,因为发展原因最终选择去了荔枝,入职一年时间了,也成为了面试官,之 ...

  7. 2019 金蝶java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.金蝶等公司offer,岗位是Java后端开发,因为发展原因最终选择去了金蝶,入职一年时间了,也成为了面试官,之 ...

  8. 2019 学而思java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.学而思等公司offer,岗位是Java后端开发,因为发展原因最终选择去了学而思,入职一年时间了,也成为了面试官 ...

  9. 2019 游族网络java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.游族网络等公司offer,岗位是Java后端开发,因为发展原因最终选择去了游族网络,入职一年时间了,也成为了面 ...

随机推荐

  1. 处理jquery的ajax请求session过期跳转到登录页面

    首先需要在拦截器中判断是否是ajax请求,如果是 if(isAjaxRequest(request)){//ajax请求 response.setHeader("sessionstatus& ...

  2. pycharm+PyQt5+python最新开发环境配置,踩坑过程详解

    安装工具:Pycharm 专业版2017.3PyQT5python3 pyqt5-tools 设置扩展工具的参数找到setting->tools->external tools,点击加号新 ...

  3. 关于innodb_flush_log_at_trx_commit、innodb_flush_method、innodb_log_block_size和fsync()、O_DIRECT、iops、云盘的关系与总结

    想着整理关于innodb_flush_log_at_trx_commit.innodb_flush_method.innodb_log_block_size和fsync().O_DIRECT.iops ...

  4. 成绩统计程序(Java)

    我的程序: package day20181018;/** * 成绩统计系统 * @author Administrator */import java.util.Scanner;//提供计算机直接扫 ...

  5. kali linux 数据库分析工具简述

    bbqsql SQL盲注可能很难被利用. 当可用的工具工作时,它们运行良好,但是当它们不工作时,您必须编写自定义的东西. 这是耗时且乏味的. BBQSQL可以帮助你解决这些问题. BBQSQL是一个用 ...

  6. Ubuntu软件操作的相关命令

    Ubuntu软件操作的相关命令 sudo apt-get update ------------------------------- 更新源 sudo apt-get install package ...

  7. oracle数据库数据库表空间查询及扩充

    1.查询表空间,及表空间的大小 SELECT t.tablespace_name, round(SUM(bytes / (1024 * 1024)), 0) ts_size FROM dba_tabl ...

  8. XXXcannot be resolved to a type

    编写自动化测试用例一个新创建的用例中类继承了其他类,由于未知原因,eclipse没能自动编译源代码到build/classes(或其他classes目录)代码一直报错XXX cannot be res ...

  9. topcoder srm 330 div1

    problem1 link 直接模拟. import java.util.*; import java.math.*; import static java.lang.Math.*; public c ...

  10. linux内核中侧async_tx是什么?

    答: 异步内存传输api(asynchronous memory transfer/transform API),这是一种api,用来为应用提供操作DMA的API. 下图是async_tx在架构中所处 ...