精华内容
下载资源
问答
  • 文章目录Spring 典型,非典型循环依赖问题及其解决方法1、设计原则2、典型循环依赖3、到底什么是依赖4、强依赖5、弱依赖6、依赖调解7、Spring 是如何把构造函数进行解耦的 - Spring的依赖注入模型8、非典型的循环...

    Spring 典型,非典型循环依赖问题及其解决方法


    1、设计原则

    在设计时,我们应该尽量避免出现循环依赖的情况,应该把循环依赖的公共部分进行分层,抽取公共部分,然后依赖公共部分

    2、典型循环依赖

    但是由于某些业务之间的相互调用太多,总会有一些漏网之鱼出现了循环依赖,但是当你使用 @Autowired进行依赖注入时,程序是可以正常运行的。 当使用构造函数进行依赖注入时,则是不可以正常运行的,因为无法创建bean

    3、到底什么是依赖

    依赖,说的简单点,就是A 要用到B 的方法去执行逻辑,但是A 在何时需要用到B ,决定了这种依赖关系是强依赖还是弱依赖

    4、强依赖

    就是A 的产出就必须要有B的参与,没有B ,A就没法被生产出来,打个比方,就是没你不行

    构造函数注入是强依赖,Spirng 没法把对象new 出来,所以基于构造函数的循环依赖会导致无法创建bean

    5、弱依赖

    就是A 的产出需要有B的参与,没有B,A也能被生产出来,打个比方,没你也可以,有你是锦上添花

    @Autowired字段注入就是弱依赖,Spirng 可以把对象new 出来,所以项目可以正常启动

    那能不能正常执行呢? 可以, 按道理是不可以正常执行的,为什么现在可以呢,因为对你的循环依赖进行了调解

    6、依赖调解

    什么是依赖调解,依赖调解,就是解决循环依赖这个问题的,他是DI 实现的依赖调解

    7、Spring 是如何把构造函数进行解耦的 - Spring的依赖注入模型

    1、调用构造函数、解析强依赖(一般是无参构造),并创建类实例

    2、根据Field/GetterSetter中的依赖注入相关注解、解析弱依赖,并填充所有需要注入的类

    3、调用生命周期中的初始化方法(例如@PostConstruct注解或InitializingBeanafterPropertiesSet方法),执行实际的初始化业务逻辑

    这样,构造函数的功能就由原来的三个弱化为了一个,只负责类的构造。并将类的配置交由DI,将类的初始化逻辑交给生命周期。

    这样,就把基于构造函数的注入工作不会影响Bean 的创建工作,调解了强依赖导致的无法调解的问题

    8、非典型的循环依赖场景

    按照上面的理解,好像如果出现循环依赖,只要把构造函数改为@Autowired字段注入就可以了

    但是,其实构建bean的顺序也可能会导致是用 @Autowired字段注入 也无法调解的循环依赖

    配置类中如果出现了循环依赖,则可能会出现这个情况,无法调解

    因为配置类必须先加载自己的全部配置后,也就是先解决配置类自己的全部依赖,才会加载他自己定义的Bean

    这个时候,这里就是强依赖了,这也是为什么配置类建议使用构造函数注入的原因,他可以在设计上杜绝无法调解的循环依赖问题,因为实质上,在配置类里面定义的Bean 是强依赖于暴露他的配置类的

    展开全文
  • 顾名思义,身份链是在区块链上具有用户身份信息的链。链上的用户信息可以是加密的私密个人信息,也可以是非加密的公开信息。纵观国外的身份链项目,我们可以总结出以下的特点。 1)大部分的用户信息,特别是用户的...

    顾名思义,身份链是在区块链上具有用户身份信息的链。链上的用户信息可以是加密的私密个人信息,也可以是非加密的公开信息。纵观国外的身份链项目,我们可以总结出以下的特点。

    1)大部分的用户信息,特别是用户的私密信息一般不会发布在区块链上,而是以加密的形式存储在用户的终端设备或者去中心化的星际文件系统(Interplanetary File System, IPFS)中。

    2)存储在区块链上的是用户信息经过验证后进行加密和随机数化的结果。身份验证者或者使用者必须经过用户的同意,并且得到临时许可(过时间不能使用)的令牌才能验证或者使用用户的信息。

    3)身份链的客户端一般都是智能手机。智能手机中包含加密数字货币的“钱包”,“钱包”里面包含用户的私钥。如果私钥丢失了,怎么办呢?部分身份链系统比如uPort提供了一种处理方法,可以通过别人帮忙证明来产生新的私钥,以代替旧的私钥。

    4)身份链客户端的验证一般都会使用生物验证的方法。例如,利用指纹和虹膜的验证来保护私钥。再加上一次性口令,用来保护客户端与链上交互的安全。

    5)个别区块链使用智能合约的方式来实现身份数据的访问控制。

    如图3-3所示是目前比较活跃的国外身份链公司。

    目前比较活跃的国外身份链公司

    其他相关的身份链公司在欧洲和美国正在不断涌现。之所以出现这样的情形,主要是因为大家都认为身份链和智能“钱包”是区块链安全的基础,而且能够得到广泛的应用。在中国,贵州高新区也在利用身份链进行精准扶贫。中国银行也在身份链方面做了非常多的工作,如以身份链为技术基础建立了“公益中国”,并且已经在中国银行内部使用身份链来处理党务,比如提交党费、建立党员档案等。

    展开全文
  • LCD典型问题及解决方案

    万次阅读 多人点赞 2016-09-08 13:40:13
    在我们的设备开发当中会, LCD的开发过程中会遇到一些问题,今天我们给大家带来一些LCD常见的典型汇总下来提高再次开发的效率。   2 LCD典型问题及解决方案   2.1 黑屏 or 白屏  背光上电后LCD是默认有黑屏和...

                                           LCD典型问题及解决方案


    在我们的设备开发当中会, LCD的开发过程中会遇到一些问题,今天我们给大家带来一些LCD常见问题的,把它汇总下来提高我们再次开发的效率。

    下面我们来看看有哪些详细问题:

    一.黑屏 or 白屏

        背光上电后LCD是默认有黑屏和白屏两种情况的。

        这个可能是遇到最多的情况了,开机之后黑黑一片或者是白白一片,你的一腔热情瞬间降到冰点,不怕可以从下面几个地方入手:

    a、 检查供电

        如果供电都不正常,你再使劲调都是浪费感情,我们检查两路电VCC(2.8V) IOVCC(1.8V)。

    (1)、检查手机连接器上VCC和IOVCC是否有电,没有电那就检查软件是否写的正确,

    是否申请到这两路电,这两路电是否由哪个gpio控制而没有打开。

    (2)、检查转接板一端是否有电供到LCD panel上,如果没有八成是转接板有问题,你想办法把电引到LCD panel上或着直接重新做转接板。

    b、检查背光

        之所以晚上能看到月亮,并不是因为月亮本身会发光,而是因为太阳照到了月亮反射到咱们的眼睛里了,同样LCD 本身的颜色你也是看不到的,只有背光照到上面你才能看到五彩的世界,所以黑屏的情况接查背光是必要的,查看spec上背光的led是并联还是串联,是否你给你电压不够,这里有个小技巧,大多数背光芯片的典型电流值都是20MA,根据这c个你也可以判断背光正常与否。

    c、检查接口模式

        厂商的IC都可以支持好几种接口的配置(一般叫m0\m1\m2)RGB接口的屏你非要配置成MDDI的,结果可想而知。

    d、检查reset

        有些LCD并不是上电就复位的,需要自己手动复位,没有复位就不会正常显示。一般都是高低高这个逻辑,低电平保持多长时间由spec上规定的写,当然你写上10ms就一点问题都没有了(低电平保持时间都是us级别的)。

    e、检查接口连接

        无论是RGB接口还是MIPI接口,数据一定要保持通路,屏点不亮除了检查供电外,数据的通路也是有必要检查的,这个需要你一根线一根线的去测要有耐心哦~_~。

        如果你上面5条都没问题,下命令0x11、0x29在LCD的FPC上的VGH、VGL的电压就会被拉起来(4v~16v左右,一般会大一点10v多),可以通过FPC上的测试点测出来。

    f、检查代码

        检查代码说的有点笼统,你会问“我知道代码哪有问题还找你干嘛?”。当然代码内容是比较多的可以从下面几个方面入手:

    (1)、framebuffer申请的内存不够大,比如你的屏是QHD的,而你只申请个WVGA这么大的buffer,那手机就会因为你小气而生你的气“小样的我就不亮”,所以跟做人一样你还是阔气一点多给点buffer吧(高通平台有个MSM_FB_SIZE这个变量由bootmem来申请大小)。

    (2)、如果是mipi接口CMD模式,你要检查TE信号,LCD默认的刷新率是60HZ(某些IC是可以配的),如果你的TE(vsync)信号比这个小的话那肯定也不会点亮或者出现麻点条纹等,假如LCD是65HZ每秒从panel上的ram往LCD的显示电路上刷,刷完之后会给手机一个TE信号,手机接收到TE信号在刷下一帧,那你手机才60HZ接收TE是不有些慢啊,貌似死锁了啊,手机就刷一帧,之后就是遥遥无期的等待,看黑屏了吧(注意:这个TE小的话cat dev/graphics/fb0会卡死)。

    (3)、如果是RGB接口,你SPI的信号线是否定义正确,如果是mipi接口你发包的方式是否正确,mipi的datalane和屏率是否正确,是否满足LCD开光是否满足逻辑,是否没跑到LCD的代码手机就挂了......

        代码上的问题太多了主要抓住这几个方面:panel上电不对,初始化代码不对,数据传输不成功,相关配置不对。

    二.麻点

             如果你调试的LCD 出现了麻点,那我要先恭喜你,你离成功不远了,麻点的情况大致有下面几种:

    a、触发的电平逻辑不对或控制逻辑不对


    如下NT35510的datasheet

    类似于上面的寄存器设置错了最有可能出现麻点

    b、datalanbe或TE信号不对

    见黑屏第5项第二条,panel上只刷了一帧不再刷,麻点的可能性很大。

    三. 闪烁

    闪烁的问题分为两种是背光闪 or panel闪

    a、背光闪

        关闭panel打开背光,看是否闪,如果闪可能panel的背光设计有问题或者是残次品,或者背关芯片供电不稳。

    b、 panel闪

        如果背光不闪,panel闪的话大部分原因跟频率有关系,把频率调整到何时的值看是否还有闪的现象,调整panel自身的刷新率看所否还有有闪的现象

    四. 图像偏移

        这个应该算是比较好解决的问题了查看是否是上层的图像就不对,如果对那看下面时序:


    VSYNC和HSYNC的proch值会影响屏RGB屏和mipi video模式的屏的图像偏移

     51     pinfo.lcdc.h_back_porch = 100;

     52     pinfo.lcdc.h_front_porch = 100;

     53     pinfo.lcdc.h_pulse_width = 8;

     

     54     pinfo.lcdc.v_back_porch = 20;

     55     pinfo.lcdc.v_front_porch = 20;

     56     pinfo.lcdc.v_pulse_width = 1;

    VSYNC影响上下

    HSYNC影响左右

    五. 裂屏

        裂屏都会跟panel和手机的同步信号有关系,手机端叫TE或VSYNC,panel端叫做tear(一般为0x35h和0x36h寄存器)。要保证两边的信号同步才不会出现裂屏。

    六. 重影or颗粒or花屏or gamma不正常 or 灰阶度不正常

        这几项都跟panel内部的供电有关:

    VGH:最高供电电压

    VGL:最低供电电压

    VCOM:参考电压,相当于咱们说的地

    gamma矫正电压(就是初始化代码里内容最多的那些组)

    这几个电压直接影响panel上的每一个TFT电路,所以调整到正确值才能保证上面的问题不发生,建议用厂家的代码,有这种问题最好让FAE提供典型的电压值和panel上的FPC的测试点,不要盲目的尝试浪费时间。

    七.字体尺寸不对   

        android系统调整density的值

    八. 花屏or 方向or 颜色相反

    花屏可能是bpp不对或者gamma值不对

    方向和颜色的顺序(RGB orGBR)都可以在寄存器中调整

    九. 分辨率不匹配导致的花屏or显示效果不好or图像不能覆盖整个屏幕

    a、调整代码中的分辨率

    b、调整寄存器中的分辨率

    c、NOVATEK的IC和同NOVATEK 功能相近的IC中有一位寄存器是调整刷新是否按8的倍数


    如480x800480x864 的line都是8的倍数,而480x854却不是8的倍数,这样你就需要调整这位寄存器使数据可以正常刷新到屏上。

    十. LCD内部pixel clock frequency

    配置不对导致的LCD一半显示正常,一半不正常花屏条纹闪烁

    以novatek为例调整这以下三个寄存器的刷新时间可以解决问题。

    DisplayTiming Control in Normal / Idle Off Mode (BD00h~BD04h)

    DisplayTiming Control in Idle On Mode (BE00h~BE04h)

    DisplayTiming Control in Partial / Idle Off Mode (BF00h~BF04h)


    十一. lcd点不亮

    a、检查背光

        如果是lcd液晶屏,连接好背光,查看背光是否亮,背光不亮,后面的工作都做不了。Oled屏不需要背光。

    b、检查供电及接口连接

        用万用表测量电压,如果供电都不正常, 如果供电不正常,可能是转接板有问题,换块转接板试试。

    c.检查代码及reset

        如panel上电不对,初始化代码不对,数据传输不成功,相关配置不对等。

     

    十二. 闪烁的问题分为两种是背光闪 or panel闪

    a、背光闪

        关闭panel打开背光,看是否闪,如果闪可能panel的背光设计有问题或者是残次品,或者背关芯片供电不稳。

    b、 panel闪

        如果背光不闪,panel闪的话大部分原因跟频率有关系,把频率调整到何时的值看是否还有闪的现象,调整panel自身的刷新率看所否还有有闪的现象


    十三. 图像偏移

    VSYNC和HSYNC的proch值会影响mipi video模式的屏的图像偏移,VSYNC影响上下,HSYNC影响左右。


    十四. 开机LCD亮的瞬间有花屏

     出现这种问题,一般都是由于LCD在初始化完成后刷新第一副图像未完全准备好的时候背光已经亮了。解决的办法就是在lk 时候背光亮之前的延时相应的加长一点。


    十五. lcd闪红色边框

    这个是因为调试eng版本设置的,刷user版本不会,不过这个可以在framework里面关掉。


    另外还有些其他情况的问题,如下:

    a 显示镜面反向

    查找模组datasheet,一般模组都会有一个寄存器来矫正显示各种反向的问题,如hx8399c模组,出现镜面反向,增加0x36寄存器,写值为0x02就可以解决这个问题。

    b 刷lk导致机器被刷坏,开不了机

    这很大一部分是因为屏参初始化代码指令length写错。

    c kernel显示正常,lk不亮

    这个可以排除硬件连接及模组fpc等的问题,主要查lk屏参初始化配置,基本能够解决。

    d 背光先亮,出现一段时间白屏,然后屏亮

    减少背光的延时,一般能够解决。



     

    展开全文
  • 1.函数体直接使用宏定义不管有没有返回值都不能作赋值运行的左右值 . 如下图示: 错误提示:   2.通过使用小括号()把函数体括起来使用宏定义可以得到该函数体最后一条语句运算结果,这里还需要注意 ,...



    1.函数体直接使用宏定义不管有没有返回值都不能作赋值运行的左右值 . 如下图示:


    错误提示:

     



    2.通过使用小括号()把函数体括起来使用宏定义可以得到该函数体最后一条语句运算结果,这里还需要注意 ,不能漏了' ; ',

    如下图示:


    打印结果如下:

     

     

    3.一般情况下使用多语句宏定义时 ,最好使用do{...}while(0)或者({})的形式

            因为在if() 结构里做分支执行部分时,使用do{...}while(0)可以使调用时后面能正确的使用' ; ' ,一旦没写就会像普通语句那样报错 , 这样符合我们的习惯 ,  如果只是使用{}的结构体形式 , 那么在调用时后面不能使用' ; ' , 如果按照我们的习惯写上 ' ; '  ,那么就有可能引起错误 . 比如 : if()后面还有else语句的话, 就会出错 , 因为 ' ; '被当作另外一条语句(空指令)的结束符插在else的上面 .

    注意  使用do{...}while(0)结构之后就不能把这个把这个宏定义作为赋值操作的左右值了.

    图示如下:

     

    打印结果对应如下:

     

     

    4.需要得到函数式宏定义的返回值的方法

             从上面我们已经可以知道当我们使用({})形式的宏定义时 , 只要函数体最后一次运算出的结果是我们想要的那使用这个形式是可以正确取得返回值的 并且放在赋值操作的右端;  当我们使用do{...}while(0)形式的宏定义时 , 我们是无法通过赋值操作来得到返回值的 , 但是我们可以通过多加一个参数 , do{}while(0)里面把要放回的值赋给多加的这个参数 , 这样我们就可以得到想要的返回值了.

    演示图示如下:

     

    打印结果如下:



    展开全文
  • VC编译典型问题

    千次阅读 2012-12-18 05:43:09
    经过最新测试发现:原来是VC8(VS2005)的项目默认属性有开/Wp64 (检测64位可移植性问题),在VC9(VS2008)下面,如果仍然打开/Wp64编译选项,那么遇到上述这种代码编译器就会崩溃,如果在项目属性里禁止"检测64位可...
  • 不过,最近我的确有一个新发现——我发现“归类分组”在我们解决问题中起着巨大的作用。而这里的“问题”不仅仅限于软件设计,从日常生活、产品设计到公司战略、生物分类。都有它的身影。 这是为什么呢?究其原因...
  • 凸优化问题:基础定义

    千次阅读 2018-12-02 22:09:01
    “一旦将一个实际问题表述为凸优化问题,大体上意味着相应问题已经得到彻底解决,这是非凸的优化问题所不具有的性质。”——《<凸优化>译者序》 1 什么是凸优化 什么是凸优化?抛开...
  • 软件危机:软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题典型表现: 对软件开发成本和进度的估计常常很不准确。 用户对“已完成的”软件系统不满意的现象经常发生。 软件产品的质量往往...
  • 研发管理典型问题的认识及建议

    万次阅读 2016-08-23 16:23:19
    1) 未形成系统、正确的研发理念  市场导向、客户意识、技术创新等是我们公司经常强调的观念,但是,整体来看,我们公司的研发理念比较零碎模糊,缺乏系统性...我们公司还停留在从功能及性能实现的角度来定义产品开发
  • 解决宏定义与函数名冲突的问题

    千次阅读 2017-01-19 07:11:31
    毕竟典型的一个问题是里面的max和min的宏定义与 std::numeric_limitsstd::streamsize>::max()和std::numeric_limitsstd::streamsize>::min() 两个函数定义相互冲突。 通常的情况是,如果包含了头文件windows.h,...
  • 101/103/104规约应用典型问题例举

    千次阅读 2016-04-05 14:49:00
    在近年的规约测试工作中,笔者曾遇到... IEC60870-5系列的3个标准101、103和104规约在国内已经应用多年了,但在对多个该类规约产品的测试中,我们发现依然存在许多能够造成互操作障碍的规约实现问题典型的情况例举如
  • 尝试检查一下数据库中是否存在该表 转载于:https://www.cnblogs.com/my3643/p/6695064.html
  • PV操作典型——哲学家进餐问题

    千次阅读 2020-05-27 22:18:46
    目标 哲学家进餐是操作系统课程的典型PV操作问题。通过此问题学习: 1.熟悉Linux平台的基本编程 2.在Linux平台上通过系统调用使用线程、互斥量机制以及信号量机制等编程
  • 但是并没有更深入的介绍在复杂需求下的解决方案本文将结合官网教程和《RabbitMQ in Action》以及Pika 官方例子的基础上进一步探寻、总结和澄清一些问题:基础概念再澄清 刚
  • 敏捷DoD完成定义的多种形态

    万次阅读 2014-10-05 09:07:38
    作者:张克强 作者微博:...典型的是迭代的DoD,这也是最初DoD应用的地方。常见在Scrum中,需要预先定义DoD,常见的迭代DoD条款有:1,所有完成的用户故事得到PO的验证2,所有代码得到静态分析,纠正最高级别的不符
  • DoD“完成”的定义 ...为了避免这个问题,在敏捷软件开发中,常用Definition of Done“完成的定义”来表示工作是否已完成,不同的活动有不同的完成定义典型的是迭代DoD,这也是最初DoD应用的地方。
  • 作为一个一个构建用户界面的框架,Vue 在定义其内置方法时有其特有的书写方式,这与典型的JavaScript书写方法有相通之处,但有其特点 JavaScript函数 典型的JavaScript定义函数方法有两种形式,一种为声明式定义,...
  • 八皇后问题典型的递归回溯)

    千次阅读 2016-09-07 20:27:49
    八皇后 : 这个代码只是输出一共有多少种摆放的个数。如果想要输出他摆放的不同方法 ...首先定义一个10*10的二维数组, 8*8的也行,作为棋盘(全局变量的话不用传参,方便并且节省空间。#include
  • 先看现象 涉及诸如float或者double这两种浮点型数据...典型现象(一):条件判断超预期 System.out.println( 1f == 0.9999999f ); // 打印:false System.out.println( 1f == 0.99999999f ); // 打印:true 纳尼? ...
  • 我正在用一个基于模板的库源...但是为了在整个工程中使用该库,我将头文件包含在 stdafx.h 中,结果出现特化模板函数的符号多重定义错误。我要如何组织头文件才能避免多重符号定义错误?我用 /FORCE:MULTIPLE,但我
  • ClassPathBeanDefinitionScanner是一个从指定包内扫描所有bean定义的Spring工具。 工作时,它接收一组包的名称,然后在这些包内扫描所有的类,查找其中符合条件的bean组件定义并将这些bean组件定义注册到容器。这些...
  • 设计模式 | 适配器模式及典型应用

    万次阅读 多人点赞 2018-09-20 01:37:29
    适配器模式 ...在适配器模式中,我们通过增加一个新的适配器类来解决接口不兼容的问题,使得原本没有任何关系的类可以协同工作。 根据适配器类与适配者类的关系不同,适配器模式可分为对象适配器和类适...
  • 原文链接:...“易驱线”是需要独立电源的,可是几乎所有“易驱线”的原配电源几乎都有个问题:很不稳定。电压不足导致硬盘中途停工是常事儿,伤害硬盘不说,最关键的是经常...
  • 软件测试定义

    千次阅读 2008-12-20 16:42:00
    软件测试定义马均飞 郑文强简单地说,对一段代码进行检查并查找错误,这就是测试活动。在工业制造和生产中,测试被当作一...下面是几个典型的软件测试定义:1.1 软件测试正向思维软件测试的正向思维的出发点是使自己确
  • Java泛型的基本定义和阐述

    千次阅读 2018-07-22 22:48:05
    基本级别是,仅仅使用泛型类型,比如典型的ArrayList这样的集合,不需要考虑它们的工作方式和原因。我们大多数的程序员都停留在这一级别上,直到出现了问题。当不同的泛型类混合在一起时,或是在与对类型参数...
  • JavaScript中函数的三种定义方法

    万次阅读 2017-04-03 11:51:10
    本文整理了JavaScript中函数定义的三种方法。 函数的三种定义方法分别是:函数定义语句、函数直接量表达式...}这是最典型的函数声明,以关键字function开始,其后跟随函数名称标识符、一对圆括号(包含由0个或多个逗号
  • 详解数字签名的定义

    万次阅读 2019-05-16 18:19:32
    显然,数字签名的应用涉及到法律问题,美国联邦政府基于有限域上的离散对数问题制定了自己的数字签名标准(DSS)。   数字签名技术是不对称加密算法的典型应用。数字签名的应用过程是,数据源发送方使用自己的私钥对...
  •  2) 由于构造器也是方法,因此反省构造器的定义和普通泛型方法的定义完全相同,例如:public MyClass(T t) { ... }  3) 使用泛型构造器:  i. 和使用普通泛型方法一样没区别,一种是显式指定泛型参数,另一种是
  • HMAC——典型的数字签名技术

    万次阅读 2019-05-14 10:35:54
    HMAC的全称是Hash-based Message Authentication Code,即“基于Hash的消息认证码”。其基本工作流程:对某个消息,利用提前共享...其典型的加密函数定义如下: 其中,K为提前共享的对称密钥,H为提前商定的Hash...
  • 软件定义存储的定义与分类

    千次阅读 2017-02-16 09:20:04
    二是通过收购或自己研发,去逐步实现SDS抽象(解耦)、池化、自动化的阶段,典型的就有HP将LeftHand与原有硬件解耦,形成VSA版StorVirtual;NetApp推出Data ONTAP的VSA版ONTAP Edge VSA;IBM推出XIV的软件版Spectrum ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 555,540
精华内容 222,216
关键字:

典型问题的定义