C#面試題大全(2)
63.簡要談您對微軟.NET 構(gòu)架下remoting和webservice兩項(xiàng)技術(shù)的理解以及實(shí)際中的應(yīng)用。
答:WS主要是可利用HTTP,穿透防火墻。而Remoting可以利用TCP/IP,二進(jìn)制傳送提高效率。
remoting是.net中用來跨越machine,process, appdomain進(jìn)行方法調(diào)用的技術(shù),對于三成結(jié)構(gòu)的程序,就可以使用remoting技術(shù)來構(gòu)建.它是分布應(yīng)用的基礎(chǔ)技術(shù).相當(dāng)于以前的DCOM。
Web Service是一種構(gòu)建應(yīng)用程序的普通模型,并能在所有支持internet網(wǎng)通訊的操作系統(tǒng)上實(shí)施。Web Service令基于組件的開發(fā)和web的結(jié)合達(dá)到最佳,基于組件的對象模型。
64.公司要求開發(fā)一個繼承System.Windows.Forms.ListView類的組件,要求達(dá)到以下的特殊功能:點(diǎn)擊ListView各列列頭時,能按照點(diǎn)擊列的每行值進(jìn)行重排視圖中的所有行 (排序的方式如DataGrid相似)。根據(jù)您的知識,請簡要談一下您的思路
答:根據(jù)點(diǎn)擊的列頭,包該列的ID取出,按照該ID排序后,在給綁定到ListView中。
65.給定以下XML文件,完成算法流程圖。
< DriverC >
請畫出遍歷所有文件名(FileName)的流程圖(請使用遞歸算法)。
答:voidFindFile( 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 );
}
}
66.String s = new String("xyz");創(chuàng)建了幾個String Object?
答:兩個對象,一個是“xyx”,一個是指向“xyx”的引用對像s。
67.abstract class和interface有什么區(qū)別?
答:聲明方法的存在而不去實(shí)現(xiàn)它的類被叫做抽像類(abstract class),它用于要創(chuàng)建一個體現(xiàn)某些基本行為的類,并為該類聲明方法,但不能在該類中實(shí)現(xiàn)該類的情況。不能創(chuàng)建abstract 類的實(shí)例。然而可以創(chuàng)建一個變量,其類型是一個抽像類,并讓它指向具體子類的一個實(shí)例。不能有抽像構(gòu)造函數(shù)或抽像靜態(tài)方法。Abstract 類的子類為它們父類中的所有抽像方法提供實(shí)現(xiàn),否則它們也是抽像類為。取而代之,在子類中實(shí)現(xiàn)該方法。知道其行為的其它類可以在類中實(shí)現(xiàn)這些方法。
接口(interface)是抽像類的變體。在接口中,所有方法都是抽像的。多繼承性可通過實(shí)現(xiàn)這樣的接口而獲得。接口中的所有方法都是抽像的,沒有一個有程序體。接口只可以定義static final成員變量。接口的實(shí)現(xiàn)與子類相似,除了該實(shí)現(xiàn)類不能從接口定義中繼承行為。當(dāng)類實(shí)現(xiàn)特殊接口時,它定義(即將程序體給予)所有這種接口的方法。然后,它可以在實(shí)現(xiàn)了該接口的類的任何對像上調(diào)用接口的方法。由于有抽像類,它允許使用接口名作為引用變量的類型。通常的動態(tài)聯(lián)編將生效。引用可以轉(zhuǎn)換到接口類型或從接口類型轉(zhuǎn)換,instanceof 運(yùn)算符可以用來決定某對象的類是否實(shí)現(xiàn)了接口。
68.啟動一個線程是用run()還是start()?
答:啟動一個線程是調(diào)用start()方法,使線程所代表的虛擬處理機(jī)處于可運(yùn)行狀態(tài),這意味著它可以由JVM調(diào)度并執(zhí)行。這并不意味著線程就會立即運(yùn)行。
run()方法可以產(chǎn)生必須退出的標(biāo)志來停止一個線程。
69.兩個對像值相同(x.equals(y)== true),但卻可有不同的hashcode,這句話對不對?
答:不對,有相同的hashcode。
70.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
答:switch(expr1)中,expr1是一個整型,字符或字符串,因此可以作用在byte和long上,也可以作用在string上。
71.當(dāng)一個線程進(jìn)入一個對象的一個synchronized方法后,其它線程是否可進(jìn)入此對象的其它方法?
答:不能,一個對象的一個synchronized方法只能由一個線程訪問。
72.abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized?
答:都不能。
73.List, Set, Map是否繼承自Collection接口?
答:List,Set是Map不是
74.Set里的元素是不能重復(fù)的,那么用什么方法來區(qū)分重復(fù)與否呢? 是用==還是equals()? 它們有何區(qū)別?
答:Set里的元素是不能重復(fù)的,那么用iterator()方法來區(qū)分重復(fù)與否。equals()是判讀兩個Set是否相等。
equals()和==方法決定引用值是否指向同一對像equals()在類中被覆蓋,為的是當(dāng)兩個分離的對象的內(nèi)容和類型相配的話,返回真值。
75.sleep() 和 wait() 有什么區(qū)別?
答:sleep()方法是將當(dāng)前線程掛起指定的時間。
wait()釋放對象上的鎖并阻塞當(dāng)前線程,直到它重新獲取該鎖。
76.short s1 = 1; s1 = s1 + 1;有什么錯? short s1 = 1; s1 += 1;有什么錯?
答:short s1 =1; s1 = s1 + 1;有錯,
s1是short型,s1+1是int型,不能顯式轉(zhuǎn)化為short型。可修改為s1=(short)(s1 + 1) 。short s1 = 1;s1 += 1正確。
77.談?wù)刦inal,finally, finalize的區(qū)別。
答:final-修飾符(關(guān)鍵字)如果一個類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個類不能既被聲明為 abstract的,又被聲明為final的。將變量或方法聲明為final,可以保證它們在使用中 不被改變。被聲明為final的變量必須在聲明時給定初值,而在以后的引用中只能讀取,不可修改。被聲明為 final的方法也同樣只能使用,不能重載
finally-再異常處理時提供 finally 塊來執(zhí)行任何清除操作。如果拋出一個異常,那么相匹配的 catch 子句就會執(zhí)行,然后控制就會進(jìn)入 finally 塊(如果有的話)。
finalize-方法名。Java 技術(shù)允許使用finalize() 方法在垃圾收集器將對像從內(nèi)存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調(diào)用的。它是在 Object 類中定義的 ,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統(tǒng)資源或者執(zhí)行其他清理工作。finalize() 方法是在垃圾收集器刪除對像之前對這個對象調(diào)用的。
78.如何處理幾十萬條并發(fā)數(shù)據(jù)?
答:用存儲過程或事務(wù)。取得最大標(biāo)識的時候同時更新。注意主鍵不是自增量方式這種方法并發(fā)的時候是不會有重復(fù)主鍵的。取得最大標(biāo)識要有一個存儲過程來獲取.
79.Session有什么重大BUG,微軟提出了什么方法加以解決?
答:是iis中由于有進(jìn)程回收機(jī)制,系統(tǒng)繁忙的話Session會丟失,可以用Sate server或SQL Server數(shù)據(jù)庫的方式存儲Session不過這種方式比較慢,而且無法捕獲Session的END事件。
80.成員變量和成員函數(shù)前加static的作用?
答:它們被稱為常成員變量和常成員函數(shù),又稱為類成員變量和類成員函數(shù)。分別用來反映類的狀態(tài)。比如類成員變量可以用來統(tǒng)計(jì)類實(shí)例的數(shù)量,類成員函數(shù)負(fù)責(zé)這種統(tǒng)計(jì)的動作。
81.請說明在.net中常用的幾種頁面間傳遞參數(shù)的方法,并說出他們的優(yōu)缺點(diǎn)。
答:session(viewstate)簡單,但易丟失
application 全局
cookie 簡單,但可能不支持,可能被偽造
input type="hidden" 簡單,可能被偽造
url參數(shù)簡單,顯示于地址欄,長度有限
數(shù)據(jù)庫穩(wěn)定,安全,但性能相對弱
82.請指出GAC的含義?
答:全局程序集緩存。
83.向服務(wù)器發(fā)送請求有幾種方式?
答:get,post。get一般為鏈接方式,post一般為按鈕方式。
84.軟件開發(fā)過程一般有幾個階段?每個階段的作用?
答:需求分析,架構(gòu)設(shè)計(jì),代碼編寫,QA,部署
85.在c#中using和new這兩個關(guān)鍵字有什么意義,請寫出你所知道的意義?using 指令 和語句 new 創(chuàng)建實(shí)例 new 隱藏基類中方法。
答:using 引入名稱空間或者使用非托管資源
new 新建實(shí)例或者隱藏父類方法
86.需要實(shí)現(xiàn)對一個字符串的處理,首先將該字符串首尾的空格去掉,如果字符串中間還有連續(xù)空格的話,僅保留一個空格,即允許字符串中間有多個空格,但連續(xù)的空格數(shù)不可超過一個.
答:string inputStr=" xx xx ";
inputStr = Regex.Replace(inputStr.Trim(),"*"," ");
87.什么叫做SQL注入,如何防止?請舉例說明。
答:利用sql語言漏洞獲得合法身份登陸系統(tǒng)。如身份驗(yàn)證的程序設(shè)計(jì)成:
SqlCommand com=new SqlCommand("Select* from users where username='"+t_name.text+"' andpwd='"+t_pwd.text+"'");
object obj=com.ExcuteScale();
if(obj!=null)
{
//通過驗(yàn)證
}
這段代碼容易被sql注入。如用戶在t_name中隨便輸入,在t_pwd中輸入1' and 1='1 就可以進(jìn)入系統(tǒng)了。
88.什么是反射?
答:動態(tài)獲取程序集信息
89.用Singleton如何寫設(shè)計(jì)模式
答:static屬性里面new ,構(gòu)造函數(shù)private
90.什么是ApplicationPool?
答:Web應(yīng)用,類似Thread Pool,提高并發(fā)性能。
91.什么是虛函數(shù)?什么是抽像函數(shù)?
答:虛函數(shù):可由子類繼承并重寫的函數(shù)。
抽像函數(shù):規(guī)定其非虛子類必須實(shí)現(xiàn)的函數(shù),必須被重寫。
92.什么是XML?
答:XML即可擴(kuò)展標(biāo)記語言。eXtensible Markup Language.標(biāo)記是指計(jì)算機(jī)所能理解的信息符號,通過此種標(biāo)記,計(jì)算機(jī)之間可以處理包含各種信息的文章等。如何定義這些標(biāo)記,即可以選擇國際通用的標(biāo)記語言,比如HTML,也可以使用象XML這樣由相關(guān)人士自由決定的標(biāo)記語言,這就是語言的可擴(kuò)展性。XML是從SGML中簡化修改出來的。它主要用到的有XML、XSL和XPath等。
94.什么是ASP.net中的用戶控件?
答:用戶控件一般用在內(nèi)容多為靜態(tài),或者少許會改變的情況下.用的比較大.類似ASP中的include.但是功能要強(qiáng)大的多。
95.列舉一下你所了解的XML技術(shù)及其應(yīng)用
答:xml用于配置,用于保存靜態(tài)數(shù)據(jù)類型.接觸XML最多的是web Services和config
96.什么是code-Behind技術(shù)。
答:aspx,resx和cs三個后綴的文件,這個就是代碼分離.實(shí)現(xiàn)了HTML代碼和服務(wù)器代碼分離.方便代碼編寫和整理.
97.C#中 property 與 attribute的區(qū)別,他們各有什么用處,這種機(jī)制的好處在哪里?
答:一個是屬性,用于存取類的字段,一個是特性,用來標(biāo)識類,方法等的附加性質(zhì)
98.XML 與 HTML 的主要區(qū)別
答:1. XML是區(qū)分大小寫字母的,HTML不區(qū)分。
2. 在HTML中,如果上下文清楚地顯示出段落或者列表鍵在何處結(jié)尾,那么你可以省略
或者之類的結(jié)束 標(biāo)記。在XML中,絕對不能省略掉結(jié)束標(biāo)記。
3. 在XML中,擁有單個標(biāo)記而沒有匹配的結(jié)束標(biāo)記的元素必須用一個 / 字符作為結(jié)尾。這樣分析器就知道不用查找結(jié)束標(biāo)記了。
4. 在XML中,屬性值必須分裝在引號中。在HTML中,引號是可用可不用的。
5. 在HTML中,可以擁有不帶值的屬性名。在XML中,所有的屬性都必須帶有相應(yīng)的值。
99.類成員有_____種可訪問形式?
答:this.; newClass().Method;
100.在Asp.net中所有的自定義用戶控件都必須繼承自________?
答:Control。
101.在.Net中所有可序列化的類都被標(biāo)記為_____?
答:[serializable]
102.在.Net托管代碼中我們不用擔(dān)心內(nèi)存漏洞,這是因?yàn)橛辛薩_____?
答:GC。
103.在.Net中,類System.Web.UI.Page 可以被繼承么?
答:可以。
104..net的錯誤處理機(jī)制是什么?
答:.net錯誤處理機(jī)制采用try->catch->finally結(jié)構(gòu),發(fā)生錯誤時,層層上拋,直到找到匹配的Catch為止。
105.利用operator聲明且僅聲明了==,有什么錯誤么?
答:要同時修改Equale和GetHash() ? 重載了"==" 就必須重載 "!="
106.某一密碼僅使用K、L、M、N、O共5個字母,密碼中的單詞從左向右排列,密碼單詞必須遵循如下規(guī)則:
(1) 密碼單詞的最小長度是兩個字母,可以相同,也可以不同
(2) K不可能是單詞的第一個字母
(3) 如果L出現(xiàn),則出現(xiàn)次數(shù)不止一次
(4) M不能使最后一個也不能是倒數(shù)第二個字母
(5) K出現(xiàn),則N就一定出現(xiàn)
(6) O如果是最后一個字母,則L一定出現(xiàn)
問題一:下列哪一個字母可以放在LO中的O后面,形成一個3個字母的密碼單詞?
A) K B)L C) M D) N
答案:B
問題二:如果能得到的字母是K、L、M,那么能夠形成的兩個字母長的密碼單詞的總數(shù)是多少?
A)1個 B)3個 C)6個 D)9個
答案:A
問題三:下列哪一個是單詞密碼?
A) KLLN B) LOML C) MLLO D)NMKO
答案:C
107.C#中 property 與 attribute的區(qū)別,他們各有什么用處,這種機(jī)制的好處在哪里?
答:attribute:自定義屬性的基類;property :類中的屬性
108.C#可否對內(nèi)存進(jìn)行直接的操作?
答:在.net下,.net引用了垃圾回收(GC)功能,它替代了程序員不過在C#中,不能直接實(shí)現(xiàn)Finalize方法,而是在析構(gòu)函數(shù)中調(diào)用基類的Finalize()方法
109.ADO.NET相對于ADO等主要有什么改進(jìn)?
答:1:ado.net不依賴于ole db提供程序,而是使用.net托管提供的程序,
2:不使用com
3:不在支持動態(tài)游標(biāo)和服務(wù)器端游
4:,可以斷開connection而保留當(dāng)前數(shù)據(jù)集可用
5:強(qiáng)類型轉(zhuǎn)換
6:xml支持
110.大概描述一下ASP.NET服務(wù)器控件的生命周期
答:初始化 加載視圖狀態(tài)處理回發(fā)數(shù)據(jù) 加載 發(fā)送回發(fā)更改通知 處理回發(fā)事件 預(yù)呈現(xiàn) 保存狀態(tài) 呈現(xiàn) 處置 卸載
111.Anonymous Inner Class (匿名內(nèi)部類) 是否可以extends(繼承)其它類,是否可以implements(實(shí)現(xiàn))interface(接口)?
答:不能,可以實(shí)現(xiàn)接口
112.Static Nested Class 和 Inner Class的不同,說得越多越好
答:StaticNested Class是被聲明為靜態(tài)(static)的內(nèi)部類,它可以不依賴于外部類實(shí)例被實(shí)例化。而通常的內(nèi)部類需要在外部類實(shí)例化后才能實(shí)例化。
113.&和&&的區(qū)別
答:&是位運(yùn)算符,表示按位與運(yùn)算,&&是邏輯運(yùn)算符,表示邏輯與(and).
114. 和 有什么區(qū)別?
答:表示綁定的數(shù)據(jù)源,是服務(wù)器端代碼塊
115.你覺得ASP.NET 2.0(VS2005)和你以前使用的開發(fā)工具(.Net 1.0或其他)有什么最大的區(qū)別?你在以前的平臺上使用的哪些開發(fā)思想(pattern/ architecture)可以移植到ASP.NET2.0上 (或者已經(jīng)內(nèi)嵌在ASP.NET 2.0中)
答:1、ASP.NET2.0把一些代碼進(jìn)行了封裝打包,所以相比1.0相同功能減少了很多代碼。
2、同時支持代碼分離和頁面嵌入服務(wù)器端代碼兩種模式,以前1.0版本,.NET提示幫助只有在分離的代碼文件,無 法 在頁面嵌入服務(wù)器端代碼獲得幫助提示。
3、代碼和設(shè)計(jì)界面切換的時候,2.0支持光標(biāo)定位.這個我比較喜歡。
4、在綁定數(shù)據(jù),做表的分頁.UPDATE,DELETE,等操作都可以可視化操作,方便了初學(xué)者。
5、在ASP.NET中增加了40多個新的控件,減少了工作量。
116.重載與覆蓋的區(qū)別?
答:1、方法的覆蓋是子類和父類之間的關(guān)系,是垂直關(guān)系;方法的重載是同一個類中方法之間的關(guān)系,是水平關(guān)系。
2、覆蓋只能由一個方法,或只能由一對方法產(chǎn)生關(guān)系;方法的重載是多個方法之間的關(guān)系。
3、覆蓋要求參數(shù)列表相同;重載要求參數(shù)列表不同。
4、覆蓋關(guān)系中,調(diào)用那個方法體,是根據(jù)對象的類型(對像對應(yīng)存儲空間類型)來決定;重載關(guān)系,是根據(jù)調(diào)用時的實(shí)參表與形參表來選擇方法體的。
117.什么是WSE?目前最新的版本是多少?
答:WSE (WebService Extension)包來提供最新的WEB服務(wù)安全保證,最新版本2.0。
118.a=10,b=15,在不用第三方變量的前提下,把a(bǔ),b的值互換
答:a=a+b;b=a-b;a=a-b;
119.還有變態(tài)要求,需要代碼最短呢。有兩個結(jié)果:
1) a^=b^(b^=a^b); // 13個字節(jié)
2) a=b+(b=a)*0; // 11個字節(jié)
120.請簡述面向?qū)ο蟮亩鄳B(tài)的特性及意義!
答:面向?qū)ο蟮木幊淌褂昧伺缮^承以及虛函數(shù)機(jī)制.一個本來指向基類的對象指針可以指向其派生類的.并訪問從基類繼承而來的成員變量和函數(shù).而虛函數(shù)是專門為這個特性設(shè)計(jì)的,這個函數(shù)在每個基類的派生類中都是同一個名字,但函數(shù)體卻并不一定相同,派生類往往為實(shí)現(xiàn)自己的功能而修改這個虛函數(shù).這樣用一個指針就能夠?qū)崿F(xiàn)對多種不同的派生類的訪問, 并實(shí)現(xiàn)其派生類的特定功能(代碼 )
121.session喜歡丟值且占內(nèi)存,Cookis不安全,請問用什么辦法代替這兩種原始的方法
答:用ViewState,stateserver
122.對數(shù)據(jù)的并發(fā)采用什么辦法進(jìn)行處理較好。
答:可以控制連接池的連接數(shù)量,條件好的話可以用負(fù)載平衡
123.ADO.NET處理數(shù)據(jù)并發(fā)的方法和步驟?
答:開放式并發(fā),沒有用到數(shù)據(jù)庫的鎖,而依靠SQL語句判斷數(shù)據(jù)是否已經(jīng)變化了。
步驟:通常使用VS提供的工具生成SQL語句,工具生成的結(jié)果實(shí)在不符合要求,才手工寫SQL語句。
124.動態(tài)創(chuàng)建的控件PostBack后是否可以保存下來,為什么?
答:ASP.NET框架不會為你保存,但可以手工保存到ViewState
125.T-SQL中is null和null 的區(qū)別?
答:is null 和 null 區(qū)別相當(dāng)于 "是空盒子" 和 "空盒子"的區(qū)別
--非技術(shù)問題
1、對你來說工作中最重要的是什么?
答:團(tuán)隊(duì)目標(biāo)的實(shí)現(xiàn)。(這是所有公司希望員工擁有的素質(zhì))
2、為什么愿意為本公司工作?
答:因?yàn)槲艺J(rèn)為我可以與貴公司取得共同的發(fā)展。(暗示留下我可能為公司帶來的益處)
3、你認(rèn)為公司為什么要聘用你?
答:因?yàn)槲艺J(rèn)為我的能力和性格完全適合貴公司的這個職位。
4、如果我們聘用你,你會待多久?
答:我說過了,我想與貴公司共同發(fā)展,當(dāng)然我相信這種發(fā)展是可持續(xù)的,我不愿意失去這個發(fā)展機(jī)會。(考慮忠誠度問題,這樣回答比較中肯,亂發(fā)誓在陌生人面前是完全沒用的)
5、在你看來,我們會為你的職業(yè)生涯規(guī)劃一個怎樣的環(huán)境?
答:我有一個比較長遠(yuǎn)的職業(yè)生涯規(guī)劃目標(biāo),但不管是近期目標(biāo)還是中長期目標(biāo),貴公司的環(huán)境恰恰與我的計(jì)劃相吻合,我相信一定能在貴公司的幫助下實(shí)現(xiàn)自己的規(guī)劃。(看你的計(jì)劃性,如果知道公司的一些具體情況,也可順便拍拍馬屁,但不能過頭)
6、你的優(yōu)點(diǎn)是什么?
答:優(yōu)點(diǎn)是不喜歡多說,喜歡多做。(每個老板都喜歡的腳踏實(shí)地而不是夸夸其談的員工)
7、什么是你最大的弱點(diǎn)?友情提示:不妨借自我批評來自我表揚(yáng)。
答1:我的短處是心比較軟,總是不擅于推辭別人的要求。(體現(xiàn)你的樂于助人)
答2:我過去不太注重與人的溝通,覺得只要技術(shù)好就可以了,但隨著年齡的增長和接觸更多的人,我覺得與人溝通也很重要,我現(xiàn)在正努力地鍛煉提高自己的溝通能力
8、你的業(yè)余時間(愛好)喜歡做什么?
答:我經(jīng)常會去打籃球,喜歡戶外運(yùn)動,聽音樂和看電影
9、你對薪水的期望是多少?
答:望可以根據(jù)貴公司的情況以及本地軟件業(yè)行情還有我的能力給出一個合理的薪金。
10、如果……的話,你怎么辦?
答:如果在我的利益呵公司的利益之間選擇,我會毫不猶豫選擇公司。
11、你對我們公司有什么想法?
友情提示:這可體現(xiàn)你對公司前景的關(guān)注,切忌回答:“都很好,沒什么想法。”,參考回答:“貴公司XX地方做的很好,但XX地方需要加強(qiáng)”, 不宜多說。
--其它
存儲過程和用戶定義函數(shù)都是“SQL語句組成的子程序,用以封裝代碼以便重復(fù)使用”。但區(qū)別也是顯而易見的。簡單說,存儲過程功能強(qiáng)大,但調(diào)用不便,用戶函數(shù)正相反。
用戶定義函數(shù)的優(yōu)點(diǎn):
可以在SQL語句中調(diào)用,直接使用返值,從而形成復(fù)雜的SQL應(yīng)用。
存儲過程則只能用execute命令調(diào)用,用輸出參數(shù)的到返回的結(jié)果。
用戶定義函數(shù)的缺點(diǎn):
能在函數(shù)中使用的語句有嚴(yán)格限制:
不支持create、drop等DDL命令
insert、delete、update只能用在臨時表上
不支持動態(tài)SQL
不支持“不確定”的函數(shù),比如常用的getdate。不確定函數(shù)是指輸入?yún)?shù)相同,返回結(jié)果可能不同的函數(shù)。全部不確定函數(shù)如下表
@@CONNECTIONS @@TOTAL_ERRORS
變通辦法:
要解決用戶函數(shù)的種種限制,可以巧妙運(yùn)用用戶函數(shù)調(diào)用存儲過程。
比如,需要在函數(shù)中用getdate,就寫個存儲過程返回getdate的結(jié)果。然后從函數(shù)里去調(diào)用這個存儲過程。需要在函數(shù)中使用update等,也可類推。
‘--------------------------------------
缺點(diǎn):
1、可移植性是存儲過程和觸發(fā)器最大的缺點(diǎn)。
2、占用服務(wù)器端太多的資源,對服務(wù)器造成很大的壓力
3、不能做DDL。
4、觸發(fā)器排錯困難,而且數(shù)據(jù)容易造成不一致,后期維護(hù)不方便。
優(yōu)點(diǎn):
1、預(yù)編譯,已優(yōu)化,效率較高。避免了SQL語句在網(wǎng)絡(luò)傳輸然后再解釋的低效率。
2、存儲過程可以重復(fù)使用,減少開發(fā)人員的工作量。
3、業(yè)務(wù)邏輯封裝性好,修改方便。
4、安全。不會有SQL語句注入問題存在。