您好,欢迎来到抵帆知识网。
搜索
您的当前位置:首页软件开发工程师公司招聘面试题

软件开发工程师公司招聘面试题

来源:抵帆知识网
第一套

1.面向对象的思想主要包括什么?

对向对象程序设计(OOP)思想:封装、继承、多态

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

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

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

2.什么是ASP.net中的用户控件? 用户控件就是.ascx,复合控件就是.DLL

3.什么叫应用程序域?什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS、CLS和CLR分别作何解释? 应用程序域:一种边界,它由公共语言运行库围绕同一应用程序范围内创建的对象建立。

受管制的代码:受管制的代码是在CLR虚拟机中运行的代码。 强类型系统: C# 是强类型语言;因此每个变量和对象都必须具有声明类型。 装箱和拆箱:

装箱就是隐式的将一个值型转换为引用型对象。比如: int i=0;

Syste.Object obj=i;

这个过程就是装箱!就是将i装箱!

拆箱就是将一个引用型对象转换成任意值型!比如: int i=0;

System.Object obj=i; int j=(int)obj;

这个过程前2句是将i装箱,后一句是将obj拆箱!

值型就是在栈中分配内存,在申明的同时就初始化,以确保数据不为NULL;

引用型是在堆中分配内存,初始化为null,引用型是需要GARBAGE COLLECTION来回收内存的,值型不用,超出了作用范围,系统就会自动释放!

重载:类中的方法名相同,但参数的个数或类型不同

CTS(Common Type System)(通用类型系统) :描述了类型的定义和行为。

CLS( Common Language Specification) 通用语言规范 CLR ( Common Language Runtime ) 通用语言运行时

4.列举一下你所了解的XML技术及其应用 xml可以用来做网页(xslt) xml可以当作数据库

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

值类型存在内存栈里面,引用类型存在内存堆里面 int i = 10; //值类型变量

class a = new class(); //定义类 引用类型

6.ADO.net中常用的对象有哪些?分别描述一下。

DataSet对象:表示内存中数据的缓存,可以把它想像成一个临时的数据库,它里可以存多个表

DataTable:而且是断开式的,不用每进行一次操作就对数据库进行更新,从而提高了效率。

DataReader对象:它与DataSet最大的不同是有连接式的,每次对数据库进行存取都会影响到数据库。

Connection对象:用于连接数据库的对象,表示到数据源的一个唯一的连接。

Command对象:表示要对数据库执行的一个SQL语句或一个存储过程。

DataAdapter对象:该对象是与DataSet配合使用的对象,用于把表填充到DataSet,和更新DataSet等

7.如何理解委托? 委托可以理解为函数指针

把方法或者函数包装成一个对象引用,然后就可以作为参数传递。

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

接口是负责功能的定义,项目中通过接口来规范类,操作类以及抽象类的概念!

而类是负责功能的具体实现!

9.。net中读写数据库需要用到哪些类?他们的作用?

1、DataSet 用来无连接的储存多个表的数据,并包含表与表之间的关联关系

2、DataTable 用来存储一个表的数据

3、SqlConnection 用来创建一个到数据库的连接 4、SqlCommand 用来执行SQL语句 5、SqlDataReader 用来顺序读取数据

6、SqlDataAdapter 用来将数据填充到DataSet或DataTable

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

前者只管传,不管数据到不到,无须建立连接.后者保证传输的数据准确,须要连接.

11.ASP.net的身份验证方式有哪些?分别是什么原理? Asp.net的身份验证有有三种,分别是”Windows | Forms | Passport”验证,WINDOWS一般在做企业内部OA的时候用的多一

些,FORM一般是做网站用的多他是采用COOKIE机制来实现的,PASSPORT是微软提供的一个WEBSERVICE。

12.进程和线程分别怎么理解?

进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于:简而言之,一个程序至少有一个进程,一个进程至少有一个线程.线程的划分尺度小于进程,使得多线程程序的并发性高。 线程在执行过程中与进程还是有区别的。每个的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

13.什么是code-Behind技术。

简单的说就是代码分离技术,也就是.net中的HTML代码和程序代码分别位于不同的文件,

14.活动目录的作用。(答案不全 不好总结)

活动目录是Windows平台的一个核心的部件,活动目录服务提供了一种管理组成网络环境的各种对象的标志和关系的方法。

15..net中读写XML的类都归属于哪些命名空间?(不全 看功能

而定)

SYSTEM.XML、SYSTEM.DATA、System.io

16.解释一下UDDI、WSDL的意义及其作用。

UDDI:统一描述、发现和集成协议(UDDI, Universal Description, Discovery and Integration)是一套基于Web的、分布式的、为Web服务提供的信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的Web服务注册以使得别的企业能够发现的访问协议的实现标准。UDDI提供了一组基于标准的规范用于描述和发现服务,还提供了一组基于因特网的实现。

WSDL:描述Web服务的公共接口。这是一个基于XML的关于如何与Web服务通讯和使用的服务描述

17.什么是SOAP,有哪些应用。

SOAP(Simple Object Access Protocol )简单对象访问协议是在分散或分布式的环境中交换信息并执行远程过程调用的协议,是一个基于XML的协议。

18.如何理解.net中的垃圾回收机制。

NET Framework 的垃圾回收器管理应用程序的内存分配和释放。每次您使用 new 运算符创建对象时,运行库都从托管堆为该对象分配内存。只要托管堆中有地址空间可用,运行库就会继续为

新对象分配空间。但是,内存不是无限大的。最终,垃圾回收器必须执行回收以释放一些内存。垃圾回收器优化引擎根据正在进行的分配情况确定执行回收的最佳时间。当垃圾回收器执行回收时,它检查托管堆中不再被应用程序使用的对象并执行必要的操作来回收它们占用的内存。

19.常用的调用webservice方法有哪些? vs.net里选择添加web引用

20.C#中区别多态、重载、重写的概念和语法结构2008年04月26日 星期六 18:11重写是指重写基类的方法,在基类中的方法必须有修饰符virtual,而在子类的方法中必须指明override。 格式: 基类中:

public virtual void myMethod() { } 子类中:

public override void myMethod() { }

重写以后,用基类对象和子类对象访问myMethod()方法,结果

都是访问在子类中重新定义的方法,基类的方法相当于被覆盖掉了。 重载

用于在给定了参数列表和一组候选函数成员的情况下,选择一个最佳函数成员来实施调用。 public void test(int x,int y){}

public void test(int x,ref int y){}

public void test(int x,int y,string a){} 重载特征:

I.方法名必须相同

II.参数列表必须不相同,与参数列表的顺序无关

III.返回值类型可以不相同 ========================= 但如果有泛型,就要注意了! 多态

c#的多态性主要体现在类的继承上:

子类继承父类的时候,可能出现同名但方法定义不同的情况, 所以在子类中会将原方法覆盖,实现自身的要求.

using System;

class Employee {

virtual public void CalculatePlay() {

Console.WriteLine(“Employee”); } };

class SalariedEmployee: Employee {

override public void CalculatePlay() {

Console.WriteLine(“Salary”); } };

class PolyApp {

public static void Main() {

Employee baseE1 = new Employee(); baseE1.CalculatePlay();

Employee baseE2 = new SalariedEmployee(); baseE2.CalculatePlay();

SalariedEmployee s = new SalariedEmployee(); s.CalculatePlay(); } };

1:a=10,b=15,在不用第三方变量的前提下,把a,b的值互换

2:已知数组int[] max={6,5,2,9,7,4,0};用快速排序算法按降序对其进行排列,并返回数组

3:请简述面向对象的多态的特性及意义!

4:session喜欢丢值且占内存,Cookis不安全,请问用什么办法代替这两种原始的方法

5:对数据的并发采用什么办法进行处理较好。

6:已知Oracle数据库有GD和ZS两个数据库,GD数据库v_s表有数据写入时,从v_s表中提取最新数据到ZS数据库的D_E表中。请问用什么办法解决这一问题?如果又碰到不能互访的问题时,又用什么办法解决?

7:已知Oracle数据库a,b

现在在a用户权限下,访问b数据库sql语句为select a.* From b a,请改正这一句Sql的写法

8:当对数据库进行海量级的数据插入时,数据库出现报错,错误原因可能有哪些,以你的经验谈谈你的解决办法

9:算法分析

AH 20060625 12 44 01 CAD001 AH 20060625 12 44 01 CAD001

AH 20060625 13 44 02 CAD001 AH 20060625 14 44 03 CAD001

说明:第二列表示日期,第三列表示温度,第四列表示水位,第五列表示流量,第6列表示水位测站编码,每一列表示一个字段 很明显第一条数据和第二条数据重复,然数据表中有主键和外键的约束,是不允许有重复的数据存在的,请构造算法将重复的数据Del掉

10:javascript算法

已知a,b,现在点鼠标a会向b游动,鼠标停,a会停下来 请实现\"跑步算法 1、答案 a=a+b; b=a-b; a=a-b;

还有变态要求,需要代码最短呢。有两个结果: 1) a^=b^(b^=a^b); // 13个字节 2) a=b+(b=a)*0; // 11个字节

2、答案(如果不限定算法,其实可以直接用Array.Sort()方法的)

public class TestQuickSort {

private int[] array = null;

private void quickSort(int lowest, int highest) { if (array == null || lowest < 0 || lowest >= highest

|| highest >= array.length) {

return; }

int low = lowest; int high = highest; int key = low++; for (; low <= high;) { if (key < high) { if (array[key] > array[high]) {

array[high] = array[key] + (array[key] = array[high]) * 0; key = high; } high--; }

if (key > low) { if (array[key] < array[low]) {

array[low] = array[key] + (array[key] = array[low]) * 0; key = low; } low++; } }

quickSort(lowest, key - 1); quickSort(key + 1, highest); }

/**

* @param args */

public static void main(String[] args) {

TestQuickSort test = new TestQuickSort(); int[] array = {6,5,2,9,7,4,0}; test.array = array;

test.quickSort(0, array.length - 1); int length = test.array.length; for (int i = 0; i < length; i++) { System.out.println(test.array[i]);

} } }

不要用冒泡排序法很慢,选择排序好些,但题意是快速排序算法 快速排序算法的基本思想:

快速排序的基本思想是基于分治策略的。对于输入的子序列ap..ar,如果规模足够小则直接进行排序,否则分三步处理: 分解(Divide):将输入的序列ap..ar划分成两个非空子序列ap..aq和aq+1..ar,使ap..aq中任一元素的值不大于aq+1..ar中任一元素的值。

递归求解(Conquer):通过递归调用快速排序算法分别对ap..aq和aq+1..ar进行排序。

合并(Merge):由于对分解出的两个子序列的排序是就地进行的,所以在ap..aq和aq+1..ar都排好序后不需要执行任何计算ap..ar就已排好序。

这个解决流程是符合分治法的基本步骤的。因此,快速排序法是分治法的经典应用实例之一。

算法Quick_Sort的实现:

Pascal实现:

Procedure Quick_Sort(p,r:TPosition;var L:TList); {快速排序} var

q:TPosition; begin

if L[p..r]足够小 then Sort(p,r,L) {若L[p..r]足够小则直接对L[p..r]排序}

else begin

q:=Partition(p,r,L); {将L[p..r]分解为L[p..q]和L[q+1..r]两部分}

Quick_Sort(p,q,L); {递归排序L[p..q]}

Quick_Sort(q+1,r,L); {递归排序L[q+1..r]} end; end; 3、答案

面向对象的编程使用了派生继承 以及虚函数机制.

一个本来指向基类的对象指针可以指向其派生类的.并访问从基类继承而来的成员变量和函数.

而虚函数是专门为这个特性设计的,这个函数在每个基类的派生类中都是同一个名字,但函数体却并不一定相同,派生类往往为实现自己的功能而修改这个虚函数.这样用一个指针就能够实现对多种不同的派生类的访问, 并实现其派生类的特定功能(代码 ).... 4、答案 用VIEWSTATE stateserver 5、答案

可以控制连接池的连接数量条件好的话 可以用负载平衡 6、答案

一个中型或大型公司往往由地理上分散的部门所组成,这些部门通常需要进行数据共享。针对这些共享数据,可以将其存储在某个站点上,需要的用户都从这个站点上存取。这种方案的优点是数据的一致性容易保证,但其缺点也是很突出的,那就是该站点的负载大、网络负载大,远程用户的数据响应迟缓。数据复制技术可以有效地解决这个问题,它通过将这些共享数据复制到位于不同地点的多个数据库中,从而实现数据的本地访问,减少了网络负荷,并提高了数据访问的性能,而且通过对数据库中的数据

定期同步(通常是每天晚上),从而确保了所有的用户使用同样的、最新的数据。该技术适用于用户数量较大、地理分布较广、而且需要实时地访问相同数据的应用模式。

数据复制的概念及特点

1、数据复制的概念及分类

数据复制,就是将数据库中的数据拷贝到另外一个或多个不同的物理站点上,从而保持源数据库与目标数据库中指定数据的一致性。

按照数据复制的实时性,数据复制可分为同步数据复制和异步数据复制。同步数据复制是指将本地生产数据以完全同步的方式复制到异地,每一本地IO交易均需等待远程复制的完成方予以释放。异步数据复制则是指将本地生产数据以后台同步的方式复制到异地,每一本地IO交易均正常释放,无需等待远程复制的完成。同步复制实时性强,远端数据与本地数据完全同步。但这种方式受带宽影响较大,数据传输距离较短。异步复制不影响本地交易,传输距离长,但其数据比本地数据略有延迟。在异步复制环境中,对于所有应用最关键的就是要确保数据的一致性。

按照复制站点的类型,数据复制可分为多主控站点复制、物化视图复制及混合复制。多主控站点复制也称为对等站点复制,其中每个站点都是主控站点,都需要与其他站点进行信息交流,各站点之间是平等的。物化视图复制包含一个主控站点、一个或多个物化视图站点,

物化视图中的内容可以为目标主对象在某个时间点的全部拷贝或部分拷贝,其中目标主对象既可以是主控站点上的表也可以是物化视图站点上的主物化视图。混合复制包含多个主控站点和多个物化视图站点,是主控站点复制和物化视图复制的结合体,适合于复杂的业务情况。

2、数据复制的特点

数据复制通过在多个站点上建立备份,能够提高数据的安全性,同时也提高了数据的可用性,这是因为如果一个站点出现了问题,用户可以选择其他站点继续进行操作,应用系统还可继续运行,从而数据复制提供了容错保护机制。

然而数据复制最基本的功能是提高数据库的性能。它通过将远程数据库中的数据复制到本地,使得应用能够就近访问数据,从而降低网络传输负载,提高效率。而且在数据复制系统中,可以提

供多个站点之间的负载平衡,让这几个用户使用这个服务器,另外几个用户可以

使用其他的服务器,以避免某些站点负载过重。

物化视图还提供了按子集进行复制,这样各站点就可只复制自己需要的数据,也能减轻网络的传输量。

数据复制的实现方法

在具体的实现之前,首先要做好设计与规划。这就需要细致分析具体的业务情况,设计出一套能够满足业务需要的方案。通常在设计过程中,需要确定出要建立的数据库站点,各站点的类型,需要复制的数据对象,以及同步方式、冲突解决方案等内容。

在设计完成之后,就可具体来实现数据复制,实现主要包括以下几步:

(1)创建复制站点 (2)创建组对象 (3)配置冲突解决方案

下面我们举一个例子来说明各步具体需要完成的工作。在这个例子中我们采用多主控站点复制方式,设有两个主控站点和两个共享数据表。两个主控站点分别为:处理站点(cl.world)和解释站点(js.wo rld);两个数据表为测区( survey)和测线( line)。 STEP1 创建复制站点

(1)首先以SYSTEM身份登陆主站点数据库cl.worldCONNECT system/manager@cl.world

(2)创建用户—复制管理员,并为该用户授权复制管理员负责复制站点的创建和管理,每个复制站点都必须创建复制管理员: CREATE USER repadmin IDENTIFIED BY repadmin; BEGIN

DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA (username => ’repadmin’); END;

(3)为本站点指定传播者

传播者负责将本地最新更新的数据传播到其他站点上: BEGIN

DBMS_DEFER_SYS.REGISTER_PROPAGATOR (username => ’repadmin’); END;

(4)为本站点指定接收者

接收者负责接收其他站点上的传播者传送过来的数据: BEGIN

DBMS_REPCAT_ADMIN.REGISTER_USER_REPGROUP ( username => ’repadmin’, privilege_type => ’receiver’, list_of_gnames => NULL); END;

(5)确定清除时间

为了使传送过来事务队列不致过大,需要将成功加载的事务从事物队列里清除掉,这里设定每小时清除一次。 CONNECT repadmin/repadmin@cl.world BEGIN

DBMS_DEFER_SYS.SCHEDULE_PURGE ( next_date => SYSDATE,

interval => ’SYSDATE + 1/24’, delay_seconds => 0); END;

在建立好站点cl.world后,以同样的方法创建站点js. world。

(6)创建各主控站点之间的调度链接

创建各主控站点之间的调度链接需要先在各主控站点间建立数据库链接,之后为每个数据库链接定义调度时间。

首先,在处理站点上建立与解释站点的数据库链接,这里需要先建立一个公用数据库链接,供其他私有数据库链接来使用。 CONNECT SYSTEM/MANAGER@cl.world

CREATE PUBLIC DATABASE LINK js.world USING ’js.world’; CONNECT repadmin/repadmin@cl.world

CREATE DATABASE LINK js.world CONNECT TO repadmin IDENTIFIED BY repadmin;

同样,在解释站点上建立与处理站点的数据库链接 CONNECT SYSTEM/MANAGER@js.world

CREATE PUBLIC DATABASE LINK cl.world USING ’cl.world’; CONNECT repadmin/repadmin@js.world

CREATE DATABASE LINK cl.world CONNECT TO repadmin IDENTIFIED BY repadmin;

调度链接确定本站点上的事务向其他站点发送的频度,下面的代码为10分钟一次:

CONNECT repadmin/repadmin@cl.world BEGIN

DBMS_DEFER_SYS.SCHEDULE_PUSH ( destination => ’js.world’, interval => ’SYSDATE + (1/144)’,

next_date => SYSDATE, parallelism => 1,

execution_seconds => 1500, delay_seconds => 1200); END;

在解释站点上做相同的工作STEP2 创建主控组在复制环境中,Oracle用组来管理复制对象。通过将相关的复制对象放在一个组里,从而方便对大量数据对象的管理。

这里我们假设用户模式integr ation 在处理站点和解释站点都已存在,而且表测区(survey )和测线(line)也已经创建。 (1)创建主控组对象

CONNECT repadmin/repadmin@cl.world BEGIN

DBMS_REPCAT.CREATE_MASTER_REPGROUP ( gname => ’inte_repg’); END;

(2)向主控组中添加数据对象,将测区表survey加入到组inte_repg中 BEGIN

DBMS_REPCAT.CREATE_MASTER_REPOBJECT ( gname => ’inte_repg’, type => ’TABLE’, oname => ’survey’, sname => ’integration’, use_existing_object => TRUE, copy_rows => FALSE); END;

以同样的方法将测线表line 加入到组inte_repg中

(3)在主控组中添加其他参与复制的站点,数据库之间的同步方式在此指定 BEGIN

DBMS_REPCAT.ADD_MASTER_DATABASE ( gname => ’inte_repg’, master => ’js.world’, use_existing_objects => TRUE, copy_rows => FALSE,

propagation_mode => ’ASYNCHRONOUS’); END;

(4)如果可能出现冲突,则需要配置冲突解决方案。冲突解决方案将在后面介绍。

(5)为每个对象生成复制支持 BEGIN

DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT ( sname => ’integration’, oname => ’survey’, type => ’TABLE’,

min_communication => TRUE); END;

测线表line也一样

(6)重新开始复制 BEGIN

DBMS_REPCAT.RESUME_MASTER_ACTIVITY ( gname => ’inte_repg’); END;

以同样的方式设置解释站点。设置成功后,数据复制过程就宣告完毕,库中的数据就可进行复制。 数据复制中冲突的解决方案

在复制环境中,尽管在数据库和应用程序设计过程中,会尽量避免各站点间冲突的发生,但完全避免冲突的可能性还是比较小的,那么一旦冲突发生,就需要一个按照具体业务规则的冲突解决机制,来使得各站点的数据保持一致。

首先需要分析哪些对象容易出现冲突。通常来说,静态的数据变化少,冲突出现的可能性也小;而有些数据变化非常大,冲突出现的可能性也大。确定了冲突易发的对象后,需要确定怎样解决冲突,比如在各站点之间建立优先次序,在数据不一致时,以某个站点上的为

准;或以某个站点上最新的修改为准。

Oracle提供了多中冲突解决方案,具体包括:针对更新冲突的方案、针对唯一性冲突的方案、针对删除冲突的方案。除了这些方案以外,用户还可以自定义冲突解决方法。每种方案都有自己的适用情况,那么我们需要根据具体的业务来选择合适的冲突解决方案。 结束语

本文详细介绍了分布式系统Oracle中的数据复制技术,在具体应用中,还有许多比较复杂的问题需要解决,比如主控组中如果包含循环依赖的表或自相关的表时如何处理;如何利用模版机制

来创建物化视图站点;如何对数据复制环境进行管理与维护。这些问题需要在实际

应用中逐步探索,深入研究。 7、答案

select a.* from b.b a 8、答案

对于oracle数据库来说,可能出现的问题包括: 1. 回滚区间空间不足 --- 解决方法,增加表空间 2. 数据表空间不足 ---- 增加数据表空间

3. 表空间不足 ---- 增加表空间(oracle数据表有空间) 4. 临时表空间不足 --- 因为计算索引使用临时表空间,增加表空间或者暂时不使用索引,数据导入完毕再重新建立索引 5.另外一些原因,主要是垃圾数据造成的,比如外键匹配,主键冲突,单一索引冲突等。 9、答案

DELETE FROM TABLE_NAME

WHERE ROWID!=(SELECT MAX(ROWID) FROM TABLE_NAME D WHERE TABLE_NAME.COL1=D.COL1 AND TABLE_NAME.COL2=D.COL2); 第三套

1. 简述 private、 protected、 public、 internal 修饰符的访问权限。 答 . private : 私有成员, 在类的内部才可以访问。

protected : 保护成员,该类内部和继承类中可以访问。 public : 公共成员,完全公开,没有访问。 internal: 在同一命名空间内可以访问。

2 .列举ASP.NET 页面之间传递值的几种方式。 答. 1.使用

QueryString, 如....?id=1; response. Redirect().... 2.使用Session变量 3.使用Server.Transfer

3. 一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现。 答:public class MainClass {

public static void Main() {

Console.WriteLine(Foo(30)); }

public static int Foo(int i) {

if (i <= 0) return 0;

else if(i > 0 && i <= 2) return 1;

else return Foo(i -1) + Foo(i - 2); } }

4.C#中的委托是什么?事件是不是一种委托? 答:

委托可以把一个方法作为参数代入另一个方法。 委托可以理解为指向一个函数的引用。 是,是一种特殊的委托

5.override与重载的区别 答 :

override 与重载的区别。重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要

Override 是进行基类中函数的重写。为了适应需要。

6.如果在一个B/S结构的系统中需要传递变量值,但是又不能使用Session、Cookie、Application,您有几种方法进行处理?

答 :

this.Server.Transfer

7.请编程遍历页面上所有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 ; }

}

8.请编程实现一个冒泡排序算法? 答:

int [] array = new int [*] ; int temp = 0 ;

for (int i = 0 ; i < array.Length - 1 ; i++) {

for (int j = i + 1 ; j < array.Length ; j++) {

if (array[j] < array[i]) {

temp = array[i] ; array[i] = array[j] ; array[j] = temp ; } } }

9.描述一下C#中索引器的实现过程,是否只能根据数字进行索引? 答:不是。可以用任意类型。

10.求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+„„+m 答:

int Num = this.TextBox1.Text.ToString() ; int Sum = 0 ;

for (int i = 0 ; i < Num + 1 ; i++) {

if((i%2) == 1) {

Sum += i ; } else {

Sum = Sum - I ; } }

System.Console.WriteLine(Sum.ToString()); System.Console.ReadLine() ;

11.用.net做B/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层? 答:一般为3层

数据访问层,业务层,表示层。 数据访问层对数据库进行增删查改。

业务层一般分为二层,业务表观层实现与表示层的沟通,业务规则层实现用户密码的安全等。

表示层为了与用户交互例如用户添加表单。

优点: 分工明确,条理清晰,易于调试,而且具有可扩展性。 缺点: 增加成本。

12.在下面的例子里

using System; class A {

public A() {

PrintFields(); }

public virtual void PrintFields(){} }

class B:A {

int x=1; int y; public B() {

y=-1; }

public override void PrintFields() {

Console.WriteLine(\"x={0},y={1}\);

}

当使用new B()创建B的实例时,产生什么输出? 答:X=1,Y=0;x= 1 y = -1

13.什么叫应用程序域?

答:应用程序域可以理解为一种轻量级进程。起到安全的作用。占用资源小。

14.CTS、CLS、CLR分别作何解释?

答:CTS:通用语言系统。CLS:通用语言规范。CLR:公共语言运行库。

15.什么是装箱和拆箱?

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

16.什么是受管制的代码?

答:unsafe:非托管代码。不经过CLR运行。

17.什么是强类型系统? 答:RTTI:类型识别系统。

18.net中读写数据库需要用到那些类?他们的作用? 答:DataSet:数据存储器。

DataCommand:执行语句命令。

DataAdapter:数据的集合,用语填充。

19.ASP.net的身份验证方式有哪些?分别是什么原理?

答:10。Windwos(默认)用IIS...From(窗体)用帐户....Passport(密钥)

20.什么是Code-Behind技术? 答:代码后植。

21.在.net中,配件的意思是?

答:程序集。(中间语言,源数据,资源,装配清单)

22.常用的调用WebService的方法有哪些? 答:1.使用WSDL.exe命令行工具。

2.使用VS.NET中的Add Web Reference菜单选项

23..net Remoting 的工作原理是什么? 答:服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置。

24.在C#中,string str = null 与 string str = “” 请尽量使用文字或图象说明其中的区别。

答:string str = null 是不给他分配内存空间,而

string str = \"\" 给它分配长度为空字符串的内存空间。

25.请详述在dotnet中类(class)与结构(struct)的异同?

答:Class可以被实例化,属于引用类型,是分配在内存的堆上的,Struct属于值类型,是分配在内存的栈上的.

26.根据委托(delegate)的知识,请完成以下用户控件中代码片段的填写: namespace test {

public delegate void OnDBOperate();

public class UserControlBase : System.Windows.Forms.UserControl {

public event OnDBOperate OnNew;

privatevoidtoolBar_ButtonClick(objectsender,System.Windows.Forms.ToolBarButtonClickEventArgs e) {

if(e.Button.Equals(BtnNew)) {

//请在以下补齐代码用来调用OnDBOperate委托签名的OnNew事件。 } } }

答:if( OnNew != null ) OnNew( this, e );

27.分析以下代码,完成填空

string strTmp = \"abcdefg某某某\";

int i= System.Text.Encoding.Default.GetBytes(strTmp).Length; int j= strTmp.Length; 以上代码执行完后,i= j= 答:i=13,j=10

28.SQLSERVER服务器中,给定表 table1 中有两个字段 ID、

LastUpdateDate,ID表示更新的事务号, LastUpdateDate表示更新时的服务器时间,请使用一句SQL语句获得最后更新的事务号 答:

Select ID FROM table1 Where LastUpdateDate = (Select MAX(LastUpdateDate) FROM table1)

29.根据线程安全的相关知识,分析以下代码,当调用test方法时i>10时是否会引起死锁?并简要说明理由。 public void test(int i) {

lock(this) {

if (i>10)

{

i--; test(i); } } }

答:不会发生死锁,(但有一点int是按值传递的,所以每次改变的都只是一个副本,因此不会出现死锁。但如果把int换做一个object,那么死锁会发生)

30.简要谈一下您对微软.NET 构架下remoting和webservice两项技术的理解以及实际中的应用。

答:WS主要是可利用HTTP,穿透防火墙。而Remoting可以利用TCP/IP,二进制传送提高效率。

31.公司要求开发一个继承System.Windows.Forms.ListView类的组件,要求达到以下的特殊功能:点击ListView各列列头时,能按照点击列的每行值进行重排视图中的所有行 (排序的方式如DataGrid相似)。根据您的知识,请简要谈一下您的思路

答:根据点击的列头,包该列的ID取出,按照该ID排序后,在给绑定到ListView中。

32.给定以下XML文件,完成算法流程图。 < DriverC >

请画出遍历所有文件名(FileName)的流程图(请使用递归算法)。 答:

void FindFile( Directory d ) {

FileOrFolders = d.GetFileOrFolders();

foreach( FileOrFolder fof in FileOrFolders ) {

if( fof is File ) You Found a file;

else if ( fof is Directory ) FindFile( fof ); }

}

33.写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:ID可能不是连续的。 答:解

1: select top 10 * from A where id not in (select top 30 id from A) 解

2: select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A)

34.面向对象的语言具有________性、_________性、________性 答:封装、继承、多态。

35.能用foreach遍历访问的对象需要实现 ________________接口或声明________________方法的类型。

答:IEnumerable 、 GetEnumerator。

36.GC是什么? 为什么要有GC?

答:GC是垃圾收集器。程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一: System.gc()

Runtime.getRuntime().gc()

37.String s = new String(\"xyz\");创建了几个String Object? 答:两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。

38.abstract class和interface有什么区别? 答:

声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。

接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。

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

答:启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。

40.接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?

答:接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。

41.构造器Constructor是否可被override?

答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。

42.是否可以继承String类?

答:String类是final类故不可以继承。

43.try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? 答:会执行,在return前执行。

44.两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?

答:不对,有相同的hash code。

45.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

答:switch(expr1)中,expr1是一个整数表达式。因此传递

给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。

47.当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?

不能,一个对象的一个synchronized方法只能由一个线程访问。

48.abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 答:都不能。

49.List, Set, Map是否继承自Collection接口? 答:List,Set是Map不是

50.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?

答:Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。

equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。

51.数组有没有length()这个方法? String有没有length()这个方法? 答:数组没有length()这个方法,有length的属性。String有有length()这个方法。

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

答:sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级 (b)正在运行的线程因为其它原因而阻塞。 wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。

53.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正确。

.谈谈final, finally, finalize的区别。 答:

final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此 一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中 不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为 final的方法也同样只能使用,不能重载

finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会 执行,然后控制就会进入 finally 块(如果有的话)。 finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理 工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的 ,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。

55.如何处理几十万条并发数据? 答:用存储过程或事务。取得最大标识的时候同时更新..注意主键不是自增量方式这种方法并发的时候是不会有重复主键的..取得最大标识要有一个存储过程来获取.

56.Session有什么重大BUG,微软提出了什么方法加以解决?

答:是iis中由于有进程回收机制,系统繁忙的话Session会丢失,可以用Sate server或SQL Server数据库的方式存储Session不过这种方式比较慢,而且无法捕获Session的END事件。

57.进程和线程的区别?

答:进程是系统进行资源分配和调度的单位;线程是CPU调度和分派的单位,一个进程可以有多个线程,这些线程共享这个进程的资源。

58.堆和栈的区别? 答:

栈:由编译器自动分配、释放。在函数体中定义的变量通常在栈上。 堆:一般由程序员分配释放。用new、malloc等分配内存函数分配得到的就是在堆上。

59.成员变量和成员函数前加static的作用?

答:它们被称为常成员变量和常成员函数,又称为类成员变量和类成员函数。分别用来反映类的状态。比如类成员变量可以用来统计类实例的数量,类成员函数负责这种统计的动作。

60.ASP。NET与ASP相比,主要有哪些进步?

答:asp解释形,aspx编译型,性能提高,有利于保护源码。

61.产生一个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]; 更多1

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- dfix.cn 版权所有 湘ICP备2024080961号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务