.net面试的题

1.页面传值的几种方式    QueryString     Session   Server.Transfer  Cookie  

2 Ado.net 五大对象 Connection Command  DataAdapter  DataSet  DataReader

3C#中的委托是什么?事件是不是一种委托?事件和委托的关系。  委托可以把一个方法作为一个参数带入另一个方法,可以理解为指向一个函数的指针。事件和委托没有可比性,委托是类型,事件是对象。事件的内部是用委托来实现的。

4.overrider与overload的区别 。   重载是方法名相同,参数或者参数的类型不同,进行多次重载适应不同的需求。0verride是基类中函数的重写。

5.C#中索引器是否只能根据数字进行索引?是否允许多个索引器参数?参数的个数和类型都是任意的

6.装箱和拆箱

装箱:从值类型接口转换到引用类型。

拆箱:从引用类型转换到值类型。

7.class与struct的区别  

class是引用类型可以被实例化的,分配在内存堆上的。类是引用传递。struct 属于值类型,分配在内存栈上的。

8.堆和栈的区别

堆是程序运行期间分配好的内存空间。 栈是编译期间就能分配好的内存空间,代码中有明确的定义。

9、能用foreach遍历访问的对象的要求
需要实现IEnumerable接口或声明GetEnumerator方法的类型。

10,值类型和引用类型的区别。。

11.C#中的接口和类有什么异同

不同点:

不能直接实例化接口。

接口不包含方法的实现。

接口可以多继承,类只能单继承。

类定义可在不同的源文件之间进行拆分。

相同点:

接口、类和结构都可以从多个接口继承。

接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。

接口和类都可以包含事件、索引器、方法和属性。

 

20、abstract class和interface有什么区别?
相同点:
都不能被直接实例化,都可以通过继承实现其抽象方法。
不同点:
接口支持多继承;抽象类不能实现多继承。
接口只能定义行为;抽象类既可以定义行为,还可能提供实现。
接口只包含方法(Method)、属性(Property)、索引器(Index)、事件(Event)的签名,但不能定义字段和包含实现的方法;
抽象类可以定义字段、属性、包含有实现的方法。  
接口可以作用于值类型(Struct)和引用类型(Class);抽象类只能作用于引用类型。例如,Struct就可以继承接口,而不能继承类。
加分的补充回答:讲设计模式的时候SettingsProvider的例子。

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中,所有的属性都必须带有相应的值。

 

32.写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:ID可能不是连续的。
答:解1: select top 10 * from A where id not in (select top 30 id from A)

43.StringBuilder 和 String 的区别?
答:String 在进行运算时(如赋值、拼接等)会产生一个新的实例,而 StringBuilder 则不会。所以在大量字符串拼接或频繁对某一字符串进行操作时最好使用 StringBuilder,不要使用 String

49、您在什么情况下会用到虚方法?它与接口有什么不同?
答案:子类重新定义父类的某一个方法时,必须把父类的方法定义为virtual
在定义接口中不能有方法体,虚方法可以。
实现时,子类可以不重新定义虚方法,但如果一个类继承接口,那必须实现这个接口。

55、C#支持多重继承么?
类之间不支持,接口之间支持。类对接口叫做实现,不叫继承。 类是爹、接口是能力,能有多个能力,但不能有多个爹。

57、通过超链接怎样传递中文参数?
答:用URL编码,通过QueryString传递,用urlencode编码 用urldecode解码

59、Server.Transfer和Response.Redirect的区别是什么?(常考)
答: Server.Transfer仅是服务器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;Response.Redirect则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。

61、是否可以从一个static方法内部发出对非static方法的调用?
  不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个static方法内部不能发出对非static方法的调用。

63、说出一些常用的类、接口,请各举5个
要让人家感觉你对.Net开发很熟,所以,不能仅仅只列谁都能想到的那些东西,要多列你在做项目中涉及的那些东西。就写你最近写的那些程序中涉及的那些类。
常用的类:StreamReader、WebClient、Dictionary<K,V>、StringBuilder、SqlConnection、FileStream、File、Regex、List<T>
常用的接口:IDisposable、IEnumerable、IDbConnection、IComparable、ICollection、IList、IDictionary

84、Application 、Cookie和 Session 两种会话有什么不同?
   答:Application是用来存取整个网站全局的信息,而Session是用来存取与具体某个访问者关联的信息。Cookie是保存在客户端的,机密信息不能保存在Cookie中,只能放小数据;Session是保存在服务器端的,比较安全,可以放大数据。

88、请你简单的说明数据库建立索引的优缺点
使用索引可以加快数据的查询速度,不过由于数据插入过程中会建索引,所以会降低数据的插入、更新速度,索引还会占磁盘空间。

111、asp.net中<%%>、<%=%>、<%#%>的区别是什么
<%%>是执行<%%>中的C#代码,<%=%>是将=后表达式的值输出到Response中,<%#%>是数据绑定,一般用在ListView、GridView、Repeater等控件的绑定中。数据绑定分为:Eval:单向绑定和Bind:双向绑定。

114、asp.net中的错误机制。(常考)
参考:
定制错误页来将显示一个友好的报错页面。
页面中未捕获一样会触发Page_Error(不常用),
应用程序中的未捕获异常会触发Application_Error。
通过HttpContext.Current.Server.GetLastError()、HttpContext.Current.Error;拿到未捕捉异常,记录到Log4Net日志中。

取得不重复的数据:
select * from Persons where Id in
(SELECT MAX(Id) AS Expr1 FROM  Persons GROUP BY Name, Age)

删除重复的数据:
delete from Persons
where Id not in
(SELECT     MAX(Id) AS Expr1 FROM  Persons GROUP BY Name, Age)

127、说一下SQLServer中索引的两种类型(常考!!!)
参考:聚簇(cluster)索引和非聚簇索引。
字典的拼音目录就是聚簇(cluster)索引,笔画目录就是非聚簇索引。这样查询“G到M的汉字”就非常快,而查询“6划到8划的字”则慢。
聚簇索引是一种特殊索引,它使数据按照索引的排序顺序存放表中。聚簇索引类似于字典,即所有词条在字典中都以字母顺序排列。聚簇索引实际上重组了表中的数据,所以你只能在表中建立一个聚簇索引。

如何提高页面的显示速度?假如一个页面的加载时间是10.89s,你会用什么样的方式进行优化?

首先要找出问题所在,是服务器端运行的速度慢还是服务器端到客户端的下载慢还是页面在浏览器的加载速度慢。
    如果是服务器端运行速度慢,则找是数据库的原因还是算法的问题,如果是数据库的问题则尝试添加索引、优化SQL语句,如果是算法的问题,则优化算法。如果对于一些不经常改动的页面可以使用静态页技术!对于一些数据不需要及时更新的而且取数据的过程非常耗时可以使用缓存。页面中的内容可以按需加载(比如说可以像verycd网站的评论那样当用户需要看的时候再加载其内容),可以在图片需要显示的时候再进行加载。
    如果是服务器端到客户端的下载慢则看是页面体积过于臃肿还是网络问题,如果是页面体积过于臃肿,则优化HTML代码,去掉无用的标签,压缩JS、CSS,可以用CSS Spirit技术将多个图片放到一个图片中,减少向服务器的请求。如果是网络问题,则尝试在不同的网络、地区部署服务器,然后使用CDN技术加速访问。
    如果是页面中的JavaScript运行复杂导致运行速度慢,则优化JavaScript。
webkaka:测网速。
如何处理百万条数据的优化?
对于经常进行检索的字段创建索引,对于经常进行范围查询的一个字段创建聚集索引;
当有大量数据进行插入的时候进行批量插入;
一些代码用存储过程进行重写(当一个逻辑有多行SQL要执行的时候用存储过程可以优化速度,可以避免客户端和SQLServer之间多次交互);
(*)集群、读写分离;
(*)分区、分表;

网站想要实现文件防盗链的功能,说说你的解决方案。
读取HTTP报文头中的UrlReferrer在Application_BeginRequest中我们可以判断用户的请求是否来源于本网站。如果不是我们可以终止用户的请求(Response.End();)!

129、请编程遍历WinForm页面上所有TextBox控件并给它赋值为string.Empty?
答: foreach (System.Windows.Forms.Control control in this.Controls)
    {
         if (control is System.Windows.Forms.TextBox)
        {
        System.Windows.Forms.TextBox tb = (System.Windows.Forms.TextBox)control ;
         tb.Text = String.Empty ;
         }
    }

134.一个数组:1,1,2,3,5,8,13,21...+m,求第30位数是多少?用递归实现;(常考!!!)
写递归要确定两个:递归的终止条件;递归表达式。
解答:总结递归规律:F(n)=F(n-2)+F(n-1) Fibonacci数列
        static int F(int n)
        {
            if (n == 1)
            {
                return 1;
            }
            if (n == 2)
            {
                return 1;
            }
            return F(n - 2) + F(n - 1);
        }

在GRADE表中查找80-90份的学生学号和分数
select 学号,分数 from grade where 分数 between 80 and 90
在GRADE 表中查找课程编号为003学生的平均分
   select avg(分数) from grade where 课程编号='003'
在GRADE 表中查询学习各门课程的人数
Select课程编号,count(学号) as 人数from grade group by 课程编号
查询所有姓张的学生的学号和姓名
   select  姓名,学号 from student_info where 姓名 like '张%'

嵌套查询:
查询和学号’0001’的这位同学性别相同的所有同学的姓名和出生年月
 select 姓名,出生年月 from student_info where 性别 in(select 性别 from student_info where sno='0001')
查询所有选修课程编号为0002 和0003的学生的学号、姓名和性别
select 学号,姓名,性别 from student_info where 学号 in(select 学号 from grade where 课程编号='0002' and 学号 in(select 学号 from grade where 课程编号='0001'))
查询出学号为0001的学生的分数比0002号学生最低分高的课程编号的课程编号和分数
select 课程编号, 分数 from grade where 学号='0001' and 分数>(select min(分数) from grade where 学号='0002')
多表查询:
查询分数在80-90分的学生的学号、姓名、分数
select student_info.学号,student_info.姓名,grade.分数 from student_info,grade where grade.分数 between 80 and 90
查询学习了’C语言’课程的学生学号、姓名和分数
select student_info.学号,student_info.姓名,grade.成绩from student_info,grade,curriculum where student_info.学号=grade.学号and grade.课程号=curriculum.课程号and curriculum.课程名='C语言'
查询所有学生的总成绩,要求列出学号、姓名、总成绩,没有选课的学生总成绩为空。

select grade.学号,student_info.姓名,sum(grade.成绩) as 总成绩from student_info,grade where grade.学号=student_info.学号group by grade.学号,student_info.姓名

 

posted @ 2013-02-28 23:57  Suner  阅读(350)  评论(0编辑  收藏  举报