你能想象茅台跌到50块吗?

你能想象茅台跌到50块吗?

 

我猜一定有人惊呼,这怕是疯了。

 

最近雪球上有位仁兄就脑洞大开的想象了这一画面。

 

评论区热火朝天,有人说楼主酸气熏天,也有人说几年后说不定这就是神预测。

 

要我说,投资还是要有点想象力。

 

8年前茅台跌破120的时候,你能想象后来能涨到2627?

 

有意思的是,这位仁兄还说茅台50块的时候,身边已经没有人喝白酒,拿瓶茅台出来人家觉得你是怪物,人们都改喝江小白,而且兑了雪碧。

你能想象茅台跌到50块吗?

这位仁兄口中的江小白应该是以基酒和调味剂调制而成,应归为“利口酒” 来源:天猫

 

会一语成谶吗?

 

不妨将茅台会不会跌到50这个大问题,拆成三个小问题,咱们聊一聊。

1、未来年轻人还喝不喝白酒?

 

2、中国人喝酒的口味会改变吗?

 

3、未来酒类股的后浪应该是谁?

1

想必读者们或多或少经历过中国式酒局。

 

世界皆知老毛子爱喝酒,但都是自己喝自己的,管不到别人的杯子。

 

中国人不一样,中国人喝酒讲究一个“劝”。

 

“我干了,你随意”,“感情浅,舔一舔”,每当酒场辞令响起,哪怕真不能喝,也得咬牙服下。

 

越是喝到不省人事,光着膀子语无伦次,这酒局就越是成功,越是圆满。

 

一场酒局,要把上下尊卑喝出来。

 

领导敬了你要喝,领导喝了你要敬,领导没酒你要添,领导不想喝你要挡。

 

一个封闭的空间,上位者肆意展示着自己的权柄,弱者用自虐式的饮酒来表示忠诚跟服从,围观者用酒杯合纵连横,串联全场。

 

中国人不是喝酒,而是借着喝酒,玩着权力的游戏。

 

孔子曰:“惟酒无量,不及乱”。

 

诗词作酒,对酒当歌,中国人独有的饮酒风雅。

 

如今怎么就堕落于此?

 

从中国最近20年来白酒产量的变化曲线中,也许可以找到一个解释。

你能想象茅台跌到50块吗?

1997年、2002年、2012年,都是白酒突然下行的拐点年份。

 

这些年份其实并不是巧合。

 

他们对应着最高权力交接后的反腐整风。

 

不过经历下行后,白酒依然晃晃悠悠的从底部站起,重新走高,继续润滑着中华大地。

 

但从周期性波动的幅度看,也算得上消费行业里的大宗商品。

 

在大阪商业大学关于东亚社会关系网络的调查里,中国人喝酒的讲究比重礼仪的日本人更麻烦。

 

中国受访者表示参加的酒局上存在“地位高的人发表开席讲话”、“地位最高的1-2人主导交谈内容”、“需注意座次顺序”现象的比例均高于日本。

 

所以很多人形容中国式酒局,是一场“服从性测试”。

 

无论是红、金、紫、黄土味色彩的产品包装,还是热衷于邀请唐国强、陈宝国、陈道明等帝王领袖演员担当代言,无一不在说明,白酒文化就是权力文化。

你能想象茅台跌到50块吗?

你什么时候见过小鲜肉代言白酒 来源:网络

 

行业调查,例如《2016中国酒业白皮书》表明:

 

白酒消费主力是60后、70后,而80后、90后对白酒的热情呈剧烈梯次下降。

 

年龄结构,恰好也对应了中国社会的权力结构。

 

那么未来,泡在白酒里的权力文化,会代代相传吗?

 

说实话,我们没有现成的答案。

 

不过,现在不是在提国家治理体系和能力的现代化吗?

 

实际上,白酒投资者自己也很焦虑,焦虑世道变了,年轻人不喝白酒了。

 

当然,还有一种意见认为,随着年龄的增长,人会培养出某种奇特的口味爱好。

 

即指随着年岁增长和反复尝试,逐渐理解和喜爱某种味觉,能喜欢白酒那独特的口感。

 

同样的例子还有:

 

毛蛋——臭味,苦味——咖啡,酸味——奶酪,涩味——茶。

 

数据似乎也支持这种结论,根据根据Ipsos发布的2019年《白酒白皮书》中调查显示。

 

随着年龄的不断增长,白酒的渗透程度也越高。

你能想象茅台跌到50块吗?

来源:2019年《白酒白皮书》

 

两方的观点都摆出来了,不过争论谁对谁错其实意义不大。

 

在我们看来,应该还有第三个视角。

 

中国人喝酒的口味会改变吗?

2

关于中国人“喜好”喝白酒的问题,一般有两种解释。

 

一种解释关注需求:

 

高度白酒最开始也是在底层劳动人民,特别是在高强度体力劳动的人群中受欢迎。

 

逻辑上推断,应该是高度白酒的强烈刺激作用,可刺激食欲以迅速补充体力或解乏。

 

在抗日战争和解放战争中,广大的底层劳动人民加入了革命队伍。

 

在赶走了国民党之后,相当一部分的军人转为地方干部进行管理和建设,脱离体力劳动,开始干政务工作。

 

他们嗜好白酒的习惯一直沿习下来,直到进入政府部门。

 

于是,在部分管理者的带动作用下,饮用白酒的习惯传染到了整个政府机关。

 

上行下效嘛。

 

还有一种解释关注供给:

 

高度白酒的酿造技术,与其它酒类比如黄酒米酒葡萄酒比起来,其实非常年轻。

 

中国史书可以佐证,不然古人动不动连饮三日、动辄千斗,要喝死多少诗仙诗圣。

 

古代的酒,度数并不高。

 

解放前,大多数中国人根本就没接触过白酒,喝的主要是黄酒和米酒。

 

实际上,新中国成立时,全国白酒产量只有十万吨,白酒主要以散装方式小范围销售。

 

白酒产量大幅提升,要感谢苏联专家传授的改制伏特加的基础上,中国技术人员摸索出的“液态发酵法”,让白酒1978年达到148万吨的水平。

 

换言之,很多我们以为传统悠久的东西,实际上历史远比我们想象的要短。

 

中国人喝高度白酒这一消费特点,不过是最近几十年的事。

 

那么也可以说明,中国人喝酒的口味并非一成不变。

 

同为东亚黄种人,同样受儒家影响。

 

日本酒类市场的流行趋势剧烈轮换的历史,也许能给我们一些启示。

 

日本有两种传统酒:清酒和烧酎。

 

前者是借鉴中国黄酒的酿造法而发展起来的日本国酒;

 

后者是源于古代中国蒸馏酒的技术。

你能想象茅台跌到50块吗?

中国酿酒技术传入前,由于不会制曲,只能用口水中的霉来发酵,称“口嚼酒” 来源:《你的名字》

 

二战后,日本解决了大米短缺,并改进了制造方法,战后清酒出货量迅速恢复步入鼎盛时期。

 

1973年触顶,此后消费量持续下滑。

 

烧酎是汉语“烧酒”的舶来词,算是白酒的把兄弟,在日本归为烈酒,不过一般只有25度左右。

 

但烧酎没有白酒那么辉煌,曾经历过长期的低迷。

你能想象茅台跌到50块吗?

来源:日本国税厅,野村东方国际证券

 

直到日本人开始在烧酎中加水稀释,后又加入苏打水、冰块、碳酸水。

 

反正就是调低度数,调整口感后,烧酎才重新恢复了增长。

 

就在烧酎重新崛起,啤酒、洋酒、清酒走下坡路的同时。

 

一种趋势性改变正在发生——利口酒的异军突起。

 

其实利口酒和烧酎差不多,不过是改进版的烧酎加了由糖、果汁、香味成分组成的调味剂。

 

这类利口酒起源于1980年代,不过一直不温不火。

 

直到2001年麒麟麦酒酿造会社推出的“冰结”,才点燃了市场。

你能想象茅台跌到50块吗?

来源:天猫

 

本质上,“冰结”产品降低了饮酒的门槛,吸引了一个庞大的消费人群——女性。

 

当然,从“倒酒”转变为“饮酒”,还离不开女人经济独立带来的自主性上升。

你能想象茅台跌到50块吗?

冰结以果味突出、度数低、易饮的特点同时满足了人们在佐餐时想小酌一杯的心理。

 

抓住想喝又不能喝的人群,吸引了大批初饮酒的人群。

 

除了女性,还有大量年轻人群。

 

2001年“麒麟冰结”上市以来,以350ml罐装规格换算,累计销售数量已超100亿罐。

 

一款消费产品的爆红,自然会吸引跟风竞争者。

 

冰结推出后的第二年,朝日啤酒就以品牌收购的方式推出Hairiki;

 

2003年三得利推出了主打低卡路里的Karori Chuhai;

 

2010年札幌啤酒推出了主打桃子口味的Nectar Peach;

 

供给端的大幅扩张,又会进一步培养人们的消费习惯。

 

时至今日,利口酒在日本酒类市场,已经占有举足轻重的地位。

你能想象茅台跌到50块吗?

这就是日本酒类市场的“微醺革命”。

 

有意思的是,中国市场也在复制当年日本曾走过的道路。

 

中国酒类市场往哪里去?

 

让我们重温伟人的话:星星之火,可以燎原。

 

接下来,我们进入第三个问题:

 

未来酒类股的后浪应该是谁?

3

2019年春节后,A股市场的焦点还是科技股,消费股表现不佳,乏人问津。

 

君临结合团队分析师回乡见闻,写了一篇《见闻!剧变的中国消费》。

 

其中我们提到,一位分析师在与其弟弟妹妹唱K时,发现年轻人都在喝“锐澳”的预调鸡尾酒。

 

众所周知,“锐澳”是百润股份旗下产品,实际上,这就是一种利口酒。

 

我们这位分析师,走遍了整个城市的所有大超市,发现在这个品类下,锐澳几乎是唯一的产品。

 

而且驻足浏览选购的,大多是花枝招展的小姐姐。

你能想象茅台跌到50块吗?

某大润发货架 来源:君临团队摄

 

独霸货架,意味着市场的垄断。

 

而这一切,发生在“资本退潮”后。

 

当时我们分析,经过2015年营销狂潮带来的消费热后,市场极度乐观起来。

 

有机构甚至喊出市场空间突破500亿指日可待的口号。

 

包括洋河、泸州老窖、古井贡、五粮液等白酒巨头纷纷入场,黑牛食品、汇源果汁、喜之郎等食品公司也来插一脚,更别说数不清的山寨货。

 

作为新品类,需要一定时期的消费培育期,少则2-3年,多则10余年。

 

庙实在太小,容不下那么多尊巨佛。

 

3年过去,热潮平息,当初蜂拥挤入的巨佛们纷纷割肉离场,竞争对手减少,行业格局改善,剩者锐澳成了唯一的龙头。

 

其实百润主推的“微醺”系列,就是像素级复制日本的同类产品。

 

当时,锐澳刚刚走出底部,股价才13块。

 

我们敏锐的注意到经过供给端的出清,百润股份正在重新站起来,死过一次的百润,开始变得更强大。

 

后续我们还写了《消费股何以长盛?》等一系列文章,指出应战略型配置消费板块。

 

如今,市场用猛烈的上涨,验证了我们的分析逻辑,百润股份也成了十倍股。

 

2020年度,百润预计净利润更是同比增长70%-85%。

 

当然,如今的百润,或者说大消费板块,估值高高在上,要开始谨慎了。

 

不过对百润而言,还不止是估值高那么简单。

 

因为利口酒市场似乎迎来了再一次的“资本涨潮”。

 

去年开始,很多快餐店,就开始推出“+酒”系列产品。

你能想象茅台跌到50块吗?

肯德基的粉椒西柚莫吉托 来源:网络

 

比如肯德基,就推含“粉椒西柚莫吉托”的酒精饮料,即一杯西柚果汁和一小罐莫吉托酒精。

 

汉堡王也有一款饮料叫做“龙舌兰风味爆珠特调”,把龙舌兰做成小料,单独加到饮料里面去。

 

还有很多奶茶连锁店,也开始推出“茶+酒”的组合。

 

除了连锁餐饮,2016年饮恨而去的白酒巨头,如今磨刀霍霍,又杀个回马枪。

 

比如泸州老窖,就脑洞大开,用“榴莲+白酒”搞了款名为“脱单“的产品,目标直指年轻人的社交场景。

你能想象茅台跌到50块吗?

来源:网络

 

除了老面孔,还有新鲜人。

 

去年,预调酒品牌“WAT”就获得了千万级的Pre-A轮融资,线上渠道都铺货了。

 

还有MOTA低氧预调酒,赞助大型音乐节、抖音、小红书广告投放、动作频频。

你能想象茅台跌到50块吗?

当年那些打擦边球的山寨货又回来了 来源:天猫

 

外资品牌也不甘寂寞。

 

三得利旗下预调酒“和乐怡”2020年在华销售额相同比增长超过30%。

 

百威英博旗下预调酒品牌mike’s正式进入中国市场。

 

所谓“+酒”,就是利口酒,百润的预调鸡尾酒也在这个品类。

 

它们似酒非酒,更像混搭了酒精的饮料,这就打开了新的消费场景。

 

不需要在传统的中餐饭局、或者男性、权力的场景里打转,而是用新的文化意涵、风格、故事,去打动新的受众。

 

它在日本获得成功,没有理由不在中国同样掀起一场“微醺革命”。

 

茅台会不会跌到50?我们无法预测。

 

但我们认为,盛极必衰,白酒一统江山的时代或许要结束了。

 

未来的中国酒类市场,应该像更开放、更现代化的发达国家市场一样,是参差百态,丰富多元的。

 

总体而言,我们非常看好“利口酒”这个赛道。

 

百润的营收才不到20亿,刚刚起步,道阻且长,行则将至。

 

如果趁着这波估值下行,调整到位,这里应该还有着下一个十倍股的故事。

转自:https://mp.weixin.qq.com/s/BoivKoSF4uWnXgaFfYONYw

充分调用你的每一分人脉的 11 种方法

 

今天分享的是一本新书《朋友的朋友是朋友》作者戴维·布尔库什。

充分调用你的每一分人脉的 11 种方法

2021年第50本书

 

相比于费劲心力地结交陌生人,从我们现有的关系出发,深度挖掘人脉,是更省力,更高效,更可执行的动作。

 

 

 

直播时间:5月2日周日晚上8点

 

 

主题:未定(欢迎大家在评论里留言)

 

直播地址:视频号 生活黑客   ,另一个视频号: 读书方法 做为备用。

 

 

 

 

找回遗忘的联系

 

 

 

更理想的是开始重新接触你的弱关系和休眠关系的常规练习。下面是帮助你开始的每周例行任务:

 

1. 像研究中的企业高管一样,列出6~10名曾经与你关系密切但之后失去联系的工作伙伴——最起码包括那些两年内你没有深入交流过的同事。

 

2. 随机选取名单上的一个人。掷色子或扔硬币做选择,如果你觉得有必要的话。然后给他/她发邮件或打电话,邀请他/她面对面交流或通过电话交流。

 

3. 不要设定议题。不要说你正在寻找某样特殊的东西。只要表明你想要重新建立联系。因为一次自由流畅的对话,有可能涉及工作事务、问题、机会等等。记下这些,在你可以提供帮助或可能需要帮助的时候继续这些话题。

 

 

 

跟前朋友、同事重新建议联系

充分调用你的每一分人脉的 11 种方法

 

 

同老朋友取得联系会给你关于人际关系更广阔的体验,并使你了解到有多少潜藏的人脉资源正在你触手可及的地方等着被开发。

 

前同事比你想象的更有价值。

 

一种最好的保持联络的方式,或者重新取得联系的方式是通过之前建立的工作群。

 

如果你找不到任何可以用于重新建立联系的校友群、行业协会或是专业团体,那么为什么不试着自己建立一个呢?这无须多阐释。主动联系之前的同事,邀请他们吃一顿饭,或仅仅是去个电话了解他的现状,都足以发起一场重温旧情的运动。

 

 

成为一名掮客?

 

 

 

把两个无关的群体联系起来会产生巨大的价值。你可能并不总是能够马上看出其中的价值,但当你成为填补结构空缺的那个掮客,你就有更大的概率发现真正的机遇。

 

考虑到这个角色的重要性,首先弄清楚你目前是否就是你所属团队的掮客就显得至关重要了,如果不是你,那么谁正在扮演掮客的角色?以下列出的是一种快速鉴别你是否是一名掮客以及谁是你所在团队的掮客的方法:

 

1. 请在一张空白纸上画三条垂直线,将纸张分成三栏。

2. 在左侧那栏,列出对你的职业有着最大影响的10~25个人(向你介绍工作机会、提供指导或建议、在重要的项目上给予帮助等)。

3. 在中间那栏,对应左侧栏中每个人的姓名,写出那个向你介绍他/她的人,也就是帮你认识这个有影响力的人的朋友。

4. 在右侧那栏,写下你还将左侧栏的人介绍给了谁。如果你没有将他们介绍给任何人,就让它空着。

 

认真检视这三个栏目,将注意力放在那些重复出现的名字上。如果一个人的名字反复出现了几次,那么这个人很可能就是你所在团队中一个重要的掮客——帮助填补关键的结构空缺并向你介绍那些正常情况下你不可能结识的人。如果你右边栏基本是空的,说明你目前还不算是一名掮客。但你很幸运,现在有了这样一张图,你就知道在你的生活和工作中有哪些重要的关系是你可以着手介绍给其他人的。

 

 

建立属于你的社群

 

 

 

研究却表明,定期与一个群体的成员互动、分享、彼此学习,获得成长和发展,是成就一番事业的关键。拥有最庞大的人脉资源和事业上最有成就的人,都是懂得在不同团队中工作、历练的重要性,同时主动在不同团队之间发挥桥梁纽带作用的人。

 

你需要加入一个你可以从中获得成长的社群。如果你还没有一个你可以与其中的成员短暂但有规律地互动的团队,那么是时候像本章中列出的这么多榜样一样开始建立你自己的团队了。下面教你该怎么做:

 

1. 列出一张10~15人的名单,名单上的人必须是你的同行或是从事类似工作、有着可以分享的经历的人。这些人可以是你已经认识的人,或者是会对普通的邀请做出回应继而成为你团队的一分子的人(如果是对陌生人或仅仅是熟人发出普通邀请,最好是在已经得到一部分人承诺会加入的前提下,这样可以确保你的团队能组织起来)。

 

2. 确立一套定期会面的机制。可以先从每月一次做起,当然你可以根据你团队里的人的情况对会面的频率做出调整。

 

3. 为你们的讨论确立一个固定的模式。这不必是一个死板的议程,但每次会议都有可以遵循的活动流程比较好,这样不会有人感觉他们的时间被浪费了。如果你不知道该从何入手,试试问这三组问题,并让群组中的每个人轮流作答:

 

·你目前手头在做什么工作?你现在最关心的并且占据你主要精力的项目是什么?这能让组里的每个人对彼此最为关心的事情有一个大致的了解。

·是什么在阻碍你前进?换句话说,这个小组如何能帮到你?可能组员们能够提供建议和获取资源的途径,帮忙介绍,或是提供其他方面的帮助。花时间讨论这个问题能保证每次会议结束时,每个人都有所收获。

·你需要什么样的督促?我们可以做什么来帮你负责到底?每个人都有一些项目或者任务,他们清楚必须完成,但总是会时不时地忘记。加入团队的好处之一就是团队成员会在每次会面的时候提醒你检查你的任务清单是否有遗漏——这使你想不注意到它们都难。

 

 

起初的几次会面,你可能需要担当主持人的角色以确保每个人都有任务。同样,你可能会发现,你问的问题需要不断修改,或者整个会面的安排需要调整。这都是小事。重要的是你在这个过程中找到并建立起一个能助你成长和学会担当的团队。

 

 

建立一个临时团队

 

充分调用你的每一分人脉的 11 种方法

 

对团队合作的研究证实,就为攻克一个项目或哪怕仅是提供建议而言,最佳的团队是那些临时组合——那些在一起合作的时间可能比你认为的产出真正效益所需时间要少的组合。

 

然而,为了构建这样的团队,你需要拥有一个足够宽松和多元的关系网,用以频繁地组建或重建一个团队。判断你是否拥有这样一个关系网的最佳办法是检查你的日程表,明晰你目前是怎样同各种团队的成员互动的。

 

以下是对你团队全面的评估和判断你的人际关系是否过于紧密而无法组建你所需要的团队的一个快捷但有效的方法:

 

1. 重新审查你最近3个月的日程表并列出你参加的所有项目会议。

2. 写下你参加的每场会议的与会人员名单。这个名单可能会很长;如果一个项目团队有开例会的传统,那么每次会议你就再写一遍与会人员名单。

3. 当你写与会人员名单的时候,在所有与你多次合作的人的名字旁边打上星号。

4. 接下来,在所有和你在多个团队待过的人的名字旁边画一个加号。

 

 

名单列好以后,算出名单上曾在多个团队里一起待过的队员所占的比例。虽然这可能算是某种意义上的任意裁切,但如果名单上有超过半数的人曾和你一起在多个团队中待过,这就值得奖一面大红旗了。

 

理想的情况是,即使你只服务于一个主要的项目团队,也应该举行不同的会议来邀请和吸引来自你的关系网或其他人的关系网中的新人与会。如果同样的人定期在同样的地方会面,那就值得奖另一面大红旗。

 

 

做一个超级社交达人

 

 

 

要想成为一个超级社交达人,首先要做到为你的关系网中的人拓展人脉关系。慷慨地为那些身边的人引荐新朋友以增加他们的价值,这反过来也会让他人投桃报李,不吝把你介绍给他们的朋友。如果你能将这种推荐变为你的生活习惯就再好不过了,可以制定一个目标,每周推荐一次或更多。如果你还不习惯主动为他人引荐朋友,下面是你可以在大多数情况下利用任何媒介完成推荐的一个有帮助的格式:

 

1. 简单通过一句话介绍每个人的名字(“约翰,这是珍妮;珍妮,这是约翰”)。

 

2. 简要介绍每个人的背景(“珍妮是……”),大概每个人有一个自然段的信息量即可。

 

3. 简单评述为何你认为这两个人都会从交往中获得益处(“你们都在同一个行业工作……”)。

 

4. 以一个简单的行动呼吁作为结尾,明确下一步应该做什么、由谁来做(“约翰,你能否费心下周主动给珍妮打个电话呢?”)。

 

考虑到双方的忙碌程度,你可以将这个格式修改成一个“双向选择加入”式的介绍。你先私底下主动接触双方(用上述步骤中的第2和第3步);一旦双方都同意了,你事实上要做的介绍甚至会更简短一些(基本上只需要有第1和第4步的信息即可)。

 

此外,一旦居中引荐成为你日常生活的一部分,你会在认识新朋友的时候不自觉地开始想起你已有的联系人。当为他人引荐几乎成为你的第二本能的时候,你就已经是你所处人脉圈子里的超级社交达人了,并且你会在发展一个超级社交达人的朋友圈时变得得心应手。

 

 

关系网络中的偏好依附

 

充分调用你的每一分人脉的 11 种方法

 

你可以在你自己的城市或你自己的家中举办晚宴(或是午餐会),或者你可以在你前往联络老朋友(和认识新朋友)的旅途中所经过的每座城市筹划一场晚宴。为了确保你举办的活动能大获成功,下面是一些你必须考虑到的事情:

 

1. 活动规模:最少要邀请6个人。任何少于这个人数的聚会都会让新成员在老伙计叙旧的过程中感到被冷落了。最多不要超过12个人。任何多于这个人数的活动会造成参与者无法充分地和每位宾客进行交流。

 

2. 活动嘉宾:理想的情况是你同时邀请了老伙计和新朋友。你可以给你想邀请的人打电话或请一位朋友居中介绍。如果你不认识这样一个人,那么就请你的客人再额外带一个人来——不是带他/她的爱人来参加,而是带一个所有活动参与者都能够通过认识他/她而受益的对象。

 

3. 活动地点:你居住的地方就是一个很好的选择,因为它足够舒适和私密,能让你的客人自在地互动。如果你在旅途中或者需要在一家餐馆内举办这场活动,事先一定要和管理人员协商好,确保选在一个安静的区域并有一张足够大的桌子(并且要让每个参与者清楚活动的账单是怎么在每个人当中分配的)。

 

4. 活动频率:如果这是你第一次举办这样的活动,不要考虑太多。然而,一旦你尝试组织过一次并且成功了,你需要考虑你想多久组织一次这样的活动(每周一次?每月两次?每月一次?还是每季度一次?)。仅组织一次是不足以发挥偏好依附效应的。

 

 

如果你正打算前往另一座城市并决定举办一场活动,你已有的社交媒体账户就能帮上大忙。

 

 

制造“大多数的错觉”

 

 

 

但如果你正打算建立某种关键的联系,它可以帮上大忙。一般人往往首先根据本地关系网中的社交达人来迅速掌握流行事物和风云人物的信息。如果你试图和某个特定的人搭上关系,对“大多数的错觉”的研究表明,最好不要仅仅依赖你可能认识的某个人来牵线搭桥。

 

 

与之相反,重点应放在研究目标人物身边的关系网,寻求建立其他的联系。想想看你们之间已经有多少个共同的联络人,并想想他们当中谁更适合作为引荐人。你可以仍然依赖特定的人来推荐,但同时也可以谋求其他的共同联系,坦诚告知你与他们结交的目的,并询问他们是否愿意为你说上一句好话或至少在被问及时说一些好话。

 

最终,如果在目标人物的亲密圈子里同时有多个人在谈论你,并且那个交际最广、最受信赖的人为你引荐,那么你就有很大可能和目标建立联系。

 

 

抵制趋同诱惑

 

 

 

由同质化研究带来的最大启示是,我们更有可能,而且已然选择同那类与我们有着相似之处的人建立友谊。尽管这会使我们感觉更为自在舒适,但这不利于我们在面对诸多变数的时候做出决定。我们需要我们的关系网为我们提供另类视角,而要实现这一点,我们需要知道我们的关系网是否具有另类视角。我们需要对我们的关系网做一次审查。

 

下面是如何快速操作的指南:

 

1. 在特定的一周时间里,检视你最频繁互动的关系。利用你手机上的通话记录或你电子邮件的发件箱列出20~25个频繁互动的人。

 

2. 将这些人的名字添加到列表的第一列,把你的名字置顶。

 

3. 然后在你的名字旁边再多设置几列,每一列都填上你想编辑的标签内容——行业、部门、职务、人种、信仰、政治意识形态等等。

 

4. 开始把第一列当中的每个人都对应到这些类别里。如果你不确定,先做一个猜测,回头再核实(多数时候你的猜测都是错的)。

 

 

很有可能,在所有的类别里,你联系人中的大多数都是和你很相似的人。这应该能给你需要做些什么的启示。

 

如果你的大多数朋友在社交媒体上都很活跃,你可以更快地完成这张表格。他们的账户有很大的概率包含了上述所需的大部分信息。

 

 

共同的活动比单纯的联谊更有效

 

 

充分调用你的每一分人脉的 11 种方法

社交活动并不是非常有效。这对于有社交恐惧症的人而言算得上是个好消息。尽管这些活动中有着各种各样的人,看似有很多潜在的结交对象,但在实践中,大多数人还是会将大把时间用于同熟人或者与自己相像的人互动。而我们真正需要的是把时间和精力投入到能够最大限度为我们提供新的、不同联系的活动中。

 

研究表明,我们应该将更多的时间花在寻找能够激发激情或挑起情绪、需要相互协作和具有一定挑战性的共同活动上。这些共同的活动会吸引来一群不同的人,并帮助参与者建立起更为紧密的联系。下面是几种不同类型的共同活动,以供参考:

 

1. 社区服务项目;

2. 娱乐性的体育联赛、武术或兴趣俱乐部;

3. 非营利性机构或组织;

4. 工作中的特别项目小组;

5. 基督教堂、犹太教堂、清真寺和其他信仰团体。

 

要小心,别加入那些只是为了交朋友的群,因为很有可能类我效应会再度悄悄地支配起你的行为和选择。相反,加入那些能唤起你工作之外的激情的群组,或者是行业特征非常少、涉及面广泛的群组。因为这些群组的线上属性,使它们相比于需要亲自参加的活动能吸引来更多不同的人——甚至你不需要离开自己的家。

 

 

留心缔结多重性的关系

 

 

 

如果你一直认为你需要区分你与你的朋友以及你与你的同事之间的关系,那么是时候重新审视你的这种想法了。首先要拓宽你对朋友和同事概念范畴的认知,之后再着手拓展你的人际关系。下面是方法:

 

1.列出5个你对他们的工作知之甚少的朋友。

 

2. 在未来一个月时间里,安排和他们每个人见面,喝咖啡,或是一起吃饭,抑或一起出去逛逛。确保留有时间来询问有关他们工作的事情。要摆正态度,你不是为了寻找可以帮到你自己的工作或是可以创造机会的任何特定信息。你只是想要知道他们的情况。(毕竟,这些是你的朋友,你不是打算利用他们。)

 

3. 列出5个你不怎么了解的同事。

 

4. 在之后的一个月,约他们每个人见面交谈。和对待你的朋友一样,你只是想了解他们。如果你感觉到他们并不想向你透露太多关于他们自己的信息,不要着急。但要表现出对他们的事情的兴趣。你永远不会知道,你可能因此收获一个最好的朋友。

 

转自:https://mp.weixin.qq.com/s/rRkucowT6cWz4tL7-qcw-w

2021中国大学排名发布(附榜单)

来源:软科(ID:zuihaodaxue)

 

4月26日,全球领先的高等教育评价机构软科正式发布“2021软科中国大学排名”。

 

清华大学、北京大学、浙江大学占据主榜(即综合性大学排名)前三位。北京协和医学院位列医药类大学排名第一,上海财经大学位居财经类大学排名榜首,北京外国语大学名列语言类大学排名第一,中国政法大学位列政法类大学排名榜首,中央民族大学占据民族类大学排名首位,上海体育学院领跑体育类大学排名,香港中文大学(深圳)在中国合作办学大学排名中夺冠。

 

“软科中国大学排名”前身是“软科中国最好大学排名”,自2015年首次发布以来,以专业、客观、透明的优势赢得了高等教育领域内外的广泛关注和认可,已经成为具有重要社会影响力和权威参考价值的中国大学排名领先品牌。软科中国大学排名以服务中国高等教育发展和进步为导向,坚持贯彻国家高等教育改革和教育评价的方针、政策,用中国标准评价中国高校。

 

2021中国大学排名发布(附榜单)

 

2021软科中国大学排名(主榜)的上榜高校共有582所,清华大学、北京大学、浙江大学占据前三,上海交通大学、南京大学位列全国前五。其他位列全国前十名的大学依次为复旦大学(第六)、中国科学技术大学(第七)、华中科技大学(第八)、武汉大学(第九)、西安交通大学(第十)。西安交通大学相较2020年排名上升1名,首次入围全国十强。西安交通大学坚持“扎根西部、服务国家、世界一流”的办学定位,建设世界一流研究型大学的愿景已现曙光。

 

2021软科中国大学排名(主榜)

 

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

 

单科性大学排名冠军高校保持领先地位

 

2021软科中国大学排名遵循分类排名的原则,对单科性大学(医药类、财经类、语言类、政法类、民族类、体育类)使用差异化指标体系分别进行排名。在每一类型的排名中,参与排名计算的不仅有本类型的大学,也包括综合性大学和所有其它类型的单科性大学。软科中国大学排名总监王璐介绍:“通过使用差异化指标体系对所有大学进行排名的方法,不仅可以展示一所大学在同类型高校中的排名,还可以给出这所大学在全国高校中的参考排名。”

 

2021软科中国医药类大学排名的上榜高校有83所,北京协和医学院、首都医科大学、南京医科大学位列前三。

 

2021软科中国财经类大学排名的上榜高校有54所,上海财经大学、中央财经大学、对外经济贸易大学位列前三。

 

2021软科中国语言类大学排名的上榜高校有16所,北京外国语大学、中国传媒大学、上海外国语大学位列前三。

 

2021软科中国政法类大学排名的上榜高校有33所,中国政法大学、华东政法大学、西南政法大学位列前三。

 

2021软科中国民族类大学排名的上榜高校有12所,中央民族大学、中南民族大学、西南民族大学位列前三。

 

2021软科中国体育类大学排名的上榜高校有14所,上海体育学院、北京体育大学、首都体育学院位列前三。

 

2021软科中国医药类大学排名   

 

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

 

2021软科中国财经类大学排名

 

2021中国大学排名发布(附榜单)

 

2021软科中国语言类大学排名

 

2021中国大学排名发布(附榜单)

 

2021软科中国政法类大学排名

 

2021中国大学排名发布(附榜单)

 

2021软科中国民族类大学排名

 

2021中国大学排名发布(附榜单)

 

2021软科中国体育类大学排名

 

2021中国大学排名发布(附榜单)

 

2021软科中国艺术类高校名单(有博士学位授权点)

 

由于艺术学科本身的特殊性,艺术类院校的客观评价指标相对稀缺。2021软科中国大学排名没有计算艺术类高校的排名,仅提供5项关键办学状态数据供读者参考。

 

2021中国大学排名发布(附榜单)

 

香港中文大学(深圳)位列全国合作办学大学第一

 

社会组织独立举办或参与举办的高校是中国高等教育体系的重要组成部分,2021软科中国大学排名采用人才培养相关指标,对合作办学大学(含中外合作办学机构和中国内地与港澳台地区合作办学机构)、独立学院、民办高校进行了分别排名,其中对合作办学大学还计算了全国参考排名。

 

2021软科中国合作办学大学排名的对象有6所,香港中文大学(深圳)、上海纽约大学、宁波诺丁汉大学名列三甲。

 

2021软科中国合作办学类大学排名

 

2021中国大学排名发布(附榜单)

 

2021软科中国独立学院排名

 

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

 

2021软科中国民办高校排名

 

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

 

下表为综合性大学排名、6个单科性大学和合作办学大学的全国参考排名总榜单。

 

2021软科中国大学排名(总榜)

 

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

2021中国大学排名发布(附榜单)

转自:https://mp.weixin.qq.com/s/UVNEN2uHbWXaP6T4DXSwXw

最全阿里系版图(看完惊呆了),果断收藏

来源:新财富(ID:newfortune)  陶娟
阿里巴巴2014-2020年重大投资事项一览。
最全阿里系版图(看完惊呆了),果断收藏
新财富统计显示,阿里巴巴从2014年至今年报披露的重大股权投资,金额合计3958亿元。
最全阿里投资概念股,总市值高达4万亿

最全阿里系版图(看完惊呆了),果断收藏

别忘点个“在看”。
  转自:https://mp.weixin.qq.com/s/IaZo2WBvYOFQmDbN1GLC3w

写好 Python 代码的几条重要技巧

作者:韦世东

来源:NightTeam

程序设计的好与坏,早在我们青葱岁月时就接触过了,只是那是并不知道这竟如此重要。能够立即改善程序设计、写出“好”代码的知识有以下几点:

面向对象五个基本原则;常见的三种架构;绘图;起一个好名字;优化嵌套的 if else 代码;

当然,其他技术知识的丰富程度也决定了程序设计的好坏。例如通过引入消息队列解决双端性能差异问题、通过增加缓存层提高查询效率等。下面我们一起来看看,上面列出的知识点包含哪些内容,这些内容对代码和程序设计的改善有何帮助。

面向对象五个基本原则

本书作者是 2010 级学生,面向对象是作者青葱时期发展火热的编程范式。它的五个基本原则是:

单一职责原则;开放封闭原则;依赖倒置原则;接口隔离原则;合成复用原则;

下面我们将通过对比和场景假设的方式了解五个基本原则对代码质量的影响。

立竿见影的单一职责原则

没错,立竿见影效果卓越。对于我们这些自学编程无师自通的人来说,能把功能实现就可以了,根本没有时间考虑代码优化和维护成本问题。时光流逝,竟在接触编程很长一段时间后才发现它竟如此重要。

俗话说只要代码写的够烂,提升就足够明显。以一个从文件内容中匹配关键数据并根据匹配结果发出网络请求的案例,看看大部分程序员的写法:

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
import reimport requests

FILE = "./information.fet"

def extract(file): fil = open(file, "r") content = fil.read() fil.close() find_object = re.search(r"url=d+", content) find = find_object.group(1) text = requests.get(find) return text

if __name__ == "__main__": text = extract(FILE) print(text)

 

需求已经实现,这点毋庸置疑,但是问题来了:

如果读取文件的时候发生异常了怎么办?如果数据源发生变化该如何处理?如果网络请求返回的数据不符合最终要求怎么办?

如果你心里的第一个反应是改代码,那你就要注意了。完成一件事中间的某个环节发生变化,改代码是在所难免的,但是如果按照上面这种写法,不仅代码越改越乱,连逻辑也会越来越乱。单一职责原则表达的是让一个函数尽量只做一件事,不要将多件事混杂在一个函数中。

上面的代码如果重新设计,我认为至少应该是这样的:

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
def get_source():    """获取数据源"""    return

def extract_(val): """匹配关键数据""" return

def fetch(val): """发出网络请求""" return

def trim(val): """修剪数据""" return

def extract(file): """提取目标数据""" source = get_source() content = extract_(source) text = trim(fetch(content)) return text

if __name__ == "__main__": text = extract(FILE) print(text)

 

把原来放在一个函数中实现的多个步骤拆分成为多个更小的函数,每个函数只做一件事。当数据源发生变化时,只需要改动 get_source 相关的代码即可;如果网络请求返回的数据不符合最终要求,我们可以在 trim 函数中对它进行修剪。这样一来,代码应对变化的能力提高了许多,整个流程也变得更清晰易懂。改动前后的变化如下图所示:

 

写好 Python 代码的几条重要技巧

单一职责原则的核心是解耦和增强内聚力,如果一个函数承担的职责过多,等于把这些职责耦合在一起,这种耦合会导致脆弱的设计。当发生变化时,原本的设计会遭受到意想不到的破坏。单一职责原则实际上是把一件事拆分成多个步骤,代码修改造成的影响范围很小。

让代码稳定性飞升的开放封闭原则和依赖倒置原则

开放封闭原则中的开放指的是对扩展开放,封闭指的是对修改封闭。需求总是变化的,业务方这个月让你把数据存储到 MySQL 数据库中,下个月就有可能让你导出到 Excel 表格里,这时候你就得改代码了。这个场景和上面的单一职责原则很相似,同样面临代码改动,单一职责原则示例主要表达的是通过解耦降低改动的影响,这里主要表达的是通过对扩展开放、对修改封闭提高程序应对变化的能力和提高程序稳定性。

稳定这个词如何理解呢?

较少的改动或者不改动即视为稳定,稳定意味着调用这个对象的其它代码拿到的结果是可以确定的,整体是稳定的。

按照一般程序员的写法,数据存储的代码大概是这样的:

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
class MySQLSave:
def __init__(self): pass
def insert(self): pass
def update(self): pass

class Business: def __init__(self): pass
def save(self): saver = MySQLSave() saver.insert()

 

功能是能够实现的,这点毋庸置疑。来看看它如何应对变化,如果要更换存储,那么就意味着需要改代码。按照上面的代码示例,有两个选择:

重新写一个存储到 ExcelSave 的类;对 MySQLSave 类进行改动;

上面的两种选择,无论怎么选都会改动 2 个类。因为不仅存储的类需要改动,调用处的代码也需要更改。这样一来,它们整体都是不稳定的。如果换一种实现方式,根据依赖倒置的设计指导可以轻松应对这个问题。边看代码边理解:

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
import abc

class Save(metaclass=abc.ABCMeta): @abc.abstractmethod def insert(self): pass
@abc.abstractmethod def update(self): pass

class MySQLSave(Save):
def __init__(self): self.classify = "mysql" pass
def insert(self): pass
def update(self): pass

class Excel(Save): def __init__(self): self.classify = "excel"
def insert(self): pass
def update(self): pass

class Business: def __init__(self, saver): self.saver = saver
def insert(self): self.saver.insert()
def update(self): self.saver.update()

if __name__ == "__main__": mysql_saver = MySQLSave() excel_saver = Excel() business = Business(mysql_saver)

 

这里通过内置的 abc 实现了一个抽象基类,这个基类的目的是强制子类实现要求的方法,以达到子类功能统一。子类功能统一后,无论调用它的哪个子类,都是稳定的,不会出现调用方还需要修改方法名或者修改传入参数的情况。

依赖倒置中的倒置,指的是依赖关系的倒置。之前的代码是调用方 Business 依赖对象 MySQLSave,一旦对象 MySQLSave 需要被替换, Business 就需要改动。依赖倒置中的依赖指的是对象的依赖关系,之前依赖的是实体,如果改为后面这种依赖抽象的方式,情况就会扭转过来:

 

写好 Python 代码的几条重要技巧

实体 Business 依赖抽象有一个好处:抽象稳定。相对于多变的实体来说,抽象更稳定。代码改动前后的依赖关系发生了重大变化,之前调用方 Business 直接依赖于实体 MySQLSave,通过依赖倒置改造后 Busines 和 ExcelSave、 MySQLSave 全都依赖抽象。

 

这样做的好处是如果需要更换存储,只需要创建一个新的存储实体,然后调用 Business 时传递进去即可,这样可以不用改动 Business 的代码,符合面向修改封闭、面向扩展开放的开放封闭原则;

依赖倒置的具体实现方式使用了一种叫做依赖注入的手段,实际上单纯使用依赖注入、不使用依赖倒置也可以满足开闭原则要求,感兴趣的读者不妨试一试。

挑肥拣瘦的接口隔离原则

接口隔离原则中的接口指的是 Interface,而不是 Web 应用里面的 Restful 接口,但是在实际应用中可以将其抽象理解为相同的对象。接口隔离原则在设计层面看,跟单一职责原则的目的是一致的。接口隔离原则的指导思想是:

调用方不应该依赖它不需要的接口;依赖关系应当建立在最小接口上;

这实际上是告诉我们要给接口减肥,过多功能的接口可以选用拆分的方式优化。举个例子,现在为图书馆设计一个图书的抽象类:

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
import abc

class Book(metaclass=abc.ABCMeta): @abc.abstractmethod def buy(self): pass
@abc.abstractmethod def borrow(self): pass
@abc.abstractmethod def shelf_off(self): pass
@abc.abstractmethod def shelf_on(self): pass

 

图可以被购买、可以被借阅、可以下架、可以上架,这看起来并没有什么问题。但这样一来这个抽象只能提供给管理人员使用,用户操作时需要再设定一个新的抽象类,因为你不可能让用户可以操纵图书上下架。接口隔离原则推荐的做法是把图书的上下架和图书购买、借阅分成 2 个抽象类,管理端的图书类继承 2 个抽象类,用户端的图书类继承 1 个抽象类。这么看起来是有点绕,不要慌,我们看图理解:

 

写好 Python 代码的几条重要技巧

这样是不是一下就看懂了。这个指导思想很重要,不仅能够指导我们设计抽象接口,也能够指导我们设计 Restful 接口,还能够帮助我们发现现有接口存在的问题,从而设计出更合理的程序。

 

轻装上阵的合成复用原则

合成复用原则的指导思想是:尽量使用对象组合,而不是继承来达到复用的目的。合成复用的作用是降低对象之间的依赖,因为继承是强依赖关系,无论子类使用到父类的哪几个属性,子类都需要完全拥有父类。合成采用另一种方式实现对象之间的关联,降低依赖关系

为什么推荐优先使用合成复用,而后考虑继承呢?

因为继承的强依赖关系,一旦被依赖的对象(父类)发生改变,那么依赖者(子类)也需要改变,合成复用则可以避免这样的情况出现。要注意的是,推荐优先使用复用,但并不是拒绝使用继承,该用的地方还得用。我们以一段代码为例,说明合成复用和继承的差异:

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
import abc

class Car:
def move(self): pass
def engine(self): pass

class KateCar(Car):
def move(self): pass
def engine(self): pass

class FluentCar(Car):
def move(self): pass
def engine(self): pass

 

这里的 Car 作为父类,拥有 move 和 engine 2 个重要属性,这时候如果需要给汽车涂装颜色,那么就要新增一个 color 属性,3 个类都要增加。如果使用合成复用的方式,可以这么写:

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
class Color:    pass

class KateCar:
color = Color()
def move(self): pass
def engine(self): pass

class FluentCar:
color = Color()
def move(self): pass
def engine(self): pass

 

类对象合成复用的具体操作是在类中实例化一个类对象,然后在需要的时候调用它。代码可能没有那么直观,我们看图:

 

写好 Python 代码的几条重要技巧

这个例子主要用于说明继承和合成复用的具体实现方式和前后变化,对于 Car 的继承无需深究,因为如果你执着地讨论为什么右图中的 2 个 Car 不用继承,就会陷入牛角尖。

 

这里的合成复用选用的实现方式是在 2 个 Car 里面实例化另一个类 Color,其实也可以用依赖注入的手段在外部实例化 Color,然后把实例对象传递给 2 个 Car。

常见的三种架构

了解多种不同的架构可以使我们的知识面更宽广,面对一类问题的时候可以提出其它解决办法。同时,了解多种架构可以让我们在设计阶段做好规划,避免后续频繁的重构。常见的三种架构分别是:

单体架构;分布式架构;微服务架构;

单体架构

单体架构是我们平时接触较多的架构,也是相对容易理解的架构。单体架构把所有功能都聚合在一个应用里,我们可以简单地将这种架构视作:

 

写好 Python 代码的几条重要技巧

这种架构简单、容易部署和测试,大部分应用的初期都采用单体架构。单体架构也有几个明显缺点:

 

复杂性高,所有功能糅合在一个应用里,模块多、容易出现边界模糊,而且随着时间的推移和业务的发展,项目越来越大、代码越来越多,整体服务效率逐渐下降;发布/部署频率低,牵一发而动全身,新功能或问题修复的发布上线需要多方协调,发布时间一拖再拖。项目大则构建时间长、构建失败的几率也会有所增加;性能瓶颈明显,一头牛再厉害也抵不过多头牛合力的效果,随着数据量、请求并发的增加,读性能的不足最先暴露出来,接着你就会发现其它方面也跟不上了;影响技术创新:单体架构通常选用一类语言或一类框架统一开发,想要引入新技术或者接入现代化的服务是很困难的;可靠性低,一旦服务出现问题,影响是巨大的。

分布式架构

分布式架构相对于单体架构而言,通过拆分解决了单体架构面临的大部分问题,例如性能瓶颈。假如单体架构是一头牛,那么分布式架构就是多头牛:

 

写好 Python 代码的几条重要技巧

当单体架构出现性能瓶颈时,团队可以考虑将单体架构转换为分布式架构,以增强服务能力。当然,分布式并不是万能的,它解决了单体架构性能瓶颈、可靠性低的问题,但复杂性问题、技术创新问题和发布频率低依然存在,这时候可以考虑微服务。

 

微服务架构

微服务架构的关键字是拆,将原本糅合在一个应用中的多个功能拆成多个小应用,这些小应用串联起来组成一个与之前单体架构功能相同的完整应用。具体示意如下:

 

写好 Python 代码的几条重要技巧

 

每个微服务可以独立运行,它们之间通过网络协议进行交互。每个微服务可以部署多个实例,这样一来就具备了跟分布式架构相同的性能。单个服务的发布/部署对其它服务的影响较小,在代码上没有关联,因此可以频繁的发布新版本。复杂性的问题迎刃而解,拆分之后架构逻辑清晰、功能模块职责单一,功能的增加和代码的增加也不会影响到整体效率。服务独立之后,项目就变得语言无关,评价服务可以用 Java 语言来实现也可以用 Golang 语言实现,不再受到语言或者框架的制约,技术创新问题得以缓解。

 

这是不是很像单一职责原则和接口隔离原则?

分布式和微服务并不是银弹

从上面的对比来看,似乎分布式架构比单体架构好,微服务架构比分布式架构好,这么说来微服务架构>分布式架构>单体架构?

这么理解是不对的,架构需要根据场景和需求选择,微服务架构和分布式架构看上去很美,但也衍生出了许多新问题。以微服务架构为例:

运维成本高,在单体架构时,运维只需要保证 1 个应用正常运行即可,关注的可能只是硬件资源消耗问题。但如果换成微服务架构,应用的数量成百上千,当应用出现问题或者多应用之间协调异常时,运维人员的头就会变大;分布式系统固有的复杂性,网络分区、分布式事务、流量均衡对开发者和运维进行了敲打;接口调整成本高,一个接口的调用方可能有很多个,如果设计时没有遵循开放封闭原则和接口隔离原则,那么调整的工作量会是非常大的;接口性能受限,原本通过函数调用的方式交互,在内存中很快就完成了,换成接口后通过网络进行交互,性能明显下降;重复劳动,虽然有公共模块,但如果语言无关且又要考虑性能(不用接口交互)就需要自己实现一份相同功能的代码;

到底用哪种架构,需要根据具体的场景来选择。如果你的系统复杂度并没有那么高、性能追求也没有那么高,例如一个日数据量只有几万的爬虫应用,单体架构就足以解决问题,不需要强行做成分布式或者微服务,因为这样只会增加自己的工作量。

画好图

在需要表达关系和逻辑梳理的场景里,图永远比代码好。业内流行这么一句话“程序开发,设计先行”,说的是在开发前,需要对程序进行构思和设计。试想,如果连对象关系和逻辑都说不清楚,写出的代码会是好代码吗?

 

写好 Python 代码的几条重要技巧

 

在构思项目时可以使用用例图挖掘需求和功能模块;在架构设计时可以使用协作图梳理模块关系;在设计接口或者类对象时可以使用类图做好交互计划;在功能设计时可以使用状态图帮助我们挖掘功能属性……

 

写好 Python 代码的几条重要技巧

了解绘图的重要性之后,具体的绘图方法和技巧可翻阅本书(《Python 编程参考》)的工程师绘图指南章节展开学习。

 

起一个好名字

你还记得自己曾经起过的那些名字吗:

reversalListget_translationget_datado_trimCarAbstract

起一个好的、合适的名字能够让代码风格更统一,看上去清晰了然。起一个好名字不单单是单词语法的问题,还会涉及风格选择和用途。具体的命名方法和技巧可翻阅本书(《Python 编程参考》)的命名选择与风格指南章节展开学习。

优化嵌套的 if else 代码

写代码的时候用一些控制语句是很正常的事,但是如果 if else 嵌套太多,也是非常头疼的,代码看上去就像下面这样。

 

写好 Python 代码的几条重要技巧
这种结构的产生是因为使用了 if 语句来进行先决条件的检查,如果负责条件则进入下一行代码,如果不符合则停止。既然这样,那我们在先决条件的检查上进行取反即可,代码改动过后看起来像这样:
  •  
  •  
  •  
  •  
if "http" not in url:        returnif "www" not in url:        return

 

这是我平时常用的优化办法,后来在张晔老师的付费专栏中看到这种手段的名称——卫语句。

当然,这种简单的逻辑处理和 if else 控制流用卫语句进行处理是很有效的,但如果逻辑再复杂一些,用卫语句的效果就不见的那么好了。假设汽车 4S 店有折扣权限限制,普通销售有权对 30 万以内金额的汽车授予一定折扣,超过 30 万但在 80 万以内需要精英销售进行授权,更高价格的车折扣需要店长授权。这个功能可以归纳为根据金额的大小来确定授权者,对应代码如下:

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
def buying_car(price):    if price < 300000:        print("普通销售")    elif price < 800000:        print("精英销售")    elif price < 1500000:        print("店长")

 

代码思路清晰,但存在的问题也明显。如果以后扩展价格和定级,会增加更多的 if else 语句,代码将变得臃肿。控制语句的顺序是固定在代码中的,如果想要调整顺序,只能修改控制语句。

那么问题来了,有比 if else 更合适的办法吗?

这时候可以考虑一种叫做责任链的设计模式,责任链设计模式的定义为:为了避免请求发送者与多个请求处理者耦合在一起,于是将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。

看起来有点绕,我们通过代码图加深理解:

 

写好 Python 代码的几条重要技巧

处理类执行前根据先决条件判断自身的 handler 是否能够处理,如果不能则交给 next_handler,也就是责任链的下一个节点。上面的用责任链实现为:

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
class Manager:
def __init__(self,): self.obj = None
def next_handler(self, obj): self.obj = obj
def handler(self, price): pass

class General(Manager):
def handler(self, price): if price < 300000: print("{} 普通销售".format(price)) else: self.obj.handler(price)

class Elite(Manager):
def handler(self, price): if 300000 <= price < 800000: print("{} 精英销售".format(price)) else: self.obj.handler(price)

class BOSS(Manager):
def handler(self, price): if price >= 800000: print("{} 店长".format(price))

 

创建好抽象类和具体的处理类之后,它们还没有关联关系。我们需要将它们挂载到一起,成为一个链条:

 

  •  
  •  
  •  
  •  
  •  
general = General()elite = Elite()boss = BOSS()general.next_handler(elite)elite.next_handler(boss)

 

这里建立的责任链顺序为 General -> Elite -> BOSS,调用方只需要传递价格给 General,如果它没有折扣的授予权它会交给 Elite 处理,如果 Elite 没有折扣授予权则会交给 BOSS 处理。对应代码如下:

 

  •  
  •  
  •  
    prices = [550000, 220000, 1500000, 200000, 330000]    for price in prices:        general.handler(price)

 

这跟我们去 4S 店购车是一样的,作为客户,我们确定好要买的车即可,至于 4S 店如何申请折扣,谁来授权与我无关,我能拿到相应的折扣即可。

至此,if else 优化知识学习完毕。


做到以上几点,相信你的代码质量和程序设计水平会有一个不错的提升,加油!

文章中提到的《Python编程参考》可在韦世东的技术专栏 https://www.weishidong.com 在线阅读。

转自:https://mp.weixin.qq.com/s/A_QPBAz6BdYeSpM3fehWeQ