成为武林高手不易,当一名优质码农亦不容易。
程序员有句古训,“不重复造轮子。”,也就是要活用别人的成果。
这与吸收他人功力的吸星大法颇为类似。
因此,对大法善加揣摩,多加研习,应可获提升内力,优化码力等诸多进益。
引子
“这‘吸星大法’,创自北宋年间的‘逍遥派’,分为‘北冥神功’与‘化功大法’两路(作者按:请参阅《天龙八部》)。后来从大理段氏及星宿派分别传落,合而为一,称为‘吸星大法’,那主要还是继承了“化功大法’一路。只是学者不得其法,其颇有缺陷。其时我修习吸星大法已在十年以上,在江湖上这神功也是大有声名,正派人闻者无不丧胆。可是我却知这神功之有几个重大缺陷,初时不觉,其后祸患却慢慢显露出来。那几年我已然深明其患,知道若不及早补救,终有一日会得毒火焚身。那些吸取而来的他人功力,会突然反噬,吸来的功力愈多,反扑之力愈大。”
—— 金庸《笑傲江湖》
四两拨千斤
吸星大法最有所助益的,是硬碰硬的角力。两人比斗内力,犹如排江倒海,不尽不休。看似豪迈,仔细想来,其中巧取豪夺的意味仍然抹不去。因此,少侠们寻找了四两拨千斤的路子,修行一年,运功得法,便能撼动他人十数年的根基。
这一路数中最为出类拔萃的功法,便是太极。
太极的奥妙,在于既可四两拨千斤,一分功力,发挥十分效用;又可延年益寿,多出无数的修行时间。要知道,武林秘笈,大多引人入歧途,譬如九阳真经,乾坤大挪移,嫁衣神功,威力虽强,也有借力腾挪之效,但修行极为不易,明教之主阳顶天以命献祭,又引起之后教内无端骚乱,机缘巧合,才有了张无忌之一成。太极之功的修行者,却不必遭受如此的坎坷。
不过修行太极虽是修身养性,毕竟人生未遭历练,一有妖女诱惑,修行者也难免坠入魔道,前功尽弃。武当张真人三代弟子之内,便有宋青书这等邪魔,可见武功的强弱自是重要,最终,也要心性坚毅,怀抱大道,方能扬武林正气。
内力之池
要说内功心法,汪洋浩淼。TAOCP,龙书,虎书,鲸书,有如名门心法,江湖上早已如雷贯耳。再加上leetcode,acwing,各类OJ,大小校场,从最基本的输入输出,到高阶的系统设计,复杂的数据结构,应有尽有。如能细心演习,融会贯通,存乎一心,自可开宗立派。
可惜如今,江湖早已开枝散叶,初入江湖,便要面对诸多杂务,比如配环境、看监控、解决祖传历史问题……心法之外,还需有临阵应急之良方。
最为人不耻的,莫过于化功大法一般,直接剽窃他人成果,囫囵调试一番。国内知名搜索引擎上,有许多这样的成果。是药是毒,勇者自知。
稍为进阶之法,则讲求理解之消化,如北冥神功及后来的吸星大法之类。具体而言,又可分为几个层次。
基础之层,一拳还一拳。一遇问题,便请教技术之百晓生,stackoverflow,习得一招一式的应对之法。诸如如何安装,如何配置,环境有何错误此类琐事,大多可走此捷径化解。
进阶之境,便要研习熟稔手上的事物。譬如沙弥,便要学会化缘、挑水、种菜;大师兄,便要学会照顾林师弟和小师妹、孝顺师父师母。大数据几大神器,如hadoop, spark, flume等,托管于名门大派,apache基金会下,条例俨然,每项用法,均有说明;首页便可找到下载(Download),文档(Documentation)链接,过去的版本,还可查阅Releases. 在官方github的issue里,也有不少江湖前辈的提点。
不过这样全部铺陈在眼前,阅览起来,未免有些枯燥。因此,趣谈、杂谈、总论,也就应运而生。深入浅出系列,动物书系列,cookbook系列,大全系列 自然是翻阅首选。还有开门布道的师傅们,在博客或知乎坐镇,把关键之处提点一二。
有进阶之境,自然有更高阶,乃至于化境。境界愈高,依赖个人修行愈多,如四两拨千斤之功,不可猝得,至少需修行完十八般兵器,才能进入【先天神功】之境。
不过进阶之境如能轻车熟路,你也已掌握散落互联网中的内力之池。接下来,该要学会收与化。
收
池中没有金鳞,也没有锦鲤,只有工具和方法。你也可以将其看作散落各处的一口箱子。
但凡江湖中常见纾危解困的,小到语句的解析转换,大到数据处理系统,箱中应有尽有。比如:
解析JSON,常见于网络API通信处理,比如获取用户的身份信息,以及大数据中各类服务状态互相同步
定义: https://www.json.org/json-en.html
python官方库: https://docs.python.org/3/library/json.html?highlight=json
java在github上的插件: https://github.com/alibaba/fastjson
stackoverflow上的指南型问答: https://stackoverflow.com/questions/2591098/how-to-parse-json-in-java
解析正则,用于字符串的模式匹配,数据处理中经常使用
布道者: https://book.douban.com/subject/10591096
python官方库: https://docs.python.org/3/library/re.html
java官方库: https://docs.oracle.com/javase/tutorial/essential/regex/index.html
大数据中的正则: http://hadoop.apache.org/docs/r2.7.4/api/org/apache/hadoop/metrics2/filter/RegexFilter.html
处理图片/视频,虽然与数据处理关系不大,但是人工智能在这方面的趣味应用很多,比如著名的deepfake,所以顺便介绍
(虽然最知名的是opencv,但是opencv有载入图片大小的上限,才10+Mb,编译成链接库被调用的时候会很麻烦,所以补充新的库)
项目官方:http://www.pythonware.com/products/pil/
压缩/解压文件,提升大数据存储和处理效率的重要操作
官方算法之一:https://github.com/google/snappy
官方设置指南:https://hadoop.apache.org/docs/stable/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html#Job_Configuration
第三方库:https://pypi.org/project/python-snappy/
搭建一个网站
布道者:https://github.com/moonbingbing/openresty-best-practices
python的轻量框架:https://dormousehole.readthedocs.io/en/latest/
java下的方案:https://tomcat.apache.org/
甚至,预测未来:
官方: https://github.com/facebook/prophet
布道: https://blog.csdn.net/h4565445654/article/details/78398089
化
不加审视,复制即用,实在过于粗糙,也无需讲解,此处不介绍做法,只提醒弊端。任教主修吸星大法,体内尚有巨变,多种内力反噬,耳中有时如鸣响雷,竟连教中巨变也浑然不觉。辟邪简谱写“欲练此功,必先自宫”,那是君子剑千方百计求得的真谱;万一十元一本的“如来神掌”,开篇也是如此说……
因此,搜罗来的轮子,也需要消化。
想象一下,在寻求诸如“数据库如何查询”这样的具体之术时,不幸得到的第一条结果,是delete * from xxx; 开机的第一条指令,是sudo rm -rf。。。
这一类的瘴气,反而容易避开。一般的命令和指令,都会尽量设计得与自然预言有些关联,方便记忆。如果是查询,关联的英文单词不该是delete(删除);rm是remove的缩写,一般也不能随意使用。但凡修习过一些英文,保持警惕,并不容易中招。
也有一类“裘千仞的内力”,乍见了不得,其实吸来无力可用,白费一番功夫。在hive的数据查询中,是否要用distinct代替group by,便是这么一个例子。
从某搜索引擎,可见大量的布道者讨论这一招式。从内容上看,似乎都有理有据,十分扎实;但发表时间略早,不排除已经被官方优化的可能。
有效无效,首先眼见为实。我们在hive上进行这个实验。hive有多种可供选择的执行引擎。实验证明,这个改写并不能在spark和tez引擎下获得显著的提升。
再从原理上推敲。大部分文章主张的是,distinct会造成全局的一次总排序,这样会丢失分布式的优势,导致效率降低;实际上这样偷换了概念。因为SQL语句经过解析生成的任务,并不是SQL-A–>taskA, SQLB–>taskB这样单调的关系。执行引擎会对其进行优化。TEZ里便提到了对这一问题的优化。
具体是否造成了全局数据聚集在reduce端做了单机排序,也可以直接通过hive的explain,了解生成的任务计划:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Explain
发
轮子虽多,各位也不可囫囵吞枣,也需时时汰砂拣砾,去芜存菁,才能塑造自己一身好武艺。
要想试试消化得好与不好,不妨就拣定一本书,从现在开始,演练一番吧。
不太习惯这种描述风格。
y总都关注了呢
QAQ