首页 文章 精选 留言 我的

精选列表

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

编写 if 时不带 else,你的代码会更好

设计更好的软件,替换If-Else的5种方法。入门到高级示例 让我直接说这句话:If-Else通常是一个糟糕的选择。 它导致设计复杂,代码可读性差,并且可能导致重构困难。 但是,If-Else已成为事实上的代码分支解决方案,这确实是有道理的。这是向所有有抱负的开发人员讲授的第一件事。不幸的是,许多开发人员从来没有前进到更合适的分支策略。 有些人的口头禅是:If-Else是一把锤子,一切都是钉子。 无法区分何时使用更合适的方法是区分大三学生和大三学生的原因之一。 我将向您展示一些技巧和模式,这些技巧和模式将终结这种可怕的做法。 每个示例的难度都会增加。 1 完全不必要的Else块 这也许是那些初级开发人员最负罪的之一。下面的示例很好地说明了当您被认为If-Else很棒时会发生什么。 Simple if-else 只需删除else`块即可简化此过程。 Removed else 看起来更专业吧? 您会经常发现,实际上根本不需要其他块。像在这种情况下一样,您想要在满足特定条件的情况下执行某些操作并立即返回。 2 价值分配 如果您要根据提供的某些输入为变量分配新值,请停止If-Else废话-一种更具可读性的方法。 Value assignment with if-else 尽管很简单,但它却很糟糕。首先,If-Else很容易在这里被开关取代。但是,我们可以通过完全删除else来进一步简化此代码。 If statements with fast return 如果不使用else,则我们将剩下干净的可读代码。请注意,我也将样式更改为快速返回而不是单返回语句-如果已经找到正确的值,继续测试一个值根本没有意义。 3 前提条件检查 通常,我发现,如果方法提供了无效的值,则继续执行是没有意义的。 假设我们从以前就有了DefineGender方法,要求提供的输入值必须始终为0或1。 Method without value checks 在没有价值验证的情况下执行该方法没有任何意义。因此,在允许方法继续执行之前,我们需要检查一些先决条件。 应用保护子句防御性编码技术,您将检查方法的输入值,然后继续执行方法。 Check preconditions with guard clauses 至此,我们确保仅在值落在预期范围内时才执行主逻辑。 现在,IF也已被三元代替,因为不再需要在结尾处默认返回"未知"。 4 将If-Else转换为字典—完全避免If-Else 假设您需要执行一些操作,这些操作将根据某些条件进行选择,我们知道以后必须添加更多操作。 也许有人倾向于使用久经考验的If-Else。如果添加新操作,则只需简单地添加其他内容即可。很简单 但是,就维护而言,这种方法不是一个好的设计。 知道我们以后需要添加新的操作后,我们可以将If-Else重构为字典。 可读性已大大提高,并且可以更轻松地推断出该代码。 注意,仅出于说明目的将字典放置在方法内部。您可能希望从其他地方提供它。 5 扩展应用程序—完全避免使用If-Else 这是一个稍微高级的示例。 通过用对象替换它们,知道何时甚至完全消除If。 通常,您会发现自己不得不扩展应用程序的某些部分。作为初级开发人员,您可能会倾向于通过添加额外的If-Else(即else-if)语句来做到这一点。 举这个说明性的例子。在这里,我们需要将Order实例显示为字符串。首先,我们只有两种字符串表示形式:JSON和纯文本。在此阶段使用If-Else并不是什么大问题,如果我们可以轻松替换其他,只要如前所述即可。 知道我们需要扩展应用程序的这一部分,这种方法绝对是不可接受的。 上面的代码不仅违反了"打开/关闭"原则,而且阅读得不好,还会引起可维护性方面的麻烦。 正确的方法是遵循SOLID原则的方法-我们通过实施动态类型发现过程(在本例中为策略模式)来做到这一点。 重构这个混乱的过程的过程如下: 使用公共接口将每个分支提取到单独的策略类中 动态查找实现通用接口的所有类 根据输入决定执行哪种策略 替换上面示例的代码如下所示。是的,这是更多代码的方式。它要求您了解类型发现的工作原理。但是动态扩展应用程序是一个高级主题。 我只显示将替换If-Else示例的确切部分。如果要查看所有涉及的对象,请查看此要点。 让我们快速浏览一下代码。 方法签名保持不变,因为调用者不需要了解我们的重构。 首先,获取实现通用接口IOrderOutputStrategy的程序集中的所有类型。然后,我们建立一个字典,格式化程序的displayName的名称为key,类型为value。 然后从字典中选择格式化程序类型,然后尝试实例化策略对象。 最后,调用策略对象的ConvertOrderToString。 (本文翻译自Nicklas Millard的文章《Better Software Without If-Else》,参考:https://medium.com/swlh/5-ways-to-replace-if-else-statements-857c0ff19357)

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

Prometheus 2.19.0 发布,Go 编写的服务监控系统

Prometheus 2.19.0 发布了,Prometheus 是一个 Go 语言开发的开源的服务监控系统和时间序列数据库。该版本引入了一些新特性,比如记录其他组件、增强功能和修复 bug,这些都是为了提高可用性。 此版本更新内容如下: 特性 TSDB:磁盘中 Head(内存)块的全部内存映射。这减少了内存占用,并使重新启动更快。 增强功能 Discovery:添加了对 Triton 全球区域的发现支持。 警报重新发送的延迟增加,可以更好地容忍故障。 远程读取:添加了 prometheus_remote_storage_remote_read_queries_total 计数器以计算远程读取查询的总数。 为标签名称和标签值 API 添加了时间范围参数。 TSDB:减少了针对高负载的隔离争用。 Bug 修复 PromQL:消除了检查重复标签时的冲突。 React UI:单击当前选项卡时不清空数据。 PromQL:正确跟踪查询的样本数。 PromQL:当直方图桶中有 0 个观测值时,返回 NaN。 TSDB:使用Prometheus并配置了远程读取时,修复错误的查询结果。 更新说明:https://github.com/prometheus/prometheus/releases/tag/v2.19.0

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

Prometheus 2.15.0 发布,Go 编写的服务监控系统

Prometheus 2.15.0 发布了,Prometheus 是一个 Go 语言开发的开源的服务监控系统和时间序列数据库。该版本引入了一些新特性,比如记录其他组件、增强功能和修复 bug,这些都是为了提高可用性。 更新内容如下: 特性 API:添加了新的 endpoint,用于公开每个指标元数据/元数据#6420#6442 BUGFIX 配置:修复了警报管理器配置,当配置相似时不会错过目标#6455 远程写入:prometheus_remote_storage_shards_desired 标尺的值显示了所需分片的原始值,并且已正确更新#6378 规则:Prometheus 现在无法评估规则和警报,其中度量标准结果与标签字段中指定的标签发生冲突#6469 API:Targets Metadata API/targets/metadata 现在可以接受规范中的空 match_targets 参数#6303 更新说明:https://github.com/prometheus/prometheus/releases/tag/v2.15.0

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

Prometheus 2.13.1 发布,Go 编写的服务监控系统

Prometheus 2.13.1 发布了。Prometheus 是一个 Go 语言开发的开源的服务监控系统和时间序列数据库。该版本引入了一些新特性,比如记录其他组件、增强功能和修复 bug,这些都是为了提高可用性。 更新内容如下: [BUGFIX] 修复 Prometheus 的 ARM 版本中的 panic#6110 [BUGFIX] promql:修复查询记录器中可能出现的紧急情况#6094 [BUGFIX] http 的多个错误:日志中多余的response.WriteHeader 调用#6145 更新说明及下载地址

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

Prometheus 2.13.0 发布,Go 编写的服务监控系统

服务监控系统 Prometheus 2.13.0 发布了,Prometheus 是一个 Go 语言开发的开源的服务监控系统和时间序列数据库。该版本引入了一些新特性,比如记录其他组件、增强功能和修复 bug,这些都是为了提高可用性。 更新内容如下: [SECURITY/BUGFIX] UI:修复了一个 Stored DOM XSS 漏洞CVE-2019-10215.#6098 [CHANGE] Metrics:将 prometheus_sd_configs_failed_total 重命名为 prometheus_sd_failed_configs,并更改为仪表#5254 [ENHANCEMENT] 在构建中包含 tsdb 工具#6089 [ENHANCEMENT] Service discovery:为 kubernetes 添加新的节点地址类型#5902 [ENHANCEMENT] UI:如果查询返回了一些警告,则显示警告#5964 [ENHANCEMENT] Remote write:减少系列缓存的内存使用量#5849 [ENHANCEMENT] Remote read:使用远程读取流传输以减少内存使用量#5703 [ENHANCEMENT] Metrics:添加了将远程最大/最小/所需分片写入队列管理器的指标#5787 [ENHANCEMENT] Promtool:在标签查询期间显示警告#5924 [ENHANCEMENT] Promtool:改进了解析错误规则时的错误消息#5965 [ENHANCEMENT] Promtool:更多提示规则#5515 [BUGFIX] Promtool:修复了由于标签重复而导致记录不一致的问题#6026 [BUGFIX] UI:从不健康的目标访问时,修复了服务发现视图#5915 [BUGFIX] Metrics format:输入短时 OpenMetrics 解析器崩溃#5939 [BUGFIX] UI:避免截断 Y 轴值#6014 更新说明及下载地址

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

React Native 0.61.0 发布,使用 React 编写原生应用

React Native 0.61.0 发布了,这是一个稳定版本,此版本带来的一些主要变化如下: 全新的热加载体验,称为“快速刷新”(Fast refresh)。它是默认开启的,可以在开发人员菜单下访问。敬请期待在即将发布的博客文章中有关此功能的更多详细信息。 React 版本已更新至 16.9-0ccedf3 通过 use_frameworks 更好地支持 CocoaPods 更新说明及下载地址

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

Prometheus 2.12 发布,Go 编写的服务监控系统

服务监控系统 Prometheus 2.12已发布,Prometheus 是一个 Go 语言开发的开源的服务监控系统和时间序列数据库。该版本引入了一些新特性,比如记录其他组件、增强功能和修复 bug,这些都是为了提高可用性。 Prometheus 2.12 是跟踪日志文件中的 Active PromQL 查询的第一个版本。查询以 JSON 格式写入 mmaped 文件,并在完成后删除。如果软件崩溃,在故障发生时激活的查询将在 stdout 上重新运行。 具体内容如下: 跟踪日志文件中当前活动的 PromQL 查询 启用并提供 MIPS 64/mips64le 架构的二进制文件 提高目标 web UI 和 API 端点的响应能力 更精确地刷新 TSDB 页面 添加 Prometheus_TSDB_RENTITY_DEBCES 度量 在启动时添加日志记录 提高 TSDB 内存利用率 修复在远程读取中检查重复标签名称的问题 修复当显示不同步服务器时间警告时的 JavaScript 错误 修复仅在发现检查点号时检查最后一个目录的问题 修复 Wal 观察者辅助函数中的错误传播 正确处理警报模板中的空标签 更新日志: https://github.com/prometheus/prometheus/releases/tag/v2.12.0

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

React Native 0.60.5 发布,使用 React 编写原生应用

React Native 0.60.5 发布了,这是一个补丁版本,更新内容如下: 新增 为新项目添加了默认的 Prettier 配置 (f4d5e8cby@jpdriver) Android 将 showSoftInputOnFocus 添加到 TextInput (b476ca0) 变动 CLI 更新至^2.6.0 (72473c7by@thymikee) 修复 确保使用正确版本的 Metro bundler(0.54.1) (1bb197aby@kelset) Android 在发布版本中修复 Android 中的 ClassNotFound 异常 (ffdf3f2by@thecodrr) 运行 JS 服务器时删除不必要的标志 (5a4fac7by@thecodrr) 在 android 上正确设置边框半径 (feb931fby@cabelitos) 修复 Android 上辅助功能标签末尾添加逗号的问题 (812abfdby@marcmulcahy) iOS 不要在 App Extension 中调用 sharedApplication (683908dby@zhongwuzw) 删除 fishhook (95c747eby@mmmulani) 更新说明及下载地址

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

10 个实战及面试常用 Shell 脚本编写

注意事项 1)开头加解释器:#!/bin/bash 2)语法缩进,使用四个空格;多加注释说明。 3)命名建议规则:变量名大写、局部变量小写,函数名小写,名字体现出实际作用。 4)默认变量是全局的,在函数中变量local指定为局部变量,避免污染其他作用域。 5)有两个命令能帮助我调试脚本:set -e 遇到执行非0时退出脚本,set-x 打印执行过程。 6)写脚本一定先测试再到生产上。 1 获取随机字符串或数字 获取随机8位字符串: 获取随机8位数字: cksum:打印CRC效验和统计字节 2 定义一个颜色输出字符串函数 function关键字定义一个函数,可加或不加。 3 批量创建用户 4 检查软件包是否安装 5 检查服务状态 6 检查主机存活状态 方法1:将错误IP放到数组里面判断是否ping失败三次 方法2:将错误次数放到FAIL_COUNT变量里面判断是否ping失败三次 方法3:利用for循环将ping通就跳出循环继续,如果不跳出就会走到打印ping失败 7 监控CPU、内存和硬盘利用率 1)CPU 借助vmstat工具来分析CPU统计信息。 2)内存 3)硬盘 8 批量主机磁盘利用率监控 前提监控端和被监控端SSH免交互登录或者密钥登录。 写一个配置文件保存被监控主机SSH连接信息,文件内容格式:IP User Port 9 检查网站可用性 1)检查URL可用性 使用方法:check_url www.baidu.com 2)判断三次URL可用性 思路与上面检查主机存活状态一样。 10 检查MySQL主从同步状态 本章写的Shell脚本例子都比较实用,在面试题中也经常出现,希望大家参考着多动手写写,不要复制粘贴就拿来跑,这样是学不会的! 欢迎工作一到五年的Java工程师朋友们加入Java填坑之路:860113481 群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

资源下载

更多资源
Mario

Mario

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

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册