.NET面试题(二)
基础方面:
1.简单的描述一下C# 中重写,重载,隐藏的概念
C#中重写(overide)是子类继承父类后,对父类中的方法进行行为改写。
重载是指方法名相同,参数不同
子类B继承A,也声明一个方法a(){}
如果B里面的a()使用override,那么访问A的方法时实际上调用了B里面声明的方法,相当于A的方法被覆盖了,new就不是,访问A的a还是A里面定义的方法,访问B就是B里面定义的方法.
重写和隐藏的定义:
重写:基类方法声明为virtual(虚方法),派生类中使用override申明此方法的重写.
隐藏:基类方法不做申明(默认为非虚方法),在派生类中使用new声明此方法的隐藏。
这样看起来似乎不是很清晰明了,换成我自己的理解就是:
比如父类A,有个方法标记为virtual,a(){}
子类B继承A,也声明一个方法a(){}
如果B里面的a()使用override,那么访问A的方法时实际上调用了B里面声明的方法,相当于A的方法被覆盖了,new就不是,访问A的a还是A里面定义的方法,访问B就是B里面定义的方法.
说白了:new是覆盖,override是重载,“覆盖”并不意味着“删除”,但“重载”意味着“删除”,这就是“覆盖”和“重载”的区别
隐藏(new)示例:
using System;
class A
{
public void F()
{
Console.WriteLine("A.F");
}
}
class B: A
{
new public void F()
{
Console.WriteLine("B.F");
}
}
class Test
{
static void Main(string[] args)
{
B b = new B();
b.F();
A a = b;
a.F();
}
}
输出为
B.F
A.F
重写virtual(虚方法)示例
using System;
class A
{
public virtual void F()
{
Console.WriteLine("A.F");
}
}
class B: A
{
public override void F()
{
Console.WriteLine("B.F");
}
}
class Test
{
static void Main()
{
B b = new B();
b.F();
A a = b;
a.F();
}
}
输出为
B.F
B.F
using System;
class A
{
public void F()
{
Console.WriteLine("A.F");
}
}
class B: A
{
new public void F()
{
Console.WriteLine("B.F");
}
}
class Test
{
static void Main(string[] args)
{
B b = new B();
b.F();
A a = b;
a.F();
}
}
输出为
B.F
A.F
重写virtual(虚方法)示例
using System;
class A
{
public virtual void F()
{
Console.WriteLine("A.F");
}
}
class B: A
{
public override void F()
{
Console.WriteLine("B.F");
}
}
class Test
{
static void Main()
{
B b = new B();
b.F();
A a = b;
a.F();
}
}
输出为
B.F
B.F
2.执行string str=”xxx”+"yy”+"zz”所分配的内存
一个字符串的内存,上述代码中,所有字符串都是直接变量,C#编译器会在编译时连接他们,最终只会将一个字符串(即“xxxyyzz”)放入模块的元数据中。
如果对非直接量字符串使用+操作符,会在运行时进行连接。
3.string和String以及object与Object有什么区别
String是标准类型,string只是.NET平台给String类型的别称。String和string是一样的。
4.请看下面代码:
string str1=”a”;
string str2=str1;
str1=”a”+"b”;
问str1是否和str2相等。
不相等。代码敲了下,运行结果:str1:ab str2:b。搞不清楚出此题目的意义
5.简单的描述下HashTable和Dictionary的区别,能否说说这两种结构在遇到哈希冲突时的解决方案
6.ArrayList可以认为他是动态数组,请问他是怎么解决数组不需要预定义内存分配大小的问题的
7.简单的描述一下委托和事件以及他们的关系和区别.
8.我们知道.net平台的队列类(Queue)的内部是用数组(Array)实现的,请问你能想象一下是怎么实现的吗?
9.在这样的一个数组里面
A[0] = "are"
A[1] = "few"
A[2] = "girls"
A[3] = "in"
A[4] = "Missouri."
A[5] = "Rolla,"
A[6] = "There"
需要寻找"There"需要经历O(n)的复杂度,随着n的增大,性能的消耗也会加大,请问怎么减少查找的性能损失.
10.C#里如何在某一时刻知道某个类的当前的实例个数,要求不影响正常的垃圾回收.
11.虚方法和接口的区别.虚方法的实现原理是什么?
虚方法有方法体,而接口没有;子类继承父类,对虚方法进行重写,类实现接口,对接口中的方法进行实现。
12.struct和class的区别,简单描述他们的相同点,不同点,以及在内存中的存储方式
13.能简单的叙述下动态规划算法的的步骤吗?
14.括号的匹配性检查,如何实现,请简述你的想法. 如{(x+(a+b)+c)},当用户以字符串输入时,如何判断是否括号完整匹配.
Web方面:
1.简单的描述下ViewState的实现原理
将对象转换为二进制,然后把二进制转换为Base64
2.Webservice如何进行针对调用者的权限管理
3.能够简单描述一下MVC干了了什么事情,有哪些好处吗?
4.能够描述一下asp.net的webform的生存周期吗?
DoNet框架方面:
1.什么是CLR.简单的描述一下.net的运行机制
CLR:公共语言运行库。
运行机制:
2.值类型和引用类型的区别,以及内存中的存储方式
值类型一般有默认值,不可以派生出其他的类型,存储在栈上,;引用类型相反;存储在堆上
3.简单描述一下装箱和拆箱,怎么避免带来的性能损失
装箱是值类型转换为引用类型;拆箱是引用类型转换为值类型。一般可以用泛型来存储数据集,如:List<String>,强制指定类型,即可以避免装箱和拆箱。
4.简单描述一下.net下的垃圾回收(GC)机制
垃圾回收分为0,1,2代,始终从第0代开始回收。
.NET面试题(二)的更多相关文章
- 数据库基础SQL知识面试题二
数据库基础SQL知识面试题二 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.选课系统SQL语法练习 course数据库中有以下四张表: •students表(学生表): si ...
- C/C++常考面试题(二)
网上看到的面经,说是dynamic_cast的实现,和RTTI的相关,这才发现原来对这个概念这么模糊,所以作了这个总结. C/C++常考面试题(二) RTTI(Runtime Type Informa ...
- php面试题二--解决网站大流量高并发方案(从url到硬盘来解决高并发方案总结)
php面试题二--解决网站大流量高并发方案(从url到硬盘来解决高并发方案总结) 一.总结 从外到内解决网站大流量高并发问题---从提交一个url开始(从用户按下搜索栏回车键开始) url最开始会到d ...
- php开发面试题---2、php常用面试题二(表单提交方式中的get和post有什么区别)
php开发面试题---2.php常用面试题二(表单提交方式中的get和post有什么区别) 一.总结 一句话总结: 数据位置:get参数在url里面,post在主体里面 数据大小:get几kb,pos ...
- C++经典面试题(二)
近期看一些面试题,认为假设自己被问到了,并不能非常利落的回答出来. 一是从来没有这个意识,二是没有认真的梳理下. 以下对这些题做出分析,哈!个人能力有限,当中难免有疏漏,欢迎大家补充咯. 11.引用与 ...
- JAVA面试题二
JAVA 综合面试题 2007-08-12 目录 Java面试题整理 9 Java面向对象 9 1. super()与this()的区别? 9 2. 作用域public,protected,priva ...
- Java面试题(二)
系统整理了一下有关Java的面试题,包括基础篇,javaweb篇,框架篇,数据库篇,多线程篇,并发篇,算法篇等等,陆续更新中.其他方面如前端后端等等的面试题也在整理中,都会有的. 注:文末有福利! 1 ...
- Java常考面试题(二)
序言 昨天刚开始的”每日5题面试“这类文章,感觉还不错,把一些平常看似懂了的东西,弄清楚了.就像什么是虚拟机?这个问题,看起来知道,但是要说出个所以然来,又懵逼了,经常回过头来看看做过的面试题,试着用 ...
- C# 面试题 二
1.进程和线程的区别 进程是系统进行资源分配和调度的单位:线程是CPU调度和分派的单位,一个进程可以有多个线程,这些线程共享这个进程的资源. 2.成员变量和成员函数前加static的作用 它们被称为常 ...
- python面试题(二)
最近参加了几场招聘,发现好多人的一些基础知识不是很扎实,做的题很多都是错误的,因此找了一些我们公司面试过程中的一些最基本的面试题供大家参考,希望各位都能找到一个好的工作.今天给大家先分享的是关于Pyt ...
随机推荐
- JavaScript之几种创建函数的区别以及优缺点。
工厂模式 function createPerson(name,age,job){ var o = new Object(); o.name = name; o.age = age; o.job = ...
- 查看iOS Crash logs
当应用在设备中运行发生崩溃,iOS将记录这些错误日志并且创建了崩溃报告(Crash Report).崩溃报告中包含了iOS的版本.日期.异常类型.堆栈跟踪以及其他信息. ① 在Xcode中查看崩溃报告 ...
- SQL Server 获取某时间点后修改的函数Function 并以文本格式显示
修改查询分析器如下选项 右键=>查询选项 =>结果=>文本=> 取消 在结果集中包括列标题 的勾选 右键=>将结果保存到=> 选择 以文本格式显示结果 执行如下SQ ...
- iOS:UIResponser控件的介绍(响应者)
UIResponser响应者控件 知识: 在iOS中不是任何对象都能处理事件,只有继承了UIResponser的对象才能接收并处理事件.我们称之为“响应者对象” UIApplication,UIV ...
- python wheel 包命名规则和 abi 兼容
wheel 包的命名规定 wheel 包的命名格式为 {distribution}-{version}(-{build tag})?-{python tag}-{abi tag}-{platform ...
- Scriptable render pipeline unity
https://www.youtube.com/watch?v=zbjkEQMEShM LWRP https://blogs.unity3d.com/cn/2018/02/21/the-lightwe ...
- Hibernate异常:Unable to locate appropriate constructor on class
异常信息:org.hibernate.hql.ast.QuerySyntaxException: Unable to locate appropriate constructor on class o ...
- DevExpress中的lookupedit的使用方法详解
摘自: http://***/zh-CN/Info/catalog/17631.html 概述:本文详细介绍了DevExpress中的lookupedit的使用方法. 绑定数据源: 1 2 3 l ...
- 一起talk C栗子吧(第二十七回:C语言实例--插入排序)
各位看官们,大家好.上一回中咱们说的是冒泡排序的样例.这一回咱们说的样例是:插入排序. 闲话休 提,言归正转.让我们一起talk C栗子吧. 看官们,我们这回说的插入排序和前一回说的冒泡排序一样.也是 ...
- Java中PriorityQueue详解
Java中PriorityQueue通过二叉小顶堆实现,可以用一棵完全二叉树表示.本文从Queue接口函数出发,结合生动的图解,深入浅出地分析PriorityQueue每个操作的具体过程和时间复杂度, ...