软件工程师面试题
谈谈指针和引用的区别?
指针用操作符“*”和“->”,引用使用操作符“&”. 相同点是:指针与引用都是让你间接引用其他对象。
区别:(1). 指针是一个实体,指向一块内存,它的内容是所指内存的地址;而引用仅是个别名,是某块内存的别名。
(2). 引用使用时无需解引用(*),指针需要解引用;
(3). 引用只能在定义时被初始化一次,之后不可变,“从一而终”;指针可变;
(4). 引用没有 const类型,指针有 const类型,const 的指针不可变;
(5). 引用不能为空,指针可以为空;
(6). “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;typeid(t) == typeid(t&) 恒为真,sizeof(t) == sizeof(t&) 恒为真,但是当引用作为成员时,其占用空间与指针相同(没找到标准的规定)。
(7). 指针和引用的自增(++)运算意义不一样;
你在程序代码中用assert吗?assert一般用于做什么?
(1) 是我常用。
(2)主要用于debug下断言,即假设一定是这样的,否则就是错误的。例如 asser ( a > 100 );
i++ 相比 ++i 哪个更高效?为什么?
答:(1)++i 比 i++效率高。
(2)i++要多调用一次类的构造和析够函数
c#中的委托是什么?事件是不是一种委托?
委托是指具有相同属性(也称具有相同的函数签名:返回类型相同,参数类型、参数顺序及参数个数相同)的函数或方法的抽象,关键字为delegate。主要用途是三个:1)函数回调;2)传递方法;3)事件机制
事件就是一个狭义的委托,也就是事件是一个用于事件驱动模型的专用委托,对事件的声明, 实际是声明一个私有的委托变量,对委托变量进行封装,即委托变量加上event关键字后,不管其前面的访问修饰符是public还是private,编译器都会将其编译为private。
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用if-else(switch)语句,同时使得程序具有更好的可扩展性。以委托为参数的函数具有一定的通用性。
使用委托可以将多个方法绑定到同一个委托变量,当调用此变量时(这里用“调用”这个词,是因为此变量代表一个方法),可以依次调用所有绑定的方法。
请叙述属性与索引器的区别。
属性:它是存取类的字段,索引器:indexer它是特殊的属性,用它可以使用户像访问数组一样访问类的成员。
请详述在dotnet中类(class)与结构(struct)的异同。
类class可以进行实例化,它是引用类型,内存分配在栈中,效率高,它有默认的构造函数,有析构函数可以使用 abstract 和 sealed, protected 修饰符。要用new进行初始化,
结构它是属于值类型,内存分配在堆中,效率低,它没有默认的构造函数,但是可以添加构造函数,没有析构函数没有 abstract 和 sealed(因为不能继承)不能有protected 修饰符 可以不使用new 初始化,但是可以在结构中初始化实例字段。
在c#中,string str = null与string str = “” 请尽量使用文字或图象说明其中的区别。
回答要点:说明详细的空间分配。
答:string str = null是不给他分配内存空间,而string str = “” 给它分配长度为空字符串的内存空间.
请详述在dotnet中类(class)与结构(struct)的异同
答:class可以被实例化,属于引用类型,是分配在内存的堆上的,struct属于值类型,是分配在内存的栈上的.
简要谈一下您对微软.net构架下remoting和webservice两项技术的理解以及实际中的应用。
答:ws主要是可利用http,穿透防火墙。而remoting可以利用tcp/ip,二进制传送提高效率。
如何区别重载方法?
不同的参数类型,不同的参数个数,不同的参数顺序。
请说明在.net中常用的几种页面间传递参数的方法,并说出他们的优缺点。
session(viewstate) 简单,但易丢失
application 全局
cookie 简单,但可能不支持,可能被伪造
input ttype="hidden" 简单,可能被伪造
url参数简单,显示于地址栏,长度有限
数据库稳定,安全,但性能相对弱