Java 面试虐我千百遍,我带面试如初恋【觉得值得收藏】

Hello 大家好,传说中的金三银四就在当下,阿粉知道很多小伙伴都在蠢蠢欲动,明修栈道暗度陈仓,表面上还在公司踏踏实实的干着,心里早就有了自己的小算盘。作为一个 Java 工程师,涉及到的领域会很多,每次面试都会被问到头破血流,阿粉今天就给大家带来一份面试题目,具体是哪家公司的阿粉就不说了,因为不管哪家其实都差不多,重点是自己要完全掌握,才能更好的应对。

技术细节

第一个部分我们先来看技术细节,往往很多公司的第一面都是考察技术细节的,小伙伴们如果在面试的过程中经常一面没有过的话,那往往是基础不扎实,这个时候我们就需要静下心来,好好的补一下基础知识,看看面经刷刷题,或者看看我们 Java 极客技术的文章都是可以的。

  1. 三分钟自我介绍

    自我介绍这块是面试的一个开场白,这块没什么好说的,不过建议大家可以将自己想表述的内容以文字的形式写下来,然后熟练的背诵下来,这样不管是在电话面试,视频面试还是现场面试都能够流畅的有条理的表述出来。

  2. 最熟悉的领域是什么?

    这个问题给大家一个忠告!千万别说自己不会的领域,不然整个面试还没开始就已经结束了,千万别为了表现,说自己什么领域都擅长,这样在被面试官问了几个问题都答不上来的话,那基本上就判了死刑了,而且整个印象都不会好,以后再想面试都很难了。所以这里我们实事求是就好,熟悉什么就说什么,不熟悉的就不说。

  3. Redis 的常用数据类型有哪些?

    Redis 常用的五大数据类型,StringHashListSetSorted Set。然后不要说完这几个类型就不说了,可以再扩展下,顺便可以说下每种数据类型在自己的项目里面是否有用到,具体使用在什么地方,为什么选用这种类型。面试的过程中虽然说是一问一答,但是也要适当的扩展一下,把自己知道的东西稍等多说一点,让面试官知道你是真正的了解。问你数据类型有哪些你就回答有这五个,这样的面试就比较枯燥,很难继续进展下去,给面试官的印象就不好。

  4. Redis 的持久化了解吗?有几种方式,区别是什么?

    关于 Redis 的持久化,我们公众号之前有篇文章专门写了,大家可以看下面试官:请说下 Redis 是如何保证在宕机后数据不丢失的

  5. Redis 的三种集群模式了解吗?

    关于 Redis 的集群模式不管自己有没有搭建过,都可以把自己知道的说出来,主从模式,哨兵模式,集群模式,以及三种模式的区别。

  6. Redis 的主从数据是如何同步的?

    Redis 的主从数据同步跟上面的集群模式这两点都可以单独成一篇文章了,后期阿粉单独分享。

  7. Redis 使用的场景?

    Redis 作为目前主流的缓存数据库,使用的场景有很多,用户 token 的存储,热点数据的存储,当成队列使用,分布式锁,计数器,布隆过滤器等等,结合自己项目中使用的场景可以跟面试官多聊一下。

  8. Redis 为何性能如此高?

    Redis 官文号称最高 QPS 可以达到十万,那么问什么 Redis 可以有这么高的并发呢?主要是 Redis 采用多路复用 IO 模型,在处理命令的时候是采用单线程去处理的,同时 Redis 的底层采用 C 语言编写,数据结构也相对简单,所以才能如此快速。

  9. MySQL 的存储引擎有哪些,InnoDB 和 MyISAM有什么区别?

    MySQL 常用的存储引擎主要有 InnoDB 和 MyISAM 以及 Memory,其中关于 InnoDB 和 MyISAM 的区别公众号前面有文章详细说过,感兴趣的小伙伴可以看一下面试必问的 MySQL 知识点,你还有哪些没准备好,赶紧收藏脑图!

  10. 什么是事务?事务的隔离级别有哪些?为什么需要事务的隔离级别?

事务的内容在上面的文章里面也有详细说到,可以进去看下。

  1. SQL 优化方面的内容?分库分表是怎么做的?

    关于 SQL 优化也是一个老生常谈的话题,在面试中也经常会被问到,关于 SQL 优化,有一篇文章很不错,推荐给大家,里面讲到了很多优化的点,认真记下来对我们很有帮助52条SQL语句性能优化策略,建议收藏

  2. MySQL 的索引采用的是什么存储结构?为什么采用这个?

    MySQL 的索引也是一个面试中逃避不了的一个问题,详细的内容可以参考公号前面的文章为什么Mysql的常用引擎都默认使用B+树作为索引?

  3. Java 中的线程池有哪些默认实现,几个核心参数是如何配合工作的?拒绝策略有哪些?

    Java 中的线程池有默认的实现,但是日常工作的时候我们一般都会手动创建线程池,具体的内容可以看文章面试官因为线程池,让我出门左拐!聊聊面试中的 Java 线程池

  4. Java 中 volatile, synchronized 的作用是什么?

    这两个关键词在 Java 中的重要性已经不言而喻了,不用阿粉在多说什么了,那对于这两个关键词小伙伴都理解了吗?同样的,我们前面也有写过,诡异的并发之可见性

  5. 什么是类加载机制?

    啥也不说了,直接看文章 JVM 是如何加载 Java 类的?,相信看完你就懂了。

看完上面 15 个面试题,很容易发现一个问题,那就是真正面试的时候很多东西我们公众号之前都有写过,只要好好的把这些东西消化了,再加上面试的时候好好发挥,不说一定能拿到 offer,至少前几面都能很完美的过。看到这样是不是觉得这篇文章值得收藏呢?收藏起来,以后在面试前或者面试别人的时候都可以拿出来用一用。

项目部分

上面提到的是一些技术细节,其实还有很多很多东西,毕竟 Java 的领域涉及到很多地方,像这种面试题简直可以无休止的问下去。聊完了技术细节,后面一般都是针对项目开始询问,每个人的项目不一样,涉及的领域也不一样,不具有参考性,但是一些通用的问题还是要准备下的,比如

  1. 项目运用到了哪些技术,整个的框架是什么样子的?
  2. 你在这个项目中主要负责哪些内容,你是怎么设计的?
  3. 在做这个项目的时候有没有遇到什么技术难点,你是怎么解决的?
  4. 项目上线后的 QPS 是多少,用户量有多少,有没有出现过 Fullgc 或者线上 OOM 的情况,你是如何处理的?
  5. 模块与模块之前是怎样调用的?HTTP 还是 RPC?RPC 框架用的是什么?了解其实现原理吗?
  6. 做这个项目的目的是什么?你对项目所涉及的行业有了解吗?

上面这几个都是日常做项目的时候需要知道和思考的,技术上面涉及到的东西肯定要知道,在最后一个问题上面往往很多小伙伴会忽略,认为不就是一个项目吗?关行业什么事情?其实不是这样的,了解了一个项目的背景和价值可以更好的帮忙我们理解业务需求,从而做到更好的实现,而且对于一些想在某个方向长期发展的朋友,那就更有必要了。

架构部署方面

  1. 你们项目是分布式的吗?怎么部署的?
  2. 如何在不增加机器的情况下提升 QPS?
  3. 如何降低各个服务或者机房之间网络通信耗时?
  4. 如果机房突然出现故障如何保证数据不丢失?
  5. 当下游服务出现问题时如何做熔断限流保证自己的服务不受影响?

上面几个问题是阿粉遇到的几个架构部署相关的问题,关于这一方面阿粉也不是特殊熟悉,所以就不做回答了,相信关注阿粉的小伙伴都是厉害的,可以在我们的留言下面回答下,大家一起学习谈论,帮助他人同时也是提升自己。

Java Geek Tech wechat
欢迎订阅 Java 极客技术,这里分享关于 Java 的一切。