2019整合C#面试题(4)

  • A+
所属分类:编程技术

51..net的Remoting 的工作原理是什么?

服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置

 

52.面向对象的语言具有________性、_________性、________性

封装、继承、多态。

封装:用抽象的数据类型将数据和基于数据的操作封装在一起,数据被保护在抽象数据类型内部。


继承:子类拥有父类的所有数据和操作。

 

多态:一个程序中同名的不同方法共存的情况。有两种形式的多态– 重载与重写。

 

 

53.启动一个线程是用run()还是start()?

启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。

run()方法可以产生必须退出的标志来停止一个线程。

 

54.sleep()和 wait() 有什么区别?

sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。

这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级

(b)正在运行的线程因为其它原因而阻塞。

wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。

 

55 .net Remoting 和 Web Service 的区别?

1、Remoting可以灵活的定义其所基于的协议,如果定义为HTTP,则与Web   Service就没有什么区别了,一般都喜欢定义为TCP,这样比Web   Service稍为高效一些   
  2、Remoting不是标准,而Web   Service是标准;   
  3、Remoting一般需要通过一个WinForm或是Windows服务进行启动,而Web   Service则需要IIS进行启动。   
  4、在VS.net开发环境中,专门对Web   Service的调用进行了封装,用起来比Remoting方便   
 建议还是采用Web   Service好些,对于开发来说更容易控制。
为了能清楚地描述Web   Service   和Remoting之间得区别,我打算从他们的体系结构上来说起:     
  Web   Service大体上分为5个层次:     
  1.   Http传输信道     
  2.   XML的数据格式     
  3.   SOAP封装格式     
  4.   WSDL的描述方式     
  5.   UDDI     
  总体上来讲,.NET   下的   Web   Service结构比较简单,也比较容易理解和应用:   一般来讲在.NET结构下的WebService应用都是基于.net   Framework以及IIS的架构之下,所以部署(Dispose)起来相对比较容易点。
  从实现的角度来讲,     
  首先WebService必须把暴露给客户端的方法所在的类继承于:System.Web.Services.WebService这个基类,其次所暴露的方法前面必须有[WebMethod]或者[WebMethodAttribute]     
    
WebService的运行机理(运行过程)
  首先客户端从服务器的到WebService的WSDL,同时在客户端声称一个代理类(Proxy   Class)    这个代理类负责与WebService服务器进行Request   和Response     
  当一个数据(XML格式的)被封装成SOAP格式的数据流发送到服务器端的时候,就会生成一个进程对象并且把接收到这个Request的SOAP包进行解析,然后对事物进行处理,处理结束以后再对这个计算结果进行SOAP包装,然后把这个包作为一个Response发送给客户端的代理类(Proxy   Class),同样地,这个代理类也对这个SOAP包进行解析处理,继而进行后续操作。
下面对.net   Remoting进行概括的阐述:     
.net   Remoting   是在DCOM等基础上发展起来的一种技术,它的主要目的是实现跨平台、跨语言、穿透企业防火墙,这也是他的基本特点,与WebService有所不同的是,它支持HTTP以及TCP信道,而且它不仅能传输XML格式的SOAP包,也可以传输传统意义上的二进制流,这使得它变得效率更高也更加灵活。而且它不依赖于IIS,用户可以自己开发(Development)并部署(Dispose)自己喜欢的宿主服务器,所以从这些方面上来讲WebService其实上是.net   Remoting的一种特例。
.net  Remoting的特点是     
他的优点是用户既可以使用TCP信道方式进行二进制流方式通信,也可以使用HTTP信道进行SOAP格式的性通信  ,效率相对WebService要高不少;但是它的缺点也很明显,.net   remoting只能应用于MS 的.net Framework之下。
从性能上来讲Remoting的效率和传统的DCOM、COM+的性能很相近!
56.数组有没有length()这个方法? String有没有length()这个方法?
数组没有length()这个方法,有length的属性。String有有length()这个方法。
57.子类对父类中虚方法的处理有重写(override)和覆盖(new),请说明它们的区别?
有父类ParentClass和子类ChildClass、以及父类的虚方法VirtualMethod。有如下程序段:
ParentClass pc = new ChildClass();pc.VirtualMethod(...);
如果子类是重写(override)父类的VirtualMethod,则上面的第二行语句将调用子类的该方法
如果子类是覆盖(new)父类的VirtualMethod,则上面的第二行语句将调用父类的该方法
58.写出程序的输出结果

class Class1 {

private string str = "Class1.str";

private int i = 0;

static void StringConvert(string str) {

str = "string being converted.";

}

static void StringConvert(Class1 c) {

c.str = "string being converted.";

}

static void Add(int i) {

i++;

}

static void AddWithRef(ref int i) {

i++;

}

static void Main() {

int i1 = 10;

int i2 = 20;

string str = "str";

Class1 c = new Class1();

Add(i1);

AddWithRef(ref i2);

Add(c.i);

StringConvert(str);

StringConvert(c);

Console.WriteLine(i1);

Console.WriteLine(i2);

Console.WriteLine(c.i);

Console.WriteLine(str);

Console.WriteLine(c.str);

}

}

 

 

59.写出程序的输出结果

public abstract class A

{

public A()

{

Console.WriteLine('A');

}

public virtual void Fun()

{

Console.WriteLine("A.Fun()");

}

}

public class B: A

{

public B()

{

Console.WriteLine('B');

}

public new void Fun()

{

Console.WriteLine("B.Fun()");

}

public static void Main()

{

A a = new B();

a.Fun();

}

}

 

 

60.写出程序的输出结果

public class A

{

public virtual void Fun1(int i)

{

Console.WriteLine(i);

}

public void Fun2(A a)

{

a.Fun1(1);

Fun1(5);

}

}

public class B : A

{

public override void Fun1(int i)

{

base.Fun1 (i + 1);

}

public static void Main()

{

B b = new B();

A a = new A();

a.Fun2(b);

b.Fun2(a);

}

}

 

 

61.值类型和引用类型的区别?写出C#的样例代码

基于值类型的变量直接包含值。将一个值类型变量赋给另一个值类型变量时,将复制包含的值。这与引用类型变量的赋值不同,引用类型变量的赋值只复制对对象的引用,而不复制对象本身。所有的值类型均隐式派生自 System.ValueType。与引用类型不同,从值类型不可能派生出新的类型。但与引用类型相同的是,结构也可以实现接口。与引用类型不同,值类型不可能包含 null值。然而,可空类型功能允许将 null 赋给值类型。每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。值类型主要由两类组成:结构、枚举,结构分为以下几类:Numeric(数值)类型、整型、浮点型、decimal、bool、用户定义的结构。引用类型的变量又称为对象,可存储对实际数据的引用。声明引用类型的关键字:class、interface、delegate、内置引用类型:object、string

 

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

异:不能直接实例化接口。接口不包含方法的实现。接口、类和结构可从多个接口继承。但是C# 只支持单继承:类只能从一个基类继承实现。类定义可在不同的源文件之间进行拆分。

同:接口、类和结构可从多个接口继承。接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。接口可以包含事件、索引器、方法和属性。一个类可以实现多个接口。

63.UDP连接和TCP连接的异同。

TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。 
UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。

64.请解释web.config文件中的重要节点

Web.config文件是一个XML文本文件,它用来储存 ASP.NET Web 应用程序的配置信息(如最常用的设置ASP.NET Web 应用程序的身份验证方式),它可以出现在应用程序的每一个目录中。当你通过VB.NET新建一个Web应用程序后,默认情况下会在根目录自动创建一个默认的Web.config文件,包括默认的配置设置,所有的子目录都继承它的配置设置。如果你想修改子目录的配置设置,你可以在该子目录下新建一个Web.config文件。它可以提供除从父目录继承的配置信息以外的配置信息,也可以重写或修改父目录中定义的设置。 1、<authentication> 节作用:配置 ASP.NET 身份验证支持(为Windows、Forms、PassPort、None四种)。该元素只能在计算机、站点或应用程序级别声明。<authentication> 元素必需与<authorization> 节配合使用。示例:以下示例为基于窗体(Forms)的身份验证配置站点,当没有登陆的用户访问需要身份验证的网页,网页自动跳转到登陆网页。<authentication mode="Forms" > <forms loginUrl="logon.aspx" name=".FormsAuthCookie"/></authentication> 其中元素loginUrl表示登陆网页的名称,name表示Cookie名称2、<authorization> 节作用:控制对 URL 资源的客户端访问(如允许匿名用户访问)。此元素可以在任何级别(计算机、站点、应用程序、子目录或页)上声明。必需与<authentication> 节配合使用。3、<compilation>节作用:配置 ASP.NET 使用的所有编译设置。默认的debug属性为“True”.在程序编译完成交付使用之后应将其设为True(Web.config文件中有详细说明,此处省略示例)4、<customErrors>作用:为 ASP.NET 应用程序提供有关自定义错误信息的信息。它不适用于 XML Web services 中发生的错误。5、<httpRuntime>节作用:配置 ASP.NET HTTP 运行库设置。该节可以在计算机、站点、应用程序和子目录级别声明。 6、 <pages>作用:标识特定于页的配置设置(如是否启用会话状态、视图状态,是否检测用户的输入等)。<pages>可以在计算机、站点、应用程序和子目录级别声明。7、<sessionState>  作用:为当前应用程序配置会话状态设置(如设置是否启用会话状态,会话状态保存位置)。 8、<trace>  作用:配置 ASP.NET 跟踪服务,主要用来程序测试判断哪里出错。

65.您在什么情况下会用到虚方法?它与接口有什么不同?

当在继承类中想重写某一方法时会用到虚方法;虚方法是类的成员函数,接口相当于抽象类

 

66.维护数据库的完整性、一致性、你喜欢用触发器还是自写业务逻辑?为什么

尽可能用约束(包括CHECK、主键、唯一键、外键、非空字段)实现,这种方式的效率最好;其次用触发器,这种方式可以保证无论何种业务系统访问数据库都能维持数据库的完整性、一致性;最后再考虑用自写业务逻辑实现,但这种方式效率最低、编程最复杂,当为下下之策。

 

67.设有关系EMPENOENAMESALARYDNO ),其中各属性的含义依次为职工号、姓名、工资和所在部门号,以及关系DEPTDNODNAMEMANAGER),其中各属性含义依次为部门号、部门名称、部门经理的职工号。试用SQL语句完成以下查询:

a) 列出各部门中工资不低于600元的职工的平均工资。
select dno , avg(salary) as average from emp where salary>=600 group by dno

b) 查询001号职工所在部门名称。
select DNAME from dept where DNO = (select DNO from emp where eno=’001’) 
或者
select d.dname from dept as d left jon emp as e on e.dno = d.dno where e.eno=’001’

c)请用SQL语句将“销售部”的那些工资数额低于600的职工的工资上调10%。
update EMP set SALARY =SALARY*(1+0.1) where SALARY<600 and DNO = ( select DNO from dept where dname= ‘销售部’ )

68.以下关于refout的描述

使用ref参数,传递到ref参数的参数必须最先初始化。

使用ref参数,必须将参数作为ref参数显式传递到方法。

69.下面的例子中

using System;

class A

{

public static int X;

static A(){

X=B.Y+1;

}

}

class B

{

public static int Y=A.X+1;

static B(){}

static void Main(){

Console.WriteLine(“X={0},Y={1}“,A.X,B.Y);

}

}

产生的输出结果是什么?

x=1,y=2

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: