网站建设有几种方式/电商seo优化是什么
新钛云服已累计为您分享772篇技术干货
介绍
Kube-downscaler 是一款开源工具,允许用户定义 Kubernetes 中 pod 资源自动缩减的时间。这有助于通过减少非高峰时段的资源使用量来降低基础设施成本。
在本文中,我们将详细介绍 kube-downscaler 的功能、安装和配置,以及它的用例和未来前景。
kube-downscaler的特点
Kube-downscaler 是一款基于调度的强大工具,用于在 Kubernetes 集群中对应用程序进行升级或降级。在本节中,我们将探讨该工具的一些关键功能:
与Kubernetes功能或工具的兼容性
Kube-downscaler 还支持水平 Pod 自动缩放 (HPA),并可以与 HPA 结合使用,以确保为应用程序维护所需的副本数量。这使得 kube-downscaler 能够为 Kubernetes 中的应用程序扩展提供额外的灵活性和细粒度的控制。
Karpenter 和 kube-downscaler 是两个可以结合使用的工具,可以为 Kubernetes 集群提供完整且强大的资源管理解决方案。通过结合使用 Karpenter 和 kube-downscaler,Kubernetes 集群可以从水平和垂直扩展中受益。 Downscaler 允许减少 Pod 数量,而 Karpenter 通过将 Pod 整合到更少或不同类型的机器上来优化节点利用率。
与Kubernetes功能或工具的兼容性
Kube-downscaler 还支持水平 Pod 自动缩放 (HPA),并可以与 HPA 结合使用,以确保为应用程序维护所需的副本数量。这使得 kube-downscaler 能够为 Kubernetes 中的应用程序扩展提供额外的灵活性和细粒度的控制。
Karpenter 和 kube-downscaler 是两个可以结合使用的工具,可以为 Kubernetes 集群提供完整且强大的资源管理解决方案。通过结合使用 Karpenter 和 kube-downscaler,Kubernetes 集群可以从水平和垂直扩展中受益。 Downscaler 允许减少 Pod 数量,而 Karpenter 通过将 Pod 整合到更少或不同类型的机器上来优化节点利用率。
根据定义的时间段自动扩展部署副本
Kube-downscaler 可以根据预定义的时间段自动扩展部署副本。这意味着我们可以设置一个计划,在一天、一周或一个月的特定时间增加或减少副本数量。
比如,如果我们知道应用程序在一天中的某些时段遇到高流量,则可以将 kube-downscaler 配置为在这些时段自动扩展副本,然后在流量减少时缩小副本。
这可以允许在预期峰值负载的情况下进行扩展,而不是等待峰值负载发生并由 HPA 处理。这可以帮助优化资源使用并确保您的应用程序始终可用且响应迅速。
但是 Kube-downscaler 主要用于缩小副本并优化集群的成本,我们通常使用 HPA 来管理扩展。
kube-downscaler的安装和配置
kubernetes集群上kube-downscaler安装说明
从 GitHub 克隆 kube-downscaler 存储库:
git clone <https://codeberg.org/hjacobs/kube-downscaler.git>
进入 kube-downscaler 目录:
cd kube-downscaler
编辑
deploy/kube-downscaler.yaml
文件以根据您的具体需求自定义配置。例如,可以调整时区、计划和缩放规则。将配置应用到您的 Kubernetes 集群:
kubectl apply -f deploy/
此命令将部署 kube-downscaler 控制器并创建 kube-downscaler
部署。
可以通过检查 kube-downscaler
部署的日志来验证 kube-downscaler 控制器是否正在运行:
kubectl logs -f deployment/kube-downscaler
安装完成后,需要进行一下配置。
根据具体用户需求配置kube-downscaler
Kube-downscaler 通过在 Kubernetes 部署对象上使用注释来提供扩展计划的定制。
部署对象中的 downTimePeriod
注释可用于指定不应扩展部署的停机时间段。
minReplicas
注释可用于设置部署的最小副本数。
这些字段与 kube-downscaler 注释结合使用,允许您根据特定的业务需求和资源利用模式创建自定义的扩展计划。
通过调整这些字段,可以配置 kube-downscaler 以优化应用程序可用性和成本效率的方式扩展部署。
以下是使用 kube-downscaler 进行部署的简单配置。
apiVersion: apps/v1
kind: Deployment
metadata:name: random-deploymentannotations:# Kube-downscalerdownscaler/downtimePeriod: "Mon-Fri 00:00-07:00 Europe/Berlin"downscaler/minReplicas: 1
spec:replicas: 2selector:matchLabels:app: randomtemplate:metadata:labels:app: randomspec:containers:- name: random-containerimage: random-image
通过此配置,从周一到周五午夜到早上 7 点(在欧洲/柏林时间线上),副本数量将减少到 1 个。
kube-downscaler 将根据定义的计划自动开始缩减 pod。
目前我们已经在 Kubernetes 集群上安装并运行了 kube-downscaler。
算法
Kube-downscaler
如果满足以下所有条件,将缩减部署的副本:
current time不是“uptime”计划的一部分,也不是“downtime”计划的一部分。 如果为 true,则按以下顺序评估计划:
downscaler/downscale-period
或downscaler/downtime
工作负载定义的注释downscaler/upscale-period
或downscaler/uptime
工作负载定义的注释downscaler/downscale-period
或downscaler/downtime
工作负载命名空间上的注释downscaler/upscale-period
或downscaler/uptime
工作负载命名空间上的注释--upscale-period
或--default-uptime
CLI 参数--downscale-period
或--default-downtime
CLI 参数UPSCALE_PERIOD
或DEFAULT_UPTIME
环境变量DOWNSCALE_PERIOD
或DEFAULT_DOWNTIME
环境变量
工作负载的命名空间不是排除列表的一部分:
如果提供排除列表,它将用于代替默认值(仅包括
kube-system
)。
工作负载的标签与标签列表不匹配。
工作负载的名称不是排除列表的一部分
工作负载未标记为排除(注释
downscaler/exclude: "true"
或downscaler/exclude-until: "2024-04-05"
)没有活动 Pod 强制整个集群进入正常运行时间(注释
downscaler/force-uptime: "true"
)
Minimum replicas最小副本数
默认情况下,部署将缩减为零副本。这可以通过部署或其命名空间的注释进行配置, downscaler/downtime-replicas
也可以通过 CLI 使用 --downtime-replicas
.
Ex: downscaler/downtime-replicas: "1"
Specific workload特定工作负载
在正常的情况下 HorizontalPodAutoscalers
,该字段不能设置为零, 因此downscaler/downtime-replicas
至少 1
应设置为 。 关于 CronJobs
,它们的状态将按照我们的预期进行定义 suspend: true
。
注意点
请注意,默认的宽限期为 15 分钟适用于新的 nginx 部署,即
如果当前时间不在 ,它不会立即缩小
Mon-Fri 9-17 (Buenos Aires timezone)
,而是在 15 分钟后缩小。downscaler
最终会记录如下内容:
INFO: Scaling down Deployment default/nginx from 1 to 0 replicas (uptime: Mon-Fri 09:00-17:00 America/Buenos_Aires, downtime: never)
请注意,如果 HorizontalPodAutoscaler
(HPA) 与部署一起使用,请考虑以下事项:
如果需要缩减到 0 个副本,则应在 上
Deployment
应用注释。这是一种特殊情况,因为minReplicas
不允许在 HPA 上为 0。将部署副本设置为 0 实质上会禁用 HPA。在这种情况下,HPA 将发出事件,例如failed to get memory utilization: unable to get metrics for resource memory: no metrics returned from resource metrics API
没有 Pod 可以从中检索指标。如果需要缩小大于 0,则应在 HPA 上应用注释。这允许在停机期间根据外部流量动态扩展 Pod,并在停机期间保持较低的
minReplicas
流量,如果没有低流量。如果对部署而不是 HPA 进行批注,则会导致争用条件,即缩减部署,kube-downscaler
HPA 在部署更高时minReplicas
将其升级。
若要使用 在 HPA 上 --downtime-replicas=1
启用downscaler
,请确保将以下注释添加到部署和 HPA。
$ kubectl annotate deploy nginx 'downscaler/exclude=true'
$ kubectl annotate hpa nginx 'downscaler/downtime-replicas=1'
$ kubectl annotate hpa nginx 'downscaler/uptime=Mon-Fri 09:00-17:00 America/Buenos_Aires'
详细配置
Uptime/downtime spec
downscaler通过命令行参数、环境变量或 Kubernetes 注释进行配置。
时间定义(例如 DEFAULT_UPTIME
)接受以逗号分隔的规范列表,例如,以下配置将缩小非工作时间的所有部署:
DEFAULT_UPTIME="Mon-Fri 07:30-20:30 Europe/Berlin"
仅在周末和周五 20:00 后缩小:
DEFAULT_DOWNTIME="Sat-Sun 00:00-24:00 CET,Fri-Fri 20:00-24:00 CET'
每个时间规范可以采用以下两种格式之一:
重复规范格式
<WEEKDAY-FROM>-<WEEKDAY-TO-INCLUSIVE> <HH>:<MM>-<HH>:<MM> <TIMEZONE>
.时区值可以是任何时区,例如“US/Eastern”、“PST”或“UTC”。绝对规范格式,
<TIME_FROM>-<TIME_TO>
其中每个<TIME>
格式都是ISO 8601日期和时间的格式<YYYY>-<MM>-<DD>T<HH>:<MM>:<SS>[+-]<TZHH>:<TZMM>
。
基于periods的替代逻辑
您可以选择升级或缩减的时间段,而不是严格的正常运行时间或停机时间。时间定义是相同的。在这种情况下,放大或缩小只发生在时间段,其余时间将被忽略。
如果配置了升级或缩减周期,将忽略正常运行时间和停机时间。这意味着某些选项是互斥的,例如,您可以使用或 --default-downtime
,但不能同时使用 --downscale-period
两者。
此定义将在 19:00 到 20:00 之间缩减群集。如果手动升级集群,则在第二天 19:00-20:00 之前不会缩减集群。
DOWNSCALE_PERIOD="Mon-Sun 19:00-20:00 Europe/Berlin"
命令行选项
可用的命令行选项:
--dry-run
仅运行模式:不更改任何内容,只需打印将要执行的操作
--debug
调试模式:打印更多信息
--once
仅运行一次循环并退出
--interval
循环间隔(默认:30 秒)
--namespace
将downscaler限制为仅在单个命名空间(默认:所有命名空间)中工作。这主要适用于 kube-downscaler 的部署者只能访问给定命名空间(而不是集群访问权限)的部署场景。如果与 同时
--exclude-namespaces
使用 ,则不应用任何应用。--include-resources
将此类资源缩小为逗号分隔列表。
--grace-period
新部署在缩减部署之前的宽限期(以秒为单位)(默认值:15 分钟)。宽限期从创建部署时开始计算,即无论宽限期如何,更新的部署都将立即缩减。
--upscale-period
仅在给定时间段内纵向扩展的替代逻辑(默认:从不),也可以通过环境变量
UPSCALE_PERIOD
或通过每个部署downscaler/upscale-period
上的注释进行配置--downscale-period
仅在给定时间段内缩减的替代逻辑(默认:从不),也可以通过环境变量
DOWNSCALE_PERIOD
或通过每个部署downscaler/downscale-period
上的注释进行配置--default-uptime
要纵向扩展的默认时间范围(默认:始终),也可以通过环境变量
DEFAULT_UPTIME
或通过每个部署downscaler/uptime
上的注释进行配置--default-downtime
要缩减的默认时间范围(默认:从不),也可以通过环境变量
DEFAULT_DOWNTIME
或通过每个部署downscaler/downtime
上的注释进行配置--exclude-namespaces
从降级中排除命名空间(正则表达式模式列表,默认:kube-system),也可以通过环境变量
EXCLUDE_NAMESPACES
进行配置。如果与 同时--namespace
使用 ,则不应用任何应用。--exclude-deployments
从降级中排除特定部署/状态集/cronjobs(默认:kube-downscaler,downscaler),也可以通过环境变量
EXCLUDE_DEPLOYMENTS
进行配置。尽管名称如此,但此选项将与任何包含的资源类型(Deployment,StatefulSet,CronJob等)的名称匹配。--downtime-replicas
缩小到的副本的默认值,注释
downscaler/downtime-replicas
优先于此值。--deployment-time-annotation
可选:将使用的注释的名称,而不是资源的创建时间戳。如果您希望资源在部署后的宽限期 (
--grace-period
) 内保持纵向扩展,则应使用此选项。注释的时间戳值的格式必须与 Kubernetes 的格式完全相同:creationTimestamp
%Y-%m-%dT%H:%M:%SZ
。建议:通过部署工具自动设置此批注。--matching-labels
可选:kube-downscaleer 范围涵盖的工作负载标签列表。标签与列表中的任何工作负载都不匹配的所有工作负载都将被忽略。为了向后兼容,如果未指定此参数,kube-downscaler 将应用于所有资源。
Namespace Defaults命名空间默认值
DEFAULT_UPTIME
、 DEFAULT_DOWNTIME
和 FORCE_UPTIME
排除也可以使用命名空间注释进行配置。在配置的情况下,这些值将取代其他全局默认值。
apiVersion: v1
kind: Namespace
metadata:name: foolabels:name: fooannotations:downscaler/uptime: Mon-Sun 07:30-18:00 CET
命名空间级别支持以下批注:
downscaler/upscale-period
downscaler/downscale-period
downscaler/uptime
:为此命名空间中的所有资源设置“正常运行时间”downscaler/downtime
:为此命名空间中的所有资源设置“停机时间”downscaler/force-downtime
:强制缩减此命名空间中的所有资源 - 可以是true
/false
downscaler/force-uptime
:强制向上扩展此命名空间中的所有资源 - 可以是true
/false
downscaler/exclude
:设置为 以true
排除命名空间中的所有资源downscaler/exclude-until
:暂时排除命名空间中的所有资源,直到给定的时间戳downscaler/downtime-replicas
:覆盖默认目标副本以缩小到(默认值:零)
使用案例
该工具的主要用例是通过优化 Kubernetes 集群资源的利用率来降低成本。不过,它也可以用来预热集群,避免过度依赖 HPA。
虽然这不是其主要目的,但这种组合提供了一种替代解决方案,可确保应用程序的高可用性,同时最大限度地降低基础设施成本。
降低成本
kube-downscaler 的另一个用例是防止高峰使用期间的服务中断。通过定义在高需求期间扩展资源的计划,kube-downscaler 可以帮助预先扩展部署并避免 HPA 延迟,以确保应用程序即使在高峰使用期间也保持可用和响应。
服务中断预防
kube-downscaler 的另一个用例是防止高峰使用期间的服务中断。通过定义在高需求期间扩展资源的计划,kube-downscaler 可以帮助预先扩展部署并避免 HPA 延迟,以确保应用程序即使在高峰使用期间也保持可用和响应。
建议
基于预定义计划的扩展,这可能并不适合所有用例。此外,它不支持自动缩放,这意味着用户必须手动调整缩放计划以满足不断变化的需求。
另一种可供考虑的解决方案是 Keda。 Keda是一个开源项目,为Kubernetes应用程序提供动态自动伸缩功能。使用 Keda,用户可以根据各种指标(例如队列长度、CPU 使用率或自定义指标)设置自定义扩展规则。
这允许对资源使用进行更精细的控制,并确保应用程序始终能够正确扩展以满足需求。
此外,Keda 兼容广泛的 Kubernetes 应用程序,包括有状态和无状态应用程序,并支持多种事件源,例如 Azure Event Hubs、Kafka 和 RabbitMQ。
结论
Kube-downscaler 是管理 Kubernetes 集群中资源使用情况的强大工具。通过定义扩展计划,用户可以优化集群中的资源使用并降低成本,同时确保应用程序即使在高峰使用期间也保持可用和响应。
虽然 kube-downscaler 是管理 Kubernetes 集群中资源使用情况的一个有价值的工具,但它可能有一些限制。如果需要对资源扩展进行更精细的控制或需要自动扩展功能,那么可能值得考虑像 Keda 这样的替代解决方案。
推荐阅读
推荐视频
相关文章:

使用 kube-downscaler 降低Kubernetes集群成本
新钛云服已累计为您分享772篇技术干货 介绍 Kube-downscaler 是一款开源工具,允许用户定义 Kubernetes 中 pod 资源自动缩减的时间。这有助于通过减少非高峰时段的资源使用量来降低基础设施成本。 在本文中,我们将详细介绍 kube-downscaler 的功能、安装…...

LeetCode热题100——哈希表
哈希表 1.两数之和2.字母异位词分组3.最长连续序列 1.两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。可以按任意顺序返回答案。 // 题解思路:使用哈…...

Kubeadm
目录 绪论:实验步骤 1、环境准备 2、所有节点安装docker 3、所有节点安装kubeadm,kubelet和kubectl 4、部署K8S集群 5、部署 Dashboard 6、安装Harbor私有仓库 master(2C/4G,cpu核心数要求大于2) 192.168.…...

【Overload游戏引擎细节分析】PBR材质Shader---完结篇
PBR基于物理的渲染可以实现更加真实的效果,其Shader值得分析一下。但PBR需要较多的基础知识,不适合不会OpenGL的朋友。 一、PBR理论 PBR指基于物理的渲染,其理论较多,需要的基础知识也较多,我在这就不再写一遍了&…...

C++设计模式_18_State 状态模式
State和Memento被归为“状态变化”模式。 文章目录 1. “状态变化”模式1.1 典型模式 2. 动机 (Motivation)3. 代码演示State 状态模式3.1 常规方式3.2 State 状态模式 4. 模式定义5. 结构( Structure )6. 要点总结7. 其他参考 1. “状态变化”模式 在组件构建过程中…...

详解final, abstract, interface关键字
一.final关键字 1.final关键字介绍 ——final关键字可以去修饰类、方法、属性和局部变量 2.final关键字的作用 1)final修饰类,这个类不能被其他类继承 2)final修饰方法,方法不能被重写 3)final修饰属性,属…...

统计特殊四元组
题记: 给你一个 下标从 0 开始 的整数数组 nums ,返回满足下述条件的 不同 四元组 (a, b, c, d) 的 数目 : nums[a] nums[b] nums[c] nums[d] ,且a < b < c < d 示例 1: 输入: nums [1,2,3…...

腾讯云轻量应用服务器“镜像”怎么选择合适?
腾讯云轻量应用服务器镜像怎么选择?如果是用来搭建网站可以选择宝塔Linux面板腾讯云专享版,镜像系统根据实际使用来选择,腾讯云百科txybk.com来详细说下腾讯云轻量应用服务器镜像的选择方法: 腾讯云轻量应用服务器镜像选择 轻量…...

Ruby模块和程序组织
和类一样,模块是一组方法和常量的集合。 和类不同,模块没有实例,取而代之的是可以将特殊模块的功能添加到一个类或者指定对象之中。 Class类是Module类的一个子类,因此每一个类对象也是一个模块对象 一、模块创建和基础应用 编写…...

14、SpringCloud -- WebSocket 实时通知用户
目录 实时通知用户需求:代码:前端:后端:WebSocket创建 websocket-server 服务添加依赖:配置 yml 和 启动类:前端:后端代码:注意:测试:总结:实时通知用户 需求: 用户订单秒杀成功之后,对用户进行秒杀成功通知。 弹出个提示框来提示。 代码: 前端:...

智能井盖传感器推荐,万宾科技助力城市信息化建设
随着科技产品更新换代进程加快,人工智能在人们日常生活之中逐渐普及开来,深入人们生活的方方面面,影响城市基础设施建设工程。例如在大街小巷之中的井盖作为城市基础建设的一个重要部分,一旦出现松动倾斜或凸起等异常问题…...

3D模型格式转换工具HOOPS Exchange对工业级3D产品HOOPS的支持与应用
一、概述 HOOPS Exchange是一套高性能模型转换软件库,可以给软件提供强大的模型的导入和导出功能,我们可以将其单独作为转换工具使用,也可以将其集成到自己的软件中。 同样,HOOPS 的其它产品,也离不开HOOPS Exchange…...

table 表体滚动, 表头、表尾固定
在开发报表中,如果报表数据行过多页面无法全部显示,或者内容溢出div,需要把表头和表尾固定表体滚动这样就可以在页面上全部显示,并且不会溢出div 效果:最终实现效果 代码:<!DOCTYPE html> <html&g…...

第57篇-某钩招聘网站加密参数分析【2023-10-31】
声明:该专栏涉及的所有案例均为学习使用,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!如有侵权,请私信联系本人删帖! 文章目录 一、前言二、网站分析1.X-S-HEADER参数2.请求参数data3.响应机密值data一、前言 网址: aHR0cHM6Ly93d3cubGFnb3UuY29t…...

C语言数据结构之数据结构入门
目录 数据结构介绍 数据结构发展史 何为算法 数据结构基础 基本概念和术语 四大逻辑结构(Logic Structure) 数据类型 理解复杂度概念 时间空间复杂度定义 度量时间复杂度的方法 程序运行时的内存与地址 编程预备 数据结构介绍 数据结构发展…...

如何知道服务器的某个端口是否打开
1、telnet 命令:telnet ip port,port即端口,我们一般最常见的命令就是telnet,但是telnet使用的是tcp协议,换句话说telnet只能检测tcp的这个端口打开了没 若是端口打开,会出现下列信息 失败的是这个 如…...

【ICCV‘23】One-shot Implicit Animatable Avatars with Model-based Priors
文章目录 前置知识 前置知识 1)SMPL模型 \quad SMPL这类方法只建模穿很少衣服的人体(裸体模型),它只能刻画裸体角色的动画,并不能刻画穿衣服的人体的动画 2)data-efficient \quad 这个词推荐用ÿ…...

关于息肉检测和识别项目的总结
前言 整体的思路:首先息肉数据集分为三类: 1.正常细胞 2. 增生性息肉 3. 肿瘤要想完成这个任务,首先重中之重是分割任务,分割结果的好坏, 当分割结果达到一定的准确度后,开始对分割后的结果进行下游分类…...

Jetson Xavier NX FFmpeg支持硬件编解码
最近在用Jetson Xavier NX板子做视频处理,但是CPU进行视频编解码,效率比较地下。 于是便考虑用硬解码来对视频进行处理。 通过jtop查看,发现板子是支持 NVENC硬件编解码的。 1、下载源码 因为需要对ffmpeg进行打补丁修改,因此需要编译两份源码 1.1、编译jetson-ffmpeg …...

518抽奖软件,为什么说比别的抽奖软件更美观精美?
518抽奖软件简介 518抽奖软件,518我要发,超好用的年会抽奖软件,简约设计风格。 包含文字号码抽奖、照片抽奖两种模式,支持姓名抽奖、号码抽奖、数字抽奖、照片抽奖。(www.518cj.net) 精致美观功能 字体平滑无锯齿图片放大后清晰…...

React的组件学习
React的组件学习 参考资料:https://zh-hans.react.dev/learn/your-first-component 一、定义组件 export default function Profile() {return (<imgsrc"https://i.imgur.com/MK3eW3Am.jpg"alt"Katherine Johnson"/>) }以下是构建组件…...

uni-app配置微信开发者工具
一、配置微信开发者工具路径 工具->设置->运行配置->小程序运行配置->微信开发者工具路径 二、微信开发者工具开启服务端口...

肺癌不再是老年病:33岁作家的离世引发关注,有这些情况的请注意
近期,90后网络小说家七月新番和26岁男艺人蒋某某因肺癌去世,引发关注。他们都没有吸烟习惯,那么他们为什么会得肺癌呢?浙大二院呼吸内科副主任医师兰芬说,现在年轻人熬夜、加班导致身体过劳,在劳累情况下身…...

【兔子王赠书第4期】用ChatGPT轻松玩转机器学习与深度学习
文章目录 前言机器学习深度学习ChatGPT推荐图书粉丝福利尾声 前言 兔子王免费赠书第4期来啦,突破传统学习束缚,借助ChatGPT的神奇力量,解锁AI无限可能! 机器学习 机器学习是人工智能领域的一个重要分支,它的目的是让…...

Ubuntu18.04 ROS Melodic的cv_bridge指向问题(四种方式,包括opencv4)(转载)
转载自: 【精选】Ubuntu18.04 ROS Melodic的cv_bridge指向问题(四种方式,包括opencv4)_XiangrongZ的博客-CSDN博客...

Android任务栈和启动模式
Andrcid中的任务栈是一种用来存放Activity实倒的容器。任务最大的特点就是先进后出,它主要有两个基本操作,分别是压栈和出栈。通常Andaid应用程序都有一个任务栈,每打开一个Activity时,该Activity就会被压入任务栈。每销毁一个Act…...

电脑加密软件哪个好?电脑加密软件推荐
电脑是我们办公离不开的工具,而为了保护电脑数据安全,我们可以使用专业的电脑加密软件来进行加密保护。那么,电脑加密软件哪个好呢?下面我们就来了解一下。 文件加密——超级加密3000 想要安全加密电脑重要文件,我们可…...

如何优雅地单元测试 Kotlin/Java 中的 private 方法?
翻译自 https://medium.com/mindorks/how-to-unit-test-private-methods-in-java-and-kotlin-d3cae49dccd ❓如何单元测试 Kotlin/Java 中的 private 方法❓ 首先,开发者应该测试代码里的 private 私有方法吗? 直接信任这些私有方法,测试到…...

单元测试,集成测试,系统测试的区别是什么?
实际的测试工作当中,我们会从不同的角度对软件测试的活动进行分类,题主说的“单元测试,集成测试,系统测试”,是按照开发阶段进行测试活动的划分。这种划分完整的分类,其实是分为四种“单元测试,…...

数据结构(超详细讲解!!)第十八节 串(KMP算法)
1.BF算法 算法在字符比较不相等,需要回溯(即ii-j1):即退到s中的下一个字符开始进行继续匹配。 最好情况下的时间复杂度为O(m)。 最坏情况下的时间复杂度为O(nm)。 平均的时间复杂度为O(nm)。 2.KMP算法 KMP算法是D.E.Knuth、…...