当前位置: 首页 > news >正文

Linux内核面试题(1)

整理了一些网上的linux驱动岗位相关面试题,如果错误,欢迎指正。

1硬件中断号和Linux内核的IRQ号它们是如何映射的?

irq驱动会从dts获取硬件中断号,dts里的interrupts字段,使用gic_irq_domain_translate函数。

然后使用gic_irq_domain_map映射中断号,使用gic_irq_domain_alloc。

具体看自己代码里的irq驱动struct irq_domain_ops这个结构体类型的变量就行了,里面的translate、alloc和free成员。

2当发生硬件中断之后,ARM64处理器架构做哪些工作?

  1. 中断触发:硬件设备触发中断信号,向处理器发送中断请求。
  2. 中断服务例程(ISR)的调用:处理器中断控制器(如GIC)接收到中断请求后,会根据中断的优先级和处理器当前状态选择合适的中断服务例程(ISR)。处理器会保存当前的上下文状态,包括寄存器值、程序计数器等,并跳转到相应的ISR代码。
  3. 中断处理:在ISR中,处理器会执行中断处理代码,处理中断事件。这可能包括读取中断状态、处理数据、更新相关寄存器等操作。
  4. 中断结束:在中断处理完成后,处理器会进行清理工作,并恢复之前保存的上下文状态。这包括恢复寄存器的值、恢复程序计数器等。
  5. 中断返回:处理器会返回到被中断的指令处,继续执行被中断的程序。

3为什么中断上下文不能执行睡眠操作?** **

中断上下文(Interrupt Context)是指在中断服务程序(ISR)中执行的代码。中断上下文与正常的进程上下文(Process Context)有一些重要的区别,其中之一就是中断上下文不允许执行睡眠操作。

主要原因包括:

  1. 可预测性和实时性: 中断通常与实时系统相关,需要对响应时间进行精确的控制。睡眠操作可能导致不确定的延迟,因为操作系统需要切换到其他任务,而这是不可接受的。
  2. 竞争条件: 中断上下文执行在中断发生时,可能在执行中断服务程序的同时有其他中断也在发生。如果允许中断上下文执行睡眠操作,可能导致竞争条件,破坏系统的稳定性。
  3. 中断上下文的特殊性: 中断上下文运行在硬件中断的上下文,与正常的进程上下文不同。在中断上下文中,可能无法访问一些内核服务,或者一些内核锁可能已被占用。执行睡眠可能导致死锁或其他不可预测的结果。

虽然中断上下文不能执行真正的睡眠,但通常允许执行一些快速的非阻塞操作。例如,可以使用轮询、忙等待或者使用特殊的睡眠函数,如msleep(),这些函数会在等待一段时间后自动唤醒。

总的来说,中断上下文的主要任务是尽快地响应中断,处理中断服务程序,而不是执行长时间的操作。如果需要执行较长时间的操作,通常会通过工作队列等机制在进程上下文中执行。

4一个硬件中断后,Linux内核如何响应并处理中断?** **

在Linux内核中,硬件中断是由外部设备或处理器产生的一种异步事件,内核需要适时响应并进行处理。以下是Linux内核处理硬件中断的一般步骤:

  1. 硬件中断触发: 当硬件设备产生一个中断条件时,它向处理器发送一个中断信号。
  2. 中断控制器: 中断信号被传递给中断控制器,中断控制器会将中断信号转发给相应的中断向量或中断线。
  3. 中断向量和中断服务程序: 内核使用中断向量来确定触发中断的设备和事件。对应于每个中断向量,内核有一个中断服务程序(Interrupt Service Routine,ISR),这是一个用于处理特定中断的函数。
  4. 软中断: 在一些情况下,中断服务程序可能会触发软中断,这是一种异步的内核事件。软中断的处理与硬中断略有不同,但同样是通过调用相应的软中断处理程序来处理。
  5. 上下文切换: 当中断被触发时,内核必须从当前执行的上下文切换到中断服务程序的上下文。这通常涉及将当前进程的上下文保存起来,以便稍后恢复。
  6. 中断服务程序执行: 中断服务程序执行与特定中断相关的处理。这可能包括处理硬件状态、读取数据、发送信号等。中断服务程序执行期间,内核可能需要禁止其他同级别中断的发生,以避免中断嵌套问题。
  7. 中断处理完成: 中断服务程序执行完成后,内核会进行必要的清理工作,并将控制返回给先前被中断的上下文。
  8. 上下文还原: 如果有上下文切换发生,内核需要还原之前保存的上下文,以继续先前被中断的任务的执行。

总体而言,Linux内核通过使用中断向量和中断服务程序的机制,以及上下文切换等技术来响应和处理硬件中断。这确保了对异步事件的及时响应和处理,同时保证内核的正确运行。

5同一类型的软中断是否允许多个CPU并行执行?** **

在Linux内核中,软中断是一种异步事件处理机制,而同一类型的软中断通常是不允许在多个 CPU 上并行执行的。这是因为软中断是共享的,它们是在内核全局范围内注册和管理的。

在 Linux 中,每个软中断都有一个相应的处理函数。当软中断被触发时,内核会检查是否已经有相同类型的软中断正在运行。如果是,内核通常会防止同一类型的软中断在多个 CPU 上同时执行。这是通过中断控制机制(softirq 控制)来实现的。

软中断在内核中被分为多个队列,每个队列对应于一个 CPU。当软中断被触发时,它被放置在发起中断的 CPU 的软中断队列上。因此,同一类型的软中断不会同时在多个 CPU 上运行,而是在每个 CPU 上独立运行。

这种设计有助于避免竞态条件和确保软中断的一致性。如果多个 CPU 同时执行相同类型的软中断,可能导致数据竞争和不一致的状态,从而影响系统的稳定性和可靠性。

需要注意的是,这里讨论的是软中断。对于 Tasklet 和工作队列等机制,情况可能会有所不同,因为它们提供了一些并发执行的能力,但仍然是有序和同步的。软中断的设计主要是为了提供一种轻量级、快速响应的事件处理机制。

6软中断上下文包括哪几种情况?

软中断上下文是指内核中某些代码执行时的上下文,通常是在中断处理的过程中。软中断上下文包括以下几种情况:

  1. 进程上下文(Process Context):这是指内核执行代码时处于进程上下文,也就是在内核中执行进程的上下文。在这个上下文中,可以执行阻塞操作,但不能禁止中断。例如,在系统调用或内核线程执行期间。
  2. 中断上下文(Interrupt Context):这是指内核执行代码时处于中断上下文。在中断上下文中,不能执行可能会导致睡眠的操作,因为中断上下文是在中断处理程序中执行的,而内核通常不允许中断处理程序睡眠。中断上下文是在硬中断(IRQ)或软中断(SoftIRQ)中执行的。
  3. 软中断上下文(Softirq Context):这是一种特殊的中断上下文,用于执行软中断。与硬中断不同,软中断是由内核中的软件机制触发的。在软中断上下文中,同样不能执行可能导致睡眠的操作。
  4. Tasklet 上下文:Tasklet 是 Linux 内核中用于处理底半部(Bottom Half)工作的机制之一。Tasklet 会以软中断上下文的形式执行,因此也受到睡眠限制。

需要注意的是,软中断上下文是为了执行一些轻量级的异步任务而设计的,因此它们通常不允许执行可能导致阻塞的操作。硬中断上下文和 Tasklet 上下文等也有类似的限制。这是因为在中断上下文中,内核需要保持对硬件的快速响应,而可能导致睡眠的操作会破坏这种快速响应性。

7软中断上下文还是进程上下文的优先级高?为什么?** **

软中断上下文的优先级相对较高,这是因为软中断是用于执行一些轻量级的异步任务,需要在内核中尽快完成。软中断的高优先级主要基于以下几点:

  1. 快速响应性: 软中断通常是由内核中的软件机制触发的,目的是在发生某些事件时快速响应。这可能包括网络数据包到达、定时器事件等。为了确保系统对这些事件的快速响应,软中断必须具有较高的优先级。
  2. 轻量级任务: 软中断通常执行轻量级的任务,这些任务不涉及长时间的计算或阻塞操作。因此,为了最小化对整个系统的影响,软中断的执行需要在可能的情况下尽快完成。
  3. 避免延迟: 在软中断上下文中执行的任务通常是为了避免延迟。例如,在网络数据包到达时,与网络相关的软中断可能会立即处理这些数据包,而不希望因为等待进程上下文而引入不必要的延迟。

进程上下文相对而言是一种更加重量级的上下文,因为它涉及到进程的执行,可能包括长时间运行的任务、文件操作等。进程上下文的任务通常具有较低的优先级,因为它们更容忍一些延迟,而不需要像软中断那样迅速响应。

需要注意的是,虽然软中断上下文具有相对较高的优先级,但它们也受到一些限制,例如不能执行可能导致睡眠的操作。这是因为在中断上下文中,内核需要保持对硬件的快速响应,而可能导致睡眠的操作会破坏这种快速响应性。

8是否允许同一个tasklet在多个CPU上并行执行? ** **

在Linux内核中,tasklet 是一种用于在软中断上下文中执行的机制,它确保了它自己的同步和序列化。通常情况下,一个 tasklet 是绑定到一个特定的 CPU 核心上的,而不会在多个 CPU 核心上并行执行。

每个 tasklet 有一个关联的处理函数,该函数在软中断上下文中执行。tasklet 在被调度执行之后,会在软中断上下文中运行,而不是在进程上下文中运行。这确保了 tasklet 的快速响应和轻量级执行。

虽然 tasklet 是针对并发执行的一种机制,但它不会在多个 CPU 上并行执行。在 SMP(Symmetric Multiprocessing,对称多处理)系统中,每个 CPU 核心都有自己的 tasklet 队列,因此 tasklet 在一个 CPU 上执行时不会干扰到其他 CPU 上的执行。这种方式确保了对共享资源的同步和避免了竞争条件。

需要注意的是,在新的内核中,tasklet 已经逐渐被 workqueue 取代,workqueue 提供了更灵活的任务调度和处理机制,允许在多个 CPU 上并行执行。

9中断现场保存在什么地方?

在操作系统中,中断现场(interrupt context)是指当中断事件发生时,CPU 保存当前被中断程序的执行状态以及一些其他关键信息的地方。这个信息通常包括以下内容:

  1. 寄存器状态: 中断现场保存了当前被中断程序使用的寄存器的值。这些寄存器包括通用寄存器、程序计数器(PC)等。
  2. 程序状态字(PSW): 包含了一些标志位和状态信息,用于表示被中断程序的状态。
  3. 栈指针: 指向被中断程序的栈,用于保存函数调用和局部变量等信息。
  4. 硬件上下文: 包括与中断相关的硬件状态,例如中断向量、中断屏蔽状态等。

中断现场的保存通常是由硬件和操作系统共同完成的。当中断发生时,硬件会触发一些特殊的指令,将当前的寄存器状态、程序计数器等信息保存到内存的某个指定位置。操作系统的中断服务例程(interrupt service routine,ISR)负责在中断处理时将这些信息保存到内核堆栈或其他数据结构中。

总的来说,中断现场的保存在内存中的某个位置,通常是内核堆栈。这确保了在中断处理完成后,被中断程序能够继续执行,并且能够恢复到中断发生前的状态。

10什么是中断现场?中断现场中需要保存哪些内容? ** **

中断现场(Interrupt Context)是指当一个中断事件发生时,为了保证中断处理的正确性,需要保存和恢复的 CPU 上下文和寄存器状态。中断现场的保存是为了在中断处理完成后,能够正确地返回到被中断的程序继续执行。

中断现场中需要保存的内容包括:

  1. 程序计数器(PC): 指向被中断程序正在执行的指令的地址。保存 PC 的值可以确保在中断处理完成后,能够回到正确的执行点。
  2. 寄存器状态: 包括通用寄存器(如 eax、ebx、ecx 等)的值。这些寄存器中可能保存了被中断程序的局部变量、参数等信息。
  3. 栈指针(SP): 指向被中断程序的堆栈。保存栈指针的值是为了确保中断处理过程中对栈的操作不会影响到被中断程序。
  4. 程序状态字(PSW): 包含了各种标志位,例如零标志、进位标志等。保存 PSW 的值有助于确保中断处理后能够正确地恢复被中断程序的状态。
  5. 硬件上下文: 这包括与中断相关的硬件状态,例如中断向量、中断屏蔽状态等。保存硬件上下文是为了确保中断处理的正确性。

这些内容通常被保存在一个被称为中断帧(interrupt frame)的数据结构中,这个数据结构可以是堆栈帧或者其他内存区域。在中断处理过程中,操作系统的中断服务例程会负责保存这些状态,以确保中断处理的正确执行。

相关文章:

Linux内核面试题(1)

整理了一些网上的linux驱动岗位相关面试题,如果错误,欢迎指正。 1硬件中断号和Linux内核的IRQ号它们是如何映射的? irq驱动会从dts获取硬件中断号,dts里的interrupts字段,使用gic_irq_domain_translate函数。 然后使…...

wpr -start generalprofile -start pool -filemode 这句命令具体是什么意思

注意事项: 总体而言,WPR 和 WPA 是强大的性能分析工具,通过它们,你可以深入了解系统运行时的性能特性,找出潜在问题并进行优化。 查看详细信息: wpr -start generalprofile -start pool -filemode 对应的结…...

C/CPP基础练习题多维数组,矩阵转置,杨辉三角详解

多维数组 1. 矩阵转置 输入一个数字构成的矩形, 将矩形的值进行转置后打印 ​ 输入: 第一行 正整数n(1<n<10), 表示矩阵的边长 随后输入一个矩阵 输出: 转置后的矩阵 ​ 样例输入: 3 1 2 3 4 5 6 7 8 9 样例输出: 1 4 7 2 5 8 3 6 9 ​ ​ 2. 颈椎病治疗 最近云海学长一…...

父组件用ref获取子组件数据

子组件 Son/index.vue 子组件的数据和方法一定要记得用defineExpose暴露&#xff0c;不然父组件用ref是获取不到的&#xff01;&#xff01;&#xff01; <script setup> import { ref } from "vue"; const sonNum ref(1); const changeSon () > {sonNum.…...

Haskell添加HTTP爬虫ip编写的爬虫程序

下面是一个简单的使用Haskell编写的爬虫程序示例&#xff0c;它使用了HTTP爬虫IP&#xff0c;以爬取百度图片。请注意&#xff0c;这个程序只是一个基本的示例&#xff0c;实际的爬虫程序可能需要处理更多的细节&#xff0c;例如错误处理、数据清洗等。 import Network.HTTP.Cl…...

MySQL 社区开源备份工具 Xtrabackup 详解

文章目录 前言1. Xtrabackup 介绍1.1 物理备份与逻辑备份区别1.2 Xtrabackup 系列版本 2. Xtrabackup 部署2.1 下载安装包2.2 二进制部署2.3 程序文件介绍2.4 备份需要的权限 3. Xtrabackup 使用场景3.1 本地全量备份3.2 本地压缩备份3.3 全量流式备份3.3.1 备份到远程主机3.3.…...

【仿真】ruckig在线轨迹生成器示例

该场景说明了使用 CoppeliaSim 中提供的 Ruckig 在线轨迹生成功能的各种方法&#xff1a; 1. 在线程脚本内使用单个阻塞函数&#xff08;红色&#xff09; 2. 在线程脚本中使用多个非阻塞函数&#xff08;黄色&#xff09; 3. 在非线程脚本中使用多个非阻塞函数&#xff08;…...

LeetCode 面试题 16.22. 兰顿蚂蚁

文章目录 一、题目二、C# 题解 一、题目 一只蚂蚁坐在由白色和黑色方格构成的无限网格上。开始时&#xff0c;网格全白&#xff0c;蚂蚁面向右侧。每行走一步&#xff0c;蚂蚁执行以下操作。 (1) 如果在白色方格上&#xff0c;则翻转方格的颜色&#xff0c;向右(顺时针)转 90 度…...

Docker安装详细步骤及相关环境安装配置(mysql、jdk、redis、自己的私有仓库Gitlab 、C和C++环境以及Nginx服务代理)

目录 一、从空白系统中克隆Centos7系统 二、使用xshell连接docker_tigerhhzz虚拟机​编辑 三、在CentOS7基础上安装Docker容器 四、在Docker中进行安装Portainer 4.1、在Docker中安装MySQL 4.2、在Docker中安装JDK8&#xff0c;安装Java环境 4.3、Docker安装redis&#…...

科研学习|研究方法——Python计量Logit模型

一、离散选择模型 莎士比亚曾经说过&#xff1a;To be, or not to be, that is the question&#xff0c;这就是典型的离散选择模型。如果被解释变量时离散的&#xff0c;而非连续的&#xff0c;称为“离散选择模型”。例如&#xff0c;消费者在购买汽车的时候通常会比较几个不…...

灵活运用Vue指令:探究v-if和v-for的使用技巧和注意事项

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 ⭐ 专栏简介 &#x1f4d8; 文章引言 一、作…...

nvidia-docker部署pytorch服务【GPU工作站】

文章目录 一、安装 Docker二、安装 NVIDIA Container Toolkit三、宿主机安装 cuda 和 nvidia-driver四、测试一、安装 Docker 可以参考这篇文章 https://blog.csdn.net/weixin_43721000/article/details/124237932 二、安装 NVIDIA Container Toolkit 参考nvidia官方 https:/…...

单链表的实现

CSDN主页&#xff1a;醋溜马桶圈_C语言进阶,初始C语言,数据结构-CSDN博客 Gitee主页&#xff1a;mnxcc (mnxcc) - Gitee.com 专栏&#xff1a;数据结构_醋溜马桶圈的博客-CSDN博客 目录 1.认识单链表 2.创建单链表 3.单链表的操作 3.1打印单链表 3.2开辟新空间 3.3尾插 3.4头插…...

【python】面向对象(类型定义魔法方法)

目录 一、引言 二、类型定义 1、什么是类型的定义&#xff1f; 2、案例 三、魔法方法 1、什么是魔法方法 2、基础部分 3、比较操作 4、容器类型 5、属性管理 6、封装 7、方法拓展 8、继承 9、多态 一、引言 Python是一种面向对象的语言&#xff0c;它支持类&#…...

1.微服务与SpringCloud

微服务和SpringCloud 文章目录 微服务和SpringCloud1.什么是微服务2.SpringCloud3. 微服务 VS SpringCloud4. SpringCloud 组件5.参考文档6.版本要求 1.什么是微服务 微服务是将一个大型的、单一的应用程序拆分成多个小型服务&#xff0c;每个服务实现特定的业务功能&#xff…...

【2023全网最全最火】Selenium WebDriver教程(建议收藏)

在本教程中&#xff0c;我将向您介绍 Selenium Webdriver&#xff0c;它是当今市场上使用最广泛的自动化测试框架。它是开源的&#xff0c;可与所有著名的编程语言&#xff08;如Java、Python、C&#xff03;、Ruby、Perl等&#xff09;一起使用&#xff0c;以实现浏览器活动的…...

dimp 导入dmp文件报错:无效的模式名(DM8:达梦数据库)

dimp 导入dmp文件报错:无效的模式名-DM8:达梦数据库 环境介绍1 搭建A1 数据库52361.1 A1数据库5236创建模式名,表,测试数据1.2 从A1数据库5236导出dmp文件 2 搭建A2数据库52372.1 创建 数据用户ABC2311152.2 在A2 数据库5237 导入DMP(报错无效的模式名)2.3 使用REMAP_SCHEMAABC…...

宿主机无法连接docker里的redis问题解决(生产环境慎用)

宿主机无法连接docker里的redis问题解决&#xff08;生产环境慎用&#xff09; 问题描述解决方案 问题描述 1.连接超时 2.连接能连上但马上断开并报错 3.提示保护模式什么的 (error) DENIED Redis is running in protected mode because protected mode is enabled链接redis …...

给女朋友开发个小程序低价点外卖吃还能赚钱

前言 今天又是无聊的一天,逛了下GitHub,发现一个库里面介绍美团饿了吗外卖红包外卖优惠券,先领红包再下单。外卖红包优惠券,cps分成,别人领红包下单,你拿佣金。哇靠,那我岂不是可以省钱还可以赚钱,yyds。。。。想想都美好哈哈哈!!! 回到正题,这个是美团饿了么分销…...

外贸客户管理系统是什么?推荐的管理软件?

外贸客户管理系统哪个好用&#xff1f;海洋建站如何选管理系统&#xff1f; 外贸客户管理系统&#xff0c;是一款专为外贸企业设计的客户关系管理系统&#xff0c;旨在帮助外贸企业建立与维护客户关系&#xff0c;提高客户满意度和忠诚度&#xff0c;提升企业业绩。海洋建站将…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...