展开

关键词

首页关键词诡异现象

诡异现象

相关内容

云服务器

云服务器

腾讯云服务器(CVM)为您提供安全可靠的弹性云计算服务。只需几分钟,您就可以在云端获取和启用云服务器,并实时扩展或缩减云计算资源。云服务器 支持按实际使用的资源计费,可以为您节约计算成本。
  • 记录一则xtts测试遇到的诡异现象

    背景:在一次xtts的测试中遇到因源库数据文件名称包含特殊字符导致表空间全量备份缺失文件,之所以说是诡异现象,是因为xtts的全备日志不报任何错误,在恢复阶段才发现缺少文件,这个缺陷比较隐晦,尤其在迁移的表空间较多的场景下客户环境是AIX 5.3 + Oracle 10.2.0.3,使用xtts脚本2.0版本,本文在测试环境OEL 5.7 + Oracle 10.2.0.5 下,使用xtts脚本3.0实验,同样可以重现这个现象,说明是普遍现象。
    来自:
    浏览:245
  • 一个诡异的SQL事务现象

    今天测试过程中,同事提出了一个,看似诡异,实则很基础的问题,乍一看会被迷惑。用实验来复现下这个问题,(1) 创建测试表,A表的id字段是主键,B表的id_a字段是外键,参考A表的id主键, ?任何看似诡异的现象背后,都有他存在的原因,即哲学所说的“存在即合理”。如果您觉得此篇文章对您有帮助,欢迎关注微信公众号:bisal的个人杂货铺,您的支持是对我最大的鼓励!共同学习,共同进步:)
    来自:
    浏览:212
  • 广告
    关闭

    云+社区杂货摊第四季上线啦~

    攒云+值,TOP 100 必得云+社区定制视频礼盒

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到
  • Spring|因动态代理使用不注意导致的诡异现象

    笔者在新的定时任务项目中,限定一个类只能写一个Job,类似于写脚本,一个Job一个脚本。对于简单的任务我们并不约定一定要有Service层,但在Job中我们可能需要将某些数据库操作放到事务中执行,为让注解事务生效,我们不能直接使用this调用事务方法。调用本类事务方法有两种方式可以让注解事务生效:一是通过在类中注入自己,也就是循环依赖注入;二是在需要时再从bean工厂中获取bean; 场景描述假设现有类A,在类A的methodA方法中,先从Spring的bean工厂获取到类A的实例,再调用类A的methodB方法,这样做的目的是使事务生效。代码如下:@Componentpublic class ProxyObjFieldNpe { @Value(${field_value}) private String fieldValue; public void methodA() { if (fieldValue == null) { System.out.println(methodA NPE...); } 从bean工厂取,使AOP生效 ProxyObjFieldNpe thisRef = OnionXxlJobApplicationContent.getBean(ProxyObjFieldNpe.class); ......调用某些事务方法 thisRef.methodB(); } private void methodB() { if (fieldValue == null) { System.out.println(methodB NPE...); } } } 外部调用methodA方法:proxyObjFieldNpe.methodA();结果输出的是:methodB NPE...为什么methodA方法获取到fieldValue字段的值不为空,而methodB方法获取到的fieldValue却为空呢?这就是笔者遇到的问题。细心的朋友,你有没有看出原因呢?实际项目中调试的结果截图如下:?图中AutoCloseTimeoutOrderJob实例的字段都为空,这些字段都是声明自动注入的Mapper与Service,不可能为空。但从调试结果我们可以看出,从bean工厂获取到的是AutoCloseTimeoutOrderJob的代理对象,并非AutoCloseTimeoutOrderJob。在ProxyObjFieldNpe的例子中,我们从bean工厂获取到的也是ProxyObjFieldNpe的代理对象,该代理对象继承ProxyObjFieldNpe。因此,与上面截图一样,代理对象的字段都是NULL。外部调用ProxyObjFieldNpe的methodA方法调用的是代理类的methodA方法,那为什么methodA方法拿到字段的值非空,而methodB方法拿到的是空值呢?因为methodB方法被声明为private了,代理类没法重写该方法。因此thisRef.methodB();实际调用的是代理类父类的methodB方法。methodB方法中获取fieldValue获取的是代理类对象的,这就是methodA方法获取到fieldValue字段的值不为NULL,而methodB方法获取到fieldValue字段的值为NULL的原因。“methodB方法中获取fieldValue获取的是代理类对象的 ,这句我们稍后从字节码层面理解。问题:为什么methidB方法的访问标志是private,代理对象是ProxyObjFieldNpe的子类,却能调用其父类的methidB方法?为什么代理对象的字段为NULL? 为什么代理对象能调用父类的private方法?因为调用访问标志为private的methodB方法是在ProxyObjFieldNpe类的methodA方法中调用的,而不是在代理类的methodA方法中调用的,内部调用当然有访问权限。代理类继承ProxyObjFieldNpe,外部调用代理类的methodA方法时,最终经过方法拦截器调用代理类父类的methodA方法,因此methodA方法中调用methodB方法实际上是在父类中调用的。ProxyObjFieldNpe的methodA方法编译后生成的字节码如下(部分): 15: ldc #6 class comwujiuyetestProxyObjFieldNpe 17: invokestatic #7 Method comwujiuyetestOnionXxlJobApplicationContent.getBean:(LjavalangClass;)LjavalangObject; 20: checkcast #6 class comwujiuyetestProxyObjFieldNpe 23: astore_1 24: aload_1 25: invokespecial #8 Method comwujiuyetestProxyObjFieldNpe.methodB:()V 偏移量为15、17、20三条指令是:从bean工厂获取代理bean,并使用checkcast指令将代理对象类型强制转为父类类型。偏移量为24、25两条字节码实现调用methodB方法,非静态方法的第一个隐式参数为this引用,此处传的是代理类对象的引用,因此在methodB方法中,使用this(代理对象的引用)获取到的字段都是空的。为什么代理对象的字段为NULL?如果熟悉Spring Bean生命周期,那么就不难理解。bean的创建过程如下:1、反射创建bean;2、为bean注入属性;3、调用*Aware接口的方法;4、调用BeanPostProcessor的postProcessBeforeInitialization方法;5、调用初始化方法,afterPropertiesSet或自定义的初始化方法;6、调用BeanPostProcessor的postProcessAfterInitialization方法;代理对象是在上述步骤的第六步创建的,即调用某个BeanPostProcessor的postProcessAfterInitialization方法之后,返回代理对象,如果是单例对象,则会将该对象保存到bean工厂(容器)中。也就是说,bean工厂中存储的是代理对象。下面两张图是我在项目中调试Spring代码的截图。(图中的小红点下方有个问号,这是条件断点,只有满足条件时才会停在断点处。条件的设置可右击小红点,在弹出框中输出条件,条件的编写与在代码中添加一个if语句是一样的。)?在调用BeanPostProcessor的postProcessAfterInitialization方法之前, bean还是原生的bean。?在调用BeanPostProcessor的postProcessAfterInitialization方法之后,bean已经变成代理对象了。因此,使用cglib生成的代理对象 (继承方式),在父类中,通过代理对象调用父类私有方法不会报错,但字段都是空的。
    来自:
    浏览:196
  • 线程执行顺序诡异现象谈,你不知道的pthread_create

    引文:学而时习之,不亦说乎。总是忙于具体项目,业务功能的实现;关于编程本身的技能都要有些生疏了,于是就选择了几个专题做了一次温习,重点放在了多线程和多进程上,跑了一个实例,居然有新的发现:(1)多个线程顺序创建的顺序=线程执行顺序吗?(2)多个线程顺序创建,回调函数执行顺序有规律吗?示例:#include apue.h #include void * thr_fn1(void *arg) {     printf(thread 1 returningn);     return((void *)1); } void * thr_fn2(void *arg) {     printf(thread 2 exitingn);     pthread_exit((void *)2); } int main(void) {     int            err;     pthread_t    tid1, tid2;     void        *tret;     err = pthread_create(&tid1, NULL, thr_fn1, NULL);     if (err != 0)         err_quit(cant create thread 1: %sn, strerror(err));     *sleep(1);*     err = pthread_create(&tid2, NULL, thr_fn2, NULL);     if (err != 0)         err_quit(cant create thread 2: %sn, strerror(err));     err = pthread_join(tid1, &tret);     if (err != 0)         err_quit(cant join with thread 1: %sn, strerror(err));     printf(thread 1 exit code %dn, (int)tret);     err = pthread_join(tid2, &tret);     if (err != 0)         err_quit(cant join with thread 2: %sn, strerror(err));     printf(thread 2 exit code %dn, (int)tret);     exit(0); }输出:thread 2 exiting thread 1 returning thread 1 exit code 1 thread 2 exit code 2讨论  看到这个顺序是否有点意外,从多线程实现的机制来讲,这个顺序是没问题的,创建的过程不等于执行的过程,各种教科书都会这么告诉我们。可是我想知道的是,创建的顺序是否和执行的顺序有关系呢?还是用数据说话吧,我执行了10次,每次的输出顺序都是如此。这个引起了我的兴趣。线程2为何每次都是优先于线程1执行呢?按照cup顺序工作的原理,线程1应该先得到时间片才对啊,至少线程1和线程2应该具有同等的执行顺序才对。为何每次的结果都是线程2限制性?却是线程1先完成呢?纠结探索中,有条件的园友可以自己测试一下,看看是否有同样的问题呢。疑问1:同时创建线程是否线程2优先于1呢?-----单台机器实测来看貌似如此。疑问2:顺序创建时间差增大,执行顺序会如何?我在线程1创建后做了一个sleep(1),结果:thread 1 returning thread 1 exit code 1 thread 2 exiting thread 2 exit code 2疑问3:顺序创建线程,线程2的执行顺序为何优于线程1?探索中...!求答案! 环境vmware8.0 + windows xp + REHL6.3
    来自:
    浏览:258
  • 登录缓慢的诡异问题

    最近有套测试库,出现了很诡异的现象,通过PLSQL Developer登录这套数据库(用户名:user_a)的时候异常的慢,几分钟才能连上,从现象来看,可能有很多原因,大家可以先考虑下可能的原因有什么?
    来自:
    浏览:119
  • 多线程执行顺序诡异现象谈,你不知道的pthread_create

    引文:学而时习之,不亦说乎。总是忙于具体项目,业务功能的实现;关于编程本身的技能都要有些生疏了,于是就选择了几个专题做了一次温习,重点放在了多线程和多进程上,跑了一个实例,居然有新的发现:(1)多个线程顺序创建的顺序=线程执行顺序吗?(2)多个线程顺序创建,回调函数执行顺序有规律吗?示例:#include apue.h#include void *thr_fn1(void *arg){ printf(thread 1 returningn); return((void *)1);}void *thr_fn2(void *arg){ printf(thread 2 exitingn); pthread_exit((void *)2);}intmain(void){ int err; pthread_t tid1, tid2; void *tret; err = pthread_create(&tid1, NULL, thr_fn1, NULL); if (err != 0) err_quit(cant create thread 1: %sn, strerror(err)); *sleep(1);* err = pthread_create(&tid2, NULL, thr_fn2, NULL); if (err != 0) err_quit(cant create thread 2: %sn, strerror(err)); err = pthread_join(tid1, &tret); if (err != 0) err_quit(cant join with thread 1: %sn, strerror(err)); printf(thread 1 exit code %dn, (int)tret); err = pthread_join(tid2, &tret); if (err != 0) err_quit(cant join with thread 2: %sn, strerror(err)); printf(thread 2 exit code %dn, (int)tret); exit(0);}输出:thread 2 exitingthread 1 returningthread 1 exit code 1thread 2 exit code 2讨论  看到这个顺序是否有点意外,从多线程实现的机制来讲,这个顺序是没问题的,创建的过程不等于执行的过程,各种教科书都会这么告诉我们。可是我想知道的是,创建的顺序是否和执行的顺序有关系呢?还是用数据说话吧,我执行了10次,每次的输出顺序都是如此。这个引起了我的兴趣。线程2为何每次都是优先于线程1执行呢?按照cup顺序工作的原理,线程1应该先得到时间片才对啊,至少线程1和线程2应该具有同等的执行顺序才对。为何每次的结果都是线程2限制性?却是线程1先完成呢?纠结探索中,有条件的园友可以自己测试一下,看看是否有同样的问题呢。疑问1:同时创建线程是否线程2优先于1呢?-----单台机器实测来看貌似如此。疑问2:顺序创建时间差增大,执行顺序会如何?我在线程1创建后做了一个sleep(1),结果:thread 1 returningthread 1 exit code 1thread 2 exitingthread 2 exit code 2疑问3:顺序创建线程,线程2的执行顺序为何优于线程1?探索中...!求答案! 环境vmware8.0 + windows xp + REHL6.3
    来自:
    浏览:278
  • 0521-Hadoop命令无法访问HDFS路径诡异问题解决

    1诡异现象Fayson今天在集群中浏览HDFS数据目录时发现,通过Cloudera Manager的“文件浏览”功能可以正常的浏览某一个HDFS数据目录,如下显示:?
    来自:
    浏览:541
  • Redis Cluster FlushAll失败

    转自:http:longlongblog.cn2017110158问题背景Flush是一个极少用到的操作,不过既然碰到过诡异的现象,也记录在此。但是诡异的现象出现了,我们得到的结果是主从节点发生了切换,并且数据并没有被清空。问题分析分析以上case,Redis采用单线程模型,flush操作执行的时候会阻塞所有其它操作,包括集群间心跳包。最终造成了主从节点发生了切换,并且数据没有被清空的现象。
    来自:
    浏览:842
  • phpexcel 读取中文gbk数据的csv在linux服务器下乱码的解决方法.

    在做一个phpexcel导入csv数据时,出现诡异现象, 本地windows下调试顺畅, 无乱码, 发布到linux服务器后出现乱码了.
    来自:
    浏览:354
  • GPU 云服务器

    腾讯GPU 云服务器是提供 GPU 算力的弹性计算服务,具有超强的并行计算能力,作为 IaaS 层的尖兵利器,服务于深度学习训练、科学计算、图形图像处理、视频编解码等场景……
    来自:
  • FPGA 云服务器

    腾讯FPGA云服务器是基于FPGA硬件可编程加速的弹性计算服务,您只需几分钟就可以获取并部署您的FPGA实例。结合IP市场提供的图片,视频,基因等相关领域的计算解决方案,提供无与伦比的计算加速能力……
    来自:
  • 专用宿主机

    专用宿主机(CDH)提供用户独享的物理服务器资源,满足您资源独享、资源物理隔离、安全、合规需求。专用宿主机搭载了腾讯云虚拟化系统,购买之后,您可在其上灵活创建、管理多个自定义规格的云服务器实例,自主规划物理资源的使用。
    来自:
  • 黑石物理服务器2.0

    腾讯黑石物理服务器2.0(CPM)是一种包年包月的裸金属云服务,为您提供云端独享的高性能、无虚拟化的、安全隔离的物理服务器集群。使用该服务,您只需根据业务特性弹性伸缩物理服务器数量,获取物理服务器的时间将被缩短至分钟级。
    来自:
  • 容器服务

    腾讯云容器服务(Tencent Kubernetes Engine ,TKE)基于原生kubernetes提供以容器为核心的、高度可扩展的高性能容器管理服务。腾讯云容器服务完全兼容原生 kubernetes API ,扩展了腾讯云的云硬盘、负载均衡等 kubernetes 插件,为容器化的应用提供高效部署、资源调度、服务发现和动态伸缩等一系列完整功能,解决用户开发、测试及运维过程的环境一致性问题,提高了大规模容器集群管理的便捷性,帮助用户降低成本,提高效率。容器服务提供免费使用,涉及的其他云产品另外单独计费。
    来自:
  • 弹性伸缩

    腾讯弹性伸缩(AS)为您提供高效管理计算资源的策略。您可设定时间周期性地执行管理策略或创建实时监控策略,来管理 CVM 实例数量,并完成对实例的环境部署,保证业务平稳顺利运行。弹性伸缩策略不仅能够让需求稳定规律的应用程序实现自动化管理,同时告别业务突增或CC攻击等带来的烦恼,对于每天、每周、每月使用量不停波动的应用程序还能够根据业务负载分钟级扩展。
    来自:
  • 云函数

    云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助您在无需购买和管理服务器的情况下运行代码。您只需使用平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性、安全地运行代码。SCF 是实时文件处理和数据处理等场景下理想的计算平台。
    来自:
  • 批量计算

    批量计算(Batch)是为有大数据计算业务的企业、科研单位等提供高性价比且易用的计算服务。批量计算可以根据用户提供的批处理规模,智能地管理作业和调动所其需的最佳资源……
    来自:
  • 消息队列 CMQ

    腾讯云消息队列(CMQ)是一种分布式消息队列服务,它能够提供可靠的基于消息的异步通信机制,能够将分布式部署的不同应用(或同一应用的不同组件)之间的收发消息,存储在可靠有效的 CMQ 队列中,防止消息丢失。CMQ 支持多进程同时读写,收发互不干扰,无需各应用或组件始终处于运行状态。
    来自:
  • 消息队列 CKafka

    CKafka(Cloud Kafka)是一个分布式的、高吞吐量、高可扩展性的消息系统,100%兼容开源 Kafka API(0.9版本)。Ckafka 基于发布/订阅模式,通过消息解耦,使生产者和消费者异步交互,无需彼此等待。Ckafka 具有数据压缩、同时支持离线和实时数据处理等优点,适用于日志压缩收集、监控数据聚合等场景。
    来自:

扫码关注云+社区

领取腾讯云代金券