精华内容
下载资源
问答
  • 一文读懂PID控制算法(抛弃公式,从原理上真正理解PID控制) PID控制应该算是应用非常广泛的控制算法了。小到控制一个元件的温度,大到控制无人机的飞行姿态和飞行速度等等,都可以使用PID控制。这里我们从原来上来...

    一文读懂PID控制算法(抛弃公式,从原理上真正理解PID控制)

    PID控制应该算是应用非常广泛的控制算法了。小到控制一个元件的温度,大到控制无人机的飞行姿态和飞行速度等等,都可以使用PID控制。这里我们从原理上来理解PID控制。
    PID(proportion integration differentiation)其实就是指比例,积分,微分控制。先把图片和公式摆出来,看不懂没关系。(一开始看这个算法,公式能看懂,具体怎么用怎么写代码也知道,但是就是不知道原理,不知道为什么要用比例,微分,积分这3个项才能实现最好的控制,用其中两个为什么不行,用了3个项能好在哪里,每一个项各有什么作用

    PID控制算法原理

    PID控制算法公式

    总的来说,当得到系统的输出后,将输出经过比例,积分,微分3种运算方式,叠加到输入中,从而控制系统的行为,下面用一个简单的实例来说明。

    比例控制算法

    我们先说PID中最简单的比例控制,抛开其他两个不谈。还是用一个经典的例子吧。假设我有一个水缸,最终的控制目的是要保证水缸里的水位永远的维持在1米的高度。假设初试时刻,水缸里的水位是0.2米,那么当前时刻的水位和目标水位之间是存在一个误差的error,且error为0.8.这个时候,假设旁边站着一个人,这个人通过往缸里加水的方式来控制水位。如果单纯的用比例控制算法,就是指加入的水量u和误差error是成正比的。即
    u=kp*error
    假设kp取0.5,
    那么t=1时(表示第1次加水,也就是第一次对系统施加控制),那么u=0.5*0.8=0.4,所以这一次加入的水量会使水位在0.2的基础上上升0.4,达到0.6.
    接着,t=2时刻(第2次施加控制),当前水位是0.6,所以error是0.4。u=0.5*0.4=0.2,会使水位再次上升0.2,达到0.8.
    如此这么循环下去,就是比例控制算法的运行方法。
    可以看到,最终水位会达到我们需要的1米。
    但是,单单的比例控制存在着一些不足,其中一点就是 –稳态误差!(我也是看了很多,并且想了好久才想通什么是稳态误差以及为什么有稳态误差)。
    像上述的例子,根据kp取值不同,系统最后都会达到1米,不会有稳态误差。但是,考虑另外一种情况,假设这个水缸在加水的过程中,存在漏水的情况,假设每次加水的过程,都会漏掉0.1米高度的水。仍然假设kp取0.5,那么会存在着某种情况,假设经过几次加水,水缸中的水位到0.8时,水位将不会再变换!!!因为,水位为0.8,则误差error=0.2. 所以每次往水缸中加水的量为u=0.5*0.2=0.1.同时,每次加水缸里又会流出去0.1米的水!!!加入的水和流出的水相抵消,水位将不再变化!!
    也就是说,我的目标是1米,但是最后系统达到0.8米的水位就不在变化了,且系统已经达到稳定。由此产生的误差就是稳态误差了。
    (在实际情况中,这种类似水缸漏水的情况往往更加常见,比如控制汽车运动,摩擦阻力就相当于是“漏水”,控制机械臂、无人机的飞行,各类阻力和消耗都可以理解为本例中的“漏水”)
    所以,单独的比例控制,在很多时候并不能满足要求。

    积分控制算法

    还是用上面的例子,如果仅仅用比例,可以发现存在暂态误差,最后的水位就卡在0.8了。于是,在控制中,我们再引入一个分量,该分量和误差的积分是正比关系。所以,比例+积分控制算法为:
    u=kp*error+ ki ∗ ∫ error
    还是用上面的例子来说明,第一次的误差error是0.8,第二次的误差是0.4,至此,误差的积分(离散情况下积分其实就是做累加), error=0.8+0.4=1.2. 这个时候的控制量,除了比例的那一部分,还有一部分就是一个系数ki乘以这个积分项。由于这个积分项会将前面若干次的误差进行累计,所以可以很好的消除稳态误差(假设在仅有比例项的情况下,系统卡在稳态误差了,即上例中的0.8,由于加入了积分项的存在,会让输入增大,从而使得水缸的水位可以大于0.8,渐渐到达目标的1.0.)这就是积分项的作用。

    微分控制算法

    换一个另外的例子,考虑刹车情况。平稳的驾驶车辆,当发现前面有红灯时,为了使得行车平稳,基本上提前几十米就放松油门并踩刹车了。当车辆离停车线非常近的时候,则使劲踩刹车,使车辆停下来。整个过程可以看做一个加入微分的控制策略。
    微分,说白了在离散情况下,就是error的差值,就是t时刻和t-1时刻error的差,即u=kd*(error(t)-error(t-1)),其中的kd是一个系数项。可以看到,在刹车过程中,因为error是越来越小的,所以这个微分控制项一定是负数,在控制中加入一个负数项,他存在的作用就是为了防止汽车由于刹车不及时而闯过了线。从常识上可以理解,越是靠近停车线,越是应该注意踩刹车,不能让车过线,所以这个微分项的作用,就可以理解为刹车,当车离停车线很近并且车速还很快时,这个微分项的绝对值(实际上是一个负数)就会很大,从而表示应该用力踩刹车才能让车停下来。
    切换到上面给水缸加水的例子,就是当发现水缸里的水快要接近1的时候,加入微分项,可以防止给水缸里的水加到超过1米的高度,说白了就是减少控制过程中的震荡。

    现在在回头看这个公式,就很清楚了
    这里写图片描述
    括号内第一项是比例项,第二项是积分项,第三项是微分项,前面仅仅是一个系数。很多情况下,仅仅需要在离散的时候使用,则控制可以化为
    这里写图片描述
    这里写图片描述
    每一项前面都有系数,这些系数都是需要实验中去尝试然后确定的,为了方便起见,将这些系数进行统一一下:
    这里写图片描述
    这样看就清晰很多了,且比例,微分,积分每个项前面都有一个系数,且离散化的公式,很适合编程实现。
    讲到这里,PID的原理和方法就说完了,剩下的就是实践了。在真正的工程实践中,最难的是如果确定三个项的系数,这就需要大量的实验以及经验来决定了。通过不断的尝试和正确的思考,就能选取合适的系数,实现优良的控制器。

    展开全文
  • PID的理解和应用

    万次阅读 多人点赞 2019-06-01 20:43:46
    0.03 # 积分系数 主要解决达不到设定值的静态误差问题 Kd = 0.03 # 微分系数 主要解决积分项I存在导致系统的响应速度问题 goal = 100 # 目标值 output = [0, 0] # 输出 output[0]现输出 output[0]旧输出 bmq = 0 # ...


    1. PID控制简介

    PID控制,即 比例(proportion) - 积分(integration) - 微分(differentiation) 控制
    是自动控制原理中定义的一种控制方法
    也可以称为是校正方法
    在这里插入图片描述
    在这里插入图片描述
    t t t:某个时刻
    k p kp kp: 比例系数
    k i ki ki: 积分系数
    k d kd kd: 微分系数
    e r r err err: 误差
    当得到系统的输出后
    将输入加上经过比例,积分,微分调节的输出
    从而控制系统的行为


    2. 比例控制算法

    先只看PID中最简单的比例控制
    用一个经典的例子,假设有一个水缸,目的是要保证水缸里的水位永远的维持在1米
    假设初始时刻,水缸里的水位是0.2米
    那么当前时刻的水位和目标水位之间是存在一个误差的error,所以error=0.8

    假设旁边站着一个人,这个人通过往缸里开阀加水的方式来控制水位
    如果单纯的用比例控制算法,就是指加入的水量u和误差error是成正比的
    u = k p ∗ e r r o r u=kp*error u=kperror

    假设 k p = 0.5 kp=0.5 kp=0.5, 那么 t = 1 t=1 t=1 时(表示第1次加水,也就是第一次对系统施加控制)
    u = 0.5 ∗ 0.8 = 0.4 u=0.5*0.8=0.4 u=0.50.8=0.4
    所以这一次加入的水量会使水位在0.2的基础上上升0.4,达到0.6

    t = 2 t=2 t=2时刻(第2次施加控制),当前水位是0.6,所以 e r r o r = 0.4 error=0.4 error=0.4
    u = 0.5 ∗ 0.4 = 0.2 u=0.5*0.4=0.2 u=0.50.4=0.2
    所以这一次加入的水量会使水位在0.6的基础上上升0.2,达到0.8

    如此这么循环下去,就是比例控制算法的运行方法
    最终水位会达到需要的1米

    但是,单单的比例控制存在着一些不足
    其中一点就是 稳态误差,也叫 静态误差

    根据kp取值不同,系统最后都会达到1米
    只不过kp大了到达的快,kp小了到达的慢一些,不会有稳态误差

    但是,考虑另外一种情况,假设这个水缸在加水的过程中,存在漏水的情况
    假设每次加水的过程,都会漏掉0.1米高度的水
    仍然假设kp取0.5,那么会存在着某种情况
    假设经过几次加水,水缸中的水位到0.8时,水位将不会再变换!!!
    因为水位为0.8,则误差 e r r o r = 0.2 error=0.2 error=0.2
    所以每次往水缸中加水的量为 u = 0.5 ∗ 0.2 = 0.1 u=0.5*0.2=0.1 u=0.50.2=0.1
    同时,每次加水,缸里又会流出去0.1米的水!!!
    加入的水和流出的水相抵消,水位将不再变化!!

    也就是说,目标是1米
    但是最后系统达到0.8米的水位就不再变化了,且系统已经达到稳定
    由此产生的误差就是稳态误差了

    在实际情况中,这种类似水缸漏水的情况往往更加常见
    比如控制汽车运动,摩擦阻力就相当于是“漏水”
    控制机械臂、无人机的飞行,各类阻力和消耗都可以理解为本例中的“漏水”
    所以,单独的比例控制只能控制现在,在很多时候并不能满足要求


    2. 积分控制算法

    如果仅仅用比例,存在稳态误差,最后的水位就卡在0.8了
    于是,在控制中再引入一个分量,该分量和误差的积分是正比关系
    所以,比例+积分控制算法为: u = k p ∗ e r r o r + k i ∗ ∫ e r r o r u=kp*error+ki∗∫error u=kperror+kierror

    还是用加水的例子来说明:
    第一次的误差error是0.8,第二次的误差是0.4
    至此,误差的积分(离散情况下积分其实就是做累加): ∫ e r r o r = 0.8 + 0.4 = 1.2 ∫error=0.8+0.4=1.2 error=0.8+0.4=1.2
    这个时候的控制量,除了比例的那一部分,还有一部分就是一个系数ki乘以这个积分项
    由于这个积分项会将前面若干次的误差进行累计
    所以可以很好的消除稳态误差

    假设在仅有比例项的情况下,系统卡在稳态误差了,即上例中的0.8
    由于加入了积分项的存在,会让输入增大
    从而使得水缸的水位可以大于0.8,渐渐到达目标的1.0
    这就是积分项的作用,可以纠正过去


    3. 微分控制算法

    平稳的加水过程,当发现快满的时候
    为了使得水面产生的波浪不溢出水缸
    基本上提前一点就先慢慢的减少加水速度了,关小点阀门,避免溢出水缸

    当非常近满的时候,则越不加水,使水不溢出刚刚好满缸
    整个过程可以看做一个加入微分的控制策略

    微分,说白了在离散情况下,就是error的差值
    即 t 时刻和 t-1 时刻error的差
    u = k d ∗ ( e r r o r ( t ) − e r r o r ( t − 1 ) ) u=kd*(error(t)-error(t-1)) u=kd(error(t)error(t1)),其中的kd是一个系数项

    可以看到,在减缓加水速度的过程中,因为error是越来越小的
    所以这个微分控制项一定是 负数
    在控制中加入一个负数项,作用就是为了防止由于来不及停止倒水时而溢出水缸

    从常识上可以理解,越是靠近满缸的时候,越是应该注意减少加水,不能让水过溢出
    所以这个微分项的作用,就可以理解为关阀门
    当水离缸面很近并且水流速度很快时
    这个微分项的绝对值(实际上是一个负数)就会很大
    从而应该立即关小阀门停止加水
    这就是微分项的作用,管控未来减少控制过程中的震荡


    4. 增量式PID应用

    以控制电机转速为例,希望电机通过编码器的反馈,达到平稳变速的效果
    假设编码器读取的数据是上个状态电机希望的输出

    import matplotlib.pyplot as plt
    
    Kp = 0.3    # 比例系数 调整系统的响应速度 
    Ki = 0.03   # 积分系数 主要解决达不到设定值的静态误差问题
    Kd = 0.03   # 微分系数 主要解决积分项I存在导致系统的响应速度问题
    
    goal = 100      # 目标值
    output = [0, 0] # 输出 output[0]现输出 output[0]旧输出
    bmq = 0         # 编码器反馈
    err = [0, 0]    # 输出误差 err[0]现误差 err[0]旧误差 
    
    
    def IncrementalPID_control():
        global bmq, output
        err[1] = err[0]         # 更新误差
        err[0] = goal - bmq
        # 输出 = 基准 + P * 误差 + I * 累积误差 + D * 误差偏差
        output[0] = output[1] + Kp * err[0] + Ki * (err[0] + err[1]) + Kd * (err[0] - err[1])  # PID调节
        bmq = output[0]         # 假设反馈等于现输出
        output[1] = output[0]   # 记录现输出
    
    
    IncrementalTime = [0]       # 时间次数
    IncrementalOutput = [0]     # 输出
    
    for i in range(1, 20):      # 迭代
        IncrementalPID_control()                # 运算一次增量式PID
        IncrementalOutput.append(output[0])     # 添加输出结果
        IncrementalTime.append(i)               # 添加时间次数
    
    plt.rcParams['font.sans-serif'] = ['SimHei']                  # 设置正常显示中文
    plt.plot(IncrementalTime, IncrementalOutput, label='output')  # 设置曲线数值
    plt.xticks(IncrementalTime)                                   # 设置X轴坐标数值标识
    plt.xlim(0)                                                   # 设置X轴的范围(起始坐标)
    plt.ylim(0)                                                   # 设置Y轴的范围(起始坐标)
    plt.xlabel('次数')                                            # 设置X轴的名字
    plt.ylabel('输出')                                            # 设置Y轴的名字
    plt.title("P:{0} I:{1} D:{2} 趋势图".format(Kp, Ki, Kd))      # 设置标题
    plt.legend()                                                  # 设置图例
    plt.show()                                                    # 显示图表
    

    在这里插入图片描述
    可以得到一个相对曲滑的曲线,以达到平稳变速的效果


    [1] python的代码地址:
    https://github.com/JoveH-H/A-simple-explanation/blob/master/IncrementalPID.py
    [2] jupyter notebook的代码地址:
    https://github.com/JoveH-H/A-simple-explanation/blob/master/ipynb/IncrementalPID.ipynb


    参考:
    PID控制算法原理(抛弃公式,从本质上真正理解PID控制)


    谢谢!

    展开全文
  • 前端学习路线

    万次阅读 多人点赞 2015-10-28 11:22:47
    发现问题么?有时候我们可能看不懂代码,但是动手敲一遍可能会更认真的跟着代码的思路走一遍,在运行出来结果或者跟着调试的时候 才会恍然大悟!喔喔!原来是这个样子的!同学A数据结构学了好几遍都没有学好,而...

    先附上一张网上广为流传的前端知识体系图:前端知识体系

    从大图中我们总结出:

    优秀的Web前端开发工程师 要在知识体系上既要有 广度 和 深度!应该具备快速学习能力。

    前端开发工程师 不仅要掌握基本的Web前端开发技术,网站性能优化SEO服务器端的基础知识,而且要学会运用各种工具进行辅助开发以及理论层面的知识,包括代码的可维护性、组件的易用性分层语义模板浏览器分级支持等。

    前端工程师至少都要满足四类客户的需求:

      1、产品经理。这些是负责策划应用程序的一群人。他们会想出很多新鲜的、奇怪的、甚至是不可能实现的应用。一般来说,产品经理都追求丰富的功能。
      2、UI设计师。这些人负责应用程序的视觉设计和交互模拟。他们关心的是用户对什么敏感、交互的一贯性以及整体的好用性。一般来说,UI设计师侯倾向于流畅靓丽、但并不容易实现的用户界面,而且他们经常不满前端工程师造成
    1px 的误差。
      3、项目经理。这些人负责实际地运行和维护应用程序。项目管理的主要关注点,无外乎正常运行时间、应用程序始终正常可用的时间、性能和截止日期。项目经理追求的目标往往是尽量保持事情的简单化,以及不在升级更新时引入新问题。
      4、最终用户。指的是应用程序的主要消费者。尽管前端工程师不会经常与最终用户打交道,但他们的反馈意见至关重要。最终用户要求最多的就是对个人有用的功能,以及竞争性产品所具备的功能。

    好了,列举了这么多…… 你真的还想学前端么?不后悔吧? 如果真的做好了准备的话,哈哈,那我们就一起享受学习前端的乐趣吧!

    一、基础

    想成为前端开发者应该先打好基础:

    HTML > CSS > JavaScript > jQuery >。。。> GitHub

    不要担心以后会做什么决策,先好好深入学习。
    在增值的方向上投资自己,才是最明智的。

    学习了HTML、CSS就可以实现一些静态页面,不只是简单的静态页面,应该是稍微复杂一些绚丽一点的页面。

    推荐书籍:《CSS禅意花园》

    二、JS

    JS可以跟着以下几张思维导图学习(听说是一位名为“王子墨”的大师做的图):学习 Javascript 首先要知道这门语言可以做什么,不能做什么,擅长做什么,不擅长做什么!

    1.JS变量
    变量

    2.JS运算符
    运算符

    3.JS数组
    数组

    4.JS流程语句
    流程语句

    5.JS字符串函数
    字符串函数

    6.JS函数基础
    函数基础

    7.JS基础DOM操作
    基础DOM操作

    8.JS正则表达式
    正则表达式

    9.JS数据类型
    数据类型

    深入了解Javascript,需要了解 Javascript 的原理,机制;需要知道他们的本源;需要深刻了解 Javascript 基于对象的本质;还需要深刻了解浏览器宿主下 的 Javascript 的行为、特性。他也有很多缺点,各个宿主环境下的行为不统一、内存溢出问题、执行效率低下等问题,需要深入了解、学会处理这些缺陷。

    推荐书籍:

      初级:
      《JavaScript高级程序设计》
      《JavaScript王者归来》
      
      中级:
      《JavaScript权威指南》
      《JavaScript.The.Good.Parts》Douglas Crockford
      《高性能JavaScript》:Nicholas C. Zakas
      《Eloquent JavaScript》:
      
      高级:
      《JavaScript Patterns 》
      《Pro.JavaScript.Design.Patterns》讲解JavaScript设计模式
      《Developing JavaScript Web Applications》:构建富应用的好书,针对MVC模式有较为深入的讲解,同时也对一些流程的库进行了讲解。

    三、后端语言

    如果单纯只是学习前端编程语言、而不懂后端编程语言(Java、PHP、ASP.NET,JSP、Python),也不能算作是优秀的前端工程师。

    四、学习方法建议

    1.限制一次学习的量,并且不断地实践——实际编写代码。

    举个例子:就像学习数据结构一样,我有个同学A学习数据结构单纯的把书带到图书馆去看,我问A为什么不带电脑,A回答说光是看就已经看不懂了。能发现问题么?有时候我们可能看不懂代码,但是动手敲一遍可能会更认真的跟着代码的思路走一遍,在运行出来结果或者跟着调试的时候
    才会恍然大悟!喔喔!原来是这个样子的!同学A数据结构学了好几遍都没有学好,而另外一个同学B却对数据结构十分熟悉、笔试面试几乎难不倒他,他跟我分享学习经验的时候就告诉我,一定要动手敲!而且不止要敲一遍!

    ——这也是很多人会走弯路,而很多人只会走捷径的关键。

    2.用正确的心态去做练习,当成玩耍或者游戏。

    3.写代码的时间魔法,先告诉自己只写10分钟,然而就会陷进去乃至一下午。

    4.思考得更慢,学得更快。就像你在去理解别人的代码的时候一样,不要漏掉任何一行!

    5.首先用简明的语言来写复杂的代码。这是一种锻炼!

    6.定期定目标,每天都看看,想想,保持敏感、紧迫感、期待感。

    7.记笔记:

    • 学习过程中搜集的资源链接;
    • 遇到的未决的疑问;
    • 那些很宽而我们用的很窄的知识点;
    • 那些能进一步深入而我们浅尝辄止的知识点;
    • 某个功能可能存在的其它实现方案的蛛丝马迹

    还有些好书:

    • 《Developing Large Web Applications》:不仅有JavaScript方面的介绍,还有CSS、HTML方面的介绍,但是介绍的内容却都非常不错,真正考虑到了一个大型的Web程序下,如何进行JavaScript架构设计,值得一读。 
    • 《高性能网站建设指南》
    • 《Yahoo工程师的网站性能优化的建议》
    • 《网站重构》
    • 《Web开发敏捷之道》

      最好的资料就是某项技术的官方SDK,一般技术都有文档,API,Quick Start,Guide,Tutorial,Demo,Example……结合书看效果最好。

    其他:

    • “YSLOW”性能优化建议
    • “ jQuery 库”
    • “前端框架”
    • “HTML5”
    • “CSS3” 深入研究

    这儿还有不知道自己何时收藏的“前端有关的语言”:
    1
    2

    网站:

    前端大神
    A Single Div
    腾讯ISUX
    WEB开发者
    SegmentFault

    有经验的人,新学一门技术,就要努力放空自己,让自己归零,这样会比较容易学进去,坚持下来。坚持最重要!


    参考:
    更快学习JavaScript的6个思维技巧
    怎样新学一门技术
    如何成为优秀的前端工程师

    展开全文
  • 作者还举了一个例子,很有生活意味和技巧,值得一学:“我的一个朋友,一个丢三落四的一级教授,常常在高级饭店大快朵颐之后,发现自己没带钱。在这种情况下,他只是微笑着看着饭店经理,然后说‘我们有麻烦了’。你...
    作者:fasiondog
    
    来源: http://blog.csdn.net/kongdong

    第四个问题:这是谁的问题?

    当别人能够很好地解决自己的问题的时候,千万不要越俎代庖

    如果这是他们的麻烦,就让它成为他们的麻烦


    如果某人能够解决这个问题,但是他本人却并不会遇到这一问题时,那么你们首先要做的就是让他也感受到这个问题。

    试试换过来指责你自己——即使只有一秒


    把问题当作他们的问题——你的灯亮着吗?

    如果人们的灯真的亮着,一个小小的提醒可能比你那些复杂的解决方法都更有效


    随想:

    “不要越俎代庖”,或许是QA应谨循的法则之一,其最高深的功力当是鼓动产品自己解决自己的问题。其中的技巧应当是让产品充分体会到问题的所在,并与产品一起寻找解决方案。单纯依靠流程指责产品这也没做好那也没做好,只会徒惹厌烦,原因很简单,因为体会不到违反流程带来的坏处和后果。好的QA当然要想自己对产品有所益处,亦应该理解流程安排的原因,否则生搬硬套久了,就真的像那无用的监工一样,自己也索然无趣,倒不如写份Checklist扔给产品要求自行检查了事。

    也许,无论做什么事,都要让别人觉得自己有用,确实是在为其着想并真心帮助,这“真心”才是背后的关键。只有尊重他人的人才能赢得他人的尊重。昨日,一SE(女孩)打电话给我,急的几乎哭将起来,要我要求我的徒弟事前提供项目的注意事项。连忙安慰了几句,问清楚缘由,原来是徒弟不肯应她的要求提供事先的注意事项而且还颇有伤人的言语,说是这些本来就应该是他们自己做的是他们的水平不够而已。“引导”原就是QA的主要职责之一,何况这个要求并不过份,便叫来徒弟交流了一下,这徒弟其实非常好学,对软工也特别感兴趣,只是似乎有些不太瞧得起开发人员,说话时不太注意容易伤人。其实,SE正是希望把事情做好,所以才会即急且怒,这不正好为QA做好工作提供了大好环境。唉,说来伤感,徒弟这种做法也和目前部门的导向有莫大的关系,准新主管踌躇满志说是要让QA脱离引导只管审计,自己便因和其意见相左,互相大吵了几次,估计是快要在部门里呆不下去,只是因为确实喜欢QA的工作,没有那么斩钉截铁的和老主管明确去向,只是提了要回开发而已。现在部门里,老员工纷纷私下里和老主管提出离开的要求做鸟兽散,新员工也在听了所谓部门专家和准主管的关于QA职业生涯的演说后,陆续开始盘算离开,有一个甚至已经离职,真不知他们在知道新员工离职背后的真正原因会有什么想法。或许我也应该下定决心离开,只是真的喜欢质量工作,舍不得。

    “如果人们的灯真的亮着,一个小小的提醒可能比你那些复杂的解决方法都更有效”,如果在每个阶段开始和结束前,QA发给项目组一封短短的提醒邮件,提醒相关的注意事项,自己和别人都轻松,何况有心的话,整理一下每个阶段的提醒邮件,就不用每次都那么麻烦了。说实在的,流程还是非常庞杂的,即使是QA都很难每个细节都记得一清二楚,更何况是忙得不可开交的PL了。一个善意的提醒,付出少,收获大,何乐而不为呢?

    想起网上文章最忌讳的转贴却不注明出处的问题,批评抱怨在所难免,不过换个角度看看自己,是否提供了方面他人转贴的手段,比如直接在自己的文章前后帮忙注明作者、来源,转贴者仅仅需要Copy & Paste即可,省去了转贴者自己写明作者、标注来源之苦,划得来。

    作者还举了一个例子,很有生活意味和技巧,值得一学:“我的一个朋友,一个丢三落四的一级教授,常常在高级饭店大快朵颐之后,发现自己没带钱。在这种情况下,他只是微笑着看着饭店经理,然后说‘我们有麻烦了’。你能想象如果他说的是‘您有麻烦了’,会有什么后果?或者他说的是‘我有麻烦了’?”


    阅读随想(1):http://blog.csdn.net/KongDong/archive/2006/03/15/624636.aspx

    阅读随想(2):http://blog.csdn.net/KongDong/archive/2006/03/19/628789.aspx

    展开全文
  • Scrum是用来发现问题

    千次阅读 2016-05-30 11:03:01
    请记住,Scrum是一种发现问题的工具,而不是解决问题的工具。
  • 模体发现问题

    千次阅读 2012-05-07 17:53:38
    1.模体发现问题  DNA或蛋白质中具有特定功能且保守的序列片段称为 模体(也是结合位点)。  由于突变存在,不一定完全保守, 故 实际片段 称为 模体实例。  这里研究自动模体发现问题:从一组相关的DNA序列...
  • P问题、NP问题、NPC问题的概念及实例证明

    万次阅读 多人点赞 2016-05-21 16:29:25
    四、NP-Complete间的规约例子 首先解释一下什么是NP问题,什么是NP hard问题,什么是NP完全问题。 * P Problem:这个应该最易理解,就是一个问题可以在Polynominal的时间的得到解决,当然,是对于任意input size。...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
     通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到张三编码后的公钥,将其解码,李四用张三的公钥加密信息,并发送给李四,张三用自己的私钥解密从李四处收到的信息…… Java利用DES私钥对称加密代码实例 ...
  • 真正解决Jenkins安装插件总是报错的问题(二)

    千次阅读 热门讨论 2020-05-02 18:16:46
    一、前言 ...二、再次发现问题 最近再次使用的时候发现下载插件又不行了,发现上次替换的update-center.json文件不见了。于是乎再次下载下来替换地址,然后替换掉原来的文件,重启后发现又没了。...
  • 不过实际这种预测方式我试了好多,也改了很多网络,CNN+LSTM等等,发现实际预测还有很大问题,预测结果经常会趋于一条直线,有懂的朋友们可以互相交流 ps 比较喜欢的一个外文博客,mark一下 ...
  • 真正超简单解决App启动时白屏问题

    千次阅读 2018-05-18 06:13:20
    相信不少的童鞋都遇到过在开发App 的时候...以上两种方案我都试过,效果并不尽如人意,都或多或少的存在一些问题。 经过不懈努力和尝试,目前而言,我自己感觉应该是算比较满意的。 具体方法如下: 1.在AndroidMa...
  • 解决问题最简单的方法

    千次阅读 2016-08-20 07:09:45
    这是一本小书,只有145页,7万字左右,花2个小时就能读完,但你会学到立马提高你解决问题能力的10多种方法。
  • 服务注册与发现 微服务体系中,服务注册与服务发现是两个最核心的模块。...也即是说,ServiceA需要通过查找ServiceRegistry来“发现”ServiceB,而ServiceB则需要通过每次启动时向ServiceRegistr...
  • ZooKeeper官方Java例子解读

    千次阅读 多人点赞 2018-10-22 22:55:15
    ZooKeeper官方提供了一个Java监听的例子,本文是我对该例子的学习笔记。可以做为帮助理解此例子的资料: 文档原文连接:http://zookeeper.apache.org/doc/current/javaExample.html#sc_completeSourceCode 翻译...
  • Dubbo系列之服务注册与发现

    万次阅读 2019-07-21 20:02:02
    文章目录一、分布式基本理论1.1、分布式基本定义1.2 架构发展演变1.3、RPC简介二、Dubbo理论简介三、Dubbo环境搭建3.1 Zookeeper搭建3.2 Dubbo管理页面搭建四、Dubbo服务注册发现例子4.1、业务场景4.2、api工程创建...
  • 机器学习中分类与回归问题的区别与联系

    万次阅读 多人点赞 2018-10-18 19:21:28
    像这样的问题是没有真正理解分类和回归之间的差异以及试图衡量的准确度的症状。 在本教程中,您将发现分类和回归之间的差异。 完成本教程后,您将了解: 该预测建模是关于学习从输入到输出的映射函数的问题,称为...
  • 之前在产生随机数的运用场景中,如果我们把实例化Random累的语句放在循环体内,会产生非常多的相同的随机数。许多人解释为:这是由于循环执行速度...举个变态的例子: Random rand = new Random(10); Console.Wri
  • 面试官最容易提出的20个问题

    千次阅读 2018-08-22 14:27:57
    一、 请谈谈你自己。 考点提示:了解应聘者的自我评价能力、表达能力和基本思维能力。 答题要点:自我介绍要简明扼要,有概括性。突出讲自己与工作的契合点,其余一带而过,不要夸耀自己。语言要清晰流畅,条理...
  • 如果你自己的服务出了问题你会很焦虑,别的团队都等着。如果别的团队出了问题你也焦虑,怎么还没好啊。 你还会发现本地开发如果依赖别的服务会异常的难受,特别是你依赖的服务还依赖别人的服务,调试、测试将变的...
  • 向别人请教问题,不要这样开头

    千次阅读 2019-11-01 12:29:29
    前言 我们经常会有请教别人问题的时候,而下面这...毋庸置疑,你提问的目的自然是想得到解答,而上面三种提问方式都有一个共性,就是在看到上面的问题之后,仍然不知道具体问题是什么,而要简单回复之后才能得到真...
  • 为什么大多数人永远不会真正成功?

    万次阅读 多人点赞 2020-02-20 09:29:00
    前几天看到一个叫做《为什么大多数人永远不会真正成功?》的视频,我本来以为是鸡汤,耐着性子看了一个开头,立刻被吸引了,居然一口气看完了。看完了以后,我对照着自己这10多年的经历反思了一下...
  • 解决问题一定要摸清楚问题受益人的真正需要,软件开发也是一样,所以,有时候不妨从别人的角度来考虑解决方案结果带来的感受。不过,要警惕,总是顺着出题者的用意来解决问题,容易养成逢迎拍马的习惯,这或许也是...
  • 华为云讲解:2.Istio Pilot 与...文章目录华为云讲解:2.Istio Pilot 与服务发现服务发现看图说话 在Istio里面Service A 访问ServiceB 如何做到的服务发现的实现Istio 结合Kubernetes 做服务发现总结配置管理流量规则...
  • KDD数据库知识发现流程

    千次阅读 2018-01-14 09:36:32
    1.数据清理(消除噪声和不一致数据) 2.数据集成(多种数据源组合在一起) 3.数据选择(从数据库中提取与...6.模式评估(根据某种兴趣度度量,识别表示知识的真正有趣模式) 7.知识表示(用可视化技术向用户展示)
  • 论所谓“适合自己的方法”

    千次阅读 2019-12-01 22:07:23
    但是发现很多人其实并不能真正理解什么才是“适合自己的方法”,这是一个看似简单但是非常严重的问题。 本文发表一下自己的看法,希望能给一些同学带来不一样的启发。 二、分析 2.1 所谓适合自己的方法 很多人...
  • 测试用例模板和例子

    万次阅读 多人点赞 2017-02-14 15:58:31
    写得太简单吧,除了自己没人能够执行,写得太详细吧,消耗在测试用例维护(别忘了,测试用例是动态的,一旦测试环境、需求、设计、实现发生了变化,测试用例都需要相应发生变化)上的时间实在是太惊人,在目前国内大...
  •  为了给大伙儿开开眼,俺透露一下本书的第一章的一个例子(这个故事好像流传很广,可能你之前已经听说过)。以下是俺的转述,省略了部分情节。  话说某大城市的某个写字楼入住的公司很多,但是电梯不够多而且...
  • 微服务架构中基于DNS的服务发现

    千次阅读 2018-06-01 10:47:00
    当前,微服务架构已经成为企业...最后,简单介绍下阿里巴巴内部是如何基于DNS做服务发现的。 服务发现交互协议 微服务架构中,服务注册与发现的通信协议大致可以分为两类:一类是“私有”协议,如dubbo + zk及eureka...
  • 在之前的系列文章中,我们提到了netty中的channel只接受ByteBuf类型的对象,如果不是ByteBuf对象的话,需要用编码和解码器对其进行转换,今天来聊一下netty自定义的编码和解码器实现中需要注意的问题
  • 深度学习---多标签分类问题

    万次阅读 多人点赞 2018-05-06 11:18:10
    keras: multi-label神经网络前沿本篇记录一下自己项目中用到的keras相关的部分。由于本项目既有涉及multi-class(多类分类),也有涉及multi-label(多标记分类)的部分,multi-class分类网上已经很多相关的文章了。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 393,251
精华内容 157,300
关键字:

发现自己的真正问题的例子