Java工具包:高效开发的魔法钥匙

news2025/1/19 1:00:53

目录

一、引言

 二、Hutool 工具包初体验

2.1 快速入门

2.2 常用工具类及方法详解

2.2.1 Convert 类型转换工具类

2.2.2 DateUtil 日期时间工具类

2.2.3 StrUtil 字符串工具类

2.2.4 其他常用工具类

三、其他 Java 常用工具包巡礼 

3.1 Apache Commons 系列

3.2 Google Guava

3.3 其他工具包简介

 四、工具包的选择与应用策略

4.1 根据项目需求选择合适工具包

4.2 避免过度依赖与滥用


一、引言

在 Java 开发的广袤领域中,工具包宛如开发者手中的得力神兵,极大地提升了开发效率与代码质量。它们为开发者提供了一系列经过封装、优化的方法和工具,让开发者得以从繁琐的基础代码编写中解脱出来,将更多的精力聚焦于业务逻辑的实现。

Hutool 工具包便是其中的佼佼者,它以 “小而全” 的特性著称,致力于为开发者提供一站式的解决方案。其涵盖了文件、流、加密解密、转码、正则、线程、XML 等诸多方面的操作,将原本复杂的 JDK 方法进行了深度封装,形成了一套简洁易用的工具类,让开发者能够用更少的代码完成更多的任务。

除了 Hutool,Java 开发中还有许多其他实用的工具包。例如,Apache Commons 是一个功能强大、应用广泛的开源工具包,它提供了丰富的工具类,涵盖字符串处理、集合操作、文件操作等多个领域,为开发者解决了大量常见的开发问题。Google Guava 同样备受开发者青睐,它在集合、缓存、并发等方面表现出色,为开发者提供了高效、便捷的数据结构和工具,极大地提升了开发体验。

这些工具包各有千秋,它们的存在不仅丰富了 Java 开发者的 “武器库”,更推动了 Java 开发领域的不断发展与进步。在接下来的内容中,我们将深入探讨 Hutool 工具包及其他常用工具包的常用方法,为大家展示它们的强大功能与魅力。

 二、Hutool 工具包初体验

 

2.1 快速入门

Hutool 工具包以其 “小而全” 的显著特点,在 Java 开发领域中独树一帜。它就像是一个精心打造的百宝箱,将众多实用的功能和工具汇聚一堂,为开发者提供了一站式的解决方案。

在实际开发场景中,Hutool 的优势体现得淋漓尽致。例如,在处理文件操作时,传统方式可能需要编写大量繁琐的代码来实现文件的读取、写入、复制等操作,而借助 Hutool 的 FileUtil 工具类,只需寥寥数行代码,就能轻松完成这些任务。又比如,在进行日期和时间的处理时,Hutool 的 DateUtil 工具类提供了丰富的方法,涵盖日期的格式化、解析、计算等功能,大大简化了开发过程。

其降低 API 学习成本的特性,也让开发者受益匪浅。对于刚接触 Java 开发的新手来说,面对 JDK 庞大而复杂的 API,往往会感到无从下手。而 Hutool 对这些 API 进行了深度封装,将常用的功能以简洁明了的方式呈现出来。以类型转换为例,Hutool 的 Convert 工具类提供了一系列简单易用的方法,如Convert.toInt("123")可以将字符串 “123” 快速转换为整数类型,开发者无需深入了解 JDK 中复杂的类型转换机制,就能轻松实现数据类型的转换。

Hutool 在 Java 开发中的重要地位不言而喻。它不仅提高了开发效率,减少了开发时间和成本,还使代码更加简洁、易读、易维护。在追求高效、高质量开发的今天,Hutool 已成为众多 Java 开发者不可或缺的得力助手,为 Java 开发注入了新的活力与便捷。

2.2 常用工具类及方法详解

2.2.1 Convert 类型转换工具类

在 Java 开发中,数据类型转换是一项极为常见的操作,而 Hutool 工具包中的 Convert 类则为我们提供了一系列强大且便捷的类型转换方法,涵盖了基本数据类型与字符串、数组、日期对象、列表之间的转换,堪称类型转换的得力助手。

在基本数据类型与字符串的转换方面,Convert 类的表现十分出色。例如,当我们需要将字符串转换为整数时,只需使用Convert.toInt("123"),即可轻松得到整数 123。这一过程不仅简单直接,而且避免了因手动解析字符串可能出现的格式错误等问题。同样,将整数转换为字符串也非常便捷,Convert.toString(123)就能返回字符串 “123”。这种双向的转换功能,在数据的存储、传输以及展示等场景中都有着广泛的应用。

在数组与列表的转换上,Convert 类也提供了清晰易用的方法。若要将数组转换为列表,可通过Convert.toList(String.class, new String[]{"a", "b", "c"})实现,该方法会返回一个包含 “a”“b”“c” 的列表。反之,将列表转换为数组时,Convert.toStrArray(List<String> list)能满足需求,将列表中的元素转换为字符串数组。这一转换功能在不同数据结构的适配以及数据处理流程的衔接中发挥着重要作用。

在日期对象与字符串的转换场景中,Convert 类同样表现出色。当从数据库中获取到日期数据并需要以特定格式展示给用户时,可使用Convert.toDate("2024-10-01")将字符串转换为日期对象,再结合 DateUtil 类进行进一步的格式化处理。而将日期对象转换为字符串时,Convert.toString(Date date)能轻松实现。这种转换能力确保了在不同模块之间,日期数据能够以合适的格式进行传递和处理。

2.2.2 DateUtil 日期时间工具类

在 Java 开发中,对日期和时间的精确处理是众多业务场景的关键需求,Hutool 工具包中的 DateUtil 类犹如一位专业的时间管家,为开发者提供了全方位、便捷高效的日期时间处理解决方案。

在 Date、long、Calendar 之间的转换方面,DateUtil 类提供了清晰明确的方法。当需要将 long 类型的时间戳转换为 Date 对象时,使用DateUtil.date(1633171200000L)即可轻松实现。而将 Date 对象转换为 long 类型的时间戳,DateUtil.offset(date, DateField.DAY_OF_MONTH, 2)能精准获取。在与 Calendar 对象的转换中,DateUtil.date(Calendar.getInstance())可以将 Calendar 对象转换为 Date 对象,反之亦然。这些转换方法在处理不同时间表示形式的数据交互时,发挥着不可或缺的作用。

在日期字符串的解析与格式化上,DateUtil 类展现出了强大的功能。对于常见的日期格式,如 “yyyy - MM - dd HH:mm:ss”“yyyy/MM/dd” 等,DateUtil.parse("2024-10-01 12:00:00")能自动识别并解析为 Date 对象。而在格式化输出时,DateUtil.format(date, "yyyy年MM月dd日")可以将 Date 对象按照指定格式转换为字符串,满足不同场景下对日期展示格式的多样化需求。

在获取日期各部分信息时,DateUtil 类提供了便捷的方法。通过DateUtil.year(date)可获取年份,DateUtil.month(date)获取月份(从 1 开始计数),DateUtil.dayOfMonth(date)获取日期中的日。这些方法在统计分析、任务调度等场景中,为开发者提供了精准的数据支持。

计算日期偏移和时间差也是 DateUtil 类的重要功能。当需要计算某个日期加上或减去一定天数、小时数后的日期时,DateUtil.offset(date, DateField.DAY_OF_MONTH, 2)可计算日期偏移,得到新的日期。在计算两个日期之间的时间差时,DateUtil.between(startDate, endDate, DateUnit.DAY)能准确计算出两个日期之间相差的天数,在项目管理、资源调度等场景中具有重要的应用价值。

2.2.3 StrUtil 字符串工具类

在 Java 开发中,字符串操作贯穿于各个业务环节,Hutool 工具包中的 StrUtil 类为开发者提供了丰富且实用的字符串处理方法,极大地提升了字符串操作的效率与便捷性。

判断字符串是否为空是日常开发中频繁遇到的操作,StrUtil 类提供了简洁明了的方法。StrUtil.isEmpty("")可以准确判断一个字符串是否为空字符串或null,返回true表示为空,反之返回false。这一方法在数据校验、参数判断等场景中,确保了程序的稳定性和健壮性。

去除前后缀的功能在处理从外部获取的字符串数据时非常实用。例如,当从文件路径字符串中去除前后的特定字符时,StrUtil.removePrefix("prefix_hello", "prefix_")可以去除字符串的前缀 “prefix_”,返回 “hello”。同样,StrUtil.removeSuffix("hello_suffix", "_suffix")能去除字符串的后缀 “_suffix”,得到 “hello”。这一功能在数据清洗、文本处理等方面发挥着重要作用。

格式化字符串是 StrUtil 类的又一强大功能。StrUtil.format("Hello, {}! Your age is {}", "John", 30)可以按照指定的模板对字符串进行格式化,返回 “Hello, John! Your age is 30”。这种格式化功能在日志记录、消息通知等场景中,使得输出的字符串更加规范、易读。

2.2.4 其他常用工具类

除了上述介绍的工具类,Hutool 还提供了许多其他实用的工具类,它们在不同的开发场景中发挥着重要作用。

ReflectUtil 是一个强大的反射工具类,它简化了 Java 反射的操作。通过它,开发者可以更加便捷地获取类的信息、调用类的方法和访问类的字段。例如,在动态创建对象时,ReflectUtil.newInstance(Class<?> clazz)可以根据传入的类对象创建实例,无需繁琐的反射代码编写。

NumberUtil 用于数字操作,提供了如数字格式化、比较、转换等功能。在处理财务数据时,NumberUtil.round(123.456, 2)可以将数字 123.456 四舍五入保留两位小数,返回 123.46。

BeanUtil 主要用于 JavaBean 的操作,包括对象的属性复制、填充、转换等。当需要将一个对象的属性值复制到另一个对象时,BeanUtil.copyProperties(source, target)可以快速实现,减少了手动赋值的代码量。

CollUtil 是集合工具类,提供了对集合的各种操作方法,如集合的创建、添加、删除、查找等。CollUtil.newArrayList("a", "b", "c")可以快速创建一个包含 “a”“b”“c” 的 ArrayList。

MapUtil 用于 Map 的操作,如创建 Map、获取 Map 中的值、判断 Map 是否为空等。MapUtil.get(map, "key")可以从 Map 中获取指定键的值,避免了空指针异常的出现。

AnnotationUtil 用于处理注解,提供了获取注解信息、判断类或方法是否被特定注解修饰等功能。在实现自定义注解的业务逻辑时,该工具类能帮助开发者快速获取注解相关信息。

SecureUtil 则专注于安全相关的操作,如加密、解密、签名等。在处理用户密码存储时,SecureUtil.md5("password")可以对密码进行 MD5 加密,保障用户信息的安全。

三、其他 Java 常用工具包巡礼 

3.1 Apache Commons 系列

Apache Commons 系列工具包是 Java 开发领域中备受赞誉的开源项目,它宛如一座功能丰富的宝藏库,涵盖了字符串处理、集合操作、文件操作等多个关键领域,为开发者提供了一系列高效、实用的工具类,极大地提升了开发效率,减少了重复劳动。

在字符串处理方面,StringUtils 工具包堪称开发者的得力助手。它提供了丰富多样的方法,能轻松应对各种字符串操作需求。判断字符串是否为空或空白是日常开发中常见的操作,StringUtils.isEmpty(String str)方法可以准确判断字符串是否为null或空字符串,StringUtils.isBlank(String str)则能判断字符串是否为null、空字符串或仅包含空白字符。在处理用户输入时,使用StringUtils.isBlank(input)可以快速筛选出无效的输入。字符串的裁剪和替换也是常用功能,StringUtils.trim(String str)用于去除字符串两端的空白字符,StringUtils.replace(String text, String searchString, String replacement)则能将字符串中的指定子字符串进行替换。在处理文件路径时,若路径字符串两端存在多余的空格,使用StringUtils.trim(path)即可去除空格,确保路径的准确性。

CollectionUtils 工具包为集合操作带来了极大的便利。在集合的比较与合并场景中,CollectionUtils.isEqualCollection(Collection<?> coll1, Collection<?> coll2)可判断两个集合是否相等,包括元素顺序和数量。CollectionUtils.union(Collection<?> coll1, Collection<?> coll2)能将两个集合合并为一个新集合,去除重复元素。在处理业务数据时,若需要对比两个用户列表是否一致,或合并两个商品分类列表,这些方法能快速实现需求。判断集合是否为空或包含特定元素也非常便捷,CollectionUtils.isEmpty(Collection<?> coll)可判断集合是否为空,CollectionUtils.contains(Collection<?> coll, Object obj)用于检查集合是否包含指定元素。在处理订单列表时,通过CollectionUtils.isEmpty(orderList)可以判断订单是否为空,避免空指针异常。

MapUtils 工具包专注于 Map 的操作。获取 Map 中的值并提供默认值是其常用功能之一,MapUtils.getObject(Map<?,?> map, Object key, Object defaultValue)能从 Map 中获取指定键的值,若键不存在则返回默认值。在从配置文件的 Map 中获取参数值时,若参数不存在,可通过设置默认值保证程序的正常运行。判断 Map 是否为空以及获取 Map 的大小也很简单,MapUtils.isEmpty(Map<?,?> map)用于判断 Map 是否为空,MapUtils.size(Map<?,?> map)可获取 Map 中键值对的数量。在处理用户权限 Map 时,通过MapUtils.isEmpty(permissionMap)可以判断是否为用户分配了权限。

SetUtils 工具包主要用于 Set 的操作。创建不可变 Set 是其常见用途,SetUtils.immutableSet(E... elements)可以创建一个不可变的 Set,元素不能被修改或添加。在定义一些固定的常量集合时,使用该方法创建的不可变 Set 能确保数据的稳定性。对 Set 进行并集、交集和差集运算也很方便,SetUtils.union(Set<? extends E> set1, Set<? extends E> set2)计算两个 Set 的并集,SetUtils.intersection(Set<? extends E> set1, Set<? extends E> set2)求交集,SetUtils.difference(Set<? extends E> set1, Set<? extends E> set2)计算差集。在处理用户角色集合时,可通过这些运算判断用户的权限范围。

NumberUtils 工具包在数字操作方面表现出色。将字符串转换为数字是其核心功能之一,NumberUtils.toInt(String str)可以将字符串转换为整数,NumberUtils.toDouble(String str)转换为双精度浮点数。在处理用户输入的数字字符串时,使用这些方法可将其转换为相应的数字类型,方便后续的计算和处理。判断字符串是否为数字以及进行数字比较也很便捷,NumberUtils.isNumber(String str)用于判断字符串是否为数字格式,NumberUtils.compare(int num1, int num2)比较两个整数的大小。在验证用户输入的是否为有效的数字时,NumberUtils.isNumber(input)能快速给出判断结果。

DateUtils 工具包为日期操作提供了全面的支持。日期的解析与格式化是其重要功能,DateUtils.parseDate(String str, String[] parsePatterns)可以根据指定的格式模式将字符串解析为 Date 对象,DateUtils.formatDate(Date date, String pattern)则将 Date 对象格式化为指定格式的字符串。在处理不同格式的日期字符串时,通过灵活设置格式模式,可实现准确的解析和格式化。计算日期的偏移量和差值也是常用功能,DateUtils.addDays(Date date, int days)在指定日期上增加或减少指定天数,DateUtils.getFragmentInDays(Date startDate, Date endDate)计算两个日期之间相差的天数。在处理订单的有效期、任务的截止日期等场景中,这些功能能帮助开发者准确计算和管理时间。

FileUtils 工具包为文件操作提供了便捷的方法。文件的读取与写入是其基本功能,FileUtils.readFileToString(File file, String encoding)以指定编码读取文件内容并返回字符串,FileUtils.writeStringToFile(File file, String data, String encoding)将字符串写入文件。在处理配置文件、日志文件等场景中,这些方法能快速实现文件内容的读写。文件的复制、移动和删除也很简单,FileUtils.copyFile(File srcFile, File destFile)复制文件,FileUtils.moveFile(File srcFile, File destFile)移动文件,FileUtils.deleteQuietly(File file)删除文件。在进行文件备份、文件整理等操作时,这些方法能高效完成任务。

3.2 Google Guava

Google Guava 工具包是 Java 开发领域中又一强大的工具集,它以其卓越的性能和丰富的功能,为开发者提供了诸多便利,尤其是在数据结构和缓存设计方面,展现出了独特的优势。

在数据结构方面,Guava 引入了许多创新的集合类型,极大地拓展了开发者的选择空间。

Table 是一种独特的二维表格数据结构,它可以将行键和列键映射到单个值,类似于数据库中的二维表。在处理矩阵数据、成绩表等场景中,Table 能直观地表示数据关系。创建 Table 时,可使用HashBasedTable.create()方法,之后通过table.put(rowKey, columnKey, value)方法插入数据,通过table.get(rowKey, columnKey)获取对应的值。Map<K, List<V>>这种数据结构在 Guava 中也有更便捷的实现方式。Multimap 接口允许一个键对应多个值,使用ArrayListMultimap.create()可以创建一个 Multimap 实例,通过multimap.put(key, value)添加键值对,multimap.get(key)获取与键关联的所有值。在处理用户与角色的多对多关系时,这种数据结构能清晰地表示数据,方便进行查询和管理。

在缓存设计方面,Guava 的 Cache 机制为开发者提供了一种高效、灵活的缓存解决方案。它可以在内存中缓存数据,减少对数据库或其他数据源的访问,从而提高系统性能。创建缓存时,可通过CacheBuilder进行配置,如Cache<String, Object> cache = CacheBuilder.newBuilder().maximumSize(1000).build();创建了一个最大容量为 1000 的缓存。向缓存中放入数据使用cache.put(key, value)方法,从缓存中获取数据则通过cache.getIfPresent(key)方法。在处理频繁访问的配置数据、热门文章等场景中,使用 Guava 的 Cache 机制可以显著提升系统的响应速度,减少数据获取的时间开销。

3.3 其他工具包简介

除了上述工具包,Java 开发中还有许多其他实用的工具包,它们在不同的领域发挥着重要作用。

Apache Shiro 是一个强大且易用的 Java 权限框架,专注于身份验证、授权、加密和会话管理。在企业级应用开发中,权限管理是至关重要的环节。Shiro 通过简洁的配置和 API,能够快速实现用户身份验证,判断用户是否具有访问特定资源的权限。它支持多种数据源,如数据库、LDAP 等,方便与企业现有的用户管理系统集成。在一个 Web 应用中,使用 Shiro 可以轻松配置不同用户角色对不同 URL 的访问权限,确保系统的安全性。

JSOUP 是一款优秀的 Java HTML 解析器,可直接解析 URL 地址、HTML 文本内容。它提供了一套简洁的 API,通过 DOM、CSS 选择器等方式,能够方便地提取和操作 HTML 中的数据。在网页爬虫、数据提取等场景中,JSOUP 能够快速定位和获取所需的信息。使用 JSOUP 可以解析网页中的标题、链接、图片等元素,为后续的数据处理和分析提供支持。

Jackson 是 Java 领域中广泛使用的 JSON 处理库,主要用于 JavaBean 与 JSON 之间的转换。在前后端数据交互频繁的 Web 应用中,Jackson 能够高效地将 Java 对象转换为 JSON 格式的字符串,以便在网络中传输,同时也能将接收到的 JSON 字符串转换为 Java 对象。在 RESTful API 的开发中,Jackson 可以方便地处理请求和响应数据的序列化和反序列化,确保数据的正确传输和解析。

Org Reflections 是一个用于运行时元数据分析的工具包,它可以扫描类路径下的类,获取类的各种信息,如注解、方法、字段等。在实现自定义框架、插件系统等场景中,Org Reflections 能够帮助开发者动态地发现和加载符合特定条件的类,实现更灵活的功能扩展。通过它可以获取所有被特定注解标记的类,从而进行相应的业务逻辑处理。

JOOQ 是一个强大的 SQL 书写工具,它允许开发者以类型安全的方式编写 SQL 语句。在数据库操作中,JOOQ 通过代码生成器生成与数据库表对应的 Java 类,开发者可以使用这些类以面向对象的方式构建 SQL 查询,避免了传统 SQL 语句编写中的字符串拼接问题,提高了代码的可读性和维护性。在一个复杂的数据库查询场景中,使用 JOOQ 可以清晰地表达查询逻辑,减少 SQL 语法错误的出现。

 四、工具包的选择与应用策略

 

4.1 根据项目需求选择合适工具包

在 Java 开发的广阔领域中,选择合适的工具包对于项目的成功实施至关重要。不同的项目具有独特的需求,涵盖数据处理、网络请求、安全权限等多个方面,精准匹配工具包与项目需求,能够显著提升开发效率与质量。

对于数据处理需求,若项目涉及大量复杂的数据转换与计算,如金融数据处理、科学计算等领域,Google Guava 的强大集合操作与数学计算功能便派上用场。其提供的ImmutableCollection确保数据的不可变性,保证数据安全;BigIntegerMath类则为高精度数学计算提供了可靠支持。而 Hutool 的 Convert 工具类在基本数据类型与字符串、数组、日期对象等的转换上,以其简洁高效的方法,如Convert.toInt("123"),能快速满足常见数据转换需求。

在网络请求方面,当构建需要频繁与外部接口交互的应用,如电商系统调用第三方支付接口、新闻资讯应用获取外部新闻源时,Apache HttpClient 凭借其丰富的功能和良好的稳定性,成为理想选择。它支持多种请求方法,如 GET、POST、PUT、DELETE 等,能够轻松处理复杂的请求参数和响应数据。而 OkHttp 以其高效的性能和简洁的 API,在移动端开发中备受青睐,能有效优化网络请求的执行效率,提升应用的响应速度。

安全权限管理是企业级应用开发中不可忽视的环节。在需要严格控制用户访问权限的项目中,如企业内部管理系统、金融核心业务系统等,Apache Shiro 提供了全面的身份验证、授权、加密和会话管理功能。通过简洁的配置和 API,能够实现灵活的权限控制,确保系统资源的安全访问。Spring Security 则与 Spring 框架深度集成,为基于 Spring 的应用提供了强大的安全保护,在处理复杂的安全需求时表现出色。

在选择工具包时,深入分析项目的具体需求是关键。要全面考虑工具包的功能特性、性能表现、社区支持等因素,确保所选工具包能够无缝融入项目开发流程,为项目的顺利推进提供有力保障。

4.2 避免过度依赖与滥用

在 Java 开发过程中,工具包确实为开发者带来了诸多便利,但在享受其带来的高效与便捷时,需警惕过度依赖与滥用所带来的潜在问题。

过度依赖工具包可能导致代码可读性变差。当开发者大量使用工具包中复杂的方法和功能,而未对其内部实现机制有深入理解时,代码就如同一个黑匣子,对于其他开发者甚至是一段时间后的自己,都难以快速理解其逻辑。例如,在使用一些功能强大但使用频率较低的工具包方法时,若未添加详细的注释,后续维护人员很难从代码表面理解其意图和作用,这无疑增加了代码维护的难度。

过度依赖还可能引发维护困难的问题。一旦所依赖的工具包出现版本更新、漏洞修复或不再维护等情况,项目可能会受到严重影响。例如,若项目过度依赖某个特定版本的工具包,而该版本存在安全漏洞,当需要升级工具包版本时,可能会因为工具包接口的变化,导致大量代码需要修改,甚至可能引发新的兼容性问题,耗费大量的时间和精力进行调试和修复。

滥用工具包同样不可取。有些开发者为了追求代码的简洁,可能会在不适合的场景下强行使用工具包。例如,在处理简单的字符串拼接时,若使用复杂的字符串格式化工具包方法,虽然代码看似简洁,但实际上可能会引入不必要的性能开销。因为工具包的方法通常会进行一些额外的处理和逻辑判断,对于简单的操作来说,这些额外的操作反而会降低代码的执行效率。

为了避免过度依赖与滥用工具包,开发者应在使用前充分了解工具包的功能和适用场景。对于常用的工具包,要深入学习其内部实现原理,做到知其然且知其所以然。在编写代码时,要根据具体的业务需求和场景,合理选择工具包的使用方式。对于简单的功能实现,优先考虑使用原生的 Java 代码,确保代码的可读性和可维护性。同时,定期对项目中使用的工具包进行评估和审查,及时发现并解决可能存在的问题,确保项目的健康发展。

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

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

相关文章

Formality:参考设计/实现设计以及顶层设计

相关阅读 Formalityhttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm1001.2014.3001.5482​​​ Formality存在两个重要的概念&#xff1a;参考设计/实现设计和顶层设计&#xff0c;本文就将对此进行详细阐述。参考设计/实现设计是中两个重要的全局概念&am…

HBase实训:纸币冠字号查询任务

一、实验目的 1. 理解分布式数据存储系统HBase的架构和工作原理。 2. 掌握HBase表的设计原则&#xff0c;能够根据实际业务需求设计合理的表结构。 3. 学习使用HBase Java API进行数据的插入、查询和管理。 4. 实践分布式数据存储系统在大数据环境下的应用&#xff0c;…

C#轻松实现条形码二维码生成及识别

一、前言 大家好&#xff01;我是付工。 今天给大家分享一下&#xff0c;如何基于C#来生成并识别条形码或者二维码。 二、ZXing.Net 实现二维码生成的库有很多&#xff0c;我们这里采用的是http://ZXing.Net。 ZXing是一个开放源码的&#xff0c;用Java实现的多种格式的一…

重拾Python学习,先从把python删除开始。。。

自己折腾就是不行啊&#xff0c;屡战屡败&#xff0c;最近终于找到前辈教我 第一步 删除Python 先把前阵子折腾的WSL和VScode删掉。还是得用spyder&#xff0c;跟matlab最像&#xff0c;也最容易入手。 从VScode上搞python&#xff0c;最后安装到appdata上&#xff0c;安装插…

ASP.NET Core - 依赖注入(三)

ASP.NET Core - 依赖注入&#xff08;三&#xff09; 4. 容器中的服务创建与释放 4. 容器中的服务创建与释放 我们使用了 IoC 容器之后&#xff0c;服务实例的创建和销毁的工作就交给了容器去处理&#xff0c;前面也讲到了服务的生命周期&#xff0c;那三种生命周期中对象的创…

高通8255 Android STR 启动失败要因分析调查

目录 背景&#xff1a; 调查过程&#xff1a; 步骤1&#xff1a; slog2info | grep vmm_service 步骤2&#xff1a; slog2info | grep qvm 总结&#xff1a; 解决方案 背景&#xff1a; 调试高通8255 STR的STR过程中发现Android和QNX进入STR状态后&#xff0c;脱出STR时…

Linux操作命令之云计算基础命令

一、图形化界面/文本模式 ctrlaltF2-6 图形切换到文本 ctrlalt 鼠标跳出虚拟机 ctrlaltF1 文本切换到图形 shift ctrl "" 扩大 ctrl "-" 缩小 shift ctrl "n" 新终端 shift ctrl "t" 新标签 alt 1,…

LabVIEW桥接传感器配置与数据采集

该LabVIEW程序主要用于配置桥接传感器并进行数据采集&#xff0c;涉及电压激励、桥接电阻、采样设置及错误处理。第一个VI&#xff08;"Auto Cleanup"&#xff09;用于自动清理资源&#xff0c;建议保留以确保系统稳定运行。 以下是对图像中各个组件的详细解释&#…

面试题解析

1、写一个sed命令&#xff0c;修改/tmp/input.txt文件的内容 要求&#xff1a; 删除所有空行&#xff1b; 在非空行前面加一个"AAA"&#xff0c;在行尾加一个"BBB"&#xff0c;即将内容为11111的一行改为&#xff1a;AAA11111BBB 创造测试文件&#xff1a;…

合合信息名片全能王上架原生鸿蒙应用市场,成为首批数字名片类应用

长期以来&#xff0c;名片都是企业商务沟通的重要工具。随着企业数字化转型&#xff0c;相较于传统的纸质名片&#xff0c;数字名片对于企业成员拓展业务、获取商机、提升企业形象等方面发挥着重要作用。近期&#xff0c;合合信息旗下名片全能王正式上线原生鸿蒙应用市场&#…

【日志篇】(7.6) ❀ 01. 在macOS下刷新FortiAnalyzer固件 ❀ FortiAnalyzer 日志分析

【简介】FortiAnalyzer 是 Fortinet Security Fabric 安全架构的基础&#xff0c;提供集中日志记录和分析&#xff0c;以及端到端可见性。因此&#xff0c;分析师可以更有效地管理安全状态&#xff0c;将安全流程自动化&#xff0c;并快速响应威胁。具有分析和自动化功能的集成…

《汽车维修技师》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答&#xff1a; 问&#xff1a;《汽车维修技师》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的正规学术期刊。 问&#xff1a;《汽车维修技师》级别&#xff1f; 答&#xff1a;省级。主管单位&#xff1a;北方联合出版传媒&#xff08;…

【OpenCV(C++)快速入门】--opencv学习

0 配置环境 配置环境网上很多资料&#xff0c;这里就不赘述了。 笔者使用的是VS2022opencv4.9.0 测试配置环境 // 打开摄像头样例 #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/imgcodecs/imgcod…

Python编程与在线医疗平台数据挖掘与数据应用交互性研究

一、引言 1.1 研究背景与意义 在互联网技术飞速发展的当下,在线医疗平台如雨后春笋般涌现,为人们的就医方式带来了重大变革。这些平台打破了传统医疗服务在时间和空间上的限制,使患者能够更加便捷地获取医疗资源。据相关报告显示,中国基于互联网的医疗保健行业已进入新的…

网安快速入门之Windows命令

在Windows中 我们今天介绍几个命令&#xff1a; help copy dir cd type del ipconfig net netstat tasklist sc1. help 显示命令的帮助信息。或者显示Windows内置命令。 常用参数&#xff1a; <命令>&#xff1a;查看指定命令的帮助。 示例&#xff1a;help copy 显…

python convert.py -s Rubble

E0222 12:08:50.144686 1326795 logging.cc:56] [option_manager.cc:813] Check failed: ExistsDir(*image_path) E0222 12:08:50.144773 1326795 option_manager.cc:879] Invalid options provided. ERROR:root:Feature extraction failed with code 256. Exiting.在运行pytho…

[BrainShadow-V1] VR头戴设备统计报告

Brain-Shadow-V1 EventVR headsetsReported byXiao enDate2025/01/15Version1.0 HTC Vive Pro 2 Pro HTC Vive Pro 2 是一款高端虚拟现实头显&#xff0c;配备双 2.5K 显示屏&#xff0c;组合分辨率达到 48962448&#xff0c;提供 120 的视场角和 120Hz 的刷新率。该设备支持…

多监控m3u8视频流,怎么获取每个监控的封面图(纯前端)

文章目录 1.背景2.问题分析3.解决方案3.1解决思路3.2解决过程3.2.1 封装播放组件3.2.2 隐形的视频div3.2.3 截取封面图 3.3 结束 1.背景 有这样一个需求&#xff1a; 给你一个监控列表&#xff0c;每页展示多个监控&#xff08;至少12个&#xff0c;m3u8格式&#xff09;&…

Golang Gin系列-2:搭建Gin 框架环境

开始网络开发之旅通常是从选择合适的工具开始的。在这个全面的指南中&#xff0c;我们将引导你完成安装Go编程语言和Gin框架的过程&#xff0c;Gin框架是Go的轻量级和灵活的web框架。从设置Go工作空间到将Gin整合到项目中&#xff0c;本指南是高效而强大的web开发路线图。 安装…

日志收集Day001

1.ElasticSearch 作用&#xff1a;日志存储和检索 2.单点部署Elasticsearch与基础配置 rpm -ivh elasticsearch-7.17.5-x86_64.rpm 查看配置文件yy /etc/elasticsearch/elasticsearch.yml&#xff08;这里yy做了别名&#xff0c;过滤掉空行和注释行&#xff09; yy /etc/el…