有余本人现在是一名大四的学生,最近正在进行校园招聘,因此特意找了一些面试题和笔试题进行汇总,顺便谈谈今天的面试感想。今天去应聘了三家公司,有一家国企,有一家成都的,有一家好像是外企,总部在国外。第一家是成都本地公司,首先进行了自我介绍,然后就说了自己弄过的一些东西,其实本人觉得很多网站就是对数据的增删改查,谈了自己擅长的东西,因此还算比较愉快,叫我等通知,第二家是那个外企,首先也是自我介绍,然后面试官对着我的简历提了一些问题,本人谈了下数据库,以及大概的谈了下ajax,用js写xmlhttprequest比较复杂,还要判断浏览器兼容性,就给面试官说了我后面就喜欢用jquery的ajax,然后面试官问我对公司有什么要求没有,我说没有要求,这家也还算比较愉快吧。第三家就问的比较详细了,开始问了我asp.net的内置对象,我只回答了cookie,session,application,我回来看了一下,原来还包括server,request,response,其实平时自己也会用这些东西,真没注意这个这些概念吧,然后问了我禁用cookie后session还能用么,这个答案我回答的不能,session有个sessionID就是存在cookie里面的,其实我回答错了,我忘了还有个cookieless这个东西,可以通过设置web.config让sessionID通过Url传递到服务器,很遗憾答错了。然后又问了我session的默认有效时间,session的默认有效时间是20分钟,这个肯定也没问题,最后问了我一个方法重写的作用,我当时回答了方法重写就是覆盖了父类的方法,这个作用我还真不知道该怎么说,所以这个也就没回答上,最后面试官没收我的简历,感觉很受打击。其实很多东西平时自己会用,但是有时候要说反而不知道该怎么说了。因此面试的同学们还是多应该看看面试和笔试的一些题吧,争取早日拿到一个不错的offer,让我们共同努力!当然也希望面试官不要对我们学生要求太高,毕竟大学的教育质量在那里,而且经验也没有多少,对我们绝大部分大学生来说,虽然学了一些东西,但是我们都还是菜鸟,我们有时候只是需要一个机会,让我们能够学习的机会,我的.net只是基本上都是自学的,学校根本没讲什么东西,都是照着书上念,最后希望面试官能给我们这些大学生一个机会!
下面开始今天的20道面试与笔试题:
21、是否可以继承String类?
String类是sealed类故不可以继承。
22、
static void Main(string[] args)
{
Console.WriteLine(GetIt());
Console.ReadKey();
}
static int GetIt()
{
int i = 8;
try
{
i++;
Console.WriteLine("a");
return i;//把返回值设定为i,然后“尽快”返回(没啥事就回去吧)
}
finally
{
Console.WriteLine("b");
i++;
}
}
上面程序的执行结果是ab9
try {}里有一个return语句,那么紧跟在这个try后的finally {}里的代码会不会被执行,什么时候被执行?
会执行,在return后执行。
static void Main(string[] args)
{
//Console.WriteLine(GetIt());
Console.WriteLine(GetPerson().Age);
Console.ReadKey();
}
static Person GetPerson()
{
Person p = new Person();
p.Age = 8;
try
{
p.Age++;
Console.WriteLine("a");
return p;//把返回值设定为i,然后“尽快”返回(没啥事就回去吧。搞完就走)
}
finally
{
Console.WriteLine("b");
p.Age++;
}
}
加分的补充回答(也助记):读取数据库中数据的条数的程序
public int QueryCount()
{
…..
try
{
return cmd.ExecuteScalar();
}
finally
{
cmd.Dispose();
}
}
先执行cmd.ExecuteScalar(),把返回值暂时存起来,然后再去执行finally(钱放在这,我去劫个色),然后把返回值返回。return都是最后执行,但是return后的表达式的计算则是在finally之前。
如果C#设计的是先执行cmd.Dispose()再执行return就会出现return执行失败了,因为cmd已经Dispose了。
28、int、DateTime、string是否可以为null?
null表示“不知道”,而不是“没有”。没有年龄和不知道年龄是不一样。
数据库中null不能用0表示。0岁和不知道多少岁不一样。
Sex is zero。《色即是空》
//int i1 = null;
//int? i2 = null;//值类型后加?就成了可空数据类型
int i3 = i2;//所以把可空的赋值给一定不能为空的会报错。
//int i4 = (int)i2;//可以显式转换,由程序员来保证“一定不为空”
//int? i5 = i4;//一定会成功!
//using()→try{]catch{}finally{}
//int?是微软的一个语法糖。是一种和int没有直接关系的Nullable类型
Nullable<int> d1 = new Nullable<int>();//int? d1=null;
Nullable<int> d2 = new Nullable<int>(3);//int? d2=3;
Console.WriteLine(d1==null);
int、DateTime不能,因为其为Struct类型,而结构属于值类型,值类型不能为null,只有引用类型才能被赋值null。string可以为null。
C#中int等值类型不可以为null、而数据库中的int可以为null,这就是纠结的地方。int?就变成了可空的int类型。bool?、DateTime?
int i1 = 3;
int? i2 = i1;
//int i3 = i2;//不能把可能为空的赋值给一定不能为空的变量
int i3 = (int)i2;//显式转换
可空数据类型经典应用场景:三层中的Model属性的设计。
int?翻译生成.Net的Nullable<int>,CTS。
29、using关键字有什么用?什么是IDisposable?
using可以声明namespace的引入,还可以实现非托管资源的释放,实现了IDisposiable的类在using中创建,using结束后会自动调用该对象的Dispose方法,释放资源。加分的补充回答:using其实等价于try……finally,用起来更方便。
30、XML 与 HTML 的主要区别
1. XML是区分大小写字母的,HTML不区分。
2. 在HTML中,如果上下文清楚地显示出段落或者列表键在何处结尾,那么你可以省略</p>或者</li>之类的结束 标记。在XML中,绝对不能省略掉结束标记。
HTML:<img src="1.jpg"><br><br>
XML:<img src="1.jpg"></img><br/><br/>
3. 在XML中,拥有单个标记而没有匹配的结束标记的元素必须用一个 / 字符作为结尾。这样分析器就知道不用 查找结束标记了。
4. 在XML中,属性值必须分装在引号中。在HTML中,引号是可用可不用的。
5. 在HTML中,可以拥有不带值的属性名。在XML中,所有的属性都必须带有相应的值。
XML是用来存储和传输数据的
HTML是用来显示数据的
如果使用了完全符合XML语法要求的HTML,那么就叫做符合XHTML标准。符合XHTML标准的页面有利于SEO。
31、string str = null 与 string str = “”说明其中的区别。
答:string str = null 是不给他分配内存空间,而string str = \"\" 给它分配长度为空字符串的内存空间。 string str = null没有string对象,string str = “”有一个字符串对象。
string s3 = string.Empty;//反编译发现,string.Empty就是在类构造函数中 Empty = "";
32.写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:ID可能不是连续的。
答:解1: select top 10 * from A where id not in (select top 30 id from A)
演变步骤:
1)select top 30 id from T_FilterWords--取前条
2)select * from T_FilterWords
where id not in (select top 30 id from T_FilterWords)--取id不等于前三十条的
--也就是把前条排除在外
3)select top 10 * from T_FilterWords
where id not in (select top 30 id from T_FilterWords)
--取把前条排除在外的前条,也就是-40条
解2: select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A)
解答3:用ROW_NUMBER实现
33.面向对象的语言具有________性、_________性、________性
答:封装、继承、多态。
不要背,脑子中要有联想。
34.在.Net中所有可序列化的类都被标记为_____?
答:[serializable]
35、什么是code-Behind技术。
就是代码隐藏,在ASP.NET中通过ASPX页面指向CS文件的方法实现显示逻辑和处理逻辑的分离,这样有助于web应用程序的创建。比如分工,美工和编程的可以个干各的,不用再像以前asp那样都代码和html代码混在一起,难以维护。code-Behind是基于部分类技术实现的,在我的项目的三层代码生成器中用到了部分类。
36、接口是一种引用类型,在接口中可以声明( a),但不可以声明公有的域或私有的成员变量。
a) 方法、属性、索引器和事件;
b) 索引器和字段;
c) 事件和字段;
解读:接口中不能声明字段只能声明方法,属性、索引器和事件 最终都编译生成方法。因为字段属于实现层面的东西,只有存取值的时候才会用到字段,所以中接口中不能定义字段。
37. 在ADO.NET中,对于Command对象的ExecuteNonQuery()方法和ExecuteReader()方法,下面叙述错误的是(c)。
a) insert、update、delete等操作的Sql语句主要用ExecuteNonQuery()方法来执行;
b) ExecuteNonQuery()方法返回执行Sql语句所影响的行数。
c) Select操作的Sql语句只能由ExecuteReader()方法来执行;
d) ExecuteReader()方法返回一个DataReader对象;
拿SQLHelper实现一下。
38. 下列关于C#中索引器理解正确的是(c )
a) 索引器的参数必须是两个或两个以上
b) 索引器的参数类型必须是整数型
c) 索引器没有名字
d) 以上皆非
39. 下面关于XML的描述错误的是(d)。
a) XML提供一种描述结构化数据的方法;
b) XML 是一种简单、与平台无关并被广泛采用的标准;
c) XML文档可承载各种信息;
d) XML只是为了生成结构化文档;
40、以下的C#代码,试图用来定义一个接口:
public interface IFile
{
int A;
int delFile()
{
A = 3;
}
void disFile();
}
关于以上的代码,以下描述错误的是(d )。
a) 以上的代码中存在的错误包括:不能在接口中定义变量,所以int A代码行将出现错误;
b) 以上的代码中存在的错误包括:接口方法delFile是不允许实现的,所以不能编写具体的实现函数;
c) 代码void disFile();声明无错误,接口可以没有返回值;
d) 代码void disFile();应该编写为void disFile(){};