Java笔试面试题AI答之正则表达式(2)

news2024/12/24 13:01:08

文章目录

  • 7. 简述Java正则表达式零宽断言 ?
  • 8. 简述Java正则表达式贪婪与懒惰 ?
      • 贪婪匹配(Greedy Matching)
      • 懒惰匹配(Lazy Matching)
      • 区别与应用
      • 示例
  • 9. 简述Java正则表达式POSIX 字符类(仅 US-ASCII)类 ?
  • 10. 简述Java正则表达式引用 ?
      • 1. 捕获组(Capturing Groups)
      • 2. 反向引用(Backreferences)
      • 总结
  • 11. 简述Java正则表达式其他相关类型 ?
      • 1. 字符类(Character Classes)
      • 2. 预定义字符类(Predefined Character Classes)
      • 3. 边界匹配器(Boundary Matchers)
      • 4. 数量词(Quantifiers)
      • 5. 分组和捕获(Grouping and Capturing)
      • 6. 非捕获分组(Non-capturing Groups)
      • 7. 前瞻断言(Lookahead Assertions)
      • 8. 后向引用(Backreferences)
      • 9. 转义字符(Escaping Characters)
  • 12. 简述Java正则表达式基本的使用方法描述 ?
      • 1. 编译正则表达式
      • 2. 创建匹配器
      • 3. 执行匹配操作
      • 4. 替换和分割
      • 5. 捕获分组
      • 总结

7. 简述Java正则表达式零宽断言 ?

Java正则表达式中的零宽断言(Zero-Width Assertions)是一种特殊的正则表达式元素,它们用于匹配字符串中的某个位置,但不消耗(即不占用)任何字符。这意味着,当正则表达式引擎遇到零宽断言时,它会检查断言所指定的条件是否满足,但不会将断言本身作为匹配结果的一部分。因此,零宽断言对于在不需要实际匹配字符的情况下进行条件判断非常有用。

Java正则表达式支持四种类型的零宽断言:

  1. 正向前瞻断言(Positive Lookahead)(?=...)

    • 这种断言用于指定某个模式必须出现在目标字符串的当前位置之后,但不包括该模式本身。例如,\d+(?=\.\d)匹配一个数字序列,该序列后面紧跟着一个点号和另一个数字序列,但不包括点号和后面的数字序列。
  2. 负向前瞻断言(Negative Lookahead)(?!...)

    • 与正向前瞻断言相反,负向前瞻断言用于指定某个模式不能出现在目标字符串的当前位置之后。例如,\d+(?!\.\d)匹配一个数字序列,该序列后面不能紧跟着一个点号和另一个数字序列。
  3. 正向后顾断言(Positive Lookbehind)(?<=...)

    • 这种断言用于指定某个模式必须出现在目标字符串的当前位置之前,但不包括该模式本身。注意,Java的正则表达式引擎直到Java 7才支持正向后顾断言。例如,(?<=\s)\d+匹配前面有空格的一个或多个数字,但不包括前面的空格。
  4. 负向后顾断言(Negative Lookbehind)(?<!...)

    • 与正向后顾断言相反,负向后顾断言用于指定某个模式不能出现在目标字符串的当前位置之前。例如,(?<!\s)\d+匹配前面没有空格的一个或多个数字。

零宽断言在文本处理中非常有用,特别是在需要基于上下文进行匹配但又不想实际匹配这些上下文时。它们允许开发者编写出更加精确和强大的正则表达式,以满足复杂的文本处理需求。然而,由于它们不消耗任何字符,因此在匹配结果中不会显示这些断言本身,这可能会使正则表达式的调试变得更加复杂。

8. 简述Java正则表达式贪婪与懒惰 ?

Java正则表达式中的贪婪(Greedy)与懒惰(Lazy,也称为非贪婪)匹配是两种截然不同的匹配模式,它们决定了正则表达式在匹配文本时如何选择匹配内容的长度。

贪婪匹配(Greedy Matching)

  • 定义:贪婪匹配是正则表达式的默认匹配模式。在这种模式下,正则表达式会尽可能多地匹配输入字符串中的字符,直到无法继续匹配为止。
  • 特点
    • 从输入字符串的起始位置开始,尝试匹配最长的符合正则表达式定义的子串。
    • 如果遇到不符合的部分,会回退并尝试较小的匹配。
    • 例如,正则表达式a.*b在字符串aabab中进行匹配时,会匹配整个aabab,因为.*会尽可能多地匹配字符,直到遇到b为止。

懒惰匹配(Lazy Matching)

  • 定义:懒惰匹配模式下,正则表达式会尽可能少地匹配输入字符串中的字符,只要满足正则表达式即可停止匹配。
  • 特点
    • 匹配过程中,如果遇到符合正则表达式定义的字符,就会立即停止匹配,并尝试继续处理剩余的输入字符串。
    • 要实现懒惰匹配,通常在量词(如*+?)后面加上?
    • 例如,正则表达式a.*?b在字符串aabab中进行匹配时,会匹配到aab,因为.*?会尽可能少地匹配字符,直到遇到第一个b为止。

区别与应用

  • 匹配行为:贪婪匹配倾向于匹配最长的可能字符串,而懒惰匹配则倾向于匹配最短的可能字符串。
  • 应用场景
    • 当需要匹配最长的字符串或者在整个文本中进行匹配时,使用贪婪模式。
    • 当需要匹配最短的字符串或者在特定的上下文中进行匹配时,使用懒惰模式。

示例

String text = "aabab";
// 贪婪匹配
Pattern patternGreedy = Pattern.compile("a.*b");
Matcher matcherGreedy = patternGreedy.matcher(text);
if (matcherGreedy.find()) {
    System.out.println("贪婪匹配结果: " + matcherGreedy.group()); // 输出 aabab
}

// 懒惰匹配
Pattern patternLazy = Pattern.compile("a.*?b");
Matcher matcherLazy = patternLazy.matcher(text);
if (matcherLazy.find()) {
    System.out.println("懒惰匹配结果: " + matcherLazy.group()); // 输出 aab
}

综上所述,贪婪匹配和懒惰匹配是Java正则表达式中重要的概念,它们根据实际需求提供了不同的匹配策略。理解这两种匹配模式对于编写高效、准确的正则表达式至关重要。

9. 简述Java正则表达式POSIX 字符类(仅 US-ASCII)类 ?

Java正则表达式中的POSIX字符类(Portable Operating System Interface for uniX,可移植操作系统接口)主要用于匹配符合POSIX标准的字符集,但这些字符类在Java中主要用于匹配US-ASCII字符集中的字符。需要注意的是,Java正则表达式引擎默认支持Unicode字符集,但POSIX字符类提供了一种使用US-ASCII字符集的方式,这在处理特定需求时可能很有用。

以下是一些常用的POSIX字符类(仅US-ASCII):

  1. [:alnum:]:匹配任意字母或数字字符,等价于[a-zA-Z0-9](在US-ASCII范围内)。

  2. [:alpha:]:匹配任意字母字符,无论是大写还是小写,等价于[a-zA-Z](在US-ASCII范围内)。

  3. [:blank:]:匹配空格或制表符字符,这通常等价于[ \t](但请注意,具体实现可能因正则表达式引擎而异)。在Java中,可能需要使用\s来匹配包括空格、制表符、换行符等在内的所有空白字符,因为[:blank:]的准确行为可能不被所有Java正则表达式实现直接支持。

  4. [:digit:]:匹配任意数字字符,等价于[0-9](在US-ASCII范围内)。这与Java中的\d预定义字符类相同。

  5. [:lower:]:匹配任意小写字母字符,等价于[a-z](在US-ASCII范围内)。

  6. [:upper:]:匹配任意大写字母字符,等价于[A-Z](在US-ASCII范围内)。

  7. [:space:]:匹配任意空白字符,包括空格、制表符、换行符等。在Java中,这通常可以通过\s预定义字符类来实现,但[:space:]在POSIX上下文中具有类似的意图。

  8. [:cntrl:]:匹配任何控制字符,这些字符在US-ASCII中有特定的用途,如换行符(\n)、回车符(\r)等。等价于[\x00-\x1F\x7F](在US-ASCII范围内)。

  9. [:punct:]:匹配任何标点符号字符,这些字符在US-ASCII中用于标点符号,如逗号(,)、句号(.)等。但请注意,Java中没有直接等价于[:punct:]的预定义字符类,你可能需要使用字符类表达式来定义这些字符。

  10. [:xdigit:]:匹配任何十六进制数字字符,等价于[0-9a-fA-F](在US-ASCII范围内)。这在处理十六进制数时非常有用。

需要注意的是,虽然Java正则表达式引擎支持使用这些POSIX字符类,但在实际使用中,你可能需要根据你的具体需求和Java环境的支持情况来选择是否使用它们。此外,由于Java默认支持Unicode字符集,因此在处理非ASCII字符时,你可能需要使用Unicode相关的正则表达式特性。

最后,要强调的是,由于正则表达式的实现可能因不同的编程语言、库或环境而异,因此上述信息是基于Java的通用情况提供的。在具体使用时,建议查阅Java文档或相关资源以获取最准确的信息。

10. 简述Java正则表达式引用 ?

Java正则表达式中的引用主要涉及到对之前匹配到的内容的再次使用或引用,这主要通过捕获组和反向引用来实现。下面将分别简述这两个概念:

1. 捕获组(Capturing Groups)

捕获组是通过在正则表达式中使用圆括号()将一部分模式包围起来形成的。当一个正则表达式匹配成功时,每个捕获组都会捕获到一部分输入字符串,这些捕获的内容可以在后续的匹配或替换操作中被引用。

  • 作用:捕获组的主要作用是提取或引用输入字符串中符合特定模式的子串。
  • 示例:假设有一个正则表达式(\d{3})-(\d{4}),用于匹配美国电话号码的格式(如123-4567)。这里,(\d{3})(\d{4})就是两个捕获组,分别匹配电话号码的区号和号码部分。

2. 反向引用(Backreferences)

反向引用用于在正则表达式中引用之前捕获组匹配到的内容。在正则表达式中,反向引用通过\n的形式表示,其中n是捕获组的编号(从1开始)。

  • 作用:反向引用的主要作用是确保某部分内容与之前捕获组匹配到的内容相同,从而实现对复杂模式的匹配。
  • 示例:假设要匹配一个字符串,其中包含两个相同的单词,如"hello hello"。可以使用正则表达式(\b\w+\b) \1来实现,这里的\1就是对第一个捕获组(\b\w+\b)匹配到的内容的反向引用。

总结

Java正则表达式中的引用通过捕获组和反向引用来实现,捕获组用于提取输入字符串中符合特定模式的子串,而反向引用则用于在后续的正则表达式中引用这些捕获到的内容。这种机制使得正则表达式能够处理更加复杂和灵活的文本匹配问题。

需要注意的是,正则表达式的语法和功能非常丰富,除了捕获组和反向引用外,还包括字符类、预定义字符集、边界匹配器、量词等多种元素,这些元素可以组合使用,以构建出强大的文本处理工具。因此,在使用正则表达式时,建议深入了解其语法和特性,以便更好地发挥其作用。

11. 简述Java正则表达式其他相关类型 ?

Java正则表达式是一个功能强大的工具,用于匹配、查找和替换字符串中的文本。除了反义类(Negated Character Classes)之外,Java正则表达式还包含多种其他相关类型,这些类型共同构成了正则表达式的丰富语法。以下是一些Java正则表达式中常见的其他相关类型:

1. 字符类(Character Classes)

字符类用于匹配一组字符中的任意一个字符。在方括号[]内定义字符类。例如,[abc]匹配abc中的任意一个字符。

2. 预定义字符类(Predefined Character Classes)

Java正则表达式提供了一些预定义的字符类,用于匹配常见的字符集合。例如:

  • \d:匹配一个数字字符,等价于[0-9]
  • \D:匹配一个非数字字符,等价于[^0-9]
  • \w:匹配包括下划线的任何字母、数字或下划线字符,等价于[A-Za-z0-9_]
  • \W:匹配任何非单词字符,等价于[^A-Za-z0-9_]
  • \s:匹配任何空白字符,包括空格、制表符、换行符等,等价于[\f\n\r\t\v]
  • \S:匹配任何非空白字符,等价于[^\f\n\r\t\v]

3. 边界匹配器(Boundary Matchers)

边界匹配器用于定义字符串或单词的边界。例如:

  • ^:匹配输入字符串的开始位置。
  • $:匹配输入字符串的结束位置。
  • \b:匹配一个单词边界,即单词字符和非单词字符之间的位置。
  • \B:匹配非单词边界。

4. 数量词(Quantifiers)

数量词用于指定前面字符或字符类出现的次数。例如:

  • *:匹配前面的子表达式零次或多次。
  • +:匹配前面的子表达式一次或多次。
  • ?:匹配前面的子表达式零次或一次。
  • {n}n是一个非负整数,匹配前面的子表达式恰好n次。
  • {n,}n是一个非负整数,匹配前面的子表达式至少n次。
  • {n,m}nm都是非负整数,其中n <= m,匹配前面的子表达式nm次。

5. 分组和捕获(Grouping and Capturing)

分组使用圆括号()进行,它可以将正则表达式的一部分组合成一个整体,以便进行整体匹配或后续引用。捕获组是带有编号的,可以通过编号在后续的正则表达式操作(如替换操作)中引用匹配到的内容。

6. 非捕获分组(Non-capturing Groups)

非捕获分组使用(?:...)语法,它允许将一组字符组合成一个整体进行匹配,但不会捕获匹配的内容,也不会占用捕获组的编号。

7. 前瞻断言(Lookahead Assertions)

前瞻断言是一种零宽断言,它用于指定某个位置应该满足一定的条件,但不消耗(即不移动)字符串中的字符。前瞻断言分为正向前瞻断言((?=...))和负向前瞻断言((?!...)),分别用于指定某个位置后面应该或不应该出现的字符。

8. 后向引用(Backreferences)

后向引用使用\n(其中n是一个正整数)语法,它允许在正则表达式中引用前面捕获组匹配到的内容。这对于匹配重复出现的相同子字符串或进行复杂的字符串验证非常有用。

9. 转义字符(Escaping Characters)

在正则表达式中,某些字符具有特殊含义,如.*?+等。为了匹配这些特殊字符本身,需要使用反斜杠\进行转义。例如,要匹配点字符.,需要使用\.

综上所述,Java正则表达式通过字符类、预定义字符类、边界匹配器、数量词、分组和捕获、非捕获分组、前瞻断言、后向引用以及转义字符等多种类型,提供了强大的文本匹配和处理能力。

12. 简述Java正则表达式基本的使用方法描述 ?

Java中使用正则表达式主要通过java.util.regex包下的PatternMatcher两个类来实现。这个包为Java应用程序提供了对正则表达式的支持。下面简述Java正则表达式的基本使用方法:

1. 编译正则表达式

首先,需要将一个字符串形式的正则表达式编译成Pattern对象。这一步是可选的,因为Pattern类和Matcher类都提供了可以直接处理字符串正则表达式的方法,但编译正则表达式可以提高效率,特别是在需要多次匹配同一个正则表达式时。

Pattern pattern = Pattern.compile("\\d+"); // 编译正则表达式,匹配一个或多个数字

2. 创建匹配器

然后,使用编译好的Pattern对象(或直接使用字符串正则表达式)和要匹配的字符串创建一个Matcher对象。

String input = "abc123def456";
Matcher matcher = pattern.matcher(input); // 使用Pattern对象创建Matcher对象
// 或者
// Matcher matcher = Pattern.compile("\\d+").matcher(input); // 直接使用字符串正则表达式

3. 执行匹配操作

有了Matcher对象后,就可以使用它的方法来执行匹配操作了。常用的方法有:

  • find():尝试查找与该模式匹配的下一个子序列。
  • matches():尝试将整个区域与模式匹配。
  • lookingAt():尝试将输入序列从头开始与模式匹配。
while (matcher.find()) {
    // 找到了匹配项,可以执行相关操作
    System.out.println("Found: " + matcher.group()); // 打印匹配到的子序列
}

// 或者检查整个字符串是否匹配
if (matcher.matches()) {
    System.out.println("整个字符串匹配成功!");
}

// 或者检查字符串的开头是否匹配
if (matcher.lookingAt()) {
    System.out.println("字符串开头匹配成功!");
}

4. 替换和分割

虽然PatternMatcher类主要用于匹配操作,但Java还提供了String类的replaceAll(String regex, String replacement)replaceFirst(String regex, String replacement)split(String regex)等方法,这些方法允许直接使用正则表达式进行字符串的替换和分割操作。

String replaced = input.replaceAll("\\d+", "NUMBER"); // 将所有数字替换为"NUMBER"
String[] parts = input.split("\\d+"); // 使用数字作为分隔符分割字符串

5. 捕获分组

在正则表达式中使用圆括号()可以定义捕获分组,捕获分组可以捕获与之匹配的文本,并可以通过Matcher对象的group(int group)group(String name)(如果命名了捕获组)方法来引用这些捕获的文本。

Pattern patternWithGroups = Pattern.compile("(\\d{3})-(\\d{4})");
Matcher matcherWithGroups = patternWithGroups.matcher("123-4567");
if (matcherWithGroups.find()) {
    String areaCode = matcherWithGroups.group(1); // 捕获组1:区号
    String phoneNumber = matcherWithGroups.group(2); // 捕获组2:电话号码
}

总结

以上就是Java正则表达式基本的使用方法描述,包括编译正则表达式、创建匹配器、执行匹配操作、替换和分割字符串,以及使用捕获分组。通过熟练掌握这些基本用法,你可以灵活地在Java应用程序中使用正则表达式来处理字符串。

答案来自文心一言,仅供参考

在这里插入图片描述

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

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

相关文章

docker安装prometheus、grafana监控SpringBoot

1. 概述 最新有一个需求&#xff0c; 需要安装一个监控软件&#xff0c;对SpringBoot程序进行监控&#xff0c; 包括机器上cpu, 内存&#xff0c;jvm以及一些日志的统计。 这里需要介绍两款软件&#xff1a; prometheus 和 grafana prometheus: 中文名称&#xff0c; 普罗米…

OpenCV 与 Matplotlib 的结合使用:探索有趣的图像处理与可视化功能

本文将讲述&#xff0c;将 OpenCV 与 Matplotlib 相结合&#xff0c;可以充分利用两者的优势&#xff0c;实现丰富多彩的图像处理和数据可视化功能。本文将介绍几种有趣且实用的结合应用&#xff0c;并通过示例代码展示具体实现方式。在今后的博客中会扩展下面的十个基础实现以…

宝贝甜梦秘籍!康姿百德柔压磁性枕豪华款守护成长每一夜

科学护航童年梦&#xff01;康姿百德豪华柔压磁性枕&#xff0c;给孩子五星级的睡眠享受 孩子的成长过程中&#xff0c;良好的睡眠环境至关重要。而康姿百德柔压磁性枕&#xff08;豪华款&#xff09;&#xff0c;凭借其独特的设计和材料&#xff0c;成为了孩子成长过程中不可…

乐凡三防平板高性能为稳定运行保驾护航

随着科技进步的浪潮&#xff0c;三防工业平板电脑在自动化生产、设备监控及数据收集等场景中日益彰显其关键作用。但在特定环境&#xff0c;比如户外探险、紧急救援或电力供应不稳定的场合&#xff0c;维持设备的持续运行成为了一大挑战。因此&#xff0c;开发一款配备可更换电…

运动耳机怎么选购?解密最值得购买的五大品牌!

​到了2024年&#xff0c;开放式耳机已经成为耳机界的大热门。它们的好处是&#xff0c;既能让你听得健康&#xff0c;戴着又舒服&#xff0c;还能一边听歌一边留意周围的声音&#xff0c;这对于喜欢户外活动的人来说&#xff0c;能提高安全意识&#xff0c;是个很好的优势。作…

GaussDB关键技术原理:高弹性(三)

书接上文GaussDB关键技术原理&#xff1a;高弹性&#xff08;二&#xff09;从优化器剪枝、执行器两方面对hashbucket进行了解读&#xff0c;本篇将从段页式技术方面继续介绍GaussDB高弹性技术。 3 段页式 3.1 段页式存储 根据前文的介绍&#xff0c;hashbucket需要对文…

数据库审计是什么?主要用在哪些场景呢?

数据库审计是什么&#xff1f;主要用在哪些场景呢&#xff1f; 数据库审计 数据库审计是指对数据库系统中的操作进行记录、监控和分析的过程&#xff0c;用于检查和评估数据库的安全性、合规性和完整性。数据库审计可以为组织提供重要的安全保障和合规性需求的满足。本文将介…

嵌入式24千兆电口+4万兆光口管理型三层交换机RTL9301模块

核心模块概述: 嵌入式RTL9301模块可以支持4口万兆上联24口千兆三层管理型以太网交换机&#xff0c;也就是最多可以提供24个10/100/1000自适应电口、4个10 Gb SFP 端口、1个console口、1个USB串口。 完善的安全控制策略及CPU保护策略(CPU protect policy)提高容错能力&#xff0…

LLM大模型学习:LLM常见问题(思维链部分)

1. 什么是思维链提示&#xff1f; 思维链(Chain-of-thought&#xff0c;CoT)&#xff0c;指的是一系列有逻辑关系的思考步骤&#xff0c;形成一个完整的思考过程。人在日常生活中&#xff0c;随时随地都会用思维链来解决问题&#xff0c;比如工作、读书经常用到的思维导图&…

【git】git安装方法

1 Git 的下载 这个就需要去 Git 官网下载对应系统的软件了&#xff0c;下载地址为 git-scm.com或者gitforwindows.org&#xff0c;或者阿里镜像&#xff08;感谢评论区的星悸迷航同学&#xff09; 上面的 git-scm 是 Git 的官方&#xff0c;里面有不同系统不同平台的安装包和…

Nhanes数据(复杂调查数据)绘制限制立方样条(rcs)函数svyggrcs1.8尝鲜版发布

临床上&#xff0c;因变量和临床的结局有时候不是线性关系&#xff0c;而回归模型有一个重要的假设就是自变量和因变量呈线性关联&#xff0c;因此非线性关系模型用回归分析来拟合受到限制。因此&#xff0c;一个更好的解决方法是拟合自变量与因变量之间的非线性关系&#xff0…

智慧公厕:城市公共卫生管理的新篇章‌@卓振思众

在快节奏的现代生活中&#xff0c;公共厕所作为城市基础设施的重要组成部分&#xff0c;其使用体验和管理效率直接影响着市民的生活质量与城市形象。随着科技的飞速发展&#xff0c;智慧公厕应运而生&#xff0c;它以一种全新的姿态&#xff0c;为城市公共卫生管理带来了前所未…

【吊打面试官系列-Redis面试题】Pipeline 有什么好处,为什么要用 pipeline?

大家好&#xff0c;我是锋哥。今天分享关于 【Pipeline 有什么好处&#xff0c;为什么要用 pipeline&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; Pipeline 有什么好处&#xff0c;为什么要用 pipeline&#xff1f; 1000道 互联网大厂Java工程师 精选面试题…

ABAP 报错 提示 Use the associated entity XXX

警告&#xff0c;我们可以忽略&#xff0c;但是报错了&#xff0c;却不知道怎么改&#xff1f; 后面发现是 在ABAP里面 对CDS的字段做 substring 或者concat是不允许的

常见加解密算法06 - 分组密码的填充与工作模式

各位英姿焕发&#xff0c;风华正茂的读者们你们好啊&#xff0c;今天我们讨论一下分组密码的填充与工作模式。 分组密码中&#xff0c;需要将明文按指定大小进行分组&#xff0c;由于明文并非指定大小的整数倍&#xff0c;因此在明文的最后一个分组需要将其填充至加密算法所要…

向 ADC 模型和 DAC 建模添加低通滤波器

与单音测试信号相比&#xff0c;双音测试信号可提供更多有关 ADC 性能的信息。您的作者的模型与特定 ADC 的制造商模型非常匹配&#xff0c;因此可以方便地运行误码率模拟。该 ADC 恰好具有非常宽的输入带宽。 对于带宽较低的 ADC&#xff0c;添加如图 1 所示的低通滤波器将提…

[SUCTF 2018]annonymous1

知识点&#xff1a; 匿名函数创建其实有自己的名字&#xff08;%00lambda_%d&#xff09; 进入页面开始代码审计. <?php // 使用 create_function 创建一个匿名函数&#xff0c;该函数调用 die() 函数并执行 cat flag.php 命令&#xff08;在服务器上执行&#xff0c;如果…

BFF层聚合查询服务异步改造及治理实践

首先感谢王晓老师的[ 接口优化的常见方案实战总结]一文总结&#xff0c;恰巧最近在对稳健理财BFF层聚合查询服务优化治理&#xff0c;针对文章内的串行改并行章节进行展开&#xff0c;分享下实践经验&#xff0c;主要涉及原同步改异步的过程、全异步化后衍生的问题以及治理方面…

实训day42(9.3)

⼀、编排分类 单机容器编排: docker-compose 容器集群编排: docker swarm、mesosmarathon、kubernetes 应⽤编排: ansible(模块&#xff0c;剧本&#xff0c;⻆⾊) ⼆、系统管理进化史 1. 传统部署时代 早期&#xff0c;各个组织是在物理服务器上运⾏应⽤程序。 由于⽆法限…

Mac搭建音视频开发环境

1.安装软件 打开终端&#xff0c;依次输入如下命令&#xff1a; brew install ffmpeg brew install qt brew install --cask qt-creator 2.配置qt 打开Qt Creator&#xff0c;在首选项—>Qt版本设置qt路径 3.设置默认Kits 3.创建项目 输入项目名称和存放目录&#xff0c…