收到不少读者反馈,说自己在应聘一些中大型互联网公司的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收割机”。

转载于:https://juejin.im/post/5cbd71e0f265da03981fc536

2019热门JAVA面试问题相关推荐

  1. Java基础2019最新Java面试经典题解析

    Java基础2019最新Java面试经典题解析 1简述JVM.JRE.JDK的区别 JVM:java虚拟机 ,加载.class并运行.class JRE:java运行环境除了包含JVM以外还包含了运行 ...

  2. (转)Java面试题汇总:2019年Java面试法宝!

    转载自:http://java.tedu.cn/news/367666.html 今天是2019年的第一天开工,2019年准备跳槽,面试获得高薪的小伙伴你准备好了吗?互联网公司的招聘公告马上都更新了, ...

  3. 15个热门Java面试项目整合,吃透它,大厂offer拿到手软

    今天分享的春招系列,包括了最近热门的JeeSite.XMall商城.Cloud-Platform商城.Piggy Metrics等 15 个专题技术点,都是小编在各个大厂总结出来的面试真题,已经有很多 ...

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

    程序员的成长之路 互联网/程序员/技术/资料共享 关注 阅读本文大概需要 8分钟. 来自:网络 本人6年开发经验.今年年初找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.滴滴等公司offer,岗位是 ...

  5. java面试宝典2019(总结)

    推荐面试视频教程 2019最全BATJ面试免费视频教程 java面试宝典2019 1. meta标签的作用是什么 2. ReenTrantLock可重入锁(和synchronized的区别)总结 3. ...

  6. java面试宝典2019(好东西先留着)

    java面试宝典2019 1.meta标签的作用是什么 2.ReenTrantLock可重入锁(和synchronized的区别)总结 3.Spring中的自动装配有哪些限制? 4.什么是可变参数? ...

  7. java面试宝典备份

    转自:  https://blog.csdn.net/HuaZi_Myth/article/details/93894334 java面试宝典备份 1.[ meta标签的作用是什么](http://w ...

  8. 2020年Java面试经典100问,进入BAT不是梦

    本文由公众号「Java旅途」整理,设计到的内容由java基础.数据库.SSM框架.redis.消息队列.spring boot.spring cloud.git及一些前端知识.整理时间为2019-11 ...

  9. 【附答案】Java面试2019常考题目汇总(一)

    转载自  [附答案]Java面试2019常考题目汇总(一) 一.JAVA基础篇-概念 1.简述你所知道的Linux: Linux起源于1991年,1995年流行起来的免费操作系统,目前, Linux是 ...

最新文章

  1. exe编辑器_windows下的EXE文件大揭密
  2. poj2553(强连通分量)
  3. SpringMVC + MyBatis整合 【转】
  4. Java程序员必备:序列化全方位解析
  5. oracle夜未眠之一增删改查
  6. nyoj-976-Youth的最大化(贪心+二分)
  7. mysql插入timeStamp类型数据时间相差8小时的解决办法
  8. shp与json互转(转载)
  9. js几种数组排序及sort的实现
  10. 挣多少钱让你觉得生存无忧,有底气做感兴趣的事?
  11. 最大堆和最小堆和平衡二叉树_最小堆二叉树
  12. Android获取地理坐标,Android 通过经纬度获取地理位置信息
  13. 遥感影像数据产品级别
  14. 1137: 查找最大元素 C语言
  15. 2011 imac 固态_老款iMac 安装SSD固态硬盘
  16. Windows7无法显示.png、.jpg图片缩略图的问题
  17. C++ Primer Plus读书笔记
  18. Scratch少儿编程与游戏:一起拍蚊子吧
  19. IDEA中搜索 matches limit 默认显示100,调整限制,增加搜索返回数量
  20. CRUX下实现进程隐藏(1)

热门文章

  1. CSS3伪类和伪元素的特性和区别
  2. J2EE项目移植问题一
  3. Escape Time II 简单的深搜dfs()
  4. 如何给英特尔致命一击——高通公布10纳米ARM服务器芯片
  5. MVC 区域内默认控制器不能访问(Multiple types were found that match the controller named ‘Index')...
  6. 【EntityFramework系列教程三,翻译】在ASP.NET MVC程序中使用EntityFramework对数据进行排序、过滤筛选以及实现分页...
  7. mysql 存储中文问题
  8. 今天不聊我这些啦,来聊聊我们这种外行对你们的了解吧
  9. linux修改主机名+免密认证+关闭防火墙
  10. iOS走近商城APP(四 runloop应用 获取通讯录并处理)