C#面试常问技术问题.docx
- 文档编号:9924761
- 上传时间:2023-05-22
- 格式:DOCX
- 页数:43
- 大小:33.61KB
C#面试常问技术问题.docx
《C#面试常问技术问题.docx》由会员分享,可在线阅读,更多相关《C#面试常问技术问题.docx(43页珍藏版)》请在冰点文库上搜索。
C#面试常问技术问题
1、在C#中,stringstr=null与stringstr=“”请尽量使用文字或图象说明其中的区别。
回答要点:
说明详细的空间分配。
(10分)
答:
stringstr=null是不给他分配内存空间,而stringstr=""给它分配长度为空字符串的内存空间.
2、请详述在dotnet中类(class)与结构(struct)的异同:
(10分)
答:
Class可以被实例化,属于引用类型,是分配在内存的堆上的,Struct属于值类型,是分配在内存的栈上的.
3、根据委托(delegate)的知识,请完成以下用户控件中代码片段的填写:
(10)
namespacetest
{
publicdelegatevoidOnDBOperate();
publicclassUserControlBase:
System.Windows.Forms.UserControl
{
publiceventOnDBOperateOnNew;
privatevoidtoolBar_ButtonClick(objectsender,System.Windows.Forms.ToolBarButtonClickEventArgse)
{
if(e.Button.Equals(BtnNew))
{
//请在以下补齐代码用来调用OnDBOperate委托签名的OnNew事件。
}
}
}
答:
if(OnNew!
=null)
OnNew(this,e);
4、分析以下代码,完成填空(10分)
stringstrTmp="abcdefg某某某";
inti=System.Text.Encoding.Default.GetBytes(strTmp).Length;
intj=strTmp.Length;
以上代码执行完后,i= j=
答:
i=13,j=10
5、SQLSERVER服务器中,给定表table1中有两个字段ID、LastUpdateDate,ID表示更新的事务号,LastUpdateDate表示更新时的服务器时间,请使用一句SQL语句获得最后更新的事务号。
(10)
答:
SELECTID
FROMtable1
WHERELastUpdateDate=(SELECTMAX(LastUpdateDate)FROMtable1)
6、根据线程安全的相关知识,分析以下代码,当调用test方法时i>10时是否会引起死锁?
并简要说明理由。
(10分)
publicvoidtest(inti)
{
lock(this)
{
if(i>10)
{
i--;
test(i);
}
}
}
答:
不会发生死锁,(但有一点int是按值传递的,所以每次改变的都只是一个副本,因此不会出现死锁。
但如果把int换做一个object,那么死锁会发生)
7、分析以下代码。
(10)
publicstaticvoidtest(string ConnectString)
{
System.Data.OleDb.OleDbConnectionconn=newSystem.Data.OleDb.OleDbConnection();
conn.ConnectionString=ConnectString;
try
{
conn.Open();
…….
}catch(ExceptionEx)
{
MessageBox.Show(Ex.ToString());
}finally
{
if(!
conn.State.Equals(ConnectionState.Closed))
conn.Close();
}
请问
1)以上代码可以正确使用连接池吗?
答:
回答:
如果传入的connectionString是一模一样的话,可以正确使用连接池。
不过一模一样的意思是,连字符的空格数,顺序完全一致。
2)以上代码所使用的异常处理方法,是否所有在test方法内的异常都可以被捕捉并显示出来?
答:
只可以捕捉数据库连接中的异常吧.(finally中,catch中,如果有别的可能引发异常的操作,也应该用try,catch。
所以理论上并非所有异常都会被捕捉。
)
8、简要谈一下您对微软.NET构架下remoting和webservice两项技术的理解以及实际中的应用。
(10)
答:
WS主要是可利用HTTP,穿透防火墙。
而Remoting可以利用TCP/IP,二进制传送提高效率。
9、公司要求开发一个继承System.Windows.Forms.ListView类的组件,要求达到以下的特殊功能:
点击ListView各列列头时,能按照点击列的每行值进行重排视图中的所有行(排序的方式如DataGrid相似)。
根据您的知识,请简要谈一下您的思路:
(10)
答:
根据点击的列头,包该列的ID取出,按照该ID排序后,在给绑定到ListView中
10、给定以下XML文件,完成算法流程图。
(10)
请画出遍历所有文件名(FileName)的流程图(请使用递归算法)。
答:
voidFindFile(Directoryd)
{
FileOrFolders=d.GetFileOrFolders();
foreach(FileOrFolderfofinFileOrFolders)
{
if(fofisFile)
YouFoundafile;
elseif(fofisDirectory)
FindFile(fof);
}
}
简单的说就是从根节点开始遍历找子节点,在从找到的子节点找它的子节点,一层层下去
一、Application对象
Application对象是个应用程序级的对象,用来在所有用户间共享信息,并可以在Web应用程序运行期间持久地保持数据。
Application的属性:
Application对象没有内置的属性,但是我们可以自行创建其属性。
<%Application(“属性名”)=值%>
大部分Application变量都 存放在Contents集合中,当创建一个新的Application变量时,其实就是在Contents集合中添加了一项。
下面两个脚本是等效的:
<%Application(“greeting”)=”hello!
”%>或<%Application.contents(“greeting”)=”hello!
”由于Application变量存在集合里,所以
如果想要全部显示,可以使用ForEach循环。
<%
ForEachitemINApplication.Contents
Response.write(“
”&item&Application.Contents(item))
next
%>
Application的方法:
Application的方法只有两个方法:
一个是Lock,另一个是Unlock。
其中Lock方法用于保证同一时刻只能一个用户对Application操作。
Unlock则用于取消Lock方法的限制。
如:
<%
Application.Lock
Application(“visitor_num”)=Application(“visitor_num”)+1
Application.Unlock
%>
Application的事件:
1、Application_OnStart()
当事件应用程序启动时触发。
2、Application_OnEnd()
此事件应用程序结束时触发。
这两个事件过程都是必须定义在Global.asp文件中,一般把连接数据的函数定义在这两个事件,然后放在Global.asp中。
例如:
SubApplication_OnStart
Application(“tt18_ConnectionString”)=“driver={SQL
Server};server=jeff;uid=sa;pwd=;database=test”
EndSub
一个数组能够被定义成Application对象,不过这个数组只能作为一个对象保存,而不能用Application(0)取出其值。
可以定义一个临时数
组实现这种功能。
如:
<%
dimArray()
Array=Application(“array”)
fori=0toubound(array)
Response.writeArray(i)
nexti
%>
同样要修改这个Application对象也可以定义一个临时数组,把Application对象赋给数组,然后修改这个数组的元素,最后把数组赋回
Application对象。
如:
<%
dimArray()
Array=Application(“array”)
Array(0)=”jeff”
Array
(1)=”zhu”
Application.lock
Application(“array”)=Array
Application.unlock
%>
二、ObjectContext对象
该对象用于控制ActiveServerPages的事务处理。
事务处理由MicrosoftTransactionServer(MTS)管理。
事件
ObjectContext.OnTransactionAbort
由放弃的事务处理事件激发,在脚本完成处理后发生。
ObjectContext.OnTransactionCommit
由成功的事务处理事件激发,在脚本完成处理后发生。
方法
ObjectContext.SetAbort
显式的放弃一次事务处理。
ObjectContext.SetComplete
覆盖前面任何调用ObjectContext.SetAbort方法的调用。
三、Request对象
Request对象用于接受所有从浏览器发往你的服务器的请求内的所有信息。
集合
Request.ClientCertificate(key[SubField])
所有客户证书的信息的集合。
对于Key,该集合具有如下的关键字:
Subject
证书的主题。
包含所有关于证书收据的信息。
能和所有的子域后缀一起使用。
Issuer
证书的发行人。
包含所有关于证书验证的信息。
除了CN外,能和所有的子域后缀一起使用。
VadidFrom
证书发行的日期。
使用VBscript格式。
ValidUntil
该证书不在有效的时间。
SerialNumber
包含该证书的序列号。
Certificate
包含整个证书内容的二进制流,使用ASN.1格式。
对于SubField,Subject和Issuer关键字可以具有如下的子域后缀:
(比如:
SubjectOU或IssuerL)
C
起源国家。
O
公司或组织名称。
OU
组织单元。
CN
用户的常规名称。
L
局部。
S
州(或省)。
T
个人或公司的标题。
GN
给定名称。
I
初始。
当文件cervbs.inc(VBscript使用)或cerjavas.inc(Jscript使用)通过使用#INCLUDE导向包含在你的ActiveServerPage里时,下面两个标志可
以使用:
ceCertPresent
指明客户证书是否存在,其值为TRUE或FALSE。
ceUnrecongnizedIssure
指明在该链表中的最后的证书的发行者是否未知,其值为TRUE或FALSE。
Request.Cookies(Cookie[(key).Attribute])
Cookie的集合。
允许获得浏览器的Cookie。
Cookie指明返回那一个Cookie。
Key用于从Cookie字典中返回具有某一关键字的Cookie值。
对于
Attribute,你能使用属性HasKeys来确定某一Cookie是否具有子关键字。
HasKeys的值为TRUE或FALSE。
Request.Form(Parameter)[(Index).Count]
填写在HTML的表单中所有的数据的集合。
Parameter是在HTML表单中某一元素的名称。
当某一参数具有不止一个值(比如,当在
MULTIPLE属性时)时,使用Index。
当某一参数具有多值时,Count指明多值个数。
Request.QueryString(Varible)[(Index).Count]
查询字符串的所有值的集合。
Varible是在查询字符串某一变量的名称。
当某一变量具有多于一个值时,使用Index。
当某一参数具有多值时,
Count指明值的个数。
Request.ServerVaribles(ServerEnvironmentVariable)
环境变量的集合。
允许读取HTTP头。
你可以通过使用HTTP_前缀来读取任何头信息。
比如,HTTP_USER_AGENT接受客户代理HTTP头(浏览器类型
)。
除此外,你可以使用下表所示的变量获得任何环境信息。
ALL_HTTP
客户端发送的所有HTTP标头,他的结果都有前缀HTTP_。
ALL_RAW
客户端发送的所有HTTP标头,其结果和客户端发送时一样,没有前缀HTTP_
APPL_MD_PATH
应用程序的元数据库路径。
APPL_PHYSICAL_PATH
与应用程序元数据库路径相应的物理路径。
AUTH_PASSWORD
当使用基本验证模式时,客户在密码对话框中输入的密码。
AUTH_TYPE
这是用户访问受保护的脚本时,服务器用于检验用户的验证方法。
AUTH_USER
代验证的用户名。
CERT_COOKIE
唯一的客户证书ID号。
CERT_FLAG
客户证书标志,如有客户端证书,则bit0为0。
如果客户端证书验证无效,bit1被设置为1。
CERT_ISSUER
用户证书中的发行者字段。
CERT_KEYSIZE
安全套接字层连接关键字的位数,如128。
CERT_SECRETKEYSIZE
服务器验证私人关键字的位数。
如1024。
CERT_SERIALNUMBER
客户证书的序列号字段。
CERT_SERVER_ISSUER
服务器证书的发行者字段
CERT_SERVER_SUBJECT
服务器证书的主题字段。
CERT_SUBJECT
客户端证书的主题字段。
CONTENT_LENGTH
客户端发出内容的长度。
CONTENT_TYPE
客户发送的form内容或HTTPPUT的数据类型。
GATEWAY_INTERFACE
服务器使用的网关界面。
HTTPS
如果请求穿过安全通道(SSL),则返回ON。
如果请求来自非安全通道,则返回OFF。
HTTPS_KEYSIZE
安全套接字层连接关键字的位数,如128。
HTTPS_SECRETKEYSIZE
服务器验证私人关键字的位数。
如1024。
HTTPS_SERVER_ISSUER
服务器证书的发行者字段。
HTTPS_SERVER_SUBJECT
服务器证书的主题字段。
INSTANCE_ID
IIS实例的ID号。
INSTANCE_META_PATH
响应请求的IIS实例的元数据库路径。
LOCAL_ADDR
返回接受请求的服务器地址。
LOGON_USER
用户登录class=wordstyle>WindowsNT的帐号
PATH_INFO
客户端提供的路径信息。
PATH_TRANSLATED
通过由虚拟至物理的映射后得到的路径。
QUERY_STRING
查询字符串内容。
REMOTE_ADDR
发出请求的远程主机的IP地址。
REMOTE_HOST
发出请求的远程主机名称。
REQUEST_METHOD
提出请求的方法。
比如GET、HEAD、POST等等。
script_NAME
执行脚本的名称。
SERVER_NAME
服务器的主机名、DNS地址或IP地址。
SERVER_PORT
接受请求的服务器端口号。
SERVER_PORT_SECURE
如果接受请求的服务器端口为安全端口时,则为1,否则为0。
SERVER_PROTOCOL
服务器使用的协议的名称和版本。
SERVER_SOFTWARE
应答请求并运行网关的服务器软件的名称和版本。
URL
提供URL的基本部分。
方法
Request.BinaryRead(Count)
接收一个HTML表单的未经过处理的内容。
当调用此方法时,Count指明要接收多少字节。
在调用此方法后,Count指明实际上接收到多少个字节
。
属性
Request.TotalBytes
查询体的长度,以字节为单位
四、Response对象
Response对象用于向客户端浏览器发送数据,用户可以使用该对象将服务器的数据以HTML的格式发送到用户端的浏览器,它与Request组成
了一对接收、发送数据的对象,这也是实现动态的基础。
下面介绍它常用的属性和方法。
1、Buffer属性
该属性用于指定页面输出时是否要用到缓冲区,默认值为False。
当它为True时,直到整个ActiveServerPage执行结束后才会将结果输出
到浏览器上。
如:
<%Response.Buffer=True%>
<%
fori=1to500
response.write(i&“
”)
next
%>
这页执行时,整个主页的所有内容会同时显示在浏览器上,这个主页会存在缓存区中直到脚本执行结束。
2、Expires属性
该属性用于设置浏览器缓存页面的时间长度(单位为分),必须在服务器端刷新。
通过如下设置:
<%Response.Expires=0%>
通过在ASP文件中加入这一行代码,要求每次请求是刷新页面,因为Response一收到页面就会过期。
3、Write方法
该方法把数据发送到客户端浏览器,如:
<%Response.write“Hello,world!
”%>
4、Redirect方法
该方法使浏览器可以重新定位到另一个URL上,这样,当客户发出Web请求时,客户端的浏览器类型已经确定,客户被重新定位到相应的页
面。
如:
以上是提交的表单,下面是处理表单的文件formjump.asp:
<%response.buff=true%>
<%
thisurl=”
where=Request.form(“wheretogo”)
SelectCasewhere
case“fun”
response.redirectthisurl&“/fun/default.asp”
case“news”
response.redirectthisurl&“/news/default.asp”
case“sample”
response.redirectthisurl&“/sample/default.asp”
EndSelect
%>
这个例子当用户选择了以后,按”Jump”按钮提交表单,服务器接到申请后调用formjump.asp判断后定位到相应的URL。
不过这里有一点要注
意,HTTP标题已经写入到客户浏览器,任何HTTP标题的修改必须在写入页内容之前,遇到这种问题时,可以如下做:
在文件的开始<@Language=..>后写:
Response.Buffer=True
在结尾定:
Response.Flush
这里Flush是Response的一个方法,它必须是Buffer属性设置为True时才能使用,否则会产生一个运行模式错误。
另外一个Clear方法也是
用于清除被缓存的页面,同样要Buffer属性设置为True时才能使用。
5、End方法
该方法用于告知ActiveServer当遇到该方法时停止处理ASP文件。
如果Response对象的Buffer属性设置为True,这时End方法即把缓存中的
内容发送到客户并清除冲区。
所以要取消所有向客户的输出民,可以先清除缓冲区,然后利用End方法。
如:
<%
Response.buffer=true
Onerrorresumenext
Err.clear
ifErr.number<>0then
Response.Clear
Response.End
endif
%>
五、Server对象:
Server对象提供对服务器上的方法和属性的访问。
其中大多数方法和属性是作为实用程序的功能服务的。
语法
Server.property|method
属性
scriptTimeout:
scriptTimeout属性指定脚本在结束前最大可运行多长时间。
当处理服务器组件时,超时限制将不再生效。
语法 Server
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 面试 技术 问题