当前位置: 首页 > news >正文

【21-30期】Java技术深度剖析:从分库分表到微服务的核心问题解析

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

在这里插入图片描述

在这里插入图片描述
文章题目:Java技术深度剖析:从分库分表到微服务的核心问题解析

摘要
本文针对Java开发中21-30期的常见面试问题进行了深入分析。从分布式系统中的分库分表设计、MySQL索引优化,到线程池的创建方式、线程状态切换以及网络协议对比等问题,提供详细的理论解析与实践案例,帮助开发者掌握这些核心技术点,为应对高难度的面试问题提供坚实的技术支持。


1. 美团外卖的分库分表怎么设计?

回答
分库分表是为了应对大规模数据访问压力,将数据分散到多个库或表中。

原理与逻辑

  • 分库:按业务拆分库(如订单库、用户库);
  • 分表:基于数据特征(如订单ID或时间范围)水平拆分表。
  • 中间件支持:使用ShardingSphere等工具实现动态路由和分片。

最佳实践
假设按订单ID进行分表:

CREATE TABLE orders_0 LIKE orders;
CREATE TABLE orders_1 LIKE orders;
-- 路由规则
SELECT * FROM orders_{orderId % 2};

2. MySQL中InnoDB的索引结构以及使用B+树实现索引的原因

回答
InnoDB的索引基于B+树组织数据。主键使用聚簇索引,其他列使用辅助索引。

原理与逻辑

  • B+树有较低的查找复杂度(O(log n));
  • 叶子节点链表支持范围查询;
  • 磁盘IO次数较少,适合大规模数据存储。

最佳实践
在一个订单表中创建索引:

CREATE TABLE orders (id BIGINT AUTO_INCREMENT PRIMARY KEY,user_id BIGINT NOT NULL,INDEX (user_id)
) ENGINE=InnoDB;

3. JDK 1.8 创建线程池的几种方式?

回答

  1. 使用Executors创建(如newFixedThreadPool);
  2. 手动创建ThreadPoolExecutor
  3. ForkJoinPool(用于并行计算)。

最佳实践
推荐直接使用ThreadPoolExecutor

ExecutorService executor = new ThreadPoolExecutor(2, 4, 60, TimeUnit.SECONDS,new LinkedBlockingQueue<>(10),Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy());

4. Java线程的状态及转换

回答
Java线程有以下6种状态:

  • NEW:新建;
  • RUNNABLE:运行中;
  • BLOCKED:被阻塞;
  • WAITING:无限等待;
  • TIMED_WAITING:限时等待;
  • TERMINATED:终止。

状态转换示例

Thread t = new Thread(() -> {synchronized (lock) {// 执行任务}
});
t.start(); // NEW -> RUNNABLE

5. Hash碰撞是什么?如何解决?

回答
Hash碰撞是不同的键映射到相同的哈希值上。

解决方案

  1. 开放地址法:寻找下一个可用位置;
  2. 链地址法:将冲突的键值存储到链表中。

最佳实践
Java的HashMap采用链地址法结合红黑树优化:

HashMap<Integer, String> map = new HashMap<>();
map.put(1, "value");

6. TCP和UDP协议的原理和区别

回答

  • TCP:面向连接,可靠,顺序传输;
  • UDP:无连接,不可靠,速度快。

应用场景

  • TCP适用于文件传输、HTTP;
  • UDP适用于视频流、游戏通信。

最佳实践
使用Java实现TCP通信:

ServerSocket server = new ServerSocket(8080);
Socket client = server.accept();

7. 线程池中线程抛出异常,该如何处理?

回答
线程任务抛出异常后不会影响线程池,但可能导致任务丢失。

解决方案

  1. 在任务中捕获异常;
  2. 自定义线程池afterExecute方法处理异常。

最佳实践

ExecutorService executor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<>()) {@Overrideprotected void afterExecute(Runnable r, Throwable t) {if (t != null) {System.err.println("任务抛出异常: " + t.getMessage());}}
};

8. 什么是微服务?

回答
微服务是一种架构模式,将应用拆分为多个小型服务,独立部署和维护。

特点

  • 服务独立、部署灵活;
  • 通过API通信;
  • 适合DevOps和CI/CD。

最佳实践
使用Spring Boot和Spring Cloud实现微服务:

@SpringBootApplication
@EnableDiscoveryClient
public class MicroserviceApplication {public static void main(String[] args) {SpringApplication.run(MicroserviceApplication.class, args);}
}

9. 将Bean放入Spring容器中的方式有哪些?

回答

  1. 使用@Component注解;
  2. @Configuration类中定义@Bean
  3. XML配置文件。

最佳实践

@Configuration
public class AppConfig {@Beanpublic MyService myService() {return new MyService();}
}

10. 当JVM堆内存溢出后,其他线程是否可以继续工作?

回答
堆内存溢出后,JVM可能抛出OutOfMemoryError,部分线程仍可继续工作,但全局资源可能受限。

最佳实践
监控和优化内存使用:

-Xms512m -Xmx1024m

结合工具(如JVisualVM)排查内存泄漏。


总结
本篇文章详细剖析了21-30期Java面试中的高频问题,涵盖了数据库优化、网络协议、线程池异常处理和微服务等技术点,并结合实际代码展示了解决方案。这些内容不仅能帮助开发者深入掌握Java核心知识,还能为面试提供实用技巧。

http://www.lryc.cn/news/492695.html

相关文章:

  • CSS:怎么把网站都变成灰色
  • 开发一个基于MACOS M1/2芯片的Android 12的模拟器
  • Flink 中 JDBC Connector 使用详解
  • 【Linux打怪升级记 | 报错02】-bash: 警告:setlocale: LC_TIME: 无法改变区域选项 (zh_CN.UTF-8)
  • 未来已来?AI技术革新改变我们的生活
  • 【Linux】进程的生命之旅——诞生、消逝与守候(fork/exit/wait)
  • 使用vcpkg自动链接tinyxml2时莫名链接其他库(例如boost)
  • 【去毛刺】OpenCV图像处理基础:腐蚀与膨胀操作入门
  • 道可云人工智能元宇宙每日资讯|第三届京西地区发展论坛成功召开
  • 若依框架部署在网站一个子目录下(/admin)问题(
  • 【ue5】UE5运行时下载视频/UE5 runtime download video(MP4)
  • 对比C++,Rust在内存安全上做的努力
  • 如何利用 Qt 的模块化架构组织大型项目
  • 探索Python词云库WordCloud的奥秘
  • MySQL根据idb文件恢复数据
  • hadoop-mapreduce词频统计
  • 精心修炼Java并发编程(JUC)-volatile与synchronized关键字
  • 【ROS2】ROS2 与 ROS1 编码方式对比(Python实现)
  • ElasticSearch的下载和基本使用(通过apifox)
  • 城市轨道交通运营控制指挥中心设计方案
  • 多目标优化算法:多目标河马优化算法(MOHOA)求解ZDT1、ZDT2、ZDT3、ZDT4、ZDT6,提供完整MATLAB代码
  • 线程与进程的个人理解
  • vscode的项目给gitlab上传
  • 企业微信定位打卡
  • libaom 源码分析:码率控制介绍
  • RK3568平台开发系列讲解(DMA篇)DMA engine使用
  • C++中的函数对象
  • Linux指标之平均负载(The Average load of Linux Metrics)
  • 盛最多水的容器
  • 光伏功率预测!Transformer-LSTM、Transformer、CNN-LSTM、LSTM、CNN五模型时序预测