Java面试题03
1.Java容器都有哪些
Java提供了丰富的容器类,包括Collection接口的实现类(如List、Set等)和Map接口的实现类(如HashMap、TreeMap等),它们分别用于存储不同类型的元素和键值对。
Java容器主要分为两种类型:Java集合容器和Java Web容器。
1.1 Java集合容器
Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection 接口又有三种子类型,List、Set 和 Queue,实现了这些接口的容器类可以用来存储数据。
1.1.1 List(如 ArrayList、LinkedList):List 是有序集合,会按照元素插入的顺序保存元素。并且它允许包含重复元素。
1.1.2 Set(如 HashSet、TreeSet):Set 是一种不包含重复的元素的集合。它最多包含一个 null 元素。
1.1.3 Queue(如 PriorityQueue、ArrayDeque):Queue 是一种特殊的线性表,只允许在列表的前端(front)进行删除操作,而在列表的尾端(rear)进行插入操作。
1.1.4 Map(如 HashMap、TreeMap):Map 是一种对象,它存储的是键/值对。键和值都是对象。在 Map 中键是不能重复的,但是值可以。
1.2 Java Web容器
Java Web容器,或者说Servlet容器,是一种运行Web应用的地方,它为Web应用提供运行环境。目前流行的Java Web容器有:Tomcat、Jetty、GlassFish等。
2.Collection 和 Collections 有什么区别?
Collection是Java集合框架的根接口,定义了基本的集合操作方法,如添加、删除、遍历 等。Collections是一个包含静态方法的工具类,提供了一些集合操作的实用方法,如排序、查找 等
Collection 和 Collections 都是Java集合框架中的一部分,但是它们之间有一些重要的区别。
- 类型:Collection 是集合类的上层接口,它是一个单数形式的集合;而 Collections 是一个帮助类,它是集合框架的“外包装”,用于存储并处理集合。
- 功能:Collections 类包含一些对集合的排序、搜索以及序列化的操作。它是一个包装类,可以用来对集合进行各种操作,例如排序、搜索等。而 Collection 接口是Set接口和List接口的父接口,它定义了一些基本的操作,例如添加、删除元素等。
总结来说,Collection 和 Collections 的主要区别在于类型和功能。Collection 是集合的接口,定义了集合的基本操作;而 Collections 是帮助类,提供了对集合进行排序、搜索和序列化等操作的方法。
3.List、Set、Map 之间的区别是什么?
List是有序集合,允许存储重复元素,可以通过索引访问元素;Set是无序集合,不允许存储重复元素;Map是键值对的映射,每个键都唯一对应一个值。
List、Set、Map 是Java中常用的三种集合类型,它们之间有一些区别:
- 结构特点:List 和 Set 是存储单列数据的集合,Map 是存储键和值这样的双列数据的集合。
- 元素重复性:List允许有重复的元素;Set不允许元素重复;Map允许有重复键,但不允许有重复的键值对。
- 元素有序性:List及其所有实现类保持了每个元素的插入顺序;Set中的元素都是无序的;Map中的元素也是无序的。
4.HashMap 和 Hashtable 有什么区别?
HashMap是非线程安全的,允许有null键和值,效率较高;Hashtable是线程安全的,不允 许有null键和值,效率相对较低。
HashMap 和 Hashtable 都是Java中的Map接口的两种实现,它们之间有以下区别:
- 性能:,如果只是要获取一个键对应的值,无论是HashMap还是Hashtable,性能都是O(1)。但在插入或删除操作时,由于Hashtable需要创建新的键值对,而HashMap不需要(如果键已存在),因此在这方面,HashMap的性能可能会稍微优于Hashtable。
- 线程安全性:Hashtable 是线程安全的,而 HashMap 不是线程安全的。
- Null key and null value:HashMap允许使用null作为键和值,而Hashtable不允许使用null作为键或值。
- Size and iteration time:Hashtable和HashMap都使用哈希表(hash table)实现,但是Hashtable的size和迭代时间都是固定的,而HashMap的size和迭代时间是不固定的。
HashMap
和 Hashtable
都是 Java 中用于存储 Key-Value 对的集合,但是它们之间存在几个主要的区别:
- 线程安全性:
Hashtable
是线程安全的,它在每个公开的方法(例如get
,put
,remove
等)上都有同步控制,这意味着在多线程环境下,你可以安全地使用Hashtable
。相反,HashMap
不是线程安全的,如果在多线程环境下使用,需要自己处理同步问题。 - 性能:因为
Hashtable
在每个方法上都有同步控制,所以它的性能会比HashMap
低。在单线程环境下,HashMap
的性能通常会比Hashtable
高得多。 - 允许的 key 值:
HashMap
允许使用null
作为 key,而Hashtable
不允许。 - 遍历:
Hashtable
继承自Dictionary
类,因此可以使用Enumeration
来遍历键和值。而HashMap
继承自AbstractMap
类,使用Iterator
来遍历。 - 初始容量和负载因子:
HashMap
在创建时没有设定初始容量和负载因子,但这两个参数在Hashtable
中是必需的。 - NullPointerException:Hashmap是允许key和value为null值的,用containsValue和containsKey方法判断是否包含对应键值对;HashTable键值对都不能为空,否则包空指针异常。
- 方法返回值:如果尝试获取不存在的 key 的值,
HashMap
中的get()
方法返回null
,而Hashtable
返回nullKey()
。 - 遍历顺序:
HashMap
不保证映射的顺序,特别是它不保证该顺序恒久不变。相比之下,Hashtable
的顺序是固定的,因为它的迭代器按照键的插入顺序进行迭代。
总的来说,如果你在多线程环境下工作并且需要一个线程安全的映射,那么应该使用 Hashtable
。如果你在单线程环境下工作并且需要高性能,那么应该使用 HashMap
。
5.如何决定使用 HashMap 还是 TreeMap?
如果需要无序、高效的键值对存储,可使用HashMap;如果需要按键有序存储,可使用 TreeMap,它会根据键的自然顺序或指定的比较器进行排序
- 数据结构:HashMap 是基于哈希表实现的,而 TreeMap 是基于红黑树(一种自平衡二叉查找树)实现的。
- 性能:在单线程环境下,HashMap 的性能通常优于 TreeMap,因为 HashMap 的 get 和 put 操作的时间复杂度为 O(1),而 TreeMap 的 get 和 put 操作的时间复杂度为 O(log n)。但在多线程环境下,TreeMap 的性能可能更优,因为它支持对数据的并发访问。
- Null keys and null values:HashMap 允许使用 null 作为键(key)和值(value),而 TreeMap 不允许使用 null 作为键(key),但可以使用 null 作为值(value)。
- Order:TreeMap 中的元素是有序的,即按照键(key)的升序排序。因此,如果你需要有序的数据结构,应该选择 TreeMap。而 HashMap 不保证元素的顺序。
- Size:如果需要存储大量的数据并且需要快速查找,HashMap 可能是更好的选择,因为它的空间复杂度为 O(n),而 TreeMap 的空间复杂度为 O(n log n)。
- 线程安全:HashMap 不是线程安全的,而 TreeMap 是线程安全的。如果多个线程同时修改 TreeMap,它仍然保持一致性和线程安全。
6.说一下 HashMap 的实现原理?
HashMap基于哈希表实现,内部使用一个数组来存储Entry对象,通过键的哈希码确定数组 位置,当多个键映射到同一个位置时,使用链表或红黑树解决冲突。
HashMap 是 Java 集合框架中的重要组成部分,它基于哈希表(Hash table)实现。以下是 HashMap 的基本实现原理:
- 基本数据结构:HashMap 的内部主要由数组实现,这个数组的元素是链表或红黑树(从 Java 8 开始)的实例。链表用于解决哈希冲突,红黑树则用于当链表长度过长(超过一定阈值)时,将链表转化为红黑树以提高性能。
- 哈希函数:HashMap 使用哈希函数(hash function)将键(key)映射到数组的索引位置。哈希函数的设计对 HashMap 的性能至关重要。理想情况下,哈希函数应当将键均匀地映射到数组的各个位置,从而最大限度地减少哈希冲突。
- 哈希冲突:尽管我们希望哈希函数能将键均匀地映射到数组的各个位置,但实际情况中,不同的键可能会被映射到相同的位置,这就是所谓的哈希冲突。HashMap 使用链表或红黑树来解决哈希冲突。当两个或更多的键哈希到同一位置时,它们在链表或红黑树中相遇并解决冲突。
- 扩容与再哈希:当 HashMap 中的元素数量达到一定的阈值(默认为数组长度的 0.75 倍)时,HashMap 会进行扩容(rehashing)。扩容会导致所有元素重新计算哈希值并重新放置到新的数组中。这是一个比较耗时的操作,因此,合理设定初始容量可以减少扩容的频率,从而提高 HashMap 的性能。
- 遍历:HashMap 提供了遍历所有元素的方法,如
keySet()
和values()
。在遍历过程中,HashMap 会按照其内部数据结构的顺序返回元素,但这个顺序并不是按照插入顺序或者访问顺序,而是根据哈希值确定的。
以上就是 HashMap 的基本实现原理。需要注意的是,由于 HashMap 的内部实现细节可能会因 Java 版本的不同而有所差异,因此在实际使用中,应当根据具体情况选择合适的数据结构和参数设置。
7.说一下 HashSet 的实现原理
HashSet基于HashMap实现,它实际上是在HashMap的键部分存储元素,而值部分存储一 个常量。
- 数据结构:HashSet 底层实际上是一个 HashMap,它使用一个数组来存储元素,这个数组的每个元素都是一个链表。
- 元素存储:HashSet 中的元素都存储在 HashMap 的 key 上,而 value 则是一个固定的对象(private static final Object PRESENT = new Object())。这是因为 HashSet 不允许有重复元素,所以所有的元素都是通过唯一的 key 来标识的。
- 添加元素:当我们调用 add 方法时,实际上是调用了底层 HashMap 的 put 方法。如果 key 已经存在,put 方法会修改对应的 value;如果 key 不存在,put 方法会插入新的 key-value 对应关系。
- 迭代顺序:HashSet 不保证元素的迭代顺序,特别是不保证该顺序恒久不变。这是因为 HashMap 的实现中,链表元素的顺序并不是按照插入顺序或者访问顺序排列的,而是根据 key 的哈希值确定的。
- Null 元素:HashSet 允许使用 null 作为元素。
总的来说,HashSet 的实现充分利用了 HashMap 的特性,通过将元素作为 HashMap 的 key 来存储,并利用哈希表的高效查找特性来实现元素的快速添加和查找。同时,由于 HashMap 中 value 的设计,使得 HashSet 不需要担心重复元素的插入问题。
8.ArrayList 和 LinkedList 的区别是什么?
ArrayList是基于动态数组实现,通过索引访问元素速度快,插入和删除元素较慢; LinkedList是基于双向链表实现,插入和删除元素速度快,但访问元素较慢
ArrayList 和 LinkedList 是 Java 中两种常用的 List 类型,它们在内部实现方式和使用场景上存在一些重要的区别:
- 底层实现:ArrayList 是基于动态数组实现的,而 LinkedList 是基于双向链表实现的。
- 内存空间:对于 ArrayList,当元素数量超过数组默认的大小(例如,对于 int 类型,默认为10)时,ArrayList 会自动进行扩容,可能涉及到内存空间的连续申请和复制,因此对于大量数据的随机访问效率较高。对于 LinkedList,每个节点都会存储前一个和后一个节点的引用,所以内存空间利用率相对较低,但是它在插入和删除元素时的效率较高。
- 插入和删除:由于 ArrayList 基于数组实现,因此在列表的中间位置插入和删除元素效率较低,因为可能需要移动大量的元素。而 LinkedList 在列表的中间位置插入和删除元素效率较高,因为它只需更改一些节点的引用即可。
- 遍历:两者的遍历速度都很快,因为它们都支持 for-each 循环。但是,如果需要逆序遍历,LinkedList 的效率会更高。
- 容量增长:当 ArrayList 的元素数量超过其容量时,它通常会创建一个新的数组并复制原有的元素到新的数组中。这个过程可能会导致性能下降。LinkedList 则不需要这样做,因此在大规模数据操作时,LinkedList 可能更优。
- 线程安全性:两者都不是线程安全的。如果多个线程同时修改 ArrayList 或 LinkedList,可能会导致数据不一致。如果需要线程安全,可以考虑使用 CopyOnWriteArrayList 或者使用并发库中的 ConcurrentLinkedQueue。
- 应用场景:ArrayList 更适合查询操作(即查找、获取),因为其基于数组实现,随机访问效率高。LinkedList 更适合插入和删除操作,因为其基于链表实现,插入和删除效率高。
总的来说,选择 ArrayList 还是 LinkedList 取决于你的具体需求和使用场景。如果你需要频繁地访问元素,那么 ArrayList 可能是更好的选择。如果你需要频繁地插入和删除元素,那么 LinkedList 可能更适合你。
9.如何实现数组和 List 之间的转换?
可以使用Arrays.asList()方法将数组转换为List,或者使用ArrayList的构造函数将List转换为 数组。
1. 数组转 List:
你可以使用 Arrays.asList()
方法将数组转换为 List。例如:
String[] array = {"a", "b", "c"}; | |
List<String> list = Arrays.asList(array); |
需要注意的是,通过 Arrays.asList()
返回的 List 是一个固定大小的 List,它直接引用原数组,所以原数组改变时,这个 List 也会跟着改变。它并不是一个可改变的 List。
如果你需要一个可以修改的 List,可以使用 ArrayList
的构造方法:
String[] array = {"a", "b", "c"}; | |
List<String> list = new ArrayList<>(Arrays.asList(array)); |
这样得到的 List 就可以被修改,并且不会影响原数组。
2. List 转数组:
你可以使用 List.toArray()
方法将 List 转换为数组。例如:
List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c")); | |
String[] array = new String[list.size()]; | |
list.toArray(array); |
在这个例子中,我们首先创建了一个大小为 List 大小的数组,然后调用 List.toArray()
方法将 List 的元素填入数组。需要注意的是,这里数组的大小必须和 List 的大小一样,否则会抛出 ArrayStoreException
。
10.ArrayList 和 Vector 的区别是什么?
ArrayList 和 Vector 是 Java 中两种常用的动态数组实现,它们都实现了 List 接口,但在使用和特性上有一些区别:
- 同步性(Synchronization):这是 ArrayList 和 Vector 最主要的区别。Vector 是同步的,这意味着它是线程安全的,但这也意味着在单线程环境下,由于线程同步的开销,它的性能可能比非同步的 ArrayList 要低。而 ArrayList 是非同步的,它在单线程环境下可以提供更高的性能。
- 性能:由于同步性,ArrayList 在单线程环境下的性能通常优于 Vector。但是,如果你需要线程安全,并且性能不是关键因素,那么 Vector 也可以是一个选择。
- 初始化容量和增长:当创建 ArrayList 或 Vector 时,你可以指定初始容量。Vector 的初始容量是固定的,而 ArrayList 的初始容量可以改变。当 ArrayList 的元素数量超过其容量时,它会自动进行扩容。
- 使用场景:ArrayList 和 Vector 都可以用于存储和操作数组的元素,但它们的适用场景不完全相同。如果你需要一个可以快速、随机访问的列表,并且不需要考虑线程安全问题,那么 ArrayList 是一个更好的选择。如果你需要一个线程安全的列表,或者需要存储大量的数据并且希望内存使用效率更高,那么 Vector 可能更适合你。
- 遗留与现代:Vector 被认为是较旧的数据结构,现在较少使用。ArrayList 是一个更现代的选择,被认为更灵活、更强大、更易于使用。
相关文章:
Java面试题03
1.Java容器都有哪些 Java提供了丰富的容器类,包括Collection接口的实现类(如List、Set等)和Map接口的实现类(如HashMap、TreeMap等),它们分别用于存储不同类型的元素和键值对。 Java容器主要分为两种类型&a…...

【操作系统】测试二
文章目录 单选题判断题填空题 单选题 在操作系统中,进行资源分配、调度和管理的最小独立单位是()。 【 正确答案: C】 A. 作业 B. 程序 C. 进程 D. 用户 进程在发出I/O请求后,可能导致下列哪种进程状态演变? 【 正确答…...
大厂面试题-索引有哪些缺点以及具体有哪些索引类型
第一个,索引的优缺点 优点: 1、合理的增加索引 ,可以提高数据查询的效率 ,减少查询时间 2、有一些特殊的索引 ,可以保证数据的完整性 ,比如唯一索引 缺点: 1、创建索引和维护索引需要消耗时间…...
Vue真实技术面试题解析【兄弟组件、vue-router、增量部署】
兄弟组件的传值方式,有两种方式,把你尽可能知道的告诉我 我的答案:使用父组件传值 和 状态管理传值 使用事件总线(Event Bus):创建一个空的 Vue 实例作为事件总线,在其中定义事件和对应的处理函…...

响应式生活常识新闻博客资讯网站模板源码带后台
模板信息: 模板编号:30483 模板编码:UTF8 模板分类:博客、文章、资讯、其他 适合行业:博客类企业 模板介绍: 本模板自带eyoucms内核,无需再下载eyou系统,原创设计、手工书写DIVCSS&a…...

获取AAC音频的ADTS固定头部信息
文章目录 前言一、AAC音频中的ADTS二、解析ADTS信息1.标准文档中介绍2.解析3.采样率索引和值4.下载AAC标准文档 前言 调试嵌入式设备中播放aac音频的过程中,了解了aac音频格式,记录在此,防止遗忘。 一、AAC音频中的ADTS ADTS(Audi…...
二分查找--C++实现
1. 简介 满足有序性,每次排除一半的可能性。 2. 实现 2.1 手写 int bin_search(vector<int> &arr,int v) {int hi arr.size() - 1;int lo 0;while ( lo < hi){int mid (lo hi) >> 1;if (arr[mid] < v)lo mid 1;elsehi mid - 1;}re…...
计算机毕设 基于机器学习的文本聚类 - 可用于舆情分析
文章目录 0 简介1 项目介绍1.1 提取文本特征1.2 聚类算法选择 2 代码实现2.1 中文文本预处理2.2 特征提取2.2.1 Tf-idf2.2.2 word2vec 2.3 聚类算法2.3.1 k-means 2.3.2 DBSCAN2.4 实现效果2.4.1 tf-idf k-means聚类结果2.4.2 word2vec k-means 聚类结果 最后 0 简介 今天学…...

uniApp获取当前位置经纬度
以下是使用uni.getLocation获取当前位置的示例代码: 调用uni.getLocation方法获取当前位置信息 uni.getLocation({type: wgs84, // 坐标类型,默认为wgs84,可选的值为gcj02和bd09llsuccess: res > {// 获取成功,经度和纬度在r…...

this.$message提示内容添加换行
0 效果 1 代码 let msgArr [只允许上传doc/docx/xls/xlsx/pdf/png/jpg/bmp/ppt/pptx/rar/zip格式文件,且单个文件大小不能超过20MB,已过滤无效的文件] let msg msgArr.join(<br/>) this.$message({dangerouslyUseHTMLString: true,message: msg,type: warning })...

“三大阶段稳定性测试”筑牢长安链信任基石
前言 随着长安链应用生态的不断丰富、面对的应用场景更加多元,稳定性测试在长安链测试流程中占到越来越重要的位置。本文将介绍长安链稳定性测试的发展历程及如何通过三大阶段稳定性测试应对不断出现的复杂的商业需求,筑牢长安链信任基石。 功能测试和…...

手把手教你如何扩展(破解)mybatisplus的sql生成 | 京东云技术团队
mybatisplus 的常用CRUD方法 众所周知,mybatisplus提供了强大的代码生成能力,他默认生成的常用的CRUD方法(例如插入、更新、删除、查询等)的定义,能够帮助我们节省很多体力劳动。 他的BaseMapper中定义了这些常用的C…...

Spring Data JPA 项目配置与QueryDSL集成
一、说明 Spring Data JPA通过Spring Initializer创建时勾选相关依赖即可引入,QueryDSL需要单独引入。Spring JPA针对QueryDSL有比较好的兼容性,可以实现优雅的SQL构建。 二、设置JPA默认配置(yaml格式) spring:jpa:hibernate:…...

UE5数字孪生制作-数据篇(二) - 数据处理
1.卫星图与DEM高度图坐标一致处理 https://www.bilibili.com/video/BV1op4y1V71r?p4&vd_source707ec8983cc32e6e065d5496a7f79ee6 坐标系的调整 如何使用临时图层,对其他数据层进行裁切 (1)创建临时图层 (2)在临…...

Java 设计模式——享元模式
目录 1.概述2.结构3.实现3.1.抽象享元3.2.具体享元3.3.享元工厂3.4.测试 4.优缺点5.使用场景6.JDK 源码解析——Integer 类 1.概述 (1)享元模式 (Flyweight Pattern) 是一种结构型设计模式,主要通过共享对象来减少系统中的对象数量ÿ…...
再扩国产化适配版图,长安链新增数据库兼容性认证
基础软件的自主可控影响着国家信息安全与产业技术发展是否受制于人。实现真正长期可持续的技术自主可控,需要再进一步的是让国产化信息系统生态更有”活性“,基础软件之间、基础软件与其他国产上层应用的互相兼容、互相促进,共同繁荣发展&…...

MES系统数据集成系统源码
MES系统数据集成系统源码 1 MES的生产计划管理综述 生产计划的管理在MES系统中是非常重要的。我们知道,一般的情况下,企业的生产计划是由上层管理系统ERP来完成,那么MES中的生产计划和ERP的生产计划的不同点在于: ERP的生产计划…...
关于道一云-七巧使用感悟
低代码,开发快速,缺点组件比较少但能满足大多数场景,如果需要的话得自己造,官方的技术群里面普遍问题响应就很快,技术文档这个会抽风,有些代码就改个筛选条件本地死活运行不了,去官网那里问他们…...

去中心化数据云项目Oort主网即将上线
备受期待的去中心化数据云项目Oort,今日已通过官方X账号官宣,将于纽约时间11月27日正式上线主网Olympus Protocol。届时,用户也能够通过Oort的Ale Wallet钱包和开发者API使用主网,并可通过OORT浏览器查询交易和合约,开…...
CSS知识点梳理(一)
CSS 是层叠样式表(Cascading Style Sheets)的缩写,它是一种用于描述 HTML 或 XML(包括如 SVG、MathML 等派生语言)文档呈现的语言。CSS 可以用来控制文档的布局、颜色、字体等外观属性。 CSS 的主要特点包括ÿ…...

利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...

苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...