【81-90期】Java核心面试问题深度解析:性能优化与高并发设计

🚀 作者 :“码上有前”
🚀 文章简介 :Java
🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬

在这里插入图片描述

在这里插入图片描述

文章题目:Java核心面试问题深度解析:性能优化与高并发设计

摘要
本文聚焦于第81-90期Java面试的高频问题,从数据库连接池设计、Nginx压缩、多线程事务处理,到Java内存泄漏排查和Spring IOC解耦,全面剖析了关键技术点,并提供详细的代码实例和实践方法,助力开发者深入理解核心Java技术,在面试和实际开发中游刃有余。


1. 为什么数据库连接池不采用IO多路复用?

回答
数据库连接池主要用于管理与数据库之间的TCP连接,而不是直接操作Socket的IO。IO多路复用如epoll主要用于高并发场景下的非阻塞IO处理,适合处理成千上万的短连接。

  • 数据库连接池:重在复用数据库的长连接,减少频繁创建和销毁连接的成本。
  • IO多路复用:适合大量并发但轻量的网络请求,而数据库操作通常较重。

最佳实践
使用HikariCP连接池:

HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/db");
config.setUsername("user");
config.setPassword("password");
HikariDataSource dataSource = new HikariDataSource(config);

2. 说一下Nginx静态压缩和代码压缩

回答

  • 静态压缩:在文件生成时提前压缩,如生成.gz文件,由Nginx直接返回压缩后的静态资源;
  • 动态压缩:实时对响应内容进行压缩,常用算法如Gzip。

最佳实践
在Nginx中启用Gzip动态压缩:

gzip on;
gzip_types text/plain text/css application/json application/javascript;
gzip_min_length 1024;
gzip_comp_level 5;

3. 多线程事务怎么回滚?

回答
多线程环境下事务的回滚需要保证跨线程的一致性,可以通过以下方式实现:

  1. 独立事务:每个线程独立控制事务,彼此隔离;
  2. 分布式事务:通过分布式事务协调器(如Seata)实现全局事务管理;
  3. 手动管理:线程执行结果汇总后决定是否回滚。

最佳实践
使用Seata管理分布式事务:

@GlobalTransactional
public void execute() {// 分布式事务逻辑
}

4. Java Switch是如何支持String的?为什么不支持long?

回答

  • String支持:Java 7通过将String转换为hashCode实现支持。
  • long不支持Switch本质上是基于有限离散值(如intchar),而long值范围过大,无法高效实现。

最佳实践
避免过多case,保持代码简洁:

switch (input) {case "A": System.out.println("Option A"); break;case "B": System.out.println("Option B"); break;default: System.out.println("Default option");
}

5. 公司规定所有接口都用POST请求,这是为什么?

回答

  1. 安全性POST请求参数不会暴露在URL中,更适合传递敏感信息;
  2. 灵活性POST支持更大的请求体;
  3. 幂等性:限制为POST可以防止错误修改数据。

最佳实践
通过Spring Boot限制接口方法:

@PostMapping("/create")
public ResponseEntity<String> create(@RequestBody Data data) {// 业务逻辑
}

6. Redis的keys命令到底有多慢?

回答
keys命令会遍历Redis中的所有键,时间复杂度为O(n),在键数量很大时会导致严重的性能问题,甚至阻塞Redis服务。
替代方案:使用SCAN命令进行分批迭代。

最佳实践

SCAN 0 MATCH user:* COUNT 100

7. 为什么MySQL单表行数不要超过2000万?

回答

  1. 查询性能下降:超过一定规模,查询需要扫描更多行;
  2. 索引维护开销大:索引操作效率降低;
  3. 备份与恢复:表数据过大会影响备份和恢复速度。

优化方案

  • 垂直拆分:将字段分布到不同表;
  • 水平分片:按主键或时间拆分表。

最佳实践
使用分区表:

CREATE TABLE orders (id INT NOT NULL,order_date DATE NOT NULL
) PARTITION BY RANGE (YEAR(order_date)) (PARTITION p2021 VALUES LESS THAN (2022),PARTITION p2022 VALUES LESS THAN (2023)
);

8. Java内存泄漏了,怎么排查?

回答

  1. 工具检测:使用JVisualVMMAT分析堆内存;
  2. 日志监控:启用-XX:+HeapDumpOnOutOfMemoryError生成堆转储文件;
  3. 代码检查:查找未释放的资源(如InputStreamSocket)。

最佳实践
启用内存转储:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/dump

9. Spring IOC为什么能降低耦合?

回答
Spring IOC(控制反转)通过依赖注入(DI)管理对象的创建和依赖关系,使对象之间通过接口而不是实现类耦合。

  • 解耦的原理:依赖通过容器注入,而非在类中硬编码。
  • 优点:降低了模块之间的依赖,提高可测试性。

最佳实践
通过注解实现依赖注入:

@Service
public class UserService {@Autowiredprivate UserRepository userRepository;
}

10. 布隆过滤器和谷鸟过滤器的区别及应用场景?

回答

  1. 布隆过滤器:通过位图和多个哈希函数快速判断元素是否存在,但可能存在误判;
  2. 谷鸟过滤器(Cuckoo Filter):支持删除操作,并且误判率更低。

应用场景

  • 布隆过滤器:适用于黑名单校验、大量数据快速查重。
  • 谷鸟过滤器:更适合频繁动态增删场景。

最佳实践
使用Guava实现布隆过滤器:

BloomFilter<String> filter = BloomFilter.create(Funnels.stringFunnel(Charsets.UTF_8), 1000, 0.01);
filter.put("element");
System.out.println(filter.mightContain("element"));

总结
通过解析第81-90期Java面试问题,本文系统讲解了从数据库设计、内存优化到高并发工具使用的关键技术点,并结合代码实例提供了清晰的解决方案,帮助开发者在性能优化和面试中脱颖而出。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/62414.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

006 MATLAB编程基础

01 M文件 MATLAB输入命令有两种方法&#xff1a; 一是在MATLAB主窗口逐行输入命令&#xff0c;每个命令之间用分号或逗号分隔&#xff0c;每行可包含多个命令。 二是将命令组织成一个命令语句文集&#xff0c;使用扩展名“.m”&#xff0c;称为M文件。它由一系列的命令和语句…

力扣700:二叉搜索树中的搜索

给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和一个整数值 val。 你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在&#xff0c;则返回 null 。 示例 1: 输入&#xff1a;root [4,2,7,1,3], val 2 输出&#xff1a;[2,1,3…

两个用来刷新Windows环境变量让会话即时生效的刷新脚本分享

环境变量刷新脚本&#xff1a;RefreshEnv.bat 和 RefreshEnv.ps1 在Windows系统中,环境变量对于程序的正常运行至关重要。当安装新软件或修改系统设置后,环境变量可能会发生变化,但这些变化通常需要重启命令提示符或PowerShell会话才能生效。为了解决这个问题,我们提供了两个脚…

A050-基于spring boot物流管理系统设计与实现

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600…

蓝队之云技术

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…

openGauss你计算的表大小,有包含toast表么?

openGauss你计算的表大小&#xff0c;有包含toast表么&#xff1f; 最近有一个同事问我说“openGauss中pg_relation_size函数在计算表的大小时是否包含了大字段的大小&#xff1f;”&#xff0c;经过思考后&#xff0c;自己觉得表的大小是不包含大字段的大小的&#xff0c;然后…

【老白学 Java】Warship v2.0(七)

Warship v2.0&#xff08;七&#xff09; 文章来源&#xff1a;《Head First Java》修炼感悟。 上一篇文章中&#xff0c;Warship v2.0 项目最后一个类的完成&#xff0c;意味着整个项目也即将结束。 本篇文章的主要内容是编译、调试所有代码&#xff0c;以及进行代码整理。 如…

Paddle Inference部署推理(十二)

十二&#xff1a;Paddle Inference推理 &#xff08;python&#xff09;API详解 15. PredictorPool 类 PredictorPool 对 Predictor 进行了简单的封装&#xff0c;通过传入 config 和 thread 的数目来完成初始化&#xff0c;在每个线程中&#xff0c;根据自己的线程 id 直接从…

Elasticearch索引mapping写入、查看、修改

作者&#xff1a;京东物流 陈晓娟 一、ES Elasticsearch是一个流行的开源搜索引擎&#xff0c;它可以将大量数据快速存储和检索。Elasticsearch还提供了强大的实时分析和聚合查询功能&#xff0c;数据模式更加灵活。它不需要预先定义固定的数据结构&#xff0c;可以随时添加或修…

.npmrc文件的用途

.npmrc 文件是 npm&#xff08;Node.js 的包管理工具&#xff09;用于配置项目或用户的设置文件。它可以存储与 npm 相关的配置信息&#xff0c;如注册表地址、认证信息、代理设置、安装路径等。.npmrc 文件可以出现在不同的地方&#xff0c;具有不同的作用范围&#xff0c;通常…

基于matlab程序实现人脸识别

1.人脸识别流程 1.1.1基本原理 基于YCbCr颜色空间的肤色模型进行肤色分割。在YCbCr色彩空间内对肤色进行了建模发现&#xff0c;肤色聚类区域在Cb—Cr子平面上的投影将缩减&#xff0c;与中心区域显著不同。采用这种方法的图像分割已经能够较为精确的将人脸和非人脸分割开来。…

C语言 qsort及应用

qsort及应用 qsort:快速排序函数,需要引用stdlib.h文件. void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )(const void *, const void *) ); 参数: base:需要排序的数组 num:数据个数(数组长度) width:每个数据的字节数(sizeof(数据类型)) compa…

家校通小程序实战教程04教师管理

目录 1 创建数据源2 搭建管理后台3 搭建查询条件4 功能测试总结 我们上一篇介绍了如何将学生加入班级&#xff0c;学生加入之后就需要教师加入了。教师分为任课老师和班主任&#xff0c;班主任相当于一个班级的管理员&#xff0c;日常可以发布各种任务&#xff0c;发布接龙&…

【力扣】541.反转字符串2

问题描述 思路解析 每当字符达到2*k的时候&#xff0c;判断&#xff0c;同时若剩余字符>k,只对前k个进行判断&#xff08;这是重点&#xff09;因为字符串是不可变变量&#xff0c;所以将其转化为字符串数组&#xff0c;最后才将结果重新转变为字符串 字符串->字符数组 …

911事件反思:灾难通信和ddos之间的取舍

流量分析与监控 建立基线流量模型&#xff1a;在正常情况下监控和记录网络流量&#xff0c;建立正常流量的基线。这样&#xff0c;当突发请求发生时&#xff0c;可以更容易地识别出流量的异常变化。 实时流量监控&#xff1a;使用流量分析工具实时监控网络流量&#xff0c;快速…

【vue-router】Vue-router如何实现路由懒加载

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

hdlbits系列verilog解答(Exams/m2014 q4a)-86

文章目录 一、问题描述二、verilog源码三、仿真结果一、问题描述 本节学习如何下图中的锁存器电路。 注意图中电路是锁存器,因此quartus会警告说推导出一个锁存器。 模块声明 module top_module ( input d, input ena, output q); 思路: 锁存器是一种对脉冲电平敏感的存储…

成都睿明智科技有限公司抖音电商服务的新引擎

在这个短视频风起云涌的时代&#xff0c;抖音不仅成为了人们休闲娱乐的首选&#xff0c;更是商家们竞相角逐的电商新蓝海。在这片充满机遇与挑战的海域中&#xff0c;成都睿明智科技有限公司如同一艘装备精良的航船&#xff0c;引领着众多企业向抖音电商的深水区进发。今天&…

Redis和MySQL保持一致性的延迟双删(Delay Double Delete)策略

Redis和MySQL保持一致性的延迟双删&#xff08;Delay Double Delete&#xff09;策略&#xff0c;是一种在数据更新或删除时为了保证数据一致性而采取的方法。以下是延迟双删的过程和原理的详细解释&#xff1a; 一、过程 第一次删除缓存&#xff1a; 当需要更新数据库中的数据…

Elasticsearch优化汇总

文章目录 引言硬件设置优化禁用swap给系统留足够的内存JVM配置使用更快的硬件,使用 SSD 参数优化分片设计增加Buffer大小(增加吞吐量)预热文件系统 cache es查询设计优化预索引数据使用filter代替query字段映射避免使用脚本优化日期搜索为只读索引执行 force-merge预热全局序号…