浅谈估值模型:PB指标与剩余收益估值_pbroe估值模型-程序员宅基地

技术标签: python  权益投资  金融  大数据  

摘要及声明

1:本文简单介绍PB指标的推导以及剩余收益的估值方式; 

2:本文主要为理念的讲解,模型也是笔者自建,文中假设与观点是基于笔者对模型及数据的一孔之见,若有不同见解欢迎随时留言交流;

3:笔者希望搭建出一套交易体系,原则是只做干货的分享。后续将更新更多内容,但工作学习之余的闲暇时间有限,更新速度慢还请谅解;

4:本文主要数据通过Tushare(ID:444829)金融大数据平台接口获取;

5:模型实现基于python3.8;

        笔者看本站有一些人写过剩余收益的文章,但都比较模棱两可。百度上也有一些文章,不过点开都是很多公式推导,缺少理念的拓展。本着只讲干货的原则,笔者本期深入浅出讲一讲剩余收益估值那些事儿。必要的一些公式推导还是需要带上的,但笔者更多是分享自己对剩余收益原理和经济含义的理解。本期主要内容如下:


目录

1. 浅谈PB

1.1 PB估值的优点

1.2 经基本面调整的静态PB指标

2. 剩余收益

2.1 与PB指标的关系

2.2 多期剩余收益的几个推导方式

2.2.1 净盈余关系推导

2.2.2 公式法推导一

2.2.3 公式法推导二

2.3 剩余收益的折现

2.3.1 PB指标与单阶段折现

2.3.2 PB指标与多阶段折现

2.3.3 可持续因子折现

3 模型实现

3.1 代码实现

3.2 敏感性分析

4. 总结

5. 往期精选


1. 浅谈PB

        PB指标比较入门和基础,本来笔者不想多谈,网上也已经有很多文章写过,但由于后面涉及到残余收益,不说又差些意思,因此这里笔者还是打算简单介绍一下,并推导一下重要的公式变形和结论,已经对PB指标很熟或者不感兴趣的可以直接跳过本节。

        PB指标又称为市净率,可以利用股价除以公司每股净资产账面价值(Book value per share, 下文简称“BVPS”)得到。笔者在市盈率那期内容中介绍了PE指标的诸多变形,例如静态、动态、TTM、NTM、PEG和基本面调整市盈率等等(文章传送门:PE指标)。但打开交易软件会发现除了PE指标,其它的乘数指标往往只有光溜溜的一个名字,并不像PE指标那样有诸如静态、动态、TTM这种前/后缀。

        笔者看网上对这个原因都避而不谈,好像PE天生就该有这么多变形,其它指标就不配? 事实上PB、PS、PCF等价格乘数指标照样可以有很多变形,而且实务中也确实有人会使用这些变形指标。之所以很少见到这些变形,原因主要是PE指标的分母EPS是股东(韭菜)们最为关心的指标,静态动态PE一列出来,股东们就能看到公司收益增减变化,下回分红多少钱能进口袋也就有了个预期。其次,由于财务报表的勾稽关系,EPS往往和BVPS、销售额及现金流这些指标呈正相关关系,通过PE动静态指标一看大致也能判断出其它指标变化情况。这样一个受股东欢迎,又具有代表性的指标当然要大做文章,于是其它指标就剥得只剩个光杆司令了,很多行情软件甚至不展示PS和PCF这种指标。

1.1 PB估值的优点

        笔者罗列了一些比较重要的优缺点当作是复习了。尽管行情软件上被PE指标夺去很多光环,PB指标的优势也是很突出的,例如:

        1):除资不抵债,PB指标的分母BVPS绝大多数情况下都是正数;

        2):PB的分母BVPS的波动相较于PE的分母EPS要低很多;

        3):企业资产流动性较高,计量属性以公允价值为主,例如金融类行业;

        4):可用于面临破产清算的企业估值;

        不过缺点也是有的:

        1):企业有大量的表外资产/负债(off-B/S);

        2):会计准则和计量方式会对PB产生影响,例如存货计量方式,减值折旧等;

        3):回购增发等行为会对PB产生影响;

1.2 经基本面调整的静态PB指标

        由于PE那期介绍过各种变形的计算规则,笔者就不一一推导了,下面推导一个经基本面调整的静态PB指标,仅作展示。由于是经基本面调整的静态指标,分母采用当期的BVPS,分子采用红利折现计算的内在价值:

PB=\frac{D_{1}/r-g}{BVPS_{0}}=\frac{D_{1}}{BVPS_{0}\times (r-g)}=\frac{NI_{1}\times (1-b)}{BVPS_{0}\times (r-g)}\, \, [1]

        其中:

        D_{1}:下期股利

        r:股东要求回报率

        g:可持续增速(sustainable growth rate)

        BVPS_{0}:当期每股净资产

        b:利润留存率

        NI_{1}:下期每股净利润

        定义ROE的计算式为:

ROE_{1}=\frac{NI_{1}}{BVPS_{0}}

        则[1]式可以进一步变形为:

\frac{NI_{1}\times (1-b)}{BVPS_{0}\times (r-g)}=\frac{ROE_{1}\times (1-b)}{r-g}\, \, [2]

        由于g = ROE_{1}\times b, [2]可以进一步变形得到[3]式:

PB=\frac{ROE_{1}-g}{r-g}\, \, [3]

        通过观察[3]式不难发现几个结论:

        1):当ROE大于r,PB大于1;

        2):当ROE小于r,PB小于1;

        3):当ROE等于r,PB等于1;

        记住[3]式及这三个结论,等一下它们大有作为。

2. 剩余收益

        笔者认为从自由现金流折现到股利折现实际上是一个范围不断收缩的过程,而剩余收益正是这个收缩过程中的一个过渡。如图一所示,在企业的收入大蛋糕中扣除掉费用支出,经营活动的垫资,给政府的税收等等支出后得到可供债权人和股东支配的自由现金流FCFF;在这基础上继续扣除债权人分走那部分利息再加上税盾,得到可供股东支配的自由现金流FCFE;绝大多数人学习过程中会直接从FCFE跳到利用股利进行折现,并且教科书会说一些过场式的陈词滥调,比如:FCFFE代表的是一个公司潜在的分红能力,而股利是一个公司实实在在发出了多少分红。对于一个连年挣钱却还一毛不拔的铁公鸡,FCFE是比较合理的估值方式,云云。

 图一:企业利益分配流

        FCFE是股东可以自由支配的现金流,但一来它不是个实打实的应计制概念,除了不能完全体现应计制的优势,FCF也有可能是个负的,不利于折现。二来自由支配并不意味着股东都能把FCFE全部装进自己的腰包。对于一家FCF是负的,而且一毛不拔的铁公鸡(不发股利)又该怎么办?

        有没有这样一个概念,既能体现公司为股东创造了多少经济价值,又是一个应计制的。首先可以想到的是净利润,它来自利润表,是一个应计制的科目。其次净利润是Bottom line,后面分红多少除了看分红率,净利润才是高分红的基础。作为股东最关心的企业盈利能力指标,ROE就采用了净利润作为分子。

        净利润能不能用来折现?可以。但这样还是差了一块东西,之前说过还需要体现经济价值,也就是经济学告诉我们的机会成本。于是马上可以想到折现率r,而所有者权益又是股东的投入资本,因此通过折现率乘以所有者权益账面价值即可得到股东的机会成本。但总说经济价值指代得也不明确,于是这个理念被取了一个名字,即是剩余收益,也称残余收益(Residual income,下文简称RI),接下来就简单了,如[4]式:

RI_{t+1} = NI_{t+1}-BV_{t}\times r_{e}\, \, [4]

        其中,BV_{t}为第t期所有者权益账面价值(Book value of equity,下文简称“BV”)。

         不过需要注意的是图一只是用来讲解一下理念,里面的长方形面积大小关系并不代表绝对金额的大小关系。实际上分红不一定会小于RI(例如借债发股利),FCFE也不一定会大于RI(例如折旧摊销很小,资产和营运资金投入又很高)。

2.1 与PB指标的关系

        之前推导的PB看似与RI没有关系,实际上RI通过一个巧妙的变形就可与PB指标联系起来。

        将[4]式左边的所有者权益提出:

RI_{t+1} =BV_{t}\times ( \frac{NI_{t+1}}{BV_{t}}- r_{e})

        通过ROE的计算式就可以将上式简化为:

RI_{t+1} =BV_{t}\times ( ROE_{t+1}- r_{e})\, \, [5]

        观察[5]并联系[3]式,可以总结得到以下结论:

        1):当ROE大于r,RI为正数,PB指标大于1;

        2):当ROE小于r,RI为负数,PB指标小于1;

        3):当ROE等于r,RI为0,PB指标等于1;

        这几条结论中,只要成立其中一个小条件,该条结论都可以被直接推出来。例如只要知道基本面修正的PB指标大于1,那么可以直接推出ROE是大于r的,RI是大于0的。

        这个关系不仅是纯数学公式推导,还蕴含着经济原理,即RI用来衡量公司为股东创造的经济价值,ROE是公司盈利能力,r是股东机会成本;当ROE小于r,意味着公司为股东创造的价值不足以覆盖股东的机会成本,此时RI便为负数,基本面修正的静态PB指标也小于1,公司从基本面上看处于破净状态

2.2 多期剩余收益的几个推导方式

        剩余收益的折现与现金流折现是一样的原理,RI其实是通过净利润计算出来的,是一个增量的概念,与净利润不停被计入所有者权益科目一样的逻辑,这个往里加的对象便是公司的所有者权益账面价值。因此,不同于其它估值模型,剩余收益现金流折第一个需要注意的点是当期净资产的账面价值加上未来RI的增量现金流折现。这个得到的结果才是公司的总内在价值,即[6]式:

Intrinsic\, \, Value_{0} = BV_{0} +\sum_{i=1}^{n}\frac{RI_{i}}{(1+r_{i})^{n}}\, \, [6]

        可以看到,[6]式中的当期净资产账面价值是直接可以通过财报得到的,问题在于后面的RI未来现金流加总,下面笔者将推导几种未来RI的推导方式,下面涉及的公式推导会比较较多

2.2.1 净盈余关系推导

        回顾剩余收益的计算式, 下一期的RI可以计算为:

RI_{1} = NI_{1}-BV_{0}\times r_{e}

        不难发现影响RI的几个变量无非是净利润,期初净资产和折现率。看到净利润和净资产直接联想到ROE的公式,只要假设公司未来的ROE水平和折现率,净盈余关系或者清洁盈余关系(clean surplus relationship)成立(成立条件例如:累计其它综合收益科目为0,股本不能变化等),就能直接将未来的RI推算出来。

        因为净盈余关系:

BV_{1} = BV_{0} + NI_{1} - Dividend_{1}

         可以在RI_{1}的基础上直接推导出RI_{2}, 其中Div为分红:

RI_{2} = NI_{2}-BV_{1}\times r_{e}=NI_{2}-(BV_{0}+NI_{1}-Div_{1})\times r_{e}\, \, \, [7]

         按照[7]式这样就可以不断将未来RI计算出来。下面笔者以BV初=1000, ROE=20%且恒定,股利支付率5%且恒定,r=8%且恒定进行简单的四期RI计算展示:

Year(t) 1 2 3 4
BV_{t-1} 1000 1190 1416.10 1685.16
NI=ROE\times BV 200 238 283.22 337.03
Div_{t} 10 11.9 14.161 16.85
BV_{t} 1190 1416.10 1685.16 2005.34
BV_{t}\times r_{e} 80 95.20 113.29 134.81
RI_{t} = NI-BV\times r_{e} 120 142.80 169.93 202.22

 表一:净盈余关系计算多期剩余收益

2.2.2 公式法推导一

        由于以下几个关系(字母注释详见PB指标推导部分,没看明白可以留言):

NI_{1} = ROE_{1}\times BV_{0}

NI_{1} - Div_{1} = NI_{1}\times b

g = ROE \times b

        [7]式可继续化简:

RI_{2} =NI_{2}-(BV_{0}+NI_{1}\times b)\times r_{e}=NI_{2}-(BV_{0}+ROE\times BV_{0}\times b)\times r_{e}

        将BV提出:

RI_{2} = NI_{2}-BV_{0}\times (1+g)\times r_{e}

        按这个方式可以写出第三期的剩余收益:

RI_{3} = NI_{3}-(BV_{2}+NI_{3}-Div_{3})\times r_{e}=NI_{3}-BV_{2}\times (1+ROE_{3}\times b)\times r_{e}

        化简一下:

        RI_{3} = NI_{3}-BV_{2}\times (1+g)\times r_{e}

        像这样可以将后面t期的RI用公式[8]表示出来:

RI_{t} = NI_{t}-BV_{t-1}\times (1+g)^{t}\times r_{e}\, \, \, [8]

        公式[8]即为一般公式,假设条件是净盈余关系成立、ROE、股利支付率保持不变。

2.2.3 公式法推导二

        推导出的一般公式[8]中含有一个第t期的净利润,这预测起来比较麻烦。不过在推导RI公式的时候还有一个变形式[5],[5]式中是不含净利润这一项的,因此可以依照上面的原理推导出另一个多期计算式:

RI_{t+1} =BV_{0}\times (1+g)^{t}\times ( ROE_{t+1}- r_{e})\, \, [9]

        还是用刚刚笔者举例使用的数据:BV初=1000, ROE=20%且恒定,股利支付率5%且恒定,r=8%,净盈余关系成立,下面将已知数据直接带入[9]式计算四期的剩余收益:

Year 1 2 3 4
g=ROE\times b 0.19 0.19 0.19 0.19
t 0 1 2 3
(1+g)^{t} 1 1.19 1.42 1.69
ROE-r_{e} 0.12 0.12 0.12 0.12
RI_{t} 120 142.80 196.93 202.22

表二:公式法计算多期剩余收益

        对比表一会发现通过净盈余关系计算出的剩余收益和公式法计算出的剩余收益竟然是一模一样的!

        当然是一模一样的,它们本质上只是对公式进行了数学恒等变形,不一样那不是活见鬼了。

2.3 剩余收益的折现

        说完如何计算,下面就该谈估值最重要的步骤——折现。一些基础的折现理念,例如阶段折现方式,可持续因子的运用笔者下面就不做深入解释了,需要了解原理的可以点下面链接看笔者往期讲解增速g的测算,H-model,可持续因子及周期因子

        首先对剩余收益来说,最基础的一个折现式子是:

Value_{0} = BV_{0} +\sum_{i=1}^{n}\frac{RI_{i}}{(1+r_{i})^{n}}

        将未来所有的剩余收益预测出来,乖乖按照即期利率折现,最后得到公司内在价值。这种方式比较一板一眼,笔者就不做讨论了。不过这里也可以得到一个结论:从之前的PB指标推导的几个结论可以知道,当ROE一直大于股东机会成本,未来的剩余收益是大于0的。因此对股东们来说,公司的价值会大于净资产的账面价值(Value>BV)。

        下面笔者再讨论几种阶段折现的方式。

2.3.1 PB指标与单阶段折现

        将基础公式中未来现金流加总部分写成戈登增长模型,但与以前的股利折现不同,剩余收益的分子变下形是可以与PB指标联系起来的:

V_{0} =BV_{0}+ \frac{RI_{1}}{r_{e}-g} = BV_{0} +\frac{BV_{0}\times (ROE-r_{e})}{r_{e}-g}

        化简一下,最后一个部分其实就基本面调整的PB指标乘以BV:

\frac{BV_{0}\times (r_{e}-g)}{r_{e}-g}+\frac{BV_{0}\times(ROE-r_{e})}{r_{e}-g}=\frac{BV_{0}\times (ROE - g)}{r_{e}-g}=BV_{0}\times PB

        即:

V_{0}=BV_{0}\times PB\, \, [10]

        [10]式推出来不是闹着玩吗?本身PB就是价格除以净资产账面价值,现在再乘一个净资产得到价格。笔者想说的是,这个式子在未来终值估计上会更有用。不过用这个式子的其中几个前提是ROE不变,净利润增速,净资产增速和剩余收益增速不变。这在实务中其实是不可能出现的,所谓剩余收益是公司为股东所创造的经济价值,随着行业走向衰退,很难说一个企业会永续的以恒定增速为股东创造效益。

2.3.2 PB指标与多阶段折现

        虽然单阶段是很难实现的,但上面的单阶段推导给了一个灵感——知道未来的PB就可以推导出未来的远端现金流的终值(terminal value)。还是之前的例子,前面表一已经将前四期RI都推算了出来,现在结合PB指标计算第五期的终值:

V_{5} = PB_{5}\times BV_{5}        

        接下来就简单了,将每一期的RI进行折现,但需要注意的是V_{5}中是包含净资产账面价值的,需要减去BV才是未来RI的增量。

V_{5} -BV_{5}= \sum_{i=5}^{n} \frac{RI_{i}}{(1+r_{e})^{i}}

        因此:

V_{0}=BV_{0}+\sum_{i=1}^{4} \frac{RI_{i}}{(1+r_{i})^{i}}+\frac{PB_{5}\times BV_{5}-BV_{5}}{(1+r)^{5}}

 图二:远端现金流终值计算

        但这个计算问题在于如何估测5年后的PB水平。例如,长期来看均值回归使得5年后PB指标回到行业平均水平,以行业平均进行估测。或者一个公司由于行业发展程度,市场竞争等因素,从长期来看PB趋向于1,即第五期终值等于0,那么该公司当期的内在价值即为当期净资产加上未来四期的剩余收益折现。

2.3.3 可持续因子折现

        除了利用PB指标外,还有另一种方法计算终值。回到RI的戈登增长折现式:

   V_{0} =BV_{0}+ \frac{RI_{1}}{r_{e}-g}

        仔细想想这个式子其实是有问题的,传统意义上的戈登增长模型是假设现金流以g的速度增长到无穷远期。但对于剩余收益来说,剩余收益永续增长这样的假定太过苛刻,没有那个企业可以保证自己的账面价值永续增长到无穷期,这样的假设太过恐怖了。因此往往不是假设RI永续增长,而是持续下跌。于是就有了带可持续因子的公式[11]:

V_{0} =BV_{0}+ \frac{RI_{1}}{1+r_{e}+\omega }\, \, [11]

        关于可持续因子原理就不展开讲了,需要了解的看笔增速g那期文章。

3 模型实现

         首先是电子表格建模,就是利用Excel。其实很多分析师都有自己的估值模板,输入相关参数就直接出结果了。虽然一些简单的折现模型用电子表格建模还是挺方便的,也很直观。不过笔者还是会自己写写代码,一来可以批量跑很多家公司,二来可以内嵌一些更复杂的功能模块,对于庞大的数据处理来说电子表格建模就显得有心无力了。下面笔者以上证某公司为例简单实现一个带有可持续因子的剩余收益估值模型。

code = "" 公司代码

3.1 代码实现

        数据方面笔者选择了Tushare金融大数据平台API,首先导入相关模块,实例化tushare接口:

import tushare as ts
import numpy as np
import pandas as pd

pro = ts.pro_api("token") # 输入自己的密钥

        1):净利润及净资产

        公司方面使用的是财务报表预测那期的目标公司,一来可以直接拿那期的结果来用,二来可以省略很多分析过程。所需要使用的财务数据为2021年年报数据以及2022年预测数据。 这部分代码很多,也不是本期重点就不放了, 文章传送门:财务报表建模——利润表

        净利润预测得到的结果:¥27145022057:

def financial_mod():

    return NI

NI = financial_mod()

        净资产账面价值,直接获取当期的财报数据,得到数值为1200多亿:

bv = pro.balancesheet(ts_code=code, period='20211231', fields='total_hldr_eqy_inc_min_int')['total_hldr_eqy_inc_min_int'][0]

print(bv)
# 124868124000.0

        2):折现率

        下面需要知道折现率r, 可以利用CAPM模型计算折现率:

def CAPM_mod():
    
    return r

r = CAPM_mod()

CAPM结果(%): 8.2916 R-square: 0.5092

        当然,也可以内嵌更复杂的模型。笔者利用PSM模型计算,代码也比较多,不放了,感兴趣的可以看笔者折现率r那期内容:浅谈估值模型:回报率r的进阶玩法。模型给出的折现率为12.33%,四个因子均显著,模型解释力近70%,可以说PSM非常适合这家公司:

def PSM_mod():

    return r

r = PSM_mod() 

                                 GLS Regression Results                                
=======================================================================================
Dep. Variable:                     RP   R-squared (uncentered):                   0.697
Model:                            GLS   Adj. R-squared (uncentered):              0.696
Method:                 Least Squares   F-statistic:                              1126.
                                                  
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
RM             1.5858      0.027     58.901      0.000       1.533       1.639
SMB          -49.1681      2.449    -20.075      0.000     -53.971     -44.365
HML           54.8740      3.008     18.244      0.000      48.975      60.773
LIQ          -17.2345      0.881    -19.559      0.000     -18.963     -15.506
==============================================================================
Omnibus:                      260.134   Durbin-Watson:                   0.087
Prob(Omnibus):                  0.000   Jarque-Bera (JB):              883.215
Skew:                           0.645   Prob(JB):                    1.63e-192
Kurtosis:                       6.022   Cond. No.                         161.
==============================================================================

PSM结果(%): 12.3287 Adj R: 0.6962

        3):折现模块

        数据都拿到之后按照前面推导的可持续因子折现公式写个模块就完成了:

def RI_persistent_mod(BV_0, NI_1, r, w): 
    RI = NI_1 - BV_0 * r
    v = BV_0 + RI/(1 + r - w)
    return v
# BV_0:当期净资产
# NI_1:下期净利润
# r:折现率
# w:可持续因子

        将之前的参数传入模块,除以个股数计算每股股价即可。最后结果为¥28:

total_share = pro.daily_basic(ts_code=code, trade_date='20211231', fields='total_share')["total_share"][0]*10000
print(RI_persistent_mod(bv, ni, r, 0.95)/total_share)

# 27.99467127080234

        上面的代码看着简单,因为很多模块都是现成的,以前也做过很多铺垫了,笔者认为这是水到渠成的事情。

3.2 敏感性分析

        有了封装好的模块,敏感性分析,情景分析,压力测试就都可以做了。下面以可持续因子的敏感性分析为例,给定w的阈值从0到1,将结果 输出到图表上:

import matplotlib.pyplot as plt

values = []
w_lst = []
for i in range(100):
    w = 1-i/100
    price = RI_persistent_mod(bv, ni, r, w)/total_share
    values.append(price)
    w_lst.append(w)

plt.plot(w_lst, values)
plt.show()

 图三:可持续因子敏感性分析

        简单说一说吧,仅作举例。从敏感性分析可以看出,w取[0,1]时,该公司的价值区间为¥21到¥32。该价值曲线呈现凸性,即w降时,w的降低对价值影响不断边际降低;当w较高时,w的变化对估值影响较大,即价格到26甚至更高时,例如财报不及预期,产品出现质量丑闻等一些小小的基本面瑕疵,都非常有可能引发估值水平的较的回调。当然,以上结论仅仅只针对可持续因子一个变量,实际需要结合其它变量做更复杂的分析,不是本期重点,仅作举例就不继续分析了。

4. 总结

       简单总结一下剩余收益的优点吧:

        1):在折现公式中不难发现,占价值大头的是当期净资产账面价值,未来的剩余收益毕竟只占较小一部分。因此剩余收益对终值的敏感度很低,而账面价值的数据是直接可以从财报拿到的,提高了估值的准确性;2):剩余收益体现了公司为股东创造的经济价值;3):对于不分红的公司或现金流为负数的公司,剩余收益是不错的估值方式;

        当然,缺点也是有的:

        1):过度依赖账面价值进行估值,对于报表不能如实反应资产价值的情况下,剩余收益估出来的价值很可能是有偏的;2):没有考虑到公司表外项目,例如人才资本,特殊目的实体等。当然,分析师可以对报表进行调整,但需要做大量的工作。3):剩余收益的多期推导严重依赖财务及其报表勾稽关系,例如净剩余关系成立;

        剩余收益的公式是比较多的,比起公式的推导笔者认为更重要的还是理解背后的经济含义。

5. 往期精选

往期精选
系列 文章传送门 实现方式
基本面分析 实现GGM的理想国 Python
剩余收益估值(本期) Python
Fama-French及PSM Python
增速g的测算 Python
PE指标平滑 Python
PE Band Python
技术分析 分类树算法 R
蒙特卡洛模拟 Python
全连接神经网络模型 Python
组合管理 券商金股哪家强——信息比率 Python
从指数构建原理看待A股的三千点魔咒 Python
决策树学习基金持仓并识别公司风格类型 R
杂谈类 垃圾公司对回报率计算的影响几何 Python
市场风险分析 Python
金融危机模拟 Python
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/simon1223z/article/details/128759936

智能推荐

API网关之动态路由_api路由-程序员宅基地

文章浏览阅读1.3k次。AIP网关 动态路由_api路由

强一致性 弱一致性 最终一致性-程序员宅基地

文章浏览阅读4.5k次,点赞4次,收藏22次。在足球比赛里,一个球员在一场比赛中进三个球,称之为帽子戏法(Hat-trick)。在分布式数据系统中,也有一个帽子原理(CAP Theorem),不过此帽子非彼帽子。CAP原理中,有三个要素:一致性(Consistency)可用性(Availability)分区容忍性(Partition tolerance)CAP原理指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。因此在进行分..._强一致性 弱一致性 最终一致性

Android 相册图库功能,按时间排序_android 加载网络图片列表时间轴相册-程序员宅基地

文章浏览阅读8.6k次,点赞4次,收藏21次。TimeAlbum 时间相册功能说明1、图片和视频资源根据日期排序显示。 2、图片视频预览功能,图片、视频预览带缓存功能。 3、单个图片或视频可进行删除及分享操作。 4、多张图片进行分享功能,多张图片和视频进行删除功能。 5、Decoration可自定义扩展。 6、图片显示可自定义扩展。 7、图片视频可自定义预览操作。依赖如何使用只需要继承AlbumFr..._android 加载网络图片列表时间轴相册

echarts动态时间轴,以秒为单位更新_echarts实现以秒为单位的动态折线图显示-程序员宅基地

文章浏览阅读2.2w次。echarts官网上的案例是按天来更新数据的http://echarts.baidu.com/demo.html#dynamic-data2 现在我需要改成以秒为单位动态刷新的案例,类似于股票实时刷新的那种,代码位置http://download.csdn.net/download/u013720726/9963108_echarts实现以秒为单位的动态折线图显示

macOS VSCode 配置 Go 编程环境_failed to run "go env env,-json,goprivate,gomod,go-程序员宅基地

文章浏览阅读1.5k次。macOS VSCode 配置 Go 编程环境笔者使用 macOS BigSur 安装完 Go 1.16.6 和 VSCode Go插件,然后运行时,往往会报诸如下面的错误:build esc: cannot load xxx : malformed module path “xxx”: missing dot in first path elementwarning: GOPATH set to GOROOT (/Users/xxx/go/) has no effect实际上,这都是由于 GO_failed to run "go env env,-json,goprivate,gomod,gowork,goenv,gotoolchain": s

C++多线程并发(三)---线程同步之条件变量_线程同步condition variables-程序员宅基地

文章浏览阅读1.7w次,点赞66次,收藏303次。一、何为条件变量在前一篇文章《C++多线程并发编程(二)—线程同步之互斥锁》中解释了线程同步的原理和实现,使用互斥锁解决数据竞争访问问题,算是线程同步的加锁原语,用于排他性的访问共享数据。我们在使用mutex时,一般都会期望加锁不要阻塞,总是能立刻拿到锁,然后尽快访问数据,用完之后尽快解锁,这样才能不影响并发性和性能。如果需要等待某个条件的成立,我们就该使用条件变量(condition var..._线程同步condition variables

随便推点

Java WEB开发基础知识-程序员宅基地

文章浏览阅读2.9w次,点赞53次,收藏319次。一、WEB应用程序B/S ( browser/server ,浏览器/服务器)架构基于HTTP传输协议(超文本传输协议,回忆HTML的名字:超文本标记语言)WEB程序必须要运行在web容器上,如Tomcat /Jboss/WebLogic等二、HTTP协议HTTP使用TCP作为它的支撑运输层协议,默认的端口是80(缺省端口)。超文本传输协议(Hypertext Transfer Protocol,..._java web开发

SQL语句操作优先级顺序_inner left优先级-程序员宅基地

文章浏览阅读1.7w次,点赞4次,收藏18次。SQL语句操作优先级顺序原文所在SQL 不同于与其他编程语言的最明显特征是处理代码的顺序。在大数编程语言中,代码按编码顺序被处理,但是在SQL语言中,第一个被处理的子句是FROM子句,尽管SELECT语句第一个出现,但是几乎总是最后被处理。 每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入。这些虚拟表对调用者(客户端应用程序或者外部查询)不可用。只是最后一步生成的表才会返回_inner left优先级

C51单片机:点击一次按键,实现LED显示状态的亮灭转变_单片机按键按一次亮一个灯-程序员宅基地

文章浏览阅读9.1k次,点赞3次,收藏30次。#include <REGX52.H>sbit led=P1^0;//p1.0口接ledsbit button=P3^0;//p3.0口接控制int i,j;//整数i,jvoid main( )//主函数{ led=1;//led初始状态 while(1)//循环 { if(button==0)//按下开关 { for(i=0;i<10;i++);//延时去抖 while(button==0);//检测松手 l._单片机按键按一次亮一个灯

Python 爬取红酒网站https://www.vivino.com_vivino网站爬虫-程序员宅基地

文章浏览阅读2.6w次。用到了进程池,代理import requestsimport jsonimport jsonpathimport pymysqlimport queuefrom multiprocessing import Poolimport randomrequests.packages.urllib3.disable_warnings()# 创建连接db = pymysql.c..._vivino网站爬虫

nginx中try_files $uri $uri/ /index.html的作用 和 $uri的含义

的含义是:首先尝试按照请求的URI去寻找对应的文件,如果找不到,再尝试将请求作为目录处理,如果还是找不到,最后就返回。这对于单页应用来说非常有用,因为无论用户请求的是什么URL,服务器都会返回同一个HTML文件(即。:这是Nginx内置的一个变量,代表当前请求的URI,不包括参数部分。例如,如果请求的URL是。:尝试将请求作为目录处理,如果这个目录存在,Nginx会试图返回该目录下的默认文件(通常是。这句话是Nginx服务器配置中的一条指令,用于设置处理请求的策略。都无法找到对应的文件或目录,那么就返回。

KUKA机器人KR3 R540维护保养——更换齿形带

我们知道机器人长时间运行后,部分轴的齿形带会发生磨损,张力也会发生变化,这时就需要更换齿形带。本篇文章还是以KUKA机器人KR3 R540的A5轴为例,对KUKA机器人更换轴A2、A3、A5齿形带的操作方法进行介绍,有需要的可以参考。4、从齿形带轮上取下旧的齿形带A5。2、接下来用T10规格的内梅花扳手将盖罩A5上的4 颗螺丝拧出,放到指定位置,易于保管。1、我们前期需要准备一些工具:开口扳手(7毫米)、内六角梅花扳手、内六角扳手。三、对机器人A2、A3轴齿形带的更换方法步骤和以上类似。