本文轉自:http://www.cnblogs.com/JCSU/articles/1289762.html
120. 請敘述屬性與索引器的區別
屬性:
(1) 經過名稱標識
(3) 經過簡單名稱或成員訪問來訪問
(3) 能夠爲靜態成員或實例成員
(4) 屬性的get訪問器沒有參數
(5) 屬性的set訪問器包含隱式value參數
索引器:
(1) 經過簽名標識
(2) 經過元素訪問來訪問
(3) 必須爲實例成員
(4) 索引器的get訪問器具備與索引器相同的形參表
(5) 除了value參數外,索引器的set訪問器還具備與索引器相同的形參表
121. 請敘述const與readonly的區別。
答:每個class至多隻能夠定義一個static構造函數,而且不容許增長訪問級別關鍵字,參數列必須爲空。爲了避免違背編碼規則,一般把static數據成員聲明爲private,而後經過static property提供讀寫訪問。
const關鍵字用於修改字段或局部變量的聲明。它指定字段或局部變量的值不能被修改。常數聲明引入給定類型的一個或多個常數。
const數據成員的聲明式必須包含初值,且初值必須是一個常量表達式。由於它是在編譯時就須要徹底評估。
const成員可使用另外一個const成員來初始化,前提是二者之間沒有循環依賴。
readonly在運行期評估賦值,使咱們得以在確保"只讀訪問"的前提下,把object的初始化動做推遲到運行期進行。
readonly關鍵字與const關鍵字不一樣:const字段只能在該字段的聲明中初始化。readonly字段能夠在聲明或構造函數中初始化。所以,根據所使用的構造函數,readonly字段可能具備不一樣的值。另外,const字段是編譯時常數,而readonly字段可用於運行時常數。
readonly只能在聲明時或者構造函數裏面初始化,而且不能在static修飾的構造函數裏面。
122. 您須要建立一個ASP.NET應用程序,公司考慮使用Windows身份認證。全部的用戶都存在於AllWin這個域中。您想要使用下列認證規則來配置這個應用程序:
a、 匿名用戶不容許訪問這個應用程序。
b、 全部僱員除了Tess和King都容許訪問這個應用程序。
請問您應該使用如下哪個代碼段來配置這個應用程序?( A )
A. <authorization>
<deny users="allwin\tess, allwin\king">
<allow users="*">
<deny users="?">
</authorization>
B. <authorization>
<allow users="*">
<deny users="allwin\tess, allwin\king">
<deny users="?">
</authorization>
C. <authorization>
<deny users="allwin\tess, allwin\king">
<deny users="?">
<allow users="*">
</authorization>
D. <authorization>
<allow users="allwin\tess, allwin\king">
<allow users="*">
</authorization>
E.<authorization>
<allow users="*">
<deny users="allwin\tess, allwin\king">
</authorization>
123. 您要建立一個顯示公司員工列表的應用程序。您使用一個DataGrid控件顯示員工的列表。您打算修改這個控件以便在這個Grid的Footer顯示員工合計數。請問您應該怎麼作? ( C? )
A.重寫OnPreRender事件,當Grid的Footer行被建立時顯示合計數
B.重寫OnItemCreated事件,當Grid的Footer行被建立時顯示合計數
C.重寫OnItemDataBound事件,當Grid的Footer行被建立時顯示合計數
D.重寫OnLayout事件,當Grid的Footer行被建立時顯示合計數
123. 您要建立ASP.NET應用程序用於運行AllWin公司內部的Web站點,這個應用程序包含了50個頁面。您想要配置這個應用程序以便當發生一個 HTTP代碼錯誤時它能夠顯示一個自定義的錯誤頁面給用戶。您想要花最小的代價完成這些目標,您應該怎麼作?(多選) ( CD )
A.在這個應用程序的Global.asax文件中建立一個Application_Error過程去處理ASP.NET代碼錯誤
B.在這個應用程序的Web.config文件中建立一個applicationError節去處理ASP.NET代碼錯誤
C.在這個應用程序的Global.asax文件中建立一個CustomErrors事件去處理HTTP錯誤
D.在這個應用程序的Web.config文件中建立一個CustomErrors節去處理HTTP錯誤
E.在這個應用程序的每一頁中添加一個Page指示符去處理ASP.NET 代碼錯誤
F.在這個應用程序的每一頁中添加一個Page指示符去處理ASP.NET HTTP錯誤
125. 您爲AllWin公司建立了一個ASP.NET應用程序。這個應用程序調用一個 Xml Web Service。這個 Xml Web Service 將返回一個包含了公司僱員列表的DataSet對象。請問您該如何在這個程序中使用這個 Xml Web Service?( ? )
A.在"引用"對話框的.Net標籤中選擇 System.Web.Services.dll
B.在"Web引用"對話框中輸入這個XML Web service的地址
C.在您的 Global.asax.cs 中添加一條 using 語句並指定這個XML Web service的地址
D.在您的 Global.asax.cs 中寫一個事件處理器導入這個Xml Web Service相應的.wsdl和.disco 文件
126. 您要建立一個ASP.NET應用程序在DataGrid控件中顯示一個通過排序的列表。產品數據被存放於一個名爲PubBase的Microsoft SQL Server 數據庫。每一個產品的主鍵是ProductID,Numeric型而且每一個產品有一個字母描述字段,名爲ProductName。您使用一個 SqlDataAdapter對象和一個SqlCommand對象經過調用一個存儲過程從數據庫中獲取產品數據。您將SqlCommand對象的 CommandType屬性設置爲CommandType.StoredProcedure,並將它的CommandText屬性設置爲 procProductList。您成功的獲取了一個DataTable對象,其中是已經按ProductID降序排列的產品列表。您打算顯示以相反的字母順序排列的ProductName,請問該怎麼作? ( B )
A. 將SqlCommand對象的CommandType屬性修改成CommandType.Text,將CommandText屬性修改成"SELECT * FROM procProductList ORDER BY ProductName DESC"。而後將這個DataTable對象綁定到DataGrid控件
B. 建立一個基於這個DataTable對象的新的DataView並將這個DataView的Sort屬性設置爲"ProductName DESC"。而後將這個DataView對象綁定到DataGrid控件
C. 將DataGrid控件的AllowSorting屬性設置爲True,並將DataGridColumn的SortExpression屬性設置爲 "ProductName DESC".以顯示ProductName。而後將這個DataTable對象綁定到DataGrid控件
D. 將DataTable對象的DisplayExpression屬性設置爲 "ORDER BY ProductName DESC".。而後將這個DataTable對象綁定到DataGrid控件
127. 什麼是ASP.net中的用戶控件
答:用戶控件就是.ascx擴展名的東西嘍,能夠拖到不一樣的頁面中調用,以節省代碼.好比登錄可能在多個頁面上有,就能夠作成用戶控件,可是有一個問題就是用戶控件拖到不一樣級別的目錄下后里面的圖片等的相對路徑會變得不許確,須要自已寫方法調整.
128. 值類型和引用類型的區別?寫出C#的樣例代碼。
答:結構是值類型,類是引用類型,因此傳結構就是值類型的應用,傳對象或類就是引用類型的.
129. 如何理解委託?
答:聽說至關於函數指針,定義了委託就能夠在不調用原方法名稱的狀況下調用那個方法.
msdn2005中是這樣解釋的:
委託具備如下特色:
委託相似於 C++ 函數指針,但它是類型安全的。
委託容許將方法做爲參數進行傳遞。
委託可用於定義回調方法。
委託能夠連接在一塊兒;例如,能夠對一個事件調用多個方法。
方法不須要與委託簽名精確匹配。
130. 私有程序集與共享程序集有什麼區別?
答:一個私有程序集一般爲單個應用程序所使用,而且存儲於這個應用程序所在的目錄之中,或此目錄下面的一個子目錄中。共享程序集一般存儲在全局程序集緩存 (Global Assembly Cache)之中,這是一個由.NET運行時所維護的程序集倉庫。共享程序集一般是對許多應用程序都有用的代碼庫,好比.NET Framework類
131. CLR與IL分別是什麼含義?
答:CLR:公共語言運行時,相似於Java中的JVM,Java虛擬機;在.Net環境下,各類編程語言使用一種共同的基礎資源環境,這就是 CLR,CLR將直接與*做系統進行通訊,而編程語言如C#.NET將盡可能避免直接與*做系統直接通訊,增強了程序代碼的執行安全性,能夠這樣看:CLR 就是具體的編程語言如:C#.NET與*做系統之間的翻譯,同時它爲具體的編程語言提供了許多資源:
IL,中間語言,也稱MSIL,微軟中間語言,或CIL,通用中間語言;全部.NET源代碼 (無論用哪一種語言編寫)在進行編譯時都被編譯成IL。在應用程序運行時被即時 (Just-In-Time,JIT)編譯器處理成爲機器碼,被解釋及執行。
132. 請解釋ASP.NET中以什麼方式進行數據驗證
答:Aps.net 中有非空驗證,比較驗證,取值範圍驗證,正則表達式驗證及客戶自定義驗證五大控件,另還有一個集中驗證信息處理控件
133. WEB控件能夠激發服務端事件,請談談服務端事件是怎麼發生並解釋其原理?自動傳回是什麼?爲何要使用自動傳回
答:在web控件發生事件時,客戶端採用提交的形式將數據交回服務端,服務端先調用Page_Load事件,而後根據傳回的狀態信息自動調用服務端事件自動傳回是當咱們在點擊客戶端控件時,採用提交表單的形式將數據直接傳回到務端
只有經過自動傳回才能實現服務端事件的機制,若是沒有自動回傳機制就只能調用客戶端事件,而不能調用服務端事件
134. 請解釋web.config文件中的重要節點
appSettings包含自定義應用程序設置。
system.web 系統配置
compilation動態調試編譯設置
customErrors自定義錯誤信息設置
authentication身份驗證,此節設置應用程序的身份驗證策略
authorization受權, 此節設置應用程序的受權策略
135. 請解釋ASP.NET中的web頁面與其隱藏類之間的關係?
答:一個ASP.NET頁面通常都對應一個隱藏類,通常都在ASP.NET頁面的聲明中指定了隱藏類例如一個頁面Tst1.aspx的頁面聲明以下
<%@ Page language="c#" Codebehind="Tst1.aspx.cs" AutoEventWireup="false" Inherits="T1.Tst1" %>
Codebehind="Tst1.aspx.cs" 代表經編譯此頁面時使用哪個代碼文件
Inherits="T1.Tst1" 表用運行時使用哪個隱藏類
136. 什麼是viewstate,可否禁用?是否所用控件均可以禁用?
答:Viewstate是保存狀態的一種機制,EnableViewState屬性設置爲false便可禁用
137. 當發現不能讀取頁面上的輸入的數據時頗有多是什麼緣由形成的?怎麼解決
答:頗有多是在Page_Load中數據處理時沒有進行Page的IsPostBack屬性判斷
138. 請解釋什麼是上下文對象,在什麼狀況下要使用上下文對象
答:上下文對象是指HttpContext類的Current 屬性,當咱們在一個普通類中要訪問內置對象(Response,Request,Session,Server,Appliction等)時就要以使用此對象
139. 請解釋轉發與跳轉的區別?
答:轉發就是服務端的跳轉A頁面提交數據到B頁面,B頁面進行處理而後從服務端跳轉到其它頁面; 跳轉就是指客戶端的跳轉
140. new有幾種用法
第一種:new Class();
第二種:覆蓋方法 public new XXXX() { }
第三種:new 約束指定泛型類聲明中的任何類型參數都必須有公共的無參數構造函數
141. 如何把一個array複製到arrayList裏
答:foreach( object o in array )arrayList.Add(o);
142. datagrid.datasouse能夠鏈接什麼數據源 [dataset,datatable,dataview,IList]
143. 什麼是Windows服務,它的生命週期與標準的EXE程序有什麼不一樣
答:Windows服務是運行在windows後臺指定用戶下(默認System)的應用程序,它沒有標準的UI界面,想比標準的EXE程序,Windows服務是在服務開始的時候建立,而在服務結束的時候銷燬,並且能夠設置服務是否與操做系統一塊兒啓動,一塊兒關閉。它支持三種方式:1)自動方式 2)手動方式 3)禁用。自動方式的時候,windows服務將在OS啓動後自動啓動運行,而手動方式則必須手工啓動服務,禁用的狀況下服務將不能被啓動。另外標準的 EXE默認使用的當前登陸的用戶,而windows服務則默認使用System用戶,這在對系統資源訪問的時候特別須要注意。
144. Windows單個進程所能訪問的最大內存量是多少?它與系統的最大虛擬內存同樣嗎?這對於系統設計有什麼影響?
答:這個須要針對硬件平臺,公式爲單個進程能訪問的最大內存量=2的處理器位數次方/2,好比一般狀況下,32位處理器下,單個進程所能訪問的最大內存量爲:232 /2 = 2G 。單個進程能訪問的最大內存量是最大虛擬內存的1/2,由於要分配給操做系統一半虛擬內存。
145. 什麼是強類型,什麼是弱類型?哪一種更好些?爲何?
答:強類型是在編譯的時候就肯定類型的數據,在執行時類型不能更改,而弱類型在執行的時候纔會肯定類型。沒有好很差,兩者各有好處,強類型安全,由於它事先已經肯定好了,並且效率高。通常用於編譯型編程語言,如c++,java,c#,pascal等,弱類型相比而言不安全,在運行的時候容易出現錯誤,但它靈活,多用於解釋型編程語言,如javascript,vb等
146. PID是什麼?在作系統的故障排除時如何使用它?
PID是進程編號,在系統發現故障的時候,能夠根據它尋找故障所發生的具體進程,而且可經過visual studio.net等ide將故障進程附加到進程中進行調試(debug)
147. 闡述面向接口、面向對象、面向方面編程的區別
答:面向接口更關注的是概念,它的原則是先定義好行爲規範,再根據行爲規範建立實現,嚴格的來講,面向接口應該是面向對象中的一部分吧,由於面向對象也強調的是本末倒置原則,也就是實現依賴於抽象,而抽象不依賴於具體實現,更具比較的應該是面向接口與面向抽象對象,個人體會是面向接口更加靈活,但實現時候,稍微有些代碼冗餘,而面向抽象能夠結合面向接口,先定義接口,再定義抽象類,在抽象類中處理一些公共邏輯,再實現具體實現類。面向對象是對複雜問題的分解。面向方面的編程是一種新概念,它解決了不少面向對象沒法解決的問題,好比面向對象技術只能對業務相關的代碼模塊化,而沒法對和業務無關的代碼模塊化。而面向方面正是解決這一問題的方案,它的關鍵思想是"將應用程序中的商業邏輯與對其提供支持的通用服務進行分離"。
148. 從概念上闡述前期綁定(early-binding)和後期綁定(late-binding)的區別?
答:這個就像是強弱類型的比較類似,前期綁定是在編譯的時候就肯定了要綁定的數據,然後期綁定是在運行的時候才填充數據。因此前期綁定若是失敗,會在編譯時報編譯錯誤,然後期綁定失敗只有在運行時的時候才發生
149. 調用Assembly.Load算靜態引用仍是動態引用?
答:動態
150. SQL SREVER中,向一個表中插入了新數據,如何快捷的獲得自增量字段的當前值
答:
INSERT INTO jobs (job_desc,min_lvl,max_lvl) VALUES ('Accountant',12,125)
SELECT @@IDENTITY AS 'Identity'
151. DateTime.Parse(myString); 這行代碼有什麼問題?
答:有問題,當myString不能知足時間格式要求的時候,會引起異常,建議使用DateTime.TryParse()
152. PDB是什麼東西? 在調試中它應該放在哪裏?
答:PDB是用於保存調試和項目狀態信息的文件,在debug的時候將產生pdb文件,調試的時候應該放在和對應應用程序集相同目錄。
153. 寫一個標準的lock(),在訪問變量的先後建立臨界區,要有"雙重檢查",lock的使用
public
void
LockTest()
{
Object lockObj
=
new
Object();
lock
(lockObj)
{
//
}
}
154. 對比OOP和SOA,它們的目的分別是什麼?
答:我想OOP和SOA應該沒有對比性吧。OOP是一種編程模型,強調將複雜的邏輯分解出小的模塊,特性是繼承,封裝和多態。而SOA是一個技術框架,技術框架和編程模型應該說不是一碼事吧?SOA的思想是將業務邏輯封裝成服務或者中間件提供給應用程序來調用,固然其組件化思想是繼承和發揚了OOP的優勢。
155. XmlSerializer是如何工做的?使用這個類的進程須要什麼ACL權限?
答:我只知道XmlSerializer是將對象的屬性和字段進行序列化和反序列化的,序列化成爲xml數據,反序列化再將xml轉換成對象。應該至少須要ACL權限中的讀權限.
156. 爲何不提倡catch(Exception)?
答:緣由可能有兩點:1. try...catch在出現異常的時候影響性能 2.應該捕獲更具體得異常,好比IOExeception,OutOfMemoryException等
157. Debug.Write和Trace.Write有什麼不一樣?什麼時候應該使用哪個?
答:Debug.Write是調試的時候向跟蹤窗口輸出信息。當編譯模式爲debug的時候纔有效,爲release的時候Debug.Write在編譯的時候會忽略,而Trace則是在debug和release兩種模式下都可以向跟蹤窗口輸出信息。
158. Debug Build和Release Build的區別,是否會有明顯的速度變化?請說明理由。
答:Debug會產生pdb文件,release不會。Debug用於開發時的調試,不能要於部署,而release用於部署.debug編譯一些特殊代碼,好比#IFDEBUG Debug.Write等,而Release則會將那些特殊標記省略
159. JIT是以assembly爲單位發生仍是以方法爲單位發生?這對於工做區有何影響?
答:方法,道理很簡單,由於對於一次運行,極可能只用到一個程序集中極少數類型和對象,而大部分可能並不會被使用,此時CLR傻乎乎的給整個程序集都給Compile了,CLR不是傻瘋了麼
160. a.Equals(b)和a == b同樣嗎?
答:不同。a.Equals(b)表示a與b一致, a==b表示a與b的值相等
161. 在對象比較中,對象一致和對象相等分別是指什麼?
答:對象一致是指兩個對象是同一個對象,引用相同。而對象相等是指兩個對象的值相同,但引用不必定相同
162. 在.NET中如何實現深拷貝(deep copy)?
答:實現IClonable接口
163. 請解釋一下IClonable
答:IClonable方法是實現深度複製的接口,實現它應該能深度複製一個對象出來。深度複製的特徵的調用對象的構造方法,建立新的對象,包括建立對象中嵌套的引用對象的新實例。而Shadow複製則不一樣,是淺表複製,不從新建立新實例。淺表複製的實現是 Object.MemberWiseClone().
深度複製(Deep Copy)與淺表複製(Shadow Copy)的比較
public
class
Name
{
public
string
FirstName;
public
string
LastName;
}
public
class
Person : ICloneable
{
public
Name PersonName;
public
string
Email;
///
<summary>
///
Deep Copy的例子
///
</summary>
///
<returns></returns>
public
Object Clone()
{
Person p
=
new
Person();
p.Email
=
this
.Email;
p.PersonName
=
new
Name();
p.PersonName.FirstName
=
this
.PersonName.FirstName;
p.PersonName.LastName
=
this
.PersonName.LastName;
return
p;
}
public
void
ChangLastName(
string
lastName)
{
this
.PersonName.LastName
=
lastName;
}
public
static
void
Main()
{
Person p
=
new
Person();
p.PersonName
=
new
Name();
p.PersonName.LastName
=
"san
"
;
p.PersonName.FirstName
=
"
zhang
"
;
p.Email
=
"san
zhang@126.com
"
;
Person sameNamePerson
=
p.Clone()
as
Person;
sameNamePerson.ChangLastName(
"
clr_
"
);
Console.WriteLine(p.PersonName.LastName);
Console.WriteLine(sameNamePerson.PersonName.LastName);
Person samePerson
=
p.MemberwiseClone()
as
Person;
samePerson.ChangLastName(
"
Shadow
"
);
Console.WriteLine(p.PersonName.LastName);
Console.WriteLine(sameNamePerson.PersonName.LastName);
Console.Read();
}
}
164.什麼叫裝箱?
答:裝箱(boxing)是將值類型的數據轉化成引用類型,int i=3; object o = i ;即是裝箱過程,而拆箱(unboxing)是將飲用類型數據轉換值類型,好比int j = (int)o;屬於拆箱
165.string是值類型仍是引用類型?
答:引用類型
166. XmlSerializer使用的針對屬性的模式有什麼好處?解決了什麼問題?
答:只序列化有用的數據,而不是序列化整個對象。實現不必的數據冗餘,和提高序列化時的性能。
167. 爲何不該該在.NET中使用out參數?它究竟好很差?
答:我挺喜歡用out參數的,特別是當函數須要有多於1個返回的時候,我比較願意用out,至於它好很差沒研究過 ?
168. 特性可以放到某個方法的參數上?若是能夠,這有什麼用?
答:能夠,做用能夠對參數有進一步限定,好比輸入參數爲int類型,能夠經過容許AttributeTargets=ParameterInfo的Attribute自定義實現來限定輸入參數的大小,好比當輸入參數小於100的時候便報錯。
對方法的參數設置Attribute的例子
[AttributeUsage(AttributeTargets.Parameter)]
public
class
ParameterAtt : Attribute
{
public
int
Min
=
100
;
}
public
class
AttributeTest
{
public
void
TestMethod([ParameterAtt(Min
=
100
)]
int
par1)
{
ParameterInfo para
=
MethodInfo.GetCurrentMethod().GetParameters()[
0
];
ParameterAtt att
=
ParameterAtt.GetCustomAttribute(para,
typeof
(ParameterAtt))
as
ParameterAtt;
if
(att.Min
>
par1)
{
throw
new
Exception(
"
要求para1最小爲
"
+
att.Min);
}
}
}
169. delegate是引用類型仍是值類型?enum、int[]和string呢(難度係數40%)?
答案:delegate引用類型,enum值類型,int[]引用類型,string引用類型(盡供參考)。
170. base這個關鍵字有哪幾種語法?override呢?
答案:base兩個語法,分別是調用基類構造函數和調用基類方法,override用於重寫基類方法(盡供參考)。
171. 請指出C#中是否有下列關鍵字?virtual、sealed、abstract、import、as、in、goto、final、Const、signed、String(提示,僅指出C#中沒有的便可)
答案:沒有的關鍵字:import、final、Const、signed、String(盡供參考)。
172. 在循環:for( int i = 0; i < 100; i++ ) Console.WriteLine( i );中,請指出i++的執行時機。
答案:在Console.WriterLine( i );執行以後(盡供參考)。
173. 試說明continue關鍵字的用處。
答案:立刻開始下一次循環,忽略循環體餘下的語句(盡供參考)。
174. object是C#的關鍵字嗎?請指出C#中有哪些類型關鍵字,如int、float。(提示,寫得越多越好)。
答案:是,object、int、uint、long、ulong、short、ushort、byte、sbyte、char、float、double、decimal、bool,如回答:enum、struct、class、delegate也算對(盡供參考)。
175. C#的XML文檔註釋中(以///開頭的註釋),<summary>標籤用於描述什麼?<param>標籤呢?
答案:<summary>用於某個元素的概要說明,<param>用於某個方法的參數概要說明(盡供參考)。
176. 咱們知道[]是數組和索引器的訪問操做符,但它還有一個語法,是什麼?
答案:特性(Attribute)(盡供參考)
177. 請用代碼簡單描述一下Singleton、抽象工廠、Bridge、Composite(任選三個)的設計模式的概念
178. a=10,b=15,在不用第三方變題的前提下,把a,b的值互換
179. 已知數組int[] max={6,5,2,9,7,4,0};用快速排序算法按降序對其進行排列,並返回數組
180. 請簡述面向對象的多態的特性及意義
181. session喜歡丟值且佔內存,Cookis不安全,請問用什麼辦法代替這兩種原始的方法
182. 對數據的併發採用什麼辦法進行處理較好。
183. 已知Oracle數據庫有GD和ZS兩個數據庫,GD數據庫v_s表有數據寫入時,從v_s表中提取最新數據到ZS數據庫的D_E表中。請問用什麼辦法解決這一問題?若是又碰到不能互訪的問題時,又用什麼辦法解決?
184. 已知Oracle數據庫a,b。如今在a用戶權限下,訪問b數據庫sql語句爲select a.* From b a,請改正這一句Sql的寫法
185. 當對數據庫進行海量級的數據插入時,數據庫出現報錯,錯誤緣由可能有哪些,以你的經驗談談你的解決辦法
186. 算法分析 AH 20060625 12 44 01 CAD001 AH 20060625 12 44 01 CAD001 AH 20060625 13 44 02 CAD001 AH 20060625 14 44 03 CAD001 說明:第二列表示日期,第三列表示溫度,第四列表示水位,第五列表示流量,第6列表示水位測站編碼,每一列表示一個字段 很明顯第一條數據和第二條數據重複,然數據表中有主鍵和外鍵的約束,是不容許有重複的數據存在的,請構造算法將重複的數據Del掉