当前位置: 首页 > 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核心知识,还能为面试提供实用技巧。

相关文章:

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

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;Java &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 文章题目&#xff1a;Java技术深度剖析&#xff1a;从分库分表到微服务的核心问题解析 摘要&#xff1a; 本…...

CSS:怎么把网站都变成灰色

当大家看到全站的内容都变成了灰色&#xff0c;包括按钮、图片等等。这时候我们可能会好奇这是怎么做到的呢&#xff1f; 有人会以为所有的内容都统一换了一个 CSS 样式&#xff0c;图片也全换成灰色的了&#xff0c;按钮等样式也统一换成了灰色样式。但你想想这个成本也太高了…...

开发一个基于MACOS M1/2芯片的Android 12的模拟器

产品需求&#xff1a;MuMu模拟器Pro_率先适配Apple M系列芯片的安卓模拟器 苹果M芯片专属&#xff1a;产品专为苹果M系列芯片设计&#xff0c;意味着它需要能够充分利用M系列芯片的性能优势。 安卓模拟器&#xff1a;产品是一个安卓模拟器&#xff0c;允许用户在Mac设备上运行…...

Flink 中 JDBC Connector 使用详解

1. 背景 在实时计算或离线任务中&#xff0c;往往需要与关系型数据库交互&#xff0c;例如 MySQL、PostgreSQL 等。Apache Flink 提供了 JDBC Connector&#xff0c;可以方便地将流式数据写入或读取数据库。 本文将介绍 Flink JDBC Connector 的基础用法、配置方法以及注意事…...

【Linux打怪升级记 | 报错02】-bash: 警告:setlocale: LC_TIME: 无法改变区域选项 (zh_CN.UTF-8)

&#x1f5fa;️博客地图 &#x1f4cd;1、报错发现 &#x1f4cd;2、原因分析 &#x1f4cd;3、解决办法 &#x1f4cd;4、测试结果 1、报错发现 装好了CentOS操作系统&#xff0c;使用ssh远程登陆CentOS&#xff0c;出现如下告警信息&#xff1a; bash: 警告:setlocale…...

未来已来?AI技术革新改变我们的生活

在21世纪的今天&#xff0c;人工智能&#xff08;AI&#xff09;不再是一个遥远的概念&#xff0c;而是逐渐渗透到我们生活的方方面面。从智能家居到自动驾驶汽车&#xff0c;从个性化推荐系统到医疗诊断辅助&#xff0c;AI技术正在以惊人的速度发展&#xff0c;并深刻地影响着…...

【Linux】进程的生命之旅——诞生、消逝与守候(fork/exit/wait)

&#x1f3ac; 个人主页&#xff1a;谁在夜里看海. &#x1f4d6; 个人专栏&#xff1a;《C系列》《Linux系列》《算法系列》 ⛰️ 一念既出&#xff0c;万山无阻 目录 &#x1f4d6;一、进程创建 1.fork函数 &#x1f4da;高层封装特性 &#x1f4da;fork返回值 2.写时拷…...

使用vcpkg自动链接tinyxml2时莫名链接其他库(例如boost)

使用vcpkg自动链接tinyxml2时莫名链接其他库&#xff08;例如boost&#xff09; vcpkg的自动链接功能非常方便&#xff0c;但在某些情况下会出现过度链接的问题。 链接错误症状 以tinyxml2为例&#xff0c;程序中调用tinyxml2的函数后&#xff0c;若vcpkg中同时存在opencv和…...

【去毛刺】OpenCV图像处理基础:腐蚀与膨胀操作入门

在数字图像处理中&#xff0c;形态学操作是一种常用的技术&#xff0c;用于提取图像中的特定形状或特征。其中&#xff0c;腐蚀&#xff08;Erosion&#xff09;和膨胀&#xff08;Dilation&#xff09;是两种基本的形态学运算。本文将通过一个简单的例子来演示如何使用Python中…...

道可云人工智能元宇宙每日资讯|第三届京西地区发展论坛成功召开

道可云元宇宙每日简报&#xff08;2024年11月27日&#xff09;讯&#xff0c;今日元宇宙新鲜事有&#xff1a; 工信部等十二部门印发《5G规模化应用“扬帆”行动升级方案》 11月25日&#xff0c;工业和信息化部等十二部门印发《5G规模化应用“扬帆”行动升级方案》。《方案》…...

若依框架部署在网站一个子目录下(/admin)问题(

部署在子目录下首先修改vue.config.js文件&#xff1a; 问题一&#xff1a;登陆之后跳转到了404页面问题&#xff0c;解决办法如下&#xff1a; src/router/index.js 把404页面直接变成了首页&#xff08;大佬有啥优雅的解决办法求告知&#xff09; 问题二&#xff1a;退出登录…...

【ue5】UE5运行时下载视频/UE5 runtime download video(MP4)

插件还是老朋友。 节点的content type要打对。 &#xff08;参照表&#xff1a;MIME 类型&#xff08;MIME Type&#xff09;完整对照表 - 免费在线工具&#xff09; 结果展示&#xff1a;...

对比C++,Rust在内存安全上做的努力

简介 近年来&#xff0c;越来越多的组织表示&#xff0c;如果新项目在技术选型时需要使用系统级开发语言&#xff0c;那么不要选择使用C/C这种内存不安全的系统语言&#xff0c;推荐使用内存安全的Rust作为替代。 谷歌也声称&#xff0c;Android 的安全漏洞&#xff0c;从 20…...

如何利用 Qt 的模块化架构组织大型项目

目录 1. 大型项目的架构设计 1.1 分层架构 1.2 事件驱动与异步架构 2. 模块划分与职责分离 2.1 功能模块划分 2.2 模块之间的依赖管理 3. 跨平台开发与模块复用 在大型软件项目中&#xff0c;随着代码量的增加和功能的扩展&#xff0c;项目的复杂度会显著提升。没有良好…...

探索Python词云库WordCloud的奥秘

文章目录 探索Python词云库WordCloud的奥秘1. 背景介绍&#xff1a;为何选择WordCloud&#xff1f;2. WordCloud库简介3. 安装WordCloud库4. 简单函数使用方法5. 应用场景示例6. 常见Bug及解决方案7. 总结 探索Python词云库WordCloud的奥秘 1. 背景介绍&#xff1a;为何选择Wo…...

MySQL根据idb文件恢复数据

首先得有对应表的idb文件以及建表语句 1.首先在新数据库建表 CREATE TABLE sys_menu (id bigint(20) NOT NULL,parent_id bigint(20) NULL DEFAULT NULL,name varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,type int(11) NULL DEFAULT …...

hadoop-mapreduce词频统计

一、Map Reduce主要阶段 二、词频统计示例 0.MapReduce 词频统计(Word Count)示例图 1. Input 阶段&#xff08;输入阶段&#xff09; 输入数据是一段文本&#xff0c;如下&#xff1a; Hadoop is a big data framework. Hadoop can store vast data. Hadoop processes big …...

精心修炼Java并发编程(JUC)-volatile与synchronized关键字

volatile volatile 是 JVM 提供的 最轻量级的同步机制&#xff0c;中文意思是不稳定的&#xff0c;易变的&#xff0c;用 volatile 修饰变量是为了保证变量在多线程中的可见性&#xff0c;它表达的含义是&#xff1a;告诉编译器&#xff0c;对这个变量的读写&#xff0c;需要基…...

【ROS2】ROS2 与 ROS1 编码方式对比(Python实现)

目录 一、初始化和关闭节点二、发布者三、订阅者四、服务端五、客户端六、参数管理七、日志记录八、生命周期管理 ROS2 在 Python 编程中引入了一些新的概念和 API&#xff0c;这些变化使得代码更加模块化和易于维护。特别是 rclpy 库提供了更丰富的功能和更好的错误处理机制&a…...

ElasticSearch的下载和基本使用(通过apifox)

1.概述 一个开源的高扩展的分布式全文检索引擎&#xff0c;近乎实时的存储&#xff0c;检索数据 2.安装路径 Elasticsearch 7.8.0 | Elastic 安装后启动elasticsearch-7.8.0\bin里的elasticsearch.bat文件&#xff0c; 启动后就可以访问本地的es库http://localhost:9200/ …...

城市轨道交通运营控制指挥中心设计方案

为某城市轨道交通运营控制指挥中心(OCC)的设计提供方案时,我们需要考虑到多个方面的需求,包括系统架构、设备选择、功能实现、数据流与监控、通信管理等。以下是一个综合性的设计方案,涉及系统硬件和软件的选择、布局规划、安全性等方面,以确保指挥中心的高效运作、实时监…...

多目标优化算法:多目标河马优化算法(MOHOA)求解ZDT1、ZDT2、ZDT3、ZDT4、ZDT6,提供完整MATLAB代码

一、河马优化算法 河马优化算法&#xff08;Hippopotamus optimization algorithm&#xff0c;HO&#xff09;由Amiri等人于2024年提出的一种模拟自然界中河马觅食行为的新型群体智能优化算法。该算法由Mohammad Hussein Amiri等人于2024年2月发表在Nature旗下子刊《Scientifi…...

线程与进程的个人理解

进程&#xff08;Process&#xff09;&#xff1a; 一个程序在执行时&#xff0c;操作系统为其分配的资源&#xff08;如内存、CPU 时间等&#xff09;构成了一个进程。每个进程都有自己的独立的地址空间、堆栈和局部变量&#xff0c;它们之间不共享内存&#xff08;除非通过特…...

vscode的项目给gitlab上传

目录 一.创建gitlab帐号 二.在gitlab创建项目仓库 三.Windows电脑安装Git 四.vscode项目git上传 一.创建gitlab帐号 二.在gitlab创建项目仓库 图来自:Git-Gitlab中如何创建项目、创建Repository、以及如何删除项目_gitlab新建项目-CSDN博客&#xff09; 三.Windows电脑安…...

企业微信定位打卡

废话少说&#xff1a;定位修改软件链接奉上 一、定位打卡原理 GPS定位&#xff1a;企业微信可以利用手机的GPS功能进行定位&#xff0c;这是一种基于卫星的定位技术&#xff0c;能够提供相对精确的位置信息&#xff0c;通常精确度在20米以内。这种方式耗电较大&#xff0c;且在…...

libaom 源码分析:码率控制介绍

码率控制 命令行码率控制选项:可以看到码率控制包括丢帧、resize、超分、码控模式、目标码率、目标上限下限(类似 x264、x265 中的 VBV)、码控偏置、GOP 码率等。Rate Control Options:--drop-frame=<arg> Temporal resampling threshold (buf %)--resize-mo…...

RK3568平台开发系列讲解(DMA篇)DMA engine使用

🚀返回专栏总目录 文章目录 一、申请DMA channel二、配置DMA channel的参数三、获取传输描述(tx descriptor)四、启动传输沉淀、分享、成长,让自己和他人都能有所收获!😄 📢DMA子系统下有一个帮助测试的测试驱动(drivers/dma/dmatest.c), 从这个测试驱动入手我们了解…...

C++中的函数对象

C 中函数对象的定义和特点 定义&#xff1a;函数对象&#xff08;Function Object&#xff09;也叫仿函数&#xff08;Functor&#xff09;&#xff0c;是一个类&#xff0c;这个类重载了函数调用运算符()。当创建这个类的对象后&#xff0c;可以像使用函数一样使用这个对象&am…...

Linux指标之平均负载(The Average load of Linux Metrics)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…...

盛最多水的容器

本节将数组与坐标轴共同组成一个容器,通过改变容器的两个端点使容器装的水最多,容器两个端点不断移动可以通过左右指针算法解决. 问题描述: 给定两个非负整数k1,k2...km每个数代表坐标中的一个点(i,ki).在坐标内绘制m条垂线,垂直线i的两个端点分别为(i,k1)和(i,0)找出其中的两…...

二级域名的网站备案/一站式网络营销

湖南高考填报志愿最关键的第一步&#xff0c;就是在湖南高考一分一段表查询排名方法考生要在“一分一段表”中查找与自己成绩相对应的分数排名&#xff0c;以及这一位次的成绩共有多少考生&#xff0c;以此来确定个人成绩在全省的位置。同时查一下自己的目标院校在往年的录取线…...

wordpress使用不同的全局样式/电商平台怎么加入

1.使用场景 当程序正常退出,系统调用 System.exit方法虚拟机被关闭时程序抛出异常时可通过这些钩子在jvm关闭的时候进行内存清理、资源回收等工作 通过我们的程序中运行完之后都会进行一些清理工作,比如关闭数据库资源,同步等操作。这时我们的钩子函数addShutdownHook有了用武…...

简洁的网站案例/深圳营销策划公司十强

丹阳新闻网报道 丹阳交警告诉您&#xff1a;目前&#xff0c;市区部分路段已安装了高清电子抓拍系统&#xff0c;正式试点抓拍驾驶机动车斑马线前不礼让行人的交通违法行为&#xff01;从今年3月份开始&#xff0c;丹阳交警大队在市区185条主次干道斑马线前漆划了“礼让行人”…...

杭州网站建设招标/公司网站设计的内容有哪些

这篇文章主要介绍了PHP使用ffmpeg给视频增加字幕显示的方法,实例分析了php操作ffmpeg给视频增加字母的技巧,具有一定参考借鉴价值,需要的朋友可以参考下。本文实例讲述了PHP使用ffmpeg给视频增加字幕显示的方法。分享给大家供大家参考。具体实现方法如下&#xff1a;<?php …...

wordpress图片新浪/磁力猫官网cilimao

2019独角兽企业重金招聘Python工程师标准>>> 问题一&#xff1a; 当我们点击Help时会出现提示&#xff1a;TypeError&#xff1a;in method WindowList__getitem__,expected argument 2 of type size_t. 如图一所示&#xff1a; 图一 问题二&#xff1a; 当我们点击…...

基于cms的网站设计与实现毕业论文/推广普通话手抄报

在使用ECS服务器时&#xff0c;发现网络流量异常&#xff0c;或者发现服务器有异常向外发包行为&#xff0c;可使用抓包工具抓取网络流量包&#xff0c;分析流量包的特征&#xff0c;看看这些流量包来自哪里&#xff0c;或者发向哪里了。根据这些信息&#xff0c;可进一步诊断异…...