Cyber Security 101-Build Your Cyber Security Career-Security Principles(安全原则)
了解安全三元组以及常见的安全模型和原则。
任务1:介绍
安全已成为一个流行词;每家公司都想声称其产品或服务是安全的。但事实真的如此吗?
在我们开始讨论不同的安全原则之前,了解我们正在保护资产的对手至关重要。您是否试图阻止蹒跚学步的孩子访问您的笔记本电脑?或者您是否正在尝试保护包含价值数百万美元的技术设计的笔记本电脑?对幼儿和工业间谍行为者使用精确的保护机制将是荒谬的。因此,了解我们的对手是必须的,这样我们才能了解他们的攻击并开始实施适当的安全控制。
不可能实现完美的安全性;没有解决方案是 100% 安全的。因此,我们尝试改善我们的安全态势,使我们的对手更难获得访问权限。
这个房间的目标是:
- 解释安全功能:机密性、完整性和可用性 (CIA)。
- 提出安全三元组的对立面,CIA:披露、更改和销毁/否认 (DAD)。
- 介绍安全模型的基本概念,例如 Bell-LaPadula 模型。
- 解释安全原则,例如深度防御、零信任和信任但验证。
- 引入 ISO/IEC 19249。
- 解释 Vulnerability(脆弱性)、Threat (威胁) 和 Risk(风险)之间的区别。
回答以下问题
想想你如何描述某物是安全的。
任务2:中央情报局
在我们描述安全之前,我们需要更好地考虑构成安全性的要素。当您想判断系统的安全性时,您需要从安全三元组的角度来考虑:机密性、完整性和可用性 (CIA)。
- 机密性确保只有预期的人员或接收者才能访问数据。
- 完整性旨在确保数据无法更改;此外,如果发生任何更改,我们可以检测到它。
- 可用性 旨在确保系统或服务在需要时可用。
让我们考虑一下 CIA 安全三元组在下在线购物的情况下:
- 保密性: 在网上购物期间,您希望您的信用卡号仅披露给处理付款的实体。如果您怀疑您的信用卡信息会被泄露给不受信任的一方,您很可能会避免继续进行交易。此外,如果数据泄露导致个人身份信息(包括信用卡)泄露,公司将在多个层面上蒙受巨大损失。
- 完整性:填写订单后,如果入侵者可以更改您提交的送货地址,包裹将被发送给其他人。如果没有数据完整性,您可能非常不愿意向该卖家下订单。
- 可用性: 要下在线订单,您将浏览商店的网站或使用其官方应用程序。如果该服务不可用,您将无法浏览产品或下订单。如果您继续面临此类技术问题,您最终可能会放弃并开始寻找不同的在线商店。
让我们考虑一下与患者记录和相关系统相关的 CIA:
- 保密性:根据现代国家的各种法律,医疗保健提供者必须确保和维护医疗记录的机密性。因此,如果医疗保健提供者非法披露患者的医疗记录,他们可能会被追究法律责任。
- 完整性:如果患者记录被意外或恶意更改,可能会导致错误的治疗,进而导致危及生命的情况。因此,如果不确保医疗记录的完整性,该系统将毫无用处且可能有害。
- 可用性:当患者前往诊所跟进他们的医疗状况时,系统必须可用。不可用的系统意味着医生无法访问患者的记录,因此无法知道任何当前症状是否与患者的病史有关。这种情况会使医学诊断更具挑战性和容易出错。
所有三个安全功能的重点不需要相同。一个例子是大学公告;虽然它通常不是机密的,但文档的完整性至关重要。
超越 CIA
在 CIA 安全三元组之外再向前迈进一步,我们可以考虑:
- 真实性: 正品意味着没有欺诈或假冒。真实性是关于确保文档/文件/数据来自声明的来源。
- 不可否认性:否认意味着拒绝承认某物的有效性。不可否认性确保原始源无法否认它们是特定文档/文件/数据的源。这一特性对于购物、患者诊断和银行业务等各个领域都是必不可少的。
这两个要求密切相关。区分真实文件或订单和虚假文件或订单的需求是必不可少的。此外,确保另一方不能否认是源头对于许多系统可用至关重要。
在网上购物时,根据您的业务,您可能会容忍尝试以货到付款的方式交付 T 恤,但后来得知收件人从未下过此类订单。但是,没有公司可以容忍运送 1000 辆汽车来发现订单是假的。在购物订单示例中,您想要确认所述客户确实下了此订单;这就是真实性。此外,您要确保他们无法否认下达此订单;这就是不可否认。
作为公司,如果您收到 1000 辆汽车的发货订单,您需要确保此订单的真实性;此外,消息来源不应否认下达此类订单。没有真实性和不可否认性,业务就无法开展。
帕克六边形
1998 年,Donn Parker 提出了 Parkerian Hexad,这是一组 6 个安全元件。他们是:
- 可用性
- 效用
- 正直
- 真实性
- 保密性
- 占有
我们已经介绍了上述六个要素中的四个。让我们讨论剩下的两个元素:
- 效用: 效用侧重于信息的有用性。例如,用户可能丢失了访问具有加密存储的笔记本电脑的解密密钥。尽管用户仍然拥有磁盘完好无损的便携式计算机,但他们无法访问它们。换句话说,尽管仍然可用,但信息的形式是无用的,即没有用处。
- 占有:此安全要素要求我们保护信息免遭未经授权的获取、复制或控制。例如,对手可能会占用备份驱动器,这意味着只要他们拥有该驱动器,我们就会失去对信息的所有权。或者,攻击者可能会使用勒索软件成功加密我们的数据;这也会导致失去对数据的所有权。
单击“查看站点”并回答五个问题。你最后得到的旗帜是什么?
任务3:DAD
系统的安全性通过多种方式之一受到攻击。它可以通过披露秘密数据、更改数据或销毁数据来实现。
- Disclosure披露与保密相反。换句话说,泄露机密数据就是对机密性的攻击。
- Alteration 是 Integrity 的对立面。例如,支票的完整性是必不可少的。
- Destruction/Denial销毁/否认是可用性的对立面。
与 CIA 三元组相反的是 DAD 三元组:披露、更改和销毁。
考虑前面的患者记录和相关系统示例:
- 披露:与大多数现代国家/地区一样,医疗保健提供者必须对医疗记录保密。因此,如果攻击者成功窃取了其中一些医疗记录并将其转储到网上以供公开查看,医疗保健提供商将因这种数据泄露攻击而蒙受损失。
- 更改:如果攻击者设法修改了患者的医疗记录,请考虑情况的严重性。这种更改攻击可能会导致错误的治疗,因此,这种更改攻击可能会危及生命。
- 销毁/否认:考虑医疗设施完全无纸化的情况。如果攻击者设法使数据库系统不可用,则该设施将无法正常运行。他们可以暂时回到纸上;但是,患者记录将不可用。这种否认攻击将使整个设施停滞不前。
防止披露、更改和破坏/否认具有绝对的重要性。这种保护相当于努力维护机密性、完整性和可用性。
将机密性和完整性保护到极致可能会限制可用性,而将可用性提高到极致可能会导致失去机密性和完整性。良好的安全原则实施需要在这三者之间取得平衡。
任务4:安全模型的基本概念
我们了解到,安全三元组以机密性、完整性和可用性 (CIA) 为代表。有人可能会问,我们如何创建一个确保一个或多个安全功能的系统?答案是使用安全模型。在本任务中,我们将介绍三个基本安全模型:
- Bell-LaPadula 模型
- Biba 诚信模型
- 克拉克-威尔逊模型
Bell-LaPadula 模型
Bell-LaPadula 模型旨在通过指定三条规则来实现机密性:
- 简单安全属性:此属性称为“无读取”;它指出,较低安全级别的主体无法读取较高安全级别的对象。此规则阻止访问超过授权级别的敏感信息。
- Star Security Property:此属性称为“no write down”;它指出,较高安全级别的 Subject 无法写入较低安全级别的 Object。此规则可防止将敏感信息泄露给安全级别较低的主体。
- Discretionary-Security 属性:此属性使用访问矩阵来允许读取和写入操作。下表显示了一个示例访问矩阵,并与前两个属性结合使用。
科目 | 对象 A | 对象 B |
---|---|---|
实验体 1 | 写 | 无访问权限 |
实验体 2 | 读/写 | 读 |
前两个属性可以概括为 “write up, read down”。您可以与安全许可较高的人员共享机密信息(书面记录),也可以从安全许可较低的人员那里接收机密信息(向下阅读)。
Bell-LaPadula 模型存在一定的限制。例如,它不是为处理文件共享而设计的。
Biba 模型
Biba 模型旨在通过指定两个主要规则来实现完整性:
- Simple Integrity Property:此属性称为 “no read down”;不应从较低完整性的对象读取较高完整性的主题。
- Star Integrity 属性:此属性称为“无写入”;较低完整性的主体不应写入较高完整性的对象。
这两个属性可以概括为 “read up, write down”。这条规则与 Bell-LaPadula 模型形成鲜明对比,这并不奇怪,因为一个关注机密性,而另一个关注完整性。
Biba Model 存在各种限制。一个例子是它不处理内部威胁 (内部威胁)。
Clark-Wilson 模型
Clark-Wilson 模型还旨在通过使用以下概念来实现完整性:
- 受约束数据项 (CDI):这是指我们要保留其完整性的数据类型。
- 不受约束的数据项 (UDI):这是指 CDI 之外的所有数据类型,例如用户和系统输入。
- 转换过程 (TP):这些过程是编程操作,例如读取和写入,应保持 CDI 的完整性。
- 完整性验证程序 (IVP):这些程序检查并确保 CDI 的有效性。
我们只介绍了三种安全模型。读者可以探索许多其他安全模型。示例包括:
- Brewer 和 Nash 模型
- Goguen-Meseguer 模型
- 萨瑟兰模型
- Graham-Denning 模型
- Harrison-Ruzzo-Ullman 模型
任务5:深度防御
Defence-in-Depth 是指创建多级安全系统;因此它也被称为多级安全性。
考虑下面的类比:你有一个上锁的抽屉,用来存放重要的文件和昂贵的东西。抽屉已锁上;但是,您是否希望这个抽屉锁成为小偷和您的昂贵物品之间唯一的东西?如果我们考虑多级安全性,我们更希望锁上抽屉,锁上相关房间,锁上公寓的正门,锁上大楼的大门,您甚至可能想在途中加入一些安全摄像头。尽管这些多级安全无法阻止每个小偷,但它们会阻止其中的大部分小偷并减慢其他小偷的速度。
任务6:国际标准化组织(ISO)/IEC 19249
国际标准化组织 (ISO) 和国际电工委员会 (IEC) 制定了 ISO/IEC 19249。在本任务中,我们将简要介绍 ISO/IEC 19249:2017 信息技术 - 安全技术 - 安全产品、系统和应用程序的架构和设计原则目录。目的是更好地了解国际组织将教授哪些安全原则。
ISO/IEC 19249 列出了五项架构原则:
- Domain Separation:每组相关组件都分组为单个实体;组件可以是应用程序、数据或其他资源。每个实体都将具有自己的域,并被分配一组通用的安全属性。例如,考虑 x86 处理器权限级别:操作系统内核可以在环 0(最高权限级别)中运行。相比之下,用户模式应用程序可以在环 3 (最低权限级别) 中运行。域分离包含在 Goguen-Meseguer 模型中。
- 分层:当系统被构建成许多抽象级别或层时,可以在不同级别实施安全策略;此外,验证操作也是可行的。让我们考虑一下 OSI(开放系统互连)模型,它有七层网络。OSI 模型中的每个层都为其上方的层提供特定服务。这种分层使得实施安全策略并轻松验证系统是否按预期工作成为可能。编程世界的另一个示例是磁盘操作;程序员通常使用所选高级编程语言提供的 Disk Read 和 Write 函数。编程语言隐藏了低级系统调用,并将它们呈现为更用户友好的方法。分层与 Defense in Depth 有关。
- 封装:在面向对象编程 (OOP) 中,我们隐藏了低级实现,并通过为此目的提供特定方法来防止直接操作对象中的数据。例如,如果你有一个 clock 对象,你将提供一个方法,而不是让用户直接访问该变量。目的是防止变量的值无效。同样,在较大的系统中,您将使用(甚至设计)适当的应用程序编程接口 (API) 来访问数据库。
increment()
seconds
- 冗余:此原则可确保可用性和完整性。有许多与冗余相关的示例。考虑具有两个内置电源的硬件服务器的情况:如果一个电源发生故障,系统将继续运行。考虑具有三个驱动器的 RAID 5 配置:如果一个驱动器发生故障,则使用其余两个驱动器的数据仍然可用。此外,如果其中一个磁盘上的数据被错误地更改,它将通过奇偶校验检测到它,从而确保数据的完整性。
- 虚拟化:随着云服务的出现,虚拟化变得越来越普遍和流行。虚拟化的概念是在多个操作系统之间共享一组硬件。虚拟化提供沙盒功能,可改进安全边界、安全引爆和对恶意程序的观察。
ISO/IEC 19249 教授了五项设计原则:
- 最低权限:在回答“谁可以访问什么”这个问题时,您也可以非正式地将其表述为“需要基础”或“需要知道基础”。最小权限原则告诉我们,您应该为某人提供最少的权限来执行他们的任务,仅此而已。例如,如果用户需要能够查看文档,则应授予他们读取权限,而不授予其写入权限。
- 攻击面最小化:每个系统都有攻击者可能用来破坏系统的漏洞。一些漏洞是已知的,而另一些漏洞尚未被发现。这些脆弱性代表了我们应该努力降低的风险。例如,在强化 Linux 系统的步骤之一中,我们将禁用任何我们不需要的服务。
- 集中式参数验证:许多威胁是由于系统接收了输入,尤其是来自用户的输入。无效的输入可用于利用系统中的漏洞,例如拒绝服务和远程代码执行。因此,参数验证是确保系统状态正确的必要步骤。考虑到系统处理的参数数量,参数的验证应集中在一个库或系统中。
- 集中式一般安全服务:作为一项安全原则,我们应该致力于集中所有安全服务。例如,我们将创建一个用于身份验证的集中式服务器。当然,您可以采取适当的措施来确保可用性并防止创建单一故障点。
- 为错误和异常处理做准备:每当我们构建一个系统时,我们应该考虑到错误和异常已经发生和将要发生。例如,在购物应用程序中,客户可能会尝试为缺货商品下订单。数据库可能会过载并停止响应 Web 应用程序。该原则教导系统应设计为故障安全;例如,如果防火墙崩溃,它应该阻止所有流量,而不是允许所有流量。此外,我们应该注意确保错误消息不会泄露我们认为机密的信息,例如转储包含与其他客户相关的信息的内存内容。
在以下问题中,请参考上述 ISO/IEC 19249 五项设计原则。用 1 到 5 之间的数字回答,具体取决于设计原则的数字。
任务7:零信任与信任,但要验证
信任是一个非常复杂的话题;实际上,没有信任,我们就无法运作。如果有人认为笔记本电脑供应商在笔记本电脑上安装了间谍软件,他们很可能最终会重建系统。如果有人不信任硬件供应商,他们就会完全停止使用它。如果我们在商业层面上考虑信任,事情只会变得更加复杂;但是,我们需要一些指导性安全原则。我们感兴趣的关于信任的两个安全原则:
- 信任但验证
- 零信任
信任但验证:该原则告诉我们,即使我们信任一个实体及其行为,我们也应该始终进行验证。实体可以是用户或系统。验证通常需要设置适当的日志记录机制;验证表示检查日志以确保一切正常。实际上,验证所有内容是不可行的;试想一下,审查单个实体执行的所有操作(例如单个用户浏览的 Internet 页面)所需的工作。这需要自动化的安全机制,例如代理、入侵检测和入侵防御系统。
零信任:该原则将信任视为一种漏洞,因此,它迎合了与内部相关的威胁。在将信任视为漏洞后,零信任试图消除它。它是间接地教导,“永远不要相信,永远验证”。换句话说,每个实体都被认为是对抗性的,除非证明不是这样。Zero Trust 不会根据设备的位置或所有权向设备授予信任。这种方法与信任内部网络或企业拥有的设备的旧模型形成鲜明对比。在访问任何资源之前,都需要进行身份验证和授权。因此,如果发生任何违规行为,如果实施了 Zero Trust 架构,损害将得到更严格的控制。
微分段是用于 Zero Trust 的实施之一。它是指网段可以小到单个主机的设计。此外,段之间的通信需要身份验证、访问控制列表检查和其他安全要求。
在不对业务产生负面影响的情况下,我们可以应用 Zero Trust 的程度是有限的;然而,这并不意味着只要可行,我们就不应该应用它。
任务8:威胁与风险
我们需要注意三个术语以避免任何混淆。
- 脆弱性:易受攻击是指容易受到攻击或损害。在信息安全中,漏洞是一种弱点。
- 威胁:威胁是与此弱点或漏洞相关的潜在危险。
- 风险:风险与威胁行为者利用漏洞的可能性以及由此对业务产生的影响有关。
由于玻璃的性质,带有标准玻璃制成的门窗的展厅会受到弱点或脆弱性的影响。因此,玻璃门窗有被打破的威胁。陈列室业主应考虑风险,即玻璃门或窗被打破的可能性以及由此对业务的影响。
考虑另一个与信息系统直接相关的示例。您在一家医院工作,该医院使用特定的数据库系统来存储所有医疗记录。有一天,您正在关注最新的安全新闻,您了解到使用的数据库系统不仅容易受到攻击,而且已经发布了概念验证工作漏洞利用代码;发布的漏洞利用代码表明威胁是真实的。有了这些知识,您必须考虑由此产生的风险并决定下一步。
我们将在单独的房间里详细介绍威胁和风险。
任务9:结论
这个房间涵盖了与安全相关的各种原则和概念。到目前为止,您应该非常熟悉 CIA 和 DAD 以及其他术语,例如真实性、否认性、脆弱性、威胁和风险。我们参观了三种安全模型和 ISO/IEC 19249。我们介绍了不同的安全原则,例如深度防御、信任但验证和 Zero Trust。
最后,责任共担模型值得一提,尤其是在对云服务的依赖日益增加的情况下。需要各个方面来确保适当的安全性。它们包括硬件、网络基础设施、操作系统、应用程序等。但是,使用云服务的客户具有不同的访问级别,具体取决于他们使用的云服务。例如,基础架构即服务 (IaaS) 用户对操作系统具有完全控制权(和责任)。
另一方面,软件即服务 (SaaS) 用户无法直接访问底层操作系统。因此,在云环境中实现安全性需要云服务提供商和用户都做好自己的工作。责任共担模型是一个云安全框架,用于确保各方都了解其责任。
完成安全原则室后,您可以进入密码学入门室。
相关文章:
Cyber Security 101-Build Your Cyber Security Career-Security Principles(安全原则)
了解安全三元组以及常见的安全模型和原则。 任务1:介绍 安全已成为一个流行词;每家公司都想声称其产品或服务是安全的。但事实真的如此吗? 在我们开始讨论不同的安全原则之前,了解我们正在保护资产的对手至关重要。您是否试图阻止蹒跚学步…...
react-native网络调试工具Reactotron保姆级教程
在React Native开发过程中,调试和性能优化是至关重要的环节。今天,就来给大家分享一个非常强大的工具——Reactotron,它就像是一个贴心的助手,能帮助我们更轻松地追踪问题、优化性能。下面就是一份保姆级教程哦! 一、…...
Progressive Pretext Task Learning for Human Trajectory Prediction | 文献翻译
祥龙回首留胜景,金蛇起舞贺新程。 概述 行人轨迹预测是一项旨在预测行人未来位置的任务,它通常涵盖了从短期到长期的整个时间范围内的轨迹。然而,现有的研究试图通过单一、统一的训练范式来解决整个轨迹预测问题,往往忽视了行人轨…...
并发编程基础 - 并发编程的概念(C++)
前言 在当今多核处理器普及的时代,并发编程成为开发高性能应用程序的关键技术之一。无论是服务器端应用,桌面软件,还是移动应用,并发编程都扮演着重要角色。本文将详细介绍并发编程的基本概念,结合C语言特性ÿ…...
ARM嵌入式学习--第十天(UART)
--UART介绍 UART(Universal Asynchonous Receiver and Transmitter)通用异步接收器,是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用来与PC进行通信,包括与监控…...
OpenEuler学习笔记(十七):OpenEuler搭建Redis高可用生产环境
在OpenEuler上搭建Redis高可用生产环境,通常可以采用Redis Sentinel或Redis Cluster两种方式,以下分别介绍两种方式的搭建步骤: 基于Redis Sentinel的高可用环境搭建 安装Redis 配置软件源:可以使用OpenEuler的默认软件源&#…...
CTF从入门到精通
文章目录 背景知识CTF赛制 背景知识 CTF赛制 1.web安全:通过浏览器访问题目服务器上的网站,寻找网站漏洞(sql注入,xss(钓鱼链接),文件上传,包含漏洞,xxe,ssrf,命令执行,…...
java入门笔记基础语法篇(4)
变量 在Java中,每个变量都有一个类型(type)。在声明变量时,变量的类型位于变量 名之前。例如: int days; double salary; long earthPopulation; boolean done; 在Java中,每个声明以分号结束。变量名必须…...
【RocketMQ 存储】- broker 端存储单条消息的逻辑
文章目录 1. 前言2. DefaultMessageStore#asyncPutMessage 添加单条消息2.1 DefaultMessageStore#checkStoreStatus 检查存储服务的状态2.2 DefaultMessageStore#checkMessage 校验消息长度是否合法2.3 CommitLog#asyncPutMessage 核心存储逻辑2.4 MappedFile#appendMessage2.5…...
爬虫基础(四)线程 和 进程 及相关知识点
目录 一、线程和进程 (1)进程 (2)线程 (3)区别 二、串行、并发、并行 (1)串行 (2)并行 (3)并发 三、爬虫中的线程和进程 &am…...
29. C语言 可变参数详解
本章目录: 前言可变参数的基本概念可变参数的工作原理如何使用可变参数 示例:计算多个整数的平均值解析: 更复杂的可变参数示例:打印可变数量的字符串解析: 总结 前言 在C语言中,函数参数的数量通常是固定的ÿ…...
Java CAS操作
通过前面的学习认识到了CPU缓存,Java内存模型,以及线程安全的原子、可见、顺序三大特性。本文则重点认识CAS操作,这是Java并发编程常见的一个操作,AbstractQueuedSynchronizer基于此操作提供了丰富的同步器和各种锁。 CAS&#x…...
KNIME:开源 AI 数据科学
KNIME(Konstanz Information Miner)是一款开源且功能强大的数据科学平台,由德国康斯坦茨大学的软件工程师团队开发,自2004年推出以来,广泛应用于数据分析、数据挖掘、机器学习和可视化等领域。以下是对KNIME的深度介绍…...
超级强大的压缩和解压工具,免费解压
软件介绍 今天要给大家分享一款超厉害的软件 ——ZArchiver,在我心中,它堪称安卓平台目前最为强大的解压软件。 之前,我一直使用 MT 管理器来解压文件。然而,MT 管理器存在一些局限性。比如在处理解压分卷文件时,它有时…...
代码随想录_栈与队列
栈与队列 232.用栈实现队列 232. 用栈实现队列 使用栈实现队列的下列操作: push(x) – 将一个元素放入队列的尾部。 pop() – 从队列首部移除元素。 peek() – 返回队列首部的元素。 empty() – 返回队列是否为空。 思路: 定义两个栈: 入队栈, 出队栈, 控制出入…...
基于STM32的智能停车场管理系统设计
目录 引言系统设计 硬件设计软件设计 系统功能模块 车辆识别与进出管理模块车位检测与引导模块计费与支付模块数据存储与查询模块远程监控与异常报警模块 控制算法 车牌识别与车辆进出管理算法车位检测与引导算法计费与支付处理算法数据存储与远程反馈算法 代码实现 车辆检测与…...
告别重启!Vue CLI 动态代理配置实战:实现热更新与灵活配置
在前端开发中,代理配置是解决跨域问题的常见手段。尤其是在使用 Vue CLI 进行开发时,我们经常需要通过 devServer.proxy 来配置代理。然而,传统的代理配置通常是静态的,修改后需要重启开发服务器,这在频繁调整代理配置…...
Cocos Creator 3.8 2D 游戏开发知识点整理
目录 Cocos Creator 3.8 2D 游戏开发知识点整理 1. Cocos Creator 3.8 概述 2. 2D 游戏核心组件 (1) 节点(Node)与组件(Component) (2) 渲染组件 (3) UI 组件 3. 动画系统 (1) 传统帧动画 (2) 动画编辑器 (3) Spine 和 …...
【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.28 存储之道:跨平台数据持久化方案
好的,我将按照您的要求生成一篇高质量的Python NumPy文章。以下是第28篇《存储之道:跨平台数据持久化方案》的完整内容,包括目录、正文和参考文献。 1.28 存储之道:跨平台数据持久化方案 目录 #mermaid-svg-n1z37AP8obEgptkD {f…...
chrome源码剖析—UI架构消息机制
Chrome 浏览器的 UI 架构是高度模块化且基于现代图形技术和用户界面设计理念构建的。它的 UI 架构涵盖了窗口、标签页、控件、通知、菜单等组件的管理和交互。Chrome 的 UI 基本上是通过 views 框架和 Aura(Chrome 自己的 UI 层)构建的,后者又…...
面试经典150题——图的广度优先搜索
文章目录 1、蛇梯棋1.1 题目链接1.2 题目描述1.3 解题代码1.4 解题思路 2、最小基因变化2.1 题目链接2.2 题目描述2.3 解题代码2.4 解题思路 3、单词接龙3.1 题目链接3.2 题目描述3.3 解题代码3.4 解题思路 1、蛇梯棋 1.1 题目链接 点击跳转到题目位置 1.2 题目描述 给你一…...
Day30-【AI思考】-错题分类进阶体系——12维错误定位模型
文章目录 错题分类进阶体系——12维错误定位模型**一、认知层错误(根源性缺陷)****二、操作层错误(执行过程偏差)****三、心理层错误(元认知障碍)****四、进阶错误(专业级陷阱)** 错…...
利用Edu邮箱解锁Notion Pro,提升学习与工作效率
摘要: 本文将详细介绍如何通过Edu教育邮箱申请教育订阅,从而免费获得Notion Pro版的所有高级功能。此外,我们还将简要提及Edu邮箱的其他福利,如申请Azure 100免费VPS和OpenAI。通过对比Notion免费版和Pro版的差异,你将…...
剑指 Offer II 010. 和为 k 的子数组
comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20010.%20%E5%92%8C%E4%B8%BA%20k%20%E7%9A%84%E5%AD%90%E6%95%B0%E7%BB%84/README.md 剑指 Offer II 010. 和为 k 的子数组 题目描述 给定一个正整数数组和一个…...
【外文原版书阅读】《机器学习前置知识》2.用看电影推荐的例子带你深入了解向量点积在机器学习的作用
目录 3.3 Where Are You Looking, Vector? The Dot Product 个人主页:Icomi 大家好,我是Icomi,本专栏是我阅读外文原版书《Before Machine Learning》对于文章中我认为能够增进线性代数与机器学习之间的理解的内容的一个输出,希望…...
Vue.js组件开发-实现全屏平滑移动、自适应图片全屏滑动切换
使用Vue实现全屏平滑移动、自适应图片全屏滑动切换的功能。使用Vue 3和Vue Router,并结合一些CSS样式来完成这个效果。 步骤 创建Vue项目:使用Vue CLI创建一个新的Vue项目。准备图片:将需要展示的图片放在项目的public目录下。创建组件&…...
openRv1126 AI算法部署实战之——ONNX模型部署实战
在RV1126开发板上部署ONNX算法,实时目标检测RTSP传输。视频演示地址 rv1126 yolov5 实时目标检测 rtsp传输_哔哩哔哩_bilibili 一、准备工作 1.从官网下载YOLOv5-v7.0工程(YOLOv5的第7个版本) 手动在线下载: Releases ultraly…...
实验作业管理系统的设计与实现
标题:实验作业管理系统的设计与实现 内容:1.摘要 本系统旨在解决当前实验作业管理中存在的问题,提高管理效率和质量。通过对现有系统的调研和分析,我们确定了系统的功能需求和性能要求,并采用了先进的技术和架构进行设计和实现。系统实现了实…...
【愚公系列】《循序渐进Vue.js 3.x前端开发实践》032-组件的Teleport功能
标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主&…...
leetcode——二叉树的最大深度(java)
给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:3 示例 2: 输入:root [1,null,2] 输…...
【PyTorch】3.张量类型转换
个人主页:Icomi 在深度学习蓬勃发展的当下,PyTorch 是不可或缺的工具。它作为强大的深度学习框架,为构建和训练神经网络提供了高效且灵活的平台。神经网络作为人工智能的核心技术,能够处理复杂的数据模式。通过 PyTorch࿰…...
自制一个入门STM32 四足机器人具体开发顺序
0 前期准备 1. 知识储备 学习 STM32 微控制器的基础知识,包括 GPIO、定时器、串口通信等外设的使用,可通过官方文档、教程和视频课程进行学习。了解舵机控制原理,因为四足机器人通常使用舵机来实现关节运动。掌握基本的机械结构设计知识&am…...
SpringCloud基础二(完结)
HTTP客户端Feign 在SpringCloud基础一中,我们利用RestTemplate结合服务注册与发现来发起远程调用的代码如下: String url "http://userservice/user/" order.getUserId(); User user restTemplate.getForObject(url, User.class);以上代码就…...
云原生时代,如何构建高效分布式监控系统
文章目录 一.监控现状二.Thanos原理分析SidecarQuerierStoreCompactor 三.Sidecar or ReceiverThanos Receiver工作原理 四.分布式运维架构 一.监控现状 Prometheus是CNCF基金会管理的一个开源监控项目,由于其良好的架构设计和完善的生态,迅速成为了监控…...
WordPress使用(1)
1. 概述 WordPress是一个开源博客框架,配合不同主题,可以有多种展现方式,博客、企业官网、CMS系统等,都可以很好的实现。 官网:博客工具、发布平台和内容管理系统 – WordPress.org China 简体中文,这里可…...
小白爬虫冒险之反“反爬”:无限debugger、禁用开发者工具、干扰控制台...(持续更新)
背景浅谈 小白踏足JS逆向领域也有一年了,对于逆向这个需求呢主要要求就是让我们去破解**“反爬机制”**,即反“反爬”,脚本处理层面一般都是decipher网站对request设置的cipher,比如破解一个DES/AES加密拿到key。这篇文章先不去谈…...
Time Constant | RC、RL 和 RLC 电路中的时间常数
注:本文为 “Time Constant” 相关文章合辑。 机翻,未校。 How To Find The Time Constant in RC and RL Circuits June 8, 2024 💡 Key learnings: 关键学习点: Time Constant Definition: The time constant (τ) is define…...
Python爬虫学习第三弹 —— Xpath 页面解析 实现无广百·度
早上好啊,大佬们。上回使用 Beautiful Soup 进行页面解析的内容是不是已经理解得十分透彻了~ 这回我们再来尝试使用另外一种页面解析,来重构上一期里写的那些代码。 讲完Xpath之后,小白兔会带大家解决上期里百度搜索的代码编写,保…...
JS 正则表达式 -- 分组【详解】含普通分组、命名分组、反向引用
普通分组 使用圆括号 () 来创建分组捕获匹配的内容,通过正则表达式匹配结果的数组来访问这些捕获的内容。 const str "Hello, World!"; const regex /(Hello), (World)!$/; const match str.match(regex);if (match) {console.log("完整匹配结果…...
Leetcode刷题-不定长滑动窗口
分享丨【题单】滑动窗口与双指针(定长/不定长/单序列/双序列/三指针/分组循环) - 力扣(LeetCode) 3090 class Solution:def maximumLengthSubstring(self, s: str) -> int:c Counter()res 0rk -1for i in range(len(s)):i…...
【Rust自学】15.6. RefCell与内部可变性:“摆脱”安全性限制
题外话,这篇文章一共4050字,是截止到目前为止最长的文章,如果你能坚持读完并理解,那真的很强! 喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以…...
护眼好帮手:Windows显示器调节工具
在长时间使用电脑的过程中,显示器的亮度和色温对眼睛的舒适度有着重要影响。传统的显示器调节方式不仅操作繁琐,而且在低亮度下容易导致色彩失真。因此,今天我想为大家介绍一款适用于Windows系统的护眼工具,它可以帮助你轻松调节显…...
使用 OpenResty 构建高效的动态图片水印代理服务20250127
使用 OpenResty 构建高效的动态图片水印代理服务 在当今数字化的时代,图片在各种业务场景中广泛应用。为了保护版权、统一品牌形象,动态图片水印功能显得尤为重要。然而,直接在后端服务中集成水印功能,往往会带来代码复杂度增加、…...
36、【OS】【Nuttx】OSTest分析(2):环境变量测试
背景 2025.1.29 蛇年快乐! 接之前wiki 35、【OS】【Nuttx】OSTest分析(1):stdio测试(五) 已经分析完了第一个测试项,输入输出端口测试,接下来分析下环境变量测试,也比较…...
C++并发编程指南04
文章目录 共享数据的问题3.1.1 条件竞争双链表的例子条件竞争示例恶性条件竞争的特点 3.1.2 避免恶性条件竞争1. 使用互斥量保护共享数据结构2. 无锁编程3. 软件事务内存(STM) 总结互斥量与共享数据保护3.2.1 互斥量使用互斥量保护共享数据示例代码&…...
Java实现LRU缓存策略实战
实现LRU模型选择LRU缓存回收算法集成Google Guava(LRU缓存策略)插件Google Guava(LRU策略)缓存示例总结LRU(Least Recently Used,最近最少使用)缓存是一种常见的缓存淘汰策略。它的基本思想是优先保留最近被访问过的数据,淘汰最久未被访问的数据。这种策略的目的是为了…...
三个不推荐使用的线程池
线程池的种类 其实看似这么多的线程池,都离不开ThreadPoolExecutor去创建,只不过他们是简化一些参数 newFixedThreadPool 里面全是核心线程 有资源耗尽的风险,任务队列最大长度为Integer.MAX_VALUE,可能会堆积大量的请求ÿ…...
Golang 并发机制-1:Golang并发特性概述
并发是现代软件开发中的一个基本概念,它使程序能够同时执行多个任务,从而提高效率和响应能力。在本文中,我们将探讨并发性在现代软件开发中的重要性,并深入研究Go处理并发任务的独特方法。 并发的重要性 增强性能 并发在提高软…...
Flink中的时间和窗口
在批处理统计中,我们可以等待一批数据都到齐后,统一处理。但是在实时处理统计中,我们是来一条就得处理一条,那么我们怎么统计最近一段时间内的数据呢?引入“窗口”。 所谓的“窗口”,一般就是划定的一段时…...
Alfresco Content Services dockerCompose自动化部署详尽操作
Alfresco Content Services docker社区部署文档 Alfresco Content Services简介 官方说明书 https://support.hyland.com/r/Alfresco/Alfresco-Content-Services-Community-Edition/23.4/Alfresco-Content-Services-Community-Edition/Using/Content/Folder-rules/Defining-…...