当前位置: 首页 > news >正文

【AI新领域应用】AlphaFold 2,原子级别精度的蛋白质3D结构预测,李沐论文精读(2021Nature封面,2024诺贝尔奖)

文章目录

    • AlphaFold 2 —— 原子级别精度的蛋白质3D结构预测
    • 背景(2024诺奖与AI学习资料)
    • 1、摘要、导论、写作技巧
    • 2、方案:模型,编码器,解码器
    • 3、实验:数据集,训练,结果

AlphaFold 2 —— 原子级别精度的蛋白质3D结构预测

【AI新领域应用】AlphaFold 2,原子级别精度的蛋白质3D结构预测,李沐论文精读(2021年nature正刊,2024诺贝尔奖)

最近一直忙,好久没更新了,11月还是得水一篇,其实前段时间看到新闻就想加这个了,一直没空看,终于打卡了。

中文标题:使用 AlphaFold 进行高精度蛋白质结构预测
英文标题:Highly accurate protein structure prediction with AlphaFold
发布平台:Nature
发布日期:2021-08-26
引用量(非实时):15560

核心观点

  • AlphaFold 通过结合新颖的Transformer 神经网络架构和基于蛋白质结构的进化、物理和几何约束的训练程序,极大地提高了结构预测的准确性。
  • Evoformer 模块通过注意力机制和三角更新机制,完成序列比对(MSA)和结构模板中的信息的交换使得最终的序列抽象表示从而能够直接推理空间和进化关系
  • 结构模块则在蛋白质主链的基础上构建骨干框架,之后通过不变点注意力(IPA)整合所有信息,直接实现原子的3D坐标预测输出,并添加了很多辅助预测头实现更丰富的输出
  • 最后AlphaFold 通过自蒸馏技术进行数据增强,使用回收迭代机制实现自我强化;AlphaFold的预测结果经过严格的实验分析,在保持优越的预测性能的同时模型的稳健性也令人信服

背景(2024诺奖与AI学习资料)

2024年的诺贝尔奖与AI

  • AlphaFold开发者获2024诺贝尔化学奖,AI抢夺科学家的最重要荣誉
    刚刚,诺贝尔化学奖,揭晓!AI是没有边界的!
    2024年诺贝尔化学奖公布,一半授予大卫·贝克(David Baker),“以表彰在计算蛋白质设计方面的贡献”;另一半则共同授予德米斯·哈萨比斯(Demis Hassabis)和约翰·M·詹珀(John M. Jumper),“以表彰他们在蛋白质结构预测方面的成就”。
    德米斯·哈萨比斯和约翰·詹珀成功地利用人工智能技术预测了几乎所有已知蛋白质的结构。而大卫·贝克掌握了生命的构建模块,并创造了全新的蛋白质

  • 揭晓了!2024年诺贝尔物理学奖授予了他们→
    2024年诺贝尔物理学奖:两名科学家因人工智能的根本性进步而获奖
    著名的普林斯顿大学教授、91 岁的约翰-霍普菲尔德和加拿大多伦多大学教授、76 岁的杰弗里-辛顿,“因利用人工神经网络实现自动学习的基础发现和发明”而获奖。
    人工神经网络的灵感来源于我们大脑中的神经元网络。自 20 世纪 80 年代以来,他们一直致力于这一课题的研究。
    诺贝尔物理学奖委员会主席埃伦-蒙斯(Ellen Moons)向媒体解释说:"2024 年的获奖者们利用统计物理学的基本概念设计出了人工神经网络,这种网络的功能类似于联想记忆,能在大型数据集中发现规律”

  • 诺贝尔文学奖要颁给ChatGPT?奥特曼得奖呼声高,Hinton怒斥:他不配!

学习资料

  • 李沐,现任亚马逊首席科学家,人工智能框架Apache MXNet作者之一。
  • 放两个挺有名的深度学习资料,好久之前就看到过了,一直没时间刷完整的。
    有时候可以回来翻翻经典论文。
  • 深度学习论文精读-李沐
    在这里插入图片描述
    动手学深度学习-李沐,2
    在这里插入图片描述

1、摘要、导论、写作技巧

论文原文:deepmind, nature正刊,李沐B站

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

摘要:
Proteins are essential to life, and understanding their structure can facilitate a mechanistic understanding of their function. Through an enormous experimental effort1–4 , the structures of around 100,000 unique proteins have been determined5 , but this represents a small fraction of the billions of known protein sequences6,7 . Structural coverage is bottlenecked by the months to years of painstaking effort required to determine a single protein structure. Accurate computational approaches are needed to address this gap and to enable large-scale structural bioinformatics. Predicting the three-dimensional structure that a protein will adopt based solely on its amino acid sequence—the structure prediction component of the ‘protein folding problem’8 —has been an important open research problem for more than 50 years9 . Despite recent progress10–14, existing methods fall far short of atomic accuracy, especially when no homologous structure is available. Here we provide the first computational method that can regularly predict protein structures with atomic accuracy even in cases in which no similar structure is known. We validated an entirely redesigned version of our neural network-based model, AlphaFold, in the challenging 14th Critical Assessment of protein Structure Prediction (CASP14)15, demonstrating accuracy competitive with experimental structures in a majority of cases and greatly outperforming other methods. Underpinning the latest version of AlphaFold is a novel machine learning approach that incorporates physical and biological knowledge about protein structure, leveraging multi-sequence alignments, into the design of the deep learning algorithm.

翻译:

  • 蛋白质是生命所必需的,了解其结构有助于从机制上理解其功能。通过大量的实验努力1–4,人们已经确定了大约 100,000 种独特蛋白质的结构5,但这只是数十亿已知蛋白质序列中的一小部分6,7。
  • 确定一个蛋白质结构需要数月甚至数年的艰苦努力,这阻碍了结构覆盖的实现。需要精确的计算方法来弥补这一差距并实现大规模结构生物信息学。仅根据蛋白质的氨基酸序列预测其三维结构(“蛋白质折叠问题”8 的结构预测部分)一直是 50 多年来一个重要的开放性研究问题9。尽管最近取得了进展10–14,但现有方法远远达不到原子精度,尤其是在没有同源结构的情况下。
  • 在这里,我们提供了第一种计算方法,即使在没有已知类似结构的情况下,也可以定期以原子精度预测蛋白质结构。我们在极具挑战性的第 14 届蛋白质结构预测关键评估 (CASP14)15 中验证了我们基于神经网络的模型 AlphaFold 的全新版本,结果显示其在大多数情况下准确度可与实验结构相媲美,并且远远优于其他方法。AlphaFold 最新版本的基础是一种新颖的机器学习方法,该方法将有关蛋白质结构的物理和生物学知识、利用多序列比对融入深度学习算法的设计中。

总结:

  • 背景:蛋白质是氨基酸序列,长串的序列会卷在一起,氨基酸之间相互吸引形成稳定的、独特的3D结构,3D结构的形状决定了蛋白质的功能。
  • 目的:给氨基酸序列,预测3D结构
  • 创新点:Alphafold1的结果不够精确,偏差不在一个原子大小的级别之内,而2达到了原子级别的精度。

解读:

  • 摘要的第一段话是说,蛋白质对生命是必要的,回忆下大家的生物学啊,我们会吃很多蛋白质,我们知道蛋白质是一个,非常健康的一种食物,我们体内有很多蛋白质,蛋白质是我们体内干活的那一个东西,我们的很多的生理活动,啊是用蛋白质来完成的,然后他的第一句话的下半段话是说
    了解蛋白质的结构,有助于知道蛋白质的这个功能,我们知道蛋白质就是一串的氨基酸的序列
  • 比如说我们这一个点表示一个氨基酸的话,蛋白质你可认为就是把氨基酸连在一起,通常来说,蛋白质是指比较长的氨基酸的序列,比如说在100个氨基酸的规模,那么长的氨基酸序列连成一条串
    他是不稳定的,他就会卷在一起,你有点像我拿一条橡皮筋吗,然后把它搓一搓搓一搓,然后松开手他就会卷在一起去了,比如说他就会卷成一个这样子的形状,卷完之后就是比较稳定了,因为他的这些氨基酸之间相互吸引,然后形成了一个独特的3D 的结构,然后这个3D 结构的形状啊,决定了你的蛋白质的功能
  • 打一个计算机的比方就是说,氨基酸的序列你可认为是一段代码,然后我们要让他干活的话,我们要把它编辑成一个可执性的文件,那么他卷起来的过程就可以认为是,我把代码编译成我的可执性的文件,通常来说,你的代码就决定了你的最后的可执性文件的样子,他有时候你会发生错乱,比如说 一个序列可以卷成两个不同的形状,这时候通常会带来疾病,所以在正常情况下都是唯一决定的,那么这个地方我们的工作就是说,我们要知道这个代码到底是怎么样,变成这个可执性文件的,这个叫做蛋白质的结构预测
  • 我给你一串氨基酸的序列,然后就预测他的3D 结构长什么样子,接下来是讲我们现在预测的困难
    到目前为止我们大概已经知道,10万左右的蛋白质的结构,但是我们已知的蛋白质有将近10亿种
    我们所以我们只对很少的一部分的蛋白质了解他的功能,
    目前我们可能需要,数月或者数年的时间,才能了解一个蛋白质的结构,具体的做法是说你把这个蛋白质啊,动起来,从不同的角度用显微镜去看他的投影,然后再还原出他的3D 结构,当然这个时又费力,所以他说我们需要更精确的基于计算的办法,能够更便宜更方便的得到一个蛋白质的结构,这个问题叫做蛋白质折叠问题,已经在生物学里面存在了50年了
  • 啊介绍完问题之后来介绍现在的一些方法
    他说当然现在有一些方法了,比如说之前的alphafold1
    用一个神经网络来预测
    是呢他说他的精度不够
    不在原子级别的精度
    也就是说
    你对一个氨基酸位置的预测和实验是真正的
    测到的那一个结果
    他的偏差不在一个原子的大小的级别
    特别是当你不知道
    跟这个蛋白质功能比较 预测的
    其他蛋白质的结构的时候
    这个精度会更差
    接下来就是alphafold2
    他说我们终于提供了第一个模型
    能达到一个原子精度的预测
    也就是说
    你预测的位置
    和你真实测到的位置之间的偏差
    在一个原子大小的级别

写作技巧

  • 这就是摘要
    可以看到他
    前面画了很大的篇幅
    来介绍这是什么问题
    介绍他们的实验结果

    最后很简单的提了一下他们的算法
  • 如果换你来写
    你可能会想说啊
    alphafold2
    我这个模型已经那么那么的复杂
    那么那么的fancy
    那么我是不是应该在摘要里面
    多说几句我的模型的好话呢
    多给大家介绍一下
    我模型的好处在什么地方
  • 事实上我们在前面一期数学定理证明里面有讲过
    这是一类应用性的文章
    你主要的目的是用机器学习这个工具
    啊解决这个领域里面的一个
  • 重要的问题
    所以你关心的是两点
    一点是这是一个什么样的问题
    这个问题重不重要
    对这个领域来说有什么意义
    第二个是你结果的好坏
    你是不是解决了这个问题
    具体来说你用的模型的好坏并不重要
    比如说alphafold2
    就是一个很简单的 mlp
    只要你也能达到原子级别的精度
    那你一样的能上nature的封面
    这个和你做一个特别复杂的模型
    得到同样的结果
    可能共识上来说是差不多的
  • 反过来说
    如果你能用很简单的算法解决这个问题的话
    很有可能已经轮不到你了
    别人已经把它解决了
    所以你就有两个办法
    要么你找一个新的问题
    别人都没用机器学习来做过
    你把它变成一个机器学习的问题
    收集数据可能用简单的模型也就行了
    要么你的问题数据已经摆在那里了
    之前而且有举办过竞赛
    大家都做了很多不一样的方法
    这时候你就需要用一个
    很不一样的很强大的算法
    在算法上创新才行呢
    alphafold2也就是这么出来的

背景知识

  • 蛋白质一级结构:组成蛋白质多肽链(包含多个肽键 -CO-NH-)的线性氨基酸序列
    蛋白质二级结构:依靠不同氨基酸之间的C=O和N-H基团间的氢键形成的稳定结构,主要为α螺旋和β折叠
    蛋白质三级结构:通过多个二级结构元素在三维空间的排列所形成的一个蛋白质分子的三维结构
    蛋白质四级结构:用于描述由不同多肽链(亚基)间相互作用形成具有功能的蛋白质复合物分子
    已知蛋白质序列有数十亿,其中只有大约100,000种独特蛋白质的结构被确定
  • 引用1,2,字幕,在这里插入图片描述

2、方案:模型,编码器,解码器

  • 整体模型结构
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 输入部分
    在这里插入图片描述

  • encoder
    在这里插入图片描述
    与transformer块不同的地方:
    (1)先Pair与MSA的多头注意力交互一次,最后再过MLP后全返回到下面,也就是在每个块中都完成了一次MSA与Pair信息的交互
    (2)多头注意力变两个,先处理行再处理列,因为输入是二维的
    在这里插入图片描述s表示蛋白质数量,第一个是要预测的,后面s-1个是数据库检索出来的
    r表示蛋白质中氨基酸数量
    c是每个氨基酸表示为长度为c的向量(通道数)
    Evoformer是transformer的变种,不同的是transformer接收一个序列为输入,但是这里是二维矩阵
    MSA中每一行都是一个氨基酸序列,每一列是同一个氨基酸在不同蛋白质中的表现
    Pair中每一行列都是氨基酸的两两关系
    最后的输出中c已经很好地捕捉到了氨基酸的两两关系

  • decoder
    IPA接收氨基酸对、序列和回传的特征
    Predict relative …得到蛋白质结构的相对位置
    最后的Predict是预测3D空间中旋转的角度并计算3D位置
    在这里插入图片描述
    两种特征解码得到输出
    在这里插入图片描述

  • 欧几里得变换
    具体来说他用的是欧几里得的变换,或者叫做刚体变换,我们来看一下具体怎么回事,假设这个点在空间中的位置是 x,x 是一个长为3的向量,这个点的位置是 y,那么我们要怎么样从 x 变换成 y 呢,在欧几里得里面他可以写成这样子,y 可以等于对 x 做旋转,就是一个 r,然后再做一下位移,这个地方 r 是一个3*3的一个矩阵,t 呢是一个3*1的一个向量,这样我只要能确定 r 和 t 的值的话,那么我就能从 x 还原到y,这里的好处是说,如果我们对这个蛋白质的整体的结构,做旋转或者位移,就是把一个全局的 r,或者 t 加在整个蛋白质上面的话,他不会影响这些局部的变换,就是导致从 x 变换成 y 的,这个 r 和 t 不会发生变化。
    这样这个表示就是对于,全局的刚体变换是无关的,确定了主干的结构之后啊,上面的每一个氨基酸的下面这些部分,你可认为是,在每一个可以变换的原子 那个地方,我只要去关心他旋转的角度是什么就行了,这就是这个图上各种绿色的圈呢,一旦这个头已经固定在这个地方的话,我只要去关心,那些能够转的地方,到底转了多少就行了,当这个地方的变化呢,还是要满足物理和生物学的定义的,比如说两个氨基酸,只能通过一些特定的角度连在一起,你可以做的办法是说在训练的时候,我可以限制住,我的这些 r 和 t 可以要选取的值。
    在这里插入图片描述

3、实验:数据集,训练,结果

在这里插入图片描述在这里插入图片描述

自蒸馏数据集:

  • 训练样例有 25% 来自蛋白质数据库的已知结构,有 75% 来自自蒸馏集
  • 首先从Uniclust30数据集中筛选出的MSA(筛选标准:序列长度在200~1024之间,序列数大于200,同一序列在不同的MSA中重复出现时需要删除该序列)
  • 然后在 PDB 数据集上单独训练模型,并预测筛选出的MSA中355,993 个序列的蛋白质结构,以此预测结果作为“伪标签”创建一个结构数据集以在训练时使用
  • 对于每个预测残基,通过计算与其他残基的距离分布与参考分布之间的 KL 散度来实现置信度度量
    训练时会屏蔽掉置信度低于0.5 的残基;参考分布则来自序列的随机采样(1000个序列)

消融实验:

  • 主要讲的是一些消融的实验,他主要的结果是放在图四,我们先看一下图4a,图4a这里一共有两个图,他分别是在,casp 14就是竞赛中的结果,以及在 PDB,也就是他用来训练模型的测试数据集上的结果,
  • 这个灰线啊 0表示的是他的基线,如果在灰色的右边就是比0大的话,表示比基线要好,如果在灰线的左边的话表示比0小,那么他就比基线要差,其中每一行表示的是一个方法好,首先看到这是基线,啊基线的结果,大概就是在这个灰线的样子,最上面表示的是如果使用,自蒸馏 会怎么样,也就是使用额外的,没有标注的训练数据集,对他进行训练,可以看到在竞赛数据集上,是高那么一些,但是在 PDB 这个数据集上,还是高了很多,很有可能是说 PDB 这个数据集他的,啊多样性更大一点,他的测试数据更大一点,
  • 下面呢就是去掉一些模块会怎么样,前面的这些都是去掉一些输入的数据,比如说把模板信息去掉,啊损失那么一点,如果呢把其中的一个直方图给去掉,也损失一点,如果呢把,原始的 MSA,但是用一个替代来去掉的话,也会损失掉一些,接下来是对模型的一些变换,比如说把 IPA 去掉,意味着是说你在解码器的时候,我不再使用一个注意力机制,把你的位置信息放进你的氨基酸的向量里面,可以看到会损失一些,但是在 PDB 上好像损失的并不大呀,然后是说,如果你没有使用BERT那种,带掩码的机制会怎么样,在竞赛数据集上还好,但是在 PDB 这个数据集上,损失还是比较大的,哎如果你不做回收,不做那四次回收的话,那损失是比较大的,如果你使用最简单的注意力机制,就是说我先按行做标准的自注意力,然后我再按列做标准的自注意力,而不使用三角更新,或者使用对信息来做偏差,或者使用门可以看到的话,这里差的还是比较大的,在 PDB 的数据上差的更多一些,或者说如果不做端对端的结构梯度,我理解就是你的编码器不参与计算梯度那损失更多了,最后是说你不做 IPA 也不做回收,那损失就是相当的明显这个地方啊,
  • 所以这个图想表达的核心思想是说,我这个网络虽然复杂,但是里面没有一块能去掉,把所有块加起来都是有好处的,但反过来讲这个模型还是相当的复杂,虽然这个地方已经做了很多消融实验了,但是你很难从,系统的对每一个模块看一下,他到底是不是重要,因为里面还是有很多模块没有zhu’yi检查到的,
    在这里插入图片描述

主流评价:

  • 98.5%的人类蛋白质被AlphaFold破译,极大地扩展了蛋白结构覆盖率
  • 数据的免费开放将进一步的激发基础科学、药物研发、合成生物学设计方面的未来发展
  • 人类在认识自然界的科学探索征程中的里程碑事件,大大改进人类对于生命过程的理解
  • 2023年的拉斯克(“诺奖风向标”)基础医学研究奖授予给两位AlphaFold主要研发者

局限性分析:

  • 硬件需求高;不适用于过大的蛋白质或多蛋白质复合体
  • 对已有数据可能存在过拟合(第三方测试显示,已知结构准确率远高于未知结构)
  • 蛋白质结构拥有非常动态的结构,而目前的AlphaFold2 只能预测静态解
  • 可能存在过度工程化(部分技巧的作用存疑);部分超参没有充分测试
  • 没有揭示蛋白质折叠的机制或规则,以考虑解决蛋白质折叠问题
  • 该模型对于固有无序蛋白质是不可靠的,但可以通过低置信度分数传达了信息

相关文章:

【AI新领域应用】AlphaFold 2,原子级别精度的蛋白质3D结构预测,李沐论文精读(2021Nature封面,2024诺贝尔奖)

文章目录 AlphaFold 2 —— 原子级别精度的蛋白质3D结构预测背景(2024诺奖与AI学习资料)1、摘要、导论、写作技巧2、方案:模型,编码器,解码器3、实验:数据集,训练,结果 AlphaFold 2 …...

Figma汉化:提升设计效率,降低沟通成本

在UI设计领域,Figma因其强大的功能而广受欢迎,但全英文界面对于国内设计师来说是一个不小的挑战。幸运的是,通过Figma汉化插件,我们可以克服语言障碍。以下是两种获取和安装Figma汉化插件的方法,旨在帮助国内的UI设计师…...

前端知识点---this的用法 , this动态绑定(Javascript)

文章目录 this动态绑定 , this的用法01. 全局作用域下的 this02. 函数中的 this2.1 普通函数调用2.2 构造函数调用2.3 箭头函数中的 this 03对象方法调用04. 事件处理中的 this05. 动态绑定的方式5.1 call 方法5.2 apply 方法5.3 bind 方法 06类中的 this07. 总结 this动态绑定…...

web——upload-labs——第五关——大小写绕过绕过

先上传一个 先尝试直接上传一个普通的一句话木马 不行 可以看到,.htaccess文件也被过滤了,我们来查看一下源码 第五关的源码没有把字符强制转换为小写的语句: $file_ext strtolower($file_ext); //转换为小写 直接通过Burpsuite抓包修改文…...

String类型

String类 在Java中&#xff0c;String 类是一个非常核心且常用的类&#xff0c;它用于表示文本值&#xff0c;即字符序列或者说字符串。 1.1 类的声明 public final class Stringimplements java.io.Serializable, Comparable<String>, CharSequence 解释&#xff1a…...

Ubuntu24.04安装和配置Redis7.4

Ubuntu24.04安装和配置Redis7.4 #切换到root用户 sudo su -#更新源 apt update apt upgrade#安装 lsb-release、curl 和 gpg &#xff0c;以便能够添加 Redis 仓库 apt install lsb-release curl gpg#导入 Redis 的 GPG 密钥 curl -fsSL https://packages.redis.io/gpg | gpg …...

权限相关知识

1.Linux权限的概念 在说Linux权限的概念之前我来问大家一个问题&#xff0c;你们觉得什么是权限&#xff1f; 权限平时的体现呢&#xff0c;就比如不是校长的亲戚就不能逛办公室&#xff0c;没充会员的爱奇艺看不了VIP影视剧&#xff0c;没成会员的的蛋糕店拿不到会员价等等等…...

【时间之外】IT人求职和创业应知【37】-AIGC私有化

目录 新闻一&#xff1a;2024智媒体50人成都会议暨每经20周年财经媒体峰会召开 新闻二&#xff1a;全球机器学习技术大会在北京召开 新闻三&#xff1a;区块链技术在金融领域的应用取得新突破 不知不觉的坚持了1个月&#xff0c;按照心理学概念&#xff0c;还要坚持2个月&am…...

深入理解 source 和 sh、bash 的区别

1 引言 在日常使用 Linux 的过程中&#xff0c;脚本的执行是不可避免的需求之一&#xff0c;而 source、sh、bash 等命令则是执行脚本的常用方式。尽管这些命令都能运行脚本&#xff0c;但它们之间的执行方式和效果却有着显著的区别。这些区别可能会影响到脚本的环境变量、工作…...

k8clone二进制工具迁移k8s中的无状态应用

1 概述 k8clone是一个简便的Kubernetes元数据克隆工具&#xff0c;它可以将Kubernetes元数据&#xff08;对象&#xff09;保存为本地压缩包&#xff0c;在恢复时可将这些元数据恢复到目标集群中&#xff08;已存在的资源不会被覆盖&#xff09;。它不依赖远程存储&#xff0c…...

VPI photonics的一些使用经验(测相位 快速搜索)持续更新

1.使用FuncSinEl模块的注意事项&#xff1a; 2.在VPI player&#xff08;示波器&#xff09;测电信号相位时候&#xff0c;可以使用正则表达式&#xff0c;快速搜索。 比如我要搜索以30开头的数据&#xff0c;输入&#xff1a; ^30 其他的正则表达式不适用&#xff0c;比如以…...

DBeaver 连接 OceanBase Oracle 租户

DBeaver 是一款通用的数据库工具软件&#xff0c;支持任何具有JDBC驱动程序的数据库。DBeaver 需要 Java 运行环境的支持。截稿时 DBeaver 24.0.0 版本默认提供的 OceanBase 驱动是连接 MySQL 的&#xff0c;想连接 Oracle 租户需要新建一个驱动器使用。 下载数据库驱动包 1、…...

QT_CONFIG宏使用

时常在Qt代码中看到QT_CONFIG宏&#xff0c;之前以为和#define、DEFINES 差不多&#xff0c;看了定义才发现不是那么回事&#xff0c;定义如下&#xff1a; 看注释就知道了QT_CONFIG宏&#xff0c;其实是&#xff1a;实现了一个在编译时期安全检查&#xff0c;检查指定的Qt特性…...

力扣(leetcode)题目总结——辅助栈篇

leetcode 经典题分类 链表数组字符串哈希表二分法双指针滑动窗口递归/回溯动态规划二叉树辅助栈 本系列专栏&#xff1a;点击进入 leetcode题目分类 关注走一波 前言&#xff1a;本系列文章初衷是为了按类别整理出力扣&#xff08;leetcode&#xff09;最经典题目&#xff0c…...

如何处理 iOS 客户端内 Webview H5 中后台播放的音视频问题

目录 问题描述Page Visibility API 的应用什么是 Page Visibility API&#xff1f;使用 Page Visibility API 暂停音视频完整解决方案1. 监听媒体的播放和暂停事件2. 防止自动播放3. 结合 Intersection Observer 进行媒体控制4. 手动处理应用生命周期中的事件 问题描述 在 iOS…...

C++的一些模版

1、不限制次数的输入数据 vector<int> nums;int num;while (cin >> num) {nums.push_back(num);if (cin.get() \n) break;}2、取模模版 template<int kcz> struct ModInt { #define T (*this)int x;ModInt() : x(0) {}ModInt(int y) : x(y > 0 ? y : y…...

spring boot整合https协议

整体目录 1. 生成SSL证书 首先&#xff0c;使用keytool生成一个自签名证书。打开命令行工具并运行以下命令&#xff1a; keytool -genkeypair -alias myserver -keyalg RSA -keysize 2048 -keystore keystore.jks -validity 365 这将创建一个名为keystore.jks的文件&#xf…...

服务器开机即占用大量内存,解决

1.服务器开机两分钟不到&#xff0c;内存使用飙升 [rootlocalhost ~]# top #查看是否有了明显的内存占用程序 2.上述未果&#xff0c;查看是否有违规的开机自启项 [rootlocalhost ~]# chkconfig --list 3.上述无果&#xff0c;查看开启启动加载项内容 上网搜后&#xff…...

Keil uvision的edition

0 Preface/Foreword 0.1 参考网址 https://zhuanlan.zhihu.com/p/456069876 1 Keil版本介绍 版本介绍&#xff1a; Keil Lite&#xff08;免费版&#xff09;&#xff1a;最多32KB代码&#xff0c;无法使用中间件Keil Essential&#xff08;基础版&#xff09;&#xff1a;没…...

[每周一更]-(第123期):模拟面试|消息队列面试思路解析

文章目录 22|消息队列:消息队列可以用来解决什么问题?1. 你用过消息队列吗?主要用来解决什么问题?异步、削峰和解耦你能各举一个例子吗?2. 你用的是哪个消息队列?为什么使用它而不用别的消息队列?3. 为什么你一定要用消息队列?不用行不行?不用有什么缺点?4. 在对接多…...

游戏引擎学习第12天

视频参考:https://www.bilibili.com/video/BV1yom9YnEWY 这节没讲什么东西&#xff0c;主要是改了一下音频的代码 后面有介绍一些alloc 和malloc,VirtualAlloc 的东西 _alloca 函数&#xff08;或 alloca&#xff09;分配的是栈内存&#xff0c;它的特点是&#xff1a; 生命周…...

深入理解Flutter生命周期函数之StatefulWidget(一)

目录 前言 1.为什么需要生命周期函数 2.开发过程中常用的生命周期函数 1.initState() 2.didChangeDependencies() 3.build() 4.didUpdateWidget() 5.setState() 6.deactivate() 7.dispose() 3.Flutter生命周期总结 1.调用顺序 2.函数调用时机以及主要作用 4.生…...

413: Quick Sort

解法&#xff1a; #include <bits/stdc.h> using namespace std; const int N1e55; int a[N]; int n;int main(int argc, char** argv) {cin>>n;for (int i0;i<n;i) cin>>a[i];sort(a,an);for (int i0;i<n;i) cout<<a[i]<<" "…...

vue之axios根据某个接口创建实例,并设置headers和超时时间,捕捉异常

import axiosNew from axios;//给axios起个别名//创建常量实例 const instanceNew axiosNew.create({//axios中请求配置有baseURL选项&#xff0c;表示请求URL的公共部分&#xff0c;url baseUrl requestUrlbaseURL: baseURL,//设置超时时间为20秒timeout: 20000,headers: {…...

Pandas数据透视表:交叉分析与聚合计算

大家好&#xff0c;在数据分析中&#xff0c;数据透视表&#xff08;Pivot Table&#xff09;是一种强大的工具&#xff0c;用于交叉分析和聚合计算。Pandas库中的数据透视表功能&#xff0c;使我们能够在多维数据中快速生成汇总表、统计特定维度的聚合数据&#xff0c;帮助揭示…...

软件设计师考试大纲

文章目录 一 、考 试 说 明1. 考试目标2. 考试要求3. 考试科目设置 二、考 试 范 围考试科目1:计算机与软件工程知识1. 计算机系统基础知识1.1计算机内数据的表示及运算1.2 其他数学基础知识1.3 计算机硬件基础知识1.3.1 计算机系统的组成、体系结构分类及特性1.3.2 存储系统1.…...

一文说清C++类型转换操作符(cast operator)

一 前言 大家在编程时&#xff0c;一定会遇到要做类型转换的应用场景。 但是&#xff0c;C风格的类型转换太强大&#xff0c;太危险&#xff0c;它允许将一个给定类型转换成我们想要的任何其他类型。 所以在C中&#xff0c;提供了一些更安全和更明确的类型转换操作符&#xff…...

MOSFET电路栅源极GS之间并联电容后,MOS炸管原因分析

1、前言 在介绍&#xff0c;在进行MOSFET相关的电路设计时&#xff0c;可能会遇到MOSFET误导通的问题&#xff0c;为了解决此问题&#xff0c;我们提出了两种方法&#xff0c;一种是增大MOSFET栅极串联电阻的阻值&#xff0c;另外一种是在MOSFET栅-源极之间并联一个电容&#…...

gitHub常用操作

gitHub常用操作 1、把项目拉下来2、添加上游仓库3、进入分支4、从上游仓库拉取更新 1、把项目拉下来 在对应项目的右上角点击fork&#xff0c;fork下来&#xff1a;将远程仓库复制到个人仓库 在创建好的分支文件夹下使用 git clone自己远程仓库下的http地址&#xff08;fork…...

[项目代码] YOLOv5 铁路工人安全帽安全背心识别 [目标检测]

YOLOv5是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为一个回归问题&#xff0c;能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法&#xff08;如Faster R-CNN&#xff09;&#xff0c;YOLOv5具有更高的…...