高维中介数据:基于交替方向乘子法(ADMM)的高维度单模态中介模型的参数估计(入门+实操)

全文摘要

 用于高维度单模态中介模型的参数估计,采用交替方向乘子法(ADMM)进行计算。该包提供了确切独立筛选(SIS)功能来提高中介效应的敏感性和特异性,并支持Lasso、弹性网络、路径Lasso和网络约束惩罚等不同正则化方法。

Pathway Lasso

背景

传统的结构方程建模(SEM)在处理大量中介变量时变得不稳定且计算复杂。Pathway Lasso引入了一个新的惩罚函数,它是一种非凸乘积函数的凸松弛,使得同时估计和选择路径效应成为可能。通过使用交替方向乘子法(ADMM)的算法,Pathway Lasso可以以闭合形式求解参数,并且其估计器在大样本下具有渐近一致性。Pathway Lasso的新方法用于在高维中介变量的情况下估计和选择路径效应。

实现方法

Pathway Lasso是一种针对高维中介变量问题的新方法,它通过结构方程建模(SEM)的正则化途径来处理。在高维设置中,当中介变量的数量接近或大于样本量时,该方法聚焦于估计和选择路径效应。为了改善估计的稳定性,Pathway Lasso避免将高维中介变量直接降低为线性组合,这通常是通过主成分分析(PCA)或其他矩阵分解技术实现的,但这些方法限制了对每个中介路径的解释性。相反,Pathway Lasso引入了一个新的凸惩罚项,即Pathway Lasso惩罚,直接对路径效应进行正则化。这种方法解决了传统Lasso和其他凸正则化方法无法处理的乘积参数问题,因为路径效应通常表示为两个参数的乘积,这是一个非凸函数。通过Pathway Lasso惩罚,可以同时实现路径选择和路径效应估计,允许模型直接处理相关中介变量,提供更直接和简单的中介路径解释,尤其适用于分析多个大脑区域作为中介变量的情况

Pathway Lasso的优势

在路径选择和估计准确性方面相较于其他方法具有以下优势

  • 高路径选择准确性:在模拟数据和fMRI数据集上的应用表明,Pathway Lasso 提出的方法比其他方法具有更高的路径选择准确性。
  • 低估计偏误:Pathway Lasso 方法在估计路径效应时表现出更低的偏差。
  • 解决非凸性问题:Pathway Lasso 引入了一个新的凸惩罚,直接对乘积非凸函数进行正则化,解决了现有方法未处理的问题。
  • 直接和明确的解释性:与使用线性组合(如主成分分析)的方法相比,Pathway Lasso 允许对每个中介路径进行更直接和更简单的解释。
  • 处理相关中介变量:Pathway Lasso 允许直接建模相关中介变量,适合分析多个大脑区域作为中介的设置。

实现方法

随机生成单模态高维度中介分析数据

代码格式

modalityMediationDataGen(
  n = 100,
  p = 50,
  sigmaY = 1,
  sizeNonZero = c(3, 3, 4),
  alphaMean = c(6, 4, 2),
  alphaSd = 0.1,
  betaMean = c(6, 4, 2),
  betaSd = 0.1,
  sigmaM1 = NULL,
  gamma = 3,
  generateLaplacianMatrix = FALSE,
  seed = 20231201
)

 参数说明

n: 高维中介模型中的主体数量。
p: 高维中介变量的数量。
sigmaY: 因变量误差分布的标准差。
sizeNonZero: 非零中介变量的数量,生成大、中、小中介效应的模拟场景。
alphaMean, alphaSd: 中介变量与自变量之间效应的平均值和标准差向量。
betaMean, betaSd: 中介变量与因变量之间效应的平均值和标准差向量。
sigmaM1: 中介变量间误差分布的协方差矩阵,默认为对角矩阵。
gamma: 直接效应的真值。
generateLaplacianMatrix: 逻辑值,指定是否生成网络惩罚的拉普拉斯矩阵。
seed: 随机种子,默认为NULL以使用当前种子

返回结果解释

MediData: 高维中介模型的模拟数据。
MediPara: 中介效应和直接效应的真值。
Info: 输出包括随机种子、参数设置以及生成中介模型的拉普拉斯矩阵。

示例代码 

## 生成分析数据
simuData <- modalityMediationDataGen(seed = 20231201)
str(simuData)
# 输出结果如下
# List of 3
# $ MediData:List of 3
# ..$ X : num [1:100, 1] 0 0 1 0 0 0 1 0 0 1 ...
# ..$ M1: num [1:100, 1:50] 1.023 -0.369 4.812 1.476 0.188 ...
# ..$ Y : num [1:100, 1] -10.27 6.54 175.08 -1.66 17.55 ...
# $ MediPara:List of 3
# ..$ alpha: num [1, 1:50] 5.99 5.99 6 4.11 4.17 ...
# ..$ beta : num [1:50, 1] 6.11 5.96 6.01 4.05 3.88 ...
# ..$ gamma: num [1, 1] 3
# $ Info    :List of 4
# ..$ parameters     :List of 7
# .. ..$ sigmaY     : num 1
# .. ..$ sizeNonZero: num [1:3] 3 3 4
# .. ..$ alphaMean  : num [1:3] 6 4 2
# .. ..$ alphaSd    : num [1:3] 0.1 0.1 0.1
# .. ..$ betaMean   : num [1:3] 6 4 2
# .. ..$ betaSd     : num [1:3] 0.1 0.1 0.1
# .. ..$ sigmaM1    : num [1:50, 1:50] 1 0 0 0 0 0 0 0 0 0 ...
# ..$ trueValue      :List of 1
# .. ..$ gamma: num [1, 1] 3
# ..$ laplacianMatrix: NULL
# ..$ seed           : num 20231201

simuData <- modalityMediationDataGen(seed = 20231201, generateLaplacianMatrix = TRUE)
str(simuData)
simuData <- modalityMediationDataGen(n = 50, p = 1000, seed = 20231201)
str(simuData)

交叉验证:cvSingleModalityAdmm

通过设置`numFolds`参数进行交叉验证,可以评估不同惩罚参数下的模型性能,帮助选择最佳模型

`交叉验证的结果,用于评估不同参数组合下Pathway Lasso惩罚方法的效果。输出结果是一个表格,其中包含以下列:

1. **rho**:这是ADMM算法中的ρ参数的候选值,它影响算法的收敛速度和解的质量。
2. **lambda1a**:Pathway Lasso惩罚中的λ1a参数的候选值,L1 范数惩罚中介变量和自变量之间的影响。
3. **lambda1b**:Pathway Lasso惩罚中的λ1b参数的候选值,中介变量和因变量之间影响的 L1 范数惩罚。
4. **lambda1g**:Pathway Lasso惩罚中的λ1g参数的候选值,直接效应的 L1 范数惩罚。默认值为 10 以解决高估问题。
5. **kappa**:Pathway Lasso惩罚的L1范数参数,控制路径正则化的具体形式。控制了路径结构的稀疏性,当 kappa 较小时,惩罚的作用更加平滑,有利于保留更多的特征;当 kappa 较大时,惩罚更加集中,有利于稀疏性,即更多特征被剔除。
6. **nu**:Pathway Lasso惩罚的L2范数参数,同样影响路径正则化。nu: 控制了路径结构中特征之间的相关性,当 nu 较小时,路径结构更加独立,有利于减少特征之间的相关性;当 nu 较大时,更多的特征将共享相同的路径,有助于保留相关性较强的特征。
7. **measure**:评估指标,默认均方根误差(RMSE),用于衡量预测结果与真实结果之间的差异。低的RMSE值通常意味着更好的模型性能,因为这表示预测误差更小。通过比较这些结果,可以选取最优的参数组合来构建最终模型。

8. lambda2alambda2b: 是 Pathway Lasso 方法中额外引入的惩罚项的参数。它们可以控制特征之间的相关性,帮助更好地保留特征间的相关性信息。

  • lambda2a:L2 范数惩罚中介变量和自变量之间的影响
  • lambda2b:中介变量和因变量之间影响的 L2 范数惩罚
# 2种不同的惩罚方法

## 1.使用交叉验证进行 ElasticNet 惩罚参数调优
# 执行交叉验证
cvElasticNetResults <- cvSingleModalityAdmm(
  X = simuData$MediData$X,  # 独立变量的数据矩阵(暴露/治疗/组)
  Y = simuData$MediData$Y,  # 因变量的数据向量(结果响应)
  M1 = simuData$MediData$M1,  # 单模态中介变量
  numFolds = 5,  # 交叉验证的折数
  typeMeasure = "rmse",  # 评估指标类型,默认为均方根误差
  rho = c(0.9, 1, 1.1),  # rho 参数的候选值序列
  lambda1a = c(0.1, 0.5, 1),  # lambda1a 参数的候选值序列
  lambda1b = c(0.1, 0.3),  # lambda1b 参数的候选值序列
  lambda1g = c(1, 2),  # lambda1g 参数的候选值序列
  lambda2a = c(0.5, 1),  # lambda2a 参数的候选值序列
  lambda2b = c(0.5, 1),  # lambda2b 参数的候选值序列
  penalty = "ElasticNet"  # 使用 ElasticNet 惩罚
)

# 输出结果: 
> cvElasticNetResults
       rho lambda1a lambda1b lambda1g lambda2a lambda2b  measure
  [1,] 0.9      0.1      0.1        1      0.5      0.5 18.23108
  [2,] 1.0      0.1      0.1        1      0.5      0.5 18.32964
  [3,] 1.1      0.1      0.1        1      0.5      0.5 18.17303
  [4,] 0.9      0.5      0.1        1      0.5      0.5 17.77722
  [5,] 1.0      0.5      0.1        1      0.5      0.5 17.78040
  [6,] 1.1      0.5      0.1        1      0.5      0.5 17.77446
  [7,] 0.9      1.0      0.1        1      0.5      0.5 17.80479
[到达getOption("max.print") -- 略过很多行]]
attr(,"class")
[1] "cvSingleModalityAdmm"

--------------------------------------------------------------------------
# 2. 使用交叉验证进行 Pathway Lasso 惩罚参数调优(lambda2a, lambda2b 未调整)
# 执行交叉验证
cvPathwayLassoResults <- cvSingleModalityAdmm(
  X = simuData$MediData$X,  # 独立变量的数据矩阵(暴露/治疗/组)
  Y = simuData$MediData$Y,  # 因变量的数据向量(结果响应)
  M1 = simuData$MediData$M1,  # 单模态中介变量
  numFolds = 5,  # 交叉验证的折数
  typeMeasure = "rmse",  # 评估指标类型,默认为均方根误差
  rho = c(0.9, 1, 1.1),  # rho 参数的候选值序列
  lambda1a = c(0.1, 0.5, 1),  # lambda1a 参数的候选值序列
  lambda1b = c(0.1, 0.3),  # lambda1b 参数的候选值序列
  lambda1g = c(1, 2),  # lambda1g 参数的候选值序列
  lambda2a = 1,  # 给定 lambda2a 参数值
  lambda2b = 1,  # 给定 lambda2b 参数值
  penalty = "PathwayLasso",  # 使用 Pathway Lasso 惩罚
  penaltyParameterList = list(kappa = c(0.5, 1), nu = c(1, 2))  # 惩罚参数列表,包括 kappa 和 nu
)

# 输出结果:
cvPathwayLassoResults
       rho lambda1a lambda1b lambda1g kappa nu  measure
  [1,] 0.9      0.1      0.1        1   0.5  1 19.46943
  [2,] 1.0      0.1      0.1        1   0.5  1 19.37725
  [3,] 1.1      0.1      0.1        1   0.5  1 19.40920
  [4,] 0.9      0.5      0.1        1   0.5  1 19.49747
[到达getOption("max.print") -- 略过很多行]]
attr(,"class")
[1] "cvSingleModalityAdmm"

将权矩阵转换为拉普拉斯矩阵的辅助函数:weightToLaplacian() 

# 将权矩阵转换为拉普拉斯矩阵的辅助函数:weightToLaplacian() 
set.seed(20231201) # 设置随机数种子
p <- 5 # 设置节点数
W <- matrix(0, nrow = p, ncol = p) # 初始化权矩阵
W[lower.tri(W)] <- runif(p*(p-1)/2, 0, 1) # 生成随机权的下三角矩阵
W[upper.tri(W)] <- t(W)[upper.tri(W)] # 使权矩阵对称
diag(W) <- 1 # 对角线元素设为1
W
# 输出结果如下
# [,1]      [,2]       [,3]      [,4]       [,5]
# [1,] 1.0000000 0.1623753 0.48119340 0.4406640 0.36219565
# [2,] 0.1623753 1.0000000 0.41138920 0.1344408 0.64471664
# [3,] 0.4811934 0.4113892 1.00000000 0.5306324 0.08042435
# [4,] 0.4406640 0.1344408 0.53063239 1.0000000 0.85450197
# [5,] 0.3621956 0.6447166 0.08042435 0.8545020 1.00000000

(L <- weightToLaplacian(W)) # 将权矩阵转换为拉普拉斯矩阵
# 输出结果如下
# [,1]        [,2]        [,3]        [,4]        [,5]
# [1,]  0.59124083 -0.06767837 -0.19443191 -0.16374871 -0.13501050
# [2,] -0.06767837  0.57499652 -0.16949748 -0.05094059 -0.24505056
# [3,] -0.19443191 -0.16949748  0.60058145 -0.19491464 -0.02963414
# [4,] -0.16374871 -0.05094059 -0.19491464  0.66218945 -0.28956112
# [5,] -0.13501050 -0.24505056 -0.02963414 -0.28956112  0.66007653

拟合高维单模态中介模型

根据cvSingleModalityAdmm的结果挑选最佳参数,拟合🔤高维单模态中介模型🔤

penalty方法

penalty方法有3种+ 各自对应的惩罚参数列表【penaltyParameterList】

  • 默认为弹性网络 ElasticNet
    • lambda1a, lambda1b, lambda1g, lambda2a, lambda2b
  • 路径套索(PathywayLasso)
    • kappa 路径 Lasso 的 L1 范数惩罚。
    • nu 路径 Lasso 的 L2 范数惩罚
  • 网络约束惩罚(Network)
    • 需要应用于网络惩罚的拉普拉斯矩阵

确定独立性筛选 (SIS)

SIS:指定是否执行确定独立性筛选 (sure independence screening, SIS)

  • SISThreshold,中介者目标降维的阈值。默认值为“2”,这会将维度减少到 2*n/log(n)。n代表样本量

输出结果

  • gamma:🔤估计直接影响🔤
  • alpha:🔤估计中介变量和自变量之间的影响。🔤
  • beta:🔤估计中介变量和因变量之间的影响🔤

综合应用

1. ElasticNet 惩罚
## 生成经验数据
simuData <- modalityMediationDataGen(seed = 20231201, generateLaplacianMatrix = TRUE)

## ElasticNet 惩罚的参数估计
modelElasticNet <- singleModalityAdmm( X = simuData$MediData$X, Y = simuData$MediData$Y, M1 = simuData$MediData$M1, rho = 1, lambda1a = 1, lambda1b = 0.1, lambda1g = 2, lambda2a = 1, lambda2b = 1, penalty = "ElasticNet" )

# 拟合并预测
fitted(modelElasticNet) 
predict(modelElasticNet, matrix(c(0, 1), ncol=1))

# SIS独立性筛选
simuData <- modalityMediationDataGen(n = 50, p = 1000, seed = 20231201)
modelElasticNetSIS <- singleModalityAdmm( X = simuData$MediData$X, Y = simuData$MediData$Y, M1 = simuData$MediData$M1, rho = 1, lambda1a = 1, lambda1b = 0.1, lambda1g = 2, lambda2a = 1, lambda2b = 1, penalty = "ElasticNet", SIS = TRUE ) 

fitted(modelElasticNetSIS) 
predict(modelElasticNetSIS, matrix(c(0, 1), ncol=1))
2. 使用拉普拉斯矩阵进行网络惩罚的参数估计

# 1.使用模拟数据中的拉普拉斯矩阵
simuData <- modalityMediationDataGen(seed = 20231201, generateLaplacianMatrix = TRUE)

modelNetwork <- singleModalityAdmm( X = simuData$MediData$X, Y = simuData$MediData$Y, M1 = simuData$MediData$M1, rho = 1, lambda1a = 1, lambda1b = 0.1, lambda1g = 2, lambda2a = 1, lambda2b = 1, penalty = "Network", penaltyParameterList = list(laplacianMatrix = simuData$Info$laplacianMatrix) )




# 2. 自定义的拉普拉斯矩阵

set.seed(20231201) 
p <- ncol(simuData$MediData$M1) 
W <- matrix(0, nrow = p, ncol = p) 
W[lower.tri(W)] <- runif(p*(p-1)/2, 0, 1) 
W[upper.tri(W)] <- t(W)[upper.tri(W)] 
diag(W) <- 1 
L <- weightToLaplacian(W) 

modelNetwork <- singleModalityAdmm( X = simuData$MediData$X, Y = simuData$MediData$Y, M1 = simuData$MediData$M1, rho = 1, lambda1a = 1, lambda1b = 0.1, lambda1g = 2, lambda2a = 1, lambda2b = 1, penalty = "Network", penaltyParameterList = list(laplacianMatrix = L) )
3. Pathway Lasso 惩罚的参数估计
simuData <- modalityMediationDataGen(seed = 20231201, generateLaplacianMatrix = TRUE)

modelPathwayLasso <- singleModalityAdmm( X = simuData$MediData$X, Y = simuData$MediData$Y, M1 = simuData$MediData$M1, rho = 1, lambda1a = 1, lambda1b = 0.1, lambda1g = 2, lambda2a = 1, lambda2b = 1, penalty = "PathwayLasso", penaltyParameterList = list(kappa = 1, nu = 2) )

如果您看到这里,有钱的打个小💴赏~,没钱的点个"赞"赏,输出不易,感谢支持!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/424660.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

flynn发布服务小结

背景 flynn是一个基于容器的paas平台&#xff0c;可以快速的发布运行新的应用&#xff0c;用户只需要提交代码到git上&#xff0c;flynn就会基于提交的代码进行发布和部署&#xff0c;本文就简单看下flynn发布部署的流程 flynn发布服务 1.首先flynn会基于用户的web代码构建一…

远程服务器Ubuntu 18.04安装VNC远程桌面

一、安装vnc 1.安装图形化界面工具 # 安装过程中会弹窗让选择配置&#xff0c;选lightdm sudo apt install ubuntu-desktop sudo apt-get install gnome-panel gnome-settings-daemon metacity nautilus gnome-terminal 2.安装vnc sudo apt-get install x11vnc3.安装LightD…

(面试题)数据结构:链表相交

问题&#xff1a;有两个链表&#xff0c;如何判断是否相交&#xff0c;若相交&#xff0c;找出相交的起始节点 一、介绍 链表相交&#xff1a; 若两个链表相交&#xff0c;则两个链表有共同的节点&#xff0c;那从这个节点之后&#xff0c;后面的节点都会重叠&#xff0c;知道…

推荐五本程序员必看书籍!

昨天推送的是视频&#xff0c;今天给大家推荐基本入门渗透测试的好书&#xff0c;以结合昨天文章一起学习&#xff0c;忘记了的可以回复“学习之路”会自动跳出文章的&#xff0c;好的话不多说&#xff0c;直接上主菜了&#xff01; 第一本当然是我们网络基础的书&#xff0c;…

SpringMVC了解

1.springMVC概述 Spring MVC&#xff08;Model-View-Controller&#xff09;是基于 Java 的 Web 应用程序框架&#xff0c;用于开发 Web 应用程序。它通过将应用程序分为模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和控制器&#xff08;Controller&a…

快递平台独立版小程序源码|带cps推广营销流量主+前端

源码介绍&#xff1a; 快递代发快递代寄寄件小程序可以对接易达云洋一级总代 快递小程序&#xff0c;接入云洋/易达物流接口&#xff0c;支持选择快递公司&#xff0c;三通一达&#xff0c;极兔&#xff0c;德邦等&#xff0c;功能成熟 如何收益: 1.对接第三方平台成本大约4元…

备战蓝桥杯---状态压缩DP进阶题1

我们来看一看一道比较难的问题&#xff08;十分十分的巧妙&#xff09;&#xff1a; 显然我们应该一行一行放&#xff0c;又竖的会对下一行产生影响&#xff0c;我们令横着放为0&#xff0c;竖着放的上方为1. 对于下一行&#xff0c;前一行放1的下面为0&#xff0c;但是会出现…

C++指针(三)

个人主页:PingdiGuo_guo 收录专栏&#xff1a;C干货专栏 文章目录 前言 1.字符指针 1.1字符指针的概念 1.2字符指针的用处 1.3字符指针的操作 1.3.1定义 1.3.2初始化 1.4字符指针使用注意事项 2.数组参数&#xff0c;指针参数 2.1数组参数 2.1.1数组参数的概念 2.1…

论文阅读_代码生成模型_CodeLlama

英文名称: Code Llama: Open Foundation Models for Code 中文名称: Code Llama&#xff1a;开放基础代码模型 链接: https://arxiv.org/abs/2308.12950 代码: https://github.com/facebookresearch/codellama 作者: Baptiste Rozire, Jonas Gehring, Fabian Gloeckle, Sten So…

微信小程序云开发教程——墨刀原型工具入门(文件设置+编辑组件)

引言 作为一个小白&#xff0c;小北要怎么在短时间内快速学会微信小程序原型设计&#xff1f; “时间紧&#xff0c;任务重”&#xff0c;这意味着学习时必须把握微信小程序原型设计中的重点、难点&#xff0c;而非面面俱到。 要在短时间内理解、掌握一个工具的使用&#xf…

C++STL之vector

vector 1. vector介绍 vector文档vector其实就是一个顺序表&#xff0c;它表示可变大小数组的序列容器。像数组一样&#xff0c;可以使用下标[] 来访问vector的元素&#xff0c;和数组一样高效&#xff1b;甚至&#xff0c;它的大小是可以动态改变的&#xff0c;其大小由容器自…

广和通5G智能模组SC171支持Android、Linux和Windows系统,拓宽智能物联网应用

世界移动通信大会2024期间&#xff0c;广和通宣布&#xff1a;5G智能模组SC171除支持Android操作系统外&#xff0c;还兼容Linux和Windows系统&#xff0c;帮助更多智能终端客户快速迭代产品&#xff0c;拓宽智能化应用覆盖范围。 广和通SC171系列基于高通QCM6490物联网解决方案…

Redis安全加固策略:服务账号管理 开启redis密码认证 开启防护模式

Redis安全加固策略&#xff1a;服务账号管理 & 开启redis密码认证 & 开启防护模式 1.1 服务账号管理1.1.1 检测方法1.1.2 加固参考配置操作 1.2 开启redis密码认证1.2.1 检测方法1.2.2 加固参考配置操作 1.3 开启防护模式1.3.1 检测方法1.3.2 加固参考配置操作 &#x…

图神经网络实战——基于DeepWalk创建节点表示

图神经网络实战——基于DeepWalk创建节点表示 0. 前言1. Word2Vec1.1 CBOW 与 skip-gram1.2 构建 skip-gram 模型1.3 skip-gram 模型1.4 实现 Word2Vec 模型 2. DeepWalk 和随机行走3. 实现 DeepWalk小结系列链接 0. 前言 DeepWalk 是机器学习 (machine learning, ML) 技术在图…

【NR 定位】3GPP NR Positioning 5G定位标准解读(三)

目录 前言 5 NG-RAN UE定位架构 5.1 架构 5.2 UE定位操作 5.3 NG-RAN定位操作 5.3.1 通用NG-RAN定位操作 5.3.2 OTDOA定位支持 5.3.3 广播辅助信息支持 5.3.4 NR RAT相关定位支持 5.4 NG-RAN中与UE定位相关的元素功能描述 5.4.1 用户设备&#xff08;UE&#xff09; …

寻址错题本

指令寻址 顺序寻址 通过程序计数器PC自动加1,形成下一条指令的指令地址。 跳跃寻址 通过转移类指令实现跳转到指定的代码段或者子程序。 数据寻址 直接寻址 形式地址A就是操作数的地址EA,执行阶段访问一次存储器。 所以当我们需要取得实际的值(操作数)的时候: 第一步:…

项目实战 MySQL读写分离【构建主从结构数据库(查从库)(增删改主库)】【ShardingJDBC实现读写分离】

项目实战 MySQL读写分离 1. MySQL主从复制1.1 介绍1.2 搭建1.2.1 准备工作1.2.3 从库配置 2. 读写分离案例2.2 ShardingJDBC介绍 转自-黑马 在前面基础功能实现的过程中&#xff0c;我们后台管理系统及移动端的用户&#xff0c;在进行数据访问时&#xff0c;都是直接操作数据库…

MYSQL---日志

1.日志的概述 日志是MySQL数据库的重要组成部分。日志文件中记录着MySQL数据库运行期间发生的变化&#xff1b;也就是说用来记录MySQL数据库的客户端连接状况、SQL语句的执行情况和错误信息等。当数据库遭到意外的损坏时&#xff0c;可以通过日志查看文件出错的原因&#xff0…

自定义类型(结构体、枚举、联合体)内存大小的计算方法

内存对齐 为什么会存在内存对齐&#xff1f; 大部分参考资料是这么说的&#xff1a; 平台原因(移植原因)&#xff1a; 不是所有的硬件平台都能访问任意地址上的任意数据的&#xff1b;某些硬件平台只能在某些地址处取某些特定类型的数据&#xff0c;否则抛出硬件异常。性能原…

LeetCode---386周赛

题目列表 3046. 分割数组 3047. 求交集区域内的最大正方形面积 3048. 标记所有下标的最早秒数 I 3049. 标记所有下标的最早秒数 II 一、分割数组 这题简单的思维题&#xff0c;要想将数组分为两个数组&#xff0c;且分出的两个数组中数字不会重复&#xff0c;很显然一个数…