精华内容
下载资源
问答
  • C++产生随机数一直重复问题

    千次阅读 多人点赞 2019-06-30 11:35:31
    但是今天在产生随机数的时候遇到了一个怪事,就是不管自己怎么产搞,多次产生的随机数都是重复的。自己的代码简化为下: #include "stdafx.h" #include <cstdlib> #include <ctime> #include <...

    C++产生随机数,我们都知道,无非就是利用srand产生一个种子,然后利用rand函数产生随机数即可。但是今天在产生随机数的时候遇到了一个怪事,就是不管自己怎么产搞,多次产生的随机数都是重复的。自己的代码简化为下:

    #include "stdafx.h"
    #include <cstdlib>
    #include <ctime>
    #include <iostream>
    
    class  RandomNum
    {
    public:
    	void creataRandomNum()
    	{
    		srand(unsigned(time(NULL)));
    		std::cout << rand()<< std::endl;
    	}
    };
    
    int main()
    {
        for (int i=0;i<5;i++)
        {
    		RandomNum random_num;
    		random_num.creataRandomNum();
        }
    }

    很简单,就是在一个类中,有一个函数,在这个函数中产生随机数然后输出,来看一下输出的结果:

    对的,你没看错,虽然设置了种子,但是输出的随机数是唯一的(不设置种子输出的随机数也是唯一的,有兴趣的话可以试一试)。

    我们知道,srand()用来设置rand()产生随机数时的随机数种子。在调用rand()函数产生随机数前,必须先利用srand()设好随机数种子(seed), 如果未设随机数种子, rand()在调用时会自动设随机数种子为1(这也就是当我们不设置种子时,每次程序运行都会产生同样的随机数的原因)。进一步分析,我们在类里面调用产生随机数的函数以及设置种子的函数,那只要你的电脑足够好,程序运行的足够快,循环的每次(或者准确的说是前几次)每次srand()函数中获取的系统时间都是一致的,那么执行每次rand函数之前,设置的种子都一样,就和没设置种子一样了,这样导致了产生的随机数就是一样的。

    那解决办法其实很简单,就是不要将srand函数放在类的函数内部,最好把它放在主函数中,这样就相当于设置了一次种子,但是产生了多次随机数。而不是像上面的代码一样,每次设置一次种子,产生一次随机数,然后设置的种子还一样,产生的随机数当然一样了。

    修改后的代码如下:

    #include "stdafx.h"
    #include <cstdlib>
    #include <ctime>
    #include <iostream>
    
    class  RandomNum
    {
    public:
    	void creataRandomNum()
    	{
    		std::cout << rand()<< std::endl;
    	}
    };
    
    int main()
    {
    	srand(unsigned(time(NULL)));
        for (int i=0;i<5;i++)
        {
    		RandomNum random_num;
    		random_num.creataRandomNum();
        }
    }
    

    看结果,产生的随机数已经正常了。

    当然,在C++11中,已经有产生随机数的函数random,用法如下:

    #include "stdafx.h"
    #include <iostream>
    #include <random>
    
    int main()
    {
    	std::default_random_engine e;
    	for (size_t i = 0; i < 5; ++i) //生成五个随机数       
    		std::cout << e() << std::endl;
    	std::cout << "Min random:" << e.min() << std::endl; //输出该随机数引擎序列的范围       
    	std::cout << "Max random:" << e.max() << std::endl;
    	return 0;
    }

    这种方式产生的随机数更好,如果能用这种方式的话,就尽量使用这种吧。

    展开全文
  • 很多人用HTML模板做一些网页开发,并且需要...针对这个问题很多人都查了半天都查不到什么原因,语法什么都没错。 那么你就应该检查一个是否这个BUTTON在一个FORM中。然后点击FORM其实是发送的是空值,所以页面刷新了!

    很多人用HTML模板做一些网页开发,并且需要用AJAX来跟后台做交互,但是用JS或者JQUERY设置好监听之后,点击会发现本页面又刷新了。

    针对这个问题很多人都查了半天都查不到什么原因,语法什么都没错。

    那么你就应该检查一个是否这个BUTTON在一个FORM中。然后点击FORM其实是发送的是空值,所以页面刷新了!

    展开全文
  • mqtt重复下发同一个消息id问题

    千次阅读 2019-06-22 15:46:39
    mqtt重复下发同一个消息id问题 一.问题描述与分析 最近在物联网项目开发中,mqtt服务器给我们设备推送消息时,概率性出现同一个消息id重复下发问题。通过使用wireshark抓包判断,得出结论是我们设备在收到服务器推送...

    mqtt重复下发同一个消息id问题

    一.问题描述与分析

    最近在物联网项目开发中,mqtt服务器给我们设备推送消息时,概率性出现同一个消息id重复下发问题。通过使用wireshark抓包判断,得出结论是我们设备在收到服务器推送的消息后,没有立即给服务器回复ack造成的,下图为设备抓包log。
    在这里插入图片描述
    从log中分析,服务器向设备发送一个publish message消息后,我们设备回复publish ack不及时,如果超过20s未收到设备回复的ack,将会消息重发。我们定义的消息qos级别为1。
    代码段:
    在这里插入图片描述
    int MQTTSubscribe(Client* c, const char* topicFilter, enum QoS qos, messageHandler messageHandler)

    参数含义
    cmqtt客户端
    topicfilter订阅主题
    qos消息等级
    messagehandler订阅主题回调函数

    wireshark log
    在这里插入图片描述

    二.解决方法

    造成此问题的原因是本项目中处理消息的回调函数执行时间太长,在代码中添加时间戳发现整个回调处理时间为六十多毫秒,回调耗时太长导致我们设备没有及时给服务器应答(京东iot平台技术支持给的原因),即在mqtt回调函数中尽量不要做太耗时的操作。
    修改前,我们是在回调函数中处理消息,包括消息解码,json分析,最后对消息进行相应的处理,耗时较长。
    修改方向是我们回调函数中可以在接收消息后,只对消息进行备份。重新开启一个线程或者任务对接收的消息进行处理与分析。

     void messageArrived(MessageData *md)
     {
          MQTTMessage *message = md->message;
          
          printf("[%s]Message arrived: qos %d, retained %d, dup %d, packetid %d\n",__func__, 
                   message->qos, message->retained, message->dup, message->id);
          printf("[%s]Payload %d\n", __func__, (size_t)(message->payloadlen));  
          
          //清备份区,备份收到的消息,将消息备份到mqttbackupBuffer中,
          //其定义:unsigned char mqttbackupBuffer[30][512]={0};//备份topic信息
          memset(&mqttbackupBuffer[msgsn][0],0,sizeof(&mqttbackupBuffer[msgsn]));
          memcpy(&mqttbackupBuffer[msgsn][0], (char *)(message->payload), message->payloadlen);
          
          //本项目跑的freertos,向其他任务发送处理接受的消息通知
          LL_send_message(MSG_ID_MESSAGE_PAY_MSG_DEAL_WITH, msgsn, (size_t)(message->payloadlen));
      	  msgsn = msgsn + 1;
      	  
          //备份区满,从头备份
          if(msgsn == 30)
    	      msgsn = 0;
      }
    

    重新编译工程,测试,完美解决,下图为无延时的wireshark包。
    在这里插入图片描述

    展开全文
  • Rocketmq重复消费问题

    万次阅读 多人点赞 2019-02-25 11:32:03
    .RocketMQ消息重复消费: 应用:通过Rocketmq异步发送极光数据推送至app端,在推送的同时将数据存入mysql数据库中 问题:在app端收到多条相同的推送消息 二.异常出现的原因 Rocketmq在消费消息时产生了异常,...

    一.背景:

    • 背景:测试环境Rocketmq的server端有2台服务器(X.X.X.55和X.X.X.49),在测试同事反馈推送有问题(重复消费)的前一天早上,发现49这台服务器上的mq进程没有了,于是手动重启了49的mq服务(也正是这次重启,误导了问题排查的方向)
    • 业务场景:业务端通过Rocketmq生产和消费消息,其中消费的消息会调用极光接口,推送至app端,正常情况下,每生产一条消息,消费者只消费一次,app端只会收到一条推送通知
    • 反馈问题:同一条消息,app端收到多条相同的推送通知
    • 猜测原因:Rocketmq在消费消息时产生了异常,MessageListenerConcurrently接口返回了RECONSUME_LATER标志

    二.如何在控制台查看是否有消息积压或消费失败

    • RocketMQ Console查看:
      在这里插入图片描述
    • 参数:
    名称作用
    #Topictopic名称
    %RETRY%messageConsumerGroupTest重试队列:当消息发送失败,会将发送失败的消息发送到topic为%RETRY%groupname 的队列中
    #Broker Offsettopic在该broker上存储(生产)的消息偏移量
    #Consumer Offsettopic在broker上消息的消息偏移量
    #Difftopic在该broker上的消息积压量,#Diff = (#Broker Offset) - (#Consumer Offset )
    Diff Total该Consumer Group下积压的消息总数
    %DLQ%+consumergroup死信队列:消费失败到一定次数(默认16次),就会被发送到死信队列,上图未出现
    • 上图分析:

    1)以%RETRY%为前缀的topic的#Diff的值不为0,说明对应的topic在消费端出现了消费失败后的消息积压
    2)前缀不为%RETRY%的topic的#Diff的值不为0,说明该topic出现了消息积压


    三.重复消费排查过程

    • 排查步骤1:是否有消息积压
    • 排查步骤:

    1)打开RocketMQ Console——>Consumer——>ConsumerProgress
    2)在 consumer group name输入框输入 messageConsumerGroupTest
    3)查看topic消费信息

    • 结果:

    当我们拿着测试的手机,手机上在不断的收到重复推送通知,但查看控制台,显示没有任何的消息积压
    在这里插入图片描述

    • 分析:

    当时很奇怪,收到多条相同的推送,肯定是重复消费了,但控制台却没有显示消息积压(原因就详见本文末尾的问题5解释),只能将信将疑的去排查Consumer客户端是否出了问题


    • 排查2:业务代码消费日志是有否异常
    • 步骤

    1)登录业务代码所在的服务器,查看消息消费日志

    • 结果

    1)同一条推送通知,有被不断的触发的日志,但未见Exception和Error相关的可能造成消费失败的日志

    • 分析:

    突然又回想起前一天49 服务器上的mq进程突然没了,于是就怀疑问题出在Rocketmq的server端


    • 排查3:Rocketmq server端是否有异常
    • 排查步骤:

    1)查看mq的进程是否正常(namesrv和broker)
    2)查看服务器的内存和硬盘空间是否不足
    3)查看/rocketmqlogs目录下的各个日志是否有异常
    4)查看防火墙是不是打开,或者mq相关服务的端口号无法访问

    • 结果:

    1) rocketmq的nameserver和broker的进程服务正常
    2)服务所在的服务器内存和磁盘空间正常
    3)服务器端各个日志文件中,也未发现有error日志
    4)防火墙是关闭的

    mq相关进程:ps -ef|grep rocketmq在这里插入图片描述

    内存和磁盘空间,free -h 、df -h
    在这里插入图片描述

    防火墙状态,systemctl status firewalld
    在这里插入图片描述

    server端相关日志,${user.home}/logs/rocketmqlogs目录下
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    • 分析:

    在Rocketmq的服务器端,各种可能情况,检查了一遍未发现任何异常,只能一脸懵逼的去Debug单步调式业务代码,看能不能发现问题


    • 排查4:Consumer 客户端是有否异常
    • 步骤

    1)Idea中启动相关服务debug单步调试
    2)PostMan模拟用户请求本地服务,触发Rocketmq生产者生产消息
    3)本地服务的消费者消费消息,调用极光接口发送推送通知,处理相关业务
    4)观察app端推送通知及控制台日志输出情况

    • 结果

    1)app端在不断的接收到重复的推动通知
    2)同一条消息,被不断的触发消费
    3)debug时,在Rocketmq的源码中捕捉到了异常

    Consumer客户端的核心是实现MessageListenerConcurrently接口,消费成功返回CONSUME_SUCCESS消费失败返回RECONSUME_LATER,注意业务代码(非源码)此处的异常捕捉级别为Exception,正是这个异常级别,导致异常日志没有被打印出来
    在这里插入图片描述

    1)当debug单步调试到业务代码的某一处时,代码突然跳到Rocketmq的源码的ConsumeMessageConcurrentlyService类的run()方法中,在status = listener.consumeMessage(Collections.unmodifiableList(this.msgs), context)代码处捕获了一个异常,该方法的返回值为消息消费状态
    2)如下图的源码,可以看到,当发生异常时listener.consumeMessage方法的返回值为null,当status为null时,status会被赋值为ConsumeConcurrentlyStatus.RECONSUME_LATER状态(即消费失败)
    3)如下图,造成业务代码异常的原因是:org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout()Ljava/lang/Integer,这是mybatis抛出的一个异常,正常情况下,这个异常应该在业务代码处就被捕捉到(业务代码处确实有捕捉异常方法,只是捕捉的级别是Exception),但奇怪的是这个异常并没有被业务代码捕捉到,而被Rocketmq的消费监听方法捕捉到,造成了消费失败
    4)为什么这个mybatis的异常没有业务代码捕捉到,而是被Rocketmq捕捉到,仔细观察两者异常捕捉的代码,发现业务代码处的异常捕捉级别是Excption,Rocketmq源码的异常捕捉级别是Throwable,而Mybatis抛出的正是Error级别的日志,所以Mybatis抛出的异常没有被业务代码捕捉到,当我们把业务代码处的异常捕捉级别改为Throwable时,就能在日志中查看到异常日志信息
    在这里插入图片描述
    在这里插入图片描述

    当把业务代码的异常捕捉,改为Throwable级别,就可以捕捉到异常信息,并在日志中打印出来
    在这里插入图片描述

    • 由上面debug调式带来的疑问

    1)为什么mybatis的异常没有业务代码捕捉到,而是被Rocketmq捕捉到?
    原因:业务代码处的异常捕捉级别是Excption,mq的异常捕捉级别是Throwable,而当mybatis抛出的Error级别的日志,而Error级别的日志不能被Exception捕捉到。
    在这里插入图片描述
    Error类和Exception类的父类都是throwable类,他们的区别是:
    1)Error类一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢等。对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和和预防,遇到这样的错误,建议让程序终止。
    2)Exception类表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常。

    2)是什么原因造成的mybatis抛出异常?
    原因:org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout()Ljava/lang/Integer,出现这个错误的原因主要是spring-mybatis和mybatis版本不匹配,参考博客链接:https://blog.csdn.net/AirMario/article/details/53446228,本项目中将mybatis的依赖版本由1.4.1改为1.3.1之后,就可以了,版本号改完之后整个mq的消费异常问题也解决了。

    3)异常被rocketmq的client端捕捉到了,那client端的mq日志输出到那去了?
    查看mq源码中的日志配置文件logback_rocketmq_client.xml,发现日志被输出到client服务的${user.home}/logs/rocketmqlogs目录下
    在这里插入图片描述
    登录rocketmq client端服务器查看日志
    在这里插入图片描述

    4)mq的消息消费失败后,会重复消费,重复消费的次数?
    在mq的server端启动时会打印关于消费失败的重试机制,关键字为:messageDelayLevel
    在这里插入图片描述

    5)为什么明明是重复消费,但在排查1中RocketMQ的控制台中看到的#Diff都为0?
    原因:
    1)#Diff表示某个topic的生产和消费的差值。在排查1中,虽然我们的消息是消费失败了,但生产的消息都是被消费了(即使是消费失败了,但也触发ConsumerListener消费了,也属于被消费了)。
    2)当我们把mq的Consumer端的进程kill掉,再过一段时间,就会发现%RETRY%messageConsumerGroupTest和其它的topic的#Diff的值不为0,如标题三中的示例图。

    • 最终解决方法:
    • 将mq消息消费模块的pom.xml文件中mybatis的版本号由1.4.1改为1.3.1,并将相关业务代码的异常捕捉级别改为Throwable
    • 反思:

    整个MQ异常问题的处理过程持续了1天半,其中大半的时间浪费在了MQ server端的排查。
    从项目第一次引入Rocketmq作为消息中间件到现在也有一年多的时间了,期间虽然一直在写相关的业务代码,但仅"知其然,不知其所以然",一直没有深入了解整个MQ的架构、原理、特性。
    直到这次出现问题,才发现自己对mq的底层实现知之甚少。
    所以要关注源码,关注底层实现,多写笔记。
    最后,借用《黑客与画家》里的一句话:如果自己就是潮水的一部分,怎么能看见潮流的方向呢?

    展开全文
  • kafka重复消费问题

    万次阅读 2018-10-22 10:33:14
    今天查看Elasticsearch索引的时候发现有一个索引莫名的多了20w+的数据,顿时心里一阵惊讶,然后赶紧打开订阅服务的日志(消费者),眼前的一幕让我惊呆了,我的消费服务的控制台一直在不断的刷着消费日志(刚开始我...
  • kafka 重启consumer 重复消费问题

    千次阅读 2020-09-03 22:47:04
    问题描述:kafka的某些topic在消费完毕后段时间,重启唯一消费者,offset会重置为最小offset重新消费,一直导致kafka消费的重复消费问题问题产生原因:是offset信息过期导致的。我一直以为消费者保持在线,最新...
  • 解决一个Windows下启动项重复问题

    千次阅读 2011-08-26 22:21:55
    我喜欢Windows在运行的时候,任务管理器出现在右下的系统托盘里,便于监视系统的运行情况。为了能够开机自动运行任务管理器,我在”开始菜单”-->“程序”-->“启动”项中...这时问题出现了,当我开机的时候,taskmgr.e
  • kafka 重复数据读取原因

    千次阅读 2018-08-07 16:57:32
    之前一直遇到kafka数据读取重复问题,但都通过一些方式去避免了,今天专门去探究了下原因。出现这个问题,一般都是设置kafkaoffset自动提交的时候发生的。原因在于数据处理时间大于max.poll.interval.ms(默认300s...
  • 解决表单重复提交问题

    千次阅读 多人点赞 2017-08-12 11:41:41
    问题背景:由于用户或网络延迟原因,用户在提交表单时会多次点击提交,此时表单内容会被多次提交给服务器。这样会资源的浪费。亟待解决。表单重复提交类型:1. 提交完表单以后,不做其他操作,直接刷新页面,表单会...
  • JavaScript之重复渲染问题

    千次阅读 2018-05-21 15:56:52
    重复渲染问题1. 原因: 对于不断变化的需求,我们不想改变原有代码的实现逻辑,就会想着直接在原有代码基础上累加新需求的代码,这样会导致代码重复,并且页面会多次改变重新渲染——重复渲染,这影响了页面渲染效率...
  • 老板使用的是雷柏V500机械键盘,2016年在其淘宝官网买的,买回来看没有小键盘,我也是晕了,本身就是用的笔记本电脑,使用的时候发现竟然会自动弹出上单符号‘‘’...,朝外拨一下就停了,看来就是这个问题!安装...
  • 在写测试用例的时候,同一个package 的不同用例分别各自配置了application类,里面指定了配置文件 @ImportResource(value = { "classpath*:spring-context-test.xml" }) 结果发现一直重复bean定义的错误,怎么...
  • 文章目录如何解决后台日志显示Nacos客户端不断重复拉取配置的问题问题描述问题原因解决方法临时解决方法永久解决方法 如何解决后台日志显示Nacos客户端不断重复拉取配置的问题 问题描述 后台服务日志显示Nacos客户端...
  • 随着调度量的增加,突然开始出现job重复调度的情况,且没有规律可循。网上也没有说得较为清楚的解决办法,于是我们开始调试Quartz源码,并最终找到了问题所在。 如果没有耐性看完源码解析,可以直接拉到文章最末,有...
  • 项目运行了1个多月,多实例的Quartz一直没有问题,今天突然出现一个JOB重复执行了2次。查看日志发现两个实例各执行了一次,但是是偶发现象,也就是一会执行一次,一会执行两次,没有规律。好奇怪,明明用了多实例...
  • Jenkins触发构建后一直重复构建

    千次阅读 2019-10-10 11:01:44
    这个问题原因因为Jenkins配置的映射分支存在多个导致的。 1.点击某一个构建历史,查看“控制台输出”,如果日志内容过多,在完整日志超链接处,点击查看完整日志; 2.在日志的最顶部,会发现git rev-parse 存在...
  • Spring-kafka遇到的消息重复消费问题

    千次阅读 2019-03-22 23:59:49
    问题描述:kafka的某些topic在消费完毕后段时间,重启唯一消费者,offset会重置为最小offset重新消费,一直导致kafka消费的重复消费问题问题产生原因:是offset信息过期导致的。我一直以为消费者保持在线,最新...
  • 外键为主键可以重复原因

    千次阅读 2017-06-21 20:51:19
    我面都只到数据表中主键时唯一的,不能重复的,但我们经常看到外键作为主键时,确可以重复
  • 问题描述 使用idea操作代码进行VCS很是方便,向github进行push和pull操作非常方便,但是,最近频繁提示需要重新输入用户名和密码,很是烦人。 二、问题原因 查找后发现问题原因是:idea创建项目时候,...
  • 本文仅记录排查和问题定位、解决的过程
  • 最近在项目开发测试的时候,发现Tomcat启动时项目重复加载,导致资源初始化两次的问题 导致该问题原因:如下图:在Eclipse中将Server Locations设置为“Use Tomcat installation(takes control of Tomcat ...
  • 后台收到微信重复请求问题

    万次阅读 2017-11-11 21:16:33
    最近做微信开发,码多付,H5+SpringMVC实现。扫码时,通过oauth2获取微信用户信息,发现扫码次后台发现响应了2次,回调函数也访问了2次。用微信web开发者工具、UC浏览器...问题一直拖了2周没解决,那个郁闷呀......
  • Kafka导致重复消费原因和解决方案

    千次阅读 2020-07-13 10:12:13
    导致kafka的重复消费问题原因在于,已经消费了数据,但是offset没来得及提交(比如Kafka没有或者不知道该数据已经被消费)。 总结以下场景导致Kakfa重复消费: 原因1:强行kill线程,导致消费后的数据,offset没有...
  •  用户在执行表单提交操作时,后端进行处理,当处理还在进行的时候用户又次提交请求,后端再次处理。如果是敏感操作,如财务相关的操作,则会对业务系统造成重大伤害。 产生原因 1.用户多次点击提交按钮 解决...
  • docker service create 网络模式 host ,用-p ...一直重复 preparing [root@BizMsTestAlpha test]# docker service create --replicas 1 --network host -p 8081:8081 --name test test image test:latest could not...
  • C++随机数重复问题

    千次阅读 2016-01-06 12:24:08
    //在循环中初始化种子多次,将会导致“随机数”重复
  • HttpClient 设置超时后,若在设定的时间内没有返回数据,httpClient底层会重复请求 DefaultHttpClient client= new DefaultHttpClient(); client.getParams().setParameter(CoreConnectionPNames.CON...
  • kafka重复数据问题排查记录

    千次阅读 2018-06-17 10:15:29
    问题 向kafka写数据,然后读kafka数据,生产的数据量和消费的数据量对不上。 开始怀疑人生,以前奠定的基础受到挑战。。。 原来的测试为什么没有覆盖生产量和消费量的对比? 消费者写的有问题?反复检,无果。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 233,617
精华内容 93,446
关键字:

一直重复一个问题是什么原因