.NET/C#⾯试题汇总系列:基础语法
1. 字符串中string str=null和string str=""和string str=string.Empty的区别?
string str = null;:这种方式声明了一个字符串变量str,并将其初始化为null。这意味着str不指向任何实际的字符串对象。如果你试图访问str的属性或方法,将会抛出一个NullReferenceException异常。
string str = "";:这种方式声明了一个字符串变量str,并将其初始化为空字符串("")。这意味着str是一个有效的字符串对象,但它的长度为0,没有任何字符。你可以安全地调用str的方法,而不会抛出异常。
string str = string.Empty;:这种方式与string str = "";相同,都是将str初始化为一个空字符串。使用string.Empty是一种编程习惯,因为它明确表示你的意图是将字符串初始化为空。然而,在性能方面,这两种方式没有区别。
总结一下,
如果你想要声明一个未初始化的字符串变量,可以使用
string str;(默认情况下,局部变量会被初始化为null)。如果你想要将字符串初始化为空,可以使用
string str = "";或string str = string.Empty;。
2. byte b = 'a'; byte c = 1; byte d = 'ab'; byte e = '啊'; byte g = 256; 这些变量有些 错误是错再哪⾥?
在C#中,byte是一种基本数据类型,用于表示一个8位无符号整数。它的取值范围是0到255。byte类型的变量可以用来存储二进制数据、图像数据、音频数据等。
3.string和StringBuilder的区别,两者性能的⽐较
可变性:string是不可变的,这意味着一旦创建了一个string对象,就不能更改它的内容。而StringBuilder是可变的,可以在不创建新对象的情况下修改其内容。
性能:由于string的不可变性,每次对其进行修改时,都需要创建一个新的string对象,这会导致额外的内存分配和垃圾回收开销。而StringBuilder在修改时不会创建新的对象,因此在进行大量字符串操作时,使用StringBuilder的性能会更好。
4.什么是扩展⽅法?
扩展方法(Extension Methods)是一种在C#中为现有类型添加新功能的方法,而无需修改原始类型的源代码。
条件:按扩展⽅法必须满⾜的条件,
1.必须要静态类中的静态⽅法
2.第⼀个参数的类型是要扩展的类型,并且需要添加this关键字以标识其为扩展⽅法
建议:通常,只在不得已的情况下才实现扩展⽅法,并谨慎的实现
使⽤:不能通过类名调⽤,直接使⽤类型来调⽤
5.byte a =255;a+=5;a的值是多少?
byte的取值范围是0--255,a+=1时,a的值时0,所 以a+=5时,值是4
6.什么是装箱和拆箱?
装箱:将值类型转换为引用类型的过程称为装箱
int num = 42; object boxedNum = num; // 装箱操作拆箱:将引用类型转换值类型的过程称为拆箱
object boxedNum = 42; int num = (int)boxedNum; // 拆箱操作
装箱和拆箱操作可能会带来性能开销,因为它们涉及到内存分配和数据复制。在编写代码时,应尽量避免不必要的装箱和拆箱操作,以提高程序的性能。
7.值类型和引⽤类型的区别
值类型变量是直接包含值。将⼀个值类型变量赋给另⼀个值类型变量,是复制包含的值,默认值是0。
引⽤类型变量的赋值只复制对对象的引⽤,⽽不复制对象本身,默认值是null
值类型有整形、浮点型、bool、枚举。
引⽤类型有class、delegate、Object、string
值类型存储在栈中,引⽤类型存储在堆中
8.new关键字的作⽤?
- 创建对象实例:
MyClass obj = new MyClass();- 初始化变量:
int[] arr = new int[5]; // 创建一个长度为5的整数数组- 调用构造函数:
MyClass obj = new MyClass(param1, param2);- 匿名类型初始化:
var obj = new { Name = "John", Age = 30 };- 数组初始化:
int[] arr = new int[] { 1, 2, 3, 4, 5 };- 放置语句:
object obj = new object(); // 将对象放置在堆上
int num = new int(); // 将对象放置在栈上- 泛型类型参数:
List<int> list = new List<int>();- 嵌套类访问:
OuterClass.NestedClass nestedObj = new OuterClass.NestedClass();
9. int?和int有什么区别?
- int?为可空类型,默认值可以是null
- int默认值是0
- int?是通过int装箱为引⽤类型实现
使用int?的一个优点是可以避免空引用异常(NullReferenceException)
10. C#中的委托是什么?
- 将⽅法当作参数传⼊另⼀个⽅法的参数。
- .net中有很多常⻅的委托如:Func 、Action
- 作⽤:提⾼⽅法的扩展性
11.⽤最有效的⽅法算出2乘以8等于⼏?
位运算是最快,使⽤的是位运算 逻辑左位移<<。 ⽅法是2<<3相当于0000 0000 0000 0010 (2的16位 int⼆进制)左移三位就是 0000 0000 0001 0000(16的⼆进制)
12.const和readonly有什么区别
const和readonly都是用于声明不可变变量的关键字
const关键字用于声明常量,即在声明时必须初始化,并且之后不能被修改。
const int myConstant = 10;
readonly关键字用于声明只读字段,它可以在声明时或构造函数中初始化,并且在对象实例化后可以更改一次。
public class MyClass {public readonly int a;public MyClass(int value){a = value;} }
13.现有⼀个整数number,请写⼀个⽅法判断这个整数是否是2的N次⽅
取模运算: ⽤number%2==0可以判断,但是这个有点低级
14.CTS、CLS、CLR分别作何解释
1. CTS(Clear To Send):CTS是一种通信协议信号,用于在数据传输之前确认接收方是否准备好接收数据。
2. CLS(Clear Screen):CLS是一个命令或函数,用于清除终端或控制台屏幕上的文本内容。
3. CLR(Clear Register):CLR是一个指令或操作码,用于将寄存器的内容清零。
15.在.net中,配件的意思是?
配件(Assembly)是指一个包含程序集的二进制文件。
1. 程序集:这是.NET应用程序的主要组成部分,它包含了编译后的代码和元数据。程序集可以是动态链接库(DLL)或可执行文件(EXE)。
2. 资源:这些是与程序集关联的数据,如图像、音频、文本等。资源可以被嵌入到程序集中,也可以作为外部文件存储。
3. 清单:清单是一个描述程序集内容的XML文件,它包含了程序集的名称、版本、公钥等信息。清单还描述了程序集所依赖的其他程序集。
16.分析下⾯代码,a、b的值是多少?
1 string strTmp = "a1某某某";
2 int a = System.Text.Encoding.Default.GetBytes(strTmp).Length;
3 int b = strTmp.Length;
分析:⼀个字⺟、数字占⼀个byte,⼀个中⽂占占两个byte,所以a=8,b=5
17.Strings = new String(“xyz”);创建了⼏个String Object?
两个对象,⼀个是“xyz”,⼀个是指向“xyz”的引⽤对象s。
18.静态成员和⾮静态成员的区别
1.静态成员⽤statis修饰符声明,在类被实例化时创建,通过类进⾏访问
2.不带statis的变量时⾮静态变量,在对象被实例化时创建,通过对象进⾏访问,
3.静态⽅法⾥不能使⽤⾮静态成员,⾮静态⽅法可以使⽤静态成员
4.静态成员属于类,⽽不属于对象
生命周期
- 静态成员:静态成员变量的生命周期是整个程序运行期间。它们在程序启动时被创建,并且直到程序结束时才被销毁。
- 非静态成员:非静态成员变量的生命周期依赖于对象的生命周期。当对象被创建时,它的非静态成员被创建,当对象被销毁时,这些成员也随之销毁。
访问方式
- 静态成员:静态成员可以通过类名直接访问,无需创建类的实例。这为在没有实例化对象的情况下使用类的成员提供了可能。
- 非静态成员:非静态成员只能通过对象实例访问。每个对象有自己独立的非静态成员副本,它们的值可以在不同的对象间有所不同。
19.c#可否对内存直接操作
可以,但是不推荐
20.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
s1+1不能显式转换成short类型,可以修改为s1 =(short)(s1 + 1) 。
short s1 = 1; s1 += 1正确
21.什么是强类型,什么是弱类型?哪种更好些?为什么?
强类型是在编译的时候就确定类型的数据,在执⾏时类型不能更改,⽽弱类型在执⾏的时候才会确定类型。
没有好不好,⼆者各有好处,强类型安全,因为它事先已经确定好了,⽽且效率⾼。
22.using关键字的作⽤
1.
using指令 - 引入命名空间,也可using 别名2.
using语句 - 确保资源释放释放资源,实现了IDisposiable的类在using中创建,using结束后会⾃定调⽤该对象的Dispose⽅法, 释放资源。
23.ref和out有什么区别
1.都是按引⽤类型进⾏传递
2.属性不是变量不能作为out、ref参数传递
3.ref参数必须初始化。out不需要初始化
4.作⽤,当⽅法有多个返回值时,out⾮常有⽤
- 初始值要求:
ref参数在传递给方法之前必须被初始化,而out参数在传递前不必初始化(尽管在方法内部必须被赋予一个值)。- 用途:
ref常用于需要修改输入参数并返回修改后结果的情况。out则更侧重于输出参数,尤其是当方法需要返回多个值时。- 可读性:
out参数的使用有助于阅读代码的人了解该参数是一个输出值,而ref参数的意图可能不那么明显。
24.a.Equals(b)和a==b⼀样吗?
不⼀样,a==b仅仅表示a和b值相等,a.Equals(b)表示a与b⼀致
25.下⾯这段代码求值
1 class Class1
2 {
3 internal static int count = 0;
4 static Class1()
5 {
6 count++;
7 }
8 public Class1()
9 {
10 count++;
11 }
12 }
13 Class1 o1 = new Class1();
14 Class1 o2 = new Class1();
o1.count的值是多少?
答案:3,静态 构造⽅法计算⼀次,两个实例化对象计算两次。
26.关于构造函数说法正确的是哪个?
- a)构造函数可以声明返回类型。
- b)构造函数不可以⽤private修饰
- c)构造函数必须与类名相同
- d)构造函数不能带参数
答案:c ,构造函数必须与类名相同,可以传递多个传递,作⽤就是便于初始化对象成员,不能有任何返回类型
27.下面这段代码求值
Math.Round(11.5)=12
Math.Round(-11.5)=-12
28..&和&&的区别
- 操作方式
&是一个按位与运算符,它对两个数的每一位进行逻辑与操作。这意味着,如果同一位置的两个比特均为1,则结果在该位置为1,否则为0。例如,12 (1100 in binary) & 7 (0111 in binary)将产生4 (0100 in binary)。&&是一个布尔逻辑运算符,用于连接两个条件表达式。当两个表达式都为真时,结果才为真。如果第一个表达式为假,则不会计算第二个表达式,因为结果已确定为假。这被称为“短路”行为。- 应用场景
&通常用于整数的二进制操作,如设置特定位、清除特定位或检查特定位的状态。例如,你可以使用按位与来检查一个数字是否为偶数:(number & 1) == 0。&&主要用于布尔逻辑判断,如if语句和while循环中的条件判断。例如,你可以在if语句中使用&&来确保两个条件同时满足:if (isValid && isAuthenticated)。- 返回类型
&其操作数通常为整数,返回的结果也是一个整数。&&其操作数通常为布尔值,返回的结果也是一个布尔值。
29. i++和++i有什么区别?
1.i++是先赋值,然后再⾃增;++i是先⾃增,后赋值。
2.i=0,i++=0,++i=1; Console.WriteLine(i==i); 结果位true
30.as和is的区别
as在转换的同时判断兼容性,如果⽆法进⾏转换,返回位null(没有产⽣新的对象),as转换是否成功判 断的依据是是否位null is只是做类型兼容性判断,并不执⾏真正的类型转换,返回true或false,对象为 null也会返回false。
as⽐is效率更⾼,as只需要做⼀次类型兼容检查
as和is关键字主要用于类型检查和转换,但它们的行为和用途有所不同应用场景
- as: 当你尝试将一个对象转换为另一个类型时,如果转换失败,
as操作符不会引发异常,而是返回null。这使得as在不确定类型转换是否安全时非常有用。- is:
is操作符用于检查对象是否为特定的类型。如果对象是指定类型或者是其派生类型,is表达式的结果为true,否则为false。与as不同,is不进行转换,它仅用于类型检查。返回类型
- as:
as操作符尝试将对象转换为指定的类型,并返回转换后的对象或null。如果转换失败,不会引发异常。- is:
is操作符返回一个布尔值,表示类型检查是否成功。
相关文章:
.NET/C#⾯试题汇总系列:基础语法
1. 字符串中string strnull和string str""和string strstring.Empty的区别? string str null;:这种方式声明了一个字符串变量str,并将其初始化为null。这意味着str不指向任何实际的字符串对象。如果你试图访问str的属性或方法&…...
【论文阅读】SwiftTheft: A Time-Efficient Model Extraction Attack Framework(2024)
完整标题 SwiftTheft: A Time-Efficient Model Extraction Attack Framework Against Cloud-Based Deep Neural Networks 摘要 With the rise of artificial intelligence(人工智能) and cloud computing(云计算), machine-learning-as-a-service platforms(机器学习即…...
springcloud间通信的方式
在 Spring Cloud 中,主要有以下几种通信方式: 一、基于 HTTP 的 RESTful API 工作原理: 这是一种常见的通信方式,各个微服务通过发送 HTTP 请求来相互调用。服务提供者暴露 RESTful API 接口,服务消费者通过 HTTP 客户…...
【C++ Qt day9】
2、将day1做的登录界面升级优化【资源文件的添加】 3、 使用手动连接,将登录框中的取消按钮使用第2种方式的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt4版本的连接到自定义的槽函数中,在槽函数中判断ui界面上…...
中国传媒业人工智能应用发展图谱2024
易观分析:传媒产业是指以传播各类信息、知识为核心,通过多种媒介形式进行内容生产、发布和分发的综合性产业。技术的进步和应用对于传媒产业发展变革起到了核心驱动力的作用,2022年生成式AI进入应用爆发期,不仅带动了人工智能产业…...
RTX3060 FP64测试与猜想
RTX3060 FP64测试与猜想 一.小结二.查看FP64的峰值性能三.打满FP64、FP32的利用率,对比差异四.进一步证明pipe_fp64_cycles_active并不是2个fp64 core的metrics RTX3060 FP64测试与猜想 一.小结 RTX3060 compute capability为8.6,每个SM有2个FP64 core。每个cycle可输出2个fp…...
uniapp写移动端常见问题汇总
1. 手机顶部状态栏遮挡 写在需要的地方 <view class"status_bar" style"height: var(--status-bar-height); width: 100%;">2. 手机顶部状态栏字体颜色 // pages.json "statusBarStyle": "light",3. 背景覆盖全屏 page{widt…...
Linux运维排查常见故障_在tmp目录下有大量包含picture_ 的临时文件,每天晚上2 30需要对一天前的文件进行
echo“”>>/etc/security/limits.conf echo“*softnproc65535″>>/etc/security/limits.conf echo“*hardnproc65535″>>/etc/security/limits.conf echo“*softnofile65535″>>/etc/security/limits.conf echo“*hardnofile65535″>>/etc/secur…...
基于SpringBoot的智能制造云平台系统的设计与实现计算机毕设
一、选题背景与意义(300字左右) 根据工业4.0智能制造生态链中云工厂在实际生产当中的工作流程进行充分调研和整理出来的,描述最终用户在本系统中对于生产订单的处理、排产、以及生产的完整在线处理流程和业务需求的文档。 针对制造业而言&a…...
论文翻译:arxiv-2024 Benchmarking Benchmark Leakage in Large Language Models
Benchmarking Benchmark Leakage in Large Language Models https://arxiv.org/abs/2404.18824 在大型语言模型中基准测试泄露的基准测试 文章目录 在大型语言模型中基准测试泄露的基准测试摘要1 引言 图1:不同模型在基准测试的训练集上进行逐字训练相对于测试集以…...
十二、新版UI
一、UI Toolkit 这个组件是新版的UI系统 创建了一个新的UIBuild,在单独的场景中打开 未来Unity会以这个为基准。 缺点:目前没有Animator,做不了动画;没法加shader...
Path系统环境变量和CLASSPATH环境变量
Path系统环境变量 概述:Path环境变量不是java的,它隶属于windows操作系统 作用: PATH环境变量实际上就是给windows操作系统指路的。 在Path环境变量中有很多路径,路径和路径之间采用 分号(;) 隔开在DOS命令窗口中输入一条DOS命…...
自然语言处理系列六十六》对话机器人项目实战》对话机器人原理与介绍
注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】 文章目录 自然语言处理系列六十六对话机器人项目实战》对话机器人原理与介…...
解码数字化转型顶层规划(附236页PPT:xx企业数字化转型项目顶层规划方案)
写在前面:PPT分享见后文~ 企业数字化转型顶层规划的制定是一个系统性的过程,需要综合考虑多个方面。以下是制定企业数字化转型顶层规划的一些关键步骤和要点,以供参考: 1、明确数字化转型战略定位: 将数字化转型作为…...
无需温度修正,测值准确可靠 GEO ACxxxx型振弦式锚索测力计
无需温度修正,测值准确可靠 GEO ACxxxx型振弦式锚索测力计 精准稳定的振弦式传感器,ACxxxx型振弦式锚索测力计,是长期监测预应力锚索压力的不二选择。采用特制应变计作为传感部件,无需温度修正,测值准确可靠。该传感器…...
shell脚本【一、 特殊变量/子串/特殊扩展变量/父子shell/内置命令、外置命令】
特殊变量 位置参数的获取 $0 获取shell脚本文件名,以及脚本路径;$n 获取shell脚本的第n个参数,n在1~9之间,如$1$2$9,大于9则需要写 ${10};$# 获取执行的shell脚本后面的参数总个数;$* 获取she…...
服务器禁用远程(22)
vim /etc/ssh/sshd_config 修改 ListenAddress 0.0.0.0 为ListenAddress localhost 修改完后 重启一下sshd systemctl restart sshd 修改就生效了...
Docker 进阶构建:镜像、网络与仓库管理
目录 三. docker镜像构建 1. docker镜像结构 2. 镜像运行的基本原理 3. 镜像获得方式 4. 镜像构建 5. Dockerfile实例 6. 镜像优化方案 6.1. 镜像优化策略 6.2. 镜像优化示例:缩减镜像层 6.3. 镜像优化示例:多阶段构建 6.4. 镜像优化示例:使用最精简镜像 四. docke…...
opencv学习:图像轮廓识别及代码实现
图像轮廓 1.获取图像轮廓 cv2.findContours() 函数是 OpenCV 库中用于检测图像中轮廓的函数。它可以检测到图像中所有连通区域的边界,并返回这些轮廓的列表。从 OpenCV 3.4 版本开始,这个函数的返回值和参数有所变化,以下是详细的参数说明&…...
存储课程学习笔记2_借助内核插入一个文件系统,用文件夹下测试文件系统(mount文件系统到目录下是入口)
裸盘是如何能达到我们日常操作目录那样,按目录依次访问文件等,实际上就是基于裸盘上,用文件系统进行控制。 0:总结。 0:mount是入口,一个裸盘先赋予文件系统,然后mount后才可以用。 1…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...
