面试官:一个 SpringBoot 项目能处理多少请求?(小心有坑)

本文通过分析一个简单的SpringBoot项目,探讨了在默认配置下,项目能同时处理的请求数量。经过实验,得出未进行任何特殊配置的SpringBoot项目,最多能同时处理200个请求。这涉及到Tomcat的线程池配置,包括核心线程数、最大线程数和队列长度。在面试中,回答此类问题时,需要结合项目实际和服务器配置来给出答案。
摘要由CSDN通过智能技术生成

这篇文章带大家盘一个面试题:一个 SpringBoot 项目能同时处理多少请求?

不知道你听到这个问题之后的第一反应是什么。

我大概知道他要问的是哪个方向,但是对于这种只有一句话的面试题,我的第一反应是:会不会有坑?

所以并不会贸然答题,先追问一些消息,比如:这个项目具体是干什么的?项目大概进行了哪些参数配置?使用的 web 容器是什么?部署的服务器配置如何?有哪些接口?接口响应平均时间大概是多少?

这样,在几个问题的拉扯之后,至少在面试题考察的方向方面能基本和面试官达成了一致。

比如前面的面试问题,经过几次拉扯之后,面试官可能会修改为:

一个 SpringBoot 项目,未进行任何特殊配置,全部采用默认设置,这个项目同一时刻,最多能同时处理多少请求?

能处理多少呢?

我也不知道,但是当问题变成上面这样之后,我找到了探索答案的角度。

既然“未进行任何特殊配置”,那我自己搞个 Demo 出来,压一把不就完事了吗?

坐稳扶好,准备发车。

Demo

小手一抖,先搞个 Demo 出来。

这个 Demo 非常的简单,就是通过 idea 创建一个全新的 SpringBoot 项目就行。

我的 SpringBoot 版本使用的是 2.7.13。

整个项目只有这两个依赖:
在这里插入图片描述
整个项目也只有两个类,要得就是一个空空如也,一清二白。
在这里插入图片描述
项目中的 TestController,里面只有一个 getTest 方法,用来测试,方法里面接受到请求之后直接 sleep 一小时。

目的就是直接把当前请求线程占着,这样我们才能知道项目中一共有多少个线程可以使用:

@Slf4j
@RestController
public class TestController {
   

    @GetMapping("/getTest")
    public void getTest(int num) throws Exception {
   
        log.info("{} 接受到请求:num={}", Thread.currentThread().getName(), num);
        TimeUnit.HOURS.sleep(1);
    }
}

项目中的 application.properties 文件也是空的:
在这里插入图片描述
这样,一个“未进行任何特殊配置”的 SpringBoot 不就有了吗?

基于这个 Demo,前面的面试题就要变成了:我短时间内不断的调用这个 Demo 的 getTest 方法,最多能调用多少次?

问题是不是又变得更加简单了一点?

那么前面这个“短时间内不断的调用”,用代码怎么表示呢?

很简单,就是在循环中不断的进行接口调用就行了。

public class MainTest {
   
    public static void main(String[] args) {
   
        for (int i = 0; i < 1000; i++) {
   
            int finalI = i;
            new Thread(() -> {
   
                HttpUtil.get("127.0.0.1:8080/getTest?num=" + finalI);
            }).start();
        }
        //阻塞主线程
        Thread.yield();
    }
}

答案

经过前面的准备工作,Demo 和测试代码都就绪了。

接下来就是先把 Demo 跑起来:
在这里插入图片描述
然后跑一把 MainTest。

当 MainTest 跑起来之后,Demo 这边就会快速的、大量的输出这样的日志:
在这里插入图片描述
也就是我前面 getTest 方法中写的日志:
在这里插入图片描述
好,现在我们回到这个问题:

我短时间内不断的调用这个 Demo 的 getTest 方法,最多能调用多少次?

来,请你告诉我怎么得到这个问题的答案?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cyufeng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值