答:?jiǎn)?dòng)一個(gè)線(xiàn)程是調用start()方法,這并不意味著(zhù)線(xiàn)程就會(huì )立即運行,只是進(jìn)入了可運行狀態(tài)。直接調用run()方法不會(huì )產(chǎn)生線(xiàn)程,而是把它當作普通的方法調用,馬上執行
40.接口是否可繼承接口? 抽像類(lèi)是否可實(shí)現(implements)接口? 抽像類(lèi)是否可繼承實(shí)體類(lèi)(concrete class)?
答:接口可以繼承接口。抽像類(lèi)可以實(shí)現(implements)接口,抽像類(lèi)是否可繼承實(shí)體類(lèi),但前提是實(shí)體類(lèi)必須有明確的構造函數。
41.構造器Constructor是否可被override?
答:構造器Constructor不能被繼承,因此不能重寫(xiě)Overriding,但可以被重載Overloading。
42.是否可以繼承String類(lèi)?
答:不可以,因為String類(lèi)是密封類(lèi),被Sealed修飾符所修飾。
44.兩個(gè)對像值相同(x.equals(y) == true),但卻可有不同的hash code,這句話(huà)對不對? 答:不對,有相同的hash code。
Hash Code:可以簡(jiǎn)單的理解為內存的地址。
'==' : 操作比較的是兩個(gè)變量的值是否相等,對于引用型變量表示的是兩個(gè)變量在堆中存儲
的地址是否相同,即棧中的內容是否相同。
'equals' : 操作表示的兩個(gè)變量是否是對同一個(gè)對象的引用,即堆中的內容是否相同。 而字符串是一個(gè)特殊的引用型類(lèi)型,在C#語(yǔ)言中,重載了string 對象的很多方法方法(包括equals()方法),使string對象用起來(lái)就像是值類(lèi)型一樣。
45.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上? 答:可以。
47.當一個(gè)線(xiàn)程進(jìn)入一個(gè)對象的一個(gè)synchronized方法后,其它線(xiàn)程是否可進(jìn)入此對象的其它方法?
不能,一個(gè)對象的一個(gè)synchronized方法只能由一個(gè)線(xiàn)程訪(fǎng)問(wèn)。
49.List, Set, Map是否繼承自Collection接口?
答:List,Set是Map不是
51.數組有沒(méi)有length()這個(gè)方法? String有沒(méi)有length()這個(gè)方法?
答:數組和string都沒(méi)有Length()方法,只有Length屬性。
52.sleep() 和 wait() 有什么區別?
答:sleep()方法是將當前線(xiàn)程掛起指定的時(shí)間。
wait()釋放對象上的鎖并阻塞當前線(xiàn)程,直到它重新獲取該鎖。
53.short s1 = 1; s1 = s1 + 1;有什么錯? short s1 = 1; s1 += 1;有什么錯?
答:short s1 = 1; s1 = s1 + 1;有錯,s1是short型,s1+1是int型,不能隱式轉化為short型??尚薷臑閟1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正確。
復合賦值表達式自動(dòng)地將所執行計算的結果轉型為其左側變量的類(lèi)型,s1+=1等價(jià)于s1=(short)s1+1;
55.如何處理幾十萬(wàn)條并發(fā)數據?
答:用存儲過(guò)程或事務(wù)。取得最大標識的時(shí)候同時(shí)更新..注意主鍵不是自增量方式這種方法并發(fā)的時(shí)候是不會(huì )有重復主鍵的..取得最大標識要有一個(gè)存儲過(guò)程來(lái)獲取.
56.Session有什么重大BUG,微軟提出了什么方法加以解決?
答:是iis中由于有進(jìn)程回收機制,系統繁忙的話(huà)Session會(huì )丟失,可以用Sate server或SQL Server數據庫的方式存儲Session不過(guò)這種方式比較慢,而且無(wú)法捕獲Session的END事件。
57.進(jìn)程和線(xiàn)程的區別?
答:進(jìn)程是系統進(jìn)行資源分配和調度的單位;線(xiàn)程是CPU調度和分派的單位,一個(gè)進(jìn)程可以有多個(gè)線(xiàn)程,這些線(xiàn)程共享這個(gè)進(jìn)程的資源。
進(jìn)程:進(jìn)程就是一組資源,它們構成了一個(gè)正在運行的程序。
線(xiàn)程:在進(jìn)程中系統創(chuàng )建了一個(gè)叫做線(xiàn)程的內核對象,線(xiàn)程體現了一個(gè)程序的真實(shí)執行情況。
58.堆和棧的區別?
答:棧是編譯期間就分配好的內存空間,因此你的代碼中必須就棧的大小有明確的定義;堆是程序運行期間動(dòng)態(tài)分配的內存空間,你可以根據程序的運行情況確定要分配的堆內存的大小。
棧:它是一個(gè)內存數組,是一個(gè)LIFO的數據結構,數據只能從棧頂插入和刪除。
堆:它是一塊內存區域,在堆里可以分配大塊的內存用于存儲某類(lèi)型的數據,堆里的內存可以以任意順序存入和取出。
59.成員變量和成員函數前加static的作用?
答:
它們用來(lái)反映類(lèi)的狀態(tài)。
靜態(tài)成員它被類(lèi)的所有實(shí)例所共享,所有實(shí)例都訪(fǎng)問(wèn)同一內存位置。
它們獨立于所有的類(lèi)實(shí)例,即使沒(méi)有類(lèi)實(shí)例,也可以調用類(lèi)的靜態(tài)成員。
60.ASP。NET與ASP相比,主要有哪些進(jìn)步?
答:asp解釋形,aspx編譯型,性能提高,可以跟美工的工作分開(kāi)進(jìn)行,更有利于團隊開(kāi)發(fā)。
61.產(chǎn)生一個(gè)int數組,長(cháng)度為100,并向其中隨機插入1-100,并且不能重復。
publicstaticint[] BuildIntArray()
{
int[] retsInt = newint
[100];
List<int> tempList = newList<int>();
Random random = newRandom();
while(tempList.Count < 100)
{
int num = random.Next(1, 101);
if (!tempList.Contains(num))
tempList.Add(num);
}
tempList.Sort();
for (int i = 0; i < tempList.Count; i++)
retsInt[i] = tempList[i];
return retsInt;
}
62.請說(shuō)明在.net中常用的幾種頁(yè)面間傳遞參數的方法,并說(shuō)出他們的優(yōu)缺點(diǎn)。
答:
QueryString 傳遞一個(gè)或多個(gè)安全性要求不高或是結構簡(jiǎn)單的數值。但是對于傳遞
數組或對象的話(huà),就不能用這個(gè)方法了
session(viewstate) 簡(jiǎn)單,但易丟失作用于用戶(hù)個(gè)人,過(guò)量的存儲會(huì )導致服務(wù)器內存
資源的耗盡。
application 對象的作用范圍是整個(gè)全局,也就是說(shuō)對所有用戶(hù)都有效。其常用的方
法用Lock和UnLock
cookie 簡(jiǎn)單,但可能不支持,可能被偽造 Cookie是存放在客戶(hù)端的,而session
是存放在服務(wù)器端的。而且Cookie的使用要配合ASP.NET內置對象Request來(lái)使用 ? input ttype='hidden' 簡(jiǎn)單,可能被偽造
url參數簡(jiǎn)單,顯示于地址欄,長(cháng)度有限
Server.Transfer 把流程從當前頁(yè)面引導到另一個(gè)頁(yè)面中,新的頁(yè)面使用前一個(gè)頁(yè)面
的應答流
數據庫穩定,安全,但性能相對弱
63.請指出GAC的含義?
答:全局程序集緩存。
GAC(Global Assembly Cache),他的作用是可以存放一些有很多程序都要用到的公共Assembly。這樣,很多程序就可以從GAC里面取得Assembly,而不需要再把所有要用到的Assembly都拷貝到應用程序的執行目錄下面。
64.向服務(wù)器發(fā)送請求有幾種方式?
答:get,post。get一般為鏈接方式,post一般為按鈕方式。
區別:
Get方式,服務(wù)器端用Request.Qurystring取變量的值,安全性不高,傳送數據量小。 post方式,服務(wù)器端用Request.Form獲取提交的數據,安全性高。
建議:
1、get方式的安全性較Post方式要差些,包含機密信息的話(huà),建議用Post數據提交方式;
2、在做數據查詢(xún)時(shí),建議用Get方式;而在做數據添加、修改或刪除時(shí),建議用Post方式。
65.DataReader與Dataset有什么區別?
答:
連接數據庫時(shí)DataSet是非面向連接的,而DataReader是面向連接的。
DataSet表示一個(gè)數據集,是數據在內存中的緩存,可以包括多個(gè)表,是保存數據的數
據結構。而Datareader不承擔保存數據的責任,它只負責從數據源讀取數據到本地而已,它不是數據結構,而是網(wǎng)絡(luò )通訊組件的高層封裝。
DataSet可以離線(xiàn)處理,前后滾動(dòng),而DataReader不能離線(xiàn)處理,且是只讀向前的,速
度快。
DataSet可以存儲數據庫各種對象的,比如表觸發(fā)器等,可以更新回原來(lái)的數據庫。而
DataReader只能存儲游標記錄,不可以更新回原來(lái)的數據庫, 它類(lèi)似一個(gè)只能向前的游標記錄集。
66.軟件開(kāi)發(fā)過(guò)程一般有幾個(gè)階段?每個(gè)階段的作用?答:
軟件開(kāi)發(fā)一般分為五個(gè)階段:
問(wèn)題的定義及規劃
此階段是軟件開(kāi)發(fā)與需求方共同討論,主要確定軟件的開(kāi)發(fā)目標及其可行性。
需求分析
在確定軟件開(kāi)發(fā)可行性的情況下,對軟件需要實(shí)現的各個(gè)功能進(jìn)行詳細需求分析。需求分析階段是一個(gè)很重要的階段,這一階段做的好,將為整個(gè)軟件項目的開(kāi)發(fā)打下良好的基礎?!拔ㄒ徊蛔兊氖亲兓旧怼?,同樣軟件需求也是在軟件開(kāi)發(fā)過(guò)程中不斷變化和深入的,因此,我們必須定制需求變更計劃來(lái)應付這種變化,以保護整個(gè)項目的正常進(jìn)行。 ? 軟件設計
此階段中要根據需求分析的結果,對整個(gè)軟件系統進(jìn)行設計,如系統框架設計、數據庫設計等。軟件設計一般分為概要設計和詳細設計,軟件設計將為軟件程序編寫(xiě)打下良好的基礎。
程序編碼
此階段是將軟件設計的結果轉化為計算機可運行的程序代碼。在程序編碼中必定要制定統一、符合標準的編寫(xiě)規范。以保證程序的可讀性、易維護性。提高程序的運行效率。 ? 軟件測試
在軟件設計完成之后要進(jìn)行嚴密的測試,一發(fā)現軟件在整個(gè)軟件設計過(guò)程中存在的問(wèn)題并加以糾正。整個(gè)測試階段分為單元測試、組裝測試、系統測試三個(gè)階段進(jìn)行。測試方法主要有白盒測試和黑盒測試。
6.部署及維護。
67.在c#中using和new這兩個(gè)關(guān)鍵字有什么意義,請寫(xiě)出你所知道的意義?
Uning:
using做為命名空間指令:通過(guò)在源文件頂端放置Using命名空間指令以避免不得
不使用長(cháng)名稱(chēng),它通知編譯器你將要使用來(lái)自某個(gè)指定命名空間的類(lèi)型。
using做為別名指令:它允許對一個(gè)命名空間或命名空間中的一個(gè)類(lèi)型起一個(gè)別名。 ? using語(yǔ)句:某些類(lèi)型的非托管對象有數量限制或很耗費系統資源,這樣在代碼使
用完它們后,就得盡可能快的釋放它們,using語(yǔ)句有助于簡(jiǎn)化該過(guò)程并確保這些資源被適當的處置。
New :
創(chuàng )建類(lèi)和結構的實(shí)例。
隱藏基類(lèi)的方法。
創(chuàng )建匿名類(lèi)型(var和new關(guān)鍵字一起使用時(shí)可以創(chuàng )建匿名類(lèi)型,匿名類(lèi)型只是一
個(gè)繼承了Object的、沒(méi)有名稱(chēng)的類(lèi),該類(lèi)的定義從初始化器中推斷,類(lèi)似于隱匿類(lèi)型化的變量)。
68.需要實(shí)現對一個(gè)字符串的處理,首先將該字符串首尾的空格去掉,如果字符串中間還有連續空格的話(huà),僅保留一個(gè)空格,即允許字符串中間有多個(gè)空格,但連續的空格數不可超過(guò)一個(gè). 答: string str = ' afdkd askdfji ksdafj ';
string strAfter = Regex.Replace(str.Trim(), @'\s+', ' ');
69.下面這段代碼輸出什么?為什么?
int i = 5;
int j = 5;
if (Object.ReferenceEquals(i, j))
Console.WriteLine('Equal');
else
Console.WriteLine('Not Equal');
答:Not Equal,因為ReferenceEquals是Object的靜態(tài)方法,用于比較兩個(gè)引用類(lèi)型的對象是否是對于同一個(gè)對象的引用,對于值類(lèi)型它總是返回false。
34.ReferenceEquals, == , Equals的區別
String對于聲明的相同的字符串在堆上只保留一個(gè)Copy,所以有相同字符串值的兩個(gè)字
符串變量將會(huì )指向相同的Reference。
ReferenceEquals:
它是Object的靜態(tài)方法,用于比較兩個(gè)引用類(lèi)型的對象是否是對于同一個(gè)對象的引用,對于值類(lèi)型它總是返回false。
==:
它是一個(gè)可以重載的二元操作符,可以用于比較兩個(gè)對象是否相等。
對于內置值類(lèi)型,==判斷的是兩個(gè)對象的代數值是否相等。它會(huì )根據需要自動(dòng)進(jìn)行必要的類(lèi)型轉換,并根據兩個(gè)對象的值是否相等返回true或者false,而對于用戶(hù)定義的值類(lèi)型,如果沒(méi)有重載==操作符,==將是不能夠使用的。
對于引用類(lèi)型,== 默認的行為與ReferenceEquals的行為相同,僅有兩個(gè)對象指向同一個(gè)Reference的時(shí)候才返回true。但是.NET Framework中的類(lèi)很多對==進(jìn)行了重載,例如String類(lèi)的==與Equals的行為相同,判斷兩個(gè)字符串的內容是否相等。所以在應用中,對于系統定義的引用類(lèi)型建議不要使用==操作符,以免程序出現與預期不同的運行結果。 ? Equals():
它對于值類(lèi)型和引用類(lèi)型的定義不同,對于值類(lèi)型,類(lèi)型相同,并且數值相同(對于struct的每個(gè)成員都必須相同),則Equals返回 true,否則返回false。而對于引用類(lèi)型,默認的行為與ReferenceEquals的行為相同,僅有兩個(gè)對象指向同一個(gè)Reference的時(shí)候才返回true??梢愿鶕枰獙quals進(jìn)行重載,例如String類(lèi)的Equals用于判斷兩個(gè)字符串的內容是否相等。
70.什么叫做SQL注入,如何防止?請舉例說(shuō)明。
聯(lián)系客服