单细胞分析:整合

导读

撰写本文的主要目的是:整合 处理与对照后的 PBMC(Human peripheral blood mononuclear cell,人外周血单个核细胞) 数据集以了解细胞类型特异性反应和整合的作用

本教程介绍了来自 Kang 等人,2017 年 的两组 PBMC 的比对情况。在这个实验中,PBMCs 被分成处理组(刺激组)和对照组,处理组使用 干扰素β 处理。对干扰素的应激导致细胞类型特异性基因表达发生变化,这使得对所有数据的联合分析变得困难。在这里,我们展示了我们的整合策略,如 Stuart 和 Butler 等人,2018 年 所述,执行整合分析以促进常见细胞类型的识别并进行比较分析。虽然此示例只演示了两个数据集(条件)的整合,但这个方法可以扩展到多个数据集。

1. 目的

以下教程旨在为您概述使用 Seurat 整合后对复杂细胞类型进行的各种比较分析。

在这里,我们有以下三个目标:

  • 识别两个数据集中都存在的细胞类型
  • 获得对照组和处理组中都保守的细胞类型标记(markers
  • 通过比较数据集来寻找对刺激处理产生特异性反应的细胞类型

2. 创建对象

基因表达矩阵可以在文末的链接找到下载地址,或 点我。我们首先读入两个计数矩阵并创建 Seurat 对象。

# 加载包
library(Seurat)
library(cowplot)

# 读取数据
ctrl.data <- read.table(file = "../data/immune_control_expression_matrix.txt.gz", sep = "\t")
stim.data <- read.table(file = "../data/immune_stimulated_expression_matrix.txt.gz", sep = "\t")

# 创建 对照组 对象
ctrl <- CreateSeuratObject(counts = ctrl.data, project = "IMMUNE_CTRL", min.cells = 5)
ctrl$stim <- "CTRL"
ctrl <- subset(ctrl, subset = nFeature_RNA > 500)
ctrl <- NormalizeData(ctrl, verbose = FALSE)
ctrl <- FindVariableFeatures(ctrl, selection.method = "vst", nfeatures = 2000)

# 创建 处理组 对象
stim <- CreateSeuratObject(counts = stim.data, project = "IMMUNE_STIM", min.cells = 5)
stim$stim <- "STIM"
stim <- subset(stim, subset = nFeature_RNA > 500)
stim <- NormalizeData(stim, verbose = FALSE)
stim <- FindVariableFeatures(stim, selection.method = "vst", nfeatures = 2000)

3. 整合

然后,我们使用 FindIntegrationAnchors 函数识别 anchors(锚点),该函数将 Seurat 对象列表作为输入,并使用这些锚点,利用 IntegrateData 函数将两个数据集整合在一起。

# 识别 anchors 
immune.anchors <- FindIntegrationAnchors(object.list = list(ctrl, stim), dims = 1:20)


# 整合
immune.combined <- IntegrateData(anchorset = immune.anchors, dims = 1:20)

4. 整体分析

现在我们可以对所有细胞进行一个综合分析!

DefaultAssay(immune.combined) <- "integrated"

# 运行可视化和聚类的标准工作流程
immune.combined <- ScaleData(immune.combined, verbose = FALSE)
immune.combined <- RunPCA(immune.combined, npcs = 30, verbose = FALSE)

# t-SNE and 聚类
immune.combined <- RunUMAP(immune.combined, reduction = "pca", dims = 1:20)
immune.combined <- FindNeighbors(immune.combined, reduction = "pca", dims = 1:20)
immune.combined <- FindClusters(immune.combined, resolution = 0.5)

# 可视化
p1 <- DimPlot(immune.combined, reduction = "umap", group.by = "stim")
p2 <- DimPlot(immune.combined, reduction = "umap", label = TRUE)
plot_grid(p1, p2)

为了并排可视化这两个条件,我们可以使用 split.by 参数来显示按簇着色的每个条件。

DimPlot(immune.combined, reduction = "umap", split.by = "stim")

5. 保守marker鉴定

为了识别跨条件保守的细胞类型标记基因,Seurat 提供了 FindConservedMarkers 函数。此函数对每个数据集或组执行差异基因表达 test,并使用 MetaDE R 包中的元分析(Meta-analysis)方法组合 p 值。例如,我们可以计算簇 7(NK 细胞)中无论条件如何,都是保守的标记基因。

DefaultAssay(immune.combined) <- "RNA"
nk.markers <- FindConservedMarkers(immune.combined, ident.1 = 7, grouping.var = "stim", verbose = FALSE)
head(nk.markers)

我们可以探索每个簇的这些标记基因,并使用它们,将我们的簇注释为特定的细胞类型。

FeaturePlot(immune.combined, features = c("CD3D", "SELL", "CREM", "CD8A", "GNLY", "CD79A", "FCGR3A", 
    "CCL2", "PPBP"), min.cutoff = "q9")

immune.combined <- RenameIdents(immune.combined, `0` = "CD14 Mono", `1` = "CD4 Naive T", `2` = "CD4 Memory T", 
    `3` = "CD16 Mono", `4` = "B", `5` = "CD8 T", `6` = "T activated", `7` = "NK", `8` = "DC", `9` = "B Activated", 
    `10` = "Mk", `11` = "pDC", `12` = "Eryth", `13` = "Mono/Mk Doublets")

DimPlot(immune.combined, label = TRUE)

带有 split.by 参数的 DotPlot 函数可用于查看跨条件的保守细胞类型标记,显示表达水平和表达任何给定基因的簇中细胞的百分比。在这里,我们为 13 个聚类中的每一个绘制了 2-3 个强标记基因。

Idents(immune.combined) <- factor(Idents(immune.combined), levels = c("Mono/Mk Doublets", "pDC", 
    "Eryth", "Mk", "DC", "CD14 Mono", "CD16 Mono", "B Activated", "B", "CD8 T", "NK", "T activated", 
    "CD4 Naive T", "CD4 Memory T"))

markers.to.plot <- c("CD3D", "CREM", "HSPH1", "SELL", "GIMAP5", "CACYBP", "GNLY", "NKG7", "CCL5", 
    "CD8A", "MS4A1", "CD79A", "MIR155HG", "NME1", "FCGR3A", "VMO1", "CCL2", "S100A9", "HLA-DQA1", 
    "GPR183", "PPBP", "GNG11", "HBA2", "HBB", "TSPAN13", "IL3RA", "IGJ")

DotPlot(immune.combined, features = rev(markers.to.plot), cols = c("blue", "red"), dot.scale = 8, 
    split.by = "stim") + RotatedAxis()

6. 跨条件识别差异表达基因

现在我们已经对齐了受刺激组(处理组)细胞和对照组细胞,我们可以开始进行比较分析并查看刺激引起的差异。观察这些变化的一种方法是绘制受刺激细胞和对照细胞的平均表达,并在散点图上寻找异常值的基因。在这里,我们取受刺激和对照 naive T 细胞和 CD14 单核细胞群的平均表达,并生成散点图,突出显示对干扰素刺激有显着反应的基因。

t.cells <- subset(immune.combined, idents = "CD4 Naive T")
Idents(t.cells) <- "stim"
avg.t.cells <- log1p(AverageExpression(t.cells, verbose = FALSE)$RNA)
avg.t.cells$gene <- rownames(avg.t.cells)

cd14.mono <- subset(immune.combined, idents = "CD14 Mono")
Idents(cd14.mono) <- "stim"
avg.cd14.mono <- log1p(AverageExpression(cd14.mono, verbose = FALSE)$RNA)
avg.cd14.mono$gene <- rownames(avg.cd14.mono)

genes.to.label = c("ISG15", "LY6E", "IFI6", "ISG20", "MX1", "IFIT2", "IFIT1", "CXCL10", "CCL8")
p1 <- ggplot(avg.t.cells, aes(CTRL, STIM)) + geom_point() + ggtitle("CD4 Naive T Cells")
p1 <- LabelPoints(plot = p1, points = genes.to.label, repel = TRUE)
p2 <- ggplot(avg.cd14.mono, aes(CTRL, STIM)) + geom_point() + ggtitle("CD14 Monocytes")
p2 <- LabelPoints(plot = p2, points = genes.to.label, repel = TRUE)
plot_grid(p1, p2)

正如您所看到的,许多相同的基因在这两种细胞类型中都上调,并且可能代表了一种保守的干扰素反应途径。

因为我们有信心在不同条件下识别出常见的细胞类型,所以我们可以查看相同类型细胞在不同条件下哪些基因会发生变化。首先,我们在 meta.data 中创建一个列来保存细胞类型和处理信息,并将当前标识切换到该列。然后使用 FindMarkers 来查找受刺激 B 细胞和对照 B 细胞之间不同的基因。请注意,此处显示的许多 Top 基因与我们之前绘制的核心干扰素反应基因相同。此外,我们看到的 CXCL10 等特定于单核细胞和 B 细胞干扰素反应的基因在此列表中也显示出非常重要的意义。

immune.combined$celltype.stim <- paste(Idents(immune.combined), immune.combined$stim, sep = "_")
immune.combined$celltype <- Idents(immune.combined)
Idents(immune.combined) <- "celltype.stim"
b.interferon.response <- FindMarkers(immune.combined, ident.1 = "B_STIM", ident.2 = "B_CTRL", verbose = FALSE)
head(b.interferon.response, n = 15)

另一种可视化基因表达变化的方法是使用 FeaturePlotVlnPlot 函数的 split.by 选项。这将显示给定基因列表的特征图,按分组变量(此处为刺激条件)拆分。CD3D 和 GNLY 等基因是典型的细胞类型标记(用于 T 细胞和 NK/CD8 T 细胞),它们几乎不受干扰素刺激的影响,并且在对照组和受刺激组中显示出相似的基因表达模式。另一方面,IFI6 和 ISG15 是核心干扰素反应基因,并在所有细胞类型中上调。最后,CD14 和 CXCL10 是显示细胞类型特异性干扰素反应的基因。刺激 CD14 单核细胞后 CD14 表达降低,这可能导致监督分析框架中发生错误分类,强调了整合分析的价值。CXCL10 在干扰素刺激后在单核细胞和 B 细胞中显示出明显的上调,但在其他细胞类型中则没有。

FeaturePlot(immune.combined, features = c("CD3D", "GNLY", "IFI6"), split.by = "stim", max.cutoff = 3, 
    cols = c("grey", "red"))

plots <- VlnPlot(immune.combined, features = c("LYZ", "ISG15", "CXCL10"), split.by = "stim", group.by = "celltype", 
    pt.size = 0, combine = FALSE)
CombinePlots(plots = plots, ncol = 1)


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

相关文章

  • R语言中如何删除缺失数据

    在数据分析中,有时候需要将缺失数据进行删除。删除数据很有讲究,比如多性状模型分析时,个体ID1的y1性状缺失,y2性状不缺失,评估y1时,不仅可以通过亲缘关系矩阵和固定因子进行评估,还可以根据y1和y2的遗传相关进行评估,这时候,y1的缺失就不需要删除。 有时候y1和y2性状都缺失,这时候就没有必要保留了,增加运算量,还增加错误的可能性,这时候就需要将其删除。 一般都是使用tidyverse进行清洗数据,但是drop_na函数没有这个功能,这里总结一下,如果有这种需求,如何处理。tidyverse的drop_na函数,当面对多个列时,它的选择是“或”,即是只有有有一列有缺失,都删掉。有时候我们想将两列都为缺失的删掉,如果只有一列有缺失,要保留。举个例子:「示例数据:」set.seed(123) dat=data.frame(ID=1:10,y1=c(NA,NA,1.05,NA,rnorm(6)),y2=c(1,NA,NA,NA,rnorm(6))) dat 复制>dat IDy1y2 11NA1.0000000 22NANA 331.05000000NA 44NANA 55-0.

  • LiTAMIN:基于正态分布几何近似的SLAM

    编辑丨当SLAM遇见小王同学声明:本文只是个人学习记录,侵权可删。论文版权与著作权等全归原作者所有,小王自觉遵守《中华人民共和国著作权法》与《伯尔尼公约》等国内外相关法律,本文禁止转载!!“ 本文提出了一种3DLiDARSLAM方法,该方法提高了采用具有正态分布簇的局部近似几何的ICP算法的准确性,鲁棒性和计算效率。与以前的基于正态分布的ICP方法相比,作者的ICP方法可以通过Frobenius范数和正则协方差矩阵对成本函数进行归一化。以前的方法通过主成分分析,其计算成本比LiTAMIN高。而且,LiTAMIN可以减少不正确的闭环约束的影响。实验结果表明,LiTAMIN优于包括LOAM,LeGO-LOAM等方法。 ”简介SLAM是自主移动机器人的一项基本技术。特别是LiDARSLAM被广泛使用,因为它在室内和室外环境中均表现出稳定的性能。LiDAR的SLAM方法分为两类:基于匹配和基于特征。基于匹配的方法采用几何配准技术,例如迭代最近点(ICP)和正态分布变换(NDT)。这些方法通过直接使用扫描点来提供准确的位置估计。但是,它们在计算上效率不高,因为它们使用大量的点进行稳定配准。基于特

  • Salesforce学习 Lwc(十五)【Picklist项目的Label值取得方法】

    几乎每个Object中都有Picklist类型的项目,实际开发过程中会遇到画面上需要显示当前Picklist的值,利用Lwc如何开发呢,下边通过简单的例子说明一下。我在【Account】Object中创建一个Picklist的项目【Importance__c】,具体有三个值,高,中,低下边我们开发一个Lwc,用于在Account详细页面显示它当前值,通过Lwc的【getRecord】方法可以轻松取得Picklist项目的值。warningMsgPanel.html<template> <lightning-cardtitle="警告"icon-name="custom:custom14"> <divclass="slds-p-around_medium"> <templateif:true={messages.length}> <templatefor:each={messages}for:item="message"> <pkey={mes

  • 云备份解决方案可以解决的业务问题

    对于没有采用磁带存储的组织来说实施云备份要容易得多。在基于云计算的系统中,启用重复数据删除和压缩后,数据存储就不再是一个难题。拥有大量的数据对于组织来说是一种法律要求,也是一种责任。许多组织仍然依赖磁带进行数据备份,但在日益数字化的世界中,他们是否应该这样做?当一家组织询问是否应该将所有备份数据从磁带传输到云存储时,这成为了一个令人关注的问题。该组织涉及的数据总计2PB,存储在几百个磁带上,涵盖了过去五年的数据备份。该组织正在探索将其转移到云端的想法,并采用了磁带数据恢复服务。乍一看,外包解决方案的成本似乎很高,因此需要其他的建议。该组织了解自己想要实现的目标,关键问题是为什么他们认为这对其业务是必要的措施。这不仅仅是磁带和云存储各有自己优势的问题。他们需要解决的问题是:如何使用每周和每月精心备份的数据。换句话说,为什么要存储这么多数据,真的需要这些数据吗?如果需要的话,如何更快地访问所需的数据?磁带仍存在于云中磁带如今已经存在和使用了很长一段时间,并且存储容量很容易扩展。但是也有一些难以克服的问题。例如并不可靠,在紧急情况下可能不容易恢复数据。大多数内部IT团队都不喜欢使用磁带备份,

  • 将Eclipse工程转Android Studio工程的步骤与注意事项

    Gradle的基础想要将Eclipse转为AndroidStudio项目,那么Gradle语法是必修课。此处引进一篇文章,基础就不写了,Gradle基础引言目前,用AndroidStudio来开发Android项目已是大势所趋,就连Google也已经宣布了不再支持Eclipse。所以一些老的Eclipse工程转AndroidStudio工程也是有必要的。工程转换有两种:一种是兼容模式,即Eclipse和AndroidStudio都可以用的工程结构;一种是AndroidStudio的目录结构。这里先记录下兼容模式的转换方法。一.从Eclipse中导出Gradle文件首先保证Eclipse包含Gradle插件,选择菜单File-Export-GenerateGradlebuildfiles,然后一路无脑next,勾选需要转换的工程(如果有依赖工程,把依赖工程也勾选上),在finish之前最好勾选上Forceoverridingofexistingfiles,以保证覆盖掉工程中由于之前有过类似操作而存在的文件。二.修改gradle文件参数现在,工程中多出了几个gradle相关的文件。修改两个

  • mysql分库备份与分表备份

    1、分库备份2、分库分表备份1、分库备份要求:将mysql数据库中的用户数据库备份,备份的数据库文件以时间命名 脚本内容如下:#!/bin/bash mysql_user=root mysql_pass=123456 mkdir-p/backup fornin`mysql-u$mysql_user-p$mysql_pass-e'showdatabases;'2>/dev/null|grep-Ev'_schema|mysql'|sed'1d'`; do mysqldump-u$mysql_user-p$mysql_pass-B$n2>/dev/null>/backup/${n}_`date+%Y_%m_%d`.sql done复制执行脚本进行测试:[root@db01scripts]#sh-xbackup_database.sh +mysql_user=root +mysql_pass=123456 +mkdir-p/backup ++mysql-uroot-p123456-e'showdataba

  • 百度与三星准备在明年初合作生产前沿AI芯片

    编辑|KING 发布|ATYUN订阅号三星和百度本周表示,两家公司将在2020年初开始批量生产AI加速器芯片。百度的昆仑芯片将使用三星成熟的14纳米制程技术制造,并使用三星的Interposer-Cube2.5D包装结构。XPU神经处理器架构是百度昆仑AI加速器的基础,该架构使用数千个小内核建立云和网络边缘的各种应用程序。该芯片以150瓦的功率提供每秒260万亿次操作(TOPS),并使用两个HBM2内存封装提供512GB/s的内存带宽。据百度称,其昆仑芯片在ERNIE(具有信息实体的增强语言表示)推理应用程序中的速度是传统GPU或FPGA的三倍。此外,它还可以用于自动驾驶、语音识别、图像处理和深度学习。昆仑是最早使用I-Cube封装的AI加速器之一,由SamsungFoundry制造。2.5D封装使用插入器,有望使三星能够制造其他需要高内存带宽的加速器芯片,因此可以利用其HBM2内存产品。此外,该公司正在开发其他高级包装解决方案,包括再分配层(RDL)以及更密集的HBM包装。通过两家公司之间的首次代工合作,百度将提供先进的AI平台以最大化AI性能,三星将把代工业务扩展到专用于云和边缘计

  • 聊聊dubbo的NettyServer

    序本文主要研究一下dubbo的NettyServerAbstractServerdubbo-2.7.3/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/transport/AbstractServer.javapublicabstractclassAbstractServerextendsAbstractEndpointimplementsServer{ protectedstaticfinalStringSERVER_THREAD_POOL_NAME="DubboServerHandler"; privatestaticfinalLoggerlogger=LoggerFactory.getLogger(AbstractServer.class); ExecutorServiceexecutor; privateInetSocketAddresslocalAddress; privateInetSocketAddressbindAddress; privateint

  • 基于WebGL的超逼真仿透明液体流动变形效果教程

    简要教程 这是一款基于WebGL的超逼真液体流动变形效果。该效果使用PixiJS和GSAP来制作,以轮播图的方式来展现不同类型的液体流动变形效果。液体流动变形效果共5组,非常逼真。 使用方法 在页面中引入下面的文件。<scriptsrc="js/demo.js"></script> <scriptsrc="js/pixi.min.js"></script> <scriptsrc="js/TweenMax.min.js"></script> <scriptsrc="js/main.js"></script> <scriptsrc="js/imagesloaded.pkgd.min.js"></script>复制javascript javascript代码<script> imagesLoaded(document.body,()=>docume

  • Kali Linux Web渗透测试手册(第二版) - 3.9 - WebScarab的使用

    翻译来自:掣雷小组 成员信息:thr0cyte,Gr33k,花花,MrTools,R1ght0us,7089bAt今日封面大图地址:http://2.bp.blogspot.com/-fLRjPeP-Bks/UMagsRTf9dI/AAAAAAAABPg/aHYyEMx0n3g/s1600/127.0.0.1+Wallpaper.png标记红色的部分为今日更新内容。第三章、使用代理、爬行器和爬虫3.0、介绍3.1、使用DirBuster寻找敏感文件和目录3.2、使用ZAP寻找敏感文件和目录3.3、使用BurpSuite查看和修改请求3.4、使用BurpSuite的Intruder模块发现敏感目录3.5、使用ZAP代理查看和修改请求 3.6、使用ZAP的爬虫功能3.7、使用burp爬取网站页面 3.8、使用BurpSuite的重放功能3.9、WebScarab的使用3.10、从爬行结果中识别相关文件和目录3.9、WebScarab的使用 WebScarab是我们接下来要学习的另一款功能强大的Web代理工具,它深受渗透测试人员的喜欢。在本章节,我们将使用WebScarab来演示对网站的爬取

  • 【java】java反射初探 ——“当类也学会照镜子”

    反射的作用开门见山地说说反射的作用1.为我们提供了全面的分析类信息的能力2.动态加载类我理解的“反射”的意义(仅个人理解哈)我理解的java反射机制就是:提供一套完善而强大的API“反射“类的结构。打个比方,反射机制就像是一面镜子,而类就像是一个在照着镜子的人。镜子(反射机制)照出(反射)了人的全貌(类的全方位的信息,例如方法,成员变量和构造器等的相关信息)为什么要照镜子?因为不照镜子看不清楚自己的全貌,“镜子”就是为了解决这个问题出现的(为我们提供全面分析类的能力)好吧,我知道这听起来还是很模糊,让我们一步一步来:类也是对象在java里有一句话:万物皆对象,即使是int等基本类型,虽然本质上不是对象,但行为却也和对象密切相关(基本包装类型和自动装箱)所以有一个可能完全打破我们常规思维的论断是:类也是对象“类”对象和“类”类型好吧,其实说“类也是对象”并不太好,而应该说,java中每个类都有一个与之对应的“类”对象(Class对象),这个“类”对象由jvm生成,并保存了对应类的相关信息。例如,假设我们的java文件涉及三个类:a类,b类和c类,那么编译的时候就会对应生成a类的“类”对象

  • 内卷时代下的前端技术-使用JavaScript在浏览器中生成PDF文档

    背景 在计量领域中,计量检定是一种重要形式,主要用于评定计量器具的计量性能,确定其量值是否准确一致,实现手段包括计量检验、出具检定证书和加封盖印等。 在检定证书这一环节,存在一个难点,就是无法在线预览以及智能生成。 1、证书管理不能满足用户精准打印、特殊字符或多页打印的需求。因为在计量行业中,精密仪器较多,往往会存在一些特殊字符的应用或者会使用某些较为复杂的测量单位。 2、系统不支持批量证书更新以及批量打印等功能,在常见的场景中,出具证书是需要进行批量导出的过程。 3、无法满足实时打印预览或者PDF预览,这样直至打印前都无法确定打印的格式、范围等是否符合需求。 在这篇分享中,我们将帮助大家着重解决两个问题: 1、在浏览器中生成PDF文件; 2、解决中文以及特殊字符导出PDF乱码的问题。 在浏览器中生成PDF文件。前端生成PDF文件纯依赖于客户端的浏览器资源,对于不同的终端,导出PDF的难度会比服务端有所增加。市面上主流的浏览器有三四家,例如Chrome、Safari、FireFox等,每个浏览器对于文字内容、CSS属性处理都不一致,有可能某些配置在某个浏览器上可行,换了一个浏览器之后就

  • 实验一 命令解释程序的编写

    实验一、命令解释程序的编写 专业:商软(2)班  姓名:卢晓洵 学号:201406114211 一、  实验目的 (1)掌握命令解释程序的原理; (2)掌握简单的DOS调用方法; (3)掌握C语言编程初步。 二、  实验内容和要求 编写类似于DOS,UNIX的命令行解释程序 (1)自行定义系统提示符 (2)自定义命令集(8-10个) (3)用户输入HELP以查找命令的帮助 (4)列出命令的功能,区分内部还是外部命令 (5)用户输入QUIT退出 (6)内部命令有dir,cd,md,rd,cls,date,time,ren,copy等。 三、  实验方法、步骤及结果测试  1.      源程序名:压缩包文件(rar或zip)中源程序名test2.c 可执行程序名:test2.exe  2.      原理分析及流程图 存储结构: char*b[11]={"dir

  • php配置虚拟主机

    在httpd.conf的目录下,新建一个配置文件virtualhost-host.conf,添加虚拟主机配置 <VirtualHost*:80>DocumentRoot"E:\liuxg\liuxg1"ServerNamewww.liuxg1.com<Directory"E:\liuxg\liuxg1">OptionsIndexesFollowSymLinks<!--若目录下有index则自动打开index文件,如果没有则列出文件列表-->AllowOverrideNoneRequireallgranted</Directory></VirtualHost> <VirtualHost*:80>DocumentRoot"E:\liuxg\liuxg2"ServerNamewww.liuxg2.com<Directory"E:\liuxg\liuxg2">OptionsIndexesFollowSymLinksAllowOverrideNoneRequireallgranted</Directory&

  • 历史上第一位计算机程序员-Ada Lovelace(中文版)

    艾达洛夫莱斯(AdaLovelace)  https://codedocs.org/what-is/ada-lovelace   正义之士 洛夫莱斯伯爵夫人 Daguerreotype by AntoineClaudet (大约1843年). 仅有的两张已知照片之一 出生 汉.奥古斯塔·阿达·拜伦(Hon.AugustaAdaByron) 1815年12月10日 英国伦敦马里波恩 死亡 1852年11月27日(36岁) 英国伦敦马里波恩 坟墓 圣玛丽抹大拉教堂,哈克纳尔,诺丁汉,英格兰 闻名(成就) 数学、计算 配偶 第一代洛夫 WilliamKing-Noel,1stEarlofLovelace(1835 米) 孩子们 ByronKing-Noel,ViscountOckham and12thBaronWentworth AnneBlunt,15thBaroness

  • Day 11.20模拟赛游记

    又是爆零的一天! 没写出的题就写写知识点吧: T1:线段树合并 T3:kruskal重构树 T4:FFT T2 题目大意:一棵树,对于每一个\(i\),求有多少个\(j\)为\(i\)的联系节点,\(j\)满足\(\forallk(j<k\lei)\)都是\(j\)的子孙节点。 题目挺简单,但考场上完全想错方向,对于\(j\)的右边最多可以作为那些\(i\)的联系节点,易证这些\(i\)一定是连续的,而且紧挨着\(j\),因为一旦有一个不是\(j\)的子孙节点,后面的就都不会是\(j\)的联系节点了。所以我们就可以二分这个右端点,用\(dfs\)序或许是一个不错的选择。 众所周知,只要\(i\)满足\(dfn_j\ledfn_i\ledfn_j+size_j-1\),\(i\)就在\(j\)的子树内,所以用\(st\)表维护一个\(dfn\)的最大值和最小值,卡卡常就可以\(O(nlogn)\)解决此题。 #include<bits/stdc++.h> #definereregister usingnamespacestd; constintN=2

  • .NET Core整理之配置EFCore

    1、新建ASP.NETCoreWeb应用程序 2、从NuGet下载安装以下工具包    Microsoft.EntityFrameworkCore    Microsoft.EntityFrameworkCore.SqlServer    Microsoft.EntityFrameworkCore.Tools    Microsoft.EntityFrameworkCore.Design    Microsoft.EntityFrameworkCore.SqlServer.Design 3、然后,我们在VS的工具选项中,选择NuGet包管理器,选择程序包管理控制台(其中Models2是输出文件夹) Scaffold-DbContext"Server=.;database=test1;Trusted_Connection=True;"Microsoft.EntityFrameworkCore.SqlServer-OutputDirMo

  • fiddler抓取安卓模拟器Genymotion

    第一步:安装Genymotion  这里选择genymotion-2.12.0-vbox.exe 1.Android模拟器Genymotion安装使用教程详解 1、注册\登录 打开Genymotion官网,https://www.genymotion.com/ ,首先点击右上角的Signin进行登录操作。如何登录就不细讲了,下面讲一下如何注册(备注:注册按钮在登录界面中)。       注册 如果没有账号,则需要先注册。在登录界面,点击Createanaccount按钮打开注册界面。       注册界面如下:(使用谷歌浏览器翻译后的界面)       按照上面的提示输入相关内容,需要注意的是输入邮箱和密码后,系统会发送一封邮件到你邮箱,请一定要去验证。注意:一定要进行验证!!! 2、下载、安装安卓模拟器Genymotion 下载地址:https://www.genymotion.com/download/ 下载genymotion 因为Genymotion运行需要Virtua

  • 阿里云【名师课堂】Java面向对象开发60 ~ 62:【第3.5个代码模型】综合案例:数组操作

    目录60:定义Array父类61:SortArray排序子类62:ReverseArray反转子类 现在要求定义一个整型数据数组操作类,有如下要求: 该数组大小由类创建对象的时候动态决定; 可以通过类向数组中进行数据的保存,保存时需要考虑空间问题; 如果发现数组空间不足,则可以进行数组长度的动态扩充。 可以取得数组的全部数据 而后在这一基础上,要求继续扩展两个派生类,功能要求: 可以进行数组的排序处理; 可以进行数组的反转处理。 60:定义Array父类 回顾:数组的声明、创建、初始化。 声明并开辟数组: 数组类型数组名称[]=new数据类型[长度]; 分布进行数组空间开辟: 声明数组:数组类型数组名称[]=null; 开辟数组空间(创建数组):数组名称=new数据类型[长度]; 当数组采用动态初始化开辟空间之后,数组里的每一个元素都是该数组对应数据类型的默认值 数组元素的赋值:数组名称[索引号]=数据; 动态初始化有一个明显特点:数组先开辟内存空间,而后再使用索引进行内容的设置。 而如果希望数组在定义的时候可以同时设置内容,可以使用静态初始化。语法有以下两

  • windows系统下如何安装多版本node(nvm的安装与使用)

    使用不同版本node的原因:   在做项目开发过程中,有时会因为node版本过高或太低,导致报错;如何在同一个系统中安装多个版本的node呢,那就是使用nvm进行管理 安装前须知: 之前有node环境的需卸载干净 如果安装完node后,输入nvmuse版本号 ,仍无效(node版本前面都没有选中的"*"),需重新安装 路径上不要有中文字符或者空格,会出现错误     卸载已安装的nodeJS 1.点击开始菜单,找到nodejs的文件夹,点击箭头处,进行卸载(注意:进行此操作之前需结束使用nodejs的项目)    2.检测系统中是否还存在nodejs 在开始菜单中进行查看 在cmd窗口中输入node-v 进行查看  nvm的安装与使用 1.什么是nvm?   nvm全名node.jsversionmanagement,即是一个nodejs的版本管理工具。通过它可以安装和切换不同版本的nodejs。 2.nvm下载   安装包下载地址: https://github.com/coreybutler/nvm-wi

  • 狼人杀校园升级版:学霸大战学渣 Who is the king of examination!

    之前在微博上看到一个很老的段子 写道 天黑请闭眼。学霸请睁眼,学霸请答题,好的学霸请闭眼;学渣请睁眼,学渣请坐弊,好的学渣请闭眼;监考老师请睁眼,监考老师请确定坐弊考生,监考老师请统一意见,好的监考老师请闭眼;助教请睁眼,助教今晚这名考生挂了,你要救他吗?你要让一名考生挂科吗?好的助教请闭眼。天亮了,这名考生挂了.  第一次看这个段子的时候,只是一笑而过,相信大多数人都和我一样,没有去详细分析这段话的逻辑性和可行性,今天再次看到这段话,去思考了下背后的逻辑关系,发现与狼人杀的对应关系还是比较强的,不过需要一点剧情上的整理。分析下这段话中的各个角色同狼人杀中的角色的对比关系,对比如下图: 很难想象,学霸在这个游戏中居然跟狼人杀中最弱势的村民相对应,那么其实学霸根本就没有必要在天黑的时候睁眼答题了嘛,详细分析下此游戏的具体规则和操作如下:1)游戏的主要对立方为学霸和学渣。学霸要在监考老师的引导下抓出所有学渣,而学渣的目的则是抄袭或者替换学霸的答案,让学霸考试不通过,从而逐一杀死学霸,当学霸或学渣全部死完,则分出胜负。 2)学渣如何杀死学霸。因为学霸学习很厉害,

相关推荐

推荐阅读