ICU 排序规则设置概述(Ⅰ)

ICU 排序规则设置概述(1)

2023年5月16日

原文链接:http://peter.eisentraut.org/blog/2023/05/16/overview-of-icu-collation-settings

作者:Peter Eisentraut(彼得·艾森特劳特)

在 PostgreSQL 中,ICU 的使用正在变得越来越有影响力。ICU 提供的一个好处是它为 collation 提供了许多自定义选项。尽管在PostgreSQL 文档中给出了一些例子,但我一直觉得很难从其中获得完整且易于获取的信息。

所以为了完成这篇文章,我深入研究并查找了所有的 collation 设置,并试图为每一种提供示例。

建议阅读我之前的一篇关于collation 如何工作的文章。但即使你没有阅读过,这也作为对各种应用场景的可行性概述也应该是很有趣的。

作为起点使用的标准文档是《Unicode 技术标准 #35:Unicode 区域数据标记语言 – 第 5 部分:Collation》。该文档(或同系列文档)的主要目的是规定指定区域数据的方法。作为其中的一部分,它还规定了各种设置和其他自定义 collation 的方式。

另一个可以研究的地方是 CLDR 的源代码,这是 ICU 实际使用的数据:https://github.com/unicode-org/cldr/blob/main/common/bcp47/collation.xml

需要注意的是,虽然 Unicode Collation Algorithm(UCA)和其他 Unicode 标准,以及 ICU 和 CLDR 在某种程度上是紧密相关的,但还是存在一些小的记录差异,例如某些设置的默认值有所不同。在实践中,你可以忽略 UCA 的默认值,只关注 ICU 的默认值,但在研究各种文档时,认识到这一点是有价值的。

有两组 collation 自定义设置,我将把这篇文章分为两篇,以保持其易管理性:

  • 参数化设置:这些是以某种与底层数据或语言无关的算法方式来改变 collation 顺序的设置。例如:und-u-ka-shifted(见下文)。
  • 选择在其他规范中定义的 collation 变体的设置。例如:und-u-co-emojide-u-co-phonebk

在这篇文章中,我将更详细地研究参数化设置。我会把其他设置留给[未来的一篇文章](#ICU 排序设置概述,第二部分)。

你也可以在这里遵循参数设置的更技术性的规范:https://www.unicode.org/reports/tr35/tr35-collation.html#Collation_Settings.对于每个设置,我也将引用 CLDR XML 文件中的定义,以便于参考。

关于指定区域(locale)名称的说明:这本身可能是一个专题,但只是为了帮助理解以下内容:在 ICU 中有两种指定区域名称的方式:流行的 BCP 47 语法(如 en-u-kn-true)和旧的特定于 ICU 的如 en@colNumeric=yes。在这篇文章中,我将全程使用 BCP 47 语法,但我将使用更老、更冗长的键值作为章节标题,以便导航。

BCP 47 的规范是 RFC 5646。你在下面的例子中看到的 -u- 是注册给 Unicode 的扩展标识符。该扩展的参考是 RFC 6067,它指向 https://cldr.unicode.org/index/bcp47-extension,然后指向上述 XML 文件以获取特定于 collation 的信息。(这些规范涵盖了除 collation 之外的其他区域问题,如日历和数字格式化,但与本文无关。)

我所有的例子都基于 und,它代表“未确定”,并尽可能使用由 UCA 定义与语言无关的默认顺序。

在我们开始之前的最后一点说明:所有示例都是使用 PostgreSQL 15 和 ICU 72 的。

colAlternate

<key name="ka" description="Collation parameter key for alternate handling" alias="colAlternate"><type name="noignore" description="Variable collation elements are not reset to ignorable" alias="non-ignorable"/><type name="shifted" description="Variable collation elements are reset to zero at levels one through three"/>
</key>

这个设置决定了如何处理诸如空白标点这样的可变排序元素。我在之前的一篇文章中详细讨论过这个问题。

以下是一个简单的例子:

create collation a (provider = icu, locale = 'und-u-ka-noignore');  -- default
create collation b (provider = icu, locale = 'und-u-ka-shifted');select * from (values ('death'), ('deluge'), ('de luge')) _(x)order by x collate a;x
---------de lugedeathdelugeselect * from (values ('death'), ('deluge'), ('de luge')) _(x)order by x collate b;x
---------deathde lugedeluge

请注意,ICU 的默认值是“noignore”,而 UCA 的默认值是“shifted”。

有关更多详细信息,请参见前面的文章。

colBackwards

<key name="kb" description="Collation parameter key for backward collation weight" alias="colBackwards"><type name="true" description="The second level to be backwards" alias="yes"/><type name="false" description="No backwards (the second level to be forwards)" alias="no"/>
</key>

这个设置导致次要权重(即重音符号)被反向处理,意味着它们从字符串的末尾开始比较。这个设置曾经在法语中使用,但现在已经过时。

示例:

create collation a (provider = icu, locale = 'und-u-kb-false');  -- normal
create collation b (provider = icu, locale = 'und-u-kb-true');   -- backwardsselect * from (values ('cote'), ('coté'), ('côte'), ('côté')) _(x)order by x collate a;x
------cotecotécôtecôtéselect * from (values ('cote'), ('coté'), ('côte'), ('côté')) _(x)order by x collate b;x
------cotecôtecotécôté

正如你在这里所看到的,法语世界在这个问题上似乎存在分歧:

select * from (values ('cote'), ('coté'), ('côte'), ('côté')) _(x)order by x collate "fr-FR-x-icu";x
------cotecotécôtecôtéselect * from (values ('cote'), ('coté'), ('côte'), ('côté')) _(x)order by x collate "fr-CA-x-icu";x
------cotecôtecotécôté

再次强调,实际上这种做法正在逐渐淘汰。但它是一个有趣的奇特现象。

colCaseLevel

<key name="kc" description="Collation parameter key for case level" alias="colCaseLevel"><type name="true" description="The case level is inserted in front of tertiary" alias="yes"/><type name="false" description="No special case level handling" alias="no"/>
</key>

该设置允许创建忽略重音符号但不忽略大小写的排序规则(collations)。通过 colStrength(ks)设置,可以忽略末尾的权重,例如三级及其后面的权重。但是,如果要忽略重音符号但不忽略大小写,您希望忽略次级权重但保留三级权重。这就是该设置的作用。

示例:

create collation a (provider = icu,locale = 'und-u-ks-identic', deterministic = false);
create collation b (provider = icu,locale = 'und-u-kc-true-ks-level1', deterministic = false);select distinct x collate afrom (values ('foo'), ('Foo'), ('bar'), ('bär')) _(x);x
-----foobarbärFooselect distinct x collate bfrom (values ('foo'), ('Foo'), ('bar'), ('bär')) _(x);x
-----Foofoobar

以上可能是这种情况最常见和明显的用例。

更完整和复杂的解释是,该设置在第二级和第三级之间创建了一个额外的权重(相应地称为“2.5”级),用于编码大小写的差异。即使在权重超过主要权重的情况下被忽略,这个虚拟级别仍然保留,就像上面的例子一样。

到目前为止,我一直说第三级编码了大小写,但这并不是它的全部作用。它还编码了字符的其他次要变体。请考虑以下情况:

0061  ; [.2075.0020.0002] # LATIN SMALL LETTER A
24D0  ; [.2075.0020.0006] # CIRCLED LATIN SMALL LETTER A
00E4  ; [.2075.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER A WITH DIAERESIS
0041  ; [.2075.0020.0008] # LATIN CAPITAL LETTER A
24B6  ; [.2075.0020.000C] # CIRCLED LATIN CAPITAL LETTER A
2090  ; [.2075.0020.0015] # LATIN SUBSCRIPT SMALL LETTER A

如果我们打开 colCaseLevel 设置,将插入一个虚拟的“2.5”权重,看起来像这样:

0061  ; [.2075.0020.0001.0002] # LATIN SMALL LETTER A
24D0  ; [.2075.0020.0001.0006] # CIRCLED LATIN SMALL LETTER A
00E4  ; [.2075.0020.0001.0002][.0000.002B.0001.0002] # LATIN SMALL LETTER A WITH DIAERESIS
0041  ; [.2075.0020.0003.0008] # LATIN CAPITAL LETTER A
24B6  ; [.2075.0020.0003.000C] # CIRCLED LATIN CAPITAL LETTER A
2090  ; [.2075.0020.0001.0015] # LATIN SUBSCRIPT SMALL LETTER A

现在我们可以创建一个保留“2.5”权重但忽略原始三级权重及其后面权重的排序规则(collation)。该排序规则保留了大小写的区分,但忽略了其他三级的变体:

create collation c (provider = icu,locale = 'und-u-kc-true-ks-level2', deterministic = false);select distinct x collate afrom (values (u&'\0061'),(u&'\24D0'),(u&'\00E4'),(u&'\0041'),(u&'\24B6'),(u&'\2090')) _(x);x
---ₐaⒶⓐAäselect distinct x collate bfrom (values (u&'\0061'),(u&'\24D0'),(u&'\00E4'),(u&'\0041'),(u&'\24B6'),(u&'\2090')) _(x);x
---aAselect distinct x collate cfrom (values (u&'\0061'),(u&'\24D0'),(u&'\00E4'),(u&'\0041'),(u&'\24B6'),(u&'\2090')) _(x);x
---äaA

详请参照 https://www.unicode.org/reports/tr35/tr35-collation.html#Case_Parameters。

colCaseFirst

<key name="kf" description="Collation parameter key for ordering by case" alias="colCaseFirst"><type name="upper" description="Upper case to be sorted before lower case"/><type name="lower" description="Lower case to be sorted before upper case"/><type name="false" description="No special case ordering" alias="no"/>
</key>

该设置允许您选择是先排序小写字母还是大写字母。默认情况下,小写字母先排序。

示例:

create collation a (provider = icu, locale = 'und-u-kf-lower');
create collation b (provider = icu, locale = 'und-u-kf-upper');select * from (values ('foo'), ('Foo'), ('bar'), ('Bar')) _(x)order by x collate "und-x-icu";x
-----barBarfooFooselect * from (values ('foo'), ('Foo'), ('bar'), ('Bar')) _(x)order by x collate a;x
-----barBarfooFooselect * from (values ('foo'), ('Foo'), ('bar'), ('Bar')) _(x)order by x collate b;x
-----BarbarFoofoo

该设置可与 colCaseLevel (kc) 设置一起使用,也可单独使用。如果 colCaseLevel 为 true,则虚拟的“2.5”权重会被修改以改变大小写的排序顺序。例如,继续之前的例子,对于区域设置 und-u-kc-true-kf-upper,调整后的虚拟权重将如下所示:

0061  ; [.2075.0020.0003.0002] # LATIN SMALL LETTER A
24D0  ; [.2075.0020.0003.0006] # CIRCLED LATIN SMALL LETTER A
00E4  ; [.2075.0020.0003.0002][.0000.002B.0003.0002] # LATIN SMALL LETTER A WITH DIAERESIS
0041  ; [.2075.0020.0001.0008] # LATIN CAPITAL LETTER A
24B6  ; [.2075.0020.0001.000C] # CIRCLED LATIN CAPITAL LETTER A
2090  ; [.2075.0020.0003.0015] # LATIN SUBSCRIPT SMALL LETTER A

如果 colCaseLevel 为 false,则会修改三级权重。例如,对于区域设置 und-u-kf-upper-kc-false),虚拟权重如下所示:

0061  ; [.2075.0020.30002] # LATIN SMALL LETTER A
24D0  ; [.2075.0020.30006] # CIRCLED LATIN SMALL LETTER A
00E4  ; [.2075.0020.30002][.0000.002B.30002] # LATIN SMALL LETTER A WITH DIAERESIS
0041  ; [.2075.0020.10008] # LATIN CAPITAL LETTER A
24B6  ; [.2075.0020.1000C] # CIRCLED LATIN CAPITAL LETTER A
2090  ; [.2075.0020.30015] # LATIN SUBSCRIPT SMALL LETTER A

但是这最终提供了相同的顺序,除非其他附加选项进一步修改或忽略特定的权重级别。

colHiraganaQuaternary

<key name="kh" deprecated="true" description="Collation parameter key for special Hiragana handling" alias="colHiraganaQuaternary"><type name="true" description="Hiragana to be sorted before all non-variable on quaternary level" alias="yes"/><type name="false" description="No special handling for Hiragana" alias="no"/>
</key>

Hiragana 是日本书写系统的一部分。由于我对此不太熟悉,所以我不会在这里提供任何示例。UTS #35 也指出:“已弃用:请改用具有四元关系的规则。”

colNormalization

<key name="kk" description="Collation parameter key for normalization" alias="colNormalization"><type name="true" description="Convert text into Normalization Form D before calculating collation weights" alias="yes"/><type name="false" description="Skip normalization" alias="no"/>
</key>

通常,在进行排序之前,字符串会被标准化为 NFD 形式。但是,通过该设置,可以禁用此标准化过程。这可能会提高性能,但在某些情况下可能会产生不正确的行为(或至少是不同的行为)。

默认的排序规则权重设置使得在大多数情况下标准化并不重要。例如,考虑“LATIN SMALL LETTER A WITH DIAERESIS”的组合形式和分解形式:

00E4  ; [.2075.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER A WITH DIAERESIS0061  ; [.2075.0020.0002] # LATIN SMALL LETTER A
0308  ; [.0000.002B.0002] # COMBINING DIAERESIS

无论字符串是否进行标准化,它们的排序规则权重都将完全相同。

在一些情况下,标准化对排序规则确实有影响。可以在此处详细了解这些情况:https://www.unicode.org/reports/tr35/tr35-collation.html#Normalization_Setting

colNumeric

<key name="kn" description="Collation parameter key for numeric handling" alias="colNumeric"><type name="true" description="A sequence of decimal digits is sorted at primary level with its numeric value" alias="yes"/><type name="false" description="No special handling for numeric ordering" alias="no"/>
</key>

该设置会导致数字序列按其数值进行排序(数字排序,也称为自然排序)。

示例:

create collation a (provider = icu, locale = 'und-u-kn-false');  -- standard
create collation b (provider = icu, locale = 'und-u-kn-true');   -- numericselect * from (values ('A-123'), ('A-12n'), ('A-21'), ('B-100')) _(x)order by x collate a;x
-------A-123A-12nA-21B-100select * from (values ('A-123'), ('A-12n'), ('A-21'), ('B-100')) _(x)order by x collate b;x
-------A-12nA-21A-123B-100

这在实际中显然非常有用,可以对类似产品或发票编号等几乎是数字的内容进行排序。

它也适用于非 ASCII 数字:

select * from (values ('१२३'), ('२१')) _(x) order by x collate a;x
-----१२३२१select * from (values ('१२३'), ('२१')) _(x) order by x collate b;x
-----२११२३

colReorder

<key name="kr" description="Collation reorder codes" valueType="multiple" alias="colReorder" since="21"><type name="space" description="Whitespace reordering code, see LDML Part 5: Collation" since="21"/><type name="punct" description="Punctuation reordering code, see LDML Part 5: Collation" since="21"/><type name="symbol" description="Symbol reordering code (other than currency), see LDML Part 5: Collation" since="21"/><type name="currency" description="Currency reordering code, see LDML Part 5: Collation" since="21"/><type name="digit" description="Digit (number) reordering code, see LDML Part 5: Collation" since="21"/><type name="REORDER_CODE" description="Other collation reorder code — for script, see LDML Part 5: Collation" since="21"/>
</key>

该设置允许相对于其他字符块重新排序整个字符块。例如,默认情况下,数字在拉丁字母之前排序,拉丁字母在西里尔字母之前排序。必须选择一种默认顺序,这就是最终的结果。通过该设置,您可以轻松地指定将西里尔字母排在拉丁字母之前,并将数字排在后面,而无需单独重新排序每个字符。在此处存在许多可能的值,包括更多的字母表和其他字符组,如 XML 源中所示。

示例:

create collation a (provider = icu, locale = 'und');
create collation b (provider = icu, locale = 'und-u-kr-cyrl-latn-digit');select * from (values ('123'), ('România'), ('България'), ('Србија')) _(x)order by x collate a;x
----------123RomâniaБългарияСрбијаselect * from (values ('123'), ('România'), ('България'), ('Србија')) _(x)order by x collate b;x
----------БългарияСрбијаRomânia123

请注意,特定语言环境可能会覆盖默认的排序顺序。例如,保加利亚语环境将西里尔字母排在首位:

select * from (values ('123'), ('România'), ('България'), ('Србија')) _(x)order by x collate "bg-x-icu";x
----------123БългарияСрбијаRomânia

请参阅 https://www.unicode.org/reports/tr35/tr35-collation.html#Script_Reordering 获取更多详细信息。

colStrength

<key name="ks" description="Collation parameter key for collation strength" alias="colStrength"><type name="level1" description="The primary level" alias="primary"/><type name="level2" description="The secondary level" alias="secondary"/><type name="level3" description="The tertiary level" alias="tertiary"/><type name="level4" description="The quaternary level" alias="quaternary quarternary"/><type name="identic" description="The identical level" alias="identical"/>
</key>

这指定了要考虑的排序规则权重的级别数量。其他级别将被忽略。这个设置的典型用法是忽略第三级和后续级别来进行不区分大小写的排序(注意,第二级是重音符号,第三级是大小写)。

示例:

create collation a (provider = icu,locale = 'und-u-ks-identic', deterministic = false);
create collation b (provider = icu,locale = 'und-u-ks-level2', deterministic = false);select distinct x collate afrom (values ('foo'), ('Foo'), ('bar'), ('Bar')) _(x);x
-----foobarBarFooselect distinct x collate bfrom (values ('foo'), ('Foo'), ('bar'), ('Bar')) _(x);x
-----foobar

您还可以同时忽略大小写和重音符号:

create collation a (provider = icu,locale = 'und-u-ks-identic', deterministic = false);
create collation b (provider = icu,locale = 'und-u-ks-level1', deterministic = false);select distinct x collate afrom (values ('foo'), ('Foo'), ('bar'), ('bär')) _(x);x
-----foobarbärFooselect distinct x collate bfrom (values ('foo'), ('Foo'), ('bar'), ('bär')) _(x);x
-----barfoo

请注意,您不能仅仅使用这个设置来忽略重音符号但不忽略大小写。为了实现这一点,您需要使用 colCaseLevel (kc) 设置。

maxVariable

<key name="kv" description="Collation parameter key for maxVariable, the last reordering group to be affected by ka-shifted" since="25"><type name="space" description="Only spaces are affected by ka-shifted" since="25"/><type name="punct" description="Spaces and punctuation are affected by ka-shifted (CLDR default)" since="25"/><type name="symbol" description="Spaces, punctuation and symbols except for currency symbols are affected by ka-shifted (UCA default)" since="25"/><type name="currency" description="Spaces, punctuation and all symbols are affected by ka-shifted" since="25"/>
</key>

这个设置指定了哪些字符将成为可变排序元素,并受到 colAlternate (ka) 设置的影响。在我之前的文章中,我总是谈到“空格和标点符号”,但正如您在这里所看到的,还可以考虑其他字符组。

让我们来看一个例子:

create collation a (provider = icu, locale = 'und-u-ka-shifted');
create collation b (provider = icu, locale = 'und-u-ka-shifted-kv-currency');select * from (values ('death'), ('deluge'), ('de luge'), ('de$luge')) _(x)order by x collate a;x
---------de$lugedeathde lugedelugeselect * from (values ('death'), ('deluge'), ('de luge'), ('de$luge')) _(x)order by x collate b;x
---------deathde lugede$lugedeluge

请注意,在第一个示例中,货币符号 $ 像一个非可变字符一样排序,出现在字符 a 之前;而在第二个示例中,它受到与空格字符相同的可变处理影响。

默认情况下,在 CLDR(通用语言数据存储库)中,空格和标点符号被视为可变字符,而 UCA(统一排序规则)默认情况下也将符号视为可变字符。

variableTop

<key name="vt" deprecated="true" description="Collation parameter key for variable top" valueType="multiple" alias="variableTop"><type name="CODEPOINTS" description="The variable top (one or more Unicode code points: LDML Appendix Q)"/>
</key>

这是一个已被弃用的替代方案,与 maxVariable 不同,它不是通过指定字符组名称来指定可变字符,而是通过指定所有具有低于某个特定值(即“top”)的主要权重的字符应该是可变的来选择可变字符。显然,这种方法不如替代方案方便,因此已被弃用。

总结

以下是我们讨论的 collation 设置的总结(已忽略正式废弃的设置):

别名描述
colAlternateka交替处理
colBackwardskb反向排序权重
colCaseLevelkc大小写级别
colCaseFirstkf按照大小写排序
colNormalizationkk标准化
colNumerickn数字处理
colReorderkr重新排序码
colStrengthks排序强度
maxVariablekv最后一个受到 ka-shifted 影响的重新排序组。

正如在开始时提到的,我将在将来的另一篇文章中探讨(非参数化)collation/co的设置。

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

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

相关文章

携6亿用户进场,钉钉上线借款服务

来源 | 镭射财经&#xff08;leishecaijing&#xff09; 「镭射财经」注意到&#xff0c;用户数超6亿的云办公巨头钉钉已入局助贷业务&#xff0c;上线借款服务。据了解&#xff0c;钉钉的助贷业务已上线一段时间&#xff0c;目前仅有四家资金方。 产品信息显示&#xff0c;钉…

在外Windows远程连接MongoDB数据库【无公网IP】

文章目录 前言1. 安装数据库2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射2.3 测试随机公网地址远程连接 3. 配置固定TCP端口地址3.1 保留一个固定的公网TCP端口地址3.2 配置固定公网TCP端口地址3.3 测试固定地址公网远程访问 转载自cpolar极点云文章&#xff1a;公网远程…

论文阅读-2:基于深度学习的大尺度遥感图像建筑物分割研究

一、该网络中采用了上下文信息捕获模块。通过扩大感受野&#xff0c;在保留细节信息的同时&#xff0c;在中心部分进行多尺度特征的融合&#xff0c;缓解了传统算法中细节信息丢失的问题&#xff1b;通过自适应地融合局部语义特征&#xff0c;该网络在空间特征和通道特征之间建…

docker服务启动过程分析

How docker.service start&#xff1f; just by ref 我们先了解docker的各个核心组件的介绍 runc&#xff1a;runc实现了容器的底层功能&#xff0c;例如创建、运行等。runc通过调用内核接口为容器创建和管理cgroup、namespace等Linux内核功能&#xff0c;来实现容器的核心特…

CXXABI_1.3.8 not found

文章首发于 CXXABI_1.3.8 not found 。 当在 CentOS 7 安装 sqlite3 时会遇到 /lib64/libstdc.so.6: version CXXABI_1.3.8 not found 报错的问题&#xff0c;下面罗列出我的解决流程&#xff1a; 查看 libstdc.so.6 包含的 CXXABI 版本 # 查看本地 CXXABI 所有可用版本 str…

Leetcode刷题——二分查找(day1)

题目1 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 示例 1: 输入: nums [-1,0,3,5,9,12], target 9 输出: 4 解释…

PyTorch预训练和微调:以VGG16为例

文章目录 预训练和微调代码测试结果参考来源 预训练和微调代码 数据集&#xff1a;CIFAR10 CIFAR-10数据集由10类32x32的彩色图片组成&#xff0c;一共包含60000张图片&#xff0c;每一类包含6000图片。其中50000张图片作为训练集&#xff0c;10000张图片作为测试集。数据集介…

SolidUI AI生成可视化,0.1.0版本模块划分以及源码讲解

1.背景 随着文本生成图像的语言模型兴起&#xff0c;SolidUI想帮人们快速构建可视化工具&#xff0c;可视化内容包括2D,3D,3D场景&#xff0c;从而快速构三维数据演示场景。SolidUI 是一个创新的项目&#xff0c;旨在将自然语言处理&#xff08;NLP&#xff09;与计算机图形学相…

【微信小程序-uniapp】CustomDialog 居中弹窗组件

1. 效果图 2. 组件完整代码 <template><uni-popup :ref="ref" type="center" @change

Ubuntu下配置Redis哨兵集群

目录 准备实例和配置 启动哨兵集群 测试配置 搭建一个三节点形成的Sentinel集群&#xff0c;来监管Redis主从集群。 三个sentinel哨兵实例信息如下&#xff1a; 节点IPPORTs1192.168.22.13527001s2192.168.22.13527002s3192.168.22.13527003 准备实例和配置 要在同一台虚…

Google Bard 拓展与归纳

导言&#xff1a; Bard&#xff08;谷歌人工智能语言模型“https://bard.google.com”&#xff09;在不断演进和改进中&#xff0c;为用户提供了更丰富、便捷和个性化的服务体验。本文集将深入探索 Bard 在不同方面的关键更新&#xff0c;包括语言支持扩大、图像呈现、交互方式…

组合式API

文章目录 前言了解组合式API简单类型 ref封装对象类型 user.name子组件数组类型 reactive封装 组合式 API 基础练习基础练习优化 前言 Vue 3 的组合式 API&#xff08;Composition API&#xff09;是一组函数和语法糖&#xff0c;用于更灵活和可组合地组织 Vue 组件的代码逻辑…

leetcode 538. 把二叉搜索树转换为累加树

2023.7.16 这道题利用中序遍历&#xff08;右中左&#xff09;的操作不断修改节点的值即刻&#xff0c;直接看代码&#xff1a; class Solution { public:TreeNode* convertBST(TreeNode* root) {stack<TreeNode*> stk;//前面的累加值int pre_value 0;TreeNode* cur r…

review回文子串

给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正着读和反着读都一样的字符串。 class Solution {List<List<String>> lists new ArrayList<>(); // 用于存储所有可能…

【数据挖掘】时间序列教程【二】

2.4 示例:颗粒物浓度 在本章中,我们将使用美国环境保护署的一些空气污染数据作为运行样本。该数据集由 2 年和 5 年空气动力学直径小于或等于 3.2017 \(mu\)g/m\(^2018\) 的颗粒物组成。 我们将特别关注来自两个特定监视器的数据,一个在加利福尼亚州弗雷斯诺,另一个在密…

图片文字对齐 图片文字居中对齐

方法一: 用 vertical-align: middle; <view class="container"><view class="search"><image src="../../images/icon/search.png" alt="" /><text class="tex">搜索</text></view>&…

webSocket前端+webSocket封装

一、websocket基础 /*** 初始化websocket连接*/ function initWebSocket() {let uId 1;var websocket null;if(WebSocket in window) {websocket new WebSocket("ws://localhost:8009/webSocket"uId );//请求的地址} else {alert("该浏览器不支持websocket&…

透彻!127.0.0.1和0.0.0.0之间的区别总算听明白了!

参考视频&#xff1a;透彻&#xff01;127.0.0.1和0.0.0.0之间的区别总算听明白了&#xff01;_哔哩哔哩_bilibili 0.0.0.0不是一个ip地址&#xff0c;而是一个通配符&#xff0c;通配当前主机上面所有的网卡&#xff08;包括虚拟网卡&#xff09;。

深度学习环境安装|PyCharm,Anaconda,PyTorch,CUDA,cuDNN等

本文参考了许多优秀博主的博客&#xff0c;大部分安装步骤可在其他博客中找到&#xff0c;鉴于我本人第一次安装后&#xff0c;时隔半年&#xff0c;我忘记了当时安装的许多细节和版本信息&#xff0c;所以再一次报错时&#xff0c;重装花费了大量时间。因此&#xff0c;我觉得…

全志F1C200S嵌入式驱动开发(解决reboot失败的问题)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 上一次做了rootfs之后,就马不停蹄地测试了几个常用的命令。比如cd、ls、date、time、reboot这样的命令。其他命令测试结果都还好,就是这个reboot命令当死就没有生效,现场的打印结…