C#面试精华:null字符串差异、类与struct对比及多线程安全
需积分: 11 175 浏览量
更新于2024-11-06
收藏 18KB DOCX 举报
在C#面试题中,面试官通常会关注程序员对基础语法和概念的理解深度。以下是几个关键知识点的详细解析:
1. **string str = null vs string str = ""**:
在C#中,`string str = null` 表示将变量str设置为`null`,这表明str没有指向任何有效的字符串对象。这时,str并没有占用任何内存空间,因为它并不指向一个已存在的字符串实例。然而,`string str = ""` 是创建了一个空字符串对象,系统会为这个对象分配内存,即使它的内容为空。当你试图访问str的属性或方法时,会抛出异常,因为null引用没有实际内容。
2. **类(class)与结构(struct)**:
C#中的类(Class)与结构(Struct)的主要区别在于内存管理和行为。类是引用类型,当你声明一个类的实例时,实际上是创建了一个对象的引用,并将其存储在堆内存中。这意味着类的对象可以有状态(成员变量)且支持继承和多态。相反,结构(Struct)是值类型,它们在栈上分配内存,每次创建新实例时都会复制整个数据结构,不支持继承,但通常更轻量级,适用于小对象的性能优化。
3. **委托(delegate)的使用**:
委托是一种类型的别名,用于封装方法,允许你在不关心具体实现的情况下,将方法作为参数传递。在给出的代码中,`OnDBOperate OnNew;` 是一个委托声明,表示一个接受无参数且返回类型为void的方法。在`toolBar_ButtonClick`方法中,当事件触发时,如果`OnNew`委托不为null,就可以调用它,传递当前的sender和事件参数。
4. **字符串编码和长度计算**:
`string strTmp = "abcdefg某某某";` 这行代码创建了一个包含中文字符的字符串。`System.Text.Encoding.Default.GetBytes(strTmp)` 将字符串转换为字节数组,中文字符占用2个字节,所以`i = System.Text.Encoding.Default.GetBytes(strTmp).Length` 的结果是13,因为有6个英文字符加上5个中文字符(10个英文字符编码为10*1+2=12,加上最后的两个空位)。而`j = strTmp.Length` 只计算了字符数量,包括中文字符,所以`j = 10`。
5. **SQL查询获取最新更新的事务号**:
使用SQL的子查询和`MAX`函数,你可以找出`LastUpdateDate`字段的最新值,然后通过`WHERE`子句找到具有该日期的事务号。查询语句如下:
```sql
SELECT ID
FROM table1
WHERE LastUpdateDate = (SELECT MAX(LastUpdateDate) FROM table1)
```
6. **线程安全与死锁分析**:
题目没有提供具体的test方法,但从一般的角度分析,如果`test`方法在没有适当的同步机制时试图修改共享资源(如i变量),并且存在多个线程同时读取和写入的情况,可能会导致死锁。如果`i > 10`的条件在修改i的过程中检查,而其他线程也在等待某个条件导致i的改变,就可能导致死锁。为了防止死锁,必须确保线程间的资源请求顺序一致,并使用锁或其他并发控制机制。
面试时,这些问题旨在考察应聘者的基础理论知识,以及他们在实际编程中的应用能力。准备充分,理解这些概念的细微差别,可以帮助你在面试中表现出色。
2011-09-30 上传
2010-09-20 上传
2024-01-20 上传
2010-04-23 上传
2009-08-16 上传
2008-09-07 上传
2008-10-13 上传
2009-12-30 上传
xingzhiyao
- 粉丝: 3
- 资源: 4
最新资源
- 前端协作项目:发布猜图游戏功能与待修复事项
- Spring框架REST服务开发实践指南
- ALU课设实现基础与高级运算功能
- 深入了解STK:C++音频信号处理综合工具套件
- 华中科技大学电信学院软件无线电实验资料汇总
- CGSN数据解析与集成验证工具集:Python和Shell脚本
- Java实现的远程视频会议系统开发教程
- Change-OEM: 用Java修改Windows OEM信息与Logo
- cmnd:文本到远程API的桥接平台开发
- 解决BIOS刷写错误28:PRR.exe的应用与效果
- 深度学习对抗攻击库:adversarial_robustness_toolbox 1.10.0
- Win7系统CP2102驱动下载与安装指南
- 深入理解Java中的函数式编程技巧
- GY-906 MLX90614ESF传感器模块温度采集应用资料
- Adversarial Robustness Toolbox 1.15.1 工具包安装教程
- GNU Radio的供应商中立SDR开发包:gr-sdr介绍