C#面试宝典Word文档格式.docx
- 文档编号:21996386
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:14
- 大小:22.31KB
C#面试宝典Word文档格式.docx
《C#面试宝典Word文档格式.docx》由会员分享,可在线阅读,更多相关《C#面试宝典Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
成功返回True;
失败返回False<
/returns>
publicboolDelete(intpersonID)
//ASP_PERSON_DELETE存储过程的名称。
OleDbParameter[]param=this.GetDeleteParam(personID);
try
///调用方式没有变化。
inti=Utility.Tools.CreateOleDbCommandExecuteNonQuery(ASP_PERSON_DELETE,param);
if(i>
0)
returntrue;
catch
returnfalse;
2.再来看看Access数据库里面跟SqlServer有什么区别:
Access数据库中的存储过程是以“查询”的方式存放的,打开你的Access数据库,选中“查询”,选中“新建”,先建立一个简单的查询。
选择表和需要的字段以及需要的参数。
这时,再选中工具栏中的SQL视图,您可以看到如下的语句:
PARAMETERS[PersonID]Short;
DELETE*
FROMPersonInfo
WHERE[PersonInfo].[PersonID]=[PersonID];
如果参数多,请参照:
PARAMETERS[ID]Short,[ParentID]Short,[OrganName]Text(255),[Numbe]Text(255),[OtherName]Text(255),[CodeID]Text(255),[OrganSpec]Text(255),[OrganProperty]Text(255),[OutLayType]Text(255),[ManageDepart]Text(255),[SetUpTime]DateTime,[PassDepart]Text(255),[OrganNUM]Short,[PersonNUM]Short,[PassNumber]Text(255),[Address]Text(255),[JPerson]Text(255),[Tel]Text(255),YearCheckText(255);
最后,保存就可以运行你的代码试试了。
另外,Access里面没有SqlServer的查询器,所以你要在Access中测试你的存储过程会比较麻烦些:
右键选中你的存储过程,选择“打开”即可,但是参数不要输入错误。
Access中写存储过程是闭架麻烦的,毕竟不象SqlServer那样对存储过程的支持好,所以要特别细心而且强烈建议大家经常保存。
.net数据库连接池相关的面试题
如何实现连接池?
确保你每一次的连接使用相同的连接字符串(和连接池相同);
只有连接字符串相同时连接池才会工作。
如果连接字符串不相同,应用程序就不会使用连接池而是创建一个新的连接。
优点
使用连接池的最主要的优点是性能。
创建一个新的数据库连接所耗费的时间主要取决于网络的速度以及应用程序和数据库服务器的(网络)距离,而且这个过程通常是一个很耗时的过程。
而采用数据库连接池后,数据库连接请求可以直接通过连接池满足而不需要为该请求重新连接、认证到数据库服务器,这样就节省了时间。
缺点
数据库连接池中可能存在着多个没有被使用的连接一直连接着数据库(这意味着资源的浪费)。
技巧和提示
1.当你需要数据库连接时才去创建连接池,而不是提前建立。
一旦你使用完连接立即关闭它,不要等到垃圾收集器来处理它。
2.在关闭数据库连接前确保关闭了所有用户定义的事务。
3.不要关闭数据库中所有的连接,至少保证连接池中有一个连接可用。
如果内存和其他资源是你必须首先考虑的问题,可以关闭所有的连接,然后在下一个请求到来时创建连接池。
连接池FAQ
1.何时创建连接池?
当第一个连接请求到来时创建连接池;
连接池的建立由数据库连接的连接字符创来决定。
每一个连接池都与一个不同的连接字符串相关。
当一个新的连接请求到来时如果连接字符串和连接池使用的字符串相同,就从连接池取出一个连接;
如果不相同,就新建一个连接池。
2.何时关闭连接池?
当连接池中的所有连接都已经关闭时关闭连接池。
3.当连接池中的连接都已经用完,而有新的连接请求到来时会发生什么?
当连接池已经达到它的最大连接数目时,有新的连接请求到来时,新的连接请求将放置到连接队列中。
当有连接释放给连接池时,连接池将新释放的连接分配给在队列中排队的连接请求。
你可以调用close和dispose将连接归还给连接池。
4.我应该如何允许连接池?
对于.NET应用程序而言,默认为允许连接池。
(这意味着你可以不必为这件事情做任何的事情)当然,如果你可以在SQLConnection对象的连接字符串中加进Pooling=true;
确保你的应用程序允许连接池的使用。
5.我应该如何禁止连接池?
ADO.NET默认为允许数据库连接池,如果你希望禁止连接池,可以使用如下的方式:
1)使用SQLConnection对象时,往连接字符串加入如下内容:
Pooling=False;
2)使用OLEDBConnection对象时,往连接字符串加入如下内容:
OLEDBServices=-4;
NET里面的datagrid翻页大多是先把数据读全部取到dataset里面,但是遇到10W条数据以上,这样的翻页事件开销会很大,页面执行起来反映很慢,你有什么好方法解决?
在数据量大的时候,有两个解决办法
1.使用存储过程.并且,并非因为存储过程比较快的原因.由于在数据库内部的存储过程,能够实现一些特殊的功能,比如说,可以直接根据当前的排序结果,仅仅取需要的几条数据,如此,无论数据是多少,它仅仅取需要的几条.
2.在实际的操作中,取出的数据,并非你有10万条,它就会把10万条全部取出来,而是受限于服务器的缓存,其实一次一般仅取1000条左右的记录,无论你数据多少,它仅会一次取这么多出来.所以,配合分页控件,再配合.NET提供的加载N条数据的方法,数据量大的情况下,不见得就会慢.
据我测试,真正慢的,是在取数据总共多少条这个步骤上.此操作在数据少时,没有影响,但在百万条记录以上时,求取数据总数,耗时就会大量增加.所以,大数据量条件下,即不应再显示”共几条/当前第几条”这样的信息.
如何提高.NET的性能?
使用异步方式调用Web服务和远程对象
只要有可能就要避免在请求的处理过程中对Web服务和远程对象的同步调用,因为它占用的是的ASP.NET线程池中的工作线程,这将直接影响Web服务器响应其它请求的能力。
2使用适当的Caching策略来提高性能
3判断字符串,不要用”"
比较。
//避免
if(strABC!
=null&
&
strABC!
=”"
)
{}
//推荐
if(!
strABC.IsNullOrEmpty)
4页面优化
5用完马上关闭数据库连接
6尽量使用存储过程,并优化查询语句
7只读数据访问用SqlDataReader,不要使用DataSet
.net的错误处机制方面的几个问题
net的错误处机制是?
采用try->
catch->
finally结构,
为什么不提倡catch(Exception)?
try..catch在出现异常的时候影响性能;
应该捕获更具体得异常,比如IOExeception,OutOfMemoryException等
catch(Exceptione){throwe;
}和catch(Exceptione){throw;
}的区别
将发生的异常对象抛出,另一个只是抛出异常,并没有抛出原异常对象)
error和exception区别:
error表示恢复不是不可能但很困难的情况下的一种严重问题。
比如说内存溢出。
不可能指望程序能处理这样的情况。
exception表示一种设计或实现问题。
也就是说,它表示如果程序运行正常,从不会发生的情况
.NET考题
1、传入某个属性的set方法的隐含参数的名称是什么?
Value
2、如何在C#中实现继承?
:
类名(冒号加类名)
3、C#支持多重继承么?
不支持
4、被protected修饰的属性/方法在何处可以访问?
类内部及继承类中
5、私有成员会被继承么?
会,但是不能被访问。
所以看上去他们似乎是不能被继承的,但实际上确实被继承了。
6、请描述一下访问修饰符protectedinternal.
在同一个Assembly中,他的访问级别和public一样,而跨Assembly访问时,他的访问级别同protected一样。
即protected的范围+internal的范围。
7、C#提供一个默认的无参数构造函数,当我实现了另一个有一个参数的构造函数时候,还想保留这个无参数的构造函数,这样我应该写几个构造函数?
2个,一旦你实现了一个构造函数,C#就不会再提供默认的构造函数了,所以需要手动实现那个无参数构造函数
8、C#中所有对象共同的基类是什么?
System.Object
9、重载和重写有什么区别?
重载是指同名方法,不同的参数,不同的实现
而重写则是覆盖父类中的方法实现
10、在方法定义中,virtual有什么含意?
Virtual标记方法为虚方法,可以在子类中用new来覆盖重写,多用于实现多态
11、可以重写私有的虚方法么?
不可以
12、能够阻止某一个类被其他类继承么?
可以,用封装类
13、能够实现允许某个类被继承,但不允许其中的某个方法被重写么?
可以,标记这个类为public,并标记这个方法为sealed
14、如何区别重载方法?
不同的参数类型,不同的参数个数,不同的参数顺序
15、Const和readonly有什么区别?
const可以用于局部常量,而readonly,实际是类的initonly字段,显然不能是局部的。
16、如何在表中随机取记录数100条?
请写出示例SQL语句。
(数据库指SQLServer,下同)
SELECTTOP100*FROMtable_nameORDERBYNEWID()
17、请列举出几种有效防止SQL注入漏洞的措施?
1、程序中过滤掉“’”“%”“[”“]”等字符
2、使用存储过程传递参数,并在存储过程中不使用sql语句拚接查询条件。
18、删除表中重复的记录(指某两条或多条记录的所有字段值均相同),但需保留1条。
selectdistinct*into#TmpfromtableName
droptabletableName
select*intotableNamefrom#Tmp
droptable#Tmp
19、向有标识(IDENTITY)列字段的表添加记录是否可行,如果可行,应如何操作?
可使用SQL语句说明。
可以,以下语句表示将显式插入的开关打开,写入记录,然后关闭显式插入
SETIDENTITY_INSERTGame_ActivityUserTotalON
insertGame_ActivityUserTotal(id)values
(1)
SETIDENTITY_INSERTGame_ActivityUserTotalOFF
20、假设表DataTableDictTB包含一个字段MaxID(INT),且仅有一条记录。
如何在并发操作情况下,修改MaxID字段加一,并取出更新后的MaxID数值,同时要求读取出来的结果不重复?
参考答案1:
DECLARE@MaxIDINT
UPDATE
DataTableDictTB
SET
MaxID=MaxID+1,
@MaxID=MaxID+1
参考答案2:
BEGINTRAN
BEGIN
MaxID=MaxID+1
SELECT@MaxID=MaxIDFROMDataTableDictTB
END
21、页面A.aspx的内容如下:
<
script>
Window.open(“B.aspx?
id=1&
CodeName=通讯应用类”)
/script>
页面B.aspx的内容如下:
%=System.Web.HttpContext.Current.Request.QueryString["
CodeName"
].ToString()%>
为何页面B.aspx输出的CodeName内容是乱码,如何解决?
页面A.aspx的内容修改如下:
CodeName=”+escap(‘通讯应用类’))
/script>
22、禁用aspx页面的ViewState会导致哪些功能不可用?
1、页面中的事件驱动失效
2、用户提交的信息将在提交后的不再保存显示
3、页面中的ViewState信息不再存在,这样达到页面瘦身进而提供页面显示性能
23、使用A开发的网站有哪几种sessionState存储方式,分别各是什么?
1、进程内(InProcess)存储方式
2、进程外(SessionStateService)存储方式
3、数据库(SQLServer)存储方式
24、使用哪些方式的弹出页面会被大部分页面拦截工具所拦截,相反哪些又不会被拦截?
1、会被拦截的方式:
window.open
2、不会被拦截的方式:
a>
、window.showModalDialog
25、请简要的谈谈你对Ajax技术的认识。
XMLHttp是ajax的最常用传输方式
26、对于长时间装载的ASP.NET页面如何在客户端浏览器中显示进度(仅模拟,不要求精确显示)?
1、可以在到达目的页面之前,先浏览带有显示进度条的页面,再停顿几秒后到达目的页面
2、如在按钮事件中加入如下代码:
Response.Write(“<
divid=’mydiv’>
”);
Response.Write(“_”);
/div>
mydiv.innerText=”;
scriptlanguage=javascript>
;
Response.Write(“vardots=0;
vardotmax=10;
functionShowWait()”);
Response.Write(“{varoutput;
output=‘正在装载页面’;
dots++;
if(dots>
=dotmax)dots=1;
Response.Write(“for(varx=0;
x<
dots;
x++){output+=‘·
’;
}mydiv.innerText=output;
}”);
Response.Write(“functionStartShowWait(){mydiv.style.visibility=‘visible’;
“);
Response.Write(“window.setInterval(‘ShowWait()’,1000);
Response.Write(“functionHideWait(){mydiv.style.visibility=‘hidden’;
Response.Write(“window.clearInterval();
Response.Write(“StartShowWait();
Response.Flush();
Thread.Sleep(10000);
27、自定义page基类时导致你在Vs.Net中无法所见即所得的编辑Aspx页面,打开页面时将抛出以下错误,你只能看到Html代码界面,请问如何解决?
1、出现该错误后将该工程重新编译通过后,再次打开aspx页面将不会再出现该错误
2、最好将访问HttpContext的代码放到OnInit中,如下:
protectedoverridevoidOnInit(EventArgse)
base.OnInit(e);
HttpCookieCollectioncookies=HttpContext.Current.Request.Cookies;
3、如果你确实需要在构造器中进行某些Field的初始化等工作,这时又需要使用Request等内容,那么就需要先判断HttpContext是否为Null。
如下:
publicclassBasePage:
Page
publicBasePage()
if(HttpContext.Current!
=null)
28、如何在B/S结构的邮件系统中防止邮件的附件被盗链,请提供解决方案的思路?
1、附件的下载使用文件流的方式输出,而不能采用虚拟目录的方式下载
2、用HttpHandler控制对特定文件的请求和响应,对HTTP请求中Head信息的Referrer参数进行检查,以判断是否从正确的入口或链接请求该资源。
29、如何在DataGrid的日期类型的数据列进行格式化显示,如格式化显示为“2007-01-03”?
日期类型的数据列如下:
asp:
DataGridID=”dtgCusts”Runat=”server”AutoGenerateColumns=”False”>
Columns>
asp:
BoundColumnDataField=”CreateDate”/>
/Columns>
/asp:
DataGrid>
1、使用DataGrid的ItemDataBound事件进行数据格式化
2、如下
BoundColumnDataField=”CreateDate”DataFormatString=”{0:
yyyy-MM-dd}”/>
/Columns>
/asp:
30、如何在多个站点之间实现单点登录(SSO),请提供解决方案的思路?
1、如果多个网站是使用同一个顶级域名,则可以使用Cookies方式
2、如果多个网站是使用同一个顶级域名,且都是使用ASP.NET开发的网站,则可以使用表单认证的方式
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 面试 宝典