NET面試題 (四)

1, 面向對象的思想主要包括什麼?javascript

封裝、繼承、多態。html

TLWjava

封裝:用抽象的數據類型將數據和基於數據的操做封裝在一塊兒,數據被保護在抽象數據類型內部。mysql

繼承:子類擁有父類的全部數據和操做。程序員

多態:一個程序中同名的不一樣方法共存的狀況。web

 

封裝:封裝是面向對象的特徵之一,是對象和類概念的主要特性。封裝,也就是把客觀事物封裝成抽象的類,而且類能夠把本身的數據和方法只讓可信的類或者對象操做,對不可信的進行信息隱藏正則表達式

繼承:繼承是指這樣一種能力:它可使用現有類的全部功能,並在無需從新編寫原來的類的狀況下對這些功能進行擴展。算法

多態:經過繼承實現的不一樣對象調用相同的方法,表現出不一樣的行爲,稱之爲多態。sql

2, 進程和線程的區別?數據庫

TLW

進程是系統進行資源分配和調度的單位;線程是CPU調度和分派的單位,一個進程能夠有多個線程,這些線程共享這個進程的資源。

啓動一個線程是用run()仍是start()?

     啓動一個線程是調用start()方法,使線程所表明的虛擬處理機處於可運行狀態,這意味着它能夠由JVM調度並執行。這並不意味着線程就會當即運行。run()方法能夠產生必須退出的標誌來中止一個線程。

 

區別:

一個程序至少有一個進程,一個進程至少有一個線程;

線程的劃分尺度小於進程,使得多線程程序的併發性高;

進程在執行過程當中擁有獨立的內存單元, 而多個線程共享內存;每一個獨立的線程有一個程序運行的入口、順序執行序列和程序的出口,可是線程不能獨立運行,必須依存在應用程序中,由應用程序提供多個線程執行控制。

3, 堆和棧的區別?

TLW

棧:由編譯器自動分配、釋放。在函數體中定義的變量一般在棧上。

堆:通常由程序員分配釋放。用new、malloc等分配內存函數分配獲得的就是在堆上。

 

堆棧空間分配區別

棧(操做系統):由操做系統自動分配釋放 ,存放函數的參數值,局部變量的值等。其操做方式相似於數據結構中的棧;

堆(操做系統): 通常由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收,分配方式卻是相似於鏈表。

堆棧緩存方式區別:

(1) 棧使用的是一級緩存, 他們一般都是被調用時處於存儲空間中,調用完畢當即釋放;

(2) 堆是存放在二級緩存中,生命週期由虛擬機的垃圾回收算法來決定(並非一旦成爲孤兒對象就能被回收)。因此調用這些對象的速度要相對來得低一些。

堆棧數據結構區別:

堆(數據結構):堆能夠被當作是一棵樹,如:堆排序;

棧(數據結構):一種先進後出的數據結構。

4, 概述o/r mapping的原理O/R Mapping全稱Object Relational Mapping,就是對象關係映射。

利用反射,配置 將類於數據庫表映射。

5, abstract class(抽象類)和interface(接口)有什麼區別?他們的相同點是什麼?接口的應用場合是什麼?

區別:

A. interface須要實現,要用implements,而abstract class須要繼承,要用extends。 
B. 一個類能夠實現多個interface,但一個類只能繼承一個abstract class。 
C. interface強調特定功能的實現,而abstract class強調所屬關係。 
D. 儘管interface實現類及abstrct class的子類都必需要實現相應的抽象方法,但實現的形式不一樣。interface中的每個方法都是抽象方法,都只是聲明的(declaration,沒有方法體),實現類必需要實現。而abstract class的子類能夠有選擇地實現。 
這個選擇有兩點含義: 
    一是Abastract class中並不是全部的方法都是抽象的,只有那些冠有abstract的方法纔是抽象的,子類必須實現。那些沒有abstract的方法,在Abstrct class中必須定義方法體。 
    二是abstract class的子類在繼承它時,對非抽象方法既能夠直接繼承,也能夠覆蓋(重寫);而對抽象方法,能夠選擇實現,也能夠經過再次聲明其方法爲抽象的方式,無需實現,留給其子類來實現,但此類必須也聲明爲抽象類。既是抽象類,固然也不能實例化。 
E. abstract class是interface與Class的中介。 
interface是徹底抽象的,只能聲明方法,並且只能聲明pulic的方法,不能聲明private及protected的方法,不能定義方法體,也不能聲明實例變量。然而,interface卻能夠聲明常量變量。但將常量變量放在interface中違背了其做爲接口的做用而存在的宗旨,也混淆了interface與類的不一樣價值。若是的確須要,能夠將其放在相應的abstract class或Class中。 abstract class在interface及Class中起到了承上啓下的做用。一方面,abstract class是抽象的,能夠聲明抽象方法,以規範子類必須實現的功能;另外一方面,它又能夠定義缺省的方法體,供子類直接使用或覆蓋(重寫)。另外,它還能夠定義本身的實例變量,以供子類經過繼承來使用。

相同點:

A. 二者都是抽象類,都不能實例化。 
B. interface實現類及abstrct class的子類都必需要實現已經聲明的抽象方法。

Interface的應用場合:

A. 類與類以前須要特定的接口進行協調,而不在意其如何實現。 
B. 做爲可以實現特定功能的標識存在,也能夠是什麼接口方法都沒有的純粹標識。 
C. 須要將一組類視爲單一的。

接口是否能夠繼承接口?抽象類是否能夠實現接口?抽象類是否能夠繼承實體類?

   接口是能夠繼承接口的,抽象類是能夠實現接口的,抽象類能夠繼承實體類,但前提條件是實體類必需要有明確的構造函數。

6, ADO.NET中讀寫數據庫中須要用到哪些類?他們的做用?

Connection:鏈接對象。
Command: 命令對象,指示要執行的命令和存儲過程。
DataReader:是一個向前的只讀的數據流。
DataAdapter:是功能強大的適配合器,支持增刪改查的功能。
DataSet:是一個數據級對象,至關於內存中的一張表或多張表。

DataTable 用來存儲一個表的數據.

7, 重寫(override)和重載(overload)的區別。

TLW

重載是方法的名稱相同。參數或參數類型不一樣,進行屢次重載以適應不一樣的須要

重寫是進行基類中函數的重寫。爲了適應須要

 

(1)重寫必須繼承,重載不用。
(2)重寫的方法名,參數數目相同,參數類型兼容,重載的方法名相同,參數列表不一樣。
(3)重寫的方法修飾符大於等於父類的方法,重載和修飾符無關。
(4)重寫不能夠拋出父類沒有拋出的通常異常,能夠拋出運行時異常

8, GC是什麼?爲何要有GC?

TLW

GC是垃圾收集器(垃圾回收機制)。程序員不用擔憂內存管理,由於垃圾收集器會自動進行管理。要請求垃圾收集,能夠調用下面的方法之一:

 System.gc();

Runtime.getRuntime().gc();

C#是否能夠對內存直接進行操做?

  C#是能夠對內存進行直接操做的,雖然不多用到指針,可是C#是可使用指針的,在用的時候須要在前邊加unsafe,.net中使用了垃圾回收機制(GC)功能,它替代了程序員,不過在C#中不能夠直接使用finalize方法,而是在析構函數中調用基類的finalize()方法。

 

GC:垃圾回收機制。

使用GC的緣由(好處):

(1)提升了軟件開發的抽象度;

(2)程序員能夠將精力集中在實際的問題上而不用分心來管理內存的問題;

(3)可使模塊的接口更加的清晰,減少模塊間的偶合;

(4)大大減小了內存人爲管理不當所帶來的Bug;

(5)使內存管理更加高效。

GC的使用示例:

GC.SuppressFinalize(this);//設置對象的阻止終結器代碼

GC.SuppressFinalize(this)的做用:實現IDisposable接口的對象能夠從IDisposable.Dispose方法調用此方法(GC.SuppressFinalize(this)),以防止垃圾回收器對不須要終止的對象調用Object.Finalize。

GC的方法:

Collect()

強制對全部代進行即時垃圾回收。

Collect(Int32)

強制對零代到指定代進行即時垃圾回收。

Collect(Int32, GCCollectionMode)

強制在 GCCollectionMode 值所指定的時間對零代到指定代進行垃圾回收。


10,什麼叫作應用程序域?

    應用程序域能夠理解爲一種輕量級進程。起到安全的做用。佔用資源小。

    TLW

    應用程序域爲安全性、可靠性、版本控制以及卸載程序集提供了隔離邊界。應用程序域一般由運行庫宿主建立,運行庫宿主負責在運行應用程序以前引導公共語言運行庫。應用程序域提供了一個更安全、用途更廣的處理單元,公共語言運行庫可以使用該單元提供應用程序之間的隔離

 

應用程序域 (application domain) (AppDomain) ,一種邊界,它由公共語言運行庫圍繞同一應用程序範圍內建立的對象創建(即,從應用程序入口點開始,沿着對象激活的序列的任何位置)。應用程序域有助於將在一個應用程序中建立的對象與在其餘應用程序中建立的對象隔離,以使運行時行爲能夠預知。在一個單獨的進程中能夠存在多個應用程序域。

11,列舉ASP.NET頁面之間傳遞值的幾種方式。

使用QueryString變量 、使用Application對象變量 、使用Session變量 、使用Cookie對象變量 、使用Server.Transfer方法 、URL傳參、使用cache。

12,概述反射和序列化(映射)。
TLW
反射:
公共語言運行庫加載器管理應用程序域。這種管理包括將每一個程序集加載到相應的應用程序域以及控制每一個程序集中類型層次結構的內存佈局。程序集包含模塊,而模塊包含類型,類型又包含成員。反射則提供了封裝程序集、模塊和類型的對象。您可使用反射動態地建立類型的實例,將類型綁定到現有對象,或從現有對象中獲取類型。而後,能夠調用類型的方法或訪問其字段和屬性。
序列化:序列化是將對象狀態轉換爲可保持或傳輸的格式的過程。與序列化相對的是反序列化,它將流轉換爲對象。這兩個過程結合起來,能夠輕鬆地存儲和傳輸數據。


反射:程序集包含模塊,而模塊包含類型,類型又包含成員。反射則提供了封裝程序集、模塊和類型的對象。您可使用反射動態地建立類型的實例,將類型綁定到現有對象,或從現有對象中獲取類型。而後,能夠調用類型的方法或訪問其字段和屬性
序列化:序列化是將對象轉換爲容易傳輸的格式的過程。例如,能夠序列化一個對象,而後使用 HTTP 經過 Internet 在客戶端和服務器之間傳輸該對象。在另外一端,反序列化將從該流從新構造對象。

13,概述.NET裏對remoting和webservice兩項技術的理解和實際中的應用。
webservice遠程邏輯調用,remoing接口只能用在.net中。
.net remoting的工做原理:
 服務器端向客戶端發送一個進程編號,一個程序域編號,以肯定對象的位置。

13,值類型和引用類型的區別和相同點。
    TLW

(1)基於值類型的變量直接包含值。將一個值類型變量賦給另外一個值類型變量時,將複製包含的值。這與引用類型變量的賦值不一樣,引用類型變量的賦值只複製對對象的引用,而不復制對象自己。

(2)全部的值類型均隱式派生自 System.ValueType。與引用類型不一樣,從值類型不可能派生出新的類型。但與引用類型相同的是,結構也能夠實現接口。

(3)與引用類型不一樣,值類型不可能包含 null 值。然而,可空類型功能容許將null 賦給值類型。 每種值類型均有一個隱式的默認構造函數來初始化該類型的默認值。

(4)值類型主要由兩類組成:結構、枚舉; 結構分爲如下幾類:Numeric(數值)類型、整型、浮點型、decimal、bool、用戶定義的結構。

(5)引用類型的變量又稱爲對象,可存儲對實際數據的引用。聲明引用類型的關鍵字:class、interface、delegate、內置引用類型: object、string。

 

 

值類型(value type):byte,short,int,long,float,double,decimal,char,bool 和 struct 統稱爲值類型。值類型變量聲明後,無論是否已經賦值,編譯器爲其分配內存。

引用類型(reference type):string 和 class統稱爲引用類型。當聲明一個類時,只在棧中分配一小片內存用於容納一個地址,而此時並無爲其分配堆上的內存空間。當使用 new 建立一個類的實例時,分配堆上的空間,並把堆上空間的地址保存到棧上分配的小片空間中。
相同點:

引用類型能夠實現接口,值類型當中的結構體也能夠實現接口;

引用類型和值類型都繼承自System.Object類。

區別:

    1)範圍方面
C#的值類型包括:結構體(數值類型、bool型、用戶定義的結構體),枚舉,可空類型。
C#的引用類型包括:數組,用戶定義的類、接口、委託,object,字符串。

2)內存分配方面:

數組的元素無論是引用類型仍是值類型,都存儲在託管堆上。

引用類型在棧中存儲一個引用,其實際的存儲位置位於託管堆。簡稱引用類型部署在託管推上。而值類型老是分配在它聲明的地方:做爲字段時,跟隨其所屬的變量(實 例)存儲;做爲局部變量時,存儲在棧上。(棧的內存是自動釋放的,堆內存是.NET中會由GC來自動釋放)

3)適用場合

值類型在內存管理方面具備更好的效率,而且不支持多態,適合用作存儲數據的載體;引用類型支持多態,適合用於定義應用程序的行爲。

14,out參數和ref參數有什麼區別?

        ref和out都是C#中的關鍵字,所實現的功能也差很少,都是指定一個參數按照引用傳遞

     區別:

(1)   ref傳進去的參數必須在調用前初始化,out沒必要;

(2)   ref傳進去的參數在函數內部能夠直接使用,而out不可;

(3)   ref傳進去的參數在函數內部能夠不被修改,但out必須在離開函數體前進行賦值;

(4)   系統對ref的限制是更少一些的。

15,ExecuteNonQuery方法和ExecuteScalar方法的區別
    ExecuteNonQuery()執行命令對象的SQL語句,返回一個int類型變量,若是SQL語  句是對數據庫的記錄進行操做(如記錄的增長、刪除和更新),那麼方法將返回操做所影響的記錄條數。
    ExecuteScalar()執行命令對象的SQL語句,若是SQL語句是SELECT查詢,則僅僅返回查詢結果集中的第1行第1列,而忽略其餘的行 和列。該方法所返回的結果爲object類型,在使用以前必須強制轉換爲所需的類型。若是SQL語句不是SELECT查詢,則返回結果沒有任何做用。

15,UDP鏈接和TCP鏈接的異同。

前者只管傳,無論數據到不到,無須創建鏈接。後者保證傳輸的數據準確,需要連結。

16,ASP.NET的身份驗證方式有哪些?

form認證,windows集成認證等。

17,什麼是code-Behind技術?有什麼好處?

定義:Code Behind就是所謂的代碼分離。在.NET中,通常是用兩種文件來建立一個ASP.NET頁面,(1)頁面文件,通常以.aspx或.ascx爲擴展名,(2)程序代碼文件,通常以.cs或.cb爲擴展名。

好處:界面設計和程序代碼的分開,對於代碼的重用、程序調試和維護都是革命性的,特別是在.NET中面向對象方式的應用。

18,Session有什麼重大bug?微軟提出了什麼解決辦法?
    是iis中因爲有進程回收機制,系統繁忙的話Session會丟失,能夠用Sate server或SQL Server數據庫的方式存儲Session不過這種方式比較慢,並且沒法捕獲Session的END事件。
19,this關鍵字的涵義。
this 關鍵字引用類的當前實例,還可用做擴展方法的第一個參數的修飾符。
20,大概描述一下ASP.NET服務器控件的生命週期
初始化->加載視圖狀態->處理回發數據->加載->發送回發更改通知->處理回發事件
->預呈現->保存狀態->呈現->處置->卸載

21,大概描述asp.net 頁面生命週期
   請求頁面->開始->初始化頁面->加載頁面->驗證->回發事件處理

->呈現頁面->卸載頁面

    請求頁面:頁請求發生在頁生命週期開始以前。

開始:在開始階段,將設置頁屬性,如Request和Response。在此階段,頁還將肯定請求是回發請求仍是新請求,並設置IsPostBack屬性。

初始化頁面:頁面初始化期間,可使用頁中的控件,並將設置每一個控件的UniqueID屬性。若是當前請求是回發請求,則回發數據還沒有加載,而且控件屬性值還沒有還原爲視圖狀態中的值。

加載頁面:加載期間,若是當前請求是回發請求,則將使用從視圖狀態和控件狀態恢復的信息加載控件屬性。

驗證:在驗證期間,將調用全部驗證程序控件的Validate方法,此方法將設置各個驗證程序控件和頁的IsValid屬性。

回發事件處理:若是請求是回發請求,則將調用全部事件處理程序。

呈現頁面:在頁面呈現期間,視圖狀態將被保存到頁面,而後頁面將調用每一個控件,以將其呈現的輸出提供給頁的Response屬性的OutputStream。

卸載頁面:徹底呈現頁、將頁發送至客戶端並準備丟棄時,將調用卸載。此時,將卸載頁屬性(如Response和Request)並執行清理。

22,請說出public/private/protect/internal的訪問權限。

    private : 私有成員, 在類的內部才能夠訪問。
protected : 保護成員,該類內部和繼承類中能夠訪問。
public : 公共成員,徹底公開,沒有訪問限制。
internal: 在同一命名空間內能夠訪問。

23,概述三層架構每一層的含義和各層之間的依賴關係以及各層的做用?三層的優缺點。和MVC的區別。

    展現層(UI)、業務邏輯層(BLL)、數據訪問層(DAL)。

    依賴關係:業務邏輯層(BLL)引用數據訪問層(DAL),展現層(UI)引用業務邏輯層(BLL)。Model貫穿全部層,全部的層都引用它。

    各層的做用:

數據訪問層:主要是對非原始數據(數據庫或者文本文件等存放數據的形式)的操做層,而不是指原始數據,也就是說,是對數據庫的操做,而不是數據,具體爲業務邏輯層或表示層提供數據服務.

業務邏輯層:主要是針對具體的問題的操做,也能夠理解成對數據層的操做,對數據業務邏輯處理,若是說數據層是積木,那邏輯層就是對這些積木的搭建。

界面層:主要表示WEB方式,也能夠表示成WINFORM方式,WEB方式也能夠表現成:aspx,若是邏輯層至關強大和完善,不管表現層如何定義和更改,邏輯層都能完善地提供服務。

使用三層的優勢(好處):

(1)開發人員能夠只關注整個結構中的其中某一層;

(2)能夠很容易的用新的實現來替換原有層次的實現;

(3)能夠下降層與層之間的依賴;

(4)有利於標準化;

(5)利於各層邏輯的複用;

(6)結構更加的明確;

(7)在後期維護的時候,極大地下降了維護成本和維護時間。

使用三層的缺點:

(1)下降了系統的性能。這是不言而喻的。若是不採用分層式結構,不少業務能夠直接造訪數據庫,以此獲取相應的數據,現在卻必須經過中間層來完成。

(2)有時會致使級聯的修改。這種修改尤爲體如今自上而下的方向。若是在表示層中須要增長一個功能,爲保證其設計符合分層式結構,可能須要在相應的業務邏輯層和數據訪問層中都增長相應的代碼。

(3)增長了開發成本。

MVC:

View(視圖)顯示數據(數據庫記錄)

Controller(控制器)處理輸入(寫入數據庫記錄)

Model(模型)表示應用程序核心(好比數據庫記錄列表)

 

和MVC的區別:

  MVC(模型Model-視圖View-控制器Controller)是一種架構模式,能夠用它來建立在域對象和UI表示層對象之間的區分。

一樣是架構級別的,相同的地方在於他們都有一個表現層,可是他們不一樣的地方在於其餘的兩個層。

在三層架構中沒有定義Controller的概念。這是最不一樣的地方。而MVC也沒有把業務的邏輯訪問當作兩個層,這是採用三層架構或MVC搭建程序最主要的區別。固然了。在三層中也提到了Model,可是三層架構中Model的概念與MVC中Model的概念是不同的,「三層」中典型的Model層是以實體類構成的,而MVC裏,則是由業務邏輯與訪問數據組成的。

24,批量插入數據的實現方式。
 (1)使用SqlBulkCopy;

private void SqlBulkCopyByDatatable(string connectionString, string TableName, DataTable dt)
{
   using (SqlConnection conn = new SqlConnection(connectionString))
   {
      using (SqlBulkCopy sqlbulkcopy =new SqlBulkCopy(connectionString, SqlBulk  CopyOptions.UseInternalTransaction))
      {
         try
         {
           sqlbulkcopy.DestinationTableName = TableName;
           for (int i = 0; i < dt.Columns.Count; i++)
           {
               sqlbulkcopy.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName);
           }
               sqlbulkcopy.WriteToServer(dt);
         }
         catch (System.Exception ex)
         {
             throw ex;
         }
       }
     }
   }

(2)使用.net ODP特性
      //設置一個數據庫的鏈接串
      string connectStr = "User Id=scott;Password=tiger;Data Source=";
      OracleConnection conn = new OracleConnection(connectStr);
      OracleCommand command = new OracleCommand();
      command.Connection = conn;
      //這個參數須要指定每次批插入的記錄數
      command.ArrayBindCount = recc;
      //在這個命令行中,用到了參數,參數咱們很熟悉,可是這個參數在傳值的時候
      //用到的是數組,而不是單個的值,這就是它獨特的地方
      command.CommandText

= "insert into dept values(:deptno, :deptname, :loc)";
      conn.Open();
      //下面定義幾個數組,分別表示三個字段,數組的長度由參數直接給出
      int[] deptNo = new int[recc];
      string[] dname = new string[recc];
      string[] loc = new string[recc];
      // 爲了傳遞參數,不可避免的要使用參數,下面會連續定義三個
      OracleParameter deptNoParam

= new OracleParameter("deptno", OracleDbType.Int32);
deptNoParam.Direction = ParameterDirection.Input;
deptNoParam.Value = deptNo; command.Parameters.Add(deptNoParam);
OracleParameter deptNameParam = new OracleParameter("deptname", OracleDbType.Varchar2);
deptNameParam.Direction = ParameterDirection.Input;
deptNameParam.Value = dname; command.Parameters.Add(deptNameParam);
OracleParameter deptLocParam = new OracleParameter("loc", OracleDbType.Varchar2);
deptLocParam.Direction = ParameterDirection.Input;
deptLocParam.Value = loc;
command.Parameters.Add(deptLocParam);
Stopwatch sw = new Stopwatch();

sw.Start();
//在下面的循環中,先把數組定義好,而不是像上面那樣直接生成SQL
for (int i = 0; i < recc; i++)
{
    deptNo[i] = i;

dname[i] = i.ToString();

loc[i] = i.ToString();
}
//這個調用將把參數數組傳進SQL,同時寫入數據庫
command.ExecuteNonQuery();
sw.Stop();
System.Diagnostics.Debug.WriteLine("批量插入:" + recc.ToString() + "所佔時間:" +sw.ElapsedMilliseconds.ToString());

25,如何處理幾十萬條併發數據?

    TLW:
存儲過程事務。取得最大標識的時候同時更新,注意主鍵不是自增量方式,這種方法併發的時候是不會有重複主鍵的,取得最大標識要有一個存儲過程來獲取.
  

(1)HTML靜態化 (2)圖片服務器分離 (3)數據庫集羣和庫表散列 (4)緩存 
   (5)鏡像 (6)負載均衡

26,查詢效率的優化。

合理使用索引、表分區、避免或簡化排序、消除對大型錶行數據的順序存取、避免相關子查詢、使用臨時表加速查詢

 

避免使用select *、存儲過程、合理使用索引、避免相關子查詢、使用臨時表加速、避免困難的正則表達式。

存儲過程過多不利於數據庫的遷移。

27, SQL防注入。

SQL注入:利用sql關鍵字對網站進行攻擊。
    (1)值參數化;(2)過濾禁止運行;(3)使用存儲過程。

28,簡述事務的概念。
事務是用戶定義的一個數據庫操做序列,這些操做要麼全作要麼全不作,是一個不可分割的工做單位。
事務具備四個特性:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)和持續性(Durability)

29,委託、事件和觀察者模式(Observer模式)。

    TLW:

    委託是一種安全的相似與函數指針,可是她比指針要安全的多,它能夠把方法做爲一個參數傳遞給另外一個方法,能夠理解爲指向函數的引用。

事件是一種消息機制,它是一種委託,委託不帶方法體。

 

C#中的委託是什麼?事件是否是一種委託?

委託能夠把一個方法做爲參數代入另外一個方法。委託能夠理解爲指向一個函數的引用。事件是一種特殊的委託



       委託是一個類,它定義了方法的類型,使得能夠將方法看成另外一個方法的參數來進行傳遞,這種將方法動態地賦給參數的作法,能夠避免在程序中大量使用If-Else(Switch)語句,同時使得程序具備更好的可擴展性。

       使用委託能夠將多個方法綁定到同一個委託變量,當調用此變量時(這裏用「調用」這個詞,是由於此變量表明一個方法),能夠依次調用全部綁定的方法。
   事件封裝了委託類型的變量,使得:在類的內部,無論你聲明它是public仍是protected,它老是private 的。在類的外部,註冊「+=」和註銷「-=」的訪問限定符與你在聲明事件時使用的訪問符相同。

   觀察者模式:

適用性:

在如下任一狀況下可使用觀察者模式:
• 當一個抽象模型有兩個方面, 其中一個方面依賴於另外一方面。將這兩者封裝在獨立的對象中以使它們能夠各自獨立地改變和複用。
• 當對一個對象的改變須要同時改變其它對象 , 而不知道具體有多少對象有待改變。
• 當一個對象必須通知其它對象,而它又不能假定其它對象是誰。換言之 , 你不但願這些對象是緊密耦合的。
對象:
Observer設計模式中主要包括以下兩類對象:

(1)Subject:監視對象,它每每包含着其餘對象所感興趣的內容。

(2)Observer:監視者,它監視Subject,當Subject中的某件事發生的時候,會告知Observer,而Observer則會採起相應的行動。

30,適配器模式(Adepter)的定義與適用場景。

    定義:適配器模式將某個類的接口轉換成客戶端指望的另外一個接口表示,主的目的是兼容性,讓本來因接口不匹配不能一塊兒工做的兩個類能夠協同工做。其別名爲包裝器(Wrapper)。
三種適配器:
類適配器,以類給到,在Adapter裏,就是將src當作類,繼承,
對象適配器,以對象給到,在Adapter裏,將src做爲一個對象,持有。
接口適配器,以接口給到,在Adapter裏,將src做爲一個接口,實現。
適用場景:

(1)系統須要使用現有的類,而這些類的接口不符合系統的接口。

(2)想要創建一個能夠重用的類,用於與一些彼此之間沒有太大關聯的一些類,包括一些可能在未來引進的類一塊兒工做。

(3)兩個類所作的事情相同或類似,可是具備不一樣接口的時候。

(4)舊的系統開發的類已經實現了一些功能,可是客戶端卻只能以另外接口的形式訪問,但咱們不但願手動更改原有類的時候。

(5)使用第三方組件,組件接口定義和本身定義的不一樣,不但願修改本身的接口,可是要使用第三方組件接口的功能。

     適配器應用舉例:

    使用過ADO.NET的開發人員應該都用過DataAdapter,它就是用做DataSet和數據源之間的適配器。DataAdapter經過映射Fill和Update來提供這一適配器。

31,單例模式的定義、特色與適用場景。

     定義:單例模式(Singleton)也叫單態模式,是設計模式中最爲簡單的一種模式,甚至有些模式大師都不稱其爲模式,稱其爲一種實現技巧,由於設計模式講究對象之間的關係的抽象,而單例模式只有本身一個對象,也所以有些設計大師並把把其稱爲設計模式之一。

適用場景:

單例模式應用的場景通常發如今如下條件下:

(1)資源共享的狀況下,避免因爲資源操做時致使的性能或損耗等。如上述中的日誌文件,應用配置。

(2)控制資源的狀況下,方便資源之間的互相通訊。如線程池等。
    單例模式三要點:
   
單例模式有三個要點:

一是某個類只能有一個實例;

二是它必須自行建立這個實例;   

三是它必須自行向整個系統提供這個實例。

    Public class LoadBalancer

{

           //私有靜態成員變量,存儲惟一實例

            private  static LoadBalancer instance = null;

           //私有構造函數

            private  LoadBalancer()

            {

                   serverList  = new ArrayList();

            }

            //公有靜態成員方法,返回惟一實例

            public  static LoadBalancer getLoadBalancer()

            {

                   if  (instance == null)

                   {

                          instance  = new LoadBalancer();

                   }

                    return  instance;

             }

      餓漢式單例類:

      public class EagerSingleton

{

  //因爲在定義靜態變量的時候實例化單例類,所以在類加載的時候就已經建立了//單例對象

private static final  EagerSingleton instance = new EagerSingleton();

private EagerSingleton() { }

public static EagerSingleton getInstance()

{

return instance;

}

}

懶漢式單例類:

public class LazySingleton

{

private static LazySingleton instance = null;

private LazySingleton() { }

//在getInstance()方法前面增長了關鍵字synchronized進行線程鎖,以處理//多個線程同時訪問的問題

synchronized public  static LazySingleton getInstance()

{

if (instance == null)

{

instance = new  LazySingleton();

                    }

return instance;

}

}

32,CTS、CLS、CLR分別做何解釋?

CTS:通用語言系統。CLS:通用語言規範。CLR:公共語言運行庫。

33,請簡述單元測試的做用和其優勢。

(1)幫助開發人員編寫代碼,提高質量、減小bug。

(2)提高反饋速度,減小重複工做,提升開發效率。

(3)保證你最後的代碼修改不會破壞以前代碼的功能。

(4)讓代碼維護更容易。

(5)有助於改進代碼質量和設計。

34,C#中String 和 string 有什麼區別?

沒有任何區別,string  只是 String 的別名。

35,請你說說.NET中類和結構的區別?

    Class能夠被實例化,屬於引用類型,class能夠實現接口和單繼承其餘類,還能夠做爲基類型,是分配在內存的堆上的,Struct屬於值類型,是分配在內存的棧上的。

36,死鎖的必要條件?怎麼克服?

      系統的資源不足,進程的推動的順序不合適,資源分配不當,一個資源每次只能被一個進程使用,一個進程請求資源時,而此時這個資源已阻塞,對已得到資源不放,進程得到資源時,未使用完前,不能強行剝奪。

37,構造器Constructor是否能夠被繼承?是否能夠被Override?

Constructor不能夠被繼承,所以不能被重寫(Overriding),但能夠被重載(Overloading)。

38,當一個線程進入一個對象的方法後,其它線程是否能夠進入該對象的方法?

不能夠,一個對象的方法只能由一個線程訪問。

39,Error和Exception有什麼區別?

    error表示恢復不是不可能,可是很困難,exception表示一種實際或實現問題,它表示程序運行正常不能夠發生的。

40,談談final,finally,finallize的區別?

  final用於申明屬性,方法和類,表示屬性不可變,方法不能夠被覆蓋,類不能夠被繼承。

  Finally是異常處理語句結構中,表示老是執行的部分。

  Finallize表示是object類一個方法,在垃圾回收機制中執行的時候會被調用被回收對象的方法。

41,HashMap和Hashtable區別?

    HashMap是Hashtable的輕量級實現,非線程安全的,他們都實現了map接口,主要區別是HashMap鍵值能夠爲空null,效率能夠高於Hashtable。

42,Collection和Collections的區別?

    Collection是集合類的上級接口,Collections是針對集合類的一個幫助類,它提供一系列靜態方法來實現對各類集合的搜索,排序,線程安全化操做。

43,New有幾種用法?

  有3種。

第一種是,實例化如:New Class();

第二種是,public new 隱藏基類的方法

  第三種是,在泛型類申明中的任何類型參數都必須有公共的無參構造函數。

44,Const和ReadOnly?

   Const用來申明編程時常量,const字段只能在該字段的聲明中初始化。const默認是靜態的。

ReadOnly用來申明運行時常量。readonly字段能夠在聲明或構造函數中初始化,根據不一樣的構造函數,readonly能夠有不一樣的值。readonly設置爲靜態,是必須先聲明的。

45,UDP和TCP鏈接有和異同?

        TCP是傳輸控制協議,提供的是面向鏈接的,是可靠的,字節流服務,當用戶和服務器彼此進行數據交互的時候,必須在他們數據交互前要進行TCP鏈接以後才能傳輸數據。TCP提供超時重撥,檢驗數據功能。UDP是用戶數據報協議,是一個簡單的面向數據報的傳輸協議,是不可靠的鏈接。

46,什麼是強命名程序集?

        程序集須要通過加密簽名,強命名程序集能夠部署到全局程序集緩存中,成爲公共程序集。

47,簡述WebService、WCF。

    Webservice相關的:

    概念:

Web service是一個平臺獨立的,低耦合的,自包含的、基於可編程的web的應用程序,可以使用開放的XML標準通用標記語言下的一個子集)標準描述、發佈、發現、協調和配置這些應用程序,用於開發分佈式的互操做的應用程序

以默認工程詳解:

    namespace WebService1

{

       /// <summary>

       /// Service1 的摘要說明

       /// </summary>

      [WebService(Namespace = "http://tempuri.org/")]

       //用於向 XML Web services 添加附加信息,如描述其功能的字符串。

//對於將要發佈和執行的 XML Web services 來講,

//WebServiceAttribute 不是必需的。

//可使用 WebServiceAttribute 爲 XML Web services 指定

//不受公共語言運行庫標識符(用於 XML Web services 的「服務說明」和

//「服務幫助」頁)規則限制的名稱。

      //XML Web services 在成爲公共以前,應該更改其默認的 XML 命名空間。

//每一個 XML Web services 都須要惟一的 XML 命名空間來標識它,

//以便客戶端應用程序可以將它與網絡上的其餘服務區分開來。

//http://tempuri.org/ 可用於正在開發中的 XML Web services,

//可是已發佈的 XML Web services 應該使用更具永久性的命名空間。

//例如,能夠將公司的 Internet 域名做爲 XML 命名空間的一部分。

//雖然不少 XML Web services 的 XML 命名空間與 URL 很類似,可是,

//它們無需指向 Web 上的某一實際資源。(XML Web services 的 XML 命名空間

//是 URI。)對於使用 ASP.NET 建立的 XML Web services,

//可使用 Namespace 屬性更改默認的 XML 命名空間。

 

    //ConformsTo  獲取或設置綁定聲稱所符合的 Web 服務互操做性 (WSI) 規範。

      [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 

      //聲明定義一個或多個 XML Web services 方法的綁定。沒法繼承此類。

//按 Web 服務描述語言 (WSDL) 的定義,綁定相似於一個接口,

//緣由是它定義一組具體的操做。

//每一個 XML Web services 方法都是特定綁定中的一項操做。

//XML Web services 方法是 XML Web services 的默認綁定的成員,

//或者是在應用於實現 XML Web services 的類的 WebServiceBindingAttribute

//中指定的綁定的成員。

//XML Web services 能夠經過將多個 WebServiceBindingAttribute 屬性

//應用於 XML Web services 來實現多個綁定。

//將一個或多個 WebServiceAttribute 屬性應用到 XML Web services 以後,

//能夠將 SoapDocumentMethodAttribute 或 SoapRpcMethodAttribute

//應用到各個 XML Web services 方法

//以指示由特定的 XML Web services 方法實現的綁定操做。

//設置 SoapDocumentMethodAttribute 或 SoapRpcMethodAttribute 的

//Binding 屬性以指定 XML Web services 方法正在爲其實現操做的綁定。

 

      [System.ComponentModel.ToolboxItem(false)]//提供工具箱項的基實現。

      // 若要容許使用 ASP.NET AJAX 從腳本中調用此 Web 服務,請取消對下行的註釋。

      // [System.Web.Script.Services.ScriptService]

      public class Service1 : System.Web.Services.WebService

//表示此網站項目實現的一個 Web 服務,如同將此網站引用添加到項目時

//以 Visual Studio 生成的 .asmx 文件表示同樣。

      {

         [WebMethod]

//向使用 ASP.NET 建立的 XML Web services 中的某個方法添加

//此屬性 (Attribute) 後,就能夠從遠程 Web 客戶端調用該方法。沒法繼承此類。

//初始化 WebMethodAttribute 類的新實例。

          public string HelloWorld()

          {

               return "Hello World";

          }

     }

}

    WCF相關的:

概念:

WCF 就是針對繁雜卻又切實存在的狀況而設計的,是公開和訪問服務的 Windows應用程序的首選技術。

WCF就是專門用於服務定製、發佈與運行以及消息傳遞和處理的一組專門類的集合,也就是所謂的「類庫」。

將DCOM、Remoting、Web Service、WSE、MSMQ集成在一塊兒,從而下降了分佈式系統開發者的學習曲線,並統一了開發標準。

承載方式:

(1)經過IIS中承載

   與web網站發佈方式一致。

(2)經過Windows進程激活服務(WAS)中承載  

   容許經過HTTP以外的協議進行激活和網絡通訊。可支持任何網絡協議(包括HTTP、net.tcp、net.pipe和net.msmq)進行通訊的WCF服務。

(3)經過託管應用程序中承載(自承載)

三種消息模式:

(1)請求與答覆(默認)

   請求發送方(客戶端應用程序)將接收與請求相關的答覆。

(2)單向/工

   若是WCF服務應用程序的客戶端沒必要等待操做完成,而且不處理SOAP錯誤,則該操做能夠指定爲單向消息模式。
       [OperationContract(IsOneWay=true)]

void Hello(string greeting);

 

(3)雙工

      特色:不管使用單向消息發送仍是請求/答覆消息發送方式,服務和客戶端均可以獨立地向對方發送消息。

      要設計雙工協定,必須有回調協定,並將該回調協定的類型分配給標記服務契約的ServiceContract屬性的CallbackContract屬性。
配置服務:

 

  (1)Service元素的一些屬性值:

   Name:指定提供服務協定的實現的類型。徹底限定名稱(命名空間和類型名稱)。

   behaviorConfiguration:指定一個在behaviors元素中找到的behavior元素的名稱。

<service name= 「WcfServiceLibrary1.Service1"

behaviorConfiguration= " WcfServiceLibrary1.Service1Behavior"> 

    (2)endpoint元素的一些屬性值:

     address:是URL。能夠是絕對地址或相對服務基址給定的地址(可爲空)。

     binding:系統提供的綁定方式,指定的綁定肯定傳輸協議類型、安全和使用的編碼,以及是否支持或啓用可靠會話、事務或流。

     bindingConfiguration:給定binding元素的name值。

     contract:指定定義協定的接口。

    

    <endpoint

address="" binding="wsHttpBinding" contract="Tlw.Contract.Service.IDemoWCF">

</endpoint>

WCF三大契約:

服務契約

    描述了暴露給外部的類型(接口或類)、服務所支持的操做、使用的消息交換模式和消息格式。一個WCF服務必須實現至少一個服務契約,包括兩種:ServiceContract和OperationContract;ServiceContract用於類或者結構上,用於指示WCF此類或者結構可以被遠程調用,而OperationContract用於類中的方法(Method)上,用於指示WCF該   方法可被遠程調用。

數據契約

數據契約須要引用System.Runtime.Serialization命名空間,

包括兩種:DataContract和DataMember;

屬性值:

Name:數據契約名稱

NameSpace:命名空間

IsRequired:指示該成員序列化前必須被賦值Order:數據項排列規則

消息契約

      消息契約關注數據成員在SOAP消息中的表示,包括3種:MessageContract、 MessageHeader、MessageBodyMember;

屬性值:

    Name:契約名稱

    NameSpace:命名空間

    ProtectionLevel:表示保護級別

    Order:數據項排列規則

48,什麼是Web Service?UDDI?

        Web Service即是基於網絡的、分佈式的模塊化組件,它執行特定的任務,遵照具體的技術規範,這些規範使得Web Service能與其餘兼容的組件進行互操做。UDDI 的目的是爲電子商務創建標準;UDDI是一套基於Web的、分佈式的、爲Web Service提供的、信息註冊中心的實現標準規範,同時也包含一組使企業能將自身提供的Web Service註冊,以使別的企業可以發現的訪問協議的實現標準。

49,解釋一下UDDI、WSDL的意義及其做用?

      UDDI是統一描述集成協議,是一套基於Web的,分佈式的,爲WEB服務提供的信息註冊的實現標準規範,同時也是爲企業自己提供的Web服務註冊以讓別的企業可以發現並訪問的協議標準。提供了基於標準的規範,用於描述和發現服務,還提供了一組基於因特網的實現。

WSDL這是一個基於XML的描述WEB服務的接口。

50,什麼是SOAP?

      是簡單訪問協議。是在分佈式環境中,交換信息並實現遠程調用的協議。是一個基於XML的協議。使用SOAP,能夠不考慮任何傳輸協議,但一般仍是HTTP協議,能夠容許任何類型的對象或代碼,在任何平臺上,以任一種語言相互通訊。它是一種輕量級協議

51,在.NET中全部類的基類是?

  object。

52,能用foreach遍歷訪問的對象須要實現?

  須要實現IEnumerable接口和GetEnumerator ()方法。

53,Heap與stack的差異?

  Heap是堆,通常由程序員分配釋放,它的存儲區很大的自由存儲區。

  Stack是棧,是由是操做系統自動分配和釋放的,棧上的空間是有限的。程序在編譯期間變量和函數分配內存都是在棧上進行的,且在運行時函數調用時的參數的傳遞也是在棧上進行的。

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

    程序集。(中間語言,源數據,資源,裝配清單)。

55,經常使用的調用WebService的方法有哪些?

    1.使用WSDL.exe命令行工具。2.使用VS.NET中的Add Web Reference菜單選項。

56,當一個線程進入一個對象的一個synchronized方法後,其它線程是否可進入此對象的其它方法?

    不能,一個對象的一個synchronized方法只能由一個線程訪問。

67,sleep() 和 wait() 有什麼區別?

    sleep()方法是使線程中止一段時間的方法。在sleep 時間間隔期滿後,線程不必定當即恢復執行。這是由於在那個時刻,其它線程可能正在運行並且沒有被調度爲放棄執行,除非(a)「醒來」的線程具備更高的優先級(b)正在運行的線程由於其它緣由而塞。wait()是線程交互時,若是線程對一個同步對象x 發出一個wait()調用,該線程 會暫停執行,被調對象進入等待狀態,直到被喚醒或等待時間到。

68,成員變量和成員函數前加static的做用?

    稱爲類(常)成員變量和類(常)成員函數。分別用來反映類的狀態。好比類成員變量能夠用來統計類實例的數量,類成員函數負責這種統計的動做。

69,請指出GAC的含義?

    全局程序集緩存。

60,向服務器發送請求有幾種方式?

    get,post。
get通常爲連接方式,post通常爲按鈕方式。

61,DataReader與Dataset有什麼區別?

    一個是隻能向前的只讀遊標,一個是內存中的表。

62,須要實現對一個字符串的處理,首先將該字符串首尾的空格去掉,若是字符串中間還有連續空格的話,僅保留一個空格,即容許字符串中間有多個空格,但連續的空格數不可超過一個.

    string inputStr=" xx xx ";

    inputStr=Regex.Replace(inputStr.Trim()," *"," ");

63,用sealed修飾的類有什麼特色?

    密封,不能繼承。

64,在.Net中全部可序列化的類都被標記爲_____?

    [serializable]

65,<%# %> 和 <%  %> 有什麼區別?

<%# %>表示綁定的數據源;<% %>是服務器端代碼塊。

66,&和&&的區別。

&是位運算符,表示按位與運算;&&是邏輯運算符,表示邏輯與(and)。

67,email正則表達式 (5)

/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;

/^(\w)+(\.\w+)*@(\w)+((\.\w{2,3}){1,3})$/;

/^(\w)+(\.\w+)*@(\w)+((\.\w+)+)$/;

68,javascript是面向對象的,怎麼體現javascript的繼承關係,怎樣實現?

    function Circle(r) {

      this.r = r;

}

Circle.PI = 3.14159;

Circle.prototype.area = function()

{

       return Circle.PI * this.r * this.r;

}

var c = new Circle(1.0);  

alert(c.area());

 

數據庫相關:

1,數據庫設計六大範式。
   主要有六種範式:

第一範式原子性,字段不可再分割。

學生編號  姓名 性別   電子郵件       電話
20080901  張三  男   zs@126.com    88886666
20080902  李四  女   ls@126.com    66668888

第二範式徹底依賴,沒有部分依賴。

選課表:每一列都不可再分割
學生  課程   教師  教師職稱  教室  上課時間
李四 Spring 張老師 java講師 301  08:00
張三 Struts 楊老師 java講師 302  13:30

課程表:
課程        教材 
Spring 《Spring深刻淺出》 
Struts 《Struts in Action》

第三範式:沒有傳遞依賴。

選課表:

學生  課程   教師   教室 上課時間
李四 Spring 張老師 301 08:00
張三 Struts 楊老師 302 13:30

教師表:
教師   教師職稱
張老師 java講師
楊老師 java講師

BC範式:

第四範式:

第五範式:

優勢:範式能夠避免數據冗餘,減小數據庫的空間,減輕維護數據完整性的麻煩。

缺點:操做困難,由於須要聯繫多個表才能獲得所須要數據,並且範式越高性能就會越差。

通常項目中使用第三範式就足夠了。

2,簡述UNION和UNION ALL的區別。

UNION用的比較多,union all是直接鏈接,取到得是全部值,記錄可能有重複。union 是取惟一值,記錄沒有重複

(1)語法區別 

UNION 的語法以下:
            [SQL 語句 1]
            UNION
            [SQL 語句 2]
          UNION ALL 的語法以下:
            [SQL 語句 1]
            UNION ALL
            [SQL 語句 2]

    (2)效率:
         UNION和UNION ALL關鍵字都是將兩個結果集合併爲一個,但這二者從使用和效 

率上來講都有所不一樣。
a,對重複結果的處理:UNION在進行表連接後會篩選掉重複的記錄,Union All不會去除重複記錄。
b,對排序的處理:Union將會按照字段的順序進行排序;UNION ALL只是簡單的將兩個結果合併後就返回。

c,從效率上說,UNION ALL 要比UNION快不少,因此,若是能夠確認合併的兩個結果集中不包含重複數據且不須要排序時的話,那麼就使用UNION ALL。

3,SUM/COUNT/AVG/MAX/MIN函數和GROUP BY/HAVING/ORDER BY的執行順序。

函數用法:

(1)AVG  返回指定組中的平均值,空值被忽略。
         例:select  prd_no,avg(qty) from sales group by prd_no
    (2)COUNT  返回指定組中項目的數量。
         例:select  count(prd_no) from sales
    (3)MAX  返回指定數據的最大值。
         例:select  prd_no,max(qty) from sales group by prd_no
    (4)MIN  返回指定數據的最小值。
         例:select  prd_no,min(qty) from sales group by prd_no
    (5)SUM  返回指定數據的和,只能用於數字列,空值被忽略。
         例:select  prd_no,sum(qty) from sales group by prd_no
    (6)COUNT_BIG  返回指定組中的項目數量,與COUNT函數不一樣的是COUNT_BIG返回      bigint值,而COUNT返回的是int值。
         例:select  count_big(prd_no) from sales
    (7)GROUPING  產生一個附加的列,當用CUBE或ROLLUP運算符添加行時,輸出值爲1.當所添加的行不是由CUBE或ROLLUP產生時,輸出值爲0.
         例:select  prd_no,sum(qty),grouping(prd_no) from sales group by prd_no with rollup
    (8)BINARY_CHECKSUM  返回對錶中的行或表達式列表計算的二進制校驗值,用於檢測表中行的更改。
         例:select  prd_no,binary_checksum(qty) from sales group by prd_no
    (9)CHECKSUM_AGG  返回指定數據的校驗值,空值被忽略。
         例:select  prd_no,checksum_agg(binary_checksum(*)) from sales group by prd_no
    (10)CHECKSUM  返回在表的行上或在表達式列表上計算的校驗值,用於生成哈希索引。
    (11)STDEV  返回給定表達式中全部值的統計標準誤差。
         例:select  stdev(prd_no) from sales
    (12)STDEVP  返回給定表達式中的全部值的填充統計標準誤差。
         例:select  stdevp(prd_no) from sales
    (13)VAR  返回給定表達式中全部值的統計方差。
         例:select  var(prd_no) from sales
    (14)VARP  返回給定表達式中全部值的填充的統計方差。
         例:select varp(prd_no) from sales

執行順序:

SELECT  查詢內容FROM  tablename WHERE  查詢條件GROUP BY 分組條件 HAVING 取值範圍 ORDER BY 排序列;

4,varhar和nvarchar的區別。
       varchar(n)長度爲 n 個字節的可變長度且非 Unicode 的字符數據。n 必須是

一 個介於 1 和   8,000 之間的數值。存儲大小爲輸入數據的字節的實際長度,而不是 n 個字節。
   nvarchar(n)包含 n 個字符的可變長度 Unicode 字符數據。n 的值必須介於 1 與 4,000 之間。字節的存儲大小是所輸入字符個數的兩倍。

5, 寫出一條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)

6, SQL條件控制case… when… then… else… end…的用法。
--簡單Case函數
CASE sex
         WHEN '1' THEN '男'
         WHEN '2' THEN '女'
ELSE '其餘' END
 
--Case搜索函數
CASE WHEN sex = '1' THEN '男'
         WHEN sex = '2' THEN '女'
ELSE '其餘' END

 

如下爲常見的算法問題及Linq的運用:

1,一列數的規則以下:一、一、二、三、五、八、1三、2一、34……求第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);

    }

2,取出兩個數組中重複的值。
public static int[] GetRepeatData(int[] array1, int[] array2)

{

        return array1.Where(p => array2.Contains(p)).ToArray();

    }

3, 取出兩個數組中不重複的值。
public static int[] GetNotRepeatData(int [] arry1,int[] arry2)

    {

        List<int> result = new List<int>();

        foreach (int a in arry1)

        {

            if (!arry2.Contains(a))

                 result.Add(a);

        }

        arry1 = new int[result.Count];  //從新設置長度

        result.CopyTo(arry1);          //將List結果複製到數組zong中;

        return arry1;

     }

4,去除一個數組中不重複的值。

public static int[] DelRepaetData(int[] arry)

    {

    return arry.GroupBy(p => p).Select(p => p.Key).ToArray();

}

 

5,求如下表達式的值,寫出您想到的一種或幾種實現方法: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() ;

 

6,任何把一個Array複製到Arraylist中?

 foreach (object item in Array), ArrayList.Add (item);

 

7,冒泡排序。

   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 ;

        }

}

}

8,給定如下XML文件,完成算法流程圖。

<FileSystem>

<DriverC >

<Dir DirName=」MSDOS622」>

<File FileName =」 Command.com」 ></File>

</Dir>

<File FileName =」MSDOS.SYS」 ></File>

<File FileName =」 IO.SYS」 ></File>

</DriverC>

</FileSystem>

請畫出遍歷全部文件名(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 );

}

}

9,請將字符串"I am a student"按單詞逆序輸出 如"student a am I"

string S = "I am a student";

    char[] C = new char[] { ' '};

    string[] n =S.Split(C);

    int length = S.Length;

for (int i =length-1 ; i >=0; i--)

{

          Console.Write(n[i]);

          if (i != 0)

{

               Console.Write(" ");

}

}

10,兩個數組  [n] [m]  n>m  第一個數組的數字無序排列 第二個數組爲空 取出第一個數組的最小值 放到第二個數組中第一個位置, 依次類推. 不能改變A數組,不能對之進行排序,也不能夠倒到別的數組中。

    int[] a = { -20, 9, 7, 37, 38, 69, 89, -1, 59, 29, 0, -25, 39, 900, 22, 13};

    int[] b = new int[10];

    int intTmp = a[0], intMaxNum;

for (int i = 0; i < a.Length; i++)

{

         intTmp = a[i] > intTmp ? a[i] : intTmp;

}

    intMaxNum = intTmp;

for (int j = 0; j < b.Length; j++)

{

        for (int i = 0; i < a.Length; i++)

{

             if (j == 0)

                  intTmp = a[i] < intTmp ? a[i] : intTmp;

             else

{

                  if (a[i] > b[j - 1])

                       intTmp = a[i] < intTmp ? a[i] : intTmp;

}

}

        b[j] = intTmp;

        intTmp = intMaxNum;

}

foreach (int bb in b)

{

        Console.WriteLine(bb);

}

Console.ReadLine();

11,產生一個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];

}

相關文章
相關標籤/搜索