前言

最近,金九银十在即,很多人都在准备面试,特别给大家总结了 Java 程序员面试必备题,这份面试清单是我从 去年开始收集的,一方面是给公司招聘用,另一方面是想用它来挖掘我在 Java 技术栈中的技术盲点,然后修复和完善它,以此来提高自己的技术水平。下文主要是我个人的总结方法经验(面试学习和刷题笔记),都整理有PDF完整版,有需要的可以看文末有领取方式

面试题模块介绍

说了这么多,直奔主题,我们这份面试题,总内容包含了十九个模块:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql、Redis、JVM 。如下图所示:

可能对于初学者不需要看后面的框架和 JVM 模块的知识,读者朋友们可根据自己的情况,选择对应的模块进行阅读。

适宜阅读人群

  • 需要面试的初/中/高级 Java 程序员

  • 想要查漏补缺的人

  • 想要不断完善和扩充自己 Java 技术栈的人

  • Java 面试官

Java 基础

  • JDK 和 JRE 有什么区别?

  • == 和 equals 的区别是什么?

  • 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?

  • final 在 java 中有什么作用?

  • java 中的 Math.round(-1.5) 等于多少?

  • String 属于基础的数据类型吗?

  • java 中操作字符串都有哪些类?它们之间有什么区别?

  • String str="i"与 String str=new String(“i”)一样吗?

  • 如何将字符串反转?

  • String 类的常用方法都有那些?

  • 抽象类必须要有抽象方法吗?

  • 普通类和抽象类有哪些区别?

  • 抽象类能使用 final 修饰吗?

  • 接口和抽象类有什么区别?

  • java 中 IO 流分为几种?

  • BIO、NIO、AIO 有什么区别?

  • Files的常用方法都有哪些?

注意:下文主要是我个人的总结方法经验(面试学习和刷题笔记),都整理有PDF完整版,有需要的可以关注我的公众号前程有光自取

多线程

  • 并行和并发有什么区别?

  • 线程和进程的区别?

  • 守护线程是什么?

  • 创建线程有哪几种方式?

  • 说一下 runnable 和 callable 有什么区别?

  • 线程有哪些状态?

  • sleep() 和 wait() 有什么区别?

  • notify()和 notifyAll()有什么区别?

  • 线程的 run()和 start()有什么区别?

  • 创建线程池有哪几种方式?

  • 线程池都有哪些状态?

  • 线程池中 submit()和 execute()方法有什么区别?

  • 在 java 程序中怎么保证多线程的运行安全?

  • 多线程锁的升级原理是什么?

  • 什么是死锁?

  • 怎么防止死锁?

  • ThreadLocal 是什么?有哪些使用场景?

  • 说一下 synchronized 底层实现原理?

  • synchronized 和 volatile 的区别是什么?

  • synchronized 和 Lock 有什么区别?

  • synchronized 和 ReentrantLock 区别是什么?

  • 说一下 atomic 的原理?

四、反射

  • 什么是反射?

  • 什么是 java 序列化?什么情况下需要序列化?

  • 动态代理是什么?有哪些应用?

  • 怎么实现动态代理?

异常

  • throw 和 throws 的区别?

  • final、finally、finalize 有什么区别?

  • try-catch-finally 中哪个部分可以省略?

  • try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?

  • 常见的异常类有哪些?

Spring

  • 为什么要使用 spring?

  • 解释一下什么是 aop?

  • 解释一下什么是 ioc?

  • spring 有哪些主要模块?

  • spring 常用的注入方式有哪些?

  • spring 中的 bean 是线程安全的吗?

  • spring 支持几种 bean 的作用域?

  • spring 自动装配 bean 有哪些方式?

  • spring 事务实现方式有哪些?

  • 说一下 spring 的事务隔离?

  • 说一下 spring mvc 运行流程?

  • spring mvc 有哪些组件?

  • @RequestMapping 的作用是什么?

  • @Autowired 的作用是什么?

Spring Boot

  • 什么是 spring boot?

  • 为什么要用 spring boot?

  • spring boot 核心配置文件是什么?

  • spring boot 配置文件有哪几种类型?它们有什么区别?

  • spring boot 有哪些方式可以实现热部署?

  • jpa 和 hibernate 有什么区别?

  • 什么是 spring cloud?

  • spring cloud 断路器的作用是什么?

  • spring cloud 的核心组件有哪些?

Mybatis

  • mybatis 中 #{}和 ${}的区别是什么?

  • mybatis 有几种分页方式?

  • RowBounds 是一次性查询全部结果吗?为什么?

  • mybatis 逻辑分页和物理分页的区别是什么?

  • mybatis 是否支持延迟加载?延迟加载的原理是什么?

  • 说一下 mybatis 的一级缓存和二级缓存?

  • mybatis 和 hibernate 的区别有哪些?

  • mybatis 有哪些执行器(Executor)?

  • mybatis 分页插件的实现原理是什么?

  • mybatis 如何编写一个自定义插件?

Kafka

  • kafka 可以脱离 zookeeper 单独使用吗?为什么?

  • kafka 有几种数据保留的策略?

  • kafka 同时设置了 7 天和 10G 清除数据,到第五天的时候消息达到了 10G,这个时候 kafka 将如何处理?

  • 什么情况会导致 kafka 运行变慢?

  • 使用 kafka 集群需要注意什么?

Zookeeper

  • zookeeper 是什么?

  • zookeeper 都有哪些功能?

  • zookeeper 有几种部署模式?

  • zookeeper 怎么保证主从节点的状态同步?

  • 集群中为什么要有主节点?

  • 集群中有 3 台服务器,其中一个节点宕机,这个时候 zookeeper 还可以使用吗?

  • 说一下 zookeeper 的通知机制?

MySql

  • 数据库的三范式是什么?

  • 一张自增表里面总共有 7 条数据,删除了最后 2 条数据,重启 mysql 数据库,又插入了一条数据,此时 id 是几?

  • 如何获取当前数据库版本?

  • 说一下 ACID 是什么?

  • char 和 varchar 的区别是什么?

  • float 和 double 的区别是什么?

  • mysql 的内连接、左连接、右连接有什么区别?

  • mysql 索引是怎么实现的?

  • 怎么验证 mysql 的索引是否满足需求?

  • 说一下数据库的事务隔离?

  • 说一下 mysql 常用的引擎?

  • 说一下 mysql 的行锁和表锁?

  • . 说一下乐观锁和悲观锁?

  • mysql 问题排查都有哪些手段?

  • 如何做 mysql 的性能优化?

Redis

  • redis 是什么?都有哪些使用场景?

  • redis 有哪些功能?

  • redis 和 memecache 有什么区别?

  • redis 为什么是单线程的?

  • 什么是缓存穿透?怎么解决?

  • redis 支持的数据类型有哪些?

  • redis 支持的 java 客户端都有哪些?

  • jedis 和 redisson 有哪些区别?

  • 怎么保证缓存和数据库数据的一致性?

  • redis 持久化有几种方式?

JVM

  • 说一下 jvm 的主要组成部分?及其作用?

  • 说一下 jvm 运行时数据区?

  • 说一下堆栈的区别?

  • 队列和栈是什么?有什么区别?

  • 什么是双亲委派模型?

  • 说一下类加载的执行过程?

  • 怎么判断对象是否可以被回收?

  • java 中都有哪些引用类型?

  • 说一下 jvm 有哪些垃圾回收算法?

  • 说一下 jvm 有哪些垃圾回收器?

  • 详细介绍一下 CMS 垃圾回收器?

  • 新生代垃圾回收器和老生代垃圾回收器都有哪些?有什么区别?

  • 简述分代垃圾回收器是怎么工作的?

  • 说一下 jvm 调优的工具?

  • 常用的 jvm 调优的参数都有哪些?

最后

作为一名技术人,对大厂有着执念,那就要落实下来,相信自己付出是会有所回报的。在这,我也祝大家在接下来的金九银十里,面试顺利,过关斩将,拿下offer。

以上文章里写到的所有文档资料,均免费分享,有需要的关注我的公众号:前程有光获取
对于大厂面试,我最后想要强调的一点就是心态真的很重要,是决定你在面试过程中发挥的关键,若不能正常发挥,很可能就因为一个小失误与offer失之交臂,所以一定要重视起来。另外提醒一点,充分复习,是消除你紧张的心理状态的关键,但你复习充分了,自然面试过程中就要有底气得多。

历时两年零三个月,从刚毕业的外包到现在的阿里P7offer,我只做了这几件事的更多相关文章

  1. 前端leader找我谈心:我是如何从刚毕业的前端菜鸟一步步成长为前端架构师的?

    谈谈学习 我做前端已经有五年的时间了,从大学刚毕业的时候,我是一个完全什么都不懂的小白.虽然我大学里学的是软件工程专业,但是因为在大学里荒废学业,每天只知道打游戏,基本上到大学毕业之前我是什么都不会的 ...

  2. 刚安装Fedora 23工作站后,你必须要做的24件事

    [51CTO.com快译]Fedora 23工作站版本已发布,此后我们就一直在密切关注它.我们已经为新来读者介绍了一篇安装指南:<Fedora 23工作站版本安装指南> 还有一篇介绍如何从 ...

  3. 从刚毕业的5K测试到20K测试大佬,与薪资相匹配的永远是实力!

    有个话题"软件测试的工资高还是开发者的工资高?"软件测试和软件开发门槛有差异,在职业起步阶段收入也会有一定的差异,这算是行业内公开的秘密.但随着工作年限的增加,经验的逐步积累,软件 ...

  4. 刚毕业去面试Python工程师,这几道题太难了,Python面试题No11

    写在前面 本想停一段时间这个系列,但是好多朋友给我发信息说让我继续整理下去,so,继续吧~ 第1题: docstring是什么? docstring是一种文档字符串,用于解释构造的作用.我们在函数.类 ...

  5. Mysql数值类型,小数点后保留两个零

    如有不足请帮忙留言区补充谢谢~ 一,数值类型保留小数点后两个0 在存入数据时,应客户需求数值类型,比如钱数,分数等等需要精确到小数点后几位. 800存入时显示为800.00 方法:在建表时直接定义此数 ...

  6. [开源福利] FreeRedis 历时两年正式发布 v1.0 [C#.NET Redis Client]

    最近很多 .net QQ 群无故被封停,特别是 wpf 群几乎全军覆没.依乐祝的 .net6交流群,晓晨的 .net跨平台交流群,导致很多码友流离失所无家可归,借此机会使用一次召唤术,有需要的请加群: ...

  7. 与R纠缠的两件事——rownames和子集--转载

    与R语言纠缠了一个星期,从快速上手的暗暗得意,到之后某些细节的纠结烦躁,过山车式体验中,我逐渐才认识了真实的R语言. 期间遇到两个很烦恼的问题,一个是让人烦躁抓狂,另一个是无意发现的重大错误. 1.  ...

  8. 让一个端口同时做两件事:http/https和ssh

    相信很多人都在YY:能不能让80端口分析连接协议,如果是http协议就让服务器交给http服务程序(如Apache.Nginx等)处理,如果是ssh协议就交给ssh服务程序(如OpenSSH Serv ...

  9. cf276E 两棵线段树分别维护dfs序和bfs序,好题回头再做

    搞了一晚上,错了,以后回头再来看 /* 对于每次更新,先处理其儿子方向,再处理其父亲方向 处理父亲方向时无法达到根,那么直接更新 如果能达到根,那么到兄弟链中去更新,使用bfs序 最后,查询结点v的结 ...

随机推荐

  1. C# 判断当前目录是否存在不存在则创建

    /// <summary> /// 判断目录是否存在不存在则创建 /// </summary> /// <param name="Path">& ...

  2. 对象部分初始化:原理以及验证代码(双重检查锁与volatile相关)

    对象部分初始化:原理以及验证代码(双重检查锁与volatile相关) 对象部分初始化被称为 Partially initialized objects / Partially constructed ...

  3. Codeforces Round #678 (Div. 2)

    Codeforces Round #678 (Div. 2) A. Reorder 题意:有一个有 n 个数的序列 a ,以及一个数 m ,问能否给序列a重新排序,能够满足式子 $\sum_{i=1} ...

  4. .NET CORE 3.1.5 跨域设置

    1.Startup配置 1 #region 跨域设置 2 //注意:放到services.AddMvc()之前 3 services.AddCors(options => { 4 options ...

  5. 支持向量机SVM基本问题

    1.SVM的原理是什么? SVM是一种二类分类模型.它的基本模型是在特征空间中寻找间隔最大化的分离超平面的线性分类器.(间隔最大是它有别于感知机) 试图寻找一个超平面来对样本分割,把样本中的正例和反例 ...

  6. Dev中配置graphcis.h

    下载地址:http://winbgim.codecutter.org/ 搞得自己有点奔溃 没成功 尝试了全网的所以的方法都没成功

  7. Gym102012G Rikka with Intersections of Paths

    题意 \(T\) 组数据,每组数据给定一棵 \(n\) 个点的树和 \(m\) 条路径,求选出 \(k\) 条给定路径使得至少有两条交于一点的方案数,对 \(10^9+7\) 取模. \(\textt ...

  8. MONGODB03 - 分组计数_分组去重计数(基于 spring-data-mongodb)

    前因 项目中有查询MongoDB单表统计相关功能,涉及到MongoDB数据聚合相关操作,其中在多字段分组去重计数相关操作API上资料较少,spring-data-mongodb相关的API介绍也不够直 ...

  9. LWJGL3的内存管理,第二篇,栈上分配

    LWJGL3的内存管理,第二篇,栈上分配 简介 为了讨论LWJGL在内存分配方面的设计,本文将作为该系列随笔中的第二篇,用来讨论在栈上进行内存分配的策略,该策略在 LWJGL3 中体现为以 Memor ...

  10. JQuery cdn地址

    国外的CDN: 1.Google Hosted Libraries src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery ...