DAY30

本文探讨了全局变量的概念及使用中存在的问题,并介绍了如何高效查询大规模数据库表中的特定记录。此外,还深入解析了死锁现象及其代码示例。

1、什么是全局变量?这些变量如何声明,使用全局变量有哪些问题?

 

全局变量是整个代码长度可用的变量,也就是说这些变量没有任何作用域。var关键字用于声明局部变量或对象。如果省略var关键字,则声明一个全局变量。

 

例:// Declare a globalglobalVariable = “Test”;

 

使用全局变量所面临的问题是本地和全局变量名称的冲突。此外,很难调试和测试依赖于全局变量的代码。

 

2. 开放性问题:据说是腾讯的

一个6亿的表a,一个3亿的表b,通过外间tid关联,你如何最快的查询出满足条件的第50000到第50200中的这200条数据记录。

1、如果A表TID是自增长,并且是连续的,B表的ID为索引

select * from a,b where a.tid =b.id and a.tid>500000 limit 200;

 

2、如果A表的TID不是连续的,那么就需要使用覆盖索引.TID要么是主键,要么是辅助索引,B表ID也需要有索引。

select * from b , (select tidfrom a limit 50000,200) a where b.id = a .tid;

 

 

3. .什么是死锁(deadlock)?

两个进程都在等待对方执行完毕才能继续往下执行的时候就发生了死锁。结果就是两个进程都陷入了无限的等待中。

代码表示:

 

代码描述:

 

public class DieLockDemo {

public static void main(String[] args) {

DieLock dl1 = new DieLock(true);

DieLock dl2 = new DieLock(false);

 

dl1.start();

dl2.start();

}

}

*...理想状态下dl1线程为true从if执行先打出"if objA"然后再接着打出"ifobjB"之后释放A、B的锁对象,之后dl2线程执行else语句打出"elseobjB","else objA"。

非理想状态下dl1先打出"if objA",之后线程dl2执行打出"else objB",然后1、2线程的锁对象A和B都处于被锁的状态,两个线程争夺锁对象发生死锁现象。..*

public class DieLock extends Thread {

private boolean flag;

public DieLock(boolean flag) {

this.flag = flag;

}

@Override

public void run() {

if (flag) {

synchronized (MyLock.objA) {

System.out.println("if objA");

synchronized (MyLock.objB) {

System.out.println("if objB");

}

}

} else {

synchronized (MyLock.objB) {

System.out.println("else objB");

synchronized (MyLock.objA) {

System.out.println("else objA");

}

}

}

}

}

纵轴(行)主序:BG → CBH → LAP → NAG → AP次序:矿养边缘 → 矿养腹地 → 雨养边缘 → 雨养腹地(ME→MI→RE→RI) 纵轴标签只显示酶名(BG/CBH/LAP/NAG/AP),站点类型不用文本。改为右侧四行棕色色条(由浅到深),色块之间不画分隔线,大小长度也和其对应坐标轴相对应 横轴(列)按每个水分各 4 种添加:控制→低添加→高添加→综合;顶端两行色条,大小长度也和其对应坐标轴相对应: 水分:低湿浅绿 / 高湿深绿(同色不画分隔线) 浓度:控制/低/高/综合,用不同深浅紫色 160 个小格全部做成小方块;格内文本(ρ 与显著性星号)尽量接近格子的 70% 大小 必须包含三个图例:水分、添加浓度、样地类型(棕色)“# 读取数据 data <- read.csv("C:\\Users\\Lenovo\\Desktop\\DOC与酶热图.csv", stringsAsFactors = FALSE) # 统一Moisture的大小写 data$Moisture <- tolower(data$Moisture) # 酶名称对照表 enzyme_names <- c( "BG" = "β-葡萄糖苷酶", "CBH" = "纤维二糖水解酶", "LAP" = "亮氨酸氨基肽酶", "NAG" = "β-N-乙酰葡糖胺糖苷酶", "AP" = "酸性磷酸酶" ) # 浓度标签对照表 concentration_labels <- c( "0" = "控制", "0.5" = "低添加", "0.8" = "高添加" ) # 站点类型 site_types <- c("RainEdge", "RainInterior", "MineralEdge", "MineralInterior") # 定义计算Spearman相关系数的函数 calculate_spearman_correlations <- function(day_data, day_label) { # 创建空数据框存储结果 results <- data.frame() # 遍历所有组合:酶种类 * 站点类型 * 湿度 * 浓度 for (enzyme in names(enzyme_names)) { for (site in site_types) { for (moisture in c("dry", "wet")) { for (concentration in c("0", "0.5", "0.8")) { # 筛选数据 subset_data <- day_data[ day_data$Enzyme == enzyme & day_data$SiteType == site & day_data$Moisture == moisture & day_data$PhenolConc == concentration, ] # 计算Spearman相关系数 if (nrow(subset_data) >= 3) { # 确保有足够的数据点 cor_test <- cor.test(subset_data$Activity, subset_data$DOC, method = "spearman", exact = FALSE) # 创建结果行 result_row <- data.frame( day = day_label, enzyme = enzyme_names[enzyme], site_type = site, moisture = ifelse(moisture == "dry", "低湿度", "高湿度"), concentration = concentration_labels[concentration], correlation = cor_test$estimate, p_value = cor_test$p.value, n = nrow(subset_data), stringsAsFactors = FALSE ) # 添加到结果数据框 results <- rbind(results, result_row) } } # 计算综合(所有浓度合并)的相关系数 subset_combined <- day_data[ day_data$Enzyme == enzyme & day_data$SiteType == site & day_data$Moisture == moisture, ] if (nrow(subset_combined) >= 3) { cor_test_combined <- cor.test(subset_combined$Activity, subset_combined$DOC, method = "spearman", exact = FALSE) result_row <- data.frame( day = day_label, enzyme = enzyme_names[enzyme], site_type = site, moisture = ifelse(moisture == "dry", "低湿度", "高湿度"), concentration = "综合", correlation = cor_test_combined$estimate, p_value = cor_test_combined$p.value, n = nrow(subset_combined), stringsAsFactors = FALSE ) results <- rbind(results, result_row) } } } } return(results) } # 按天数分割数据并计算Spearman相关系数 day3_data <- data[data$Time == "day3", ] day30_data <- data[data$Time == "day30", ] print(paste("Day3 数据行数:", nrow(day3_data))) print(paste("Day30 数据行数:", nrow(day30_data))) # 计算Spearman相关系数 spearman_results_day3 <- calculate_spearman_correlations(day3_data, "Day3") spearman_results_day30 <- calculate_spearman_correlations(day30_data, "Day30") # 合并所有结果 spearman_results <- rbind(spearman_results_day3, spearman_results_day30) # 保存Spearman相关系数结果 write.csv(spearman_results, "DOC_酶活性_Spearman相关系数结果.csv", row.names = FALSE, fileEncoding = "UTF-8") # 检查Spearman结果 print("Spearman相关系数结果预览:") print(head(spearman_results)) # 详细检查p值分布 print("Spearman p值分布:") print(summary(spearman_results$p_value)) # 检查相关系数分布 print("Spearman相关系数分布:") print(summary(spearman_results$correlation)) # 显著性统计 spearman_significant <- sum(spearman_results$p_value < 0.05, na.rm = TRUE) spearman_total <- nrow(spearman_results[!is.na(spearman_results$p_value), ]) print(paste("Spearman显著相关数量 (p < 0.05):", spearman_significant, "/", spearman_total)) spearman_marginal <- sum(spearman_results$p_value < 0.1, na.rm = TRUE) print(paste("Spearman边缘显著数量 (p < 0.1):", spearman_marginal, "/", spearman_total)) # 加载绘图包 library(ggplot2) library(dplyr) # 准备绘图数据 concentration_order <- c("控制", "低添加", "高添加", "综合") site_type_order <- c("RainEdge", "RainInterior", "MineralEdge", "MineralInterior") enzyme_order <- c("β-葡萄糖苷酶", "纤维二糖水解酶", "亮氨酸氨基肽酶", "β-N-乙酰葡糖胺糖苷酶", "酸性磷酸酶") spearman_results$concentration <- factor(spearman_results$concentration, levels = concentration_order) spearman_results$site_type <- factor(spearman_results$site_type, levels = site_type_order) spearman_results$enzyme <- factor(spearman_results$enzyme, levels = enzyme_order) # 添加显著性标记(包括边缘显著性) spearman_results$significance <- ifelse(spearman_results$p_value < 0.001, "***", ifelse(spearman_results$p_value < 0.01, "**", ifelse(spearman_results$p_value < 0.05, "*", ifelse(spearman_results$p_value < 0.1, "·", "")))) # 创建自定义的列标签和行标签 spearman_results <- spearman_results %>% mutate(column_label = paste(moisture, concentration, sep = "_"), row_label = paste(enzyme, site_type, sep = "_")) # 创建Spearman热图绘制函数 create_spearman_heatmap <- function(day_data, day_label) { # 创建列的顺序 column_order <- c( paste("低湿度", concentration_order, sep = "_"), paste("高湿度", concentration_order, sep = "_") ) # 创建行的顺序 row_order <- apply(expand.grid(enzyme_order, site_type_order), 1, function(x) paste(x[1], x[2], sep = "_")) # 确保数据顺序正确 day_data$column_label <- factor(day_data$column_label, levels = column_order) day_data$row_label <- factor(day_data$row_label, levels = rev(row_order)) # 绘制热图 p <- ggplot(day_data, aes(x = column_label, y = row_label)) + geom_tile(aes(fill = correlation), color = "white", size = 0.5) + geom_text(aes(label = ifelse(!is.na(correlation), sprintf("%.2f\n%s", correlation, significance), "NA")), size = 2.5, lineheight = 0.8) + scale_fill_gradient2( low = "#2166AC", mid = "white", high = "#B2182B", midpoint = 0, limits = c(-1, 1), name = "Spearman\n相关系数" ) + labs( title = paste("DOC与酶活性Spearman相关性热图 -", day_label), x = "处理条件", y = "酶与站点类型", caption = "显著性标记: *** p<0.001, ** p<0.01, * p<0.05, · p<0.1" ) + theme_minimal() + theme( axis.text.x = element_text(angle = 45, hjust = 1, size = 8), axis.text.y = element_text(size = 8), axis.title = element_text(size = 10, face = "bold"), plot.title = element_text(size = 12, face = "bold", hjust = 0.5), plot.caption = element_text(size = 8, hjust = 0), legend.position = "right", panel.grid = element_blank() ) + scale_x_discrete( labels = function(x) { parts <- strsplit(x, "_") sapply(parts, function(p) paste(p[2], "\n", p[1])) } ) + scale_y_discrete( labels = function(y) { parts <- strsplit(y, "_") sapply(parts, function(p) { enzyme_abbr <- switch(p[1], "β-葡萄糖苷酶" = "BG", "纤维二糖水解酶" = "CBH", "亮氨酸氨基肽酶" = "LAP", "β-N-乙酰葡糖胺糖苷酶" = "NAG", "酸性磷酸酶" = "AP" ) site_abbr <- switch(p[2], "RainEdge" = "RE", "RainInterior" = "RI", "MineralEdge" = "ME", "MineralInterior" = "MI" ) paste(enzyme_abbr, site_abbr, sep = "_") }) } ) return(p) } # 分割数据 spearman_day3 <- spearman_results[spearman_results$day == "Day3", ] spearman_day30 <- spearman_results[spearman_results$day == "Day30", ] # 绘制Spearman热图 p_spearman_day3 <- create_spearman_heatmap(spearman_day3, "Day3") print(p_spearman_day3) ggsave("DOC_酶活性_Spearman相关性热图_Day3.png", p_spearman_day3, width = 14, height = 10, dpi = 300) p_spearman_day30 <- create_spearman_heatmap(spearman_day30, "Day30") print(p_spearman_day30) ggsave("DOC_酶活性_Spearman相关性热图_Day30.png", p_spearman_day30, width = 14, height = 10, dpi = 300) # 比较Kendall和Spearman的结果(如果之前有Kendall结果) if(file.exists("DOC_酶活性_相关系数结果.csv")) { kendall_results <- read.csv("DOC_酶活性_相关系数结果.csv", stringsAsFactors = FALSE) # 合并比较 comparison <- merge( kendall_results[, c("day", "enzyme", "site_type", "moisture", "concentration", "correlation", "p_value")], spearman_results[, c("day", "enzyme", "site_type", "moisture", "concentration", "correlation", "p_value")], by = c("day", "enzyme", "site_type", "moisture", "concentration"), suffixes = c("_kendall", "_spearman") ) # 计算两种方法的差异 comparison$correlation_diff <- comparison$correlation_spearman - comparison$correlation_kendall comparison$p_value_diff <- comparison$p_value_spearman - comparison$p_value_kendall print("Kendall vs Spearman 比较:") print(head(comparison)) # 统计显著性差异 kendall_sig <- sum(comparison$p_value_kendall < 0.05, na.rm = TRUE) spearman_sig <- sum(comparison$p_value_spearman < 0.05, na.rm = TRUE) cat(paste("\nKendall显著数量:", kendall_sig, "/", nrow(comparison), "\n")) cat(paste("Spearman显著数量:", spearman_sig, "/", nrow(comparison), "\n")) # 找出在Spearman中变得显著的分组 became_sig <- comparison[comparison$p_value_kendall >= 0.05 & comparison$p_value_spearman < 0.05 & !is.na(comparison$p_value_spearman), ] if(nrow(became_sig) > 0) { print("在Spearman中变得显著的分组:") print(became_sig[, c("day", "enzyme", "site_type", "moisture", "concentration", "correlation_kendall", "p_value_kendall", "correlation_spearman", "p_value_spearman")]) } } # 创建一些示例散点图来展示Spearman相关性的数据模式 create_spearman_scatter_examples <- function() { # 选择几个有代表性的分组 examples <- list( list(enzyme = "BG", site = "RainEdge", moisture = "dry", conc = "0", day = "day3"), list(enzyme = "AP", site = "MineralInterior", moisture = "wet", conc = "0.5", day = "day30"), list(enzyme = "LAP", site = "RainInterior", moisture = "dry", conc = "0.8", day = "day3") ) for (example in examples) { subset_data <- data[ data$Enzyme == example$enzyme & data$SiteType == example$site & data$Moisture == example$moisture & data$PhenolConc == example$conc & data$Time == example$day, ] if(nrow(subset_data) > 0) { # 计算Spearman相关系数 cor_test <- cor.test(subset_data$DOC, subset_data$Activity, method = "spearman", exact = FALSE) p <- ggplot(subset_data, aes(x = DOC, y = Activity)) + geom_point(size = 3, alpha = 0.7) + geom_smooth(method = "lm", se = TRUE, color = "red", alpha = 0.3) + labs( title = paste("DOC vs", example$enzyme, "活性 (Spearman)"), subtitle = paste(example$site, example$moisture, example$conc, example$day), x = "DOC浓度", y = paste(example$enzyme, "活性"), caption = paste("Spearman rho =", round(cor_test$estimate, 3), ", p =", round(cor_test$p.value, 3)) ) + theme_minimal() + theme(plot.caption = element_text(size = 10, face = "bold")) print(p) } } } # 运行散点图示例 create_spearman_scatter_examples() cat("\n=== 分析完成 ===\n") cat("已生成以下文件:\n") cat("- DOC_酶活性_Spearman相关系数结果.csv\n") cat("- DOC_酶活性_Spearman相关性热图_Day3.png\n") cat("- DOC_酶活性_Spearman相关性热图_Day30.png\n") cat("\nSpearman相关系数特点:\n") cat("- 基于秩次的相关性,对异常值不敏感\n") cat("- 检测单调关系(不一定是线性的)\n") cat("- 在小样本情况下可能比Kendall更敏感\n")”
最新发布
10-29
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值