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

一些面试题总结(一)

1、string为什么是不可变的,有什么好处

原因

1、因为String类下的value数组是用final修饰的,final保证了value一旦被初始化,就不可改变其引用。

2、此外,value数组的访问权限为 private,同时没有提供方法去修改这个数组。

3、而且String类是用final修饰的,不可以被继承,进而避免了子类修改String。

2、

②节省空间–字符串常量池通过使用常量池,内容相同的字符串可以使用同一个对象,从而节省内存空间。

③线程安全,String 对象是不可修改的,如果线程尝试修改 String 对象,会创建新的String,所以不存在并发修改同一个对象的问题

④性能:String 被广泛应用于 HashMap、Hashset 等哈希类中,当我们对一个String类型的key值求hashcode时,String的 hashcode 只需要计算1次后就可以缓存起来,因此在哈希类中使用 String 对象可以提升性能。

2、sychronized和locked的区别?

1、synchronized是一个关键字而,lock是一个接口

2、使用 synchronized 时,退出同步代码块锁会自动释放,而使用 Lock 时,需要手动调用 unlock 方法释放锁

3、synchronized可以作用在方法和代码块上,而lock只能作用在代码块上。

4、synchronized采用的是monitor对象监视器,lock的底层原理是AQS.

5、synchronized是非公平锁,而lock可以是公平锁也可以是非公平锁。

6、Lock 提供了许多 synchronized 不具备的功能,例如获取等待状态、公平锁、可打断(等待获取锁的时候被打断)、可超时(即可以设置等待锁的最长时间,超过了这个时间就不会获取锁了)、多条件变量(即给锁设置不同的条件变量,线程可以对条件变量进行等待和释放,相当于信号量的机制)

3、接口和抽象类的区别?

1、抽象类只能单继承而,接口可以多实现。

2、抽象类可以有构造方法,而接口中不能有构造方法,

3、抽象类中可以有成员变量而接口中没有成员变量只有常量(public static final)

4、抽象类中的方法类型可以是任意修饰符,Java8之前接口中的方法只能是public,Java9支持private类型

4、Redis的基本数据类型?

字符串String、哈希表Hash、列表List、集合Set、有序集合Zset。

(1)字符串String:可以用来做最简单的数据,可以缓存某个简单的字符串也可以缓存某个json格式的字符串,Redis分布式锁的实现就利用了这种数据结构,还包括可以实现计数器、Session共享、分布式ID。

(2)哈希表Hash:可以用来存储一些key-value对,更适合用来存储对象。

(3)列表List:通过命令的组合,既可以当作栈,也可以当作队列来使用可以用来缓存类似微信公众号、微博等消息流数据。

(4)集合Set(String字符串类型的无序集合):和列表类似,也可以存储多个元素,但是不能重复,集合可以进行交集、并集、差集操作,从而可以实现类似,我和某人共同关注的人、朋友圈点赞等功能。

(5)有序集合Zset(Zset是String类型的有序集合):不可重复,有序集合中的每个元素都需要指定一个分数,根据分数对元素进行升序排序。

5、Java的基本数据类型

6、SpringMVC的实现逻辑?

候选人

嗯,这个知道的,它分了好多步骤

1、用户发送出请求到前端控制器DispatcherServlet,这是一个调度中心

2、DispatcherServlet收到请求调用HandlerMapping(处理器映射器)。

3、HandlerMapping找到具体的处理器(可查找xml配置或注解配置),生成处理器对象及处理器拦截器(如果有),再一起返回给DispatcherServlet。

4、DispatcherServlet调用HandlerAdapter(处理器适配器)。

5、HandlerAdapter经过适配调用具体的处理器(Handler/Controller)。

6、Controller执行完成返回ModelAndView对象。

7、HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet。

8、DispatcherServlet将ModelAndView传给ViewReslover(视图解析器)。

9、ViewReslover解析后返回具体View(视图)。

10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。

11、DispatcherServlet响应用户。

7、SpringBoot如何实现依赖注入?

1、使用 XML 配置依赖注入

在 Spring Boot 中,使用 XML 配置依赖注入(DI)时,需要使用元素来定义 bean,并使用元素来为 bean 的属性注入值或依赖对象。

2、使用 Java 配置类实现依赖注入(推荐)

使用Java Config 实现依赖注入可以通过@Configuration和@Bean注解来实现。

3、使用注解来进行依赖注入(推荐)

可以使用注解来进行依赖注入,常用的注解有@Autowired和@Qualifier。

8、为什么MySQL选择B+树索引?

1、因为B+树的非叶结点只存放索引,数据都存放在叶子结点,而B树的所有结点既存放索引又存放数据,因此在数据量一定的情况下,B+树的高度较小,IO次数比较少。

2、B+树的查找都是到达叶子结点才算查找结束,因此B+树的检索效率比较稳定。

3、B+树的叶子节点有一条指针指向与它相邻的叶子节点,形成一个链表,因此更适用于范围查询以及排序

9、where和having的区别?

SELECT customer_id, SUM(total_price) AS total FROM orders GROUP BYcustomer id HAVING SUM(total price)>100;

1、WHERE 子句在执行查询之前筛选原始行数据,而 HAVING 子句基于聚合函数计算的结果进行筛选。

2、WHERE 出现在 FROM 子句之后,GROUP BY 子句之前,而 HAVING 出现在 GROUP BY 子句之后、ORDER BY 子句之前。

3、WHERE 可以使用比较操作符和逻辑操作符来指定过滤条件,而 HAVING不仅可以使用比较操作符和逻辑操作符,还可以使用聚合函数。

10、什么是线程池?

线程池是一种并发编程的机制,用于管理和复用线程,以提高程序的性能和资源利用率。

在多线程环境中,频繁地创建和销毁线程会带来较大的开销,而线程池通过事先创建一组线程并将它们置于待命状态,有效地减少了这种开销。

11、hashmap扩容介绍,什么时候开始扩容?

因为HashMap的容量必须是2的N次方,当我们在构造函数中传入初始容量的时候,HashMap会根据传入的容量计算一个大于等于该容量的最小的2的N次方。如果不传入初始容量,会在第一次添加数据的时候把数组的容量扩容为16。

(1)当HashMap中的元素数量达到数组长度乘以加载因子时,就会触发扩容操作。加载因子默认为0.75,可以通过构造方法设置。

(2)当需要扩容时,HashMap 会创建一个新的数组,其大小为原数组的两倍。

(3)对于原数组中的每个非空位置(即存储了键值对的位置),会重新计算它们在新数组中的位置。

- 没有hash冲突的节点,则直接使用 <font style="color:#DF2A3F;">e.hash & (newCap - 1) 计算新数组的索引位置</font>
- 如果是红黑树,走红黑树的添加
- 如果是链表,则需要遍历链表,有可能需要拆分链表,<font style="color:#DF2A3F;">即判断(e.hash & oldCap)是否为0</font>,如果为0,说明它的位置没有超过原来的数组,该<font style="color:#DF2A3F;">元素的位置下标还是和老数组的下标一样</font>,如果不为0,则移动到(<font style="color:#DF2A3F;">原下标+原数组容量</font>)这个位置上。

(5)当数组中的所有元素都被放入新的位置后,新数组取代了原来的数组成为新的存储结构。

(6)扩容操作完成后,原数组会被垃圾回收。

12、Redis是单线程的,但是为什么还那么快?

1、完全基于内存的,C语言编写,读写速度比较快。

2、采用单线程,避免不必要的上下文切换可竞争条件。

3、Redis 内置了多种优化过后的数据结构,性能非常高

4、Redis通过I/0多路复用程序来监听来自客户端的大量连接。

I/0多路复用是指利用单个线程来同时监听多个Socket,并在某个Socket可读、可写时得到通知,从而避免无效的等待,充分利用CPU资源。目前的I/O多路复用都是采用的epoll模式实现,它会在通知用户进程Socket就绪的同时,把已就绪的Socket写入用户空间,不需要挨个遍历Socket来判断是否就绪,提升了性能。

13、Redis内存淘汰策略?

这个在redis中提供了8种淘汰策略,默认是noeviction,不删除任何数据,内部不足直接报错。

淘汰策略是可以在redis的配置文件中进行设置的,里面有两个非常重要的概念,一个是LRU,另外一个是LFU

LRU的意思就是最少最近使用,用当前时间减去最后一次访问时间,这个值越大则淘汰优先级越高。

LFU的意思是最少频率使用。会统计每个key的访问频率,值越小淘汰优先级越高。

14、类加载流程?

类加载的过程包括:加载、验证、准备、解析、初始化、使用、卸载,其中验证、准备、解析统称为连接。

(1)加载:通过一个类的全限定名来获取定义该类的二进制字节流,在内存中生成一个代表这个类的java.lang.Class对象.

(2)验证:确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全

(3)准备:为静态变量分配内存并设置静态变量初始值,这里所说的初始值“通常情况”下是数据类型的零值。

(4)解析:将常量池内的符号引用替换为直接引用,

(5)初始化:到了初始化阶段,才真正开始执行类中定义的Java初始化程序代码。主要是静态变量赋值动作和静态语句块(static})中的语句。

(6)使用:JVM开始从入口方法开始执行用户的程序代码。

(7)卸载:当用户程序代码执行完毕后,JVM便开始销毁创建的Class对象。

15、jvm内存区域,虚拟机栈里面是什么,堆里面的数据什么时候进入老年代?

Java虚拟机栈: 线程私有的,每个线程都有一个私有的Java虚拟机栈,用于存储方法调用的局部变量、操作数栈、动态链接、方法出口等信息。每个方法的调用都会创建一个栈帧,方法执行完毕后栈帧会被销毁。如果线程请求的栈深度大于虚拟机允许的深度,将抛出栈溢出异常。

堆:用于存储对象实例和数组。

①Young GC后,如果对象太大无法进入Survivor区,则会通过分配担保机制进入老年代。

②对象每在Survivor区中“熬过”一次Young Gc,年龄就增加1岁,当它的年龄增加到一定程度(默认为15岁,可以通过-XX:MaxTenuringThreshold设置),就将会被晋升到老年代中。

16、程序计数器是干什么的?

程序计数器:用于存储当前线程执行的字节码指令的地址。在多线程环境下每个线程都有自己独立的程序计数器,以保证线程切换后能恢复到正确的执行位置。

17、方法执行的时候栈里面是怎么样的?

每个方法的调用都会创建一个栈帧,方法执行完毕后栈帧会被销毁。如线程请求的栈深度大于虚拟机允许的深度,将抛出栈溢出异常。

18、Java虚拟机的方法区了解吗?

在JDK1.7中,方法区也叫作永久代,存放着已被加载的类的信息,常量,静态变量。在JDK1.8中,方法区不存在了,被元空间所取代了,原来的方法区被分为两个部分,1、加载的类信息,2、运行时常量池。加载的类信息被保存在元空间中,运行时常量池保存在堆中。

19、synchronized怎么用的,原理?

synchronized可以被用在代码块和方法上。

  • Synchronized采用互斥的方式让同一时刻至多只有一个线程能持有对象锁,synchronized 属于悲观锁。
  • 它的底层由对象监视器monitor实现的,monitor是jvm级别的对象( C++实现),使用的时候会把对象锁关联monitor。关联的过程是对象的对象头中的MarkWord字段,记录了指向对象监视器Monitor的指针
  • 在monitor内部有三个属性,分别是owner、entrylist、waitset
  • 其中owner是关联的获得锁的线程,并且只能关联一个线程;entrylist关联的是处于阻塞状态的线程;waitset关联的是处于Waiting状态的线程

20、TCP的三次握手?

  • 一次握手:客户端发送带有 SYN=1同步标志和SEQ序号=x 的数据包 -> 服务端,该报文不包含应用层数据,然后客户端进入 SYN_SENT 状态,等待服务端的确认;
  • 二次握手:服务端发送带有 SYN=1和ACK=1的标志位以及确认应答号x+1+自己的序号y 的数据包 –> 客户端,该报文也不包含应用层数据,然后服务端进入 SYN_RECD 状态;
  • 三次握手:客户端发送带有 ACK=1的标志位和确认应答号ACK=y+1的数据包 –> 服务端,这次报文可以携带客户到服务端的数据,然后客户端和服务端都进入ESTABLISHED 状态,完成 TCP 三次握手。

20、为什么要三次握手?

三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。

  1. 第一次握手:Client 什么都不能确认;Server 确认了对方发送正常,自己接收正常
  2. 第二次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:对方发送正常,自己接收正常
  3. 第三次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己发送、接收正常,对方发送、接收正常

相关文章:

一些面试题总结(一)

1、string为什么是不可变的&#xff0c;有什么好处 原因&#xff1a; 1、因为String类下的value数组是用final修饰的&#xff0c;final保证了value一旦被初始化&#xff0c;就不可改变其引用。 2、此外&#xff0c;value数组的访问权限为 private&#xff0c;同时没有提供方…...

泄露的文档显示 Google 似乎意识到了 Tensor 处理器存在过热问题

Google 知道其 Tensor 芯片存在一些问题&#xff0c;尤其是在过热和电池寿命方面&#xff0c;显然他们正在努力通过即将推出的代号为"Malibu"的 Tensor G6 来解决这一问题。 Android Authority 泄露的幻灯片显示&#xff0c;过热是基于 Tensor 的 Pixel 手机退换货的…...

python爬虫案例——网页源码被加密,解密方法全过程

文章目录 1、任务目标2、网页分析3、代码编写1、任务目标 目标网站:https://jzsc.mohurd.gov.cn/data/company,该网站的网页源码被加密了,用于本文测验 要求:解密该网站的网页源码,请求网站并返回解密后的明文数据,网页内容如下: 2、网页分析 进入网站,打开开发者模式,…...

2.4_SSRF服务端请求伪造

SSRF服务端请求伪造 定义&#xff1a;服务端请求伪造。是一种攻击者构造请求后&#xff0c;交由服务端发起请求的漏洞&#xff1b; 产生原理&#xff1a;该服务器提供了从其他服务器获取数据的功能&#xff0c;但没有对用户提交的数据做严格校验&#xff1b; 利用条件&#…...

数据分析反馈:提升决策质量的关键指南

内容概要 在当今快节奏的商业环境中&#xff0c;数据分析与反馈已成为提升决策质量的重要工具。数据分析不仅能为企业提供全面的市场洞察&#xff0c;还能帮助管理层深入了解客户需求与行为模式。掌握数据收集的有效策略和工具&#xff0c;企业能够确保获得准确且相关的信息&a…...

一步步安装deeponet的详细教学

1.deepoent官网如下&#xff1a; https://github.com/lululxvi/deeponet 需要下载依赖 1.python3 2.DeepXDE&#xff08;这里安装DeepXDE<0.11.2,这个最方便&#xff09; Optional: For CNN, install Matlab and TensorFlow 1; for Seq2Seq, install PyTorch&#xff0…...

Devops业务价值流:版本发布最佳实践

敏捷开发中&#xff0c;版本由多个迭代构建而成&#xff0c;每个迭代都是产品进步的一环。当版本最后一个迭代完成时&#xff0c;便启动了至关重要的上线流程。版本发布流程与规划流程相辅相成&#xff0c;确保每个迭代在版本中有效循环执行&#xff0c;最终达成产品目标。 本…...

背包问题(三)

文章目录 一、二维费用的背包问题二、潜水员三、机器分配四、开心的金明五、有依赖的背包问题 一、二维费用的背包问题 题目链接 #include<iostream> #include<algorithm> using namespace std; const int M 110; int n,m,kg; int f[M][M];int main() {cin >…...

linux之调度管理(2)-调度器 如何触发运行

一、调度器是如何在程序稳定运行的情况下进行进程调度的 1.1 系统定时器 因为我们主要讲解的是调度器&#xff0c;而会涉及到一些系统定时器的知识&#xff0c;这里我们简单讲解一下内核中定时器是如何组织&#xff0c;又是如何通过通过定时器实现了调度器的间隔调度。首先我们…...

深入理解 Vue 3 中的 Props

深入理解 Vue 3 中的 Props Vue 3 引入了 Composition API 等新特性&#xff0c;组件的定义和使用也变得更为灵活。而在组件通信中&#xff0c;Props&#xff08;属性&#xff09;扮演了重要角色&#xff0c;帮助父组件向子组件传递数据&#xff0c;形成单向的数据流动&#x…...

校园周边美食探索及分享平台

摘要&#xff1a; 美食一直是与人们日常生活息息相关的产业。传统的电话订餐或者到店消费已经不能适应市场发展的需求。随着网络的迅速崛起&#xff0c;互联网日益成为提供信息的最佳俱渠道和逐步走向传统的流通领域&#xff0c;传统的美食业进而也面临着巨大的挑战&#xff0…...

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

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

石墨舟氮气柜:半导体制造中的关键保护设备

石墨舟是由高纯度石墨材料制成的&#xff0c;主要用于承载硅片或其他基板材料通过高温处理过程&#xff0c;是制造半导体器件和太阳能电池片的关键设备之一。 石墨舟在空气中容易与氧气发生反应&#xff0c;尤其是在高温处理后&#xff0c;表面可能更为敏感&#xff1b;石墨舟具…...

性能调优专题(7)之Innodb底层原理与Mysql日志机制深入剖析

一、MYSQL的内部组件结构 大体来说,Mysql可以分为Server层和存储引擎层两部分。 1.1 Server层 Server层主要包括连接器、查询缓存、词法分析器、优化器等。涵盖MYSQL的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功…...

量子计算及其在密码学中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 量子计算及其在密码学中的应用 量子计算及其在密码学中的应用 量子计算及其在密码学中的应用 引言 量子计算概述 定义与原理 发展…...

LSM树 (Log-Structured Merge Tree)、Cuckoo Hashing详细解读

一、LSM 树 (Log-Structured Merge Tree) LSM 树&#xff08;Log-Structured Merge Tree&#xff09; 是一种专为 高效写入和批量更新 设计的数据结构&#xff0c;特别适合于 高写入密度 的应用场景&#xff0c;如数据库和文件系统。它广泛用于 NoSQL 数据库&#xff08;如 Ca…...

VMware中的重要日志文件 vobd.log 学习总结

最近几天处理完毕存储的故障后&#xff0c;接着就是host方面的问题&#xff0c;Vmware无法访问到存储&#xff0c;其实存储的LUN和POOL 已经online ready了&#xff0c;但是主机还是访问不到存储。 这里介绍下Vmware中的一个重要的日志文件 vobd.log&#xff0c;该文件对于分析…...

MyBatis 返回 Map 或 List<Map>时,时间类型数据,默认为LocalDateTime,响应给前端默认含有‘T‘字符

一、问题 MyBatis 返回 Map 或 List时&#xff0c;时间类型数据&#xff0c;默认为LocalDateTime Springboot 响应给前端的LocalDateTime&#xff0c;默认含有’T’字符&#xff0c;如何统一配置去掉 二、解决方案 1、pom.xml 增加依赖&#xff08;2024.11.6 补充&#xff…...

ASR TP

ASR翱捷科技 ASR kernel 5.10 android14 ASR EVB平台 jd9365tr(jadard) spi 1.驱动: 跟mtk驱动一样,放进去,不用改 asr_android14.0_alpha\asr\kernel\linux\drivers\input\touchscreen\jadard makefile: asr_android14.0_alpha\asr\kernel\linux\drivers\input\t…...

Tomcat与Nginx之全面比较

概况 Apache Tomcat Apache Tomcat&#xff0c;通常简称为Tomcat&#xff0c;是一个开源的Web应用服务器&#xff0c;它主要用于运行Java Web应用程序。Tomcat实现了Java Servlet和JavaServer Pages&#xff08;JSP&#xff09;技术&#xff0c;这些是Java EE规范的一部分。To…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

c# 局部函数 定义、功能与示例

C# 局部函数&#xff1a;定义、功能与示例 1. 定义与功能 局部函数&#xff08;Local Function&#xff09;是嵌套在另一个方法内部的私有方法&#xff0c;仅在包含它的方法内可见。 • 作用&#xff1a;封装仅用于当前方法的逻辑&#xff0c;避免污染类作用域&#xff0c;提升…...