交通 | 共乘出行(下):基于图结构的动态多时空供需网络的均衡度量方法

在这里插入图片描述
博客:Alex Chin, & Tony Qin. (2023.02.25). Quantifying Efficiency in Ridesharing Marketplaces. Link: https://eng.lyft.com/quantifying-efficiency-in-ridesharing-marketplaces-affd53043db2

论文:Chin, Alex, and Zhiwei Qin. “A Unified Representation Framework for Rideshare Marketplace Equilibrium and Efficiency.” SIGSPATIAL 2023 (2023).

推文作者:郭王懿,陈泰劼,张云天

编者按:

共乘出行极大地改变了人们的日常出行方式。如何高效运营背后的双边平台是极具挑战性的工作。滴滴出行、Lyft公司是其中的佼佼者。本专题将探讨双边平台运营中的一个关键问题:如何科学度量双边平台的运营效率?

本专题分为上下两篇,递进推出。其中,上篇围绕滴滴出行、上海财经大学发表在统计学“四大”期刊之一《Journal of the American Statistical Association》的一篇文章 [1] 展开(https://mp.weixin.qq.com/s/kfMGWrqXwEmhzOLuG9nxVw);下篇关注解读Lyft公司的一篇优质技术博客 [2] 和SIGSPATIAL 2023录用的一篇论文 [3](https://sigspatial2023.sigspatial.org/)。

[1] Zhou, F., Luo, S., Qie, X., Ye, J., & Zhu, H. (2021). Graph-based equilibrium metrics for dynamic supply–demand systems with applications to ride-sourcing platforms. Journal of the American Statistical Association, 116(536), 1688-1699.

[2] Alex Chin, & Tony Qin. (2023.02.25). Quantifying Efficiency in Ridesharing Marketplaces. Link: https://eng.lyft.com/quantifying-efficiency-in-ridesharing-marketplaces-affd53043db2

[3] Chin, Alex, and Zhiwei Qin. “A Unified Representation Framework for Rideshare Marketplace Equilibrium and Efficiency.” SIGSPATIAL 2023 (2023).

引言

通常共乘出行的供需市场健康取决于乘客和司机的时空分布,但是在时空分布较为复杂的双边平台中,我们很难定义“市场效率”和“供需平衡”。比如,“我们有足够的司机吗?”可以有很多种理解方式

  • 在当前地点下是否有足够的司机来保证服务质量?
  • 在整个系统中是否有足够的司机可以满足任意地点的乘客订单?
  • 是否有足够的收入来维持司机的收益率?

为了更好的描述市场状态,我们必须研究监测市场状态的指标或方法。本文主要关注以下三个主要的问题:

  1. 指标过多难以选择:现有的市场运行指标非常繁多,有乘客方面的指标包括取消率、预计到达时间、履约率等,司机方面的指标有司机在线时长,司机服务率(时间利用率)和收入等,平台方面的指标有乘车数量、财务指标等。同时监控大量指标是非常困难的,很难找到侧重点;并且这些指标通常容易受到外部变化(交通、天气、机场延误)的冲击影响。
  2. 缺乏决策输出:指标的变化无法指导下一步的最佳决策,平台有很多工具可以改善市场状况,包括定价、调度、激励政策等,但是需要决策如何进行市场调整。
  3. 指标信息冗杂:包含大量噪音的指标表示的信息通常非常复杂, 分析师很难从指标中掌握核心发生的事情。此外这些指标的单位通常异构,因此协调不同指标的方法并不直观。

目前共乘出行双边市场迫切需要一个供需状态的简洁表示方法,同时需要一个共乘出行市场效率的表征方法和数值测试。本文提出了一个基于GEM的供需时空状态度量方法和双边市场效率评估统一框架。

一、基于图结构的均衡度量方法(GEM)回顾

我们在 共乘出行(上)中详细介绍了GEM框架。

这里我们同样将城市划分为 N N N个区域,构建图 G = ( V , E ) G =(\mathbb{V},\mathbb{E}) G=(V,E),其中 v ∈ V v\in\mathbb{V} vV分别代表 N N N个节点, ∣ V ∣ = N |\mathbb{V}|=N V=N,每个边$e_{ij}=(vi, vj)∈ \mathbb{E} 都有一个对应的运输成本 都有一个对应的运输成本 都有一个对应的运输成本w_{ij} ,代表从 ,代表从 ,代表从i 区域转移到 区域转移到 区域转移到j 区域需要的成本。从图 区域需要的成本。从图 区域需要的成本。从图G 和权重矩阵 和权重矩阵 和权重矩阵W=(w_{ij}) 可以定义两种额外的属性:邻居节点 可以定义两种额外的属性:邻居节点 可以定义两种额外的属性:邻居节点N_i 和成本矩阵 和成本矩阵 和成本矩阵C =(c_{ij}) 。邻居节点 。邻居节点 。邻居节点N_i 是与节点 是与节点 是与节点i 直接相连的节点集合,成本矩阵定义为 直接相连的节点集合,成本矩阵定义为 直接相连的节点集合,成本矩阵定义为c_{i j}=\inf_{\text {paths } p} \sum_{(k, \ell) \in p} w_{k \ell} ,用于描述节点之间的最小转移成本。每个节点都有对应的供应和需求数目分别用测度 ,用于描述节点之间的最小转移成本。每个节点都有对应的供应和需求数目分别用测度 ,用于描述节点之间的最小转移成本。每个节点都有对应的供应和需求数目分别用测度\mu 和测度 和测度 和测度\nu 表示,比如 表示,比如 表示,比如\mu_i 就表示节点 就表示节点 就表示节点i 中可供调度的司机的数量, 中可供调度的司机的数量, 中可供调度的司机的数量,\nu_i 就表示节点 就表示节点 就表示节点i$中呼叫司机的乘客的数量。

1. GEM优化问题

根据上述定义,下面回顾一下GEM优化问题,GEM定义的优化问题由供需不匹配程度和转移成本两部分构成,同时需要满足供需平衡的调度约束
ρ λ ( μ , v ) = min ⁡ γ ∈ Γ { ∥ v − μ ~ ∥ 1 + λ ∑ v i ∈ V ∑ v j ∈ V c i j γ i j } s . t . ∑ v j ∈ N i γ i j = μ i , ∑ v j ∉ N i γ i j = 0 , μ ~ i = ∑ v i ∈ N j γ j i , for all  v i ∈ V . \begin{gathered} \rho_\lambda(\mu, v)=\min _{\gamma \in \Gamma}\left\{\|v-\tilde{\mu}\|_1+\lambda \sum_{v_i \in \mathcal{V}} \sum_{v_j \in \mathcal{V}} c_{i j} \gamma_{i j}\right\} \\ s.t.\sum_{v_j \in \mathcal{N}_i} \gamma_{i j}=\mu_i, \quad \sum_{v_j \notin \mathcal{N}_i} \gamma_{i j}=0, \quad \tilde{\mu}_i=\sum_{v_i \in \mathcal{N}_j} \gamma_{j i}, \quad \text { for all } v_i \in \mathcal{V} . \end{gathered} ρλ(μ,v)=γΓmin vμ~1+λviVvjVcijγij s.t.vjNiγij=μi,vj/Niγij=0,μ~i=viNjγji, for all viV.
其中的决策变量是转移策略矩阵 ( γ i j ) (\gamma_{ij}) (γij),其含义是将接单司机从区域i调配到区域j的数量, μ ~ \tilde{\mu} μ~ μ \mu μ经过策略转移后的最优分布。 μ ~ \tilde{\mu} μ~相比于 μ \mu μ可以更真实的反应供应质量,因为调度后的结果可以考虑到每个司机的调度范围。目标函数 ρ λ \rho_{\lambda} ρλ所定义的距离是一种广义的非对称距离

2. 市场供需平衡状态度量方法

根据上述问题的求解结果,我们可以将局部供需平衡间隙(Local supply-demand gap)定义为 m i = log ⁡ μ ~ i − log ⁡ v i m_i=\log \tilde{\mu}_i-\log v_i mi=logμ~ilogvi,当供应或需求为0时会用一个极小的正数代替。由于这种定义方法既是一种加性度量,又与市场的规模无关,所以在实际表现中比以往的 D S r i = v i / max ⁡ ( μ ~ i , 1 ) \mathrm{DSr}_i=v_i / \max \left(\tilde{\mu}_i, 1\right) DSri=vi/max(μ~i,1) DSd ⁡ i = v i − μ ~ i \operatorname{DSd}_i=v_i-\tilde{\mu}_i DSdi=viμ~i表现效果好。

逐时计算局部供需平衡间隙后,可以得到一组矩阵 ( m i , t ) (m_{i,t}) (mi,t),将其聚合后可以得到市场视角下的全局供需平衡间隙:
A d = ∑ i , t m i , t v i , t ∑ i , t v i , t = E ( i , t ) ∼ v [ m i , t ] A_d=\frac{\sum_{i, t} m_{i, t} v_{i, t}}{\sum_{i, t} v_{i, t}}=\mathbb{E}_{(i, t) \sim v}\left[m_{i, t}\right] Ad=i,tvi,ti,tmi,tvi,t=E(i,t)v[mi,t]
如果全局供需平衡间隙 A d A_d Ad是正数,则目前市场处于供大于求状态,负值则意味着供不应求。该表达式的含义为局部供需平衡间隙对需求的加权平均,是一种以需求为中心视角的市场平衡状态。代表随机选择一个打车用户看到的市场的状态,并解答了问题1:“在当前地点下是否有足够的司机来保证服务质量?”。

3. 基于GEM对偶问题的市场供需状态诊断

基于GEM优化问题的求解结果定义向量 γ ~ : = { γ i j , j ∈ N i } ∈ R N 0 \tilde{\gamma}:=\left\{\gamma_{i j}, j \in \mathcal{N}_i\right\} \in \mathbb{R}^{N_0} γ~:={γij,jNi}RN0,其中 N i \mathcal{N}_i Ni是节点i的相邻节点,$N_0=\sum_1^N n_i 是所有节点相邻节点数目之和, 是所有节点相邻节点数目之和, 是所有节点相邻节点数目之和,\tilde{c} \in \mathbb{R}^{N_0}$是转移成本的向量形式。GEM定义可以写为LP形式:
min ⁡ γ ~ ≥ 0 , s ≥ 0 1 T s + λ c ~ T γ ~ s.t.  A 1 γ ~ = μ , A 2 γ ~ + s ≥ v , A 2 γ ~ − s ≤ v , . \begin{aligned} \min _{\tilde{\gamma} \geq 0, s \geq 0} & 1^T s+\lambda \tilde{c}^T \tilde{\gamma} \\ \text { s.t. } & A_1 \tilde{\gamma}=\mu, \\ & A_2 \tilde{\gamma}+s \geq v, \\ & A_2 \tilde{\gamma}-s \leq v, . \end{aligned} γ~0,s0min s.t. 1Ts+λc~Tγ~A1γ~=μ,A2γ~+sv,A2γ~sv,.
后两个约束用于线性化原GEM定义中的 L 1 L_1 L1正则形式,我们将三个约束的对偶变量分别定义为 w , u u , u o w, u^u, u^o w,uu,uo,从约束的不等号可以得出 u u ≥ 0 , u o ≤ 0 u^u\geq 0, u^o\leq0 uu0,uo0。根据互补松弛条件,如果给定时空位置 ( i , t ) (i,t) (i,t)并求解上述线性规划问题后, ( A 2 γ ~ ) i , t > v i , t \left(A_2 \tilde{\gamma}\right)_{i, t}>v_{i, t} (A2γ~)i,t>vi,t,则 u i , t u = 0 u^{u}_{i,t}=0 ui,tu=0,如果 ( A 2 γ ~ ) i , t < v i , t \left(A_2 \tilde{\gamma}\right)_{i, t}< v_{i, t} (A2γ~)i,t<vi,t u i , t o = 0 u^{o}_{i,t}=0 ui,to=0,因此定义 u : = u u + u o u:=u^u+u^o u:=uu+uo来定义新增一个订单需求对GEM目标函数的边际影响(Marginal effect)。这里的对偶值代表的是整个系统的供需平衡差距以及应对扰动的运输成本。需求约束对偶 u i , t u_{i,t} ui,t可以为需求转移策略提供初步的策略。如果 u i , t u_{i,t} ui,t在特定时间特定节点为负值,说明需求可以适当增加来降低目标函数,反之如果 u i , t u_{i,t} ui,t为正,则降低需求可以更好的实现市场平衡。供应约束对偶 w i , t w_{i,t} wi,t代表为 ( i , t ) (i,t) (i,t)增加一个司机后对目标函数的影响,该对偶值可以最需要司机的地方,从而为调度提供指导。下图则清晰的表明了对偶值可以对区域的司机调度提供帮助,订单多的地方最需要司机


GEM对偶值在某一历史数据上的分布,红色:更大(正)的对偶值,浅色:更小(负)的对偶值

二、供需市场的双边视角

为了在供需两侧视角上获得更全面的市场画像,本文在原GEM基础上构造SD-GEM,并且构造了从供需双边视角上度量市场状态变化对市场效率的影响

1. 供应侧视角和需求侧视角

在SD-GEM中,我们在上文提到的供应侧视角的基础上补充了需求侧视角下的市场均衡度:
A s = ∑ i , t m i , t μ ~ i , t ∑ i , t μ ~ i , t = E ( i , t ) ∼ μ ~ [ m i , t ] A_s=\frac{\sum_{i, t} m_{i, t} \tilde{\mu}_{i, t}}{\sum_{i, t} \tilde{\mu}_{i, t}}=\mathbb{E}_{(i, t) \sim \tilde{\mu}}\left[m_{i, t}\right] As=i,tμ~i,ti,tmi,tμ~i,t=E(i,t)μ~[mi,t]
相比于 A d A_d Ad A s A_s As在供应集中的区域SD gap的权重相对较大。其含义是在随机一个司机的视角下的本地市场均衡状态。正值过高的 A s A_s As意味着越来越多司机要争抢有限的订单资源,因此会导致较低的车辆利用率和回报率。

2. 供需平衡双边视角的案例诠释

我们用一个调度案例来解释上面提到的双边视角,图中的粉色圆形代表司机,蓝色三角形代表乘客订单,整个区域被分为了四部分。每个司机只能匹配当前区域和相邻区域的乘客,黑色箭头代表间接匹配。算例中 ϵ = 0.5 \epsilon=0.5 ϵ=0.5


双边视角下的供需平衡视图

全局平衡案例:图a表示司机和乘客视角均为平衡状态 A d = 0 , A s = 0 A_d=0,A_s=0 Ad=0,As=0,是一种理想的状态;
供需偏差案例:图b表示乘客是一种供不应求的状态,司机是供大于求的状态, A d = − 0.24 , A s = 1.05 A_d=-0.24,A_s=1.05 Ad=0.24,As=1.05。SD-GEM的双边视角结论是相反的,这说明了有的司机不在最佳的位置上,因此我们可以通过司机调度来更好的实现市场平衡。
整体供不应求:图c描述的是整体供不应求的情况, A d = − 0.87 , A s = − 0.52 A_d=-0.87,A_s=-0.52 Ad=0.87,As=0.52,这种情况下对司机的保留和获取非常关键。
整体供大于求:图d描述整体供大于求的状态, A d = 0.28 , A s = 1.39 A_d=0.28,A_s=1.39 Ad=0.28,As=1.39,需求订单采集和供应控制较为关键。

3. 供需平衡双边平台的时间排队论视角

为了更好的理解双边视角下均衡度的测量意义,我们现从排队论的视角来看每个区域单元的双边均衡度。在任意时间窗口内,需求流入由上一时间窗口未丢弃的请求和当前窗口的新请求构成,需求流出由已经匹配的订单和取消的订单组成;司机流入由新登录司机和上一时间窗口未匹配司机构成,司机流出由匹配订单的司机和登出司机组成。

我们假设订单匹配中乘客和司机是一对一的,并且乘客取消和司机登出均发生在订单匹配好之前,输入输出流中的任何不匹配均保留到下一个时间窗。在这个一对一匹配机制下,每个时空单元下只能积累供应或需求中的一种,但在不同的单元内可以积累司机或乘客订单,上述GEM定义就是每个单元中不匹配度的权和。

当考虑到包含多个供需队列的区域级系统时,系统的供需分布复杂性受到内部机理影响。由于在指定时间内到达指定位置的司机收到先前需求订单的影响,因此需求模式对系统时空供需状态有影响。因此在双边平台中对供需分配进行何种程度的干预仍然是一个热门问题


单个时空单元下的供需队列

三、SD-GEM在双边平台的应用

SD-GEM的指标 ( A d , A s ) (A_d,A_s) (Ad,As)提供了一种度量市场效率的工具,直观地来说就是为了为了维持需求视角市场平衡的指标 A d A_d Ad,供应视角市场平衡指标就至少是 A s A_s As ( 0 , 0 ) (0,0) (0,0)是最理想的市场平衡状态,因为需求视角和供应视角下都没有出现不平衡,因此越接近 ( 0 , 0 ) (0,0) (0,0)市场效率就越高。

1. 单个区域的双边市场状态转移描述

为了展示SD-GEM视角下市场状态转移,我们假设一种供应激增的状态。我们假设市场中按照现有分布 μ ~ \tilde{\mu} μ~新增了一部分司机,因此每个单元内司机按照比例 β \beta β新增,所以 A d , A s A_d,A_s Ad,As都会增加一个常数 α = log ⁡ ( 1 + β ) \alpha=\log(1+\beta) α=log(1+β),在下图中为 R 1 R_1 R1沿着粉色直线转移到 R 2 R_2 R2


供需双边视角下市场状态的转移

从数据指标角度来说,供应激增后的 A d , A s A_d,A_s Ad,As为:
$$
A_d^{\prime}=\frac{\sum_{i, t}\left(m_{i, t}+\alpha\right) v_{i, t}}{\sum_{i, t} v_{i, t}}=A_d+\alpha
\
A_s^{\prime}=\frac{\sum_{i, t}\left(m_{i, t}+\alpha\right) \tilde{\mu}^{\prime}{ }{i, t}}{\sum{i, t} \tilde{\mu}{i, t}^{\prime}}=\frac{\sum{i, t} m_{i, t} \tilde{\mu}^{\prime}{ }{i, t}}{\tilde{\mu}{i, t}^{\prime}}+\alpha

$$
其中 μ ′ ~ \tilde{\mu^\prime} μ~是经过GEM计算后的供应激增后最优供应调度分布。按照假设可以得到 μ ′ ~ i , t = μ ~ i , t ( 1 + β ) \tilde{\mu^\prime}_{i,t}=\tilde{\mu}_{i,t}(1+\beta) μ~i,t=μ~i,t(1+β)。同样如果订单需求按照现有分布激增一定比例,有相同的参数 α , β \alpha,\beta α,β。因此如果在不改变现有供需分布的前提下改变需求或供应,市场状态会沿着图中的粉色直线移动。这种移动通常是市场自行发展产生的移动。

在第二象限中还有一种移动方式是 R 1 R_1 R1 R 3 R_3 R3,代表帕累托意义下的提升,通常需要激励性的政策来讲供需分布调整到全局最优的分布。在图中四个象限分别的供需状态含义如下表所示:


供需状态关系对应表

在第二象限中通过激励政策沿垂直粉色直线的方向移动很有意义,即激励性的政策较有意义。在一三象限中,沿粉色直线方向移动( R 4 R_4 R4移动到 R 6 R_6 R6)是最快的提升市场效率的方法。然而沿着垂直粉色直线的方向反而没有意义。直观地来说,在全局供大于求或供不应求的情况下,寻求新的司机或者订单比调整供需分布更重要。

2. 城市级的双边市场画像刻画

下图展示的是双边视角下城市级的数据图。可以看到在需求侧的负象限斜率稍微平缓,直观的解释是当 A d A_d Ad为负值供不应求的时候,额外的供应更容易被匹配。当 A d A_d Ad为正数,额外的供应会导致供大于求。同时从图中可以发现,不同城市的道路拓扑结构对供需散点图的覆盖形状影响很大。城市2是有少量主干道的细长形状的城市,由于司机的分布需要主动匹配需求的分布,在新增需求后司机的匹配度波动非常大。城市3是典型的密集市区,区域之间道路连接充分,高度互联互通,因此供需匹配非常容易,所以点图波动性较小。


在SD-GEM双边视角下的多个城市画像

四、小结

与标准的度量指标相比,SD-GEM框架有如下优势:

  1. 提供供应侧和需求侧视角下的统一度量指标,分析权衡的时候容易。
  2. 同时度量了市场均衡度和市场效率。
  3. 展示了匹配和调度层面的直接数据,数据质量受混淆和突发的影响较少。

SD-GEM为市场效率和平衡度量开发一个创新的框架,帮助我们解决了本文开头提到的一些挑战:大量指标中难以选择,缺乏可操作的输出,以及混杂的信息。

参考文献

[1] Zhou, F., Luo, S., Qie, X., Ye, J., & Zhu, H. (2021). Graph-based equilibrium metrics for dynamic supply–demand systems with applications to ride-sourcing platforms. Journal of the American Statistical Association, 116(536), 1688-1699.

[2] Alex Chin, & Tony Qin. (2023.02.25). Quantifying Efficiency in Ridesharing Marketplaces. Link: https://eng.lyft.com/quantifying-efficiency-in-ridesharing-marketplaces-affd53043db2

[3] Chin, Alex, and Zhiwei Qin. “A Unified Representation Framework for Rideshare Marketplace Equilibrium and Efficiency.” SIGSPATIAL 2023 (2023).

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(十八)springboot实战——spring securtity注解方式的授权流程源码解析

前言 在上一节内容中&#xff0c;我们介绍了如何在FilterSecurityInterceptor过滤器中处理用户的授权流程&#xff0c;并分析了其源码&#xff0c;spring security还提供了方法级别的授权方式&#xff0c;通过EnableMethodSecurity注解启用权限认证流程&#xff0c;只需要在方…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Stepper组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之Stepper组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Stepper组件 鸿蒙&#xff08;HarmonyOS&#xff09;仅能包含子组件StepperIte…

k8s 部署java应用 基于ingress+jar包

k8 集群ingress的访问模式 先部署一个namespace 命名空间 vim namespace.yaml kind: Namespace apiVersion: v1 metadata:name: ingress-testlabels:env: ingress-test 在部署deployment deployment是pod层一层封装。可以实现多节点部署 资源分配 回滚部署等方式。 部署的…

【每日一题】LeetCode——反转链表

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;小杨水平有…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Span组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之Span组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Span组件 鸿蒙&#xff08;HarmonyOS&#xff09;作为Text组件的子组件&#xff0…

【RPA】智能自动化的未来:AI + RPA

伴随着人工智能&#xff08;AI&#xff09;技术的迅猛进步&#xff0c;机器人流程自动化&#xff08;RPA&#xff09;正在经历一场翻天覆地的变革。AI为RPA注入了新的活力&#xff0c;尤其在处理复杂任务和制定决策方面。通过融合自然语言处理&#xff08;NLP&#xff09;、机器…

React环境配置

1.安装Node.js Node.js官网&#xff1a;https://nodejs.org/en/ 下载之后按默认选项安装好 重启电脑即可自动完成配置 2.安装React 国内使用 npm 速度很慢&#xff0c;可以使用淘宝定制的 cnpm (gzip 压缩支持) 命令行工具代替默认的 npm。 ①使用 winR 输入 cmd 打开终端 ②依…

SpringBoot:日志框架

使用日志框架demo&#xff1a;点击查看LearnSpringBoot04logging 点击查看更多的SpringBoot教程 一、springboot日志框架简介 SpringBoot&#xff1a;底层是Spring框架&#xff0c;Spring框架默认是用ICL&#xff1b; SpringBoot选用SLF4j和logback&#xff1b; 统一使用slf4…

嵌入式中详解 ARM 几个常见的寄存器方法

大家好&#xff0c;今天来聊聊对于ARM几个特殊寄存器的理解&#xff0c;FP、SP和LR。 1、介绍 FP&#xff1a;栈顶指针&#xff0c;指向一个栈帧的顶部&#xff0c;当函数发生跳转时&#xff0c;会记录当时的栈的起始位置。 SP&#xff1a;栈指针&#xff08;也称为栈底指针&…

git rebase # |REBASE 1/1 #rebase in progress; onto

git 代码解决冲突之后会提示rebase in progress; onto 1 执行git rebase --abort 回到没有pull代码之前 2 git pull 3 解决冲突 4 git add . (不需要git commit) 5 git rebase --continue 6 git push

ruoyi若依框架SpringSecurity实现分析

系列文章 ruoyi若依框架学习笔记-01 ruoyi若依框架分页实现分析 ruoyi若依框架SpringSecurity实现分析 文章目录 系列文章前言具体分析一、项目中的SpringSecurity版本二、登录认证流程分析三、权限鉴定四、退出登录五、SpringSecurity配置类 总结 前言 在ruoyi-vue若依框…

Ubuntu22.04 gnome-builder gnome C 应用程序习练笔记(一)

一、序言 gnome-builder构建器是gnome程序开发的集成环境&#xff0c;支持主力语言C, C, Vala, jscript, python等&#xff0c;界面以最新的 gtk 4.12 为主力&#xff0c;将其下版本的gtk直接压入了depreciated&#xff0c;但gtk4.12与普遍使用的gtk3有很大区别&#xff0c;原…