java程序一运行就出现这个页面是怎么回事

img

如图,程序一运行就是这样,调了很久都没有丝毫变化,这是怎么回事啊

少端口号
localhost:{你的端口号}/aaa/
例如:localhost:8080/aaa/

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/1067365
  • 这篇博客你也可以参考下:递归算法、递归的注意事项、递归案例(Java实现)
  • 你还可以看下java参考手册中的 java-学习Java语言 - 描述Java编程语言的基本概念和特点的课程。-泛型是Java编程语言的一个强大功能。它们提高了代码的类型安全性,使更多的错误可以在编译时发现。-对仿制药的限制
  • 除此之外, 这篇博客: 【Java进阶面试】如何实现一个避免消息重复消费的方案?中的 方案4:基于关系数据库事务插入消息表 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 假设业务的消息消费逻辑是:更新MySQL数据库的某张订单表的状态:

    update my_order
    set status = 'SUCCESS' where order_no = '0rder1234';
    

    要实现Exactly-Once,即消息只被消费一次(并且肯定要保证能消费一次),可以这样做:在这个数据库中增加一个消息消费记录表,把消息插入到这个表,并且把原来的订单更新和这个插入的动作放到同一个事务中一起提交,就能保证消息只会被消费一遍了。具体流程如下:

      1. 开启事务
      1. 插入消息表(处理好主键冲突的问题)
      1. 更新订单表(原消费逻辑)
      1. 提交事务

    这个时候如果消息消费成功且事务提交了,那么消息表就插入成功了。这时候就算RocketMQ还没有收到消费位点的更新,从而再次投递,也会插入失败而视为已经消费过,后续就直接更新消费位点了。这样就能保证我们的消费代码只会执行一次。

    如果事务提交之前服务挂了(例如重启),那么对于本地事务并没有执行,所以订单没有更新,消息表也没有插入成功。而对于RocketMQ服务器来说,消费位点也没更新,所以消息还会继续投递下来,投递下来发现这个消息插入消息表也是成功的,所以可以继续消费。这样保证了消息不丢失。

    事实上,阿里云的RocketMQ的Exactly-Once语义的实现上,就是类似这个方案基于数据框的事务特性实现的:

    • 步骤一:添加依赖
    • 步骤二:创建消费事务表
    • 步骤三:生产端开启Exactly-Once投递语义
    • 步骤四:消费端开启Exactly-Once投递语义

    基于这种方式的方案确实可以拓展到不同的应用场景中,因为它的实现方案与具体业务本身无关——而是依赖一个消息表。但是这里有它的局限性:消息的消费逻辑必须是依赖于关系型数据库事务

    这个消息的消费过程中还涉及其他数据的修改,例如Redis这种不支持事务特性的数据源,则这些数据是不可回滚的。另外数据库的数据必须是在一个库,跨库无法解决。需要注意的是,在业务上,消息表的涉及不应该以消息ID作为标识,而应该以业务的业务主键作为标识更合理,以应对生产者的重发

  • 您还可以看一下 林剑老师的Java课程设计之坦克大战游戏带源码课程中的 添加键盘点击事件小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    根据所给的参考资料,我了解到以下几个问题:

    1. 编写一个Java应用程序,从键盘读取用户输入的两个字符串并重载。

    对于这个问题,我可以提供一个示例代码来演示如何实现:

    import java.util.Scanner;
    
    public class StringOverload {
        // 重载方法,接收两个字符串作为参数
        public static void printStrings(String str1, String str2) {
            System.out.println("第一个字符串为:" + str1);
            System.out.println("第二个字符串为:" + str2);
        }
    
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
    
            System.out.print("请输入第一个字符串:");
            String str1 = scanner.nextLine();
    
            System.out.print("请输入第二个字符串:");
            String str2 = scanner.nextLine();
    
            printStrings(str1, str2);
        }
    }
    

    这个程序将会提示用户分别输入两个字符串,并将它们作为参数传递给printStrings方法,然后在控制台上输出这两个字符串。

    1. 在娃娃机里放十个娃娃,每个娃娃对应一个数字,通过计算输出最大的娃娃对应的数字。

    对于这个问题,我可以提供以下代码来演示如何实现:

    import java.util.Scanner;
    
    public class DollMachine {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            int[] dolls = new int[10];
    
            for (int i = 0; i < dolls.length; i++) {
                System.out.print("请输入第" + (i + 1) + "个娃娃的大小:");
                dolls[i] = scanner.nextInt();
            }
    
            int max = dolls[0];
            for (int i = 1; i < dolls.length; i++) {
                if (dolls[i] > max) {
                    max = dolls[i];
                }
            }
    
            System.out.println("最大的娃娃对应的数字为:" + max);
        }
    }
    

    这个程序将会提示用户输入十个娃娃的大小,然后找出这些娃娃中的最大值,并将其输出到控制台。

    所以,根据给出的参考资料以及我的知识,我可以提供具体的解决方案来回答这两个问题。