消灭 Java 代码的“坏味道”

明代王阳明先生在《传习录》谈为学之道时说:/私欲日生,如地上尘,一日不扫,便又有一层。着实用功,便见道无终穷,愈探愈深,必使精白无一毫不彻方可。代码中的"坏味道",如"私欲"如"灰尘",每天都在增加,一日不去清除,便会越累越多。如果用功去清除这些"坏味道",不仅能提高自己的编码水平,也能使代码变得"精白无一毫不彻"。这里,整理了日常工作中的一些"坏味道",及清理方法,供大家参考。1.1.需要Map的主键和取值时,应该迭代entrySet()当循环中只需要Map的主键时,迭代keySet()是正确的。但是,当需要主键和取值时,迭代entrySet()才是更高效的做法,比先迭代keySet()后再去get取值性能更佳。反例:Map<String,String>map=...;for(Stringkey:map.keySet()){Stringvalue=map.get(key);...}正例:Map<String,String>map=...;for(Map.Entry<String,String>entry:map.entrySet()){String...
代码星球 代码星球·2021-02-24

修改代码150万行!与 Blink 合并后的 Apache Flink 1.9.0 究竟有哪些重大变更?

8月22日,ApacheFlink1.9.0正式发布,早在今年1月,阿里便宣布将内部过去几年打磨的大数据处理引擎Blink进行开源并向ApacheFlink贡献代码。当前Flink1.9.0是阿里内部版本Blink合并入Flink后的首次发版,修改代码150万行,此次发版不仅在结构上有重大变更,在功能特性上也更加强大与完善。本文将为大家介绍Flink1.9.0有哪些重大变更与新增功能特性。在此先简单回顾一下阿里巴巴Blink开源的部分要点:Blink开源的内容主要是阿里巴巴基于开源Flink引擎,依托集团内部业务,在流计算和批处理上积累的大量新功能、性能优化、稳定性提升等核心代码Blink以分支的形式开源,即开源后会成为ApacheFlink项目下的一个分支。Blink开源的目标不是希望成为另一个活跃的项目,而是将Flink做的更好。通过开源的方式让大家了解所有Blink的实现细节,提高Blink功能merge进入Flink的效率,与社区协作更高效。半年的时间过去了,随着Flink1.9.0版本的发布,在此我们可以骄傲的宣布:Blink团队已经实现了之前的诺言!尽管不是所有功能都顺利m...

confd + Nacos | 无代码侵入的配置变更管理

为什么要支持confd,老的应用配置管理模式是启动时读取配置文件,然后重新读取配置文件需要应用重启。一般的配置管理系统都是代码侵入性的,应用接入配置管理系统都需要使用对应的SDK来查询和监听数据的变更。对于一些已经成熟的系统来说,接入SDK来实现动态配置管理是很难实现的,Nacos通过引入配置管理工具confd可以实现系统的配置变更做到无代码侵入性。confd是一个轻量级的配置管理工具,可以通过查询后端存储系统来实现第三方系统的动态配置管理,如Nginx、Tomcat、hHaproxy、Docker配置等。confd目前支持的后端有etcd、Zookeeper等,Nacos1.1版本通过对confd定制支持Nacos作为后端存储。confd能够查询和监听后端系统的数据变更,结合配置模版引擎动态更新本地配置文件,保持和后端系统的数据一致,并且能够执行命令或者脚本实现系统的reload或者重启。confd的安装可以通过源码安装方式,confd基于Go语言编写,其编译安装依赖Go,首先需要确保本地安装了Go,版本不低于v1.10创建confd目录,下载confd源码,编译生成可执行文件mkd...

PyODPS DataFrame 的代码在哪里跑

在使用PyODPSDataFrame编写数据应用时,尽管编写的是同一个脚本文件,但其中的代码会在不同位置执行,这可能导致一些无法预期的问题,本文介绍当出现相关问题时,如何确定代码在何处执行,以及提供部分场景下解决问题的方法。假定我们要执行下面的代码:fromodpsimportODPS,optionsimportnumpyasnpo=ODPS(access_id,access_key,project,endpoint)df=o.get_table('pyodps_iris').to_df()coeffs=[0.1,0.2,0.4]defhandle(v):importnumpyasnpreturnfloat(np.cosh(v))*sum(coeffs)options.df.supersede_libraries=Trueval=df.sepal_length.map(handle).sum().execute(libraries=['numpy.zip','other.zip'])print(np.sinh(val))在开始分析之前,首先需要指出的是,PyODPS是一个Python包...

K8s中Pod健康检查源代码分析

Liveness: 表明是否容器正在运行。如果liveness探测为fail,则kubelet会kill掉容器,并且会触发restart设置的策略。默认不设置的情况下,该状态为success.Readiness: 表明容器是否可以接受服务请求。如果readiness探测失败,则endpoints控制器会从endpoints中摘除该PodIP。在初始化延迟探测时间之前,默认是Failure。如果没有设置readiness探测,该状态为success。基于Kubernetes1.11.01.启动探测在kubelet启动是时候会启动健康检查的探测:kubelet.go中Run方法...kl.probeManager.Start()//启动探测服务...2.看一下probeManager都做了哪些事情prober_manager.go中我们看一下这段代码://Managermanagespodprobing.Itcreatesaprobe"worker"foreverycontainerthatspecifiesa//probe(AddPod).Theworkerperio...

从HelloWorld看Knative Serving代码实现

/摘要: KnativeServing以Kubernetes和Istio为基础,支持无服务器应用程序和函数的部署并提供服务。我们从部署一个HelloWorld示例入手来分析KnativeServing的代码细节。官方给出的这几个资源的关系图还是比较清晰的:1.Service:自动管理工作负载整个生命周期。负责创建route,configuration以及每个service更新的revision。通过Service可以指定路由流量使用最新的revision,还是固定的revision。2.Route:负责映射网络端点到一个或多个revision。可以通过多种方式管理流量。包括灰度流量和重命名路由。3.Configuration:负责保持deployment的期望状态,提供了代码和配置之间清晰的分离,并遵循应用开发的12要素。修改一次Configuration产生一个revision。4.Revision:Revision资源是对工作负载进行的每个修改的代码和配置的时间点快照。Revision是不可变对象,可以长期保留。我们开始运行官方hello-world示例,看看会发生什么事...

UI2CODE智能生成代码——组件识别篇

1.背景在《UI2CODE——整体设计篇》中,我们介绍了UI2CODE工程的整体流程:在组件识别这个环节,需要有一种处理布局信息的方法,来解析和计算控件间的布局关系(比如识别业务组件(BI组件)和查找重复布局),以此来提高最终代码的可用性。在这篇文章,我们将介绍一种布局信息的结构化方法:“连线法”,以及一种布局间的计算和比较方法: “引导连线法”。首先来看我们需要解决的问题:2.问题一:识别业务组件目的:代码复用业务组件是指某些特定的卡片,比如一个商品详情卡片,这些卡片会在不同页面出现,而这些卡片的代码一般是已经存在的。我们在拿到一张图片的时候,需要先识别出这些组件,这样这一区块就能复用已有的组件代码,而不会造成很多冗余的一次性代码。老解法:利用深度学习模型SSD做物体检测如果把寻找业务组件这个问题看成从一张大图片上寻找小图片的话,那么最直接的做法就是用一个物体检测模型(比如SSD)来做,这样只要训练模型来识别每个业务组件的图片就可以了。因此我们尝试了用训练SSD模型来解决这个问题。存在的问题:训练困难,训练结果不可控经过训练和测试以后,我们发现用物体检测模型来解这个问题的弊...

【开源】1句代码搞定图片批量上传,无需什么代码功底【无语言界限】

开源地址:https://github.com/dunitian/LoTUploaderWebUploader基础上的封装改善,一句代码全部实现(样式美化,实例JS优化(配置优化,样式调整,名称+大小显示,错误处理等),后端代码。。。。。) 效果:(完整demo:https://github.com/dunitian/LoTUploader/tree/V1.0.1/Demo)一句代码:$.lotuploader('lot-uploader','/Home/Upload');//必填参数:ID,Server地址(完整案例看Demo部分)第一步:引入样式/<linkhref="Scripts/lotUploader/lotuploader1.0.1.min.css"rel="stylesheet"/>第二步:自己定义一个DIV(id名任意)/<divid="lot-uploader"></div>第三步:引入脚本/<scriptsrc="http://cdn.bootcss.com/jquery/1.10.2/jquery.min.js"...

数据库怎么设置代码折叠?

只有行号,咋就没有折叠的功能呢?记得sqlserver2012里面是有的啊?选项=》T-SQL=》概况语句重写打开sql文件...

【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】下 ~ Net程序员的福利

上一节我们通过通用封装说了下QQ登录的申请和通用讲解,【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】:http://www.cnblogs.com/dunitian/p/5055789.html这次我们专门为Net程序员准备一个专版(其他方向的看通用封装即可,使用起来很简单)做个简单的案例:(EF+MVC)1.先看一下自己的appid2.前台一系列设置:(图片看不见的话点开看,会放大的)3.数据库设计(简单版本)4.Model类5.后台处理(不同框架处理不一样,这边给个参考)效果:(上节课的图)初始时:跳转登录:登录后:(样式可以调)可获取的值:(可以根据回调函数自己存储)有什么bug或者新需求可以向我提出~~感谢你的观看~ ...

开源简单4步搞定QQ登录,无需什么代码功底【无语言界限】

说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin————————————————————————————————————————————先申请一下创建一个应用网站或者移动注意回调地址(登录的时候会传东西过去)以网站为例验证后即可成功,具体看创建时候的提示记住上面的id这个是你的api管理页面(更多可以申请)  下面说一下重头戏:第一步:引入jq<scripttype='text/javascript'src='http://ajax.useso.com/ajax/libs/jquery/1.7.2/jquery.min.js?ver=3.4.2'></script>第二步:把data-appid替换成你的id,data-redirecturi替换成你的回调地址<scripttype="text/javascript"src="http://qzonestyle.gtimg.cn/qzone/openapi/q...

3.5框架不能创建就加这一段代码

<ResGenToolArchitecture>Managed32Bit</ResGenToolArchitecture>...

06.移动先行之谁主沉浮----我的代码我来写(Xaml的优势)

如果移动方向有任何问题请参考===> 异常处理汇总-移动系列(点)前面几节课,我们都是在前台创建对象,进行一些设置,那么我们为什么不用传统的方法来编程呢?我们今天来试试你就明了了~~ 打开MainPage.xaml.cs,自己创建一个button,进行一些常用设置    ///<summary>///在此页将要在Frame中显示时进行调用。///</summary>///<paramname="e">描述如何访问此页的事件数据。///此参数通常用于配置页。</param>protectedoverridevoidOnNavigatedTo(NavigationEventArgse){Buttonbtn=newButton();btn.Content="巴松2号";//文本内容btn.HorizontalAlignment=Windows.UI.Xaml.HorizontalAlignment.Right;//水平对齐方式btn.VerticalAlignment=Windows.UI.Xaml.VerticalA...

VS代码提示不出现或者提示变成英文或者各种奇葩问题的解决

万能法==>重置代码提示变成英文的了打开开发员命令提示输入:devenv.exe/setup/resetuserdata/resetsettings重新打开,会和你第一次安装完毕一个样子(重头配置)...

SVN代码冲突解决方案小集合

对于刚接触svn的人来说,svn冲突后,不能提交是件让人很郁闷的事情。最让人郁闷的事,是代码间的覆盖。你把我代码盖了,我会很火大的。谁把谁的盖了都不爽。为什么会出现代码冲突问题呢,因为不同的人,同时修改了同一个文件的同一个地方,这个时候,他提交了,你没有提交,你就提交不了,这个时候,你要先更新,更新就会出现代码冲突问题。一般情况,要尽量避免多个人修改同一个文件,如果你改的文件是公用文件,这个时候,最好和大家勾通一下,大家都在改就不好了。结合别人修改的内容和自己修改的内容,然后把文件中的<<<<<,=====,>>>>>>>这类冲突符号去掉。去掉后,还是不能提交的,为什么?因为冲突时会产生三个文件,有这三个文件存在肯定提交不了。客户端用的tortoisesvn(这个用的最多),冲突时会多产生,三个文件 下面就使用客户端的方式来解决吧~1.状态2.代码中经典的标志3.右键选择编辑冲突 4.软件的界面布局  5.某块代码的合并  6.使用某单方面的文件 ...
首页上一页...34567...下一页尾页