嵌入式期末复习
一、选择题(20)


二·、判断题(10)


三、填空题(10)
- 主机-目标机的文件传输方式主要有串口传输方式、网络传输方式、USB接口传输方式、JTAG接口传输方式、移动存储设备方式。
- 常用的远程调试技术主要有 插桩/stub、片上调试
- 字符设备驱动程序编写通常都要涉及到三个重要的内核数据结构,分别是file_operations结构体、inode结构体和file结构体。


四、简答题(30)
-
比较嵌入式系统与通用计算机的区别。
解答:
嵌入式系统是以计算机技术为基础,并且软硬件是可裁剪的专用计算机系统。“嵌入式”、“专用性”和“计算机系统”是嵌入式系统的三个基本要素,其软件和硬件可以根据需要进行添加或减少。
而通用计算机则是包含了所有软件和硬件系统的计算机系统。 -
试说明嵌入式操作系统的特点。
解答:
嵌入式操作系统,通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器等。嵌入式操作系统具有通用操作系统的基本特点,如能够有效管理越来越复杂的系统资源;能够把硬件虚拟化,使得开发人员从繁忙的驱动程序移植和维护中解脱出来;能够提供库函数、驱动程序、工具集以及应用程序。与通用操作系统相比较,嵌入式操作系统在系统实时高效性、硬件的相关依赖性、软件固态化以及应用的专用性等方面具有较为突出的特点。 -
中断处理经过了哪几个阶段?
解答:
(1)保护断点现场;
(2)查找、识别中断源;
(3)执行终断处理子程序;
(4)恢复现场和退出中断。 -
试叙述嵌入式最小系统的组成,并说明各部件的作用。
解答:
一个 ARM 最小系统一般包括:
(1) ARM 微处理器芯片,这是嵌入式最小系统的心脏。
(2)电源电路、复位电路,晶振电路,为嵌入式最小系统提供电源、提供时钟信号及复位。
(3)存储器( FLASH 和 SDRAM ),微处理器芯片内部没有存储器,需要外扩存储器。
(4) UART(RS232及以太网)接口电路。这是嵌入式最小系统不可缺少的一部分,以便与外界通信联系。
(5) JTAG 调试接口。这也是不可缺少的,操作系统软件的下载与烧写都要通过它来完成。 -
在例2-1中,若把连接LED发光二极管的GPIO引脚更改为GPC0[1] ,要控制LED发光二极管点亮或熄灭,则应怎样对该端口的控制寄存器GPC0CON和数据寄存器GPC0DAT进行设置?
解答:
第6.小题图1 GPIO端口的GPC0[1]引脚连接LED发光二极管
(1)问题分析
若要使一个LED发光二极管点亮,必须有一个正向电压,即寄存器引脚端必须是低电平。反之,若要使LED发光二极管熄灭,则寄存器引脚端必须为高电平。也就是说,寄存器引脚输出低电平时,LED发光二极管点亮,寄存器引脚输出高电平时,LED发光二极管熄灭。
(2) GPC0的端口控制寄存器GPC0CON的设置
需要把GPC0CON[1]引脚设置为输出模式。按表2-3可知,GPC0CON[1] = (0001)2 。
GPC0CON的设置如下所示。
GPC0CON[4] GPC0CON[3] GPC0CON[2] GPC0CON[1] GPC0CON[0]
[19:16] [15:12] [11:8] [7:4] [3:0]0000 0000 0000 0001 0000
第6.小题图2 GPC0CON寄存器的设置
所以,设置GPC0CON[1]为输出模式的值用二进制表示为:
0000 0000 0000 0001 0000
也可以表示为:(1<<4)
即: GPC0CON = (1<<4)
(3) 端口数据寄存器GPC0DAT的设置
GPC0DAT有5位([4:0]),每一位对应一个GPIO端口引脚,当该寄存器的某位设置为1时,则对应引脚输出高电平,该寄存器的某位设置为0时,对应引脚输出低电平。
所以,在GPC0CON[1]已经设置为输出模式的前提下,GPC0DAT设置为0x01时,GPC0[1]引脚输出高电平,GPC0DAT设置为0x00时,GPC0[1]引脚输出低电平。
即:
GPC0DAT = 0x01 时,GPC0[1]引脚输出高电平,LED发光二极管熄灭;
GPC0DAT = 0x00 时,GPC0[1]引脚输出低电平,LED发光二极管点亮。
-
请问 Linux 下的文件系统和 Windows 下的文件系统有什么区别?
【解答】
Linux的文件系统是一个树结构。最顶部是/(Root根),所有文件夹、文件和驱动盘都是这个Root的分支。
Windows 下的文件系统是以驱动盘为单位的,它的每个驱动器有自己的根目录,形成的是多个树并列的结构。 -
查看Linux目录结构,说出下列目录放置的是什么数据:
【解答】
. /etc/:
该目录用来存放系统的各种配置文件,系统在启动过程中需要读取其参数进行相应的配置。
/etc/rc.d/init.d/:
存放启动、或改变运行级时运行的脚本文件及目录。
/usr/bin:
该目录用来存放用户应用程序和文件,类似于Windows下的Program Files目录。
/bin:
通常存放Linux基本操作命令的执行文件。
/sbin:
存放只能由root(系统管理员)来执行的Linux基本操作命令的执行文件。
/dev:
存放着各种外部设备的镜像文件。 -
在VMware虚拟机中建立Windows操作系统与Linux操作系统的数据共享文件目录。
【解答】
(1)安装VMware Tools工具。
(2)在Windows操作系统中创建一个共享文件夹。
(3)在Linux系统中,打开/mnt目录,可以看到其中存在一个hgfs目录。打开/mnt/hgfs目录,可以看到Windows系统的共享文件夹。 -
什么是GCC?试述它的执行过程。
【解答】
Linux系统下的GCC(GNU C Compiler)是GNU项目所推出的功能强大、性能优越的多平台编译器。
使用GCC由C语言源代码文件生成可执行文件的过程不仅仅是编译的过程,而是要经历4个相互关联的步骤∶预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编(Assembly)和连接(Linking)。 -
什么是内核空间,什么是用户空间?设备驱动程序运行在什么空间?
解答:
内核空间是指向内存映射的一块区域,负责内核文件的运行。
用户空间是指向内存映射的另一块区域,负责用户应用程序的运行。
设备驱动程序运行在内核空间。 -
设备驱动程序的作用是什么?
解答:
设备驱动可以理解为操作系统的一部分,它的作用就是让操作系统能正确识别和使用设备。 -
字符设备驱动程序开发的流程主要是什么?
字符设备驱动程序开发流程的步骤如下:
(1)创建设备进入点
(2)编写字符设备驱动程序
(3)编写Makefile文件,编译设备驱动程序
(4)编写用户应用程序,并编译用户程序
(5)加载设备驱动程序
(6)运行用户应用程序 -
CISC指令集相比,RISC指令集具有鲜明的特点,请你简要叙述RISC结构的主要特点。

-
GNU/Linux操作系统在嵌入式领域使用极其广泛,请画图说明GNU/Linux操作系统的基本体系结构。

-
简要叙述进程管理的基本功能
1.进程管理负责管理 CPU 资源,以便让各个进程能够以尽量公平的方式访问 CPU。
2.进程管理负责进程的创建和销毀,并处理它们和外部世界之间的连接(输入输出)。除此之外,控制进程如何共享的调度器也是进程管理的一部分。3…概括来说,内核进程管理活动就是在单个或多个CPU 上实现了多个进程的抽象 -
简单叙述文件系统的主要功能
1.对文件存储设备进行管理,分别记录空闲区和被占用区,以便于用户创建、修改以及删除文件时对空间的操作。-
2.对文件和目录的按名访问、分层组织功能。
3.创建、制除及修改文件功能。
4.数据保护功能。
5…文件共享功能。 -
判断处理器是大端还是小端
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int check_sys()
{int i = 1;return *(char* (&i));//将1的地址取出来赋给char类型的指针,最后解引用就得到了想要的值//char* p = (char*)&i;//return *p;
}int main()
{int ret = check_sys();if (ret == 1)printf("小端\n");elseprintf("大端\n");return 0;
}
运行结果:

😇😇😇可以看到:vs的字节序果然就是小端类型的呢!!!
💝 方法二:通过union共用体
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int check_sys()
{union Un{char c;int i;}u;u.i = 1;return u.c;
}
int main()
{int ret = check_sys();if (ret == 1){printf("小端\n");}else{printf("大端\n");}return 0;
}
- 请按要求写出一个Makefile文件,要求包括:采用交叉编译器,源文件为led8.c,目标文件为led8,使用led8.h头文件,静态编译,clean操作删除上次编译结果。
CC = arm-linux-gcc
INSTALL = install
TARGET = led8
all : $(TARGET)
$(TARGET): led8.c cortexa8.h $(CC) -static $< -o $@
clean :rm -rf *.o $(TARGET) *~
- 在嵌入式文件系统Jffs2 中,结构体 Jffs2_raw_dirent 主要包括文件名、节点 ino号、父节点ino 号、版本号、校验码等信息,它用来形成整个文件系统的层次目录结构。请对具有下划线的代码写出其注释含义。
struct jffs2_raw_dirent
jint16_t magic;
jint16 t nodetype; jint32_t totlen;
2/24页
jint32_t hdr_cre: jint32_t pino;
jint32 t version:
jint32_t ino;
jint32_t metime:
_u8 nsize;
_u8 type;
-u8 unused[2]:
jint32_t node_cre;
jint32_t name_cre;
_u8 name [0]:
]:
答:


- 交叉开发模式是嵌入式系统设计中最常见的开发模式。请简要叙述交叉开发模式一般采用的步骤。

- 编译是程序处理过程中十分重要的一个环节。请以方框图的形式简述嵌入式系统的交叉编译过程。

- 设备驱动程序是应用程序和硬件之间的中间件。请简要叙述设备驱动程序主要完成的功能有?
(1)对设备初始化和释放。
(2)把数据从内核传送到硬件和从硬件读取数据。
(3)读取应用程序传送给设备文件的数据和回送应用程序请求的数据。
(4)检测错误和处理中断。
5.操作系统的并发控制中,异步通知是十分重要的方法。请简要叙述异步通知
答:异步通知是指一旦设备准备就绪,则该设备会主动通知应用程序,这样应用程序就不需要不断地查询设备状态,-通常把异步通知称为信号驱动的异步 V/O(SIGIO),这有点类似于硬件上的中断。
- 嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量a,写两段代码,第一个设置a的bit 3,第二个清除a的bit 3。在以上两个操作中,要保持其它位不变。

- 请解释嵌入式c语言中的关键字const有什么含义

五、编程题(30)
1.嵌入式系统经常要求访问绝对地址,要求设置一绝对地址为 0x5911 的整型变量的值为 0x7324。
编译器是一个纯粹的 ANSI 编译器。写代码去完成这一任务。

- 请按要求写出一个 Makefile 文件,要求包括:采用交叉编译器,源文件为 buzzer
.c,目标文件为
led8,使用led8.h头文件,静态编译,clean 操作删除上次编译结果。

- 假设目标机 IP地址为 192.168.1.120,请首先在主机上编写程序实现对 10 个整数由大到小进行排序(请写出完整源码),然后简述将该程序编译、下载至目标机、修改文件权限以及执行该程序的过程。


- 请阅读下段代码,并按要求设计新的代码段。

请改写上述代码段,以实现如下功能:
(1)减少福环次数。
(2) 减少每次计算数组偏移量的指令。
(3) 减少流水线阻塞。
(4)每次循环滅少一条判断指令。




- GPIO口应用









- 驱动程序设计
6、设计一个程序,在用户空间的用户应用程序中输入一个10以内的整数n,通过内核空间的设备驱动程序计算从1加到n的和。
解答:
(1)内核空间的驱动程序代码,将程序保存为sum_drv.c
/***************************** * 驱动程序 sum_drv.c
****************************/#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/fs.h>
#include <linux/module.h> //模块驱动程序的头文件#define sum_drv_MAJOR 114 //设备号 创建设备入口点时要与此值一致
#define DEVICE_NAME “sum_drv_module”void showversion(void) {
printk(“kernel: ***********************************\n”);
printk(“kernel: \t %s \t\n”, DEVICE_NAME);
printk(“kernel: ************************************\n\n”); }// --------设备对应的打开函数---------------- static int sum_open(struct inode
*inode, struct file *file){
printk(“kernel: hello open.\n”);
return 0; }// ---------设备对应的写操作函数------------- static int sum_write(struct file
*file, const char __user * buf,
size_t count, loff_t *ppos){
printk(“kernel: hello write. n=%d \n”, count);
int i=1;
int s=0;
for(i=1;i<=count; i++)
s = s + i;
printk(“kernel: s = %d \n”, s);
return 0; }// ----设备向系统注册用的OPS结构,里面是对应的读操作入口----- static struct file_operations
sum_flops = {
.open = sum_open,
.write = sum_write, };// ------系统初始化----------- static int __init sum_init(void){
int ret;
ret = register_chrdev(sum_drv_MAJOR,DEVICE_NAME, &sum_flops);
showversion();
if (ret < 0) {
printk(“kernel: can’t register major number.\n”);
return ret;
}
printk(“kernel: OOKK! initialized.\n”);
return 0; }// ------系统卸载---------- static void __exit sum_exit(void){
unregister_chrdev(sum_drv_MAJOR, DEVICE_NAME);
printk(“kernel:” DEVICE_NAME " removed.\n"); }// —内核模块入口,相当于main()函数,完成模块初始化------ module_init(sum_init);
//—卸载时调用的函数入口,完成模块卸载------ module_exit(sum_exit); //
------驱动程序版本信息--------- MODULE_LICENSE(“GPL”);(2)Makefile文件 obj-m := sum_drv.o PWD := ( s h e l l p w d ) a l l : m a k e − C / l i b / m o d u l e s / (shell pwd) all: make -C /lib/modules/ (shellpwd)all:make−C/lib/modules/(shell uname -r)/build M=$(PWD) modules clean: rm -rf
*.o ~ core ..cmd *.mod.c ./tmp_version(3)用户应用程序,将程序保存为sum_drv_test.c
#include <fcntl.h>
#include <stdio.h>int main(void) {
int fd;
int n;
fd = open(“/dev/sum_drv”, O_RDWR);
if(fd < 0){
printf(“can’t open!\n”);
}
printf(“fd=%d \n”, fd);
scanf(“%x”, &n);
write(fd, NULL, n); // ioctl(fd, cmd);
close(fd);
return 0; }(4)用dmesg查看运行结果。
- 网络程序设计
相关文章:
嵌入式期末复习
一、选择题(20) 二、判断题(10) 三、填空题(10) 主机-目标机的文件传输方式主要有串口传输方式、网络传输方式、USB接口传输方式、JTAG接口传输方式、移动存储设备方式。常用的远程调试技术主要有 插桩/st…...
生信算法7 - 核酸序列Fasta和蛋白PDB文件读写与检索
python 3.9实现以下算法。 1. 简单的写文件和读文件 # 写 file1 open(count.txt,w) file1.write(this is a test) file1.close()# 读 file2 open(my_file) print(file2.read())2. 将列表内容写入文本文件 # 生成100-500数字列表 data [i * 100 for i in range(1, 6)] pri…...
【Python】Python异步编程
Python 异步编程 异步编程 异步编程是一种编程范式,通过非阻塞的方式执行任务,允许程序在等待某些操作(如I/O操作、网络请求、数据库查询等)完成时,继续执行其他任务。这与同步编程(或阻塞编程)…...
pytorch笔记:自动混合精度(AMP)
1 理论部分 1.1 FP16 VS FP32 FP32具有八个指数位和23个小数位,而FP16具有五个指数位和十个小数位Tensor内核支持混合精度数学,即输入为半精度(FP16),输出为全精度(FP32) 1.1.1 使用FP16的优缺…...
R语言ggplot2包绘制世界地图
数据和代码获取:请查看主页个人信息!!! 1. 数据读取与处理 首先,从CSV文件中读取数据,并计算各国每日收入的平均签证成本。 library(tidyverse) df <- read_csv("df.csv") %>% group_…...
【Linux】Linux的权限_1
文章目录 三、权限1. shell外壳2. Linux的用户3. Linux权限管理文件访问者的分类文件类型和访问权限 未完待续 三、权限 1. shell外壳 为什么要使用shell外壳 由于用户不擅长直接与操作系统直接接触和操作系统的易用程度、安全性考虑,用户不能直接访问操作系统。 什…...
日语_远程办公常用日语单词
基本词汇 リモートワーク(Rimōto Wāku):远程工作テレワーク(Terewāku):远程工作(Telework)在宅勤務(ざいたくきんむ,Zaitaku Kinmu)ÿ…...
MTK 平台项目security boot 开启/关闭 及 系统签名流程
以 https://online.mediatek.com/FAQ#/SW/FAQ26691 为基础做如下记录以做备忘: How to Enable/Disable Secure Boot for Security 3.0: 1、 How to Enable Path Enable Preloader /vendor/mediatek/proprietary/bootable/bootloader/preloader/custom/{…...
JDBC连接MySQL
目录 1.数据库编程的必备条件 2.Java的数据库编程JDBC 3.JDBC的工作原理 4.第三方库connector的下载和导包 5.JDBC的使用 使用步骤 (1)创建数据源对象DataSource (2)给对象设置必要的属性 (3)和数据…...
【Qt】【模型视图架构】 在项目视图中启用拖放
文章目录 1. 在便捷类中启用拖放2. 在模型/视图类中启用拖放 模型/视图框架支持Qt的拖放应用。 列表、表格和树中的项目可以在视图中被拖拽,数据作为MIME编码的数据被导入和导出。标准视图可以自动支持内部的拖放。 默认视图的拖放功能并没有被启用,如果…...
B端产品无爆款,说有的都是忽悠和外行!
前言:网上经常有人讲运营,把C端那一套硬搬到B端,讲的自我陶醉,稍微有点常识的人就知道不能这么玩。 一、什么是B端和C端 B端(Business-to-Business)是指面向企业客户的市场和产品。B端产品或服务主要是为…...
腾讯云的身份证核验,找不到这个类
文件上传功能在许多Web应用程序中是非常常见的需求之一。然而,由于文件上传存在安全风险,保护用户上传的文件的安全性,以及防止黑客利用上传功能进行攻击是非常重要的。在本文中,我们将讨论一些常见的安全漏洞,并提供一…...
vue3 vue-draggable-next 实现拖拽穿梭框效果
一、vue3 vue-draggable-next 实现拖拽穿梭框效果 <template> <div> <h2>列表 1</h2> <draggable v-model"list1" group"items" tag"transition-group" end"onDragEnd"> <div v-for"(item…...
FreeRTOS【16】直达任务通知使用
1.开发背景 直达任务通知,FreeRTOS 的线程任务提供的接口,可以用作线程唤醒,或者是传递数据,因为是基于线程本身的操作,是轻量级,速度响应更快,适合小内存芯片使用。 事实上本人使用得比较少&am…...
关于软件<PDF文档管理系统V1.0>的介绍
<PDF文档管理系统V1.0>(下载地址在最下面)是我在2023年发布的<知识辅助系统>的改善以及重新开发版本,软件在重新开发提供了<知识辅助系统>的所有功能的基础上,添加了一些新的功能。软件尽量提供简单、实用的功能…...
Java面试题-Tomcat初级面试题
Tomcat是什么?请简述它的主要功能。 Tomcat是一个开源的Web应用服务器,由Apache软件基金会开发。它是一个实现了Java Servlet和JavaServer Pages(JSP)技术的容器,用于处理客户端的请求并返回响应。Tomcat的主要功能如…...
红队内网攻防渗透:内网渗透之windows内网权限提升技术:数据库篇
红队内网攻防渗透 1. 内网权限提升技术1.1 数据库权限提升技术1.1.1 数据库提权流程1.1.1.1 先获取到数据库用户密码1.1.1.2 利用数据库提权工具进行连接1.1.1.3 利用建立代理解决不支持外联1.1.1.4 利用数据库提权的条件及技术1.1.2 Web到Win-数据库提权-MSSQL1.1.3 Web到Win-…...
rust嵌入式开发之总结
我们用rust开发的新版产品刚刚交付,已经在海上安装测试完毕并顺利投产。终于松了口气,同时也有时间和精力来做个全面的总结了。 这个产品,目前差不多有三版: 第一个版本是用crt-thread写的,投产后出了一个内存泄露的…...
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版6(附带项目源码)
最终效果 系列导航 文章目录 最终效果系列导航前言方法一、使用excel配置表excel转txt文本读取txt数据按配置信息生成僵尸 方法二、使用ScriptableObject 配置关卡信息源码结束语 前言 本节主要是推荐两种实现配置关卡信息,并按表生成僵尸和关卡波次 方法一、使用…...
回溯算法指组合总和
题目: 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。 思路: 这种问题…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
在 Spring Boot 项目里,MYSQL中json类型字段使用
前言: 因为程序特殊需求导致,需要mysql数据库存储json类型数据,因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10pip3.10) 一:前言二:安装编译依赖二:安装Python3.10三:安装PIP3.10四:安装Paddlepaddle基础框架4.1…...
Linux操作系统共享Windows操作系统的文件
目录 一、共享文件 二、挂载 一、共享文件 点击虚拟机选项-设置 点击选项,设置文件夹共享为总是启用,点击添加,可添加需要共享的文件夹 查询是否共享成功 ls /mnt/hgfs 如果显示Download(这是我共享的文件夹)&…...
Java中栈的多种实现类详解
Java中栈的多种实现类详解:Stack、LinkedList与ArrayDeque全方位对比 前言一、Stack类——Java最早的栈实现1.1 Stack类简介1.2 常用方法1.3 优缺点分析 二、LinkedList类——灵活的双端链表2.1 LinkedList类简介2.2 常用方法2.3 优缺点分析 三、ArrayDeque类——高…...
