.NET面試題(一)

作者: IT小炸彈  來源: 博客園  發布時間: 2009-11-19 13:52  閱讀: 5680 次  推薦: 1   原文鏈接   [收藏]  

1 如何設計數據庫

答:存儲信息的大小,每次擴容的大小,冗余

 

2 幾十上百萬行,如何快速查詢出表數據

答:用分頁存儲過程

/*
 函數名稱: GetRecordFromPage
 函數功能: 獲取指定頁的數據
 參數說明: @tblName      包含數據的表名
           @fldName      關鍵字段名
           @PageSize     每頁記錄數
           @PageIndex    要獲取的頁碼
           @OrderType    排序類型, 0 - 升序, 1 - 降序
           @strWhere     查詢條件 (注意: 不要加 where)
*/
CREATE PROCEDURE GetRecordFromPage
    @tblName      varchar(255),       -- 表名
    @fldName      varchar(255),       -- 字段名
    @PageSize     int = 10,           -- 頁尺寸
    @PageIndex   int = 1,            -- 頁碼
    @OrderType    bit = 0,            -- 設置排序類型, 非 0 值則降序
    @strWhere     varchar(2000) = '' -- 查詢條件 (注意: 不要加 where)
AS
declare @strSQL   varchar(6000)       -- 主語句
declare @strTmp   varchar(1000)       -- 臨時變量
declare @strOrder varchar(500)        -- 排序類型
if @OrderType != 0
begin
    set @strTmp = '<(select min'
    set @strOrder = ' order by [' + @fldName + '] desc'
end
else
begin
    set @strTmp = '>(select max'
    set @strOrder = ' order by [' + @fldName +'] asc'
end
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
    + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
    + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
    + @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'
    + @strOrder
if @strWhere != ''
    set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
        + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
        + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
        + @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '
        + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
if @PageIndex = 1
begin
    set @strTmp = ''
    if @strWhere != ''
        set @strTmp = ' where (' + @strWhere + ')'
    set @strSQL = 'select top ' + str(@PageSize) + ' * from ['

        + @tblName + ']' + @strTmp + ' ' + @strOrder
end
exec (@strSQL)

GO

3 SQL語句左聯接與內連接的區別

答:Inner Join 邏輯運算符返回滿足第一個(頂端)輸入與第二個(底端)輸入聯接的每一行。

Left Outer Join 邏輯運算符返回每個滿足第一個(頂端)輸入與第二個(底端)輸入的聯接的行。它還返回任何在第二個輸入中沒有匹配行的第一個輸入中的行。第二個輸入中的非匹配行作為空值返回。

 

4 Asp.net如何連接數據庫

答:       connection   連接數據庫

           Command       執行數據庫SQL或存儲過錯命令

        DataAdapter 連接數據庫,執行數據庫SQL或存儲過錯命令,填充DataSet

 

5 什么是事務?

答:數據庫事務是指作為單個邏輯工作單元執行的一系列操作。

數據庫事務的ACID屬性

 

事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向數據的資源。通過將一組相關操作組合為一個要么全部成功要么全部失敗的單元,可以簡化錯誤恢復并使應用程序更加可靠。一個邏輯工作單元要成為事務,必須滿足所謂的ACID(原子性、一致性、隔離性和持久性)屬性:

 

  · 原子性

 

事務必須是原子工作單元;對于其數據修改,要么全都執行,要么全都不執行。通常,與某個事務關聯的操作具有共同的目標,并且是相互依賴的。如果系統只執行這些操作的一個子集,則可能會破壞事務的總體目標。原子性消除了系統處理操作子集的可能性。

 

  · 一致性

 

事務在完成時,必須使所有的數據都保持一致狀態。在相關數據庫中,所有規則都必須應用于事務的修改,以保持所有數據的完整性。事務結束時,所有的內部數據結構(如 B 樹索引或雙向鏈表)都必須是正確的。某些維護一致性的責任由應用程序開發人員承擔,他們必須確保應用程序已強制所有已知的完整性約束。例如,當開發用于轉帳的應用程序時,應避免在轉帳過程中任意移動小數點。

 

  · 隔離性

 

由并發事務所作的修改必須與任何其它并發事務所作的修改隔離。事務查看數據時數據所處的狀態,要么是另一并發事務修改它之前的狀態,要么是另一事務修改它之后的狀態,事務不會查看中間狀態的數據。這稱為可串行性,因為它能夠重新裝載起始數據,并且重播一系列事務,以使數據結束時的狀態與原始事務執行的狀態相同。當事務可序列化時將獲得最高的隔離級別。在此級別上,從一組可并行執行的事務獲得的結果與通過連續運行每個事務所獲得的結果相同。由于高度隔離會限制可并行執行的事務數,所以一些應用程序降低隔離級別以換取更大的吞吐量。

 

  · 持久性

 

事務完成之后,它對于系統的影響是永久性的。該修改即使出現致命的系統故障也將一直保持。

DBMS的責任和我們的任務

 

企業級的數據庫管理系統(DBMS)都有責任提供一種保證事務的物理完整性的機制。就常用的SQL Server2000系統而言,它具備鎖定設備隔離事務、記錄設備保證事務持久性等機制。因此,我們不必關心數據庫事務的物理完整性,而應該關注在什么情況下使用數據庫事務、事務對性能的影響,如何使用事務等等。

 

6 水晶報表實現的功能?如何實現?

答:

* 一套完整的Web報表制作解決方案,讓您容易制作網絡報表

* 功能強大的工具,可將報表制作功能與WebWindows應用程序結合

* 可利用各種資料來源,建立簡報品質的精良報告

* 與微軟Office緊密結合的報表制作功能

* 快速的報表處理功能

* 可彈性地傳送報表

* Crystal Reports商業智能產品家族完全結合

 

從簡單到復雜的報表,Crystal Reports 都可以協助您存取、分析、報告及分享數據,結合使用容易、具彈性、功能強大的特性,提供簡報品質的完美報表。

 

 

 

[功能:]

使用各種資料來源制作報表

享用功能強大的設計與格式設定功能

結合具彈性的分析

最快的報表處理能力

靈活的報表傳送作業

可擴充的Web報表制作

取得您所需要的功能強大、彈性高的報表制作工具,將精巧的報表的制作功能結合到您的WindowsWeb應用程序。充分運用針對網站thin-wire環境設計的報表制作功能

支持應用程序的強大報表制作功能

享用前所未有的彈性與操控能力

完成應用程序資料的報表

 

7 string = null string “”的區別

答:前者沒有分配內存控件,后著分配了

 

8 存儲過程和sql語句的優缺點

答:

存儲過程的優缺點:

 

優點:

1.由于應用程序隨著時間推移會不斷更改,增刪功能,TSQL過程代碼會變得更復雜,StoredProcedure為封裝此代碼提供了一個替換位置。

 

2.執行計劃(存儲過程在首次運行時將被編譯,這將產生一個執行計劃-- 實際上是 Microsoft SQL Server為在存儲過程中獲取由 T-SQL 指定的結果而必須采取的步驟的記錄。)緩存改善性能。

........sql server新版本,執行計劃已針對所有 T-SQL 批處理進行了緩存,而不管它們是否在存儲過程中,所以沒比較優勢了。

 

3.存儲過程可以用于降低網絡流量,存儲過程代碼直接存儲于數據庫中,所以不會產生大量T-sql語句的代碼流量。

 

4.使用存儲過程使您能夠增強對執行計劃的重復使用,由此可以通過使用遠程過程調用 (RPC) 處理服務器上的存儲過程而提高性能。RPC 封裝參數和調用服務器端過程的方式使引擎能夠輕松地找到匹配的執行計劃,并只需插入更新的參數值。

 

5.可維護性高,更新存儲過程通常比更改、測試以及重新部署程序集需要較少的時間和精力。

 

6.代碼精簡一致,一個存儲過程可以用于應用程序代碼的不同位置。

 

7.更好的版本控制,通過使用 Microsoft Visual SourceSafe 或某個其他源代碼控制工具,您可以輕松地恢復到或引用舊版本的存儲過程。

 

8.增強安全性:

a、通過向用戶授予對存儲過程(而不是基于表)的訪問權限,它們可以提供對特定數據的訪問;

b、提高代碼安全,防止 SQL注入(但未徹底解決,例如,將數據操作語言--DML,附加到輸入參數);

cSqlParameter 類指定存儲過程參數的數據類型,作為深層次防御性策略的一部分,可以驗證用戶提供的值類型(但也不是萬無一失,還是應該傳遞至數據庫前得到附加驗證)。

 

 

缺點:

 

1.如果更改范圍大到需要對輸入存儲過程的參數進行更改,或者要更改由其返回的數據,則您仍需要更新程序集中的代碼以添加參數、更新 GetValue() 調用,等等,這時候估計比較繁瑣了。

 

2.可移植性差

 

由于存儲過程將應用程序綁定到 SQL Server,因此使用存儲過程封裝業務邏輯將限制應用程序的可移植性。如果應用程序的可移植性在您的環境中非常重要,則將業務邏輯封裝在不特定于 RDBMS 的中間層中可能是一個更佳的選擇。

 

Sql語句靈活,可移植性強,查詢速度比存儲過程慢些

 

9 asp.net如何驗證數據正確性?以"E_mail@"為例

答:在RegularExpressionValidator驗證控件中加入正則表達式:\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

 

10 什么是webservice,什么情況下使用,如何使用?

答:

 

現在我將列舉三種情況,在這三種情況下,你將會發現使用Webservice會帶來極大的好處。此后,我還會舉出不應該使用Webservice的一些情況。

 

跨越防火墻的通信

 

如果你的應用程序有成千上萬的用戶,而且他們都分布在世界各地,那么客戶端和服務器之間的通信將是一個棘手的問題。那是因為客戶端和服務器之間通常都會有防火墻或者代理服務器。在這種情況下,你想使用DCOM就不是那么簡單了,而且,通常你也不愿意把你的客戶端程序發布到如此龐大數量的每一個用戶手中。于是,你最終選擇了用瀏覽器作為客戶端,寫下一堆ASP頁面,把應用程序的中間層暴露給最終用戶。結果呢?運氣好的話,只是開發難度大了一些,運氣不好的話,就會得到一個根本無法維護的應用程序。

 

想象一下你應該怎么在你的應用程序里面加入一個新的頁面:你必須先建立好用戶界面(Web頁面),以及在這個頁面后面,包含相應商業邏輯的中間層組件。這還不夠,你還要再建立至少一個ASP頁面,用來接受用戶輸入的信息,調用中間層組件,把結果格式化為HTML形式,最后還要把"結果頁"送回瀏覽器。要是客戶端代碼不再如此依賴于HTML表單,客戶端的編程不就簡單多了嗎?還有,建立ASP頁面的那一步可以省略掉嗎?

 

當然。如果你的中間層組件是Webservice的話,你完全可以從用戶界面直接調用中間層組件,從而省掉建立ASP頁面的那一步。要調用Webservice,你可以直接使用MicrosoftSOAPToolkit.NET這樣的SOAP客戶端,也可以使用你自己開發的SOAP客戶端,然后把它和你的應用程序連接起來。這樣做,不僅可以縮短開發周期,還可以減少代碼的復雜度,并增強整個應用程序的可維護性。同時,你的應用程序也不再需要在每次調用中間層組件時,都跳轉到相應的"結果頁"了。

 

以我的經驗來看,在一個用戶界面和中間層有較多交互的應用程序中,使用Webservice這種結構,可以輕松的節省花在用戶界面編程上的20%的開發時間。這樣做還有另一個好處,就是你將得到一個由Webservice組成的中間層,這一層是完全可以在應用程序集成或其他場合下被重用的。最后,通過Webservice把你的應用程序的邏輯和數據暴露出來,還可以讓其它平臺上的客戶重用你的應用程序。

 

應用程序集成

 

企業級的應用程序開發者都知道,企業里經常都要把用不同語言寫成的在不同平臺上運行的各種程序集成起來,而這種集成將花費很大的開發的力量。你的應用程序經常都需要從運行在古老的IBM主機上的程序中獲取數據;或者再把數據發送到主機或UNIX應用程序中去。即使是在同一個平臺上,不同的軟件廠商生產的各種軟件也常常需要集成起來。通過Webservice,應用程序可以用標準的方法把功能和數據暴露出來,供其它的應用程序使用。

 

例如,你有一個訂單登錄程序,用于登錄從客戶來的新訂單,包括客戶信息、發貨地址、數量、價格和付款方式等信息。同時,你還有一個訂單執行程序,用于實際貨物發送的管理。這兩個程序是來自不同軟件廠商的。一份新訂單進來之后,訂單登錄程序需要通知訂單執行程序發送貨物。通過在訂單執行程序上面增加一層Webservice,訂單執行程序可以把"AddOrder"函數暴露出來。這樣,每當有新訂單到來時,訂單登錄程序就可以調用這個函數來發送貨物了。進而通過Webservice集成應用程序

 

B2B的集成

 

Webservice集成應用程序,可以使你公司內部的商務處理更加自動化。但當交易跨越了你的供應商和客戶,突破了公司的界線時又會怎么樣呢?跨公司的商務交易集成通常叫做B2B集成。

 

WebserviceB2B集成成功的關鍵。通過Webservice,你的公司可以把關鍵的商務應用暴露給指定的供應商和客戶。例如,把你的電子下單系統和電子發票系統暴露出來,你的客戶就可以以電子的方式向你發送購貨訂單,而你的供應商則可以以電子的方式把原料采購的發票發送給你。當然,這并不是一個新的概念:電子文檔交換(EDI)早就是這樣了。WebserviceEDI之間的主要區別在于,Webservice的實現要比EDI簡單得多,而且Webservice是運行在Internet上的,在世界任何地方都可輕易實現,這樣其運行成本就相對較低。不過,Webservice并不像EDI那樣,是文檔交換或B2B集成的一套完整的解決方案。Webservice只是B2B集成的一個關鍵部分,還需要許多其它的部分才能完成這個集成。

 

Webservice來實現B2B集成的最大好處在于可以輕易實現互操作性。只要把你的商務邏輯暴露出來,成為Webservice,你就可以讓任何指定的合作伙伴輕松的調用你的商務邏輯,而不管他們的系統在什么平臺上運行,使用的是什么開發語言。這樣就大大減少了花在B2B集成的上的時間和成本。這樣的低成本讓許多原本無法承受EDI的投資成本的中小企業也能實現B2B集成。

 

軟件重用

 

軟件重用是一個很大的主題,它有很多的形式和程度。最基本的形式是源代碼模塊或者類一級的重用。另一種形式是二進制形式的組件重用。當前,像表格控件或用戶界面控件這樣的可重用軟件組件在市場上都占有很大的份額。但這類軟件的重用都有一個很嚴重的限制:重用僅限于代碼,而數據不能被重用。原因在于你可以很輕易的發布組件甚至源代碼,但要發布數據就沒那么容易了,除非那些數據都是不會經常變化的靜態數據。

 

Webservice允許你在重用代碼的同時,重用代碼后面的數據。使用Webservice,你不再像以前那樣,要先從第三方購買、安裝軟件組件,再從你的應用程序中調用這些組件。你只需要直接調用遠端的Webservice就可以了。舉個例子,你想在你的應用程序中確認用戶輸入的郵件地址,那么,你只需把這個地址直接發送給相應的Webservice,這個Webservice就會幫你查閱街道地址、城市、省區和郵政編碼等信息,確認這個地址的確在相應的郵政編碼區域。Webservice的提供商可以按時間或使用次數來對這項服務進行收費。這樣的服務要通過組件重用來實現是不現實的,因為那樣的話你必須下載并安裝好包含街道地址、城市、省區和郵政編碼等信息的數據庫,而且這個數據庫還是不能實時更新的。

 

另一種軟件重用的情況是把好幾個應用程序的功能集成起來。例如,你想要建立一個局域網上的門戶站點應用,讓用戶既可以查詢他們的聯邦快遞包裹,察看股市行情,又可以管理他們的日程安排,還可以在線購買電影票。現在Web上有很多應用程序供應商,都在其應用中實現了上面的這些功能。一旦他們把這些功能都通過Webservice暴露出來,你就可以非常輕易地把所有這些功能都集成到你的門戶站點中,為用戶提供一個統一的、友好的界面。

Webservice來集成各種應用中的功能,為用戶提供一個統一的界面

許多應用程序都會利用Webservice,把當前基于組件的應用程序結構擴展為組件和Webservice的混合結構。你也可以在應用程序中使用第三方的Webservice提供的功能。你還可以把你自己的應用程序的功能通過Webservice提供給別人。所有這些情況下,你都可以重用代碼和代碼后面的數據。總之,Webservice將是軟件重用的一種非常有力的形式。

 

什么時候不應該使用WebService

 

一個對Webservice的完整介紹還應該包括什么時候不該用Webservice。經過前面的介紹,我們知道了Webservice在通過Web進行互操作或遠程調用的時候是最有用的。不過,還有許多情況,Webservice根本不能給你帶來任何好處。

 

單機應用程序

 

目前,我們還有很多桌面應用程序是供商用和個人使用的。其中一些只需要與運行在本機上的其他程序通信。在這種情況下,我們最好就不要再用Webservice,只要用本地的API就可以了。COM非常適合于在這種情況下工作,因為它既小又快。運行在一臺服務器上的服務器軟件也是這樣:最好直接用COM或其他本地的API來進行應用程序間的調用。當然Webservice也能用在這些情況下,但那樣不僅消耗太大,而且不會給你帶來任何好處。

 

局域網上的同構應用程序

 

在許多應用中,你所有的程序都是用VBVC開發的,都在Windows平臺下使用COM,都運行在同一個局域網上。例如,你有兩個服務器應用程序需要相互通信,或者你有一個Win32WinForm的客戶程序要連接到局域網上的另一個服務器程序。在這些程序里使用DCOM會比SOAP/HTTP有效的多。類似的,如果你的一個.NET程序要連接到LAN上的另一個.NET程序,那么你應該使用.NETremoting。有趣的是,在.NETremoting中,你也可以指定使用SOAP/HTTP來進行Webservice調用。不過最好還是直接通過TCP進行RPC調用,那樣會有效得多。總之,只要你從應用程序結構的角度看來,有別的方法比Webservice更有效,更可行,那就不要再用Webservice

 

總結

 

Webservice是創建可互操作的分布式應用程序的新平臺。Webservice的主要目標是跨平臺的可互操作性。為了達到這一目標,Webservice是完全基于XMLXSD等獨立于平臺、獨立于軟件供應商的標準的。

 

Webservice在應用程序跨平臺和跨網絡進行通信的時候是非常有用的。Webservice適用于應用程序集成、B2B集成、代碼和數據重用,以及通過Web進行客戶端和服務器的通信的場合。

 

當然,Webservice也不是萬能的,你不能到處濫用Webservice。在有些情況下,Webservice會降低應用程序的性能,而不會帶來任何好處。例如,一臺機器或一個局域網里面運行的同構應用程序就不應該用Webservice進行通信。

 

11 gridview如何把其中一行添加下拉列表框并綁定數據庫?如何分頁和動態排序?

答:

先生成模版,在EditItemTemplate里放一個下拉筐進去,選擇數據源即可

gridview的屬性Allowpaging true 就能分頁,AllowSortingtrue就能排序

或者用gridview.Sort方法排序。

 

 

12 說明一下軟件開發流程?

答:分析(需要,概要,詳細),開發(編程,單元測試),測試(集成測試),維護

 

13 如果做到編碼規范?

答:方法,類,變量盡量寫有意義的單詞。注釋有寫清楚,但不要羅唆

 

14 try catch finally catchfinally的作用

答:catch撲獲異常,finally不管代碼是否出現異常都執行

 

15 web頁面代碼的執行順序?

答:從上到下

 

16 用戶控件和自定義控件的異同點?

答:用戶控件(UserControl): 擴展名為*.ascx,*.aspx在結構上相似,是指頁面中 

加載的功能塊,只是用戶控件不能單獨作為頁面運行,必須嵌入到*.aspx頁面或其它用 

戶控件中使用

    自定義控件,跟HtmlControlWebControl相似,編譯后可以添加引用到工具欄里 

面,直接用鼠標拖動使用。

看情況使用,如果功能比較多,會用自定義控件。

 

17 當發生一個http代碼錯誤時可以顯示一個自定義的錯誤頁面給用戶,怎么花最小代價完成這個目標?

答:

 

18 一個人拿了100元去商店買25元錢的東西,店主沒有零錢找,于是去旁邊的小攤販換了100的零錢,找給了那個人75,那個人走了之后,小攤販拿著100元錢去找店主,說是假的,店主看了看錢,發現真的是假的,于是賠給了小攤販一個真的100塊錢,問店主一共虧了多少錢,為什么?

答:25。進75元,出100元。

 

19 .net中哪項技術實現跨多語言

   ACLR BCTS CCLS DCTT

答:CLR

 

20 B/S模式中,你是使用幾層架構實現的,說說各層之間的關系和這樣的好處?

答:MVC(模型-視圖-控制器)

視圖(View)代表用戶交互界面.

模型(Model):就是業務流程/狀態的處理以及業務規則的制定,業務模型還有一個很重要的模型那就是數據模型.

控制(Controller)可以理解為從用戶接收請求, 將模型與視圖匹配在一起,共同完成用戶的請求.

1
0
 
標簽:面試題集
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()