精华内容
下载资源
问答
  • 刚开始发现Linux上批量计算出来的结果非常离谱,我们首先想到的就是包打错了。我们的代码分为两块,一块是JAVA从数据库取模型的输入参数,然后JAVA调用C++进行模型计算,计算结果返回JAVA再入数据库。我们检查Linux...

     案例一:

      由于成员变量的初始化写在了构造方法里,以致于原本每次模型计算都要初始化一次,变成了创建一次对象才初始化一次,一批量的计算才初始化一次。

     现象:在WINDOWS的本地测试类上单次计算调试结果正确,而相同的代码放到LINUX上批量计算结果错误。

    刚开始发现Linux上批量计算出来的结果非常离谱,我们首先想到的就是包打错了。我们的代码分为两块,一块是JAVA从数据库取模型的输入参数,然后JAVA调用C++进行模型计算,计算结果返回JAVA再入数据库。我们检查Linux打的包大小和测试环境上的包大小是否一样,结果发现是一样的。接着我们推测是不是只修改了程序的部分内容导致包大小没有明显变化。我们重新打了C++和JAVA的包,发现现象还是一样。本地上单步调试就是和Linux上跑出来的结果不一样。当时我们的测试类只支持单次模型计算而不支持批量计算。我们压根就没有想到是代码的问题,而想的是环境问题和配置问题。因为经过代码比对,我的本地上的代码和打包的代码是完全一致的,我本地上单次计算模型结果都正确,就认为代码是正确的。Linux上不能像本地一样设断点单步调,只好不断的加日志,查日志。然而多进程同时批量计算写的却是同一个日志文件,导致日志是混起来的。那就关掉多余进程只留一个进程,这样日志就不会混了。但是计算量贼大,进程关了只剩1个,每一次全流程计算都耗了大量时间,但是结果就是和本地的不一样,绝不绝望?日志文件很大,且没有把输入参数的主键ID传到C++里,导致我本地上测的模型参数在日志文件里很难定位出来。我坚信我的代码没问题,要不然我在本地上跑出来的结果就不会正确了。查这问题重上午到第二天凌晨,人都傻了,细想每一步有没有可能出错,不断的试验,啥办法都试过了。最后陪加班的组长建议,把本地上的测试类改成和Linux上的流程一致,改成支持批量计算。我依旧认为是环境问题,而不是代码问题,改测试类是浪费时间,时间又很晚了,改代码的欲望十分低落,但还花了点时间把代码改了,不抱希望的地丢了几笔参数跑跑看。他娘的,居然错误复现了。不花两分钟的时间就定位出了问题把它改了。

    代码原因,每个计算任务都是跑一批模型输入参数的,但每个任务只创建一次同种类型的模型输入参数对象。我把输入参数的默认值初始化写在了构造方法里,每次计算都要求初始化才行。在构造方法里初始化模型参数的结果就是一批模型参数只被初始化一次,所以跑单笔模型参数是复现不出问题的。

    案例二:

     模型参数的组合主键新增了一个"场景"字段,而代码中用HashMap进行缓存的key没改,导致不同"场景"下的模型输入参数不同,但是不同"场景"的计算结果却完全一样。

    现象:导致不同"场景"下的模型输入参数不同,但是不同"场景"的计算结果却完全一样。

    立马决定要复现问题,単测了一笔模型输入,发现和Linux上跑的结果不一样。首先把测试类改成支持多"场景"。接着在本地准备和Linux上测试条件,这是一个繁琐的过程...最后由于测试条件不是完全一致,计算结果本地和Linux上跑的结果不一样,但这并不是问题,因为Bug现象被成功复现了,所有不同“场景”下取的参数不同,结果却全部一样。

    最后发现是缓存中的Key值没有加上"场景"字段,Key依旧是原来的id主键,导致取的关联参数都是第一个相同id模型参数的关联参数。所以计算的结果都是第一个同id的模型参数的结果。

    展开全文
  • 代码很简单,就是通过 HttpClient 请求一个 JSON ,再返回到客户端,用以解决 JSON 跨域。 Program.cs 没有动,Startup.cs 中就是如下代码,其它没有添加任何文件和代码: ...是我代码有问题,还是环境有问题?
  • 使用不同的环境结果不一样 测试代码:vector 1billion speed test.txt 使用VS time = 1150 ms, sum = 178329366400 time = 825 ms, sum = 178329366400 time = 285 ms, sum = 178329366400 time = 295 ms, sum = ...

    实验目的

    在C++中,vector是一个常用的可变长的容器。由于其内部数据结构相对于数组要复杂,调用关系更多,所以笔者猜测vector的随机访问性能要低于数组。于是在本文中,本实验被设计用于验证这个结论。

    原理

    首先,这里定义一个长度为1,000,000(即100万)整型vector,然后使用for和foreach(即 for(int v: vs)的循环)进行遍历,同时还测试了auto关键字对性能的影响:

    • test1: for
    • test2: for+预定义长度
    • test3: foreach + auto
    • test4: foreach + int
    • test5: int[] + for # 作为对比。

    每种组合进行循环求和,运行100次,使用的计时函数进行记录总用时,最后输出时间和求和结果。

    结果分析

    结果如下所示:

    *************** 
    使用不同的环境结果不一样 测试代码:vector 1billion speed test.txt
    使用VS
    test1: time = 1150 ms, sum = 178329366400 # for
    test2: time = 825 ms, sum = 178329366400  # for + len
    test3: time = 285 ms, sum = 178329366400  # foreach + auto
    test4: time = 295 ms, sum = 178329366400  # foreach + int
    test5: time = 186 ms, sum = 178329366400  # int[] + for
    
    使用MingGW
    test1: time = 717 ms, sum = 178329366400
    test2: time = 457 ms, sum = 178329366400
    test3: time = 1163 ms, sum = 178329366400
    test4: time = 1121 ms, sum = 178329366400
    test5: time = 267 ms, sum = 178329366400
    

    几点结论

    根据测试结果,我们可以有以下几个结论:

    • vector 的随机访问性能没有 int[] 好,在不同的编译器下相差 3-5倍;
    • 通过预定义长度的方式,可以提高访问的性能,因为 vector.size() 的操作是耗时的;
    • 使用 auto 关键字对性能没有影响,因为在编译时auto会进行相应数据类型的转换,不会对运行产生影响;
    • foreach 从原理上来说应该比 for 对 vector 做遍历时更好,所以VS编译出来的符合这个原则,而MingGW则不是;

    测试代码

    #include <iostream>
    #include <string>
    #include <future>
    #include <thread>
    #include <vector>
    #include <chrono>
    
    using namespace std;
    using namespace std::chrono;
    
    int heavy_work(int x) {
        return x + 2;
    }
    
    long test1(vector<int> &vs) {
        long sum = 0;
        for (int i = 0; i < vs.size(); ++i) {
            sum += vs[i];
        }
        return sum;
    }
    
    long test2(vector<int> &vs) {
        long sum = 0;
        for (int i = 0, len = vs.size(); i < len; ++i) {
            sum += vs[i];
        }
        return sum;
    }
    
    long test3(vector<int> &vs) {
        long sum = 0;
        for (auto i: vs) {
            sum += i;
        }
        return sum;
    }
    
    long test4(vector<int> &vs) {
        int sum = 0;
        for (int i: vs) {
            sum += i;
        }
        return sum;
    }
    
    void timing(long p(vector<int> &vs0), vector<int> &vs) {
        long long t1 = duration_cast<nanoseconds>(system_clock::now().time_since_epoch()).count();
        long long sum = 0;
        for (int i = 0; i < 100; i++)
            sum += p(vs);
        long long t2 = duration_cast<nanoseconds>(system_clock::now().time_since_epoch()).count();
        cout << "time = " << ((t2 - t1) / 1000000) << " ms, sum = " << sum << endl;
    }
    
    void test5() {
        int *vs = new int[1000000];
        for(int i = 0; i < 1000000; i++)
            vs[i] = i;
        long long t1 = duration_cast<nanoseconds>(system_clock::now().time_since_epoch()).count();
        long long sum = 0;
        for (int i = 0; i < 100; i++) {
            int sum1 = 0;
            for (int j = 0; j < 1000000; j++)
                sum1 += vs[j];
            sum += sum1;
        }
        long long t2 = duration_cast<nanoseconds>(system_clock::now().time_since_epoch()).count();
        cout << "time = " << ((t2 - t1) / 1000000) << " ms, sum = " << sum << endl;
    }
    
    int main() {
        vector<int> vs;
        for (int i = 0; i < 1000000; i++)
            vs.push_back(i);
    
        cout<< "test1: "; timing(test1, vs);
        cout<< "test2: "; timing(test2, vs);
        cout<< "test3: "; timing(test3, vs);
        cout<< "test4: "; timing(test4, vs);
        cout<< "test5: "; test5();
    
        return 0;
    }
    
    
    展开全文
  • HTML5代码同样实现渐变,为什么不同的环境执行效果差别大 执行效果 图片1: 老师的环境执行结果 图片2:学生环境执行的效果 同样的代码,为什么在老师环境中执行的效果与在学生环境中执行的效果差别这么大?问题出在...

    HTML5代码同样实现渐变,为什么不同的环境执行效果差别大

    执行效果

    图片1: 老师的环境执行结果
    在这里插入图片描述
    图片2:学生环境执行的效果这是学生环境执行的效果
    同样的代码,为什么在老师环境中执行的效果与在学生环境中执行的效果差别这么大?问题出在哪里呢?

    代码源码:

    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="utf-8">
    		<title>绘制直线的相关方法和属性以及线性渐变|径向渐变</title>
    		<style type="text/css">
    			body{
    				margin: 0px;
    				padding: 0px;
    			}
    			#mycanvas{
    				border:1px solid #9c9898;
    				background-color:#77ffcc ;
    			}
    		</style>
    		<script type="text/javascript">
    			window.onload=function(){
    				var canvas=document.getElementById("mycanvas");
    			//	var context=canvas.getClientRects()("2d");
    			var context=canvas.getContext("2d");
    				//线性渐变
    				var clg=context.createLinearGradient(0,0,200,0);
    				clg.addColorStop(0,"#ff0000");
    				clg.addColorStop(0.5,"#00ff00");
    				clg.addColorStop(1,"#0000ff");
    				context.fillstyle=clg;
    				context.strokeStyle=clg;
    				context.fillRect(10,10,200,200);
    				
    				//径向渐变
    				var crg=context.createRadialGradient(325,100,20,325,100,80);
    				crg.addColorStop(0,"#ffffff");
    				crg.addColorStop(0.75,"#ff0000");
    				crg.addColorStop(1,"#000000");
    				context.fillstyle=crg;
    //				context.strokeStyle=crg;
    				context.fillRect(230,10,200,200);
    				
    				};
    		</script>
    	</head>
    	<body>
    		<canvas id="mycanvas" width="578" height="200"></canvas>
    	</body>
    </html>
    
    展开全文
  • 今天发现sprintf函数一个问题,不同环境同样语句执行结果是不一样。一个时间字符串,要求是6位,不足6位时前面补0,用下面语句实现:  strcpy(tt,"2345"); printf("==%s==",tt); sprintf(t1,"%06s",tt); ...

    作者:iamlaosong

    今天发现sprintf函数的一个问题,不同环境下同样语句执行结果是不一样的。一个时间字符串,要求是6位,不足6位时前面补0,用下面语句实现:

    strcpy(tt,"2345");
    printf("==%s==",tt);
    sprintf(t1,"%06s",tt);
    printf("==%s==",t1);


    上述语句VC的执行结果:==2345====002345==

    同样语句Linux下执行结果:==2345====  2345==

    没有补0,补的是空格。要解决这个问题,补0的实现办法如下:

    k=strlen(tt);
    if (k < 6)
    {
      strcpy(t1, "000000");
      strncpy(t1+6-k,tt,k);
      printf("==%s==",tt);
      strcpy(tt,t1);
      printf("==%s==",tt);
    }
     

    展开全文
  •  md5是一项成熟加密技术,问题应该在代码里,查了查感觉可能是字符编码问题,导致加签没通过,这样话只能是环境导致字符编码出现问题,就我所知有getBytes()方法是得到一个操作系统默认编码格式字节...
  • 问题产生 在和上游系统接口对接的过程中,在生产环境上,发现对于2018-7-25 09:32:26.0这样的字符串,Gson...才发现问题没有想象的那么简单,同样的代码,在本地环境上去解析相同格式的字符串可以正常解析,而在...
  • MD5加密算法在web形势下和main方法下调用传入同样的参数(仅限于字符串参数包含中文) 计算出来的加密字符串不一样
  • Query Cache的功能就是缓存select语句的结果集。查询缓存会存储一个select查询的文本被传送到哭护端的相应结果。如果之后接到一个同样的查询,服务器会从查询缓存中检索结果,文不是再次分析和执行这个同样的查询。 ...
  • 生成.so文件后,使用cygwin环境调用时发现可以得到正常执行的结果;修改路径后用Linux调用也正常。 ![图片说明](https://img-ask.csdn.net/upload/202007/11/1594455421_451148.png) 但使用cmd环境或者直接双击....
  • 同样的字符串 在运行项目里面加密的密文是:bfeb426b460a4969593bc6681e34134d 在main方法里面加密的密文是:bcdd1e5c917dcb818196b2004d0f90f9 导致MD5加密相同字符串,密文却不一样的问题 查找MD5的加密方法 然后...
  • 同样环境,数据相同情况下,查询出来数据不同 纠结了许久 答案数据返回正确 但是我心里摸不着底SQL感觉还需要优化 也喜欢CSDN大佬们有时间能看一看 有limit 正常: ![图片说明]...
  • 1:在当前虚拟环境下,输入conda install keras=2.3.1命令的时候,需要下载这么多安装包 2:在同样的情况下输入pip install keras==2.3.1 请问大佬们,这是什么原因呢
  • 我在dev-c++下和VC6.0分别都是输入同样的代码(VC6.0下在retnrn 0;前有加上getch();) 为什么dev-cpp下没结果显示出来(不是窗口一闪而过,而是黑窗口,但没结果输出),而VC6.0下则输出 11 30 ?请大神指导,谢谢 ...
  • 训练的过程是独立的并没有放进项目环境中,而在本项目的其他模块中加入了自定义字典,导致项目jieba分词的词典环境与模型独立训练过程中的环境不同,一个query进来模型拿不到与训练过程中同样的分词结果,所以结果与...
  • Docker比较轻量级,容器(隔离运行环境)的启动和销毁都比较快,这些运行环境可以像现实世界中的集装箱那样,打包成一个一个的镜像,同样的镜像在不同的Docker环境中部署运行将会得到同样的结果,就像同一首...
  • 同样的函数,仅仅采用了箭头函数来声明,this的指向却完全不一样了? 结论先行:箭头函数的this指向不同于一般的function函数——箭头函数的this是在定义时绑定,而一般的function是在执行时绑定。 举例: 调用 ...
  • 结果:扁桃体提取物植物化学筛选显示,存在不同浓度生物碱,类黄酮,鞣酸,皂角苷和酚。 相比之下,植物部分乙醇提取物比水提取物具有更高代谢产物浓度。 两种蜂蜜样品理化参数均存在差异。 同样,植物...
  • 同样的程序代码,使用Visual Studio 进行编译,当目标平台分别为x86或x64环境时,其编译结果不同的。在x86环境下,指针都是4个字节的;而在x64环境下,指针都是8字节的。测试代码如下: #include<iostream> ...
  • (这里记录了笔者了解关于JDK环境配置信息,以及针对系统上存在不同版本JDK时所尝试解决方案。具体来说,是已安装 JDK 8 后,又安装了 JDK 9 时所遇到问题和尝试解决方法。这次记录以供有同样问题人士...
  • 裂尖结构蠕变应变是核电结构材料应力腐蚀裂纹扩展主要驱动力之一,为了了解核电结构材料在核电高温水环境蠕变特性,本文利用高压釜模拟核电一回路高温高压水环境,对核电结构材料304不锈钢进行了不同应力下单轴...
  • md5解析出的结果不一致的问题

    千次阅读 2016-08-22 13:22:27
    问题:md5在不同的环境下(例如:eclipse或intellij或tomcat下跑同样的代码),md5后的值不一样   解决方法:在参数转成字节的时候,统一字符集,下面方法红色部份   public static String MD5(String input) ...
  • 都有相同的参数:max(axis=None, skipna=None, level=None, numeric_only=None, **kwargs)但是,在python3环境下的python2环境的结果却是不同的同样的代码:import pandas as pd import numpy as np temp =
  • Unity在Win10环境下打不开项目一个解决办法

    万次阅读 多人点赞 2018-10-10 17:05:51
    我多次重装不同版本Unity,还重装了一次系统,结果问题依旧。  最后在网上找了半天,发现元凶竟然是游戏手柄,把手柄拔掉后,窗口立刻弹出来了,真是无语很。希望遇到同样问题朋友能在看到这篇文章后,别像...
  • 很多时候多线程环境下你会在不同的线程之间拥有许多窗口,或者多个线程之间通过消息机制通讯,此外,你还用诸如临界区等等互斥体来保护临界数据。在这样的复杂情况,如果不慎在线程之间交叉使用SendMessage发送消息...
  • 同样的战略选择、行业选择及定位、资源投入、市场环境,得到的结果有时却不同,这是因为团队成员、组织方式、体制效率不一样。或者说,战略一样,但执行方式不同,结果自然不同。 战略是一个系统的,而不是孤立的...
  • 参考编写了一份C++计算MD5值的代码,发现在Windows环境下计算出的MD5值内容是正确的,但同样代码在Linux环境下得到的结果却截然不同。。。
  • 因为新浪SAE环境和普通环境的不同,许多SAE提供服务不能在本地运行。往往我们写代码不能在本地测试,每次必须上传到SAE上面进行测试。现在不用这么麻烦,SaeServer在本地模拟SAE服务。让程序也能在本地进行测试...
  • redis 集群性能测试结果分析

    千次阅读 2015-01-15 14:11:17
     redis 集群性能测试以及与单机性能对比(1)中针对于相同硬件,不同网络环境不同并发数以及数据大小进行了测试,虽只是针对于set进行测试,但也能大体反映出不同条件下对性能影响。接下来测试主要针对于某个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 435
精华内容 174
关键字:

同样的环境不同的结果