当前位置: 首页 > news >正文

Tailwind CSS v4.0 发布

Holy shit it's actually done !

1 月 22 日,Tailwind CSS 正式发布了 4.0 版本,针对性能和灵活性进行了优化,重新构想了配置和定制体验,并充分利用了 Web 平台提供的最新进展。

  • 新的高性能引擎- 完整构建速度提高 5 倍,增量构建速度提高 100 倍以上 - 以微秒为单位。
    • 专为现代网络而设计@property— 基于诸如级联层、使用、注册的自定义属性等尖端 CSS 功能构建color-mix()
    • 简化安装- 更少的依赖项、零配置,并且只需 CSS 文件中的一行代码。
    • 第一方 Vite 插件——紧密集成,实现最高性能和最低配置。
    • 自动内容检测——您的所有模板文件都会被自动发现,无需配置。
    • 内置导入支持——无需额外的工具即可捆绑多个 CSS 文件。
    • CSS 优先配置——重新构想的开发人员体验,您可以直接在 CSS 中自定义和扩展框架,而不是使用 JavaScript 配置文件。
    • CSS 主题变量——所有设计令牌都公开为原生 CSS 变量,因此您可以在任何地方访问它们。
    • 动态效用值和变体——停止猜测间距尺度中存在什么值,或者扩展诸如基本数据属性之类的配置。
    • 现代化的 P3 调色板——重新设计的、更生动的调色板,充分利用了现代显示技术。
    • 容器查询——根据容器大小对元素进行样式设置的一流 API,无需插件。
    • 新的 3D 变换实用程序— 直接在 HTML 中变换 3D 空间中的元素。
    • 扩展渐变 API — 径向和圆锥渐变、插值模式等。
    • @starting-style 支持——您可以使用此新变体来创建进入和退出转换,而无需 JavaScript。
    • not-* variant — 仅当元素与另一个变体、自定义选择器或媒体或功能查询不匹配时才设置元素样式。
    • 更多新实用程序和变体color-scheme— 包括对、、field-sizing复杂阴影inert等的支持。

立即开始使用 Tailwind CSS v4.0,将其安装在新项目中,或直接在其安装在新项目中,或直接在其安装在新项目中,或直接在其安装在新项目中,或直接在其安装在新项目中,或直接在Tailwind Play上的浏览​​器中使用它。

对于现有项目,我们发布了全面的升级指南并构建了自动升级工具,以便您尽快、轻松地获得最新版本。


新型高性能引擎

Tailwind CSS v4.0 是对该框架的彻底重写,它吸收了我们多年来对架构的所有了解,并对其进行了优化,使其尽可能快。

当我们对自己的项目进行基准测试时,我们发现完全重建速度提高了 3.5 倍以上,增量构建速度提高了 8 倍以上。

以下是我们对 Tailwind CSS v4.0 与Catalyst进行基准测试时看到的平均构建时间:

v3.44.0版改进
完整构建378毫秒100毫秒3.78x
使用新 CSS 进行增量重建44毫秒5毫秒8.8x
无需新 CSS 的增量重建35毫秒192微秒182x

最令人印象深刻的改进是增量构建,实际上不需要编译任何新的 CSS — 这些构建速度快 100 倍以上,并在几微秒内完成。而且你在项目上工作的时间越长,你遇到的这些构建就越多,因为你只是使用以前已经使用过的类,例如flexcol-span-2font-bold


专为现代网络而设计

自我们发布 Tailwind CSS v3.0 以来,平台已经有了很大的发展,而 v4.0 充分利用了其中的许多改进。

@layer theme, base, components, utilities;
@layer utilities {.mx-6 {margin-inline: calc(var(--spacing) * 6);}.bg-blue-500\/50 {background-color: color-mix(in oklab, var(--color-blue-500) 50%, transparent);}
}
@property --tw-gradient-from {syntax: "<color>";inherits: false;initial-value: #0000;
}

我们正在利用以下现代 CSS 功能:

  • 原生级联层——让我们比以往更好地控制不同样式规则之间的交互方式。
    • 注册的自定义属性- 可以执行诸如动画渐变之类的操作,并显著提高大页面的性能。
    • color-mix() — 它让我们调整任何颜色值的不透明度,包括 CSS 变量和currentColor
    • 逻辑属性——简化 RTL 支持并减少生成的 CSS 的大小。

其中许多功能甚至从内部简化了 Tailwind,减少了出现错误的面积,并使我们更易于维护框架。


简化安装

我们在 v4.0 中大大简化了设置流程,减少了步骤数并删除了大量样板代码。

1.安装 Tailwind CSS
npm i tailwindcss @tailwindcss/postcss;
2.添加PostCSS插件
export default {plugins: ["@tailwindcss/postcss"],
};
3. 在 CSS 中导入 Tailwind
@import "tailwindcss";

通过我们对 v4.0 中此流程所做的改进,Tailwind 比以往更加轻量:

  • 只需一行 CSS — 无需更多@tailwind指令,只需添加@import "tailwindcss"并开始构建。
    • 零配置——您可以开始使用框架而无需配置任何内容,甚至不需要配置模板文件的路径。
    • 无需外部插件- 我们@import为您捆绑开箱即用的规则,并在后台使用Lightning CSS进行供应商前缀和现代语法转换。

当然,每个项目你只需要经历一次这样的过程,但是当你每个周末开始和放弃不同的副项目时,这个过程就会累积起来。

第一方 Vite 插件

如果您是 Vite 用户,现在可以使用 Tailwind@tailwindcss/vite而不是 PostCSS 来集成:

vite.config.ts
import { defineConfig } from "vite";
import tailwindcss from "@tailwindcss/vite";
export default defineConfig({plugins: [tailwindcss(),],
});

Tailwind CSS v4.0 用作 PostCSS 插件时速度非常快,但使用 Vite 插件可以获得更好的性能。

自动内容检测

您知道在 Tailwind CSS v3 中总是需要配置那个烦人的content数组吗?在 v4.0 中,我们想出了一系列启发式方法来自动检测所有这些东西,这样您根本不必进行配置。

例如,我们会自动忽略.gitignore文件中的任何内容,以避免扫描依赖项或不受版本控制的生成文件:

.gitignore
/node_modules
/coverage
/.next/
/build

我们还会自动忽略所有二进制扩展名,如图像、视频、.zip 文件等。

如果您需要明确添加默认排除的源,您可以随时使用@source指令在 CSS 文件中将其添加:

CSS
@import "tailwindcss";
@source "../node_modules/@my-company/ui-lib";

@source指令在底层使用相同的启发式方法,因此它也会排除二进制文件类型,而无需您指定要明确扫描的所有扩展名。

在我们的新文档中了解有关在源文件中检测类的更多信息。


内置导入支持

在 v4.0 之前,如果您想内联其他 CSS 文件,@import您必须配置另一个插件来postcss-import为您处理它。

现在我们可以立即处理这个问题,所以您不需要任何其他工具:

postcss.config.js
export default {plugins: ["postcss-import","@tailwindcss/postcss",],
};

我们的导入系统是专为 Tailwind CSS 构建的,因此我们还可以通过将其与我们的引擎紧密集成使其运行得更快。


CSS 优先配置

Tailwind CSS v4.0 中最大的变化之一是从使用 JavaScript 配置项目转变为使用 CSS 配置项目。

您无需使用tailwind.config.js文件,而是可以直接在导入 Tailwind 的 CSS 文件中配置所有自定义项,这样就少了一个需要担心的项目文件:

CSS
@import "tailwindcss";
@theme {--font-display: "Satoshi", "sans-serif";--breakpoint-3xl: 1920px;--color-avocado-100: oklch(0.99 0 0);--color-avocado-200: oklch(0.98 0.04 113.22);--color-avocado-300: oklch(0.94 0.11 115.03);--color-avocado-400: oklch(0.92 0.19 114.08);--color-avocado-500: oklch(0.84 0.18 117.33);--color-avocado-600: oklch(0.53 0.12 118.34);--ease-fluid: cubic-bezier(0.3, 0, 0, 1);--ease-snappy: cubic-bezier(0.2, 0, 0, 1);/* ... */
}

新的 CSS-first 配置允许您执行文件中几乎所有可以执行的操作tailwind.config.js,包括配置设计令牌、定义自定义实用程序和变体等。

要了解其工作原理,请阅读新的主题变量文档。


CSS 主题变量

Tailwind CSS v4.0 采用您的所有设计令牌并默认将它们作为 CSS 变量提供,因此您只需使用 CSS 即可在运行时引用所需的任何值。

使用前面的示例@theme,所有这些值都将作为常规自定义属性添加到您的 CSS 中:

生成的 CSS
:root {--font-display: "Satoshi", "sans-serif";--breakpoint-3xl: 1920px;--color-avocado-100: oklch(0.99 0 0);--color-avocado-200: oklch(0.98 0.04 113.22);--color-avocado-300: oklch(0.94 0.11 115.03);--color-avocado-400: oklch(0.92 0.19 114.08);--color-avocado-500: oklch(0.84 0.18 117.33);--color-avocado-600: oklch(0.53 0.12 118.34);--ease-fluid: cubic-bezier(0.3, 0, 0, 1);--ease-snappy: cubic-bezier(0.2, 0, 0, 1);/* ... */
}

这样可以轻松地将这些值重用为内联样式或将它们传递给Motion等库来为其设置动画。


动态效用值和变体

我们简化了许多实用程序和变体在 v4.0 中的工作方式,有效地允许它们接受某些类型的任意值,无需任何配置或降低到任意值语法。

例如,在 Tailwind CSS v4.0 中,您可以创建任意大小的网格:

HTML
<div class="grid grid-cols-15"><!-- ... -->
</div>

您还可以定位自定义布尔数据属性,而无需定义它们:

HTML
<div data-current class="opacity-75 data-current:opacity-100"><!-- ... -->
</div>

甚至间距实用程序(例如px-*mt-*w-*h-*等)现在都是从单个间距比例变量动态派生而来的,并且接受任何开箱即用的值:

生成的 CSS
@layer theme {:root {--spacing: 0.25rem;}
}
@layer utilities {.mt-8 {margin-top: calc(var(--spacing) * 8);}.w-17 {width: calc(var(--spacing) * 17);}.pr-29 {padding-right: calc(var(--spacing) * 29);}
}

如果我们与 v4.0 一起发布的升级工具注意到您使用了不再需要的任意值,它甚至会自动为您简化大多数这些实用程序。


现代化的 P3 调色板

我们将整个默认调色板从 升级到rgboklch利用更宽的色域使以前受 sRGB 色彩空间限制的地方的色彩更加鲜艳。

我们试图保持所有颜色之间的平衡与 v3 中的相同,因此即使我们全面刷新了内容,在升级现有项目时也不会感觉像是重大变化。


容器查询

我们已将容器查询支持纳入 v4.0 的核心,因此您不再需要@tailwindcss/container-queries插件:

HTML
<div class="@container"><div class="grid grid-cols-1 @sm:grid-cols-3 @lg:grid-cols-4"><!-- ... --></div>
</div>

我们还使用新变体添加了对最大宽度容器查询的支持@max-*

HTML
<div class="@container"><div class="grid grid-cols-3 @max-md:grid-cols-1"><!-- ... --></div>
</div>

与我们的常规断点变体一样,您也可以堆叠@min-*@max-*变体来定义容器查询范围:

HTML
<div class="@container"><div class="flex @min-md:@max-xl:hidden"><!-- ... --></div>
</div>

在我们全新的容器查询文档中了解更多信息。


新的 3D 变换实用程序

我们最终添加了用于进行 3D 转换的 API,例如、、、rotate-x-*等等。rotate-y-*scale-z-*translate-z-*

<div class="perspective-distant"><article class="rotate-x-51 rotate-z-43 transform-3d ..."><!-- ... --></article>
</div>

查看更新的、、transform-style和文档以开始使用。rotateperspectiveperspective-origin


扩展渐变 API

我们在 v4.0 中添加了大量新的渐变功能,因此您无需编写任何自定义 CSS 即可实现更精美的效果。

线性渐变角度

线性渐变现在支持角度作为值,因此您可以使用类似实用程序bg-linear-45在 45 度角上创建渐变:

<div class="bg-linear-45 from-indigo-500 via-purple-500 to-pink-500"></div>

您可能注意到我们也已重命名bg-gradient-*bg-linear-*— 您很快就会明白为什么!

渐变插值修饰符

我们添加了使用修饰符来控制渐变的颜色插值模式的功能,因此像bg-linear-to-r/srgb使用 sRGB 进行插值的类,以及bg-linear-to-r/oklch使用 OKLCH 进行插值的类:

<div class="bg-linear-to-r/srgb from-indigo-500 to-teal-400">...</div>
<div class="bg-linear-to-r/oklch from-indigo-500 to-teal-400">...</div>

from-*当色轮上的和 颜色相距较远时,使用 OKLCH 或 HSL 等极地色彩空间可以产生更加生动的渐变to-*。我们在 v4.0 中默认使用 OKLAB,但您始终可以通过添加其中一个修饰符来使用不同的色彩空间进行插值。

圆锥渐变和径向渐变

我们添加了用于创建圆锥渐变和径向渐变的新实用程序bg-conic-*bg-radial-*

<div class="size-24 rounded-full bg-conic/[in_hsl_longer_hue] from-red-600 to-red-600"></div>
<div class="size-24 rounded-full bg-radial-[at_25%_25%] from-white to-zinc-900 to-75%"></div>

这些新实用程序与现有的from-*via-*to-*实用程序一起工作,让您可以像创建线性渐变一样创建圆锥渐变和径向渐变,并包含用于设置颜色插值方法的修饰符和用于控制渐变位置等细节的任意值支持。


@starting-style 支持

starting变体增加了对新 CSS@starting-style功能的支持,使得在元素首次显示时转换元素属性成为可能:

<div><button popovertarget="my-popover">Check for updates</button><div popover id="my-popover" class="transition-discrete starting:open:opacity-0 ..."><!-- ... --></div>
</div>

有了@starting-style,您终于可以在页面上为元素添加动画效果,而无需任何 JavaScript。浏览器支持可能尚未完全实现,但我们正在接近目标!


非-* 变体

我们添加了一个新的not-*变体,最终增加了对 CSS:not()伪类的支持:

HTML
<div class="not-hover:opacity-75"><!-- ... -->
</div>
CSS
.not-hover\:opacity-75:not(*:hover) {opacity: 75%;
}
@media not (hover: hover) {.not-hover\:opacity-75 {opacity: 75%;}
}

它具有双重功能,还允许您否定媒体查询和@supports查询:

HTML
<div class="not-supports-hanging-punctation:px-4"><!-- ... -->
</div>
CSS
.not-supports-hanging-punctation\:px-4 {@supports not (hanging-punctation: var(--tw)) {padding-inline: calc(var(--spacing) * 4);}
}

查看新not-*文档以了解更多信息。


更多新实用程序和变体

我们还在 v4.0 中添加了大量其他新实用程序和变体,包括:

  • 新功能 inset-shadow-*和inset-ring-*实用程序——可以在单个元素上堆叠最多四层框阴影。
    • 新的 field-sizing实用程序——无需编写一行 JavaScript 即可自动调整文本区域的大小。
    • 新的 color-scheme实用程序——这样你最终就可以摆脱黑暗模式下那些丑陋的浅色滚动条。
    • 新的 font-stretch实用程序——用于仔细调整支持不同宽度的可变字体。
    • 新的 inert变体——用于设置标有属性的非交互式元素的样式inert
    • 新的 nth-*变种——做一些你最终会后悔的聪明事情。
    • 新的 in-*变体— 与 非常相似group-*,但不需要类group
    • 支持 :popover-open——使用现有open变体来定位打开的弹出窗口。
    • 新的 后代变体— 用于设计所有后代元素的样式,无论是好是坏。

查看所有这些功能的相关文档以了解更多信息。


相关文档

Tailwind CSS v4.0 - Tailwind CSS

Tailwind CSS - Rapidly build modern websites without ever leaving your HTML.

相关文章:

Tailwind CSS v4.0 发布

Holy shit its actually done &#xff01; 1 月 22 日&#xff0c;Tailwind CSS 正式发布了 4.0 版本&#xff0c;针对性能和灵活性进行了优化&#xff0c;重新构想了配置和定制体验&#xff0c;并充分利用了 Web 平台提供的最新进展。 新的高性能引擎- 完整构建速度提高 5 …...

pandas基础:文件的读取和写入

文件的读取和写入 读取csv文件 csv文件&#xff1a; name,age,city Alice,25,New York Bob,30,Los Angelesread_csv(filename) header&#xff1a;如 何处理文件的第一行。header0将第一行作为列名&#xff0c;headerNone表示文件中没有列名&#xff0c;所有行都是数据。 im…...

【MySQL — 数据库增删改查操作】深入解析MySQL的create insert 操作

数据库CRUD操作 1 CRUD简介 CURD是对数据库中的记录进行基本的增删改查操作: 2. Create 新增 语法 INSERT [INTO] table_name[(column [&#xff0c;column] ...)] VALUES(value_list)[&#xff0c;(value_list)] ... # value 后面的列的个数和类型&#xff0c;要和表结构匹配…...

每日OJ_牛客_小红的子串_滑动窗口+前缀和_C++_Java

目录 牛客_小红的子串_滑动窗口前缀和 题目解析 C代码 Java代码 牛客_小红的子串_滑动窗口前缀和 小红的子串 描述&#xff1a; 小红拿到了一个长度为nnn的字符串&#xff0c;她准备选取一段子串&#xff0c;满足该子串中字母的种类数量在[l,r]之间。小红想知道&…...

HTTP 配置与应用(局域网)

想做一个自己学习的有关的csdn账号&#xff0c;努力奋斗......会更新我计算机网络实验课程的所有内容&#xff0c;还有其他的学习知识^_^&#xff0c;为自己巩固一下所学知识&#xff0c;下次更新HTTP 配置与应用&#xff08;不同网段&#xff09;。 我是一个萌新小白&#xf…...

ultralytics 是什么?

ultralytics 是一个用于计算机视觉任务的 Python 库&#xff0c;专注于提供高效、易用的目标检测、实例分割和图像分类工具。它最著名的功能是实现 YOLO&#xff08;You Only Look Once&#xff09; 系列模型&#xff0c;特别是最新的 YOLOv8。 1. YOLO 是什么&#xff1f; YO…...

AI竞争:从技术壁垒到用户数据之争

标题&#xff1a;AI竞争&#xff1a;从技术壁垒到用户数据之争 文章信息摘要&#xff1a; AI市场呈现开放模型与封闭模型并存的双轨发展态势&#xff0c;但核心竞争力已从模型技术转向用户数据积累和使用习惯培养。商业模式正在多元化发展&#xff0c;从早期的价格战转向subsc…...

MySQL 主从复制(单组传统复制,GTID复制。双主复制)

案例环境 单组复制 master&#xff1a; 192.168.180.143 slave01&#xff1a;192.168.180.144 双组复制 master01&#xff1a;192.168.180.143 master02&#xff1a;192.168.180.144 案例过程 准备工作 关闭所有防火墙 setenforce 0 && systemctl stop firewa…...

python学opencv|读取图像(四十)掩模:三通道图像的局部覆盖

【1】引言 前序学习了使用numpy创建单通道的灰色图像&#xff0c;并对灰色图像的局部进行了颜色更改&#xff0c;相关链接为&#xff1a; python学opencv|读取图像&#xff08;九&#xff09;用numpy创建黑白相间灰度图_numpy生成全黑图片-CSDN博客 之后又学习了使用numpy创…...

vue3 中如何监听 props 中的值的变化

在 Vue 3 中&#xff0c;你可以使用 watch 函数来监听组件的 props 值的变化。watch 函数允许你观察一个或多个响应式数据源&#xff0c;并在这些数据源发生变化时执行回调函数。 以下是一个示例&#xff0c;展示了如何在 Vue 3 中使用 watch 来监听 props 中的值的变化&#…...

Scrapy之一个item包含多级页面的处理方案

目标 在实际开发过程中&#xff0c;我们所需要的数据往往需要通过多个页面的数据汇总得到&#xff0c;通过列表获取到的数据只有简单的介绍。站在Scrapy框架的角度来看&#xff0c;实际上就是考虑如何处理一个item包含多级页面数据的问题。本文将以获取叶子猪网站的手游排行榜及…...

hive 自动检测、自动重启、记录检测日志、自动清理日志

最终效果 定时检测hive运行状态&#xff0c;进程不存在或者进程存在但是不监听端口的hiveserver2&#xff0c;自动重新拉起每次检测脚本执行的日志都会保存在log目录下.check文件&#xff0c;每一个月一个文件每月15日&#xff0c;删除2月前的检测日志开启hive自带日志输出后&…...

HFSS同轴替换波端口

波端口仿真正常 将波端口换成内径内径0.3mm外径0.6mm同轴之后 结果很不对 换成下面的尺寸就好了...

【2024年华为OD机试】 (C卷,100分)- 素数之积(JavaScriptJava PythonC/C++)

一、问题描述 RSA 因数分解问题 题目描述 RSA 加密算法在网络安全世界中无处不在&#xff0c;它利用了极大整数因数分解的困难度。数据越大&#xff0c;安全系数越高。给定一个 32 位正整数&#xff0c;请对其进行因数分解&#xff0c;找出是哪两个素数的乘积。 输入描述 …...

【C++模板】:如何判断自定义类型是否实现某个函数

一、引子 偶尔我们会面对这样的尴尬的场景&#xff0c;我们需要显示的去判断在某个自定义类型中&#xff0c;是否已经提供了我们期待的API接口&#xff0c;以避免产生“莫须有”的错误。阁下该如何破解此问题&#xff01; 这里&#xff0c;直接给出一种通用的方法&#xff0c;…...

基于微信小程序的汽车保养系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

电子应用设计方案102:智能家庭AI鱼缸系统设计

智能家庭 AI 鱼缸系统设计 一、引言 智能家庭 AI 鱼缸系统旨在为鱼类提供一个健康、舒适的生活环境&#xff0c;同时为用户提供便捷的管理和观赏体验。 二、系统概述 1. 系统目标 - 自动维持水质稳定&#xff0c;包括水温、酸碱度、硬度和溶氧量等关键指标。 - 智能投食&…...

【Elasticsearch】RestClient操作文档

RestClient操作文档 新增文档实体类API语法 查询文档删除文档修改文档批量导入文档小结 新增文档 将数据库中的信息导入elasticsearch中 以商品数据为例 实体类 定义一个索引库结构对应的实体。 Data ApiModel(description "索引库实体") public class ItemDoc{…...

内存条的构造、原理及性能参数

内存条的构造、原理及性能参数 一、内存条的构造1.1 外观结构1.1.1 芯片&#xff1a;大脑1.1.2 PCB板&#xff1a;骨架1.1.3 金手指&#xff1a;接口1.1.4 电容电阻&#xff1a;稳压、稳流1.1.5 防呆缺口&#xff1a;防错 1.2 内部层次结构 二、内存条的工作原理2.1 数据的“搬…...

鸿蒙模块概念和应用启动相关类(HAP、HAR、HSP、AbilityStage、UIAbility、WindowStage、window)

目录 鸿蒙模块概念 HAP entry feature har shared 使用场景 HAP、HAR、HSP介绍 HAP、HAR、HSP开发 应用的启动 AbilityStage UIAbility WindowStage Window 拉起应用到显示到前台流程 鸿蒙模块概念 HAP hap包是手机安装的最小单元&#xff0c;1个app包含一个或…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...