Cola

面对复杂业务,if-else coder 如何升级?

爱⌒轻易说出口 提交于 2020-10-22 10:48:09
作者 | 张建飞 阿里巴巴高级技术专家 导读 :针对业务在不同场景下的差异,我们常常会习惯性地使用 if-else 来实现不同的业务逻辑,久而久之代码越来越难以维护。那么如何消除这些 if-else?面对复杂业务应如何思考和分析?本文分享阿里高级技术专家张建飞(Frank)关于复杂业务治理的方法论,介绍一种多维度分析问题的方法:矩阵分析法。 You should not be a if-else coder, should be a complexity conquer. ——Frank 这篇文章,是对之前我在 《阿里高级技术专家方法论:如何写复杂业务代码?》 说的“自上而下的结构化分解 + 自下而上的抽象建模”方法论的升级。因为在之前的方法论中,我们缺少一个多维度看问题的视角,这种维度思维的缺失,可能会导致 miss 掉一些重要的业务信息,从而使我们制定软件设计策略的时候,陷入困难。 有了维度思维,我们便可以更加方面的去看清业务的全貌,更加全面的掌握业务信息,从而帮助我们更加体系化的去治理复杂性。 从 if-else 说起 我经常说,我们不要做一个 if-else coder。这里的 if-else,不是说我们在 coding 的时候不能使用 if-else,而是说我们不应该简陋地用 if-else 去实现业务的分支流程,因为这样随意的代码堆砌很容易堆出一座座“屎山”。

Bert: 双向预训练+微调

五迷三道 提交于 2020-09-30 15:02:23
最近要开始使用Transformer去做一些事情了,特地把与此相关的知识点记录下来,构建相关的、完整的知识结构体系。 以下是要写的文章,文章大部分都发布在公众号【雨石记】上,欢迎关注公众号获取最新文章。 Transformer:Attention集大成者 GPT-1 & 2: 预训练+微调带来的奇迹 Bert: 双向预训练+微调 Bert与模型压缩 Bert与模型蒸馏:PKD和DistillBert ALBert: 轻量级Bert TinyBert: 模型蒸馏的全方位应用 MobileBert: Pixel4上只需40ms 更多待续 Transformer + AutoML: 进化的Transformer Bert变种 Roberta: Bert调优 Electra: 判别还是生成,这是一个选择 Bart: Seq2Seq预训练模型 Transformer优化之自适应宽度注意力 Transformer优化之稀疏注意力 Reformer: 局部敏感哈希和可逆残差带来的高效 Longformer: 局部attentoin和全局attention的混搭 - Linformer: 线性复杂度的Attention XLM: 跨语言的Bert T5 (待续) 更多待续 GPT-3 更多待续 背景 Bert,全称是Bidirectional Encoder Representation from

8个最高效的Python爬虫框架,你用过几个?

我是研究僧i 提交于 2020-09-30 02:23:32
一些较为高效的Python爬虫框架。分享给大家。 零基础一小时学会Python爬虫 1.Scrapy Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。。用这个框架可以轻松爬下来如亚马逊商品信息之类的数据。 项目地址: https://scrapy.org/ 2.PySpider pyspider 是一个用python实现的功能强大的网络爬虫系统,能在浏览器界面上进行脚本的编写,功能的调度和爬取结果的实时查看,后端使用常用的数据库进行爬取结果的存储,还能定时设置任务与任务优先级等。 项目地址: https://github.com/binux/pyspider 3.Crawley Crawley可以高速爬取对应网站的内容,支持关系和非关系数据库,数据可以导出为JSON、XML等。 零基础一小时学会Python爬虫 项目地址: http://project.crawley-cloud.com/ 4.Portia Portia是一个开源可视化爬虫工具,可让您在不需要任何编程知识的情况下爬取网站!简单地注释您感兴趣的页面,Portia将创建一个蜘蛛来从类似的页面提取数据。 项目地址: https://github.com/scrapinghub/portia 5.Newspaper

Python爬虫是什么?常用框架有哪些?

隐身守侯 提交于 2020-08-20 07:57:52
  大家都知道python是一门多岗位编程语言,学习python之后可以从事的岗位有很多,python爬虫便在其中,不过很多人对python不是很了解,所以也不知道python爬虫是什么,接下来带着你的疑问小编为大家介绍一下。   Python是一门非常适合开发网络爬虫的编程语言,相比于其他静态编程语言,Python抓取网页文档的接口更简洁;相比于其他动态脚本语言,Python的urllib2包提供了较为完整的访问网页文档的API。此外,python中有优秀的第三方包可以高效实现网页抓取,并可用极短的代码完成网页的标签过滤功能。   Python爬虫架构组成:   1. URL管理器:管理待爬取的url集合和已爬取的url集合,传送待爬取的url给网页下载器;   2. 网页下载器:爬取url对应的网页,存储成字符串,传送给网页解析器;   3. 网页解析器:解析出有价值的数据,存储下来,同时补充url到URL管理器。   Python爬虫工作原理:   Python爬虫通过URL管理器,判断是否有待爬URL,如果有待爬URL,通过调度器进行传递给下载器,下载URL内容,并通过调度器传送给解析器,解析URL内容,并将价值数据和新URL列表通过调度器传递给应用程序,并输出价值信息的过程。   Python爬虫常用框架有:   grab:网络爬虫框架;   scrapy:网络爬虫框架

Oracle中的 UPDATE FROM 解决方法

丶灬走出姿态 提交于 2020-08-17 10:35:29
散打狼自己的应用 在表的更新操作中,在很多情况下需要在表达式中引用要更新的表以外的数据。象sql server提供了update的from 子句,可以将要更新的表与其它的数据源连接起来。虽然只能对一个表进行更新,但是通过将要更新的表与其它的数据源连接起来,就可以在update的表达式中引用要更新的表以外的其它数据。 例如: UPDATE Table2 SET Table2.ColB = Table2.ColB + Table1.ColB FROM Table2 INNER JOIN Table1 ON (Table2.ColA = Table1.ColA); 实际更新的操作是在要更新的表上进行的,而不是在from子句所形成的新的结果集上进行的。 Oracle没有update from语法,可以通过两种写法实现同样的功能: 1:子查询UPDATE A SET A.NAME=(SELECT B.NAME FROM B WHERE B.ID=A.ID),本查询要根据具体情况看看是否变通成如下 (1)单列 UPDATE A SET A.NAME=(SELECT B.NAME FROM B WHERE B.ID=A.ID) WHERE A.ID IN (SELECT ID FROM B); (2)多列 UPDATE order_rollup SET(qty,price)=(SELECT

nginx web服务器概念了解 配置

家住魔仙堡 提交于 2020-08-16 23:12:50
服务器 服务器 服务器 是一种提供高效计算的机器,与普通的PC主机相比,具有可观的稳定性,高并发性,可扩展性。 互联网任何一个应用都是以服务器为基础设施的,没有服务器我们就无法访问网络上的任何内容,只能使用单机的应用。例如网站,我们访问的任何一个网站都是保存在某个服务器上的,域名被DNS(域名解析服务器)解析到IP地址后,浏览器就能通过IP地址访问对应的服务器资源了。 就好比:服务器是人的家,人名相当于域名(不可重名),身份证号相当于IP地址。通过人名搜索到身份证号,通过身份证号获取到家的地址。 Web服务器 Web服务器 不再是一种硬件设施,而是一种部署在服务器上的软件应用,它服务于各种网络请求,将网络请求进行处理,分发。 所以Web服务器的处理能力很大程度决定了该网站的并发能力。著名的Web服务器有:Apache Nginx Web应用服务器 Web应用服务器 是专门处理逻辑代码的服务器,同时还具有了处理网络请求的能力,一般为了提高并发能力,会在Web应用服务器上套一层Web服务器。 例如:Tomcat uwsgi gunicorn,后两个是Python的Web应用服务器,专门处理Python的逻辑代码。 联系 其中Web服务器和Web应用服务器都部署在服务器上。 Nginx服务器 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器

图像处理:“可口可乐”识别的算法改进

社会主义新天地 提交于 2020-08-16 08:20:36
问题: One of the most interesting projects I've worked on in the past couple of years was a project about image processing . 我过去几年中最有趣的项目之一是关于 图像处理 的项目。 The goal was to develop a system to be able to recognize Coca-Cola 'cans' (note that I'm stressing the word 'cans', you'll see why in a minute). 目的是开发一个能够识别可口可乐 “罐头”的系统 (请注意,我强调的是“罐头”一词,稍后您会看到原因)。 You can see a sample below, with the can recognized in the green rectangle with scale and rotation. 您可以在下面看到一个示例,该示例在带有刻度和旋转的 绿色矩形中 可以识别。 Some constraints on the project: 对项目的一些限制: The background could be very noisy. 背景可能非常嘈杂。 The can could have any

如何把代码写的更优雅,你需要这一份代码精进书单!

痴心易碎 提交于 2020-08-13 06:56:15
​ 黄小斜写了一年多的代码,渐渐地代码量也上来了,但是,代码写的多就是好吗,简单的数量堆积似乎并不能起到太好的效果,毕竟我们CRUD写多了,也不怎么需要架构设计,甚至连个设计模式都不怎么需要用到。如何开始代码精进之路,其实有很多的过来人早就已经给出了答案,今天就给大家推荐几本帮你精进代码的优质书籍,走过路过可不要错过哦~ 代码精进系列书单 ​ 代码精进之路:从码农到工匠 这是一本为专业程序员而写的书,写好代码、追求卓越和工匠精神是每个程序员都应该具备的优秀品质。 本书共有13章内容,主要分为技艺部分、思想部分和实践部分。技艺部分详细介绍了编程技巧和方法论,并配以详尽的代码案例,有助于读者提高编写代码的能力,优化代码质量。思想部分主要包括抽象能力、分治思想,以及程序员应该具备的素养等内容。实践部分主要介绍了常见的应用架构模式,以及COLA架构的设计原理。 作者简介 张建飞,阿里巴巴集团高级技术专家,Java全球管理组织(JCP)执行委员会正式会员(Full Member)。2007年计算机工程硕士毕业后,先后在软件公司InfoSys与互联网公司eBay担任高级研发和技术专家的职务。2014年加入阿里巴巴,先后在1688、ICBU和零售通担任技术主管。 作者精通面向对象技术,有丰富的一线编码实战和架构经验。特别是在应用架构、领域建模和复杂度治理领域,自研了COLA框架

架构简洁之道:从阿里开源应用架构COLA说起

时间秒杀一切 提交于 2020-08-11 17:09:51
导读: COLA 的主要目的是为应用架构提供一套简单的可以复制、可以理解、可以落地、可以控制复杂性的”指导和约束"。在实践中作者发现 COLA 在简洁性上仍有不足,因此给 COLA 做了一次“升级”,在这次升级中,没有增加任何新的功能,而是尽量多删减了一些概念和功能,让 COLA 更简洁有效。 最近,同事告诉我,COLA 作为应用架构,已经被选入阿里云的 Java 应用初始化的应用架构选项之一。 This is really something,于是,在这个里程碑节点上,我开始回过头来,重新审视 COLA 一路走来的得与失。 COLA 作为一种架构思想无疑是成功的。但是作为框架,个人感觉有点鸡肋之嫌。特别是在简洁性上做的不好,感觉做了不少画蛇添足的事情。 试想一下,有些功能我作为作者都很少去使用,我实在想不到,它为什么还有存在的理由。 基于上面的思考,我做了这一次 COLA 2.0 到 COLA 3.0 的升级。在本次升级中,我没有增加任何新的功能,而是尽量多删减了一些概念和功能。让 COLA 可以更加纯粹的 focus 在应用架构上,而不是框架支持和架构约束上。 支持我做这些决策的背后原因只有一个——奥卡姆剃刀原理。 奥卡姆剃刀原理 奥卡姆剃刀原理,是指如无必要,勿增实体(Entities should not be multiplied unnecessarily),即

经典设计模式——抽象工厂模式

本小妞迷上赌 提交于 2020-04-23 01:46:01
抽象工厂模式用于创建一系列相关或者相互依赖对象,而无需指定具体的类。和工厂模式一样,它包括以下角色: Factory:抽象的工厂,声明工厂方法,该方法返回一个Product类型的对象 ConcreteFactory:工厂的实现,重写了工厂方法,并返回ConcreteProduct实例 Product:工厂生产出来的抽象产品 ConcreteProduct:具体的产品 考虑如下场景:KFC出售2种套餐,一种经济型包含鸡翅和可乐,另一种高档型,包含鸡腿和咖啡。用于只要指出需要的套餐名字就可以获得相应的食品,这种情况下,工厂模式就不再适用了。因为工厂模式每个子工厂只负责生产相互独立的产品,它不适用于一次创建一个“产品套餐”,而抽象工厂模式正是在此方面进行了改进: //产品族1:KFC食品 abstract class KFCFood { public abstract void show(); } class Chicken extends KFCFood { public void show() { System.out.println("鸡腿+1"); } } class Wings extends KFCFood { public void show() { System.out.println("鸡翅+1"); } } //产品族2:KFC饮料 abstract class