2023-10-8讯飞大模型部署2024秋招后端一面(附详解)
1 mybatis的mapper是什么东西
在MyBatis中,mapper
是一个核心概念,它起到了桥梁的作用,连接Java对象和数据库之间的数据。具体来说,mapper
可以分为以下两个部分:
-
Mapper XML文件:
- 这是一个XML文件,其中定义了SQL语句和映射规则。每个SQL语句都有一个唯一的ID,这样Java代码可以引用它。
- 在这个文件中,你可以定义CRUD操作(如
<select>
,<insert>
,<update>
,<delete>
)。 - 你还可以定义结果映射(如
<resultMap>
),这样你可以控制数据库结果集如何映射到Java对象。
-
Mapper接口:
- 这是一个Java接口,它的方法与Mapper XML文件中的SQL语句ID相对应。
- 你不需要为这个接口提供实现。MyBatis会在运行时为你生成实现,这通常是通过代理实现的。
- 当你调用这个接口的方法时,MyBatis会执行对应的SQL语句,并返回结果。
这两部分结合在一起,允许你在Java代码中以面向对象的方式操作数据库,而不需要直接编写SQL语句。
例如,假设你有一个User
类和一个对应的UserMapper
接口。你可以在UserMapper.xml
文件中定义一个<select>
操作来获取一个用户,然后在UserMapper
接口中定义一个相应的方法。当你调用这个方法时,MyBatis会执行XML文件中的SQL语句,并将结果映射到User
对象。
总的来说,MyBatis的mapper
提供了一个高级、面向对象的方式来操作数据库,它隐藏了底层的SQL细节,使得数据库操作更加简洁和直观。
2 mysql
2.1 mysql的索引数据结构,为什么用这个
3 redis
3.1 redis能做哪些事情
Redis是一个高性能的键值对存储系统,它支持的数据结构非常丰富,包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)等。因此,Redis可以用于以下场景:
- 缓存:减少数据库的访问压力,提高应用的响应速度。
- 会话存储:例如Web应用中的用户会话。
- 消息队列:使用List数据结构实现。
- 发布/订阅系统:支持消息的发布和订阅。
- 计数器:例如网站访问计数。
- 实时分析:例如实时统计用户的行为。
- 排行榜/计分板:使用Sorted Set数据结构。
- 地理空间索引:例如查找附近的地点。
- **分布式锁:**redission分布式锁基于redis实现,预防缓存穿透
3.2 你手写一个分布式锁是怎么实现的
3.3 redis分布式锁实现的时候,具体用到了什么命令
答:实现Redis分布式锁主要用到以下命令:
SETNX key value
:只有在键不存在时才设置值。EXPIRE key seconds
:为键设置一个过期时间,以防止死锁。DEL key
:释放锁,删除键。
在新版本的Redis中,可以使用SET key value NX EX seconds
命令结合SETNX
和EXPIRE
的功能。
3.4 缓存击穿的问题,除了使用分布式锁,还有别的方案呢?
答:
我的答案:设置两级缓存,两级缓存中的同一个键值对设置的过期时间是不一样的
使用两级缓存是一个很好的方法来防止缓存击穿。两级缓存通常包括一个本地缓存和一个分布式缓存。本地缓存通常使用LRU(最近最少使用)策略,而分布式缓存可能是基于Redis或Memcached的。
对于同一个键值对设置不同的过期时间,这是一个有效的策略。例如,你可以在本地缓存中设置一个较短的过期时间,而在分布式缓存中设置一个较长的过期时间。当本地缓存中的值过期时,应用可以从分布式缓存中获取值,而不是直接查询数据库。这样,即使分布式缓存中的值也过期,只有一个线程会去数据库中查询,其他线程会等待并从缓存中获取更新后的值。
这种策略可以有效地减少对数据库的访问,特别是在高并发的情况下。但需要注意的是,两级缓存会增加系统的复杂性,需要确保两个缓存之间的同步和一致性。
4 spring
4.1 用过异步编程吗
答:用过CompletableFuture
4.2 哪些场景下用过CompletableFuture
答:
- 并行数据加载:例如,当需要从多个数据源并行加载数据时。
- 异步API调用:例如,调用多个远程服务并在所有服务响应后进行数据聚合。
- 异步计算:对于计算密集型任务,可以使用
CompletableFuture
并行执行。
4.3 你用spring+mybatis构建web应用的时候,发现某一些请求特别慢,你怎么排查呢
排查慢请求:
如果有一些请求非常慢,以下是一些排查的步骤:
-
日志分析:
- 记录每个请求的响应时间。许多现代的web框架和服务器都允许你在日志中记录请求的响应时间。
- 使用日志分析工具或脚本来识别响应时间超过预期阈值的请求。
-
性能监控工具:
- 使用如New Relic、Dynatrace、Datadog等性能监控工具,它们可以提供实时的应用性能指标,并帮助你识别慢请求。
-
分析请求和响应:
- 查看慢请求的输入参数、HTTP头、负载等,以确定是否有特定的模式导致延迟。
- 分析响应内容,看是否有大量的数据被返回,这可能导致延迟。
-
数据库查询优化:
- 如果应用依赖于数据库,使用慢查询日志来识别和优化慢查询。
- 使用数据库的性能分析工具来查看查询执行计划。
-
代码分析:
- 使用代码分析工具,如Java的JProfiler或VisualVM,来查看哪部分代码执行最慢。
-
外部服务:
- 如果应用调用外部服务或API,确保这些服务的响应时间是可接受的。
- 使用工具如
traceroute
或ping
来检查网络延迟。
4.4 内存泄漏的排查:
内存泄漏是指应用程序在不再需要时,未能释放已分配的内存。以下是可能导致内存泄漏的情况和排查方法:
-
常见导致内存泄漏的情况:
- 静态集合类:长时间持有对象引用的静态集合。
- 监听器和其他回调:没有被正确注销的监听器或回调。
- 内部类和匿名类:非静态内部类或匿名类持有外部类的引用。
- 线程池:长时间运行的线程持有对象引用。
- 类加载器:当类加载器持有类的引用时,这些类不能被垃圾收集。
-
排查方法:
- Java堆转储:使用工具如
jmap
来获取堆转储,并使用MAT
(Memory Analyzer Tool)或其他工具来分析。 - 分析工具:使用如VisualVM、JProfiler等工具来监视应用的内存使用情况。
- GC日志:开启GC日志并分析,查看是否有大量的Full GC事件。
- 代码审查:定期审查代码,特别是那些处理资源和对象生命周期的部分。
- Java堆转储:使用工具如
通过上述方法,可以有效地识别和解决应用中的慢请求和内存泄漏问题。
4.5 MAT工具能够分析出这些发生的内存泄露嘛,怎么识别呢
MAT(Memory Analyzer Tool)是一个强大的Java堆分析工具,它可以帮助开发者识别内存泄露和其他内存问题。以下是如何使用MAT来识别内存泄露的步骤:
-
获取堆转储文件:首先,你需要从受影响的Java应用程序获取一个堆转储文件。这通常可以通过JVM的
jmap
工具或其他相关工具来完成。 -
打开堆转储文件:启动MAT并打开你的堆转储文件。
-
使用"Leak Suspects"报告:MAT提供了一个名为"Leak Suspects"的报告,它会尝试识别可能的内存泄露。这是一个很好的起点,因为它会列出可能的泄露对象和它们在堆中的大小。
-
分析对象的路径:为了确定一个对象为什么还在内存中(即它为什么没有被垃圾回收),你可以查看该对象到GC Roots的路径。这可以帮助你识别哪些对象或引用链导致了内存泄露。
-
查看大的对象实例:MAT允许你查看堆中最大的对象实例。这可以帮助你识别那些占用大量内存但可能不需要的对象。
-
使用查询和过滤:MAT提供了一个基于OQL(Object Query Language)的查询系统,允许你执行查询来查找特定的对象或模式。
-
查看线程和类加载器信息:有时,内存泄露可能与特定的线程或类加载器相关。MAT允许你查看这些信息,这可以帮助你进一步定位问题。
-
比较堆转储:如果你有多个堆转储文件(例如,从应用程序运行的不同时间点),你可以使用MAT来比较它们。这可以帮助你识别内存使用的增长趋势和可能的泄露点。
识别内存泄露通常需要一些经验和对应用程序的深入了解。MAT提供了很多有用的工具和视图来帮助你,但最终,你需要结合这些信息和你对应用程序的知识来确定和修复内存泄露。
5 多线程
5.1 使用多线程的时候注意哪些问题
我的答案:并发安全、硬件资料的消耗问题,在这两方面做一个tradeoff
使用多线程时,需要注意以下问题以确保线程安全、高效和可维护的代码:
-
数据竞争和条件竞争:
- 当多个线程尝试同时访问和修改共享数据时,可能会导致数据不一致。为了避免这种情况,需要使用适当的同步机制,如
synchronized
关键字、ReentrantLock
等。
- 当多个线程尝试同时访问和修改共享数据时,可能会导致数据不一致。为了避免这种情况,需要使用适当的同步机制,如
-
死锁:
- 当两个或多个线程永久地等待彼此释放资源时,会发生死锁。为了避免死锁,需要确保按照固定的顺序获取锁,并使用工具如
jstack
来检测和诊断死锁。
- 当两个或多个线程永久地等待彼此释放资源时,会发生死锁。为了避免死锁,需要确保按照固定的顺序获取锁,并使用工具如
-
活锁:
- 当线程不断地尝试执行某个操作,但总是失败并重试时,可能会发生活锁。虽然线程是活跃的,但它们无法向前进展。
-
资源耗尽:
- 创建过多的线程可能会导致系统资源耗尽。使用线程池如
ExecutorService
可以帮助管理和限制线程的数量。
- 创建过多的线程可能会导致系统资源耗尽。使用线程池如
-
线程安全性:
- 不是所有的Java类和库都是线程安全的。在多线程环境中使用它们时,需要确保适当的同步。
-
线程间通信:
- 线程间需要合适的通信机制,如
wait()
、notify()
、BlockingQueue
等,以确保正确的协作。
- 线程间需要合适的通信机制,如
-
线程优先级和饥饿:
- 设置线程的优先级可能会导致线程饥饿,即低优先级的线程得不到执行。通常,最好避免修改线程的优先级。
-
任务划分和粒度:
- 为了获得最佳的并发性能,需要合理地划分任务。太大的任务可能会导致其他线程等待,而太小的任务可能会导致过多的线程切换开销。
-
异常处理:
- 在多线程环境中,需要确保适当地处理异常,否则可能会导致线程意外终止。
-
可见性问题:
在没有适当同步的情况下,线程对变量的修改可能不会被其他线程看到。使用
volatile
关键字或其他同步机制可以确保变量的可见性。 -
上下文切换开销:
频繁的上下文切换会导致性能下降。尽量减少锁的竞争和线程的数量可以帮助减少上下文切换。
-
测试和调试:
多线程代码比单线程代码更难测试和调试。使用工具如
Java Concurrency in Practice
和专门的并发测试库可以帮助识别问题。
总之,多线程编程是复杂的,需要深入的理解和经验来确保正确和高效的代码。
6 消息队列
6.1 kafka的消息积压问题怎么解决呢?
Kafka的消息积压问题通常是指消费者不能及时处理生产者发送的消息,导致消息在Kafka中堆积。以下是一些建议的解决方案:
-
增加消费者数量:
- 如果消费者处理能力不足,可以增加消费者的数量。在Kafka中,可以通过增加消费者组中的消费者实例来实现。
-
优化消费者处理速度:
- 优化消费者的处理逻辑,确保每条消息都能够快速被处理。
- 如果消费者需要进行复杂的处理,如数据库操作,可以考虑使用缓存或批量操作来提高效率。
-
调整Kafka参数:
- 调整
fetch.min.bytes
和fetch.max.wait.ms
参数,使消费者能够更频繁地从Kafka中拉取数据。 - 调整
max.poll.records
参数,使消费者每次拉取更多的消息。
- 调整
-
监控和告警:
- 使用监控工具,如Prometheus和Grafana,来监控Kafka的积压情况。
- 设置告警,当积压达到一定阈值时,立即通知相关人员。
-
重新分配分区:
- 如果某些分区的消息积压特别严重,可以考虑重新分配分区,使得消费者能够更均匀地处理消息。
-
优化生产者速度:
- 如果生产者发送消息的速度过快,导致消费者无法跟上,可以考虑限制生产者的发送速度。
-
使用Kafka Streams或KSQL:
- 如果消费者需要进行复杂的流处理,可以考虑使用Kafka Streams或KSQL来分担处理压力。
-
数据压缩:
- 使用数据压缩可以减少Kafka中的数据量,从而减轻积压压力。
-
清理旧数据:
- 调整Kafka的
log.retention.hours
参数,定期清理旧的消息,以释放存储空间。
- 调整Kafka的
-
扩展Kafka集群:
- 如果Kafka集群的资源不足,可以考虑增加更多的broker来分担压力。
总之,解决Kafka的消息积压问题需要综合考虑生产者、消费者和Kafka集群的各个方面,通过监控、调优和扩展来确保消息能够及时被处理。
7 其他方面的能力
7.1 有接触过容器化嘛
容器化是一种技术,它允许将应用程序及其所有依赖项、运行时、系统工具和系统库打包到一个容器中。这个容器可以在任何环境中一致地运行,无论是开发者的本地机器、测试环境还是生产环境。容器化的主要优势在于它提供了一种隔离机制,确保应用程序在不同的环境中都能以相同的方式运行。
容器化的主要特点包括:
-
一致性:由于应用程序和所有依赖项都打包在同一个容器中,所以无论容器在哪里运行,它都会表现得一样。
-
轻量级:与传统的虚拟机相比,容器不需要完整的操作系统,只需要应用程序和其运行时。这使得容器更加轻量级和快速。
-
可移植性:容器可以在任何支持容器技术的环境中运行,无论是物理机、虚拟机还是云环境。
-
隔离:每个容器都在其自己的命名空间中运行,与其他容器和主机系统隔离。这提供了安全性和隔离性。
-
微服务架构:容器化非常适合微服务架构,因为它允许每个服务在其自己的容器中独立运行。
-
快速部署和扩展:容器可以快速启动和停止,这使得部署、扩展和回滚变得更加简单和快速。
Docker是最流行的容器化技术,它提供了一个平台来创建、运行和管理容器。Kubernetes则是一个开源的容器编排工具,用于自动化容器部署、扩展和管理。
总的来说,容器化是一种使应用程序更加一致、可移植和可扩展的技术,它正在改变软件开发和部署的方式。
7.2 你还会其他语言吗
7.3 有接触过ML嘛
7.4 你一般是怎么学习技术的呢
7.5 会写博客嘛
7.6 会读一些开源项目的源码嘛
答:redis,spring线程池都读过
7.7 会介意来合肥嘛
答:
8 反问
8.1 做什么业务呢
答:大模型
8.2 大模型哪方面的
答:大模型后台服务的,工程化的去提供一些周边的生态
8.3 有哪些周边呢
相关文章:

2023-10-8讯飞大模型部署2024秋招后端一面(附详解)
1 mybatis的mapper是什么东西 在MyBatis中,mapper是一个核心概念,它起到了桥梁的作用,连接Java对象和数据库之间的数据。具体来说,mapper可以分为以下两个部分: Mapper XML文件: 这是一个XML文件ÿ…...

如何为 Elasticsearch 创建自定义连接器
了解如何为 Elasticsearch 创建自定义连接器以简化数据摄取过程。 作者:JEDR BLASZYK Elasticsearch 拥有一个摄取工具库,可以从多个来源获取数据。 但是,有时你的数据源可能与 Elastic 现有的提取工具不兼容。 在这种情况下,你可…...

Debian11 安装 OpenJDK8
1. 下载安装包 wget http://snapshot.debian.org/archive/debian-security/20220210T090326Z/pool/updates/main/o/openjdk-8/openjdk-8-jdk_8u322-b06-1~deb9u1_amd64.deb wget http://snapshot.debian.org/archive/debian-security/20220210T090326Z/pool/updates/main/o/op…...

[Machine Learning][Part 6]Cost Function代价函数和梯度正则化
目录 拟合 欠拟合 过拟合 正确的拟合 解决过拟合的方法:正则化 线性回归模型和逻辑回归模型都存在欠拟合和过拟合的情况。 拟合 来自百度的解释: 数据拟合又称曲线拟合,俗称拉曲线,是一种把现有数据透过数学方法来代入一条…...

工业自动化编程与数字图像处理技术
工业自动化编程与数字图像处理技术 编程是计算机领域的基础技能,对于从事软件开发和工程的人来说至关重要。在工业自动化领域,C/C仍然是主流的编程语言,特别是用于工业界面(GUI)编程。工业界面是供车间操作员使用的,使用诸如Hal…...

JY61P.C
/** File Name : JY61P.cDescription : attention © Copyright (c) 2020 STMicroelectronics. All rights reserved.This software component is licensed by ST under Ultimate Liberty licenseSLA0044, the “License”; You may not use this file except in complian…...

Go编程:使用 Colly 库下载Reddit网站的图像
概述 Reddit是一个社交新闻网站,用户可以发布各种主题的内容,包括图片。本文将介绍如何使用Go语言和Colly库编写一个简单的爬虫程序,从Reddit网站上下载指定主题的图片,并保存到本地文件夹中。为了避免被目标网站反爬,…...

高性能日志脱敏组件:已支持 log4j2 和 logback 插件
项目介绍 日志脱敏是常见的安全需求。普通的基于工具类方法的方式,对代码的入侵性太强,编写起来又特别麻烦。 sensitive提供基于注解的方式,并且内置了常见的脱敏方式,便于开发。 同时支持 logback 和 log4j2 等常见的日志脱敏…...

一文读懂PostgreSQL中的索引
前言 索引是加速搜索引擎检索数据的一种特殊表查询。简单地说,索引是一个指向表中数据的指针。一个数据库中的索引与一本书的索引目录是非常相似的。 拿汉语字典的目录页(索引)打比方,我们可以按拼音、笔画、偏旁部首等排序的目录…...

windows的批量解锁
场景 场景是我从github上拉了一个c#项目启动的时候报错, 1>C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\amd64\Microsoft.Common.CurrentVersion.targets(3327,5): error MSB3821: 无法处理文件 UI\Forms\frmScriptBuilder.…...

Nginx配置微服务避免actuator暴露
微服务一般在扫漏洞的情况下,需要屏蔽actuator健康检查 # 避免actuator暴露 if ($request_uri ~ "/actuator") { return 403; }...

GEE——在GEE中计算地形位置指数TPI
简介: DEM中的TPI计算是指通过计算每个像元高程与其邻域高程的差值来计算地形位置指数(Topographic Position Index)。TPI 是描述地形起伏度和地形形态的一个重要指标,可以用于地貌分类、土壤侵蚀、植被分布等领域。 地形位置指数(Topographic Position Index,TPI)是用…...

树的基本操作(数据结构)
树的创建 //结构结点 typedef struct Node {int data;struct Node *leftchild;struct Node *rightchild; }*Bitree,BitNode;//初始化树 void Create(Bitree &T) {int d;printf("输入结点(按0为空结点):");scanf("%d",&d);if(d!0){T (Bitree)ma…...

Python复刻游戏《贪吃蛇大作战》
入门教程、案例源码、学习资料、读者群 请访问: python666.cn 大家好,欢迎来到 Crossin的编程教室 ! 曾经有一款小游戏刷屏微信朋友圈,叫做《贪吃蛇大作战》。一个简单到不行的游戏,也不知道怎么就火了,还上…...

SpringCloud之Gateway整合Sentinel服务降级和限流
1.下载Sentinel.jar可以图形界面配置限流和降级规则 地址:可能需要翻墙 下载jar文件 2.引入maven依赖 <!-- spring cloud gateway整合sentinel的依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-s…...

深度学习——深度卷积神经网络(AlexNet)
深度学习——深度卷积神经网络(AlexNet) 文章目录 前言一、学习表征二、AlexNet实现2.1. 模型设计2.2. 激活函数2.3. 容量控制与预处理2.4. 训练模型 总结 前言 在前面学习了卷积神经网络的基本原理,之后将继续学习现代卷积神经网络架构。而本章将学习其…...

提高编程效率-Vscode实用指南
您是否知道全球73%的开发人员依赖同一个代码编辑器? 是的,2023 年 Stack Overflow 开发者调查结果已出炉,Visual Studio Code 迄今为止再次排名第一最常用的开发环境。 “Visual Studio Code 仍然是所有开发人员的首选 IDE,与专业…...

ES 数据库
ES 数据库 通过 API 查询通过 JSON 查询 熟悉 es 的同学都知道 es 一般有两种查询方式 1,在 java 中构建查询对象,调用 es 提供的 api 做查询 2,使用 json 调用接口做查询 查询语句无非是将足够的信息丢给数据库,但是它却和 SQL …...

面试经典150题——Day14
文章目录 一、题目二、题解 一、题目 134. Gas Station There are n gas stations along a circular route, where the amount of gas at the ith station is gas[i]. You have a car with an unlimited gas tank and it costs cost[i] of gas to travel from the ith stati…...

Pika v3.5.1发布!
Pika 社区很高兴宣布,我们今天发布已经过我们生产环境验证 v3.5.1 版本,https://github.com/OpenAtomFoundation/pika/releases/tag/v3.5.1 。 该版本不仅做了很多优化工作,还引入了多项新功能。这些新功能包括 动态关闭 WAL、ReplicationID…...

Kotlin中的数组
数组是一种常见的数据结构,用于存储相同类型的多个元素。在 Kotlin 中,我们可以使用不同的方式声明、初始化和操作数组。 在 Kotlin 中,有多种方式可以定义和操作数组。我们将通过以下示例代码来展示不同的数组操作: fun main()…...

(3) OpenCV图像处理kNN近邻算法-识别摄像头数字
目录 一、代码简介 二、程序代码 三、使用的图片资源 1、图片digits.png...

上海亚商投顾:沪指震荡调整 转基因概念股逆势大涨
上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 沪指昨日低开低走,深成指、创业板指均跌超1%,双双创出年内新低。转基因概念股逆势大涨…...

abap中程序跳转(全)
1.常用 1.CALL TRANSACTION 1.CALL TRANSACTION ta WITH|WITHOUT AUTHORITY-CHECK [AND SKIP FIRST SCREEN]. 其中ta为事务码tcode使用时要打单引号() 2. CALL TRANSACTION ta WITH|WITHOUT AUTHORITY-CHECK USING bdc_tab { {[MODE mode] [UPDATE u…...

启动速度提升 10 倍:Apache Dubbo 静态化方案深入解析
作者:华钟明 文章摘要: 本文整理自有赞中间件技术专家、Apache Dubbo PMC 华钟明的分享。本篇内容主要分为五个部分: -GraalVM 直面 Java 应用在云时代的挑战 -Dubbo 享受 AOT 带来的技术红利 -Dubbo Native Image 的实践和示例 -Dubbo…...

PCB命名规则-allegro
PCB命名规则-allegro 一、焊盘命名规则 1、 贴片矩形焊盘 命名规则:SMD长(L)宽(W)(mil) 举例:SMD90X60 2、 贴片圆焊盘 命名规则:SMDC焊盘直径(D&…...

[架构之路-240]:目标系统 - 纵向分层 - 应用层 - 应用层协议与业务应用程序的多样化,与大自然生物的丰富多彩,异曲同工
目录 前言: - 倒金子塔结构 - 大自然的组成 一、应用层在计算机系统中的位置 1.1 计算机应用程序的位置 1.1.1 业务应用程序概述 1.1.2 应用程序的分类 - 按照计算机作用范围 1.1.3 业务应用程序分类 - 按照行业分类 1.2 网络应用协议的位置 1.2.1 网络协…...

探索数字时代的核心:服务器如何塑造未来并助你成就大业
🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...

spring6-资源操作:Resources
资源操作:Resources 1、Spring Resources概述2、Resource接口3、Resource的实现类3.1、UrlResource访问网络资源3.2、ClassPathResource 访问类路径下资源3.3、FileSystemResource 访问文件系统资源3.4、ServletContextResource3.5、InputStreamResource3.6、ByteAr…...

C语言 内存
内存分配 内存分配的类型 C/C中内存分为5个区,分别为栈区、堆区、全局/静态存储区、常量存储区、代码区 静态内存分配:编译时分配,包括全局、静态全局、静态局部三种变量。 动态内存分配:运行时分配,包括栈&#x…...