Java开发提速秘籍:巧用Apache Commons Lang工具库

news2025/1/21 9:26:08

一、Java 开发效率之困

在当今数字化时代,Java 作为一门广泛应用的编程语言,在各类软件开发项目中占据着举足轻重的地位。无论是大型企业级应用、互联网平台,还是移动应用后端,都能看到 Java 的身影。然而,Java 开发者们在享受其强大功能与稳定性的同时,也常常面临开发效率方面的挑战。

在实际开发过程中,我们经常会遇到一些看似基础却又繁琐的任务。以字符串处理为例,判断一个字符串是否为空或仅包含空格,在 Java 标准库中,我们需要编写如下代码:

String str = " ";

if (str == null || str.trim().length() == 0) {

// 处理空字符串情况

}

这段代码虽然不难理解,但每次都要编写这样的判断逻辑,无疑增加了开发的工作量。再如日期操作,计算两个日期之间的天数差,使用 Java 标准库需要涉及到复杂的Calendar类操作,代码如下:


import java.util.Calendar;

Calendar calendar1 = Calendar.getInstance();

calendar1.set(2023, 10, 1);

Calendar calendar2 = Calendar.getInstance();

calendar2.set(2023, 10, 10);

long timeDiff = Math.abs(calendar2.getTimeInMillis() - calendar1.getTimeInMillis());

int daysDiff = (int) (timeDiff / (1000 * 60 * 60 * 24));

这段代码不仅冗长,而且容易出错。这些问题的存在,不仅降低了开发效率,还增加了代码出错的风险。为了解决这些问题,开发者们往往需要寻找更高效的解决方案。而 Apache Commons Lang 工具库,正是这样一个能帮助我们提升 Java 开发效率的利器。

二、Apache Commons Lang 初相识

Apache Commons Lang 是 Apache Commons 项目家族中的重要成员,这个项目专注于为 Java 开发者提供一系列实用的工具类,旨在增强 Java 核心类库的功能。它就像是一个精心打造的工具百宝箱,里面装满了各种能让开发工作变得更加轻松高效的工具。

该工具库的诞生,源于 Java 开发者在日常编码中反复遇到的一些繁琐问题。例如,在处理字符串、日期、数组等常见数据类型时,Java 标准库提供的功能有时显得不够便捷,开发者往往需要编写大量重复的样板代码。Apache Commons Lang 的出现,很好地解决了这些问题。它通过提供一系列功能强大且易用的工具类,让开发者能够用更简洁的代码完成复杂的任务,从而大大减少了样板代码的编写量,提升了开发效率。

在业界,Apache Commons Lang 得到了极为广泛的应用。众多知名的开源项目和企业级应用都依赖于它来简化开发过程。许多大型互联网公司在其核心业务系统中大量使用 Apache Commons Lang,以提高系统的开发效率和稳定性。它已经成为 Java 开发领域中不可或缺的一部分,为无数开发者节省了大量的时间和精力。

三、引入 Lang 库,开启高效之旅

在使用 Apache Commons Lang 库之前,我们需要先将其引入到项目中。在 Java 项目中,引入依赖通常通过构建工具来完成,常见的构建工具如 Maven 和 Gradle,下面将分别介绍如何使用这两种工具引入 Apache Commons Lang 库。

Maven 引入方式

如果你的项目使用 Maven 进行构建,那么在项目的pom.xml文件中添加如下依赖:


<dependencies>

<dependency>

<groupId>org.apache.commons</groupId>

<artifactId>commons-lang3</artifactId>

<version>3.12.0</version>

</dependency>

</dependencies>

在上述代码中,<groupId>指定了库的组织 ID,org.apache.commons表示这是 Apache Commons 项目下的库。<artifactId>指定了库的名称,这里是commons-lang3,表示我们引入的是 Apache Commons Lang 库的第 3 版。<version>指定了库的版本号,3.12.0是当前的一个较新版本,你可以根据实际需求替换为其他版本。

添加完依赖后,保存pom.xml文件,Maven 会自动下载指定版本的 Apache Commons Lang 库及其依赖项。如果在项目中使用了 Maven 的mvn clean install或mvn clean compile等命令,Maven 会在构建过程中自动处理依赖关系,确保库被正确引入到项目中。

Gradle 引入方式

若项目使用 Gradle 进行构建,在项目的build.gradle文件中添加如下依赖:

 
dependencies {

implementation 'org.apache.commons:commons-lang3:3.12.0'

}

在这段代码中,implementation表示依赖的范围,它确保该依赖在编译和运行时都可用。org.apache.commons:commons-lang3:3.12.0指定了依赖的坐标,与 Maven 中的<groupId>、<artifactId>和<version>相对应。

同样,保存build.gradle文件后,Gradle 会在项目构建时自动下载并引入指定版本的 Apache Commons Lang 库。如果在 Gradle 中使用了gradle build等构建命令,Gradle 会根据配置的依赖关系进行处理。

通过以上两种方式,我们就可以将 Apache Commons Lang 库引入到 Java 项目中,为后续使用其强大的功能奠定基础。

四、核心功能大揭秘

(一)字符串处理,得心应手

在 Java 开发中,字符串处理是极为常见的操作,而StringUtils类则是 Apache Commons Lang 库中处理字符串的得力助手。它提供了一系列丰富且实用的方法,大大简化了字符串处理的过程。

判断字符串是否为空是一个常见需求。使用StringUtils类的isEmpty方法,我们可以轻松实现这一判断。例如:


import org.apache.commons.lang3.StringUtils;

public class StringUtilsDemo {

public static void main(String[] args) {

String str1 = null;

String str2 = "";

String str3 = " ";

String str4 = "Hello";

System.out.println(StringUtils.isEmpty(str1)); // 输出: true

System.out.println(StringUtils.isEmpty(str2)); // 输出: true

System.out.println(StringUtils.isEmpty(str3)); // 输出: false

System.out.println(StringUtils.isEmpty(str4)); // 输出: false

}

}

在上述代码中,StringUtils.isEmpty方法能够准确判断字符串是否为空,包括null值和空字符串,并且对仅包含空格的字符串也能正确处理。

去除字符串两端的空白字符也是经常会用到的操作。利用StringUtils类的trim方法,能轻松实现这一功能,示例代码如下:


import org.apache.commons.lang3.StringUtils;

public class StringUtilsTrimDemo {

public static void main(String[] args) {

String str = " Hello World ";

String trimmedStr = StringUtils.trim(str);

System.out.println(trimmedStr); // 输出: Hello World

}

}

这里,StringUtils.trim方法将字符串str两端的空白字符去除,得到了干净的字符串Hello World。

若要反转字符串,StringUtils类的reverse方法能派上用场。如下代码展示了如何使用该方法:


import org.apache.commons.lang3.StringUtils;

public class StringUtilsReverseDemo {

public static void main(String[] args) {

String str = "Hello";

String reversedStr = StringUtils.reverse(str);

System.out.println(reversedStr); // 输出:olleH

}

}

通过StringUtils.reverse方法,字符串Hello被成功反转成olleH。

判断一个字符串是否全部由数字组成,在数据校验等场景中非常重要。StringUtils类的isNumeric方法可以帮助我们实现这一判断,示例如下:


import org.apache.commons.lang3.StringUtils;

public class StringUtilsIsNumericDemo {

public static void main(String[] args) {

String str1 = "12345";

String str2 = "123a45";

System.out.println(StringUtils.isNumeric(str1)); // 输出: true

System.out.println(StringUtils.isNumeric(str2)); // 输出: false

}

}

在这段代码中,StringUtils.isNumeric方法准确判断出str1全部由数字组成,而str2包含非数字字符。

(二)数字操作,精准高效

在涉及数字处理的场景中,NumberUtils类提供了诸多实用功能,让数字操作变得更加简单高效。

判断一个字符串是否可以转换为数字,是常见的需求。使用NumberUtils类的isCreatable方法,可以轻松实现这一判断。例如:


import org.apache.commons.lang3.math.NumberUtils;

public class NumberUtilsIsCreatableDemo {

public static void main(String[] args) {

String str1 = "123";

String str2 = "abc";

System.out.println(NumberUtils.isCreatable(str1)); // 输出: true

System.out.println(NumberUtils.isCreatable(str2)); // 输出: false

}

}

上述代码中,NumberUtils.isCreatable方法能够准确判断出字符串str1可以转换为数字,而str2无法转换。

将字符串转换为数字类型,在数据处理中经常会用到。NumberUtils类提供了多种方法来满足这一需求,如toInt、toLong、toDouble等。以下代码展示了如何将字符串转换为整数:


import org.apache.commons.lang3.math.NumberUtils;

public class NumberUtilsToIntDemo {

public static void main(String[] args) {

String str = "123";

int num = NumberUtils.toInt(str);

System.out.println(num); // 输出: 123

}

}

这里,NumberUtils.toInt方法将字符串str成功转换为整数类型。

在处理多个数字时,求这些数字中的最大值和最小值是常见的操作。NumberUtils类的max和min方法可以方便地实现这一功能。例如:


import org.apache.commons.lang3.math.NumberUtils;

public class NumberUtilsMaxMinDemo {

public static void main(String[] args) {

int num1 = 10;

int num2 = 20;

int num3 = 15;

int maxNum = NumberUtils.max(num1, num2, num3);

int minNum = NumberUtils.min(num1, num2, num3);

System.out.println("最大值: " + maxNum); // 输出: 最大值: 20

System.out.println("最小值: " + minNum); // 输出: 最小值: 10

}

}

在这段代码中,NumberUtils.max方法找出了num1、num2、num3中的最大值,NumberUtils.min方法找出了最小值。

(三)对象处理,轻松应对

ObjectUtils类为对象处理提供了一系列便捷的方法,在日常开发中非常实用。

判断一个对象是否为空,是避免空指针异常的重要步骤。使用ObjectUtils类的isEmpty方法,可以简洁地判断对象是否为空。例如:


import org.apache.commons.lang3.ObjectUtils;

public class ObjectUtilsIsEmptyDemo {

public static void main(String[] args) {

Object obj1 = null;

Object obj2 = new Object();

System.out.println(ObjectUtils.isEmpty(obj1)); // 输出: true

System.out.println(ObjectUtils.isEmpty(obj2)); // 输出: false

}

}

在上述代码中,ObjectUtils.isEmpty方法准确判断出obj1为空对象,而obj2不为空。

在某些情况下,我们需要获取一个非空的对象,如果原对象为空,则返回一个默认值。ObjectUtils类的defaultIfNull方法可以满足这一需求。例如:


import org.apache.commons.lang3.ObjectUtils;

public class ObjectUtilsDefaultIfNullDemo {

public static void main(String[] args) {

Object obj1 = null;

Object defaultValue = new Object();

Object result = ObjectUtils.defaultIfNull(obj1, defaultValue);

System.out.println(result!= null); // 输出: true

}

}

这里,ObjectUtils.defaultIfNull方法在obj1为空时,返回了默认值defaultValue。

比较两个对象是否相等,也是常见的操作。ObjectUtils类的equals方法可以帮助我们实现这一比较,并且它对null值进行了安全处理。例如:


import org.apache.commons.lang3.ObjectUtils;

public class ObjectUtilsEqualsDemo {

public static void main(String[] args) {

Object obj1 = "Hello";

Object obj2 = "Hello";

Object obj3 = null;

System.out.println(ObjectUtils.equals(obj1, obj2)); // 输出: true

System.out.println(ObjectUtils.equals(obj1, obj3)); // 输出: false

}

}

在这段代码中,ObjectUtils.equals方法正确判断出obj1和obj2相等,而obj1和obj3不相等。

(四)数组操作,灵活多样

在处理数组时,ArrayUtils类提供了丰富的方法,使数组操作变得更加灵活和高效。

判断一个数组是否为空,是常见的操作。使用ArrayUtils类的isEmpty方法,可以方便地判断数组是否为空。例如:


import org.apache.commons.lang3.ArrayUtils;

public class ArrayUtilsIsEmptyDemo {

public static void main(String[] args) {

String[] arr1 = null;

String[] arr2 = {};

String[] arr3 = {"Hello", "World"};

System.out.println(ArrayUtils.isEmpty(arr1)); // 输出: true

System.out.println(ArrayUtils.isEmpty(arr2)); // 输出: true

System.out.println(ArrayUtils.isEmpty(arr3)); // 输出: false

}

}

上述代码中,ArrayUtils.isEmpty方法能够准确判断出arr1和arr2为空数组,而arr3不为空。

反转数组的顺序,在某些算法和数据处理场景中非常有用。ArrayUtils类的reverse方法可以轻松实现数组的反转。例如:


import org.apache.commons.lang3.ArrayUtils;

public class ArrayUtilsReverseDemo {

public static void main(String[] args) {

int[] arr = {1, 2, 3, 4, 5};

int[] reversedArr = ArrayUtils.reverse(arr);

for (int num : reversedArr) {

System.out.print(num + " "); // 输出: 5 4 3 2 1

}

}

}

这里,ArrayUtils.reverse方法将数组arr的顺序成功反转。

向数组中添加元素,是数组操作的常见需求。ArrayUtils类的add方法可以在数组的指定位置添加一个元素。例如:


import org.apache.commons.lang3.ArrayUtils;

public class ArrayUtilsAddDemo {

public static void main(String[] args) {

String[] arr = {"Hello", "World"};

String[] newArr = ArrayUtils.add(arr, 1, "Java");

for (String str : newArr) {

System.out.print(str + " "); // 输出: Hello Java World

}

}

}

在这段代码中,ArrayUtils.add方法在数组arr的索引 1 处添加了元素Java,生成了新的数组newArr。

(五)日期处理,简单便捷

在处理日期相关的业务逻辑时,DateUtils类提供了一系列实用的方法,大大简化了日期操作的复杂度。

对日期进行加减操作,是常见的需求。例如,计算某个日期加上或减去一定天数后的日期。使用DateUtils类的addDays和subtractDays方法,可以轻松实现这一功能。以下代码展示了如何计算当前日期加上 5 天后的日期:


import org.apache.commons.lang3.time.DateUtils;

import java.util.Date;

public class DateUtilsAddDaysDemo {

public static void main(String[] args) throws Exception {

Date currentDate = new Date();

Date newDate = DateUtils.addDays(currentDate, 5);

System.out.println(newDate);

}

}

在上述代码中,DateUtils.addDays方法将当前日期currentDate加上 5 天,得到了新的日期newDate。

比较两个日期的先后顺序,在日期相关的业务逻辑中非常重要。DateUtils类的compare方法可以方便地比较两个日期的大小。例如:


import org.apache.commons.lang3.time.DateUtils;

import java.util.Date;

public class DateUtilsCompareDemo {

public static void main(String[] args) throws Exception {

Date date1 = new Date();

Date date2 = DateUtils.addDays(date1, 3);

int result = DateUtils.compare(date1, date2);

if (result < 0) {

System.out.println("date1早于date2");

} else if (result > 0) {

System.out.println("date1晚于date2");

} else {

System.out.println("date1等于date2");

}

}

}

这里,DateUtils.compare方法比较了date1和date2的大小,并根据比较结果输出相应的信息。

将日期格式化为指定的字符串形式,也是常见的操作。DateUtils类结合SimpleDateFormat类,可以实现日期的格式化。例如,将日期格式化为yyyy - MM - dd的形式,示例代码如下:


import org.apache.commons.lang3.time.DateUtils;

import java.text.SimpleDateFormat;

import java.util.Date;

public class DateUtilsFormatDemo {

public static void main(String[] args) throws Exception {

Date date = new Date();

SimpleDateFormat sdf = new SimpleDateFormat("yyyy - MM - dd");

String formattedDate = sdf.format(date);

System.out.println(formattedDate);

}

}

在这段代码中,通过SimpleDateFormat类将日期date格式化为yyyy - MM - dd形式的字符串formattedDate。

五、实际案例看效果

为了更直观地感受 Apache Commons Lang 工具库对 Java 开发效率的提升,我们来看一个电商系统开发的实际案例。

在电商系统中,用户注册登录功能是基础且重要的部分。在验证用户输入的用户名和密码时,需要进行字符串的非空校验。使用 Apache Commons Lang 的StringUtils类,代码如下:


import org.apache.commons.lang3.StringUtils;

public class UserRegistration {

public static boolean validateUsername(String username) {

return!StringUtils.isEmpty(username);

}

public static boolean validatePassword(String password) {

return!StringUtils.isEmpty(password) && password.length() >= 6;

}

}

上述代码中,validateUsername方法使用StringUtils.isEmpty方法快速判断用户名是否为空,validatePassword方法不仅判断密码是否为空,还检查了密码长度是否至少为 6 位。这种方式相比使用 Java 标准库,代码更加简洁明了。

订单数据处理是电商系统的核心环节之一。在计算订单总金额时,可能涉及到多个价格的数字计算。利用NumberUtils类,示例代码如下:


import org.apache.commons.lang3.math.NumberUtils;

public class OrderCalculation {

public static double calculateTotalPrice(String[] prices) {

double total = 0;

for (String price : prices) {

if (NumberUtils.isCreatable(price)) {

total += NumberUtils.toDouble(price);

}

}

return total;

}

}

在这段代码中,calculateTotalPrice方法首先使用NumberUtils.isCreatable方法判断字符串是否可以转换为数字,然后使用NumberUtils.toDouble方法将字符串转换为双精度浮点数进行累加,实现了订单总金额的计算。

在商品信息管理模块,需要对商品对象进行各种操作。例如,判断商品对象是否为空,使用ObjectUtils类的代码如下:

 
import org.apache.commons.lang3.ObjectUtils;

public class ProductManagement {

public static boolean isProductValid(Product product) {

return!ObjectUtils.isEmpty(product);

}

}

class Product {

// 商品类的属性和方法

}

这里,isProductValid方法通过ObjectUtils.isEmpty方法判断商品对象是否为空,确保商品信息的有效性。

在展示订单列表时,需要对订单数组进行处理。比如,对订单按照时间进行排序后,可能需要反转订单数组的顺序,以最新的订单排在前面。使用ArrayUtils类的代码如下:


import org.apache.commons.lang3.ArrayUtils;

import java.util.Arrays;

import java.util.Comparator;

public class OrderListDisplay {

public static Order[] reverseOrderArray(Order[] orders) {

Arrays.sort(orders, Comparator.comparing(Order::getOrderTime).reversed());

return ArrayUtils.reverse(orders);

}

}

class Order {

private String orderTime;

public String getOrderTime() {

return orderTime;

}

public void setOrderTime(String orderTime) {

this.orderTime = orderTime;

}

}

在reverseOrderArray方法中,首先对订单数组进行排序,然后使用ArrayUtils.reverse方法反转数组顺序,方便展示最新的订单。

在处理订单的时间相关业务时,如计算订单的预计送达时间,使用DateUtils类的示例如下:


import org.apache.commons.lang3.time.DateUtils;

import java.util.Date;

public class OrderTimeCalculation {

public static Date calculateDeliveryTime(Date orderDate, int days) {

return DateUtils.addDays(orderDate, days);

}

}

calculateDeliveryTime方法通过DateUtils.addDays方法,在订单日期的基础上加上指定的天数,计算出预计送达时间。

通过这个电商系统的案例可以看出,在各个关键业务环节中,Apache Commons Lang 工具库都能发挥重要作用,显著减少代码量,提高开发效率,使代码更加简洁、易读和维护。

六、注意事项要牢记

在享受 Apache Commons Lang 带来的便捷时,我们也需要留意一些使用过程中的注意事项,以确保代码的稳定性和高效性。

不同版本的 Apache Commons Lang 库在功能和兼容性上可能存在差异。在选择版本时,要充分考虑项目所使用的 JDK 版本以及其他相关依赖的兼容性。例如,某些较新的功能可能仅在特定的高版本库中可用,若项目使用的 JDK 版本较低,可能无法引入最新版的 Lang 库,此时就需要选择一个兼容的版本 。同时,关注库的更新日志也是非常重要的,它能帮助我们了解版本之间的变化,及时调整代码以适应这些变化。

在使用工具库中的方法时,务必仔细查看方法的参数类型和返回值类型。因为这些方法的设计初衷是为了满足各种通用场景,其参数和返回值的定义可能较为灵活。例如,StringUtils类中的某些方法可能接受CharSequence类型的参数,而不仅仅是String类型。如果在调用方法时传入了不匹配的参数类型,可能会导致编译错误或运行时异常。另外,对于方法的返回值,也要清楚其含义和可能的取值范围,以便正确处理返回结果。

虽然 Apache Commons Lang 库中的许多方法对null值进行了安全处理,但在实际使用中,仍需注意避免空指针异常。尤其是在涉及对象嵌套调用的场景下,即使外层方法对null值进行了处理,内层方法仍可能因未正确处理null值而抛出异常。例如,在使用ObjectUtils类的方法处理复杂对象时,如果对象的某个属性为null,而后续操作又依赖于该属性,就需要提前进行null值检查。

尽管 Apache Commons Lang 库能够显著提升开发效率,但也不应过度依赖。在某些特定的场景下,原生的 Java 代码可能具有更好的性能。例如,在一些对性能要求极高且逻辑简单的操作中,使用 Java 标准库中的方法可能比引入外部库的方法更加高效。因此,在使用时需要根据具体的业务场景和性能需求,合理选择是否使用 Lang 库的方法,以达到最佳的性能平衡。

七、总结与展望

Apache Commons Lang 工具库无疑是 Java 开发者手中的一把利器,为我们在开发过程中提供了诸多便利。通过引入这个工具库,我们能够以更简洁、高效的方式处理字符串、数字、对象、数组和日期等常见的数据类型和操作。在实际项目中,它显著减少了样板代码的编写量,提高了代码的可读性和可维护性,进而大大提升了开发效率。

从字符串处理的各种便捷方法,到数字操作的精准高效实现;从对象处理的安全可靠方式,到数组操作的灵活多样手段,再到日期处理的简单便捷功能,Apache Commons Lang 工具库在各个方面都展现出了强大的优势。它不仅让我们的开发工作变得更加轻松,还降低了出错的风险。

对于广大 Java 开发者来说,深入学习和熟练使用 Apache Commons Lang 工具库是提升自身开发能力和效率的重要途径。我们应该充分利用这个工具库提供的丰富功能,不断优化我们的代码。同时,随着技术的不断发展,我们也期待 Apache Commons Lang 工具库能够持续更新和完善,为 Java 开发领域带来更多的惊喜和助力,帮助我们在开发的道路上不断前行,创造出更加优秀的软件产品 。

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

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

相关文章

C++和OpenGL实现3D游戏编程【连载21】——父物体和子物体模式实现

欢迎来到zhooyu的专栏。 &#x1f525;C和OpenGL实现3D游戏编程【专题总览】 1、本节要实现的内容 上节课我们已经创建了一个基础Object类&#xff0c;以后所有的游戏元素都可以从这个基类中派生出来。同时为了操作方便&#xff0c;我们可以为任意两个Object类&#xff08;及其…

unity插件Excel转换Proto插件-ExcelToProtobufferTool

unity插件Excel转换Proto插件-ExcelToProtobufferTool **ExcelToProtobufTool 插件文档****1. 插件概述****2. 默认配置类&#xff1a;DefaultIProtoPathConfig****属性说明** **3. 自定义配置类****定义规则****示例代码** **4. 使用方式****4.1 默认路径****4.2 自定义路径**…

【数据结构篇】顺序表 超详细!

目录 一.顺序表的定义 1.顺序表的概念及结构 1.1线性表 2.顺序表的分类 2.1静态顺序表 2.2动态顺序表 二.动态顺序表的实现 1.准备工作和注意事项 2.顺序表的基本接口&#xff1a; 2.0 创建一个顺序表 2.1 顺序表的初始化 2.2 顺序表的销毁 2.3 顺序表的打印 3.顺序…

vulnhub靶场【IA系列】之Tornado

前言 靶机&#xff1a;IA-Tornado&#xff0c;IP地址为192.168.10.11 攻击&#xff1a;kali&#xff0c;IP地址为192.168.10.2 都采用虚拟机&#xff0c;网卡为桥接模式 本文所用靶场、kali镜像以及相关工具&#xff0c;我放置在网盘中&#xff0c;可以复制后面链接查看 htt…

云上贵州多彩宝荣获仓颉社区先锋应用奖 | 助力数字政务新突破

在信息技术应用创新的浪潮中&#xff0c;仓颉社区吸引了众多企业和开发者的积极参与&#xff0c;已有多个应用成功落地&#xff0c;展现出蓬勃的创新活力。仓颉编程语言精心遴选了在社区建设、应用创新、开源共建、技术布道等方面做出突出贡献的优秀项目应用&#xff0c;并颁发…

第十二章:算法与程序设计

文章目录&#xff1a; 一&#xff1a;基本概念 1.算法与程序 1.1 算法 1.2 程序 2.编译预处理 3.面向对象技术 4.程序设计方法 5.SOP标志作业流程 6.工具 6.1 自然语言 6.2 流程图 6.3 N/S图 6.4 伪代码 6.5 计算机语言 二&#xff1a;程序设计 基础 1.常数 …

2025 最新flutter面试总结

目录 1.Dart是值传递还是引用传递&#xff1f; 2.Flutter 是单引擎还是双引擎 3. StatelessWidget 和 StatefulWidget 在 Flutter 中有什么区别&#xff1f; 4.简述Dart语音特性 5. Navigator 是什么&#xff1f;在 Flutter 中 Routes 是什么&#xff1f; 6、Dart 是不是…

BUUCTF_Web([GYCTF2020]Ezsqli)

1.输入1 &#xff0c;正常回显。 2.输入1 &#xff0c;报错false&#xff0c;为字符型注入&#xff0c;单引号闭合。 原因&#xff1a; https://mp.csdn.net/mp_blog/creation/editor/145170456 3.尝试查询字段&#xff0c;回显位置&#xff0c;数据库&#xff0c;都是这个。…

HTML学习笔记(4)

目录 一、背景相关样式 二、定位position 三、javascript 1、变量的定义 2、数据类型 3、绑定事件 一、背景相关样式 background-image: url(); // 背景图片 background-repeat: repeat; // 背景图片是否平铺 no-repeat background-size: 200px; // 背景图片尺寸 cover把…

亲测有效!如何快速实现 PostgreSQL 数据迁移到 时序数据库TDengine

小T导读&#xff1a;本篇文章是“2024&#xff0c;我想和 TDengine 谈谈”征文活动的优秀投稿之一&#xff0c;作者从数据库运维的角度出发&#xff0c;分享了利用 TDengine Cloud 提供的迁移工具&#xff0c;从 PostgreSQL 数据库到 TDengine 进行数据迁移的完整实践过程。文章…

Excel 技巧11 - 如何使用Excel作成简单的排班表(★★),weekday 函数,TEXT函数

本文讲了如何在Excel中制作简单的排班表。 1&#xff0c;排班表Layout效果 - B2 单元格找那个输入 日期 - C3 - AG3 输入日&#xff0c;就是该月份的几号&#xff0c;比如1月5号&#xff0c;就输入5 如果是周六周日&#xff0c;背景色显示为绿色 - B4 ~ 输入员工名称 当 B2…

mac m1下载maven安装并配置环境变量

下载地址&#xff1a;Download Apache Maven – Maven 解压到一个没有中文和空格的文件夹 输入pwd查看安装路径 输入cd返回根目录再输入 code .zshrc 若显示 command not found: code你可以通过以下步骤来安装和配置 code 命令&#xff1a; 1. 确保你已经安装了 Visual Studio…

w-form-select.vue(自定义下拉框组件)

文章目录 1、w-form-select.vue 组件中每个属性的含义2、实例3、源代码 1、w-form-select.vue 组件中每个属性的含义 好的&#xff0c;我们来详细解释 w-form-select.vue 组件中每个属性的含义&#xff0c;并用表格列出它们是否与后端字段直接相关&#xff1a; 属性解释表格&…

Flutter项目和鸿蒙平台的通信

Flutter项目和鸿蒙平台的通信 前言Flutter和Harmonyos通信MethodChannelBasicMessageChannelEventChannel 前言 大家在使用Flutter开发项目的时候&#xff0c; Flutter提供了Platfrom Channel API来和个个平台进行交互。 Flutter官方目前提供了一下三种方式来和个个平台交互&…

【KOA框架】koa框架基础入门

koa是express的一层封装&#xff0c;语法比express更加简洁。所以有必要了解下koa的相关开发方法。 代码实现 package.json {"name": "koapp","version": "1.0.0","main": "index.js","scripts": {&…

我的创作纪念日——我与CSDN一起走过的365天

目录 一、机缘&#xff1a;旅程的开始 二、收获&#xff1a;沿路的花朵 三、日常&#xff1a;不断前行中 四、成就&#xff1a;一点小确幸 五、憧憬&#xff1a;梦中的重点 一、机缘&#xff1a;旅程的开始 最开始开始写博客是在今年一二月份的时候&#xff0c;也就是上一…

DenseNet-密集连接卷积网络

DenseNet&#xff08;Densely Connected Convolutional Network&#xff09;是近年来图像识别领域中一种创新且高效的深度卷积神经网络架构。它通过引入密集连接的设计&#xff0c;极大地提高了特征传递效率&#xff0c;减缓了梯度消失问题&#xff0c;促进了特征重用&#xff…

人形机器人将制造iPhone!

前言 优必选机器人和富士康通过一项突破性的合作伙伴关系&#xff0c;正在将先进的人形机器人&#xff08;如Walker S1及其升级版Walker S2&#xff09;整合到制造流程中&#xff0c;以改变iPhone的生产方式。这一合作旨在通过提升机器人能力、优化工作流程以及实现更智能的自动…

数据结构(链表 哈希表)

在Python中&#xff0c;链表和哈希表都是常见的数据结构&#xff0c;可以用来存储和处理数据。 链表是一种线性数据结构&#xff0c;由一系列节点组成&#xff0c;每个节点包含一个数据元素和一个指向下一个节点的指针。链表可以用来实现栈、队列以及其他数据结构。Python中可…

[苍穹外卖] 1-项目介绍及环境搭建

项目介绍 定位&#xff1a;专门为餐饮企业&#xff08;餐厅、饭店&#xff09;定制的一款软件产品 功能架构&#xff1a; 管理端 - 外卖商家使用 用户端 - 点餐用户使用 技术栈&#xff1a; 开发环境的搭建 整体结构&#xff1a; 前端环境 前端工程基于 nginx 运行 - Ngi…