
2.在.net(C# or vb.net)中如何取消一个窗体的关闭。
答案:
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
e.Cancel=true;
}
3.在.net(C# or vb.net)中,Appplication.Exit 还是 Form.Close有什么不同?
答案:一个是退出整个应用程序,一个是关闭其中一个form
4.在C#中有一个double型的变量,比如10321.5,比如122235401.214,作为货币的值如何按各个不同国家的习惯来输出。比如美国用$10,321.50和$122,235,401.22而在英国则为£10 321.50和£122 235 401.22
答案: public static void Main()
{
//System.Globalization.CultureInfo MyCulture = new System.Globalization.CultureInfo("en-US");
System.Globalization.CultureInfo MyCulture = new System.Globalization.CultureInfo("en-GB");//为英国货币类型
decimal y = 9999999999999999999999999999m;
string str = String.Format(MyCulture, "My amount = {0:c}", y);
Console.WriteLine(str);
}//{0,10:c} 0 下标,10 字符串要占用的字符数如果字符数不够也会完整显示 ,
:c 格式说明符 d,e,f,g,n,p,x
5. 某一密码仅使用K、L、M、N、O共5个字母,密码中的单词从左向右排列,密码单词必须遵循如下规则:
(1) 密码单词的最小长度是两个字母,可以相同,也可以不同
(2) K不可能是单词的第一个字母
(3) 如果L出现,则出现次数不止一次
(4) M不能使最后一个也不能是倒数第二个字母
(5) K出现,则N就一定出现
(6) O如果是最后一个字母,则L一定出现
问题一:下列哪一个字母可以放在LO中的O后面,形成一个3个字母的密码单词?
A) K B)L C) M D) N
答案:B
问题二:如果能得到的字母是K、L、M,那么能够形成的两个字母长的密码单词的总数是多少?
A)1个 B)3个 C)6个 D)9个
答案:A LL
问题三:下列哪一个是单词密码?
A) KLLN B) LOML C) MLLO D)NMKO
答案:C
6.62-63=1 等式不成立,请移动一个数字(不可以移动减号和等于号),使得等式成立,如何移动?
答案:62移动成2的6次方
7. 根据线程安全的相关知识,分析以下代码,当调用test方法时i>10时是否会引起死锁? 并简要说明理由。(10分) 答案: 不会引起死锁(但有一点int是按值传递的,所以每次改变的都只是一个副本,因此不 会出现死锁。但如果把int换做一个object,那么死锁会发生)
public void test(int i)
{ lock (this)
{ if (i > 10)
{ i--;
test(i);
}
}
}
8. 简要谈一下您对微软.NET 构架下remoting和webservice两项技术的理解以及实际中的应用。(10)
答:WS主要是可利用HTTP,穿透防火墙。而Remoting可以利用TCP/IP,二进制传送提高效率。
9. 公司要求开发一个继承System.Windows.Forms.ListView类的组件,要求达到以下的特殊功能:点击ListView各列列头时,能按照点击列的每行值进行重排视图中的所有行 (排序的方式如DataGrid相似)。根据您的知识,请简要谈一下您的思路:(10)
答:根据点击的列头,包该列的ID取出,按照该ID排序后,在给绑定到ListView中
10. String和StringBuilder的区别?
答案:
(1)System.String 类是一种传统的修改字符串的方式,它确实可以完成把一个字符串添加到另一个字符串上的工作没错。但是在.NET框架下,这个操作实在是划不来。因为系统先是把两个字符串写入内存,接着删除原来的String对象,然后创建一个String对象,并读取内存中的数据赋给该对象。这一来二去的,耗了不少时间,产生两个垃圾。
(2)而使用System.Text命名空间下面的StringBuilder类就不是这样了,它提供的Append方法,能够在已有对象的原地进行字符串的修改,简单而且直接。如果想要编写将连续操作依次连接起来的单个语句,这将很方便。
如果要操作一个不断增长的字符串,请你不要再用String类了。当然,一般情况下你是觉察不出这二者效率的差异的,但如果你要对某个字符串进行大量的添加操作,那么用StringBuilder类所耗费的时间和String类简直不是一个数量级的。
11. 能用foreach遍历访问的对象需要实现 _______接口或声明_________方法的类型。
答:IEnumerable 、 GetEnumerator。
12. GC是什么? 为什么要有GC?
答:GC是垃圾收集器。程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()
13. String s = new String("xyz");创建了几个String Object?
答:两个对象,一个是“xyx”, 一个是指向“xyx”的引用对象s。
14. .abstract class和interface有什么区别?
答:
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。
15. sleep() 和 wait() 有什么区别?
答:sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有 更高的优先级
(b)正在运行的线程因为其它原因而阻塞。wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。
16.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
答:short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。
可修改为s1 =(short)(s1 + 1) ; short s1 = 1; s1 += 1正确。
17.如何处理几十万条并发数据?
答:用存储过程或事务。取得最大标识的时候同时更新..注意主键不是自增量方式这种方法并发的时候是不会有重复主键的..取得最大标识要有一个存储过程来获取.
18.Session有什么重大BUG,微软提出了什么方法加以解决?
答:是iis中由于有进程回收机制,系统繁忙的话Session会丢失,可以用Sate server或SQL Server数据库的方式存储Session不过这种方式比较慢,而且无法捕获Session的END事件。
19.进程和线程的区别?
答:进程是系统进行资源分配和调度的单位;线程是CPU调度和分派的单位,一个进程可以有多个线程,这些线程共享这个进程的资源
20.堆和栈的区别?
答: 栈:由编译器自动分配、释放。在函数体中定义的变量通常在栈上。
堆:一般由程序员分配释放。用new、malloc等分配内存函数分配得到的就是在堆上。
21.ASP。NET与ASP相比,主要有哪些进步?
答:asp解释形,aspx编译型,性能提高,有利于保护源码。
22.产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。
int[] intArr=new int[100];
ArrayList myList=new ArrayList();//动态数组(数组列表)
Random rnd=new Random();
while(myList.Count<100)
{
int num=rnd.Next(1,101);
If(!myList.Contains(num))
{ myList.Add(num); }
}
for(int i=0;i<100;i++)
{
intArr[i]=(int)myList[i];
}
23.列举ASP.NET 页面之间传递值的几种方式。
答. 1.使用QueryString, 如....?id=1; response. Redirect()....
2.使用Session变量
3.使用Server.Transfer
24.如果在一个B/S结构的系统中需要传递变量值,但是又不能使用Session、Cookie、Application,您有几种方法进行处理?
答 :this.Server.Transfer
25.描述一下C#中索引器的实现过程,是否只能根据数字进行索引?
答:不是。可以用任意类型。
26.求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+……+m
答: int Num = Convert.ToInt32(Console.ReadLine());
int Sum = 0 ;
for (int i = 0 ; i < Num + 1 ; i++)
{ if((i%2) == 1)
{Sum += i ;}
Else
{Sum = Sum - i;}
}
Console.WriteLine(Sum.ToString());
27.用.net做B/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层?
答:一般为3层:
数据访问层,业务层,表示层。
1).数据访问层对数据库进行增删查改。
2).业务层一般分为二层,业务表现层实现与表示层的沟通,业务规则层实现用户密码的安全等。
3).表示层为了与用户交互例如用户添加表单。
优点: 分工明确,条理清晰,易于调试,而且具有可扩展性。
缺点: 增加成本。
28. 什么叫应用程序域?
答:应用程序域可以理解为一种轻量级进程。起到安全的作用。占用资源小。
应用程序域是.NET中的一个重要技术改进,他用于减少运行应用程序的系统开销,这些应用程序需要与其他程序分离开来,但同时还需要彼此通信。
29. CTS、CLS、CLR分别作何解释?
答:CTS:通用类型系统。CLS:通用语言规范。CLR:公共语言运行库。
30. 什么是装箱和拆箱?
答:从值类型转换到引用类型为装箱。从引用类型转换到值类型拆箱。
31. 什么是受管制的代码?
答:unsafe:非托管代码。不经过CLR运行。
32.什么是强类型系统?
答:RTTI:类型识别系统。
33.net中读写数据库需要用到那些类?他们的作用?
答:DataSet:数据存储器。
DataCommand:执行语句命令。
DataAdapter:数据的集合,用语填充。
34.常用的调用WebService的方法有哪些?
答:1.使用WSDL.exe命令行工具。
2.使用VS.NET中的Add Web Reference菜单选项
35. .net Remoting 的工作原理是什么?
答:服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置。
36. 在C#中,string str = null 与 string str = “” 请尽量使用文字或图象说明其中的区别。
答:string str = null 是不给他分配内存空间,而string str = "" 给它分配长度为空字符串的内存空 间。
37.请详述在dotnet中类(class)与结构(struct)的异同?
答:Class可以被实例化,属于引用类型,是分配在内存的堆上的,Struct属于值类型,是分配在内存的栈上的.
38.分析以下代码,完成填空
string strTmp = "abcdefg某某某";
int i= System.Text.Encoding.Default.GetBytes(strTmp).Length;
int j= strTmp.Length;
以上代码执行完后,i= j=
答:i=13,j=10
39. C#的四个基本技巧
答:1.如果可能尽量使用接口来编程
.NET框架包括类和接口,在编写程序的时候,你可能知道正在用.NET的哪个类。然而,在这种情况下如果你用.NET支持的接口而不是它的类来编程时,代码会变得更加稳定、可用性会更高。请分析下面的代码:
private void LoadList (object [] items, ListBox l)
{
for (int i = 0; i < items.Length;i++)
l.Items.Add (items[i].ToString ());
}
这个函数从一个可为任何对象的数组中加载ListBox,这段代码被限定为只能使用数组。假想过些时候你发现那些对象存在数据库中,或别的集合中。那么你需要修改程序来使用不同的集合类型。如果你用ICollection接口来写那段程序,你就不用修改那段程序了,对于任何实现ICollection接口的类型它都能很好的工作:
private void LoadList (ICollection items,ListBox l)
{
foreach (object o in items)
l.Items.Add (o.ToString ());
}
ICollection被数组和所有System.Collection中的集合实现。此外,数组也支持ICollection接口。如果那还不够的话,数据库.NET类同样支持ICollection接口。用接口写的这个函数不用需改就可以才许多中情况下使用。
2. 使用属性代替原始数据
因为属性已经成为语言本身的元素,所以声明数据元素时它的作用域等级没有必要大于private。因为代码本身会把属性看成数据元素,你并没有失去使用简单数据类型的便利性。相反它会使你的代码更加灵活功能更加强大。属性使你的数据元素封装性更好。属性可以让你使用lazy evaluation来返回数据。lazy evaluation的意思是当用户请求时才计算它的值,而不是一直保留着它。
最后,属性可以是virtual也可以是abstract。你也可以在接口中定义属性。
这里还有维护方面的因素应当注意:尽管操作两者的方法是一样的,但是你把一个数据元素变成属性,那么原先客户端的程序便不能访问服务端的新版本程序了。实际上对于在Web service中你想实现序列化的值你可以把它们变成属性来使用:
private int TheMonth = 0;
[XmlAttribute ("Month")]
public int Month
{
get {
return TheMonth;
}
set {
TheMonth = value;
}
}
简单通过属性就可以使你的所有数据元素私有化。
3. 在Producer/Consumer 的Idiom中使用Delegate
当你生成一个实现producer idiom类的时候,使用deletate来通知consumer。这种方法相对于用接口更加灵活。Delegate是多点传送的,所以不用加额外的代码你就何以支持多用户。相对于用接口这样做可使类之间的耦合性降低。
下面的类处理键盘输入并把它传给所有的registered listeners:
public class KeyboardProcessor
{
private OnGetLine theFunc = null;
public OnGetLine OnGetLineCallback {
get {
return theFunc;
}
set {
theFunc = value;
}
}
public void Run (){
// Read input.
// If there is any listeners, publish:
string s;
do {
s = Console.ReadLine ();
if (s.Length == 0)
break;
if (theFunc != null){
System.Delegate [] funcs =theFunc.GetInvocationList();
foreach (OnGetLine f in funcs) {
try {
f (s);
} catch (Exception e) {
Console.WriteLine
("Caught Exception: {0}", e.Message);
}
}
}
} while (true);
}
任何数目的listeners都可注册到producer,它们所要做的只是提供一个特定的函数:deletate。
4. 注意初始化顺序
C#中对于一些变量声明加入了initializer的概念。它们在构造函数之前被执行,实际上变量在基类的构造函数执行前之前被初始化。
所以,在初始化变量的时候不要用基类中的数据,因为它们还没有被构造。
40.40种网站设计常用技巧
1. oncontextmenu="window.event.returnValue=false" 将彻底屏蔽鼠标右键
| no |
2.
取消选取、防止复制3. onpaste="return false" 不准粘贴
4. oncopy="return false;" oncut="return false;" 防止复制
5. IE地址栏前换成自己的图标-- 不好用
6. 可以在收藏夹中显示出你的图标-- 不好用
7. 关闭输入法
8. 永远都会带着框架-- 不好用
9. 防止被人frame-- 不好用
10. 网页将不能被另存为
11. onclick="window.location = "view-source:"+ "http://www.williamlong.info"">
12.删除时确认不好用
13.屏蔽功能键Shift,Alt,Ctrl
14.& (division)用来定义大段的页面元素,会产生转行 用来定义同一行内的元素,跟的唯一区别是不产生转行 15. 让弹出窗口总是在最上面: 16.
