CSS 系列之:grid 布局
基本概念
<template><div class="parent"><div class="box">p1-1</div><div class="box">p1-2</div><div class="box">p1-3</div></div><div class="parent"><div class="box">p2-1</div><div class="box">p2-2</div><div class="box">p2-3</div></div>
</template><style scoped>
.parent {background-color: skyblue;display: grid; // 块级容器,宽度撑满整行/* display: inline-grid; */ // 行内容器,宽度随内容自适应
}.box {border: 1px solid #000;
}
</style>
最外层的 <div class="parent"> 称为容器,内层的三个 <div class="children"> 称为项目(或网格项)。
使用网格布局后,项目的 float、display: inline-block、display: table-cell、vertical-align、column-* 等设置都将失效。


指定行列
grid-template-columns 指定划分列数
grid-template-rows 指定划分行数
固定宽高 px
<template><div class="parent"><div class="box">1</div><div class="box">2</div><div class="box">3</div><div class="box">4</div><div class="box box5">5</div></div>
</template><style scoped>
.parent {background-color: skyblue;display: grid;/* 3 列 */grid-template-columns: 100px 100px 100px;/* 2 行 */grid-template-rows: 50px 40px;
}.box {border: 1px solid #000;margin: 10px;
}
</style>

可以看到 grid-template-columns 和 grid-template-rows 设置的值是包含 margin 在内的。
使用了 grid-template-columns 和 grid-template-rows 后还可以单独给项目设置宽高吗?答案是可以的。
.box5 {height: 80px;
}

单独设置宽高是不包含 margin 的,且容器的宽高不会受它影响。
百分比 %
-
如果
.parent没有显式设置 width 和 height ,则 100% 将等于 .parent 自然展开后的宽高。 -
如果
.parent有显式的 width 和 height 值,那么 100% 就等于该指定的宽高值。
<template><div class="parent"><div class="box">1</div><div class="box">2</div><div class="box">3</div><div class="box">4</div><div class="box">5</div><div class="box">6</div><div class="box"><div style="height: 30px;">7</div></div></div></template><style scoped>
.parent {background-color: skyblue;display: grid;/* 3 列 */grid-template-columns: 40% 30% 20%;/* 2 行 */grid-template-rows: 100% 50%;
}.box {border: 1px solid #000;margin: 10px;
}
</style>

第 7 个 项目的高度没有被 grid-template-rows 设置到,则第 7 个 div 的高度是他实际内容的高度。
重复设置 repeat
使用 repeat 统一设置值,第一个参数为重复数量,第二个参数是重复值
<template><div class="parent"><div class="box">1</div><div class="box">2</div><div class="box">3</div><div class="box">4</div><div class="box">5</div><div class="box">6</div><div class="box">7</div></div></template><style scoped>
.parent {background-color: skyblue;display: grid;/* 3 列 */grid-template-columns: repeat(3, 40%);/* 2 行 */grid-template-rows: repeat(2, 50%);
}.box {border: 1px solid #000;margin: 10px;
}
</style>

项目总宽度超过 100% 时会产生滚动条。
repeat 还可以设置多个值:
<template><div class="parent"><div class="box">1</div><div class="box">2</div><div class="box">3</div><div class="box">4</div><div class="box">5</div><div class="box">6</div><div class="box">7</div></div></template><style scoped>
.parent {background-color: skyblue;display: grid;grid-template-columns: repeat(2, 200px 100px);grid-template-rows: repeat(2, 50px);
}.box {border: 1px solid #000;margin: 10px;
}
</style>

自动填充 auto
用于填充满所有剩余空间
<template><div class="parent"><div class="box">1</div><div class="box">2</div><div class="box">3</div><div class="box">4</div><div class="box">5</div><div class="box">6</div><div class="box">7</div></div></template><style scoped>
.parent {background-color: skyblue;display: grid;grid-template-columns: 100px 20% auto;
}.box {border: 1px solid #000;margin: 10px;
}
</style>

比例划分 fr
fr 是 fraction 的缩写,意为"片段"。
<template><div class="parent"><div class="box">1</div><div class="box">2</div><div class="box">3</div><div class="box">4</div><div class="box">5</div><div class="box">6</div><div class="box">7</div></div></template><style scoped>
.parent {background-color: skyblue;display: grid;grid-template-columns: 100px 1fr 2fr;grid-template-rows: 3fr 1fr 2fr;
}.box {border: 1px solid #000;margin: 10px;
}
</style>

假设容器总宽度是 800px,grid-template-columns: 100px 1fr 2fr 则表示第一列占据 100px 宽度,第二列占据剩余 700px 的三分之一的宽度,第三列占据剩余 700px 的三分之二的宽度。
所以 grid-template-columns: 100px 20% 1fr 中最后一列的 1fr 其实也是铺满剩余空间的意思。
repeat 中也能用 fr。
最大最小值 minmax
minmax() 函数产生一个长度范围,表示长度就在这个范围之中。它接受两个参数,分别为最小值和最大值。
<template><div class="parent"><div class="box">1</div><div class="box">2</div><div class="box">3</div><div class="box">4</div><div class="box">5</div><div class="box">6</div><div class="box">7</div></div></template><style scoped>
.parent {background-color: skyblue;display: grid;grid-template-columns: 100px 100px minmax(100px, 1fr);grid-template-rows: 3fr 1fr 2fr;
}.box {border: 1px solid #000;margin: 10px;
}
</style>
最后一列表示宽度最小 100px,最大铺满剩余空间。

自动调整 auto-fit 和 auto-fill
<template><div class="parent auto-fit"><div class="box">1</div><div class="box">2</div><div class="box">3</div></div><div class="parent auto-fill"><div class="box">1</div><div class="box">2</div><div class="box">3</div></div>
</template><style scoped>
.parent {background-color: skyblue;display: grid;width: 600px;margin-bottom: 20px;
}.auto-fit {grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
}.auto-fill {grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
}.box {border: 1px solid #000;margin: 10px;
}
</style>

容器宽度为 600px,我们希望在其中放置一些最小宽度为 100px 的项目,每个项目的最大宽度为 1fr(即剩余空间的等分部分)。
理论上可以创建 6 个 100px 宽的列,但只有 3 个项目,所以会有 3 个空的列。
auto-fit 会合并多余的空列,使现有列扩展以填满所有可用空间。
auto-fill 仍然会创建 6 个列,但其中 3 个列将是空的。


auto-fill 和 auto-fit 关键需要与 repeat() 函数和 minmax() 函数一起使用,才能发挥它们的作用。
在上例中我们看到,使用 auto-fill 时,项目的宽度始终时 minmax(100px, 1fr) 中的最小值 100px,那么 1fr 的作用是什么呢?
直接说结论:
-
当容器的宽度小于等于项目的宽度时,1fr 不会起作用
-
当容器的宽度是项目的宽度的整数倍时,1fr 不会起作用
-
当容器的宽度是项目的宽度的大于 1 的小数倍时,1fr 才会起作用
例如把上面的例子中改成:
.parent {width: 460px
}

每个项目宽度是 115px,被扩充了。
总结:
auto-fit 和 auto-fill 都会尝试创建尽可能多的项目,例如 460px 的容器最多可以创建 4 个最小宽度为 100px 的项目,但是 html 中只有 3 个项目,对多出的这 1 个空白项目和剩余的额外 60px 空间的处理方式就是 auto-fit 和 auto-fill 的区别
-
auto-fit 会吞并多出的空白项目,使现有项目扩展以填满所有剩余空间
-
auto-fill 会保留多出的空白项目,空白项目会占据空间,如果有剩余的额外,则所有项目会扩展以填满剩余额外空间
指定区域
grid-template-areas
可以将网格布局中的某个单元格或多个单元格定义为一个区域。
网格区域一定要形成规整的矩形区域,无论是 L 形,还是凹的或凸的形状都会认为是无效的属性值。
按固定数值划分
<template><div class="parent"><div class="box top">top</div><div class="box left">left</div><div class="box right">right</div><div class="box bottom">bottom</div></div>
</template><style scoped>
.parent {background-color: skyblue;height: 100%;display: grid;grid-template-columns: 50px auto;grid-template-rows: 70px auto 70px;grid-template-areas:"top top""left right""bottom bottom";
}.box {border: 1px solid #000;
}.top {grid-area: top;
}.left {grid-area: left;
}.right {grid-area: right;
}.bottom {grid-area: bottom;
}
</style>

按比例划分
<template><div class="parent"><div class="box top">top</div><div class="box left">left</div><div class="box right">right</div><div class="box bottom">bottom</div></div>
</template><style scoped>
.parent {background-color: skyblue;height: 100%;display: grid;grid-template-columns: 1fr 1fr 1fr;grid-template-rows: 1fr 1fr 1fr 1fr;grid-template-areas:"top top top""left right right""left right right""bottom bottom bottom";
}.box {border: 1px solid #000;
}.top {grid-area: top;
}.left {grid-area: left;
}.right {grid-area: right;
}.bottom {grid-area: bottom;
}
</style>

grid-tempalte
是 grid-template-rows、grid-template-columns、grid-template-areas 的三个属性的简写。
按固定数值划分
上面的按固定数值划分可以改造为:
.parent {background-color: skyblue;height: 100%;display: grid;grid-template:"top top" 70px"left right" auto"bottom bottom" 70px/ 50px auto;
}
第一行 "top top" 70px 定义了一个名为 top 的区域占据前两列,并且该区域所在行的高度为 70px。
第二行 "left right" auto 定义了一个名为 left 的区域占据第一列和一个名为 right 的区域占据第二列,并且该区域所在行的高度为 auto。
第三行 "bottom bottom" 70px 定义了一个名为 bottom 的区域占据前两列,并且该区域所在行的高度为 70px。
最后的 / 50px auto 定义了列的大小:第一列的宽度为 50px,第二列的宽度为 auto。
按比例划分
上面的按比例划分可以改造为:
.parent {background-color: skyblue;height: 100%;display: grid;grid-template:"top top top" 1fr"left right right" 1fr"left right right" 1fr"bottom bottom bottom" 1fr/ 1fr 1fr 1fr;
}
一行可以有多个不同的高度吗?例如把第一行改成 "top top top" 1fr 50px。答案是不行,会导致错乱。
点代表占位符
.parent {background-color: skyblue;height: 100%;display: grid;grid-template:"top top ." 1fr"left . ." 1fr"right . ." 1fr"bottom bottom bottom" 1fr/ 1fr 1fr 1fr;
}

注意:
一个元素不能同时占据多个不连续的网格区域。
也就是说 "top top ." 和 ". top . "、". . top" 等等都是允许的,但是 "top . top" 是不允许的。
其实 top 对应的是一个 html 元素,它要么占据连续的区域,要么占据一个单独的单元格,它不能分裂成不连续的部分。
定义间距
行间距 row-gap
列间距 column-gap
<template><div class="parent"><div class="box">1</div><div class="box">2</div><div class="box">3</div><div class="box">4</div><div class="box">5</div><div class="box">6</div><div class="box">7</div></div>
</template><style scoped>
.parent {background-color: skyblue;display: grid;grid-template-columns: repeat(3, 1fr);grid-template-rows: repeat(3, 1fr);column-gap: 30px;row-gap: 20px;
}.box {border: 1px solid #000;
}
</style>

组合定义 gap
组合写法 gap: 20px 30px; 先行(row)后列(column)
元素定位
grid-row/column-start/end
| 样式属性 | 说明 |
|---|---|
| grid-row-start | 行开始网格线 |
| grid-row-end | 行结束网格线 |
| grid-column-start | 列开始网格线 |
| grid-column-end | 列结束网格线 |
| 属性值 | 说明 |
|---|---|
| Line | 网格络 |
| span 数值 | 网格包含的网格数量 |
| span 区域名称 | 网格包含到指定的区域名称 |
| auto | 自动设置,默认为一个网格宽度和高度 |
用于指定一个网格项目的开始行(列)和结束行(列)的位置。
例如:
.grid-item1 {grid-row-start: 1; /* 从第 1 行开始 */grid-row-end: 3; /* 到第 3 行结束(不包括第 3 行,即跨越两行) */
}.grid-item2 {grid-row-start: 1;grid-row-end: span 2; /* 从第 1 行开始,跨越 2 行 */
}
行线 1 对应第一行的上边缘
行线 2 对应第二行的上边缘
行线 3 对应第三行的上边缘
…
grid-row-start 通常要比 grid-row-end 小,否则会导致一些意想不到的结果。
<template><div class="parent"><div class="box box1">1</div><div class="box box2">2</div><div class="box box3">3</div><div class="box box4">4</div><div class="box box5">5</div><div class="box box6">6</div><div class="box box7">7</div></div>
</template><style scoped>
.parent {background-color: skyblue;display: grid;grid-template-columns: repeat(3, 1fr);grid-template-rows: repeat(3, 1fr);gap: 20px 30px;
}.box {border: 1px solid #000;
}.box1 {grid-row-start: 1;
}
</style>

.box1 {grid-row-start: 2;
}

.box1 {grid-row-start: 3;
}

.box1 {grid-row-start: 4;
}

.box1 {grid-row-start: 1;grid-row-end: 3; /* 当该值是 1 和 2 时表现形式和默认图相同,直接从 3 开始 */
}

.box1 {grid-row-start: 1;grid-row-end: 4;
}

.box1 {grid-row-start: 1;grid-row-end: 5;
}

.box1 {grid-row-start: 1;grid-row-end: 6;
}

简写模式 grid-row、grid-column
grid-row 和 grid-column
语法:
grid-row: grid-row-start / grid-row-end;
grid-column: grid-row-column / grid-row-column;
例如:
.box1 {grid-row-start: 1;grid-row-end: 6;
}
就可以简写成
.box1 {grid-row: 1/6;
}
超级简写模式 grid-area
grid-area: grid-row-start / grid-column-start / grid-row-end / grid-column-end;
网格流动 grid-auto-flow
在容器中设置 grid-auto-flow 属性可以改变单元格排列方式。
| 选项 | 说明 |
|---|---|
| row | 按行排列,默认值 |
| column | 按列排序 |
| row dense | 网格将尝试在行方向上尽可能紧密地放置项目,尽量不出现空格 |
| column dense | 网格将尝试在列方向上紧密放置项目,尽量不出现空格 |
<template><div class="parent"><div class="box box1">1</div><div class="box box2">2</div><div class="box box3">3</div><div class="box box4">4</div><div class="box box5">5</div><div class="box box6">6</div><div class="box box7">7</div></div>
</template><style scoped>
.parent {background-color: skyblue;display: grid;grid-template-columns: repeat(3, 1fr);grid-template-rows: repeat(3, 1fr);gap: 20px 30px;grid-auto-flow: row;
}.box {border: 1px solid #000;
}
</style>

grid-auto-flow: column

设置单元格对齐方式
justify-items
指定单元格内容的水平对齐方式
| 属性 | 描述 |
|---|---|
| stretch | 默认值,占满单元格的整个宽度 |
| start | 对齐单元格的起始边缘 |
| end | 对齐单元格的结束边缘 |
| center | 单元格内部居中 |
<template><div class="parent"><div class="box box1">1</div><div class="box box2">2</div><div class="box box3">3</div><div class="box box4">4</div><div class="box box5">5</div><div class="box box6">6</div><div class="box box7">7</div></div>
</template><style scoped>
.parent {background-color: skyblue;display: grid;grid-template-columns: 1fr 1fr 1fr;grid-template-rows: repeat(3, 50px);gap: 20px;
}.box {border: 1px solid #000;
}
</style>

.parent {justify-items: start
}

.parent {justify-items: center
}

.parent {justify-items: end
}

align-items
指定单元格内容的垂直对齐方式
| normal | 默认值,会根据使用场景的不同表现为 stretch 或者 start |
| stretch | 拉伸,占满单元格的整个宽度 |
| start | 对齐单元格的起始边缘 |
| end | 对齐单元格的结束边缘 |
| center | 单元格内部居中 |
| baseline | 基线对齐 |
.parent {align-items: normal; // 或 stretch
}

.parent {align-items: start;
}

.parent {align-items: center;
}

.parent {align-items: end;
}

place-items
是 align-items 属性和 justify-items 属性的合并简写形式。
.parent {// 先垂直方向,再水平方向place-items: start end;
}

IE 浏览器和 Edge 浏览器都不支持 place-items 属性。如果不考虑浏览器的兼容性,在 CSS 中实现垂直居中对齐效果的最佳方法就是使用 grid 布局的 place-items 属性:
.parent {// 如果省略第二个值,则浏览器认为与第一个值相等place-items: center;
}

justify-self
跟 justify-items 属性的用法完全一致,但只作用于单个项目。
.box1 {justify-self: center
}

align-self
跟 align-items 属性的用法完全一致,也是只作用于单个项目。
.box1 {align-self: center
}

place-self
是 align-self 属性和 justify-self 属性的合并简写形式,跟 place-items 属性的用法完全一致。
.box1 {place-self: center
}

设置容器内的对齐方式
justify-content
项目在水平方向对齐方式
align-content
项目在垂直方向对齐方式
与 flex 布局中的类似。
注意:要想 justify-content 属性和 align-content 属性起作用,就需要让项目的总尺寸小于 grid 容器的尺寸。
<template><div class="parent"><div class="box box1">1</div><div class="box box2">2</div><div class="box box3">3</div><div class="box box4">4</div><div class="box box5">5</div><div class="box box6">6</div><div class="box box7">7</div></div>
</template><style scoped>
.parent {background-color: skyblue;display: grid;grid-template-columns: repeat(3, 50px);grid-template-rows: repeat(3, 50px);gap: 20px;width: 100%;height: 300px;
}.box {border: 1px solid #000;
}
</style>

.parent {justify-content: space-between;
}

place-content
是 align-content 属性和 justify-content 属性的合并简写形式。如果省略第二个值,浏览器就会假定第二个值等于第一个值。
.parent {// 先垂直方向,再水平方向place-content: center space-between;
}

xxx-item 和 xxx-content 的区别
xxx-item 用于控制容器内每个项目的对齐方式。它影响的是每个单独的项目在其所在单元格内的对齐方式。
xxx-content 用于控制容器内的所有项目的对齐方式。它影响的是所有项作为一个整体如何在容器内分配空间。
参考链接:
CSS3最强布局-Grid布局
css【详解】grid布局—— 网格布局(栅格布局)
相关文章:
CSS 系列之:grid 布局
基本概念 <template><div class"parent"><div class"box">p1-1</div><div class"box">p1-2</div><div class"box">p1-3</div></div><div class"parent"><…...
DeepSeek MLA(Multi-Head Latent Attention)算法浅析
目录 前言1. 从MHA、MQA、GQA到MLA1.1 MHA1.2 瓶颈1.3 MQA1.4 GQA1.5 MLA1.5.1 Part 11.5.2 Part 21.5.3 Part 3 结语参考 前言 学习 DeepSeek 中的 MLA 模块,究极缝合怪,东抄抄西抄抄,主要 copy 自苏神的文章,仅供自己参考&#…...
【计算机网络入门】初学计算机网络(七)
目录 1. 滑动窗口机制 2. 停止等待协议(S-W) 2.1 滑动窗口机制 2.2 确认机制 2.3 重传机制 2.4 为什么要给帧编号 3. 后退N帧协议(GBN) 3.1 滑动窗口机制 3.2 确认机制 3.3 重传机制 4. 选择重传协议(SR&a…...
Conda 环境搭建实战:从基础到进阶
在当今复杂多变的软件开发与数据科学领域,拥有一个稳定、可复现且易于管理的开发环境是项目成功的基石。Conda 作为一款强大的跨平台环境管理与包管理工具,为开发者提供了便捷高效的环境搭建与依赖管理解决方案。本文将深入探讨 Conda 环境搭建的实战技巧…...
大数据-236 离线数仓 - 会员活跃度 WDS 与 ADS 导出到 MySQL 与 广告业务 需求分析
点一下关注吧!!!非常感谢!!持续更新!!! Java篇开始了! 目前开始更新 MyBatis,一起深入浅出! 目前已经更新到了: Hadoop࿰…...
fps项目总结:关于攻击与受击
文章目录 战斗交互攻击方命中区间 双方命中响应 攻击方:指定攻击动画指定动画命中区间:在动画中指定攻击范围以及命中响应动画通知:动画中攻击的开关——调用蓝图攻击函数:实现攻击检测以及命中响应通道检测:——自定义…...
coze生成的工作流,发布后,利用cmd命令行执行。可以定时发日报,周报等。让他总结你飞书里面的表格。都可以
coze生成的工作流,发布后,利用cmd命令行执行。可以定时发日报,周报等。让他总结你飞书里面的表格。都可以。 很简单。 准备工作,先发布你的工作流,和发布应用。 然后,点击扣子API 。 申请一个࿰…...
Windows 10 远程桌面连接使用指南
目录 一、引言 二、准备工作 1、确认系统版本 2、服务器端设置 三、客户端连接 1、打开远程桌面连接程序 2、输入连接信息 3、输入登录凭证 4、开始使用远程桌面 四、移动端连接(以 iOS 为例) 1、下载安装应用 2、添加远程计算机 3、进行连接…...
Difyにboto3を変更したカスタムDockerイメージの構築手順
Difyにboto3を変更したカスタムDockerイメージの構築手順 はじめに1. Dockerfileの作成2. Dockerイメージのビルド3. docker-compose.yamlの更新変更点: 4. コンテナの再起動注意事項まとめ はじめに DifyのDockerイメージに特定バージョンのboto3を変更する手順を…...
C++性能优化常用技巧
一. 选择合适的数据结构 1.1 map与unordered_map的选择 如果仅仅只需要使用到快速查找的特性,那么unordered_map更加合适,他的复杂度是O(1)。如果还需要排序以及范围查找的能力,那么就选择map。 1.2 vector与list的选择 通常情况下&#…...
IntelliJ IDEA集成MarsCode AI
IntelliJ IDEA集成MarsCode AI IDEA中安装插件 安装完毕之后登录自己的账号 点击链接,注册账号 https://www.marscode.cn/events/s/i5DRGqqo/ 可以选择不同的模型...
数据挖掘工程师的技术图谱和学习路径
数据挖掘工程师的技术图谱和学习路径: 1.基础知识 数据挖掘工程师是负责从大量数据中发现潜在模式、趋势和规律的专业人士。以下是数据挖掘工程师需要掌握的基础知识: 数据库知识:熟悉关系数据库和非关系数据库的基本概念和操作,掌握SQL语言。 统计学基础:了解统计学的基…...
Excel基础(详细篇):总结易忽视的知识点,有用的细节操作
目录 基础篇Excel主要功能必会快捷键LotusExcel的文件类型工作表基本操作表项操作选中与缩放边框线 自动添加边框线格式刷设置斜线表头双/多斜线表头不变形的:双/多斜线表头插入多行、多列单元格/行列的移动冻结窗口 方便查看数据打印的常见问题Excel格式数字格式日期格式文本…...
基因枷锁下的太空梦 —— 千钧一发电影观后感
目录 1 人物介绍 2 电影名解读 3 电影开头 3.1 电影开头的两段话 3.2 片头设计 4 电影正文 4.1 “杰罗米”各种诡异的行为 4.2 文森特 – 失败的man 4.3 真正的杰罗米以及假基因身份证 4.4 文森特新征程 4.5 基因人的不容易 4.6 睫毛被查出有问题 4.7 文森特身份初…...
leetcode第40题组合总和Ⅱ
原题出于leetcode第40题https://leetcode.cn/problems/combination-sum-ii/题目如下: 给定一个候选人编号的集合 candidates (candidate中有重复的元素)和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合…...
迷你世界脚本状态接口:Buff
状态接口:Buff 迷你世界 更新时间: 2023-04-26 20:07:54 具体函数名及描述如下: 序号 函数名 函数描述 1 addBuff(...) 给对象附加效果 2 removeBuff(...) 给对象移除指定效果 3 clearAllBuff(...) 给对象清除所有效果 4 clearAllBadBu…...
Java中Stream流的详细使用介绍
Java中Stream流的详细使用介绍 **1. 创建 Stream**从集合创建从数组创建使用 Stream.of 创建创建无限流 **2. 中间操作**过滤:filter映射:map去重:distinct排序:sorted截取:limit 和 skip **3. 终端操作**收集…...
【重构小程序】升级JDK1.8、SpringBoot2.x 到JDK17、Springboot 3.x(一)
前言 最近想着把大火的deepseek 迁移到小程序里,基于刷题小程序的数据库做一个RAG应用,来进一步扩展答案解析,帮助用户解答相关问题。但是由于之前做的项目都要老了,并不支持spring 的AI模块,因此,我打算先…...
功能丰富的自动化任务软件zTasker_2.1.0_绿色版_屏蔽强制更新闪退
🚀 zTasker 一键式效率倍增器使用指南 🙏 致谢 首先感谢开发者提供如此高效的工具! 软件本身功能强大,但部分机制需特别注意! 📖 软件概述 zTasker 是一款通过自动化脚本/任务流实现效率飞跃的生产力工…...
_ 为什么在python中可以当变量名
在 Python 中,_(下划线)是一个有效的变量名,这主要源于 Python 的命名规则和一些特殊的使用场景。以下是为什么 _ 可以作为变量名的原因和常见用途: --- ### 1. **Python 的命名规则** Python 允许使用字母ÿ…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
Spring Boot + MyBatis 集成支付宝支付流程
Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例(电脑网站支付) 1. 添加依赖 <!…...
