摘录-IT企业必读的200个.NET面试题-04 字符串、集合和流的使用

字符串处理

Q: System.String是值类型还是引用类型

System.String是引用类型,它的对象在初始化之后就不能再做修改,任何试图修改字符串对象的动作将导致一个新的字符串对象生成。

Q: 如何在string和Byte[]对象之间进行转换

字符串和字节数组的转换依赖于编码方式的使用,不同的编码标准将使用不同的算法进行。System.Text.Encoding类型提供了大部分常见编码算法支持,用以进行字符串和字节数组之间的转换。下面是代码例子:

class Program
    {
        static void Main(string[] args)
        {
            string s = "我是字符串, I am string";

            Byte[] utf8 = StringToByte(s, Encoding.UTF8);

            Byte[] gb2312 = StringToByte(s, Encoding.GetEncoding("GB2312"));

            Byte[] unicode = StringToByte(s, Encoding.Unicode);

            Console.WriteLine(utf8.Length);
            Console.WriteLine(gb2312.Length);
            Console.WriteLine(unicode.Length);

            Console.WriteLine(ByteToString(utf8, Encoding.UTF8));
            Console.WriteLine(ByteToString(gb2312, Encoding.GetEncoding("GB2312")));
            Console.WriteLine(ByteToString(unicode, Encoding.Unicode));

            Console.ReadLine();
        }

        //把字符串转换为字节数组
        static Byte[] StringToByte(string s, Encoding encoding)
        {
            return encoding.GetBytes(s);
        }

        //把字节数组转换为字符串
        static string ByteToString(Byte[] b, Encoding encoding)
        {
            return encoding.GetString(b);
        }
    }

Q: SecureString的实例如何被分配和释放

System.SecureString提供了加密的字符串类型。其对象会被分配在非托管的内存中,并且以加密的形式保存。对于SecureString的操作都是逐字符的,SecureString会负责在操作时进行解密和加密。

Q: 什么是字符串池机制

字符串池机制目的在于改善程序的性能。CLR会保留程序中出现过的字符串对象的集合,并且在需要新的字符串时,先检查已有的集合,在查找成功时返回已有对象的引用。

常用集合和泛型

Q: int[]是引用类型还是值类型

数组类型是一族类型,它们都继承自System.Array,而System.Array继承自System.Object。所有的数组类型都是引用类型。

Q: 数组之间如何进行转换

数组类型在符合条件的情况下可以进行隐式转换,条件为:数组维数必须相同,目标项目类型和源项目类型必须存在隐式或者显式转换关系;源数组的项目类型不是值类型。数组类型可以通过Array.ConvertAll方法进行内容转换,该方法需要使用者提供一个转换算法,以委托或者方法的形式传入Array.ConvertAll方法中。

Q:解释泛型的基本原理

泛型类似于C++中的模板,允许程序员定义更通用的类型和算法,并且在具体使用时再生成具体的封闭类型。所有带泛型参数的类型都是一个开放式类型,它不能被实例化,但具备所有封闭类型的其他特性。

Q: 什么是泛型的主要约束和次要约束

每个泛型参数可以有至多一个主要约束,泛型的主要约束是指指定泛型参数必须是或者继承自某个引用类型,有两个特殊的主要约束:class和struct,分别代表泛型参数是引用类型和值类型。每个泛型参数可以有无限个次要约束,次要约束和主要约束的语法基本相同,但它规定的是某个泛型参数必须实现所有次要约束指定的接口。

流和序列化

Q: 什么是流,.NET中有哪些常见的流

流是对于字节集合对象的一种操作。.NET中常见的流类型有FileStream、NetworkStream、MemoryStream等。

Q: Serializable特性有何作用

通过为类型添加Serializable特性,可以使对象申明为可被序列化,即可被诸如BinaryFormatter等类型的对象序列化和反序列化。

Q: 如何自定义序列化和反序列化的过程

通过实现ISerializable接口中的GetObjectData方法可以实现自定义的序列化,而通过添加带有SerializationInfo和StreamingContext参数的构造方法可以自定义反序列化的过程。

时间: 2024-10-24 14:30:31

摘录-IT企业必读的200个.NET面试题-04 字符串、集合和流的使用的相关文章

摘录-IT企业必读的200个.NET面试题-11 Web Service的开发与应用

SOAP和Web Service的基础概念 Q: 请简述SOAP协议 SOAP协议全称是简单对象访问协议(Simple Object Access Protocol),SOAP致力于以XML形式提供一个简单.轻量的用于分散或分布环境中交换结构化和类型信息的机制.SOAP规范由四部分组成:SOAP信封.SOAP编码规则.SOAP RPC表示.SOAP绑定. Q: 什么是WSDL,它有何作用 WSDL是Web服务描述语言,是一种符合XML语法规范的语言,用以描述服务器端提供的Web Service方

摘录-IT企业必读的200个.NET面试题-10 XML的应用和处理

XML的基本特性 Q: 什么是XML XML就是可扩展标记语言,XML是一种简单的数据存储语言. Q: 简述XML的常用领域及其优势 XML具有内容和结构分离.互操作性强.规范统一.支持多种编码格式等特点,正是因为这些优点,XML已经被应用在数据交换.Web Service.电子商务.配置文件等多种领域. Q: XML中的命名空间如何使用 命名空间被用来模块化XML文档中的元素,当解析器试图读取特定命名空间下的节点时,需要指定命名空间的名称. 使用.NET组件读写XML Q: .NET中操作XM

摘录-IT企业必读的200个.NET面试题-07 .NET多线程编程

多线程的基本概念 Q: 请解释操作系统层面上的线程和进程 进程代表了一个正在运行的应用程序的实体,而一个进程中可包含1个或多个线程. Q: 多线程程序在操作系统里是并行执行的吗 在单CPU的计算机架构上,任何时候只可能存在一个运行的线程,操作系统通过快速的调度轮换使使用者感觉到多线程在同时执行.而在多CPU的架构上,则可能存在完全并行的线程. Q: 什么是纤程 纤程是微软公司提出的轻量级线程的概念,一个纤程拥有自己的栈和寄存器状态.一个线程可以包含多个纤程,和线程由操作系统调度有所不同的是,线程

摘录-IT企业必读的200个.NET面试题-09 .NET中的数据库开发

ADO.NET和数据库的连接 Q: 请简要叙述数据库连接池的机制 数据库连接池就是一个存储数据库连接的缓冲池.ADO.NET对上层用户提供了数据库连接池的服务,使用完的数据库连接将被有选择地保持在数据库连接池中,以供下次使用.当用户以某个连接字符串申请数据库连接时,数据库连接池将尝试在池中寻找具有相同连接字符串的连接,并直接提供给用户. Q: 如何提高连接池内连接的重用率 为了提高数据库连接池的重用率,唯一的方法就是尽量保证系统访问数据库所使用的连接字符串不变.例如统一使用超级用户账户可以进一步

摘录-IT企业必读的200个.NET面试题-05 常用类和接口

类型的基类System.Object Q: 是否存在不继承自System.Object的类 通过运用ILasm.exe的noautoinherit开关,可以生成不从System.Object继承的类型,这种类型不是安全的类型,不建议使用.但是,因为有这种机制的存在,所以程序员在编写代码时不能随意地把任何对象默认看成System.Object的子类型. Q: 在System.Object中定义的三个比较方法有何异同 静态方法ReferenceEquals实现了引用比较.静态Equals方法实现了比

摘录-IT企业必读的200个.NET面试题-02 .NET框架基础

.NET基础概念 什么是CTS.CLS和CLR CTS是通用类型系统:CLS是公共语言规范:CLR是公共语言运行时. CLR技术和COM技术的比较 CLR和COM都定义了组件间交互的规范.COM并没有定义如何描述组件间的依赖性,并且由于其严格的物理约定,造成了很多组件版本升级和控制的问题.CLR运用元数据和逻辑类型定义等机制,有效地解决了COM遗留的一些问题.并且,相较于COM模型,笔者认为CLR更容易理解和学习. 什么是程序集和应用程序域 程序集是一个由类型定义.数据文件和资源文件组成的逻辑集

摘录-IT企业必读的200个.NET面试题-06 .NET中的高级特性

委托 Q: 请解释委托的基本原理 委托是一类继承自System.Delegate的类型,每个委托对象至少包含了一个指向某个方法的指针,委托实现了回调方法的机制. Q: 委托回调静态方法和实例方法的区别 当委托绑定静态方法时,内部的对象成员变量_target将会被设置为null,而当委托绑定实例方法时,_target将会设置成指向该实例方法所属类型的一个实例对象,当委托被执行时,该对象实例将被用来调用实例方法. Q: 什么是链式委托 链式委托是指一个由委托串成的链表,当链表上的一个委托被回调时,所

摘录-IT企业必读的200个.NET面试题-03 .NET类型语法基础

基础类型和语法 Q: System.Object中包含哪些方法,哪些是虚方法 System.Object包含了Finalize在内的8个方法,其中有3个虚方法:Equals.GetHashCode和ToString方法. Q: 值类型和引用类型的区别 所有的值类型都继承自System.ValueType,常用的值类型包括结构.枚举.整数型.浮点型.布尔型等.值类型的赋值会产生一个新的数据副本,所以每个值类型都拥有一个数据副本,而引用类型的赋值则是赋值引用.值类型的对象分配在堆栈上,而引用类型的对

阿里云企业邮箱免费版200账号限时开通,速来围观!

这个八月,阿里云又一次引爆市场,企业邮箱免费版再爆惊喜. 即日起至2015年8月31日,成功开通的企业邮箱免费版,账号数将自动翻倍,由原来的100个升级为200个. 如此惊喜,仅限8月! 活动时间: 2015年8月5日 10:00   -   2015年8月31日  18:00 活动对象: 名下未开通企业邮箱免费版的所有阿里云会员. 活动流程: 1)登录您的阿里云会员账号: 2)进入活动页面:http://wanwang.aliyun.com/mail/freemail/, 了解[活动细则]: