首页 文章 精选 留言 我的

精选列表

搜索[编写],共10000篇文章
优秀的个人博客,低调大师

用 Rust 编写的 GNU Coreutils 替代品取得多项进展

GNU Coreutils 在 Linux 系统和其他平台上提供了一些常见且重要的命令行工具,GNU Core Utilities 包括常用的命令,如 cat、ls、rm、chmod、mkdir、wc、whoami 和许多其他命令。 随着行业内广泛将安全敏感代码转换为像 Rust 这样的内存安全语言,Sylvestre Ledru 和其他开发人员一直在开发基于 Rust 的 Coreutils 替代品:Rust Coreutils:完全清除 C 语言代码,转而使用 Rust 这种主打内存安全性和安全性为的现代编程语言。 近一年来 Rust Coreutils 取得一些进展,已经能够在基本的 Debian 系统上运行,而最近他们一直在提高 GNU Coreutils 的兼容性。据外媒 phoronix 介绍,Rust Coreutils 不仅更安全,对于一些二进制文件,现在看到的性能比 GNU 包中的命令(如 head、cut 和其他常见命令)“显着地”要好。 不过现在Rust Coreutils 仍然面临着缩小与上游 GNU 命令兼容性的挑战。目前唯一尚待实现的二进制文件之一是stty,除了优化和兼容性工作之外,开发人员还在努力让 Debian 和 Ubuntu 在默认情况下能轻松切换到 Rust Coreutils。 通过 Sylvestre Ledru 的博客可以了解有关 Rust Coreutils 当前状态的更多详细信息。该项目的源代码可在GitHub 中查看。

优秀的个人博客,低调大师

Spring Batch 4.3.0-M2 发布,批处理应用编写框架

Spring Batch4.3.0 的第二个里程碑版本发布了,可从里程碑仓库获取。 更新亮点 1. 增强对 Kafka 的支持 默认情况下,KafkaItemReader 从头开始读取主题。最初在 v4.2 中引入此读取器时,无法将其配置为从自定义偏移量读取记录。在此版本中,可以将读取器配置为从存储在 Kafka 中的偏移量开始。 2. 增强对Micrometer 的支持 对Micrometer 的支持也是在4.2 版本中引入,用户反馈要求的功能之一是能够知道当前活动的作业。Spring Batch 提供了一个名为 spring.batch.job.active 的度量,该度量给出了当前活动作业的数量。但是直到现在该指标仍无法让用户知道当前正在激活哪些特定作业。此版本丰富了度量标准标签以实现此目标。 3.添加一个新的 JobParametersIncrementer 实现 在大多数情况下,RunIdIncrementer 可以很好地实现其目的:它递增一个名为 run.id 的作业参数,该参数通常用作作业实例识别符。但是,在某些情况下(例如无序的数据库序列,对增量器的并发访问等),此增量器可能会生成非唯一值,这会阻止启动新作业实例。 此版本引入了一个新的 JobParametersIncrementer,它基于 Spring Framework 中的 DataFieldMaxValueIncrementer。与 RunIdIncrementer 相比,此增量器对生成的值的唯一性提供了更强的保证。 依赖项升级 Spring Framework 5.3.0-M2 Spring Data 2020.0.0-M2 Spring Integration 5.4.0-M2 Spring AMQP 2.3.0-M2 Spring for Apache Kafka 2.6.0-M1 更新说明:https://spring.io/blog/2020/08/13/spring-batch-4-3-0-m2-is-out

优秀的个人博客,低调大师

javascript成神之路(1):如何编写高质量的js代码

一、如何书写可维护性的代码 当出现bug的时候如果你能立马修复它是最好的,此时解决问题的四路在你脑中还是很清晰的。否则,你转移到其他任务或者bug是经过一定的时间才出现的,你忘了那个特定的代码,一段时间后再去查看这些代码就 需要: 1.花时间学习和理解这个问题 2.化时间是了解应该解决的问题代码 还有个问题,特别对于大的项目或是公司,修复bug的这位伙计不是写代码的那个人(且发现bug和修复bug的不是同一个人)。因此,必须降低理解代 码花费的时间,无论是一段时间前你自己写的代码还是团队中的其他成员写的代码。这关系到底线(营业收入)和开发人员的幸福,因为我们更应该去开发新的激动 人心的事物而不是花几小时几天的时间去维护遗留代码。所以创建可维护性代码是至关重要的,一般可维护性的代码有以下几个原则: 可读性 一致性 可预测性 看上去就像同一个人写的 已记录 二、全局变量的问题 全局变量的问题在于,你的JavaScript应用程序和web页面上的所有代码都共享了这些全局变量,他们住在同一个全局命名空间,所以当程序的两个不同部分定义同名但不同作用的全局变量的时候,命名冲突在所难免。web页面包含不是该页面开发者所写的代码也是比较常见的,例如: 第三方的JavaScript库 广告方的脚本代码 第三方用户跟踪和分析脚本代码 不同类型的小组件,标志和按钮 例如说,该第三方脚本定义了一个全局变量,叫做A;接着,在你的函数中也定义一个名为A的全局变量。其结果就是后面的变量覆盖前面的,第三方脚本就一下子失效啦!而且很难debug出来。 因此:尽可能少的使用全局变量是很重要的,例如命名空间模式或是函数立即自动执行,但是要想让全局变量少最重要的还是始终使用var来声明变量。 三、忘记var作用的副作用 隐式全局变量和明确定义的全局变量间有些小的差异,就是通过delete操作符让变量未定义的能力。具体如下: 通过var创建的全局变量(任何函数之外的程序中创建)是不能被删除的。 没有通过var创建的隐式全局变量(无视是否在函数中创建)是能被删除的。 所以隐式全局变量并不是真正的全局变量,但它们是全局对象的属性。属性是可以通过delete操作符删除的,而变量是不能的,具体代码我就不写了。 四、访问全局对象 在浏览器中,全局对象可以通过window属性在代码的任何位置访问(除非你做了些比较出格的事情,像是声明了一个名为window的局部变量)。但是在其他环境下,这个方便的属性可能被叫做其他什么东西(甚至在程序中不可用)。如果你需要在没有硬编码的window标识符下访问全局对象,你可以在任何层级的函数作用域中做如下操作: var global = (function () { return this; }()); 五、for循环 在for循环中,你可以循环取得数组或是数组类似对象的值,譬如arguments和HTMLCollection对象。通常的循环形式如下: // 次佳的循环 for (var i = 0; i < myarray.length; i++) { // 使用myarray[i]做点什么 } 这种形式的循环的不足在于每次循环的时候数组的长度都要去获取下。这回降低你的代码,尤其当myarray不是数组,而是一个HTMLCollection对象的时候。 六、不扩展内置原型 扩增构造函数的prototype属性是个很强大的增加功能的方法,但有时候它太强大了。增加内置的构造函数原型(如Object(), Array(), 或Function())挺诱人的,但是这严重降低了可维护性,因为它让你的代码变得难以预测。使用你代码的其他开发人员很可能更期望使用内置的 JavaScript方法来持续不断地工作,而不是你另加的方法。另外,属性添加到原型中,可能会导致不使用hasOwnProperty属性时在循环中显示出来,这会造成混乱。 七、避免隐式类型转换 JavaScript的变量在比较的时候会隐式类型转换。这就是为什么一些诸如:false == 0 或 “” == 0 返回的结果是true。为避免引起混乱的隐含类型转换,在你比较值和表达式类型的时候始终使用===和!==操作符。 var zero = 0; if (zero === false) { // 不执行,因为zero为0, 而不是false } // 反面示例 if (zero == false) { // 执行了... } 八、避免eval() 如果你现在的代码中使用了eval(),记住该咒语“eval()是魔鬼”。此方法接受任意的字符串,并当作JavaScript代码来处理。当有 问题的代码是事先知道的(不是运行时确定的),没有理由使用eval()。如果代码是在运行时动态生成,有一个更好的方式不使用eval而达到同样的目 标。例如,用方括号表示法来访问动态属性会更好更简单: // 反面示例 var property = "name"; alert(eval("obj." + property)); // 更好的 var property = "name"; alert(obj[property]); 使用eval()也带来了安全隐患,因为被执行的代码(例如从网络来)可能已被篡改。这是个很常见的反面教材,当处理Ajax请求得到的JSON 相应的时候。在这些情况下,最好使用JavaScript内置方法来解析JSON相应,以确保安全和有效。若浏览器不支持JSON.parse(),你可 以使用来自JSON.org的库。 同样重要的是要记住,给setInterval(), setTimeout()和Function()构造函数传递字符串,大部分情况下,与使用eval()是类似的,因此要避免。在幕后,JavaScript仍需要评估和执行你给程序传递的字符串: // 反面示例 setTimeout("myFunc()", 1000); setTimeout("myFunc(1, 2, 3)", 1000); // 更好的 setTimeout(myFunc, 1000); setTimeout(function () { myFunc(1, 2, 3); }, 1000); 使用新的Function()构造就类似于eval(),应小心接近。这可能是一个强大的构造,但往往被误用。如果你绝对必须使用eval(),你 可以考虑使用new Function()代替。有一个小的潜在好处,因为在新Function()中作代码评估是在局部函数作用域中运行,所以代码中任何被评估的通过var 定义的变量都不会自动变成全局变量。另一种方法来阻止自动全局变量是封装eval()调用到一个即时函数中。 考虑下面这个例子,这里仅un作为全局变量污染了命名空间。 console.log(typeof un); // "undefined" console.log(typeof deux); // "undefined" console.log(typeof trois); // "undefined" var jsstring = "var un = 1; console.log(un);"; eval(jsstring); // logs "1" jsstring = "var deux = 2; console.log(deux);"; new Function(jsstring)(); // logs "2" jsstring = "var trois = 3; console.log(trois);"; (function () { eval(jsstring); }()); // logs "3" console.log(typeof un); // number console.log(typeof deux); // "undefined" console.log(typeof trois); // "undefined" 另一间eval()和Function构造不同的是eval()可以干扰作用域链,而Function()更安分守己些。不管你在哪里执行 Function(),它只看到全局作用域。所以其能很好的避免本地变量污染。在下面这个例子中,eval()可以访问和修改它外部作用域中的变量,这是 Function做不来的(注意到使用Function和new Function是相同的)。 (function () { var local = 1; eval("local = 3; console.log(local)"); // logs "3" console.log(local); // logs "3" }()); (function () { var local = 1; Function("console.log(typeof local);")(); // logs undefined 九、编码规范 建立和遵循编码规范是很重要的,这让你的代码保持一致性,可预测,更易于阅读和理解。一个新的开发者加入这个团队可以通读规范,理解其它团队成员书写的代码,更快上手干活。 十、缩进 代码没有缩进基本上就不能读了。唯一糟糕的事情就是不一致的缩进,因为它看上去像是遵循了规范,但是可能一路上伴随着混乱和惊奇。重要的是规范地使用缩进。 十一、注释 你必须注释你的代码,即使不会有其他人向你一样接触它。通常,当你深入研究一个问题,你会很清楚的知道这个代码是干嘛用的,但是,当你一周之后再回来看的时候,想必也要耗掉不少脑细胞去搞明白到底怎么工作的。 很显然,注释不能走极端:每个单独变量或是单独一行。但是,你通常应该记录所有的函数,它们的参数和返回值,或是任何不寻常的技术和方法。要想到注 释可以给你代码未来的阅读者以诸多提示;阅读者需要的是(不要读太多的东西)仅注释和函数属性名来理解你的代码。例如,当你有五六行程序执行特定的任务, 如果你提供了一行代码目的以及为什么在这里的描述的话,阅读者就可以直接跳过这段细节。没有硬性规定注释代码比,代码的某些部分(如正则表达式)可能注释 要比代码多。 十二、花括号{} 花括号(亦称大括号,下同)应总被使用,即使在它们为可选的时候。技术上将,在in或是for中如果语句仅一条,花括号是不需要的,但是你还是应该总是使用它们,这会让代码更有持续性和易于更新。 原文发布时间:2018年01月06日 作者:技术金三胖 本文来源:开源中国如需转载请联系原作者

优秀的个人博客,低调大师

iOS-《编写高质量代码》笔记-第五章 实现

建议33:使用类别把类的实现拆分成不同的文件 类别可以访问其继承的类的实例变量,类别的方法具有最高的优先级类别,可以分散到不同的文件中,甚至不同的框架中。 1.利用类别机制,可将同一个类的实现,由一个常规的实现文件.m拆分成多个实现文件.m。 2.把同一个类的实现文件.m拆分成多个实现文件.m,适合类的实现文件大多比较庞大,拆分的标准多是以同类型或同业务来作为参照。 建议34:明智地使用内省可使程序更加高效和健壮 内省是对象揭示自己作为一个运行时对象的详细信息的一种能力。这些详细信息包括对象在继承树上的位置、对象是否遵循特定的协议,以及是否可以响应特定的消息。 建议35:尽量使用不可变性对象而非可变性对象 对象的不可变性可以保证对象在使用时不会被意外的改变。 1.尽量不要把可变对象存储到集合对象中,否则容易导致存储的可变对象被破坏或变成无效。 2.在开销上,可变对象比不可变对象要大,因为可变对象必须动态管理一个可变的辅助存储---在必要的时分配或解除分配内存块,所以比相应的不可变版本效率低。 3.不能确定对象是否可变,则将它当成不可变处理。 建议36:利用复合能巧妙地把两个类或两个对象融合 在OOP编程中有两个技术用于描述类与类或对象与对象之间的关系:一个是继承,另一个是复合。 面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。 复合:通过在类中声明一个指向另一个类对象的指针作为实例变量,从而将这两个类进行复合。 在OC中所有对象之间的交互都是通过指针实现的。 建议37:使用类扩展来隐藏实现的细节 类扩展(Extension)作用: 1.能为某个类附加额外的属性、成员变量、方法声明 2.一般的类扩展写到.m文件中 3.一般的私有属性写到类扩展中 建议38:使用内联块应注意避免循环引用 内联:在类内定义的函数被默认成内联函数 块:block 引进弱引用来避免在内联块中直接引用self导致的循环引用。 建议39:利用类别把方法添加到现有的类 类别可以用于声明实例方法或类方法,但通常不适合用类别来声明额外的属性。在类别接口中包括一个属性声明的语法是有效的。但是不能在类别中声明一个额外的实例变量。这意味着,编译器不会合成任何实例变量,也不会将它合成任何属性访问器方法。 建议40:通过强弱引用来管理对象的所有权 http://www.jianshu.com/p/4a1d1921284b

优秀的个人博客,低调大师

解决Sublime Text 3编写CSS输入分号时自动提示的问题

自定义View系列教程00–推翻自己和过往,重学自定义View 自定义View系列教程01–常用工具介绍 自定义View系列教程02–onMeasure源码详尽分析 自定义View系列教程03–onLayout源码详尽分析 自定义View系列教程04–Draw源码分析及其实践 自定义View系列教程05–示例分析 自定义View系列教程06–详解View的Touch事件处理 自定义View系列教程07–详解ViewGroup分发Touch事件 自定义View系列教程08–滑动冲突的产生及其处理 探索Android软键盘的疑难杂症 深入探讨Android异步精髓Handler 详解Android主流框架不可或缺的基石 站在源码的肩膀上全解Scroller工作机制 Android多分辨率适配框架(1)— 核心基础 Android多分辨率适配框架(2)— 原理剖析 Android多分辨率适配框架(3)— 使用指南 版权声明 本文原创作者:谷哥的小弟 作者博客地址:http://blog.csdn.net/lfdfhl 问题描述 在用Sublime Text 3写CSS代码时遇到一个问题:当写完一行代码输入分号时会自动莫名其妙地弹出来一个代码提示框,如下图所示: 在这折腾了好一阵子,好在最终解决了。故,记录如下。 解决方案 解决方式及其步骤请参见如下方案。 第一步 打开Preferences -> Package Settings -> SublimeCodeIntel -> Key Bindings - User 此时,您看到如下配置: [ { "keys": [ "tab" ], "args": { "action": "expand_abbreviation" }, "command": "run_emmet_action", "context": [ { "key": "emmet_action_enabled.expand_abbreviation" }] } 将其修改为如下所示: [ { "keys": [ "tab" ], "args": { "action": "expand_abbreviation" }, "command": "run_emmet_action", "context": [ { "key": "emmet_action_enabled.expand_abbreviation" }] }, { "keys": [";"], "command": "run_macro_file", "args": { "file": "Packages/User/lfdfhl.sublime-macro" } }] 第二步 打开Preferences -> Browser Packages -> Users 在该目录下新建文件lfdfhl.sublime-macro 第三步 在lfdfhl.sublime-macro文件中保存如下内容: [ { "args": { "characters": ";" }, "command": "insert" } ] 第四步 重启Sublime Text 3

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Oracle

Oracle

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Eclipse

Eclipse

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。