BASS:为单细胞分辨率的空间转录组学提供多尺度和多样本分析

空间转录组学研究正在达到单细胞空间分辨率,数据通常来自多个组织切片。《Genome biology》发表了一种计算方法BASS,支持单细胞分辨率空间转录组学的多尺度和多样本分析。BASS在单细胞尺度上进行细胞类型聚类,在组织区域尺度上进行空间结构域检测,这两项任务在贝叶斯层次结构模型框架内同时进行。

BASS是什么?

目前用于细胞类型聚类和空间结构域检测的方法存在两方面的局限性:1)所有现有方法仅执行两个分析任务中的一个,有效地使两个不同解剖尺度的分析相互分离;2)所有现有方法都集中于分析从单个组织切片收集的空间转录组学数据。基于此,开发团队提出了一种新的计算方法BASS,用于多尺度和多样本分析,克服了上述两个限制。

BASS以联合细胞类型聚类和空间结构域检测的形式进行多尺度转录组学分析,这两项分析任务在贝叶斯分层建模框架内同时执行。对于这两种分析,BASS适当考虑了空间相关性结构,并将基因表达信息与空间定位信息无缝集成,以提高其性能。此外,BASS能够进行多样本分析,联合建模多个组织切片/样本,促进跨组织样本的空间转录组学数据整合。

BASS进行多尺度和多样本分析,以便在空间转录组学中进行准确的细胞类型聚类和空间域检测。BASS接受来自多个组织切片的基因表达矩阵和空间位置信息的输入,并在一个分级贝叶斯框架中对这两种信息进行建模。在分析中,BASS将组织上每个细胞的细胞类型标签(c)和空间结构域标签(z)作为潜在/隐藏的变量,并通过一个有效的推理算法推断它们。分析后,BASS提供推断出的细胞类型集群标签、空间结构域标签和每个空间结构域内的细胞类型比例作为输出结果。

BASS的性能测试

开发团队通过对三个数据集的全面模拟和应用来说明BASS准确地揭示大脑皮层和下丘脑的转录组和细胞景观的巨大优势。

 模拟数据

首先,开发团队评估了不同方法在单个组织切片上进行空间结构域检测的性能:在模拟中发现BASS在所有场景中都优于HMRF、BayesSpace和SpaGCN。

接下来,评估了不同方法在单个组织切片上细胞类型聚类的性能:在模拟中发现BASS在所有场景中都优于SC3、Seurat和FICT,当细胞类型在组织上显示空间模式时,BASS优于其他三种方法的优势尤其明显。

最后评估了BASS在多个组织切片综合分析中的性能:在所有模拟场景中所有三个分析任务(包括空间结构域检测、细胞类型聚类和跨域细胞类型组成估计)的BASS性能随着分析组织切片数量的增加而增加。对于细胞类型聚类,Seurat的性能也随着分析的组织切片数量的增加而增加,而SC3的性能先增加,然后随着组织切片数量增加而降低。与单个组织切片分析类似,当细胞类型在组织上显示出空间模式时,BASS相对于其他方法在细胞类型聚类上的优势尤其明显

除了上述的主要模拟,开发团队还探讨了其他各种因素,包括特定细胞类型/空间结构域的数量、稀有的细胞类型、以及随机排除基因对不同方法性能的影响。

 小鼠内侧前额叶皮层的STARmap数据

首先,开发团队检查了不同方法对空间结构域检测的结果:BASS检测到的四个空间结构域与预期的皮质层高度相似(ARI=0.82)。相比之下,HMRF(ARI=0.57)、BayesSpace(ARI=0.26)和SpaGCN(ARI=0.36)检测到的空间结构域与基本事实基本不匹配,方法的排名与模拟数据中观察到的基本一致。此外,BASS检测到的四个皮质层之间有很好的隔离,它们之间有平滑的边界,而BayesSpace和SpaGCN检测到的皮质层在某种程度上交织在一起。值得一提的是,BASS的多样本综合分析能力进一步提高了用于一个样本分析的同一组织切片上的空间结构域检测精度。此外,与我们在焦点样本中发现的情况类似,BASS在单切片和多切片分析中都准确地捕捉到了其他两个切片的四个空间结构域,比其他方法更准确。这些结果证实了BASS在空间结构域检测和多样本综合分析方面的优越性。

接下来检验了不同方法细胞类型聚类的结果:单个组织切片上与模拟一致,BASS实现了准确的细胞类型聚类(ARI=0.44),比Seurat(ARI=0.34)、SC3(ARI=0.37)和FICT(ARI=0.27)更准确;BASS的多样本分析也优于其他两种细胞类型聚类方法(Seurat和SC3)

 小鼠下丘脑的MERFISH数据

首先,开发团队检查了不同方法对空间结构域检测的结果:BASS检测到与基础组织学注释高度相似的主要空间结构域(ARI=0.58)。相比之下,由HMRF(ARI=0.42)、BayesSpace(ARI=0.12)和SpaGCN(ARI=0.19)检测到的空间结构域通常与基本事实不匹配。重要的是,利用BASS对五个相邻空间转录组组织切片进行多样本综合分析,进一步深入了解了下丘脑视前区的结构组织,这是其他方法的单样本分析无法实现的。

接下来检验了不同方法细胞类型聚类的结果:单个组织切片上与模拟一致,BASS实现了准确的细胞类型聚类(ARI=0.46),比Seurat(ARI=0.37)、SC3(ARI=0.35)和FICT(ARI=0.34)更准确。使用BASS的多样本分析产生了与Bregma-0.14的单个切片分析类似的细胞类型聚类准确度(ARI=0.49)。使用Seurat的多样本分析改进了单个切片分析(ARI=0.42),而使用SC3的多样本研究与单个切片分析相比产生了较低的细胞类型聚类性能,这可能是由于其性能随着细胞数量的增加而降低(如前所述,ARI=0.33)。三种方法的多个切片与单个切片分析的比较与模拟结果一致,突出了BASS的优势。

 人背外侧前额叶皮层的10x Visium数据

在单个切片分析中,BASS检测到与大多数组织切片的基本组织学注释高度相似的主要空间结构域(跨切片的平均ARI=0.48),比HMRF(平均ARI=0.30)、BayesSpace(平均ARI=0.44)和SpaGCN(平均AR1=0.40)更高。重要的是,对来自每个成人供体的四个组织切片的综合分析进一步改进了空间结构域检测(中值ARI=0.51),并在四个切片上产生了一致的空间结构域。用BASS进行的多样本综合分析大大改善了这个特定样本的空间结构域的检测,并产生了与基础注释高度相似的皮质层,而且在所有四个切片中都是一致的(ARI = 0.60)。在其他两组组织切片中也可以进行类似的观察,证实了BASS在非单细胞分辨率空间转录组学中的空间结构域检测和多样本综合分析的性能。

在运行时间和内存使用方面,BASS与其他空间结构域检测方法和细胞类型聚类方法相当。对于典型的10x Visium数据,大约5000个点,BASS需要大约8分钟,并使用2GB内存。此外,BASS的运行时间和内存使用量与数据的样本大小呈线性关系,这使得BASS可扩展到分析成千上万个细胞/点。

尽管BASS、HMRF和BayesSpace都采用了Potts模型,但BASS在Potts模型的基础上引入了额外的分层建模结构,以便进行灵活和有效的空间转录组建模。与HMRF和BayesSpace相比,额外的分层建模结构使BASS能够对空间结构域的组成做出根本性的不同和更有效的假设。BASS在分层建模结构中引入了细胞类型组成作为中间层,以明确地模拟不同细胞类型的不同基因表达。因此,BASS能够将一个空间结构域定义为具有独特细胞类型组成的区域,以更好地捕捉每个空间结构域内的基因表达异质性,并实现更好的性能。此外,BASS根据现有数据推断Potts模型中的空间相互作用参数β,而HMRF和BayesSpace则将该参数改为用户指定的值。BASS中对β的推断也有助于提高其性能。最后,从模型推理的角度来看,尽管BASS和BayesSpace都是基于贝叶斯框架,但BASS使用Swendsen-Wang算法对空间结构域标签进行采样,而BayesSpace使用Gibbs采样算法。Swendsen-Wang算法比Gibbs采样算法有更好的混合率,因此也有助于BASS实现更好的准确性。

在必要的预处理步骤之后,BASS也可以应用于其他空间转录组学技术,例如HDST和Seq-Scope。

BASS在未来有几个重要的扩展。例如开发团队主要侧重于使用基因表达数据作为输入,但注意到BASS建模框架是灵活的,可以很容易地以额外特征输入的形式纳入组织学图像的信息,以进一步提高其性能。另一个例子是用主成分分析(PCA)中归一化基因表达矩阵的低维成分作为BASS的输入,且BASS并不局限于PCA,它可以与其他降维方法配对,以其低维分量作为输入。

此外,BASS检测到的准确的细胞类型和空间结构域可以与许多其他分析工具配对,以进一步改善各种下游应用,揭示更多的生物学见解,例如与SpatialCorr配对,以检测组织区域内或组织区域之间具有协调调节的基因。

BASS 是作为 R 包实现的, BASS 软件以及用于重现本研究中呈现的所有分析结果的代码可在 GitHub 和 Zenodo 上免费获得: 

> https://github.com/zhengli09/BASS

> https://doi.org/10.5281/zenodo.6814510

参考文献

Li Z, Zhou X. BASS: multi-scale and multi-sample analysis enables accurate cell type clustering and spatial domain detection in spatial transcriptomic studies[J]. Genome biology, 2022, 23(1): 1-35.

图片来源于Genome biology官网和参考文献,如有侵权请联系删除。

本文转载于网络 如有侵权请联系删除

相关文章

  • 工业互联网标识解析的数据安全风险有哪些?

    在工业制造领域,标识解析体系是指对工业互联网网络上所工作的机器、设备、系统、零件和人等生产元素赋予具有唯一性的标识,并通过建立基于标识解析的通信网络对生产资源信息进行采集、解析、传输等操作,使机器、设备、对象和人等生产要素实现相互关联,实现彼此之间数据传输,而不需要它们之间的任何交互。工业互联网标识解析体系包括标识编码、解析系统、信息服务以及标识应用四大核心内容。标识解析技术应用到供应链管理中可以横向连接供应链上下游企业,不用强制数据同步,而是利用标识解析按需的查询数据信息。然而,通过数据安全风险分析,工业互联网标识解析存在一些数据隐私和安全方面的挑战,主要的安全风险如下:1)数据被窃取。工业互联网标识解析数据窃取风险主要是破坏数据的机密性,数据被非授权用户获得,造成标识数据外泄。2)数据被篡改。工业互联网设备在接入工业互联网络时,攻击者有机会通过物理方式或者远程接入互联的设备,对设备当中存储的数据进行读取、修改等操作。存在数据被恶意篡改、伪造等风险,数据处理算法和过程被破解,进而导致数据被篡改。3)隐私数据丢失。在标识数据使用过程中,在没有有效的安全防护措施的情况下,很容易导致工业企

  • 时序攻击

    大家好,又见面了,我是你们的朋友全栈君。什么是时序攻击?在密码学中,时序攻击是一种侧信道攻击,攻击者试图通过分析加密算法的时间执行来推导出密码。每一个逻辑运算在计算机需要时间来执行,根据输入不同,精确测量执行时间,根据执行时间反推出密码。$expected=crypt('12345','$2a$07$usesomesillystringforsalt$'); $correct=crypt('12345','$2a$07$usesomesillystringforsalt$'); $incorrect=crypt('apple','$2a$07$usesomesillystringforsalt$'); var_dump(hash_equals($expected,$correct)); var_dump(hash_equals($expected,$incorrect));复制进行比较,那么两个字符串是从第一位开始逐一进行比较的,发现不同就立即返回false,那么通

  • 阿里一季度员工减少4000人;程序员写脚本抢挂疫苗号,牟利40万被刑拘;搜狐遭遇史诗级邮件诈骗,张朝阳回应 | Q资讯

    整理|Tina 网传搜狐遭遇史诗级邮件诈骗,张朝阳回应:不严重;程序员写脚本抢挂HPV疫苗号,牟利40万被刑拘;网传鸿蒙掌舵人王成录离开华为;年内第二大科技交易案!半导体巨头博通将以约610亿美元收购云计算公司VMware,后者或将迎来大裁员;阿里云13年来首次年度盈利,全公司一季度员工减少4000人;微软之后,苹果也计划加薪;美国司法部修订法律,不再起诉白帽黑客行为;Oracle启动Leyden计划,下决心解决Java启动慢等长期痛点......科技公司网传搜狐遭遇史诗级邮件诈骗,张朝阳回应:不严重 5月25日,“搜狐全体员工遭遇工资补助诈骗”冲上微博热搜第一。据一份流传网络的聊天记录显示,搜狐全体员工在5月18日早晨收到一封来自“搜狐财务部”名为《5月份员工工资补助通知》的邮件。该聊天记录称,不少员工受骗,工资卡余额被划走。“因为邮件后缀是公司邮箱,少了很多防备心理。”一名员工表示,该邮件通过链接形式提供引导,要求员工填写银行卡号和手机号等个人信息。“平时报销也会提供银行卡号,所以没有特别在意。”5月25日午间,搜狐CEO张朝阳发微博回应称,事情不像大家想的那么严重。他表示,事件起

  • 死磕到底-ReentrantReadWriteLock源码

    1.线程安全、 如果对num进行累加操作,使用10个线程,每个加1000次,最后应该是10000,但是你会发现不是10000。当使用了synchronized再次进行累加操作。此时累加的值就是10000,这是因为synchronized能够保证每次只有一个线程进入临界区。2.ReentrantReadWriteLock、 JDK中synchronized的使用是非常广泛的,例如线程安全的HashTable,HashTable保证线程安全就是在每个方法上都加上了synchronized。如下是HashTable的put和get方法。对于HashTable来说,你发没发现一个问题就是实际上我们多个线程调用get方法的时候并不需要加锁,原因是如果不存在更改HashTable结构的操作,这样只是调用get方法但是加了synchronized。在多线程情况下并发度会大大降低。那么有没有一种锁可以在读的时候不加锁,写的时候才加锁。同时写和写是冲突的,读和写也是冲突的,但是读和读是不会冲突的。这就是读写锁 ReentrantReadWriteLock。可以通过下面的例子看到实际上故意注释了解锁的un

  • 手把手带你Springboot整合RabbitMq ,一篇讲完

    该篇文章内容较多,包括有rabbitMq相关的一些简单理论介绍,provider消息推送实例,consumer消息消费实例,Direct、Topic、Fanout的使用,消息回调、手动确认等。(但是关于rabbitMq的安装,就不介绍了) 在安装完rabbitMq后,输入http://ip:15672/,是可以看到一个简单后台管理界面的。在这个界面里面我们可以做些什么?可以手动创建虚拟host,创建用户,分配权限,创建交换机,创建队列等等,还有查看队列消息,消费效率,推送效率等等。以上这些管理界面的操作在这篇暂时不做扩展描述,我想着重介绍后面实例里会使用到的。首先先介绍一个简单的一个消息推送到接收的流程,提供一个简单的图:RabbitMq-JCccc黄色的圈圈就是我们的消息推送服务,将消息推送到中间方框里面也就是rabbitMq的服务器,然后经过服务器里面的交换机、队列等各种关系(后面会详细讲)将数据处理入列后,最终右边的蓝色圈圈消费者获取对应监听的消息。常用的交换机有以下三种,因为消费者是从队列获取信息的,队列是绑定交换机的(一般),所以对应的消息推送/接收模式也会有以下几种:Dir

  • 使用 Nginx 反向代理 Tomcat

    概述最近由于业务需求,需要将Tomcat的8080端口映射到443,直接通过https访问,由于在Tomcat配置折腾数次未果,于是想到通过Nginx反向代理实现,成功实现后做如下备忘记录服务器获得CA证书之前服务器已经使用Certbot生成了证书,具体可以参考使用Certbot安装Letsencrypt证书,完成Letsencrypt证书安装后,在/etc/letsencrypt/live/example.com/下应该有四个证书相关文件cert.pem chain.pem fullchain.pem privkey.pem复制Copy证书文件在nginx配置目录下新建目录cert/来存放证书和密钥文件mkdir/etc/nginx/cert复制复制证书文件到此目录并重命名cd/etc/nginx/cert cp/etc/letsencrypt/live/example.com/fullchain.pem./server.pem cp/etc/letsencrypt/live/example.com/privkey.pem./privkey.key复制Nginx代理配置新建配置文件c

  • Flex 打印DataGrid内容 2.0

    <?xml version="1.0" encoding="utf-8"?> <mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*"      backgroundColor="#FFFFFF"      fontFamily="simsun" fontSize="12"     paddingTop="50" paddingBottom="50" paddingLeft="30" paddingRight="30"      height="268" width="748">     <mx:Script>         <![CDATA[             import mx.controls.DateField

  • 清明出游哪儿最热闹?大数据告诉你人都去哪儿了

    清明期间,打算出游的朋友们最关心的自然是哪个景点最热闹,哪里的路更好走。这时候,打开百度热力地图,它能帮你实现适时的人流反馈,还能每十分钟更新一次,指导市民判断出行。“热力君”告诉你哪儿最热闹昨日,记者尝试着在手机上更新了百度地图的APP,在点击百度地图首页的涂层按钮后果真找到了“热力地图”。在开启“热力地图”状态后,原先的南京的区域地图被红、橙、黄、绿、蓝、紫五种色块“涂满”。其中,唯一的红色“圆饼”就位于新街口区域。换句话说,这时候的南京城里,人最多的地方就是新街口。相反的,建邺区、雨花台区和江宁区等地都被淡紫色包围着,由此可知,这些地域人气相对较低,较为冷清。与手机版不同的是,网页版的图主要针对南京的知名景区,且每十分钟就会自动更新一次。根据图中所提供的数据可以看出,在南京72个大小景区中,夫子庙以热力指数42高居南京人气景区榜首,莫愁湖、玄武湖、紫金山等地紧随其后。热力图奥秘就在手机里如此庞大的人流轨迹在短时间内被挖掘出来,百度是怎么做到的?南京邮电大学计算机学院副教授黄海平解释称,一方面,百度与运营商有相关合作,依靠手机GPS的定位功能,来获取信息区域内用户的地理位置并及时统

  • 干货 | 深度学习之损失函数与激活函数的选择

    关键字全网搜索最新排名【机器学习算法】:排名第一【机器学习】:排名第二【Python】:排名第三【算法】:排名第四前言在深度神经网络(DNN)反向传播算法(BP)中,我们对DNN的前向反向传播算法的使用做了总结。其中使用的损失函数是均方差,而激活函数是Sigmoid。实际上DNN可以使用的损失函数和激活函数不少。这些损失函数和激活函数如何选择呢?以下是本文的内容。MSE损失+Sigmoid激活函数的问题先来看看均方差+Sigmoid的组合有什么问题。回顾下Sigmoid激活函数的表达式为:函数图像如下:从图上可以看出,对于Sigmoid,当z的取值越来越大后,函数曲线变得越来越平缓,意味着此时的导数σ′(z)也越来越小。同样的,当z的取值越来越小时,也有这个问题。仅仅在z取值为0附近时,导数σ′(z)的取值较大。在均方差+Sigmoid的反向传播算法中,每一层向前递推都要乘以σ′(z),得到梯度变化值。Sigmoid的这个曲线意味着在大多数时候,我们的梯度变化值很小,导致我们的W,b更新到极值的速度较慢,也就是我们的算法收敛速度较慢。那么有什么什么办法可以改进呢?交叉熵损失+Sigmo

  • 华硕工作站ESC500 G2触动深海世界

    2013年2月,华硕宣布与兰阳博物馆及中国台湾科技大学「体感创新应用实验室」共同建置交互式海洋剧场。游客们至宜兰兰阳博物馆参观、游玩,皆能前往体验、潜入虚拟深海世界,与鱼群同乐。华硕计算机多媒体事业处总经理简孝坚表示:"华硕相当荣幸与兰阳博物馆及中国台湾科技大学三方携手合作,藉由高效能硬设备、软性创意以及技术实力,打造最新颖、有趣的互动剧场,不仅寓教于乐,更让科技、生态与人文完美跨界结合。" 兰阳博物馆新开幕的海洋剧场,以3D动画模拟浅海珊瑚礁环境以及深海鱼群。透过华硕工作站ESC500G2的极致效能,支援高密度丛集运算;体感侦测器XtionPro感测游客肢体动作,跟虚拟鱼群包含小丑鱼、神仙鱼及鬼头刀等一同悠游;两者完美的配搭,让大小朋友深入认识、更加亲近中国台湾近海地区的海洋生态环境。 堪称海洋剧场「灵魂之眼」的华硕XtionPROSeries,使用红外线感测空间深度变化,使用者不需要键盘、鼠标或摇杆等操作工具,可直接透过肢体动作,用最自然、直觉的方式执行与计算机或机器互动。已有开发者利用XtionPROSeries开发出不同类型的应用,例如互动展演艺术、体感游戏

  • 黄聪:wordpress+Windows下安装Memcached服务及安装PHP的Memcached扩展

    一、windows安装Memcached步骤 1.我所使用的版本是1.4.4 32位系统1.4.4版本:http://static.runoob.com/download/memcached-win32-1.4.4-14.zip   2.解压下载的安装包到任意目录 3.给memcached.exe设置管理员权限 4.安装:在Memcached目录,调出命令行,执行: ./memcached.exe-dinstall./memcached.exe-dstart复制 其他.关闭、卸载Memcached服务命令 命令窗口执行停止命令: memcached.exe-dstop复制  命令窗口执行卸载命令: memcached.exe-duninstall复制   二、安装PHP的Memcache扩展 1.查看PHP自己版本信息,如下图: 2.根据PHP版本号,编译器版本号和CPU架构,选择合适的Memcache扩展 这里的PHP版本为5.6.16,VC11 ,X86编译以及TS线程安全,所以,选下面的扩展版本: 选择php_memcach

  • inflection point

    http://blog.thefirehoseproject.com/posts/learn-to-code-and-be-self-reliant/ killwilldevelop 1.repeatcodeuse 2.readdocument    passinflectionpoint givechallengeproblemduringtutorialphase.   adifficultprocess whenstrugglewithself-confidence,workconsistently gainconfidence,resolveproblemanddoubt.  

  • CSS八种让人眼前一亮的HOVER效果

    一.发送效果 HTML <divid="send-btn"> <button> //这里是一个svg的占位 Send </button> </div> 复制代码复制 CSS #send-btn{ display:flex; align-items:center; justify-content:center; height:100vh; } button{ background:#5f55af; border:0; border-radius:5px; padding:10px30px10px20px; color:white; text-transform:uppercase; font-weight:bold; } buttonsvg{ display:inline-block; vertical-align:middle; padding-right:5px; } button:hoversvg{ animation:fly2sease1; } @keyframesfly{ 0%{ transform:translateX(

  • jvascript学习笔记---Json数据格式

    JSON(JavaScriptObjectNotation)一种简单的数据格式,比xml更轻巧。JSON是JavaScript原生格式,这意味着在JavaScript中处理JSON数据不需要任何特殊的API或工具包。 JSON的规则很简单:对象是一个无序的“‘名称/值’对”集合。一个对象以“{”开始,“}”结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’对”之间使用“,”(逗号)分隔。 简单的例子:       varuser=       {           "username":"andy",           "age":20,           "i

  • PHPCMS V9 友情链接的调用

    调用代码: {pc:linkaction="type_list"typeid="4"siteid="1"linktype="1"order="listorderDESC"num="8"return="pic_link"} {loop$pic_link$v} <li><ahref="{$v['url']}"title="{$v['name']}"target="_blank"><imgsrc="{$v[logo]}"width="90"height="30"/></a></li> {/loop} {/pc} 复制  上面的例子中输出了站点ID为1,分类ID为4的所有图片友情链接   可用参数: 参数名 是否必须 默认值 说明 siteid 是 null 当前站点ID linktype 是 1 显示方式 order 是 listorder DESC 排序方式 typeid 否 null 分类ID   字段 类型 空 默认 注释 id int(10)

  • [翻译练习]密码学1小时入门 (Everything you need to know about cryptography in 1 hour)

      原文:http://www.daemonology.net/papers/crypto1hr.pdf   【密码学简介】   很多人都误用了密码学   一般可归为三类: 1.愚蠢 比如GoogleKeyczar(计时旁路timingsidechannel),SSL(对话重建sessionrenegotiation) 2.工具使用方法错误 亚马逊AWSsignaturemethod1(non-collision-freesigning),FlickrAPIsignatures(hashlength-extension) 3.不寻常的环境 Intel超线程(架构性旁路architecturalsidechannel),WEP,WPA,GSM(各种错误…)   传统智慧:不要自己写加密代码! ·传输的时候用SSL ·保护数据用GPG ·“如果你在代码里写了A-E-S几个字母,那么你错了。”---ThomasPtacek   事实:不管我怎么说,你肯定会自己写加密代码的,你最好明白自己在做什么。 事实:大部分应用只需要一小部分好

  • Java反射机制原理详解

    什么是反射? Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,从而操作类或对象的属性和方法。本质是JVM得到class对象之后,再通过class对象进行反编译,从而获取对象的各种信息。 Java属于先编译再运行的语言,程序中对象的类型在编译期就确定下来了,而当程序在运行时可能需要动态加载某些类,这些类因为之前用不到,所以没有被加载到JVM。通过反射,可以在运行时动态地创建对象并调用其属性,不需要提前在编译期知道运行的对象是谁。 反射机制的概念 指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能调用它的任意一个方法。这种动态获取信息,及动态调用对象方法的功能叫java语言的反射机制。 反射的原理 Class对象的由来是将.class文件读入内存,并为之创建一个Class对象。 对于类加载机制与双亲委派模型感兴趣的小伙伴可以阅读这篇文章:https://blog.csdn.net/a745233700/article/details/90232862 反射的优缺点 1、优点:在运行时获得类的各种内容,进行反编译,对于Ja

  • 单一图片切换jquery

    <scripttype="text/javascript"src="jquery-1.8.3.min.js"></script>      <style>         .for{overflow:hidden;width:100%;zoom:1;}         .forul{list-style:none;}         .forulli{float:left;margin:5px;}         .forulliimg{display:block;}      

  • mac 命令行打开app

    进入shell终端:open-axCode可以打开xCode应用程序 若是遇到名字有空格就需要使用反斜线例:open-aSublime\Text

  • SonarQube

    http://blog.csdn.net/wuxuehong0306/article/details/50847893 http://www.cnblogs.com/qiaoyeye/p/5249786.html

  • 博弈小专题

    //取石子专题 First:巴什博弈     只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。 如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜。将这一状态进行推广,那么当能够使得状态为n%(m+1)==0的人必胜。也就是说,只要n%(m+1)!=0,则先手必胜。 Second:尼姆博弈 详解戳     有3堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取1个,多者不限,最后取光者得胜。 首先只要最后剩两堆物品一样多(不为零),第三堆为零,那面对这种局势的一方就必败,我们用(a,b,c)表示某种局势,(0,0,0)显然是必败态;第二种必败态是(0,n,n),自己在某一堆拿走k(k≤n)个物品,不论k为多少,对方只要在另一堆拿走k个物品,最后自己都将面临(0,0,0)的局势,必败。 对于任何必败局势(a,b,c),都有aXORbXORc=0。 那么现在面临的问题就是,非必败态

相关推荐

推荐阅读