全面总结 2022 年Java面试知识,掌握这些你也能进大厂
VM 的设计目标是提供一个基于抽象规格描述的计算机模型,为解释程序开发人员提供很好的灵活性,同时也确保 Java 代码可在符合该规范的任何系统上运行。JVM 对其实现的某些方面给出了具体的定义,特别是对 Java 可执行代码,即字节码(Bytecode)的格式给出了明确的规格。这一规格包括操作码和操作数的语法和数值、标识符的数值表示方式、以及 Java 类文件中的 Java 对象、常量缓冲池在 JVM 的存储映象。这些定义为 JVM 解释器开发人员提供了所需的信息和开发环境。Java 的设计者希望给开发人员以随心所欲使用 Java 的自由。
JVM
内存模型以及分区,需要详细到每个区放什么。
GC 收集器有哪些?CMS 收集器与 G1 收集器的特点。
Minor GC 与 Full GC 分别在什么时候发生?
堆里面的分区:Eden,survival (from+ to),老年代,各自的特点。
简述 java 垃圾回收机制?
java 中垃圾收集的方法有哪些?
类加载器双亲委派模型机制?什么是类加载器,类加载器有哪些?
简述 java 内存分配与回收策率以及 Minor GC 和 Major GC
网络协议
TCP、UDP 协议的区别
在浏览器中输入 url 地址 ->> 显示主页的过程
各种协议与 HTTP 协议之间的关系
HTTP 长连接、短连接
TCP 三次握手和四次挥手(面试常客)
MySQL 是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL 所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
MySQL
Mysql 的技术特点是什么?
MYSQL 数据表在什么情况下容易损坏?
说说自己对于 MySQL 常见的两种存储引擎:MyISAM 与 InnoDB 的理解
数据库索引了解吗?
能说下 MySQL 的基本存储结构吗?
Mysql 如何为表字段添加索引?
对于大表的常见优化手段说一下
mysql 里记录货币用什么字段类型好
当 MySQL 单表记录数过大时,数据库的 CRUD 性能会明显下降,有哪些常见的优化措施?
简单来说 redis 就是一个数据库,不过与传统数据库不同的是 redis 的数据是存在内存中的,所以存写速度非常快,因此 redis 被广泛应用于缓存方向。另外,redis 也经常用来做分布式锁。redis 提供了多种数据类型来支持不同的业务场景。除此之外,redis 支持事务 、持久化、LUA 脚本、LRU 驱动事件、多种集群方案。
Redis
为什么要用 redis /为什么要用缓存?
为什么要用 redis 而不用 map/guava 做缓存?
redis 和 memcached 的区别?
上述 Redis 分布式锁的缺点?
redis 常见数据结构以及使用场景分析
redis 内存淘汰机制(MySQL 里有 2000w 数据,Redis 中只存 20w 的数据,如何保证 Redis 中的数据都是热点数据?)
redis 持久化机制(怎么保证 redis 挂掉之后再重启数据可以进行恢复)?
缓存雪崩和缓存穿透问题解决方案?
如何解决 Redis 的并发竞争 Key 问题?
如何保证缓存与数据库双写时的数据一致性??
Spring 一般是不可避免的,如果你的简历上注明了你会 Spring Boot 或者 Spring Cloud 的话,那么面试官也可能会同时问你这两个技术,比如他可能会问你 springboot 和 spring 的区别。 所以,一定要谨慎对待写在简历上的东西,一定要对简历上的东西非常熟悉。
另外,AOP 实现原理、动态代理和静态代理、Spring IOC 的初始化过程、IOC 原理、自己怎么实现一个 IOC 容器? 这些东西都是经常会被问到的。
Spring
Spring Bean 的作用域?
如何用基于 Java 配置的方式配置 Spring?
请说下 Spring Bean 的生命周期?
Spring Bean 的作用域之间有什么区别?
请举例说明如何在 Spring 中注入一个 Java Collection?
Spring 框架中有哪些不同类型的事件?
Spring 框架中都用到了哪些设计模式?
开发中主要使用 Spring 的什么技术 ?
“RabbitMQ?”“Kafka?”“RocketMQ?”...在日常学习与开发过程中,我们常常听到消息队列这个关键词。这也是面试经常被问到的
消息队列
什么是消息队列?
为什么要用消息队列?丢消息怎么办?
如何解决消息重复问题?
ActiveMQ 中的消息重发时间间隔和重发次数吗?
ActiveMQ 服务器宕机怎么办?
ActiveMQ 如何调优?
Basic.Reject 的用法是什么?
为什么不应该对所有的 message 都使用持久化机制?
为什么 heavy RPC 的使用场景下不建议采用 disk node ?
Dubbo 是由阿里开源,后来加入了 Apache 。正式由于 Dubbo 的出现,才使得越来越多的公司开始使用以及接受分布式架构,所以面试时也是经常被问到的
Dubbo
什么是 Dubbo?
什么是 RPC?RPC 原理是什么?
为什么要用 Dubbo?
什么是分布式?为什么要分布式?
先来解释一下什么是负载均衡?
Dubbo 集群提供了哪些负载均衡策略?
Dubbo 支持哪些协议,每种协议的应用场景,优缺点?
Dubbo 的集群容错方案有哪些?
Dubbo 和 Spring Cloud 的关系?
数据结构比较常问的就是:二叉树、红黑树(很可能让你手绘一个红黑树出来哦!)、二叉查找树(BST)、平衡二叉树(Self-balancing binary search tree)、B-树,B+树与 B*树的优缺点比较、 LSM 树这些知识点。
数据结构很重要,而且学起来也相对要难一些。建议学习数据结构一定要循序渐进的来,一步一个脚印的走好。一定要搞懂原理,最好自己能用代码实现一遍。
数据结构
什么是队列
说下什么是队列的种类
什么是 Set?说下 HashSet 和 TreeSet 底层数据结构
什么是 List?List 的常见实现类是什么?
在 Linux 操作系统中,所有被操作系统管理的资源,例如网络接口卡、磁盘驱动器、打印机、输入输出设备、普通文件或是目录都被看作是一个文件。
也就是说在 LINUX 系统中有一个重要的概念:一切都是文件。其实这是 UNIX 哲学的一个体现,而 Linux 是重写 UNIX 而来,所以这个概念也就传承了下来。在 UNIX 系统中,把一切资源都看作是文件,包括硬件设备。***********************************************************************************************************************
Linux
简单介绍一下 Linux 文件系统?
一些常见的 Linux 命令了解吗?
Linux 中主要有哪几种内核锁?
Linux 中的用户模式和内核模式是什么含意?
用户进程间通信主要哪几种方式?
通过伙伴系统申请内核内存的函数有哪些?
模块程序能否使用可链接的库函数?
Linux 通过什么方式实现系统调用?
Linux 软中断和工作队列的作用是什么?
?
再强调几点:
1. 一定要谨慎对待写在简历上的东西,一定要对简历上的东西非常熟悉。因为一般情况下,面试官都是会根据你的简历来问的; 能有一个上得了台面的项目也非常重要,这很可能是面试官会大量发问的地方,所以在面试之前好好回顾一下自己所做的项目;
2. 和面试官聊基础知识比如设计模式的使用、多线程的使用等等,可以结合具体的项目场景或者是自己在平时是如何使用的;
3. 注意自己开源的 Github 项目,面试官可能会挖你的 Github 项目提问;
愿各位 Java 工程师朋友们能始终不忘初心!每个人都有每个人的难处。引用一句《阿甘正传》里面的台词:“生活就像一盒巧克力,你永远不知道下一块是什么味道“。
另外,我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!
****************************************************************************************************************
性能调优系列
1.Comcat 性能调优
JVM 参数调优: -Xms<size> 表示 JVM 初始化堆的大小,一 Xmx<size>表示 JVM 堆的最大值。这两个值的大小一般根据需要进行设置。当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃。因此- -般建议堆的最大值设置为可用内存的最大值的 80%。在 catalina.bat 中,设置 JAVA _0PTS='-Xms256m-Xmx512m',表示初始化内存为 256MB,可以使用的最大内存 512MB。
2.JVM 性能调优
Java 类加载过程 Java 类加载需要经历一下 7 个过程: 1.加载 加载是类加载的第一个过程,在这个阶段,将完成一下三件事情 (1)通过一个类的全限定名获取该类的二进制流。 (2)将该二进制流中的静态存储结构转化为方法去运行时数据结构。 (3)在内存中生成该类的 Class 对象,作为该类的数据访问入口。
3.MySQL 调优
微服务系列
什么是 Spring Cloud?
Spring cloud 流应用程序启动器是基于 Spring Boot 的 Spring 集成应用程序,提供与外部系统的集成。Spring cloud Task,一个生命周期短暂的微服务框架,用于快速构建执行有限数据处理的应用程序。
使用 Spring Cloud 有什么优势?
使用 Spring Boot 开发分布式微服务时,我们面临以下问题
1.与分布式系统相关的复杂性-这种开销包括网络问题,延迟开销,带宽问题,安全问题。
2.服务发现-服务发现工具管理群集中的流程和服务如何查找和互相交谈。它涉及一个服务目录,在该
目录中注册服务,然后能够查找并连接到该目录中的服务。
3. 冗余-分布式系统中的冗余问题。
4. 负载平衡 --负载平衡改善跨多个计算资源的工作负荷,诸如计算机,计算机集群,网络链路,中央
处理单元,或磁盘驱动器的分布。
5.性能-问题 由于各种运营开销导致的性能问题。
6. 部署复杂性-Devops 技能的要求。
小伙伴们有兴趣想了解内容和更多相关学习资料的请点赞收藏+评论转发+关注我,后面会有很多干货。
****************************************************************
#字节测试开发一面面经#
JVM
内存模型以及分区,需要详细到每个区放什么。
GC 收集器有哪些?CMS 收集器与 G1 收集器的特点。
Minor GC 与 Full GC 分别在什么时候发生?
堆里面的分区:Eden,survival (from+ to),老年代,各自的特点。
简述 java 垃圾回收机制?
java 中垃圾收集的方法有哪些?
类加载器双亲委派模型机制?什么是类加载器,类加载器有哪些?
简述 java 内存分配与回收策率以及 Minor GC 和 Major GC
网络协议
TCP、UDP 协议的区别
在浏览器中输入 url 地址 ->> 显示主页的过程
各种协议与 HTTP 协议之间的关系
HTTP 长连接、短连接
TCP 三次握手和四次挥手(面试常客)
MySQL 是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL 所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
MySQL
Mysql 的技术特点是什么?
MYSQL 数据表在什么情况下容易损坏?
说说自己对于 MySQL 常见的两种存储引擎:MyISAM 与 InnoDB 的理解
数据库索引了解吗?
能说下 MySQL 的基本存储结构吗?
Mysql 如何为表字段添加索引?
对于大表的常见优化手段说一下
mysql 里记录货币用什么字段类型好
当 MySQL 单表记录数过大时,数据库的 CRUD 性能会明显下降,有哪些常见的优化措施?
简单来说 redis 就是一个数据库,不过与传统数据库不同的是 redis 的数据是存在内存中的,所以存写速度非常快,因此 redis 被广泛应用于缓存方向。另外,redis 也经常用来做分布式锁。redis 提供了多种数据类型来支持不同的业务场景。除此之外,redis 支持事务 、持久化、LUA 脚本、LRU 驱动事件、多种集群方案。
Redis
为什么要用 redis /为什么要用缓存?
为什么要用 redis 而不用 map/guava 做缓存?
redis 和 memcached 的区别?
上述 Redis 分布式锁的缺点?
redis 常见数据结构以及使用场景分析
redis 内存淘汰机制(MySQL 里有 2000w 数据,Redis 中只存 20w 的数据,如何保证 Redis 中的数据都是热点数据?)
redis 持久化机制(怎么保证 redis 挂掉之后再重启数据可以进行恢复)?
缓存雪崩和缓存穿透问题解决方案?
如何解决 Redis 的并发竞争 Key 问题?
如何保证缓存与数据库双写时的数据一致性??
Spring 一般是不可避免的,如果你的简历上注明了你会 Spring Boot 或者 Spring Cloud 的话,那么面试官也可能会同时问你这两个技术,比如他可能会问你 springboot 和 spring 的区别。 所以,一定要谨慎对待写在简历上的东西,一定要对简历上的东西非常熟悉。
另外,AOP 实现原理、动态代理和静态代理、Spring IOC 的初始化过程、IOC 原理、自己怎么实现一个 IOC 容器? 这些东西都是经常会被问到的。
Spring
Spring Bean 的作用域?
如何用基于 Java 配置的方式配置 Spring?
请说下 Spring Bean 的生命周期?
Spring Bean 的作用域之间有什么区别?
请举例说明如何在 Spring 中注入一个 Java Collection?
Spring 框架中有哪些不同类型的事件?
Spring 框架中都用到了哪些设计模式?
开发中主要使用 Spring 的什么技术 ?
“RabbitMQ?”“Kafka?”“RocketMQ?”...在日常学习与开发过程中,我们常常听到消息队列这个关键词。这也是面试经常被问到的
消息队列
什么是消息队列?
为什么要用消息队列?丢消息怎么办?
如何解决消息重复问题?
ActiveMQ 中的消息重发时间间隔和重发次数吗?
ActiveMQ 服务器宕机怎么办?
ActiveMQ 如何调优?
Basic.Reject 的用法是什么?
为什么不应该对所有的 message 都使用持久化机制?
为什么 heavy RPC 的使用场景下不建议采用 disk node ?
Dubbo 是由阿里开源,后来加入了 Apache 。正式由于 Dubbo 的出现,才使得越来越多的公司开始使用以及接受分布式架构,所以面试时也是经常被问到的
Dubbo
什么是 Dubbo?
什么是 RPC?RPC 原理是什么?
为什么要用 Dubbo?
什么是分布式?为什么要分布式?
先来解释一下什么是负载均衡?
Dubbo 集群提供了哪些负载均衡策略?
Dubbo 支持哪些协议,每种协议的应用场景,优缺点?
Dubbo 的集群容错方案有哪些?
Dubbo 和 Spring Cloud 的关系?
数据结构比较常问的就是:二叉树、红黑树(很可能让你手绘一个红黑树出来哦!)、二叉查找树(BST)、平衡二叉树(Self-balancing binary search tree)、B-树,B+树与 B*树的优缺点比较、 LSM 树这些知识点。
数据结构很重要,而且学起来也相对要难一些。建议学习数据结构一定要循序渐进的来,一步一个脚印的走好。一定要搞懂原理,最好自己能用代码实现一遍。
数据结构
什么是队列
说下什么是队列的种类
什么是 Set?说下 HashSet 和 TreeSet 底层数据结构
什么是 List?List 的常见实现类是什么?
在 Linux 操作系统中,所有被操作系统管理的资源,例如网络接口卡、磁盘驱动器、打印机、输入输出设备、普通文件或是目录都被看作是一个文件。
也就是说在 LINUX 系统中有一个重要的概念:一切都是文件。其实这是 UNIX 哲学的一个体现,而 Linux 是重写 UNIX 而来,所以这个概念也就传承了下来。在 UNIX 系统中,把一切资源都看作是文件,包括硬件设备。***********************************************************************************************************************
Linux
简单介绍一下 Linux 文件系统?
一些常见的 Linux 命令了解吗?
Linux 中主要有哪几种内核锁?
Linux 中的用户模式和内核模式是什么含意?
用户进程间通信主要哪几种方式?
通过伙伴系统申请内核内存的函数有哪些?
模块程序能否使用可链接的库函数?
Linux 通过什么方式实现系统调用?
Linux 软中断和工作队列的作用是什么?
?
再强调几点:
1. 一定要谨慎对待写在简历上的东西,一定要对简历上的东西非常熟悉。因为一般情况下,面试官都是会根据你的简历来问的; 能有一个上得了台面的项目也非常重要,这很可能是面试官会大量发问的地方,所以在面试之前好好回顾一下自己所做的项目;
2. 和面试官聊基础知识比如设计模式的使用、多线程的使用等等,可以结合具体的项目场景或者是自己在平时是如何使用的;
3. 注意自己开源的 Github 项目,面试官可能会挖你的 Github 项目提问;
愿各位 Java 工程师朋友们能始终不忘初心!每个人都有每个人的难处。引用一句《阿甘正传》里面的台词:“生活就像一盒巧克力,你永远不知道下一块是什么味道“。
另外,我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!
****************************************************************************************************************
性能调优系列
1.Comcat 性能调优
JVM 参数调优: -Xms<size> 表示 JVM 初始化堆的大小,一 Xmx<size>表示 JVM 堆的最大值。这两个值的大小一般根据需要进行设置。当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃。因此- -般建议堆的最大值设置为可用内存的最大值的 80%。在 catalina.bat 中,设置 JAVA _0PTS='-Xms256m-Xmx512m',表示初始化内存为 256MB,可以使用的最大内存 512MB。
2.JVM 性能调优
Java 类加载过程 Java 类加载需要经历一下 7 个过程: 1.加载 加载是类加载的第一个过程,在这个阶段,将完成一下三件事情 (1)通过一个类的全限定名获取该类的二进制流。 (2)将该二进制流中的静态存储结构转化为方法去运行时数据结构。 (3)在内存中生成该类的 Class 对象,作为该类的数据访问入口。
3.MySQL 调优
微服务系列
什么是 Spring Cloud?
Spring cloud 流应用程序启动器是基于 Spring Boot 的 Spring 集成应用程序,提供与外部系统的集成。Spring cloud Task,一个生命周期短暂的微服务框架,用于快速构建执行有限数据处理的应用程序。
使用 Spring Cloud 有什么优势?
使用 Spring Boot 开发分布式微服务时,我们面临以下问题
1.与分布式系统相关的复杂性-这种开销包括网络问题,延迟开销,带宽问题,安全问题。
2.服务发现-服务发现工具管理群集中的流程和服务如何查找和互相交谈。它涉及一个服务目录,在该
目录中注册服务,然后能够查找并连接到该目录中的服务。
3. 冗余-分布式系统中的冗余问题。
4. 负载平衡 --负载平衡改善跨多个计算资源的工作负荷,诸如计算机,计算机集群,网络链路,中央
处理单元,或磁盘驱动器的分布。
5.性能-问题 由于各种运营开销导致的性能问题。
6. 部署复杂性-Devops 技能的要求。
小伙伴们有兴趣想了解内容和更多相关学习资料的请点赞收藏+评论转发+关注我,后面会有很多干货。
****************************************************************
#字节测试开发一面面经#