Java集合基础——针对实习面试

目录

  • Java集合基础
    • 什么是Java集合?
    • 说说List,Set,Queue,Map的区别?
    • 说说List?
    • 说说Set?
    • 说说Map?
    • 说说Queue?
    • 为什么要用集合?
    • 如何选用集合?

Java集合基础

在这里插入图片描述

什么是Java集合?

Java集合(Java Collections)是Java中提供的一种容器,用于存储和管理一组对象。Java集合框架(Java Collections Framework,JCF)提供了一套标准的接口和实现,使得开发者可以方便地实现各种集合操作,如添加、删除、遍历等。

Java集合主要包含以下几类:

  1. Collection接口:这是所有集合类的根接口,它包含了一些基本的操作,如添加(add)、删除(remove)、遍历(iterator)等。

  2. List接口:它是Collection的子接口,代表一个有序集合,可以包含重复的元素。常见的实现类有ArrayListLinkedListVector等。

  3. Set接口:它也是Collection的子接口,代表一个无序集合,不包含重复的元素。常见的实现类有HashSetLinkedHashSetTreeSet等。

  4. Map接口:它不是Collection的子接口,而是一个独立的接口,用于存储键值对。常见的实现类有HashMapLinkedHashMapTreeMapHashtable等。

  5. Queue接口:代表一种队列集合,用于先进先出的操作。常见的实现类有LinkedListPriorityQueue等。

Java集合框架的主要优势在于提供了一套统一的接口,使得不同的集合类型可以很容易地互换使用。此外,Java集合框架还提供了一些辅助类,如CollectionsArrays,用于提供对集合进行操作的静态方法,如排序、搜索、复制等。

说说List,Set,Queue,Map的区别?

当然,让我来详细解释一下ListSetQueueMap这四种类型的集合以及它们之间的主要区别:

List(列表)

  • 有序集合List中的元素按照插入的顺序保存
  • 可重复List允许重复的元素。
  • 索引访问:可以通过索引快速访问元素(例如,通过get(int index))。
  • 实现类:常见的实现类有ArrayListLinkedListVector

Set(集合)

  • 无序集合Set中的元素不保证有序
  • 不可重复Set不允许重复的元素,如果尝试添加重复的元素,它将被忽略。
  • 无索引访问Set不支持通过索引访问元素。
  • 实现类:常见的实现类有HashSetLinkedHashSetTreeSet

Queue(队列)

  • 先进先出(FIFO)Queue是一种特殊的集合,用于按照特定的顺序(通常是FIFO)处理元素。
  • 可重复Queue允许重复的元素。
  • 实现类:常见的实现类有LinkedListPriorityQueue

Map(映射)

  • 键值对集合Map存储的是键值对,每个键映射到一个值。
  • 键唯一Map中的键是唯一的,每个键只能映射到一个值。
  • 无索引访问Map不支持通过索引访问元素。
  • 实现类:常见的实现类有HashMapLinkedHashMapTreeMapHashtable

说说List?

List 是 Java 集合框架中的一个接口,它继承自 Collection 接口。List 接口的特点是它允许我们按索引来存储和访问元素,并且允许元素重复。以下是 List 接口的一些关键特性和实现类:

关键特性

  1. 有序性List 中的元素按照插入的顺序保存,这意味着元素的顺序是有意义的。
  2. 可重复List 允许存储重复的对象。
  3. 随机访问:可以通过索引快速访问列表中的元素,时间复杂度为 O(1)。
  4. 元素插入:可以在列表的任何位置插入元素,也可以在列表的末尾添加元素。
  5. 元素删除:可以删除列表中的任何元素,包括删除特定索引位置的元素。

实现类
List 接口有多种实现,每种实现都有其特定的用途和性能特点:

  1. ArrayList

    • 基于动态数组实现。
    • 支持快速随机访问
    • 插入和删除操作可能较,因为可能需要数组扩容或元素移动。
  2. LinkedList

    • 基于双向链表实现。
    • 不支持快速随机访问
    • 插入和删除操作较,因为只需改变节点的链接。
  3. Vector

    • 类似于 ArrayList,但它是同步的。
    • 由于同步操作,通常比 ArrayList 慢。
  4. CopyOnWriteArrayList

    • 线程安全的 ArrayList 实现。
    • 在进行修改操作时,会复制整个底层数组,因此读操作不需要加锁,适合读多写少的并发场景。

使用场景

  • ArrayList:当你需要一个可以随机访问的列表,并且插入和删除操作不是主要操作时,这是一个很好的选择。
  • LinkedList:当你需要频繁地在列表中插入删除元素,尤其是在列表的开头或中间操作时,使用 LinkedList 更为合适。
  • Vector:在需要线程安全的列表时可以使用,但通常推荐使用 Collections.synchronizedList 包装 ArrayList 来获得更好的性能。
  • CopyOnWriteArrayList:适用于读多写少的并发环境,因为它通过复制整个底层数组来避免并发修改异常。

示例代码

import java.util.ArrayList;
import java.util.List;public class ListExample {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("Apple");list.add("Banana");list.add("Cherry");// 访问元素System.out.println("First element: " + list.get(0));// 遍历列表for (String fruit : list) {System.out.println(fruit);}// 删除元素list.remove("Banana");// 检查列表是否包含某个元素if (list.contains("Cherry")) {System.out.println("List contains Cherry");}}
}

在 Java 面试中,了解 List 接口及其实现类的特点和使用场景是非常重要的,这有助于你根据具体需求选择最合适的集合类型。

说说Set?

Set 是 Java 集合框架中的一个接口,它继承自 Collection 接口。Set 接口的特点是它不允许重复的元素,并且不保证集合的迭代顺序;特别是它不保证该顺序恒久不变。以下是 Set 接口的一些关键特性和常用的实现类:

关键特性

  1. 无序性Set 中的元素不按特定顺序存储,遍历顺序可能与插入顺序不同。
  2. 不可重复Set 不允许重复的元素,如果尝试添加重复的元素,它将被忽略。
  3. 无索引访问Set 不支持通过索引来访问元素。
  4. 元素唯一性:每个元素必须是唯一的,这通常是通过对象的 equals()hashCode() 方法来判断的。

实现类
Set 接口有多种实现,每种实现都有其特定的用途和性能特点:

  1. HashSet

    • 基于哈希表实现。
    • 不保证集合的迭代顺序;特别是它不保证该顺序恒久不变。
    • 允许空元素。
    • 对于快速查找,插入和删除操作,性能通常很好。
  2. LinkedHashSet

    • 类似于 HashSet,但是维护了一个双向链表,可以按照插入顺序或访问顺序排序。
    • HashSet 稍慢,因为需要维护链表。
  3. TreeSet

    • 基于红黑树实现。
    • 元素会按照自然排序(自然顺序)或者根据创建 TreeSet 时提供的比较器进行排序。
    • 不允许空元素
    • 对于需要排序的场景,性能较好。
  4. CopyOnWriteArraySet

    • 线程安全的 Set 实现。
    • 在进行修改操作时,会复制整个底层数组,因此读操作不需要加锁,适合读多写少的并发场景。

使用场景

  • HashSet:当你需要一个不允许重复元素的集合,并且不关心元素的顺序时,这是一个很好的选择。
  • LinkedHashSet:当你需要保持元素插入的顺序,或者按照访问顺序排序时,可以使用 LinkedHashSet
  • TreeSet:当你需要元素有序,并且可能需要快速查找、插入和删除操作时,可以使用 TreeSet
  • CopyOnWriteArraySet:适用于读多写少的并发环境,因为它通过复制整个底层数组来避免并发修改异常。

示例代码

import java.util.Set;
import java.util.HashSet;public class SetExample {public static void main(String[] args) {Set<String> set = new HashSet<>();set.add("Apple");set.add("Banana");set.add("Cherry");set.add("Apple"); // 尝试添加重复元素,不会被加入// 遍历集合for (String fruit : set) {System.out.println(fruit);}// 检查集合是否包含某个元素if (set.contains("Banana")) {System.out.println("Set contains Banana");}}
}

在 Java 面试中,了解 Set 接口及其实现类的特点和使用场景是非常重要的,这有助于你根据具体需求选择最合适的集合类型。

说说Map?

Map 是 Java 集合框架中的一个接口,它提供了一种存储键值对(key-value pairs)的方式。Map 接口不是 Collection 接口的子接口,但它是 Java 集合框架的一部分。以下是 Map 接口的一些关键特性和常用的实现类:

关键特性

  1. 键值对存储Map 存储的是键值对,每个键映射到一个值
  2. 键唯一性Map 中的键是唯一的,每个键只能映射到一个值。
  3. 值可重复Map 允许键重复,但键对应的值可以重复。
  4. 无序性Map 中的元素没有特定的顺序。
  5. 键和值的空值Map 允许键和值为空,但空键只能有一个(如果实现允许的话),空值可以有多个。

实现类
Map 接口有多种实现,每种实现都有其特定的用途和性能特点:

  1. HashMap

    • 基于哈希表实现。
    • 不保证映射的顺序,特别是它不保证该顺序恒久不变。
    • 允许键和值为
    • 对于快速查找,插入和删除操作,性能通常很好。
  2. LinkedHashMap

    • 类似于 HashMap,但是维护了一个双向链表,可以按照插入顺序或访问顺序排序。
    • HashMap 稍慢,因为需要维护链表。
  3. TreeMap

    • 基于红黑树实现。
    • 键会按照自然排序(自然顺序)或者根据创建 TreeMap 时提供的比较器进行排序。
    • 不允许键和值为空。
    • 对于需要排序的场景,性能较好。
  4. Hashtable

    • 类似于 HashMap,但是它是线程安全的。
    • 不允许键和值为空。
    • 由于同步操作,通常比 HashMap 慢。
  5. ConcurrentHashMap

    • 线程安全的 HashMap 实现。
    • 通过分段锁的概念来提高并发性能。

使用场景

  • HashMap:当你需要一个简单的键值对映射,并且不关心元素的顺序时,这是一个很好的选择。
  • LinkedHashMap:当你需要保持键值对的插入顺序或访问顺序时,可以使用 LinkedHashMap
  • TreeMap:当你需要键有序的映射,并且可能需要快速查找、插入和删除操作时,可以使用 TreeMap
  • Hashtable:在需要线程安全的映射时可以使用,但通常推荐使用 ConcurrentHashMap 来获得更好的性能。
  • ConcurrentHashMap:适用于高并发的环境,因为它通过分段锁的概念来减少锁的粒度。

示例代码

import java.util.Map;
import java.util.HashMap;public class MapExample {public static void main(String[] args) {Map<String, Integer> map = new HashMap<>();map.put("Apple", 1);map.put("Banana", 2);map.put("Cherry", 3);// 访问元素System.out.println("Value for Apple: " + map.get("Apple"));// 遍历映射for (Map.Entry<String, Integer> entry : map.entrySet()) {System.out.println(entry.getKey() + " = " + entry.getValue());}// 检查映射是否包含某个键if (map.containsKey("Banana")) {System.out.println("Map contains key Banana");}// 检查映射是否包含某个值if (map.containsValue(3)) {System.out.println("Map contains value 3");}}
}

在 Java 面试中,了解 Map 接口及其实现类的特点和使用场景是非常重要的,这有助于你根据具体需求选择最合适的集合类型。

说说Queue?

Queue 是 Java 集合框架中的一个接口,它继承自 Collection 接口。Queue 主要用于按照先进先出(FIFO,First-In-First-Out)的原则处理元素。以下是 Queue 接口的一些关键特性和它的实现类:

关键特性

  1. 先进先出Queue 保证元素是按照它们被添加的顺序进行处理的
  2. 元素插入:可以在队列的尾部插入元素,通常称为“入队”(enqueue)。
  3. 元素移除:可以从队列的头部移除元素,通常称为“出队”(dequeue)。
  4. 不允许空元素Queue 不允许插入 null 元素。

实现类
Queue 接口有多种实现,每种实现都有其特定的用途和性能特点:

  1. LinkedList

    • 基于链表实现。
    • 支持快速插入和删除
    • 可以当作队列、栈或双端队列使用。
  2. PriorityQueue

    • 基于优先级堆实现。
    • 元素根据其自然顺序或者通过提供的比较器进行排序。
    • 不允许空元素,如果尝试添加 null,则会抛出 NullPointerException
  3. ArrayDeque

    • 基于数组实现的双端队列(Deque)。
    • 可以当作队列或栈使用。
    • LinkedList 在内存使用和性能上更优。

使用场景

  • LinkedList:当你需要一个通用的队列,或者需要栈(后进先出)的行为时,可以使用 LinkedList
  • PriorityQueue:当你需要根据元素的优先级来处理元素时,可以使用 PriorityQueue
  • ArrayDeque:当你需要一个高效的队列实现,或者需要双端队列的行为时,可以使用 ArrayDeque

示例代码

import java.util.Queue;
import java.util.LinkedList;public class QueueExample {public static void main(String[] args) {Queue<String> queue = new LinkedList<>();// 入队queue.offer("Apple");queue.offer("Banana");queue.offer("Cherry");// 出队while (!queue.isEmpty()) {System.out.println(queue.poll()); // 输出 Apple, Banana, Cherry}// 检查队列是否为空if (queue.isEmpty()) {System.out.println("Queue is empty");}}
}

在 Java 面试中,了解 Queue 接口及其实现类的特点和使用场景是非常重要的,这有助于你根据具体需求选择最合适的集合类型。面试官可能会询问你如何实现一个队列,或者如何使用 PriorityQueue 来根据元素的优先级进行排序。

为什么要用集合?

使用集合(Collections)在编程中有许多好处,以下是一些关键原因:

  1. 数据存储和管理:集合提供了一种方便的方式来存储和管理一组对象。它们为数据提供了结构化的存储,使得数据操作更加直观和易于管理。

  2. 动态大小:大多数集合类型(如 ArrayListHashMap)可以动态地增长和收缩,这意味着你不需要在创建集合时指定大小,也不必担心集合容量不足。

  3. 提供标准算法:集合框架提供了一套标准算法(如排序、搜索、洗牌等),这些算法可以在不同的集合类型上工作,减少了重复代码的编写。

  4. 提高代码复用性:通过使用集合,你可以编写更通用的代码,这些代码可以适用于不同类型的数据集合。

  5. 提高性能:某些集合实现(如 HashMapArrayList)针对特定操作进行了优化,可以提供比手动管理数组或列表更好的性能。

  6. 减少错误:使用集合可以减少编程错误,例如,使用 ArrayListaddremove 方法比手动管理数组索引更安全,因为集合类会处理边界条件和同步问题。

  7. 支持多线程环境:某些集合实现(如 ConcurrentHashMapCopyOnWriteArrayList)是线程安全的,可以在多线程环境中安全使用,而不需要额外的同步措施。

  8. 提供数据抽象:集合提供了一种抽象层,使得代码不再依赖于特定的数据表示,这有助于提高代码的可维护性和可扩展性。

  9. 方便的数据操作:集合提供了丰富的方法来执行常见的数据操作,如添加、删除、遍历、查找等,使得数据处理更加简单。

  10. 支持泛型:集合支持泛型,这意味着你可以在编译时指定集合中元素的类型,从而提供类型安全,避免运行时出现类型错误。

  11. 集合的不可变性:不可变集合(如 Collections.unmodifiableList)提供了一种方式来创建一旦创建就不能修改的集合,这有助于保证程序的安全性。

  12. 集合的转换:集合可以轻松地在不同的集合类型之间转换,例如,你可以将列表转换为集合,或者将集合转换为映射。

总之,集合是Java编程中不可或缺的一部分,它们提供了一种强大、灵活且高效的方式来处理数据集合。在面试中,展示你对集合框架的理解和如何有效地使用它们,可以表明你具备编写高质量、可维护代码的能力。

如何选用集合?

在Java面试中,面试官可能会询问如何选择合适的集合类型来满足特定的需求。选择合适的集合类型需要考虑以下几个关键因素:

  1. 是否需要保持元素顺序
  • 如果需要保持元素插入的顺序,可以选择ArrayListLinkedList
  • 如果需要按照自然顺序或自定义顺序对元素进行排序,可以选择TreeSetTreeMap
  1. 是否需要允许重复元素
  • 如果允许重复元素,可以选择ArrayListLinkedListHashMap
  • 如果不允许重复元素,可以选择HashSetLinkedHashSetTreeSet
  1. 是否需要快速查找
  • 如果需要快速查找元素,可以选择基于哈希表的实现,如HashMapHashSet
  • 如果需要按顺序快速查找,可以选择基于红黑树的实现,如TreeMapTreeSet
  1. 是否需要线程安全
  • 如果需要在多线程环境中使用,可以选择线程安全的集合,如VectorHashtableCopyOnWriteArrayListConcurrentHashMap
  • 如果对性能有要求,并且需要自己控制同步,可以选择普通的非线程安全集合,并通过Collections.synchronizedListCollections.synchronizedMap来包装。
  1. 是否需要键值对存储
  • 如果需要键值对存储,可以选择HashMapLinkedHashMapTreeMapHashtableConcurrentHashMap
  1. 是否需要按插入顺序排序
  • 如果需要保持元素的插入顺序,可以选择LinkedHashMapLinkedHashSet
  1. 是否需要双端队列
  • 如果需要双端队列,可以选择ArrayDeque
  1. 是否需要不可变集合
  • 如果需要不可变集合,可以使用Collections.unmodifiableListCollections.unmodifiableSetCollections.unmodifiableMap来创建不可变集合。
  1. 是否需要排序
  • 如果需要对集合进行排序,可以使用Collections.sortList进行排序,或者使用List.sort方法。
  • 对于Map,可以使用Collections.sort对键或值进行排序。
  1. 是否需要处理并发
  • 如果需要处理并发,可以选择ConcurrentHashMapCopyOnWriteArrayList等并发集合。

示例:选择集合类型

假设你需要一个可以随机访问、允许重复元素、并且线程安全的集合,你可能会选择Collections.synchronizedList包装ArrayList

List<String> syncList = Collections.synchronizedList(new ArrayList<String>());

如果需要一个可以随机访问、不允许重复元素、并且线程安全的集合,你可能会选择Collections.synchronizedSet包装HashSet

Set<String> syncSet = Collections.synchronizedSet(new HashSet<String>());

在面试中,展示你对不同集合类型的理解以及如何选择它们来满足不同的需求,可以表明你具备解决实际问题的能力。

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

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

相关文章

基于单片机的客车载客状况自动检测系统(论文+源码)

1系统整体设计 本课题为客车载客状况自动检测系统&#xff0c;在此以STM32单片机为核心控制器&#xff0c;结合压力传感器、红外传感器、蜂鸣器、语音提示模块、继电器、液晶等构成整个客车载客状况自动检测系统&#xff0c;整个系统架构如图2.1所示&#xff0c;在此通过两个红…

渗透测试(socket,namp,scapy)

socket:可以用来实现不同虚拟机或者不同计算机之间的通信。 socket常用函数&#xff1a; sock.bind(host,port) //host可接受client范围&#xff0c;以及连接的端口 sock.listen()//sever开启监听连接 sock.accpet()//返回 sock&#xff0c;addr 用来接受和发送数据 addr…

【mongodb】数据库的安装及连接初始化简明手册

NoSQL(NoSQL Not Only SQL )&#xff0c;意即"不仅仅是SQL"。 在现代的计算系统上每天网络上都会产生庞大的数据量。这些数据有很大一部分是由关系数据库管理系统&#xff08;RDBMS&#xff09;来处理。 通过应用实践证明&#xff0c;关系模型是非常适合于客户服务器…

内网对抗-信息收集篇SPN扫描DC定位角色区域定性服务探针安全防护凭据获取

知识点&#xff1a; 1、信息收集篇-网络架构-出网&角色&服务&成员 2、信息收集篇-安全防护-杀毒&防火墙&流量监控 3、信息收集篇-密码凭据-系统&工具&网站&网络域渗透的信息收集&#xff1a; 在攻防演练中&#xff0c;当完成边界突破后进入内…

OpenWebUI,RAG+外部知识库+AI写文的开源应用

引言 自从去年AI火起来之后&#xff0c;很多人便热衷于寻找适合自用的AI开源项目&#xff0c;把各家大模型API接入到自己的AI程序里&#xff0c;便可以通过AI辅助完成一系列日常任务&#xff0c;比如内容翻译/润色/总结/撰写、格式转换、数据分类、代码分析、角色扮演等等。 …

qt QErrorMessage详解

1、概述 QErrorMessage是Qt框架中用于显示错误消息的一个对话框类。它提供了一个简单的模态对话框&#xff0c;用于向用户显示错误或警告消息。QErrorMessage通常用于应用程序中&#xff0c;当需要向用户报告错误但不希望中断当前操作时。它提供了一个标准的错误消息界面&…

一文了解Android的Doze模式

Android 的 Doze 模式是一项省电功能&#xff0c;主要用于减少设备的功耗&#xff0c;特别是在屏幕关闭且设备长时间未被使用的情况下。Doze 模式在 Android 6.0&#xff08;API Level 23&#xff09;首次引入&#xff0c;并在后续版本中不断改进&#xff0c;以便更智能地管理后…

美团代付微信小程序系统 read.php 任意文件读取漏洞复现

0x01 产品简介 美团代付微信小程序系统是美团点评旗下的一款基于微信小程序技术开发的应用程序功能之一,它允许用户方便快捷地请求他人为自己支付订单费用。随着移动支付的普及和微信小程序的广泛应用,美团作为中国领先的本地生活服务平台,推出了代付功能,以满足用户多样化…

SpringBoot-员工管理系统(1)

目录 一、首页配置 二、国际化 2.1 配置文件编写 2.2 使配置文件生效 2.3 配置页面国际化值 2.4 实现根据按钮自动切换中英文 三、登录拦截器 一、首页配置 1、所有页面的静态资源都需要用thymeleaf接管 2、url使用{}格式 二、国际化 2.1 配置文件编写 1、在resourc…

JavaSE:初识Java(学习笔记)

java是高级语言的面向对象语言 .[最贴近生活.最快速分析和设计程序] 一&#xff0c;计算机语言发展历史 二&#xff0c;Java体系结构 1&#xff0c;JavaSE&#xff08;Java Standard Edition&#xff09; 标准版&#xff0c;定位在个人计算机上的应用 这个版本是Jav…

Android——多线程、线程通信、handler机制

Android——多线程、线程通信、handler机制 模拟网络请求&#xff0c;会阻塞主线程 private String getStringForNet() {StringBuilder stringBuilder new StringBuilder();for (int i 0; i < 100; i) {stringBuilder.append("字符串" i);}try {Thread.sleep(…

Jumpserver

概述 一款开源的堡垒机&#xff0c;可使系统的管理员和开发人员安全的连接到企业内部服务器上执行操作&#xff0c;是一款非常安全的远程连接工具。 4A 身份验证授权控制账号管理安全审计 安装 [rootjumpserver project]# tar -xf jumpserver-offline-installer-v2.28.6-amd64…

【专题】2024年全球生物医药交易报告汇总PDF洞察(附原数据表)

原文链接&#xff1a;https://tecdat.cn/?p38191 在当今复杂多变的全球经济环境下&#xff0c;医药行业正面临着诸多挑战与机遇。2024 年&#xff0c;医药行业的发展态势备受关注。 一方面&#xff0c;全球生物医药交易活跃&#xff0c;2021 - 2023 年的交易中&#xff0c;已…

统信UOS开发环境支持rust

集成了Rust编译器和包管理工具,支持系统级编程、网络应用等多场景,为开发者提供丰富的库支持。 文章目录 一、环境部署1. rust开发环境安装2. rust开发环境配置二、代码示例三、常见问题1. 借用和所有权问题2. 编译器错误和警告一、环境部署 1. rust开发环境安装 rust是一门…

Addressables资源打包(AA包)代码中改变远程地址

接着上一篇“Unity资源打包Addressable AA包” 还是先贴代码 LoadPath.cs 中定义一个远程服务器的地址&#xff0c;这个地址将来在代码中会修改 namespace HFS {public class LoadPath{public static string Path "http://172.18.216.168:6565/HFS/1/";} } 远程服…

linux基础-完结(详讲补充)

linux基础-完结 一、Linux目录介绍 二、基础命令详细讲解 1. ls&#xff08;列出目录内容&#xff09; 2. cd&#xff08;更改目录&#xff09; 3. clear&#xff08;清除终端屏幕&#xff09; 4. pwd(显示你当前所在的目录) 5. vim(文本编辑器) 6. touch&#xff08;创…

开启鸿蒙开发之旅:准备篇

写在前面 Q:为什么要学习鸿蒙&#xff1f; A:没有特定的理由&#xff0c;有可能是因为大环境不好的原因&#xff0c;大家越来越卷&#xff0c;技术革新越来越快&#xff0c;如果手里多掌握一门技术&#xff0c;心里会更有底气一些。再一个自己只有前端开发经验&#xff0c;平时…

倒计时3天 | 2024 CCF中国开源大会仪式解读

点击蓝字 关注我们 CCF Opensource Development Committee CCF 大会简介 2024 CCF中国开源大会&#xff08;CCF ChinaOSC&#xff09;将于2024年11月9日至10日在深圳召开。本届大会由中国计算机学会主办&#xff0c;CCF开源发展委员会、鹏城实验室、新一代人工智能产业技术创新…

硬件基础17 半导体存储器——随机存取存储器RAM

目录 一、异步SRAM 二、同步SRAM 三、DRAM 四、字长位数扩展 五、字数的扩展 RAM是另一大类存储器&#xff0c;它与ROM的最大区别就是数据易失性&#xff0c;一旦失去电源供电&#xff0c;所存储的数据立即丢失。最大优点是可以随时快速地从其中任一指定地址读出&#xff…

安装VMware Tools选项显示灰色以及连接不上服务器,下载出错的正确解决办法

1.显示灰色解决办法&#xff1a; 解决办法&#xff1a; 关闭虚拟机 选择“虚拟机设置”&#xff0c;分别添加一个“软盘”和一个“CD/DVD”&#xff0c;并将所有软盘和CD/DVD&#xff08;包括自带的&#xff09;“连接”选项全部更改为“使用物理驱动器” 2.关闭虚拟机重启即…