作者:迪玛利亚
其实他的主业并不是挖木炭,他曾经试过把我家的门面变成一家小卖部。父亲引进了大桶的漂白剂、氯水、肥皂还有许多的清洁剂,然后他会把这些分进一个个瓶子里,最后通过小卖部再贩卖出去。如果你生活在我们的小镇上的话,你买一瓶柠檬清洁剂是不会去正规的商店的,那太贵了。你可以来到我们家的小店里,我妈妈会卖给你一瓶同样的清洁剂,价格也会合理得多。
分享个人经验,保留阅读记录,做时间的朋友
作者:迪玛利亚
在实际工作中,我们需要经常跟第三方平台打交道,可能会对接第三方平台API接口,或者提供API接口给第三方平台调用。
那么问题来了,如何设计一个优雅的API接口,能够满足:安全性、可重复调用、稳定性、好定位问题等多方面需求?
今天跟大家一起聊聊设计API接口时,需要注意的一些地方,希望对你会有所帮助。
为了防止API接口中的数据被篡改,很多时候我们需要对API接口做签名。
接口请求方将请求参数 + 时间戳 + 密钥拼接成一个字符串,然后通过md5等hash算法,生成一个前面sign。
然后在请求参数或者请求头中,增加sign参数,传递给API接口。
API接口的网关服务,获取到该sign值,然后用相同的请求参数 + 时间戳 + 密钥拼接成一个字符串,用相同的m5算法生成另外一个sign,对比两个sign值是否相等。
如果两个sign相等,则认为是有效请求,API接口的网关服务会将给请求转发给相应的业务系统。
如果两个sign不相等,则API接口的网关服务会直接返回签名错误。
问题来了:签名中为什么要加时间戳?
答:为了安全性考虑,防止同一次请求被反复利用,增加了密钥没破解的可能性,我们必须要对每次请求都设置一个合理的过期时间,比如:15分钟。
这样一次请求,在15分钟之内是有效的,超过15分钟,API接口的网关服务会返回超过有效期的异常提示。
目前生成签名中的密钥有两种形式:
一种是双方约定一个固定值privateKey。
另一种是API接口提供方给出AK/SK两个值,双方约定用SK作为签名中的密钥。AK接口调用方作为header中的accessKey传递给API接口提供方,这样API接口提供方可以根据AK获取到SK,而生成新的sgin。
有些时候,我们的API接口直接传递的非常重要的数据,比如:用户的银行卡号、转账金额、用户身份证等,如果将这些参数,直接明文,暴露到公网上是非常危险的事情。
由此,我们需要对数据进行加密。
目前使用比较多的是用BASE64加解密。
我们可以将所有的数据,安装一定的规律拼接成一个大的字符串,然后在加一个密钥,拼接到一起。
然后使用JDK1.8之后的Base64工具类处理,效果如下:
【加密前的数据】www.baidu.com
【加密后的数据】d3d3LmJhaWR1LmNvbQ==
为了安全性,使用Base64可以加密多次。
API接口的调用方在传递参数时,body中只有一个参数data,它就是base64之后的加密数据。
API接口的网关服务,在接收到data数据后,根据双方事先预定的密钥、加密算法、加密次数等,进行解密,并且反序列化出参数数据。
为了进一步加强API接口的安全性,防止接口的签名或者加密被破解了,攻击者可以在自己的服务器上请求该接口。
需求限制请求ip,增加ip白名单。
只有在白名单中的ip地址,才能成功请求API接口,否则直接返回无访问权限。
ip白名单也可以加在API网关服务上。
但也要防止公司的内部应用服务器被攻破,这种情况也可以从内部服务器上发起API接口的请求。
这时候就需要增加web防火墙了,比如:ModSecurity等。
如果你的API接口被第三方平台调用了,这就意味着着,调用频率是没法控制的。
第三方平台调用你的API接口时,如果并发量一下子太高,可能会导致你的API服务不可用,接口直接挂掉。
由此,必须要对API接口做限流。
限流方法有三种:
API接口总的请求次数,不能超过10000次。指定的API接口,请求次数不能超过2000次。AK/SK用户,在一分钟内,对API接口总的请求次数,不能超过10000次。我们在实际工作中,可以通过nginx,redis或者gateway实现限流的功能。
我们需要对API接口做参数校验,比如:校验必填字段是否为空,校验字段类型,校验字段长度,校验枚举值等等。
这样做可以拦截一些无效的请求。
比如在新增数据时,字段长度超过了数据字段的最大长度,数据库会直接报错。
但这种异常的请求,我们完全可以在API接口的前期进行识别,没有必要走到数据库保存数据那一步,浪费系统资源。
有些金额字段,本来是正数,但如果用户传入了负数,万一接口没做校验,可能会导致一些没必要的损失。
还有些状态字段,如果不做校验,用户如果传入了系统中不存在的枚举值,就会导致保存的数据异常。
由此可见,做参数校验是非常有必要的。
在Java中校验数据使用最多的是hiberate的Validator框架,它里面包含了@Null、@NotEmpty、@Size、@Max、@Min等注解。
用它们校验数据非常方便。
当然有些日期字段和枚举字段,可能需要通过自定义注解的方式实现参数校验。
我之前调用过别人的API接口,正常返回数据是一种json格式,比如:
{
"code":0,
"message":null,
"data":[{"id":123,"name":"abc"}]
},
签名错误返回的json格式:
{
"code":1001,
"message":"签名错误",
"data":null
}
没有数据权限返回的json格式:
{
"rt":10,
"errorMgt":"没有权限",
"result":null
}
这种是比较坑的做法,返回值中有多种不同格式的返回数据,这样会导致对接方很难理解。
出现这种情况,可能是API网关定义了一直返回值结构,业务系统定义了另外一种返回值结构。如果是网关异常,则返回网关定义的返回值结构,如果是业务系统异常,则返回业务系统的返回值结构。
但这样会导致API接口出现不同的异常时,返回不同的返回值结构,非常不利于接口的维护。
其实这个问题我们可以在设计API网关时解决。
业务系统在出现异常时,抛出业务异常的RuntimeException,其中有个message字段定义异常信息。
所有的API接口都必须经过API网关,API网关捕获该业务异常,然后转换成统一的异常结构返回,这样能统一返回值结构。
我们的API接口需要对异常进行统一处理。
不知道你有没有遇到过这种场景:有时候在API接口中,需要访问数据库,但表不存在,或者sql语句异常,就会直接把sql信息在API接口中直接返回。
返回值中包含了异常堆栈信息、数据库信息、错误代码和行数等信息。
如果直接把这些内容暴露给第三方平台,是很危险的事情。
有些不法分子,利用接口返回值中的这些信息,有可能会进行sql注入或者直接脱库,而对我们系统造成一定的损失。
因此非常有必要对API接口中的异常做统一处理,把异常转换成这样:
{
"code":500,
"message":"服务器内部错误",
"data":null
}
返回码code是500,返回信息message是服务器内部异常。
这样第三方平台就知道是API接口出现了内部问题,但不知道具体原因,他们可以找我们排查问题。
我们可以在内部的日志文件中,把堆栈信息、数据库信息、错误代码行数等信息,打印出来。
我们可以在gateway中对异常进行拦截,做统一封装,然后给第三方平台的是处理后没有敏感信息的错误信息。
在第三方平台请求你的API接口时,接口的请求日志非常重要,通过它可以快速的分析和定位问题。
我们需要把API接口的请求url、请求参数、请求头、请求方式、响应数据和响应时间等,记录到日志文件中。
最好有traceId,可以通过它串联整个请求的日志,过滤多余的日志。
当然有些时候,请求日志不光是你们公司开发人员需要查看,第三方平台的用户也需要能查看接口的请求日志。
这时就需要把日志落地到数据库,比如:mongodb或者elastic search,然后做一个UI页面,给第三方平台的用户开通查看权限。这样他们就能在外网查看请求日志了,他们自己也能定位一部分问题。
第三方平台极有可能在极短的时间内,请求我们接口多次,比如:在1秒内请求两次。有可能是他们业务系统有bug,或者在做接口调用失败重试,因此我们的API接口需要做幂等设计。
也就是说要支持在极短的时间内,第三方平台用相同的参数请求API接口多次,第一次请求数据库会新增数据,但第二次请求以后就不会新增数据,但也会返回成功。
这样做的目的是不会产生错误数据。
我们在日常工作中,可以通过在数据库中增加唯一索引,或者在redis保存requestId和请求参来保证接口幂等性。
对于对我提供的批量接口,一定要限制请求的记录条数。
如果请求的数据太多,很容易造成API接口超时等问题,让API接口变得不稳定。
通常情况下,建议一次请求中的参数,最多支持传入500条记录。
如果用户传入多余500条记录,则接口直接给出提示。
建议这个参数做成可配置的,并且要事先跟第三方平台协商好,避免上线后产生不必要的问题。
上线前我们务必要对API接口做一下压力测试,知道各个接口的qps情况。
以便于我们能够更好的预估,需要部署多少服务器节点,对于API接口的稳定性至关重要。
之前虽说对API接口做了限流,但是实际上API接口是否能够达到限制的阀值,这是一个问号,如果不做压力测试,是有很大风险的。
比如:你API接口限流1秒只允许50次请求,但实际API接口只能处理30次请求,这样你的API接口也会处理不过来。
我们在工作中可以用jmeter或者apache benc对API接口做压力测试。
一般的API接口的逻辑都是同步处理的,请求完之后立刻返回结果。
但有时候,我们的API接口里面的业务逻辑非常复杂,特别是有些批量接口,如果同步处理业务,耗时会非常长。
这种情况下,为了提升API接口的性能,我们可以改成异步处理。
在API接口中可以发送一条mq消息,然后直接返回成功。之后,有个专门的mq消费者去异步消费该消息,做业务逻辑处理。
直接异步处理的接口,第三方平台有两种方式获取到。
第一种方式是:我们回调第三方平台的接口,告知他们API接口的处理结果,很多支付接口就是这么玩的。
第二种方式是:第三方平台通过轮询调用我们另外一个查询状态的API接口,每隔一段时间查询一次状态,传入的参数是之前的那个API接口中的id集合。
有时候第三方平台调用我们API接口时,获取的数据中有一部分是敏感数据,比如:用户手机号、银行卡号等等。
这样信息如果通过API接口直接保留到外网,是非常不安全的,很容易造成用户隐私数据泄露的问题。
这就需要对部分数据做数据脱敏了。
我们可以在返回的数据中,部分内容用星号代替。
已用户手机号为例:182****887。
这样即使数据被泄露了,也只泄露了一部分,不法分子拿到这份数据也没啥用。
说实话,一份完整的API接口文档,在双方做接口对接时,可以减少很多沟通成本,让对方少走很多弯路。
接口文档中需要包含如下信息:
接口文档中最好能够统一接口和字段名称的命名风格,比如都用驼峰标识命名。
接口地址中可以加一个版本号v1,比如:v1/query/getCategory,这样以后接口有很大的变动,可以非常方便升级版本。
统一字段的类型和长度,比如:id字段用Long类型,长度规定20。status字段用int类型,长度固定2等。
统一时间格式字段,比如:time用String类型,格式为:yyyy-MM-dd HH:mm:ss。
接口文档中写明AK/SK和域名,找某某单独提供等。
– EOF –
转自:https://mp.weixin.qq.com/s/vt78yXSUhSFGkR_fBKWuaw
本文图解Git中的最常用命令。如果你稍微理解Git的工作原理,这篇文章能够让你理解的更透彻。

基本用法


上面的四条命令在工作目录、暂存目录(也叫做索引)和仓库之间复制文件。
git add files把当前文件放入暂存区域。
git commit给暂存区域生成快照并提交。
git reset – files用来撤销最后一次git add files,你也可以用git reset撤销所有暂存区域文件。
git checkout – files把文件从暂存区域复制到工作目录,用来丢弃本地修改。
你可以用git reset -p,git checkout -p,or git add -p进入交互模式。
也可以跳过暂存区域直接从仓库取出文件或者直接提交代码。

git commit -a相当于运行git add把所有当前目录下的文件加入暂存区域再运行。
git commit files进行一次包含最后一次提交加上工作目录中文件快照的提交。并且文件被添加到暂存区域。
git checkout HEAD – files回滚到复制最后一次提交。

约定

后文中以下面的形式使用图片。

绿色的5位字符表示提交的ID,分别指向父节点。分支用橘色显示,分别指向特定的提交。当前分支由附在其上的HEAD标识。这张图片里显示最后5次提交,ed489是最新提交。master分支指向此次提交,另一个maint分支指向祖父提交节点。

命令详解

Diff
有许多种方法查看两次提交之间的变动,下面是一些示例。

Commit
提交时,Git用暂存区域的文件创建一个新的提交,并把此时的节点设为父节点。然后把当前分支指向新的提交节点。下图中,当前分支是master。在运行命令之前,master指向ed489,提交后,master指向新的节点f0cec并以ed489作为父节点。

即便当前分支是某次提交的祖父节点,Git会同样操作。下图中,在master分支的祖父节点maint分支进行一次提交,生成了1800b。这样,maint分支就不再是master分支的祖父节点。此时,合并[1](或者衍合[2])是必须的。

如果想更改一次提交,使用git commit –amend。Git会使用与当前提交相同的父节点进行一次新提交,旧的提交会被取消。

另一个例子是分离HEAD提交[3],后文讲。
Checkout
Checkout命令用于从历史提交(或者暂存区域)中拷贝文件到工作目录,也可用于切换分支。
当给定某个文件名(或者打开-p选项,或者文件名和-p选项同时打开)时,Git会从指定的提交中拷贝文件到暂存区域和工作目录。比如,git checkout HEAD~ foo.c会将提交节点HEAD~(即当前提交节点的父节点)中的foo.c复制到工作目录并且加到暂存区域中。(如果命令中没有指定提交节点,则会从暂存区域中拷贝内容。)注意当前分支不会发生变化。

当不指定文件名,而是给出一个(本地)分支时,那么HEAD标识会移动到那个分支(也就是说,我们“切换”到那个分支了),然后暂存区域和工作目录中的内容会和HEAD对应的提交节点一致。
新提交节点(下图中的a47c3)中的所有文件都会被复制(到暂存区域和工作目录中);只存在于老的提交节点(ed489)中的文件会被删除;不属于上述两者的文件会被忽略,不受影响。

如果既没有指定文件名,也没有指定分支名,而是一个标签、远程分支、SHA-1值或者是像master~3类似的东西,就得到一个匿名分支,称作detached HEAD(被分离的HEAD标识)。
这样可以很方便地在历史版本之间互相切换。比如说你想要编译1.6.6.1版本的Git,你可以运行git checkout v1.6.6.1(这是一个标签,而非分支名),编译,安装,然后切换回另一个分支,比如说git checkout master。然而,当提交操作涉及到“分离的HEAD”时,其行为会略有不同,详情见在下面。

HEAD标识处于分离状态时的提交操作
当HEAD处于分离状态(不依附于任一分支)时,提交操作可以正常进行,但是不会更新任何已命名的分支。(你可以认为这是在更新一个匿名分支。)

一旦此后你切换到别的分支,比如说master,那么这个提交节点(可能)再也不会被引用到,然后就会被丢弃掉了。注意这个命令之后就不会有东西引用2eecb。

但是,如果你想保存这个状态,可以用命令git checkout -b name来创建一个新的分支。

Reset命令把当前分支指向另一个位置,并且有选择的变动工作目录和索引。也用来在从历史仓库中复制文件到索引,而不动工作目录。
如果不给选项,那么当前分支指向到那个提交。如果用–hard选项,那么工作目录也更新,如果用–soft选项,那么都不变。

如果没有给出提交点的版本号,那么默认用HEAD。这样,分支指向不变,但是索引会回滚到最后一次提交,如果用–hard选项,工作目录也同样。

如果给了文件名(或者-p选项),那么工作效果和带文件名的checkout差不多,除了索引被更新。

Merge命令把不同分支合并起来。合并前,索引必须和当前提交相同。如果另一个分支是当前提交的祖父节点,那么合并命令将什么也不做。另一种情况是如果当前提交是另一个分支的祖父节点,就导致fast-forward合并。指向只是简单的移动,并生成一个新的提交。

否则就是一次真正的合并。默认把当前提交(ed489 如下所示)和另一个提交(33104)以及他们的共同祖父节点(b325c)进行一次三方合并[4]。结果是先保存当前目录和索引,然后和父节点33104一起做一次新提交。

Cherry Pick
cherry-pick命令“复制”一个提交节点并在当前分支做一次完全一样的新提交。

衍合是合并命令的另一种选择。合并把两个父分支合并进行一次提交,提交历史不是线性的。衍合在当前分支上重演另一个分支的历史,提交历史是线性的。本质上,这是线性化的自动的 cherry-pick。

上面的命令都在topic分支中进行,而不是master分支,在master分支上重演,并且把分支指向新的节点。注意旧提交没有被引用,将被回收。
要限制回滚范围,使用–onto选项。下面的命令在master分支上重演当前分支从169a6以来的最近几个提交,即2c33a。

同样有git rebase –interactive让你更方便的完成一些复杂操作,比如丢弃、重排、修改、合并提交。没有图片体现这些,细节看这里:git-rebase(1)[5]。

技术说明

文件内容并没有真正存储在索引(.git/index)或者提交对象中,而是以blob的形式分别存储在数据库中(.git/objects),并用SHA-1值来校验。索引文件用识别码列出相关的blob文件以及别的数据。
对于提交来说,以树(tree)的形式存储,同样用对于的哈希值识别。树对应着工作目录中的文件夹,树中包含的 树或者blob对象对应着相应的子目录和文件。每次提交都存储下它的上一级树的识别码。
如果用detached HEAD提交,那么最后一次提交会被the reflog for HEAD引用。但是过一段时间就失效,最终被回收,与git commit –amend或者git rebase很像。
相关链接:
转自:https://mp.weixin.qq.com/s/BrciK1YqQlIGrfOFfJQ9EA
图为俞敏洪专访张文中节目截图。对于冤案,张文中表示要用毕生精力去纠正这样一件错的事。
2006年4月,北京某地的物美大卖场。
多点Dmall的零售云解决方案 图源:招股书
图为多点Small零售核心服务云解决方案中,智能补货模块的说明 图源:招股书转自:https://mp.weixin.qq.com/s/oSrH2PQPOgv3LT7LnVuYzw

中国基金报 泰勒
大家好,一起来看看今晚的财经大事。重磅政策一个接一个!全在这份中共中央 国务院印发的《扩大内需战略规划纲要(2022-2035年)》当中!

新华社北京12月14日电 近日,中共中央、国务院印发了《扩大内需战略规划纲要(2022-2035年)》,并发出通知,要求各地区各部门结合实际认真贯彻落实。
全文很长,先上新华社整理的十大要点:
1、展望2035年 消费和投资规模再上新台阶完整内需体系全面建立
2、加强房地产市场预期引导支持居民合理自住需求 遏制投资投机性需求
3、促进免税业健康有序发展 深入推进海南国际旅游消费中心建设
4、适应人口老龄化进程 推动生育政策与经济社会政策配套衔接
5、深入推进国家战略性新兴产业集群发展建设国家级战略性新兴产业基地
6、实施宽进严管 对可以依靠市场充分竞争提升供给质量的服务消费领域取消准入限制
7、加快传统线下业态数字化改造和转型升级
8、打造中国品牌 培育和发展中华老字号和特色传统文化品牌
9、提升电网安全和智能化水平 加快全国干线油气管道建设
10、释放出行消费潜力 加强停车场、充电桩、换电站、加氢站等配套设施建设
下面是泰勒整理的要点。
1、重大意义
19、支持社交电商、网络直播等多样化经营模式,鼓励发展基于知识传播、经验分享的创新平台。支持线上多样化社交、短视频平台规范有序发展,鼓励微应用、微产品、微电影等创新。
20、积极发展绿色低碳消费市场。倡导节约集约的绿色生活方式。
21、加大传统制造业优化升级投资力度,扩大先进制造领域投资,提高制造业供给体系质量和效率。加大制造业技术改造力度,支持企业应用创新技术和产品实施技术改造。
22、提升电网安全和智能化水平,优化电力生产和输送通道布局,完善电网主网架布局和结构
23、优化煤炭产运结构,推进煤矿智能化、绿色化发展,优化建设蒙西、蒙东、陕北、山西、新疆五大煤炭供应保障基地,提高煤炭铁路运输能力。
24、建设多能互补的清洁能源基地,以沙漠、戈壁、荒漠地区为重点加快建设大型风电、光伏基地。
25、推动构建新型电力系统,提升清洁能源消纳和存储能力。
26、以需求为导向,增强国家广域量子保密通信骨干网络服务能力。
27、积极稳妥发展车联网。
28、打造中国品牌,培育和发展中华老字号和特色传统文化品牌。持续办好中国品牌日活动,宣传推介国货精品,增强全社会品牌发展意识,在市场公平竞争、消费者自主选择中培育更多享誉世界的中国品牌。
29、持续释放服务消费潜力。实施宽进严管,对可以依靠市场充分竞争提升供给质量的服务消费领域取消准入限制。
30、加大对民间投资支持和引导力度。坚持毫不动摇巩固和发展公有制经济,毫不动摇鼓励、支持、引导非公有制经济发展,促进公有制经济和非公有制经济优势互补、共同发展。
31、鼓励和引导非国有资本投资主体通过参股控股、资产收购等多种形式,参与国有企业改制重组。
32、切实保护民营企业的合法权益,培育和维护公平竞争的投资环境。加强对民营企业的服务、指导和规范管理。
33、改革完善事业单位工资、国有企业工资分配等制度。积极推行工资集体协商制度。实施渐进式延迟法定退休年龄。
34、完善股份制企业特别是上市公司分红制度。完善股票发行、信息披露等制度,推动资本市场规范健康发展。
35、创新更多适应家庭财富管理需求的金融产品,增加居民投资收益。
天风证券第一时间做出了解读。
【天风商社】 重启场景,重启消费,重启经济!继续坚定看多全消费板块β行情 1214
12月14日,中共中央、国务院印发《扩大内需战略规划纲要(2022-2035年)》,纲要从全面促进消费、加快消费提质升级,优化投资结构、拓展投资空间,推动城乡区域协调发展、释放内需潜能,提高供给质量、带动需求更好实现等方面提出明确要求。
顶层设计多次提出扩内需、促消费是稳定经济增长的重要方向。党的十九大和二十大报告中明确增强消费对经济发展的基础性作用,12月6日召开的分析研究2023年经济工作的中共中央政治局会议指出,要着力扩大国内需求,充分发挥消费的基础作用和投资的关键作用;大力提振市场信心,把实施扩大内需战略同深化供给侧结构性改革有机结合起来。消费对于经济重启的拉动意义不言而喻。
居民储蓄增加是消费重启的前提,疫情快速赶顶逐步退潮,消费基本面有望在春节开始表现。据人民银行统计,22年前三季度,居民存款比21年底增加13.28万亿,到年底有望突破16万亿,如何将居民的储蓄转换为消费和投资是23年消费重启的核心命题。当前已经进入结束疫情的快车道,全国有望加速赶顶,随之而来的是入境边检政策调整,港陆通关,返乡过年乃至实质性退出。今年或是三年来民众首次返乡过年,春节消费有望提前带动消费整体表现。明年消费基数逐季下行,表观增速有望持续超预期,务必重视。重启场景,重启消费,重启经济!
继续坚定三个月以来的积极观点,全面看多消费板块性β行情,尤其是2023整年度。建议关注【出行产业链】、【泛餐饮产业链】和【服务业困境反转】,优选【去过杠杆的】或者【供给侧市场出清过的】行业公司。
■出行产业链。
①机场航空【上海机场】【白云机场】【东航南航国航】【海南机场】【美兰空港】
②酒店【君亭酒店】【锦江酒店】【首旅酒店】【华住集团】【亚朵】
③免税【中国中免】【王府井】
④OTA旅行社【携程集团】【同程旅行】【众信/凯撒】
⑤博彩【金沙中国】【银河娱乐】
⑥景区主题公园【宋城演艺】【天目湖】【中青旅】【海昌海洋公园】【香港中旅】
⑦医美【爱美客/雍禾】化妆品【贝泰妮/华熙生物/珀莱雅/巨子/水羊/家化/丸美/科思】
■泛餐饮产业链
①餐饮连锁。【同庆楼】【九毛九】【海底捞】【海伦司】【奈雪的茶】【广州酒家】【百盛中国】【呷哺呷哺】
②餐饮供应链。【安井食品】【千味央厨】【宝立食品】【立高食品】【颐海国际】
③泛休闲食品。【绝味食品】【洽洽食品】【盐津铺子】【甘源食品】【良品铺子】【紫燕食品】【周黑鸭】
④啤酒软饮料。【东鹏饮料】【重庆啤酒】【青岛啤酒】【燕京啤酒】
⑤白酒。【华致酒行】【顺鑫农业】【山西汾酒】【古井贡酒】【舍得酒业】【洋河股份】【酒鬼酒】【贵州茅台】【泸州老窖】【五粮液】
■服务业困境反转
①人力资源【北京城乡】【科锐国际】【外服控股】【BOSS直聘】
②职业教育及教育信息化【中公教育】【国新文化】【佳发教育】
③其他受益公司【倍轻松】【极米科技】【名创优品】【中国黄金】【周大生】
④超市百货【永辉超市】【家家悦】【重庆百货】【天虹股份】
市场的反应如下:
A50冲了一下。中概股普遍上涨

以下是全文。
转自: https://mp.weixin.qq.com/s/3mzT92-yDilUMXN1IX3spA