Lambda表达式保姆级教程详解(二)

本系列文章简介:

        Lambda表达式在现代编程语言中越来越流行,如Java、Python等。它是一种简洁、灵活的编码方式,能够使代码更易读、更易编写,同时提高代码的可维护性和扩展性

        Lambda表达式的引入使得函数式编程思想在传统的面向对象编程语言中得以实现。它可以替代一些繁琐的代码结构,如匿名内部类,使得函数式编程变得更加简单和直观。

        Lambda表达式的基本语法为:参数列表 -> 表达式或代码块。其中,参数列表指定了Lambda表达式所需要的参数,箭头->之后是表达式或代码块,用于执行具体的操作。

        Lambda表达式可以用作函数的参数、返回值或赋值给一个变量。它可以代替一些常见的函数式编程操作,如过滤、映射、归约等,使得代码更加简洁和易读。

        在本系列文章中,我们将详细介绍Lambda表达式的使用方法和常见的应用场景。我们会通过一些具体的例子来演示Lambda表达式的用法,并解释其中的原理和细节。无论你是初学者还是有一定经验的开发者,我相信本教程都能帮助你更好地理解和应用Lambda表达式。

        让我们一起开始Lambda表达式的探索之旅吧!

        欢迎大家订阅《Java技术栈高级攻略》专栏,一起学习,一起涨分!

目录

1、前言

2、Lambda表达式的高级技巧

2.1 方法引用

2.2 局部变量和闭包

2.3 构造函数引用

2.4 自定义函数式接口

3、Lambda表达式的注意事项和常见问题

3.1 Lambda表达式的性能考虑

3.2 Lambda表达式的代码风格和规范

3.3 Lambda表达式的调试和异常处理

4、案例分析:使用Lambda表达式实现常见编程任务

4.1 使用Lambda表达式进行字符串操作

4.2 使用Lambda表达式实现算法和数据处理

4.3 使用Lambda表达式简化事件驱动编程

5、Lambda表达式的未来发展和应用前景

5.1 Lambda表达式在各种编程语言中的应用情况

5.2 Lambda表达式在大数据和人工智能领域的应用

5.3 Lambda表达式对编程思维和软件开发方式的影响

6、结语


1、前言

        Lambda表达式是一种强大而灵活的编程工具,它可以帮助开发者简化代码、提高代码的可读性和可维护性。它是函数式编程的核心概念之一,可以在多种编程语言中使用。

        本文将跟随《Lambda表达式保姆级教程详解(一)》的进度,继续介绍Lambda表达式。希望通过本系列文章的学习,您将能够更好地理解Lambda表达式的内部工作原理,掌握Lambda表达式的使用技巧,以及通过合理的设计完成最佳实践,充分发挥优化Lambda表达式的潜力,为系统的高效运行提供有力保障。

2、Lambda表达式的高级技巧

2.1 方法引用

方法引用是Lambda表达式的一种特殊用法,可以直接引用已有的方法来实现函数接口的方法。

方法引用可以通过以下四种形式来表示:

  1. 静态方法的引用:ClassName::staticMethodName 例如:Math::max

  2. 实例方法的引用:instanceName::instanceMethodName 例如:String::length

  3. 对象方法的引用:ClassName::instanceMethodName 例如:ArrayList::size

  4. 构造方法的引用:ClassName::new 例如:ArrayList::new

方法引用的作用是简化Lambda表达式的写法,使代码更加简洁易读。它只能用于函数接口的实现,即该接口只有一个抽象方法。当Lambda表达式仅仅调用一个已有的方法时,可以使用方法引用来代替Lambda表达式。

2.2 局部变量和闭包

Lambda表达式可以引用在其外部作用域中定义的局部变量。这些被引用的局部变量必须是final或者实际上是final(即不会被修改)。

Lambda表达式中的局部变量被存储在堆上,而不是存储在栈上。这样做是为了使Lambda表达式在其声明之后仍然可以访问局部变量。

当一个Lambda表达式引用一个局部变量时,实际上是创建了一个该变量的副本。这个副本被存储在Lambda表达式的实例中,并且在Lambda表达式的生命周期内保持不变。

这种机制被称为闭包。闭包是一个函数和其相关环境的组合,其中环境包含了函数引用的外部变量的值。在Lambda表达式中,闭包允许Lambda访问其外部环境中的变量,并且当这些变量的值发生变化时,Lambda表达式也会反映这些变化。

请注意,Lambda表达式中引用的局部变量必须是effectively final(实际上是final)。这意味着它们不能被重新赋值,否则会导致编译错误。

2.3 构造函数引用

使用Lambda表达式的构造函数引用可以将构造函数作为Lambda表达式的参数传递。构造函数引用的语法是类名::new,其中类名是要引用的构造函数所属的类的名称。构造函数引用可以用来创建该类的新实例。

以下是一些示例:

        1. 使用构造函数引用创建一个ArrayList的实例:

List<String> list = Stream.of("a", "b", "c").collect(Collectors.toCollection(ArrayList::new));

这里,ArrayList::new表示引用了ArrayList类的默认构造函数,用来创建一个新的ArrayList实例。

        2.使用构造函数引用创建一个Person对象的列表:

List<Person> persons = Stream.of("John", "Sarah", "Mike").map(Person::new).collect(Collectors.toList());

这里,Person::new表示引用了Person类的构造函数,使用Stream中的每个元素作为参数,创建一个新的Person对象。

需要注意的是,使用构造函数引用时,被引用的构造函数必须与Lambda表达式的参数列表匹配。

2.4 自定义函数式接口

在java中,Lambda表达式可以用来创建匿名函数,用于简化代码的编写。Lambda表达式可以被赋值给一个变量,或者使用在函数式接口中。

函数式接口是一个只有一个抽象方法的接口,可以用Lambda表达式来实现该接口中的抽象方法。Java中提供了一些内置的函数式接口,比如RunnableComparator等。

除了使用Java内置的函数式接口外,我们也可以自定义函数式接口。自定义函数式接口需要满足的条件是只有一个抽象方法,可以使用@FunctionalInterface注解来标记。

以下是一个自定义的函数式接口的例子:

@FunctionalInterface
interface MyFunction {void doSomething();
}public class Main {public static void main(String[] args) {MyFunction myFunction = () -> {// 执行一些操作System.out.println("Do something");};myFunction.doSomething();}
}

在上面的例子中,我们定义了一个MyFunction接口,它只有一个doSomething方法。在main方法中,我们使用Lambda表达式创建了一个MyFunction的实例,并调用了doSomething方法。

自定义函数式接口可以根据实际需求定义不同的抽象方法,以满足不同的场景。通过使用Lambda表达式和自定义函数式接口,可以使代码更加简洁和灵活。

3、Lambda表达式的注意事项和常见问题

3.1 Lambda表达式的性能考虑

Lambda表达式的性能主要取决于以下几个方面:

  1. 启动开销:由于Lambda表达式的执行需要创建一个匿名类,所以在执行时会有一定的启动开销。这种启动开销尤其在短小的Lambda表达式中更加明显。

  2. 内存开销:Lambda表达式在执行时需要在堆上分配内存来存储其实例。对于频繁执行的Lambda表达式,内存开销可能会对性能产生影响。

  3. 上下文切换:Lambda表达式通常会在多个线程之间进行传递或执行。在这种情况下,由于线程切换的开销,Lambda表达式的性能可能会受到影响。

  4. 垃圾回收:因为Lambda表达式创建的匿名类实例会在执行完成后成为垃圾对象,所以垃圾回收的开销也会对Lambda表达式的性能产生影响。

针对上述性能问题,可以采取一些优化措施来提高Lambda表达式的性能,例如:

  1. 对于短小的Lambda表达式,可以考虑使用方法引用来代替Lambda表达式,从而减少启动开销。

  2. 对于频繁执行的Lambda表达式,可以考虑缓存Lambda实例,避免重复创建,从而减少内存开销。

  3. 在使用多线程执行Lambda表达式时,可以合理管理线程池的大小,避免过多的线程切换。

  4. 在内存管理方面,可以考虑使用对象池或者缓存技术来减少垃圾回收的频率,从而提高性能。

需要注意的是,Lambda表达式的性能优化应该基于具体的应用场景和需求进行评估和实施,因为不同的应用场景可能会有不同的性能瓶颈和优化策略。

3.2 Lambda表达式的代码风格和规范

在使用Lambda表达式时,可以遵循以下代码风格和规范:

  1. 使用简洁的形参命名:Lambda表达式中的形参命名应该尽量简洁、清晰,能够准确描述形参的作用。

  2. 使用大括号:如果Lambda表达式的主体包含多行代码,应该使用大括号将其括起来,以提高可读性。

  3. 使用类型推断:在Lambda表达式中,可以使用类型推断来省略形参的类型声明,让代码更加简洁。例如:(x, y) -> x + y

  4. 避免过多的嵌套:Lambda表达式可以嵌套使用,但应该避免过多的嵌套,以免使代码难以理解和维护。

  5. 使用一致的缩进:在Lambda表达式中,应该使用一致的缩进方式,以增加代码的可读性。

  6. 使用Lambda表达式时要注意上下文:Lambda表达式可以访问外部变量,但要注意外部变量的作用范围和生命周期。

  7. 避免过长的Lambda表达式:如果Lambda表达式过长,可以考虑将其拆分为多个方法或使用方法引用来简化代码。

  8. 使用合适的函数接口:Lambda表达式应该使用合适的函数接口,以确保Lambda表达式的形参和返回值类型与函数接口的定义一致。

  9. 注释Lambda表达式:对于复杂的Lambda表达式,应该使用注释来解释其含义和作用,以增加代码的可读性。

  10. 使用Lambda表达式时要注意性能:Lambda表达式的执行效率可能会受到影响,应该在需要性能优化的情况下使用其他方式来替代Lambda表达式。

总的来说,Lambda表达式的代码风格和规范应该注重简洁、可读性和易于理解和维护。根据具体的业务需求和团队的编码规范,可以灵活使用Lambda表达式来提高代码的可读性和编写效率。

3.3 Lambda表达式的调试和异常处理

Lambda表达式的调试和异常处理可以通过以下方法来完成:

  1. 使用日志记录来调试:可以在Lambda表达式中使用日志记录工具(例如log4j或slf4j)来记录日志消息。这样,在出现错误或异常时,可以查看日志来定位问题。

  2. 使用try-catch块来处理异常:可以在Lambda表达式中使用try-catch块来捕获异常并进行相应的处理。例如,可以在Lambda表达式中使用try-catch块来捕获可能发生的异常,并在捕获到异常时执行一些特定的操作。

  3. 使用Optional对象来处理可能发生的异常:可以在Lambda表达式中使用Optional对象来包装可能发生的异常。这样,在调用Lambda表达式时,可以使用Optional的方法来处理异常情况,并返回某个默认值或执行其他操作。

  4. 使用断言来验证输入参数:可以在Lambda表达式中使用断言来验证输入参数是否满足某些条件。这样,在调用Lambda表达式之前,可以通过断言来检查输入参数,确保它们的有效性。

总的来说,Lambda表达式的调试和异常处理与传统的方法类似,可以使用日志记录、try-catch块、Optional对象和断言等技术来实现。

4、案例分析:使用Lambda表达式实现常见编程任务

4.1 使用Lambda表达式进行字符串操作

Lambda表达式是一种用于创建匿名函数的一种简洁语法。字符串操作可以使用Lambda表达式进行处理,例如:

        1.字符串拼接:

string1 = "Hello"
string2 = "World"
result = lambda x, y: x + y
print(result(string1, string2))   # 输出:HelloWorld

        2.字符串切割:

string = "Hello World"
result = lambda x: x.split()
print(result(string))   # 输出:['Hello', 'World']

        3.字符串替换:

string = "Hello World"
result = lambda x, y, z: x.replace(y, z)
print(result(string, "World", "Python"))   # 输出:Hello Python

使用Lambda表达式可以更加简洁地处理字符串操作,适用于需要一次性使用的简单操作。

4.2 使用Lambda表达式实现算法和数据处理

Lambda表达式是一种匿名函数,可以方便地在代码中实现算法和数据处理。下面是一些常见的使用Lambda表达式实现算法和数据处理的示例:

        1.使用Lambda表达式对列表进行筛选:

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)  # 输出 [2, 4, 6, 8, 10]

        2.使用Lambda表达式对列表进行映射:

numbers = [1, 2, 3, 4, 5]
squared_numbers = list(map(lambda x: x**2, numbers))
print(squared_numbers)  # 输出 [1, 4, 9, 16, 25]

        3.使用Lambda表达式对列表进行排序:

students = [{'name': 'Alice', 'score': 90},{'name': 'Bob', 'score': 80},{'name': 'Charlie', 'score': 95}
]
students.sort(key=lambda x: x['score'])
print(students)  # 输出 [{'name': 'Bob', 'score': 80}, {'name': 'Alice', 'score': 90}, {'name': 'Charlie', 'score': 95}]

        4.使用Lambda表达式进行函数式编程:

from functools import reducenumbers = [1, 2, 3, 4, 5]
result = reduce(lambda x, y: x + y, numbers)
print(result)  # 输出 15

这些示例展示了不同情况下使用Lambda表达式进行算法和数据处理的方式。Lambda表达式可以在一行代码中完成简单的函数实现,减少了代码的冗余,让代码更简洁、易读。

4.3 使用Lambda表达式简化事件驱动编程

在Java中,Lambda表达式可以简化事件驱动编程。在传统的事件驱动编程中,需要定义一个接口或者类来实现事件监听器,并实现相应的方法来处理事件。

使用Lambda表达式可以更简洁地定义事件监听器,而不需要显式地创建一个实现类。下面是一个使用Lambda表达式简化事件驱动编程的例子:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class LambdaEventExample {public static void main(String[] args) {JFrame frame = new JFrame("Lambda Event Example");JButton button = new JButton("Click me!");// 使用Lambda表达式定义事件监听器button.addActionListener(e -> {System.out.println("Button clicked!");});frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.getContentPane().add(button, BorderLayout.CENTER);frame.pack();frame.setVisible(true);}
}

在上面的示例中,我们创建了一个简单的窗口应用程序,包含一个按钮。使用Lambda表达式来定义了按钮的点击事件监听器。当按钮被点击时,Lambda表达式中的代码会被执行。

Lambda表达式的语法是参数 -> 表达式,其中参数是事件对象,表达式是实际处理事件的代码。

使用Lambda表达式可以减少代码量,使代码更加简洁和易读。并且,Lambda表达式还支持函数式编程的特性,例如使用Stream API来处理集合数据等。这使得使用Lambda表达式可以更方便地进行事件驱动编程。

5、Lambda表达式的未来发展和应用前景

5.1 Lambda表达式在各种编程语言中的应用情况

Lambda表达式是一种匿名函数,可以在需要函数作为参数的地方进行简洁的函数定义。Lambda表达式在许多编程语言中都得到了广泛的应用。

  1. Java:Lambda表达式是Java 8引入的一个重要特性,使得代码更加简洁和易读。它可以与函数接口(Functional Interface)一起使用,用于处理集合、并行计算、事件处理等场景。

  2. Python:Python是一种支持Lambda表达式的脚本语言。它可以用于函数式编程、高阶函数和匿名函数等场景。Lambda表达式在Python中通常与map、filter、reduce等高阶函数一起使用。

  3. C#:C#从C# 3.0开始支持Lambda表达式。它可以用于LINQ(Language Integrated Query)查询和集合操作,以及事件处理等场景。

  4. JavaScript:JavaScript是一种支持函数式编程的脚本语言,Lambda表达式在其中被称为箭头函数。它可以用于数组操作、事件处理、回调函数等场景。

  5. Ruby:Ruby是一种面向对象的动态语言,它也支持Lambda表达式。Lambda表达式在Ruby中通常与块(block)一起使用,用于迭代、集合处理等场景。

  6. Kotlin:Kotlin是一种在Java虚拟机上运行的静态类型编程语言,它从语言层面支持Lambda表达式。Kotlin的Lambda表达式可以用于函数式编程、集合操作和事件处理等场景。

总而言之,Lambda表达式在各种编程语言中都得到了广泛的应用,它可以使代码更加简洁和易读,并提供了更高级的编程抽象和功能。

5.2 Lambda表达式在大数据和人工智能领域的应用

在大数据和人工智能领域中,Lambda表达式具有广泛的应用。下面是一些例子:

  1. 数据处理:在大数据环境下,经常需要对大量的数据进行处理和分析。Lambda表达式可以用来编写数据处理的函数,比如对数据进行过滤、排序、转换等操作。Lambda表达式的简洁和灵活性使得我们能够更方便地对大量数据进行处理。

  2. 并行计算:在大数据和人工智能任务中,往往需要对大量的数据进行并行计算。Lambda表达式可以与并行计算框架(如Apache Spark)结合使用,使得并行计算的编码更加简单和易读。通过使用Lambda表达式,我们可以将复杂的并行计算任务分解为多个小任务,并且方便地进行任务之间的通信和同步。

  3. 机器学习:在机器学习领域,Lambda表达式可以用来定义模型的损失函数、评估指标等。Lambda表达式的简洁性使得我们能够更方便地定义和优化机器学习模型。此外,Lambda表达式还可以用于定义模型的激活函数、优化算法等。

  4. 数据流处理:在大数据流处理中,Lambda表达式可以用来定义流处理器(如Apache Flink)的数据处理逻辑。Lambda表达式可以方便地定义数据转换、过滤、聚合等操作,从而实现实时的数据分析和处理。

总之,Lambda表达式在大数据和人工智能领域中具有广泛的应用。它的简洁和灵活性使得我们能够更方便地编写并行计算、数据处理、机器学习等任务,并且提高了代码的可读性和可维护性。

5.3 Lambda表达式对编程思维和软件开发方式的影响

Lambda表达式是函数式编程中的一个重要概念,它对编程思维和软件开发方式有着深远的影响。

首先,Lambda表达式使得编程更加简洁和灵活。传统的编程方式中,需要定义一个完整的函数,包括函数名、参数列表、返回值等。而使用Lambda表达式可以将一个函数作为参数传递给另一个函数或方法,避免了定义额外的函数和方法。这样不仅可以减少代码量,还可以使代码更加直观和易读。

其次,Lambda表达式使得函数可以作为一等公民来处理。传统的编程方式中,函数只能作为方法的一部分使用,而Lambda表达式可以将函数作为参数传递给其他函数或方法,并且可以将函数作为返回值返回。这使得函数可以更加灵活地组合和使用,提高了代码的可复用性和可扩展性。

此外,Lambda表达式还可以帮助开发者更好地理解和运用函数式编程的概念和思想。函数式编程强调将程序看作是一系列的函数组合和转换,而不是一系列的命令和操作。Lambda表达式提供了一种简洁、直观的方式来表示这种函数组合,帮助开发者更好地理解和应用函数式编程的思想。

总的来说,Lambda表达式对编程思维和软件开发方式的影响主要体现在简化代码、提高代码复用性和可扩展性、促进函数式编程思想的理解和应用等方面。通过使用Lambda表达式,开发者可以编写更加简洁、灵活和可维护的代码,提高开发效率和代码质量。

6、结语

        文章至此,已接近尾声!希望此文能够对大家有所启发和帮助。同时,感谢大家的耐心阅读和对本文档的信任。在未来的技术学习和工作中,期待与各位大佬共同进步,共同探索新的技术前沿。最后,再次感谢各位的支持和关注。您的支持是作者创作的最大动力,如果您觉得这篇文章对您有所帮助,请分享给身边的朋友和同事!

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

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

相关文章

海外媒体发稿:探究7个旅游业媒体套餐背后的秘密-华媒舍

旅游业媒体套餐对于旅游行业来说扮演着重要的角色&#xff0c;帮助企业在竞争激烈的市场中宣传推广&#xff0c;吸引更多的游客。在这篇文章中&#xff0c;我们将深入探究7个旅游业媒体套餐背后的秘密&#xff0c;为您揭示其真正的价值和影响。 1. 平台选择的关键 在选择旅游业…

博士找教职--经验贴

目录 一、如何寻找教职&#xff1f; 二、海投还是多投&#xff1f; 三、博士什么时候找工作最好&#xff1f; 为什么9月份开始最好&#xff1f; 四、论文没有出来可以9月找工作吗&#xff1f; 五、其他的一些嘱咐 一、如何寻找教职&#xff1f; 上必应键入关键词&#xf…

leetcode最长有效括号

. - 力扣&#xff08;LeetCode&#xff09; 32. 最长有效括号 困难 相关标签 相关企业 给你一个只包含 ( 和 ) 的字符串&#xff0c;找出最长有效&#xff08;格式正确且连续&#xff09;括号 子串 的长度。 示例 1&#xff1a; 输入&#xff1a;s "(()" 输…

spring boot学习第十七篇:OAuth2概述及使用GitHub登录第三方网站

0. 导言 我们在浏览器上可以访问成百上千个网站&#xff0c;使用每个网站的服务一般都要先注册账号&#xff0c;那么我们为了更好地记忆&#xff0c;一般都会在多个网站使用相同的账号和密码进行注册。那么问题就来了&#xff0c;如果在你注册的网站中有某些个网站的系统设计不…

CentOS7里ifcfg-eth0文件不存在解决方案/Centos7修改网络IP解决方案

Centos7网络IP地址手动设置 1、centos7没有ifcfg-eth0&#xff0c;我的centos7也没有其他博客说的什么ifcfg-ens33、ifcfg-ens32&#xff0c;然后我打开了我这里的ifcfg-eno***&#xff0c;结果发现就是centos6里的ifcfg-eth0里的网络配置。2、vim ifcfg-eno***&#xff08;按t…

202203青少年软件编程(Scratch图形化) 等级考试试卷(四级)

第1题&#xff1a;【 单选题】 由1,2,3,4,5,0这六个数字经过排列组合能够组成多少个六位数偶数&#xff1f; 注意&#xff1a; 每一位都不相同&#xff0c; 最高位不能为0。&#xff08; &#xff09; A:720 B:360 C:312 D:88 【正确答案】: C 【试题解析】 : 逻辑知识…

10分钟带你学会配置DNS服务正反向解析

正向解析 服务端IP客户端IP网址192.168.160.134192.168.160.135www.openlab.com 一、首先做准备工作&#xff1a; 关闭安全软件&#xff0c;关闭防火墙&#xff0c;下载bind软件 [rootserver ~]# setenforce 0 [rootserver ~]# systemctl stop firewalld [rootserver ~]# y…

【C++程序员的自我修炼】拷贝构造函数

心存希冀 追光而遇目有繁星 沐光而行 目录 拷贝构造函数概念 拷贝构造的特征 无穷递归的解释 浅拷贝 总结&#xff1a; 深拷贝 拷贝构造函数典型调用场景 总结 契子✨ 在生活中总有很多琐事&#xff0c;不做不行做了又怕麻烦&#xff0c;有时候想要是有个和自己一模一样的人就…

springboot中常见的设计模式

Spring Boot&#xff0c;作为基于Spring框架的扩展&#xff0c;广泛应用了多种设计模式来简化企业级应用开发。以下是在Spring Boot中常见的一些设计模式&#xff1a; 1. 单例模式&#xff08;Singleton Pattern&#xff09; 这是Spring框架中最常用的模式之一。Spring容器默…

每日一题 第八十九期 洛谷 [NOIP2017 提高组] 奶酪

[NOIP2017 提高组] 奶酪 题目背景 NOIP2017 提高组 D2T1 题目描述 现有一块大奶酪&#xff0c;它的高度为 h h h&#xff0c;它的长度和宽度我们可以认为是无限大的&#xff0c;奶酪中间有许多半径相同的球形空洞。我们可以在这块奶酪中建立空间坐标系&#xff0c;在坐标系…

Go——面向对象

一. 匿名字段 go支持只提供类型而不写字段名的方式&#xff0c;也就是匿名字段&#xff0c;也称为嵌入字段。 同名字段的情况 所以自定义类型和内置类型都可以作为匿名字段使用 指针类型匿名字段 二.接口 接口定义了一个对象的行为规范&#xff0c;但是定义规范不实现&#xff…

搞懂docker一篇就够了

在数字化浪潮汹涌的今日,Docker以其独特的魅力,引领着容器技术的风潮,成为众多开发者、运维人员乃至架构师们心中的宠儿。今日就带领大家一同探寻Docker的奥秘,感受其带来的便捷与高效。 Docker,这个看似简单的词汇,却蕴含着无尽的智慧与力量。它就像一位高超的魔术师,…

FreeSWITCH 1.10.10 简单图形化界面17 - ubuntu22.04或者debian12 安装FreeSWITCH

FreeSWITCH 1.10.10 简单图形化界面17 - ubuntu22.04或者debian12 安装FreeSWITCH 界面预览00、先看使用手册0、安装操作系统1、下载脚本2、开始安装3、登录网页FreeSWITCH界面安装参考:https://blog.csdn.net/jia198810/article/details/132479324 界面预览 http://myfs.f3…

Matlab之过球面一点的平面方程

这篇文章描述2件事情&#xff1a; 1、已知球面上任意点&#xff0c;求过该点、地心、与北极点的平面方程&#xff08;即过该点的经线平面方程&#xff09;&#xff1b; 2、绕过球心的任意轴旋转平面得到新平面的方程 一、已知球面上任意点&#xff0c;求过该点、地心、与北极点…

javase_进阶 day10 集合(泛型,数据结构)

1.泛型 1.1泛型概述 泛型的介绍 ​ 泛型是JDK5中引入的特性&#xff0c;它提供了编译时类型安全检测机制 泛型的好处 把运行时期的问题提前到了编译期间避免了强制类型转换 泛型的定义格式 <类型>: 指定一种类型的格式.尖括号里面可以任意书写,一般只写一个字母.例如:…

CopyTranslator下载地址及安装教程

CopyTranslator是一款免费且开源的机器翻译工具&#xff0c;旨在提供快速、便捷的翻译服务。它采用了先进的神经网络机器翻译技术&#xff0c;能够提供准确、流畅的翻译结果。 CopyTranslator的特点和功能如下&#xff1a; 多语言翻译&#xff1a;支持多种常见的语言对&#…

【随笔】Git 高级篇 -- 项目里程碑 git tag(二十)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

CuraEngine之代码阅读(1)之路径优化函数 PathOrderOptimizer::optimize

CuraEngine之代码阅读&#xff08;1&#xff09;之路径优化函数 注&#xff1a;整理一些突然学到的C知识&#xff0c;随时mark一下 例如&#xff1a;忘记的关键字用法&#xff0c;新关键字&#xff0c;新数据结构 C 的 STL CuraEngine之代码阅读&#xff08;1&#xff09;之路径…

leetcode142 环形链表2

题目 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部…

大语言模型LLM《提示词工程指南》学习笔记05

文章目录 大语言模型LLM《提示词工程指南》学习笔记05在LLM中调用函数对抗性提示提示注入提示泄露非法行为DANWaluigi效应 防御策略在指令中添加防御参数化提示组件引用和其他格式对抗提示检测器 大语言模型LLM《提示词工程指南》学习笔记05 在LLM中调用函数 函数调用是一项重…