101、ASP.net的身份驗證方式有哪些?分別是什么原理?
答:Windwos(默認)用IIS...
From(窗體)用帳戶
Passport(密鑰)
102、在.net中,配件的意思是?
答:程序集。(中間語言,源數據,資源,裝配清單)
103、net Remoting 的工作原理是什么?
答:服務器端向客戶端發送一個進程編號,一個程序域編號,以確定對象的位置
104、根據線程安全的相關知識,分析以下代碼,當調用test方法時i>10時是否會引起死鎖?並簡要說明理由。
public void test(int i)
{
lock(this)
{
if (i>10)
{
i--;
test(i);
}
}
}
答:不會發生死鎖,(但有一點int是按值傳遞的,所以每次改變的都只是一個副本,因此不會出現死鎖。但如果把int換做一個object,那么死鎖會發生)
106、簡要談一下您對微軟.NET 構架下remoting和webservice兩項技術的理解以及實際中的應用。
答:WS主要是可利用HTTP穿透防火牆。Remoting可以利用TCP/IP,二進制傳送提高效率
107、用C#實現以下功能
a 產生一個int數組,長度為100,並向其中隨機插入1-100,並且不能重復
答 :List L=new List();
Random random = new Random();
for (int i = 1; i <= 100; i++)
{
if (L.IndexOf(i) < 0)
{
L.Add(random.Next(1,100));
}
}--以上代碼有誤
更改如下:
static void Main(string[] args) { List<int> lst = new List<int>(); Random r = new Random(); while (true) { int temp = r.Next(1, 101); if (lst.Count == 100) { break; } if (!lst.Contains(temp)) { lst.Add(temp); } } for (int i = 0; i < lst.Count; i++) { Console.WriteLine(lst[i]); } Console.Read(); }
b 對上面生成的數組排序,需要支持升序、降序兩種順序
答 L.Reverse(lst);
L.Sort(lst);
雖然上面的代碼,實現題目的要求,但是如果是1到100萬或者更大,這樣的每次判斷是否包含這樣的一個數,勢必會影響到性能。
網上找到一種更好的實現方式:
(1)把N個數放到容器A(int數組)中.
(2)從N個數中隨機取出1個數放入容器B(int數組)中.
(3)把容器A中最后一個數與隨機抽取的數對調 或者 把容器A中最后一個數覆蓋隨機抽取出來的數.
(4)這時從容器A(假設N個數,索引0 到 索引N-2)之間隨機取一個數.再放入容器B中,重復此步驟.
說明:也就是第二次是從容器A中 第一個元素到倒數第二個元素 中隨機取一個數.
這種好處是,隨機數所取范圍逐步縮小,而且杜絕了大數據時集合執行刪除操作時產生的瓶頸。
static void Main(string[] args) { int[] result = GetRandom(100); for (int i = 0; i < result.Length; i++) { Console.WriteLine(result[i]); } Console.WriteLine("over:" + result.Length); Console.Read(); } /// <summary> /// 獲得無重復隨機數組 /// </summary> /// <param name="n">上限n</param> /// <returns>返回隨機數組</returns> static int[] GetRandom(int n) { //容器A和B int[] arryA = new int[n]; int[] arryB = new int[n]; //填充容器a for (int i = 0; i < arryA.Length; i++) { arryA[i] = i + 1; } //隨機對象 Random r = new Random(); //最后一個元素的索引 如n=100,end=99 int end = n - 1; for (int i = 0; i < n; i++) { //生成隨機數 因為隨機的是索引 所以從0到100取,end=100 //一個大於等於 minValue 且小於 maxValue 的 32 位帶符號整數,即:返回的值范圍包括 minValue 但不包括 maxValue。 //如果 minValue 等於 maxValue,則返回 minValue // int minValue = 0; int maxValue = end + 1; int ranIndex = r.Next(minValue, maxValue); //把隨機數放在容器B中 arryB[i] = arryA[ranIndex]; //用最后一個元素覆蓋取出的元素 arryA[ranIndex] = arryA[end]; //縮減隨機數生成的范圍 end--; } //返回生成的隨機數組 return arryB; }
108、請說明.net中的錯誤處理機制,並舉例
答 異常是從 Exception 類類繼承的對象。異常從發生問題的代碼區域引發,然后沿堆棧向上傳遞,直到應用程序處理它或程序終止。
try
{ //執行代碼,不確定是否會出錯 }
catch
{ //出錯處理 }
finally
{ //無論怎樣,都要執行 }
109、請說出強名的含義
答垃圾回收的原理是根據是否空引用,和該數據類型占用內存來判斷該收回多少內存.強類型說白就是必須要有個數據類型.
110、請列出c#中幾種循環的方法,並指出他們的不同
答 FOR WHILE foreach do while
111、請指出GAC的含義
答 全局訪問緩存
112、SQL SREVER中,向一個表中插入了新數據,如何快捷的得到自增量字段的當前值
答 INSERT INTO jobs (job_desc,min_lvl,max_lvl)
VALUES ('Accountant',12,125)
113、什么是WEB控件?使用WEB控件有那些優勢?
答 web控件就是可以在服務器執行的控件,優勢在於可以回傳數據,帶有事件驅動
114、 請解釋ASP。NET中以什么方式進行數據驗證?
答 .net中提供了幾個數據驗證控件,可以在服務器端或者客戶端進行驗證。
115、請談談對正則表達式的看法?
答: 主要用在字符串的匹配上面,與具體的語言環境無關。
116、 ASP。NET中共有幾種類型的控件?各有什么區別?
答 Html 控件 傳統的html標記
Web 控件 可以回傳數據,事件驅動
自定義 控件 在原有控件的基礎上增加功能
復合控件 多個子控件復合成一個新的控件
117、 WEB控件可以激法服務端事件,請談談服務端事件是怎么發生並解釋其原理?自動傳回是什么?為什么要使用自動傳回。
答 通過實現IPostBack這個接口來執行事件。自動回傳就是AutoPostBack,使用自動回傳可以監視客戶端變化情況並將這種改變返回到服務器端
118、 WEB控件及HTML服務端控件能否調用客戶端方法?如果能,請解釋如何調用?
答 能,服務器端控件在html中表現形式還是html標記,所以可以執行客戶端事件,有多種方式:1、control.Attributes["onclick"]="...;";
2、<script for="controlName" event="onclick"></script>
119、什么是viewstate,能否禁用?是否所用控件都可以禁用?
答 可以全部禁用,viewstate就是hidden input,只不過加上了微軟的編碼方式記錄控件的狀態
120、 當發現不能讀取頁面上的輸入的數據時很有可能是什么原因造成的?怎么解決
答 可能就是事件沒有關聯,或者根本就沒有寫讀取代碼。
解決 檢查代碼, 設斷點調試
121、請解釋一個WEB頁面中代碼執行次序。
答 參看.cs 知道最先執行OnInit(); 然后到Page_Load,最后到具體的執行事件。
122、請解釋什么是上下文對象,在什么情況下要使用上下文對象
答 HttpContext, 在類中調用的時候需要用到HttpContext
123、請解釋轉發與跳轉的區別?
答 Transfer 是轉發 包括HttpHandler對象
Redirect 就是跳轉
Server.Transfer(ASP 3.0 以上) 和 Response.Redirect 在以前的 ASP 中就存在了,Page.Navigate 是 ASP.NET Beta 1 提供的新功能,它們之間的區別在於:
1、 Server.Transfer - 用於把處理的控制權從一個頁面轉移到另一個頁面,在轉移的過程中,沒有離開服務器,內部控件(如:request, session 等)的保存的信息不變,因此,你能從頁面 A 跳到頁面 B 而不會丟失頁面 A 中收集的用戶提交信息。此外,在轉移的過程中,瀏覽器的 URL 欄不變。
2、Response.Redirect - 發送一個 HTTP 響應到客戶端,告訴客戶端跳轉到一個新的頁面,客戶端再發送跳轉請求到服務器。使用此方法時,將無法保存所有的內部控件數據,頁面 A 跳轉到頁面 B,頁面 B 將無法訪問頁面 A 中 Form 提交的數據。
3、Page.Navigate - Page.Navigate 實現的功能和 Response.Redirect 差不多,它實際上包括三個步驟:首先調用 Response.Redirect,其次依次卸載所有的控件,最后調用 Response.End。
124、 請解釋ASP。NET中button linkbutton imagebutton 及hyperlink這四個控件之間的功別
答 button imagebutton 將數據傳遞回服務器
hyperlinK 頁面之間的導航
linkbutton主要用於將數據保存到服務器或訪問服務器上的數據
125、請解釋一下。NET多層應用程序中層與層之間以那幾種方式進行數據傳遞。並解釋你自己的項目中采用那種方式進行。
答 這個傳遞方式不定,很多都是傳遞DataSet, XML也可以
126、如果出現ASP。NET中的事件不能觸發可能由於什么原因造成?
答 事件丟失,特別是使用vss的時候最容易造成這種情況,原因不明
127、如果需要在datagride控件中的某一列中添加下拉列表框並綁定數據怎么解決?
答 使用模板列來添加dropdownlist,綁定數據使用代碼前置的方式
128、請解釋asp.net中的數據綁定與傳統數據綁定有什么區別?
答 更靈活 更方便
129、請解釋.net采用委托實現的事件模型與JAVA中采用接口實現的事件模型有什么區別。
答 以圖示方式解釋。
130、請解釋接口的顯式實現有什么意義?
答 規定強制執行,保持一致
131、 什么情況用HTML控件,什么情況用WEB控件,並比較兩者差別
答 客戶端表現用html控件,如果想和server端交互,那么加上runat=server,它就成了服務器端控件,但它沒有web控件的很多方法和屬性,如果你需要用到,那么還是用web controls
132、用Singleton如何寫設計模式
答:static屬性里面new ,構造函數private
133、什么是Application Pool?
答:Web應用,類似Thread Pool,提高並發性能。
134、什么是虛函數?什么是抽象函數?
答:虛函數:沒有實現的,可由子類繼承並重寫的函數。抽象函數:規定其非虛子類必須實現的函數,必須被重寫。
135、什么是XML?
答:XML即可擴展標記語言。eXtensible Markup Language.標記是指計算機所能理解的信息符號,通過此種標記,計算機之間可以處理包含各種信息的文章等。如何定義這些標記,即可以選擇國際通用的標記語言,比如HTML,也可以使用象XML這樣由相關人士自由決定的標記語言,這就是語言的可擴展性。XML是從SGML中簡化修改出來的。它主要用到的有XML、XSL和XPath等。
136、什么是Web Service?UDDI?
答:Web Service便是基於網絡的、分布式的模塊化組件,它執行特定的任務,遵守具體的技術規范,這些規范使得Web Service能與其他兼容的組件進行互操作。
UDDI 的目的是為電子商務建立標准;UDDI是一套基於Web的、分布式的、為Web Service提供的、信息注冊中心的實現標准規范,同時也包含一組使企業能將自身提供的Web Service注冊,以使別的企業能夠發現的訪問協議的實現標准。
137、什么是ASP.net中的用戶控件?
答:用戶控件一般用在內容多為靜態,或者少許會改變的情況下..用的比較大..類似ASP中的include..但是功能要強大的多。
138、C#中 property 與 attribute的區別,他們各有什么用處,這種機制的好處在哪里?
答:一個是屬性,用於存取類的字段,一個是特性,用來標識類,方法等的附加性質
139、XML 與 HTML 的主要區別
答:1. XML是區分大小寫字母的,HTML不區分。
2. 在HTML中,如果上下文清楚地顯示出段落或者列表鍵在何處結尾,那么你可以省略</p>或者</li>之類的結束 標記。在XML中,絕對不能省略掉結束標記。
3. 在XML中,擁有單個標記而沒有匹配的結束標記的元素必須用一個 / 字符作為結尾。這樣分析器就知道不用 查找結束標記了。
4. 在XML中,屬性值必須分裝在引號中。在HTML中,引號是可用可不用的。
5. 在HTML中,可以擁有不帶值的屬性名。在XML中,所有的屬性都必須帶有相應的值。
140、在Asp.net中所有的自定義用戶控件都必須繼承自________?
答:Control。
142、在.Net中所有可序列化的類都被標記為_____?
答:[serializable]
143、當類T只聲明了私有實例構造函數時,則在T的程序文本外部,___可以___(可以 or 不可以)從T派生出新的類,不可以____(可以 or 不可以)直接創建T的任何實例。
答:不可以,不可以。
144、 C#中 property 與 attribute的區別,他們各有什么用處,這種機制的好處在哪里?
答:attribute:自定義屬性的基類;property :類中的屬性
145、C#可否對內存進行直接的操作?
答:在.net下,.net引用了垃圾回收(GC)功能,它替代了程序員 不過在C#中,不能直接實現Finalize方法,而是在析構函數中調用基類的Finalize()方法
146、大概描述一下ASP。NET服務器控件的生命周期
答:初始化 加載視圖狀態 處理回發數據 加載 發送回發更改通知 處理回發事件 預呈現 保存狀態 呈現 處置卸載
Anonymous Inner Class (匿名內部類) 是否可以extends(繼承)其它類,是否可以implements(實現)interface(接口)?
答:不能,可以實現接口
147.Static Nested Class 和 Inner Class的不同,說得越多越好
答:Static Nested Class是被聲明為靜態(static)的內部類,它可以不依賴於外部類實例被實例化。而通常的內部類需要在外部類實例化后才能實例化。
148.,&和&&的區別。
&是位運算符,表示按位與運算,&&是邏輯運算符,表示邏輯與(and).
149.HashMap和Hashtable的區別。
答:HashMap是Hashtable的輕量級實現(非線程安全的實現),他們都完成了Map接口,主要區別在於HashMap允許空(null)鍵值(key),由於非線程安全,效率上可能高於Hashtable.
150.short s1 = 1; s1 = s1 + 1;有什么錯? short s1 = 1; s1 += 1;有什么錯?
答:short s1 = 1; s1 = s1 + 1; (s1+1運算結果是int型,需要強制轉換類型)
short s1 = 1; s1 += 1;(可以正確編譯)
151、Overloaded的方法是否可以改變返回值的類型?
答:Overloaded的方法是可以改變返回值的類型。
152、error和exception有什么區別?
答:error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說內存溢出。不可能指望程序能處理這樣的情況。
exception 表示一種設計或實現問題。也就是說,它表示如果程序運行正常,從不會發生的情況。
153、<%# %> 和 <% %> 有什么區別?
答:<%# %>表示綁定的數據源
<% %>是服務器端代碼塊
154、你覺得ASP.NET 2.0(VS2005)和你以前使用的開發工具(.Net 1.0或其他)有什么最大的區別?你在以前的平台上使用的哪些開發思想(pattern / architecture)可以移植到ASP.NET 2.0上 (或者已經內嵌在ASP.NET 2.0中)
答:1 ASP.NET 2.0 把一些代碼進行了封裝打包,所以相比1.0相同功能減少了很多代碼.
2 同時支持代碼分離和頁面嵌入服務器端代碼兩種模式,以前1.0版本,.NET提示幫助只有在分離的代碼文件,無 法 在頁面嵌入服務器端代碼獲得幫助提示,
3 代碼和設計界面切換的時候,2.0支持光標定位.這個我比較喜歡
4 在綁定數據,做表的分頁.UPDATE,DELETE,等操作都可以可視化操作,方便了初學者
5 在ASP.NET中增加了40多個新的控件,減少了工作量
155、重載與覆蓋的區別?
答:1、方法的覆蓋是子類和父類之間的關系,是垂直關系;方法的重載是同一個類中方法之間的關系,是水平關系
2、覆蓋只能由一個方法,或只能由一對方法產生關系;方法的重載是多個方法之間的關系。
3、覆蓋要求參數列表相同;重載要求參數列表不同。
4、覆蓋關系中,調用那個方法體,是根據對象的類型(對象對應存儲空間類型)來決定;重載關系,是根據調 用時的實參表與形參表來選擇方法體的。
156、描述一下C#中索引器的實現過程,是否只能根據數字進行索引?
答:不是。可以用任意類型。
124.SQLSERVER服務器中,給定表 table1 中有兩個字段 ID、LastUpdateDate,ID表示更新的事務號, LastUpdateDate表示更新時的服務器時間,請使用一句SQL語句獲得最后更新的事務號
答:Select ID FROM table1 Where LastUpdateDate = (Select MAX(LastUpdateDate) FROM table1)
157、分析以下代碼。
public static void test(string ConnectString)
{
System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection();
conn.ConnectionString = ConnectString;
try
{
conn.Open();
…….
}
catch(Exception Ex)
{
MessageBox.Show(Ex.ToString());
}
finally
{
if (!conn.State.Equals(ConnectionState.Closed))
conn.Close();
}
}
請問
1)以上代碼可以正確使用連接池嗎?
答:回答:如果傳入的connectionString是一模一樣的話,可以正確使用連接池。不過一模一樣的意思是,連字符的空格數,順序完全一致。
2)以上代碼所使用的異常處理方法,是否所有在test方法內的異常都可以被捕捉並顯示出來?
答:只可以捕捉數據庫連接中的異常吧. (finally中,catch中,如果有別的可能引發異常的操作,也應該用try,catch。所以理論上並非所有異常都會被捕捉。)
158、公司要求開發一個繼承System.Windows.Forms.ListView類的組件,要求達到以下的特殊功能:點擊ListView各列列頭時,能按照點擊列的每行值進行重排視圖中的所有行 (排序的方式如DataGrid相似)。根據您的知識,請簡要談一下您的思路:
答:根據點擊的列頭,包該列的ID取出,按照該ID排序后,在給綁定到ListView中
159、abstract class和interface有什么區別?
答:聲明方法的存在而不去實現它的類被叫做抽象類(abstract class),它用於要創建一個體現某些基本行為的類,並為該類聲明方法,但不能在該類中實現該類的情況。不能創建abstract 類的實例。然而可以創建一個變量,其類型是一個抽象類,並讓它指向具體子類的一個實例。不能有抽象構造函數或抽象靜態方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現,否則它們也是抽象類為。取而代之,在子類中實現該方法。知道其行為的其它類可以在類中實現這些方法。
接口(interface)是抽象類的變體。在接口中,所有方法都是抽象的。多繼承性可通過實現這樣的接口而獲得。接口中的所有方法都是抽象的,沒有一個有程序體。接口只可以定義static final成員變量。接口的實現與子類相似,除了該實現類不能從接口定義中繼承行為。當類實現特殊接口時,它定義(即將程序體給予)所有這種接口的方法。然后,它可以在實現了該接口的類的任何對象上調用接口的方法。由於有抽象類,它允許使用接口名作為引用變量的類型。通常的動態聯編將生效。引用可以轉換到接口類型或從接口類型轉換,instanceof 運算符可以用來決定某對象的類是否實現了接口
160、C#中 property 與 attribute的區別,他們各有什么用處,這種機制的好處在哪里?
property和attribute漢語都稱之為屬性。不過property是指類向外提供的數據區域。而attribute則是描述對象在編譯時或運行時屬性的。這兩者是有本質區別的。
52.sleep() 和 wait() 有什么區別?
答:sleep()方法是使線程停止一段時間的方法。在sleep 時間間隔期滿后,線程不一定立即恢復執行。這是因為在那個時刻,其它線程可能正在運行而且沒有被調度為放棄執行,除非(a)“醒來”的線程具有更高的優先級
(b)正在運行的線程因為其它原因而阻塞。
wait()是線程交互時,如果線程對一個同步對象x 發出一個wait()調用,該線程會暫停執行,被調對象進入等待狀態,直到被喚醒或等待時間到。
161、談談final, finally, finalize的區別。
答:
final—修飾符(關鍵字)如果一個類被聲明為final,意味着它不能再派生出新的子類,不能作為父類被繼承。因此 一個類不能既被聲明為 abstract的,又被聲明為final的。將變量或方法聲明為final,可以保證它們在使用中 不被改變。被聲明為final的變量必須在聲明時給定初值,而在以后的引用中只能讀取,不可修改。被聲明為 final的方法也同樣只能使用,不能重載
finally—再異常處理時提供 finally 塊來執行任何清除操作。如果拋出一個異常,那么相匹配的 catch 子句就會 執行,然后控制就會進入 finally 塊(如果有的話)。
finalize—方法名。Java 技術允許使用 finalize() 方法在垃圾收集器將對象從內存中清除出去之前做必要的清理 工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。它是在 Object 類中定義的 ,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行其他清理工作。finalize() 方法是在垃圾收集器刪除對象之前對這個對象調用的。
162、如何處理幾十萬條並發數據?
答:用存儲過程或事務。取得最大標識的時候同時更新..注意主鍵不是自增量方式這種方法並發的時候是不會有重復主鍵的..取得最大標識要有一個存儲過程來獲取.
163、Session有什么重大BUG,微軟提出了什么方法加以解決?
答:是iis中由於有進程回收機制,系統繁忙的話Session會丟失,可以用Sate server或SQL Server數據庫的方式存儲Session不過這種方式比較慢,而且無法捕獲Session的END事件。
164、堆和棧的區別?
答:
棧:由編譯器自動分配、釋放。在函數體中定義的變量通常在棧上。
堆:一般由程序員分配釋放。用new、malloc等分配內存函數分配得到的就是在堆上。
165、成員變量和成員函數前加static的作用?
答:它們被稱為常成員變量和常成員函數,又稱為類成員變量和類成員函數。分別用來反映類的狀態。比如類成員變量可以用來統計類實例的數量,類成員函數負責這種統計的動作。
166、啟動一個線程是用run()還是start()?
答:啟動一個線程是調用start()方法,使線程所代表的虛擬處理機處於可運行狀態,這意味着它可以由JVM調度並執行。這並不意味着線程就會立即運行。run()方法可以產生必須退出的標志來停止一個線程。
167、接口是否可繼承接口? 抽象類是否可實現(implements)接口? 抽象類是否可繼承實體類(concrete class)?
答:接口可以繼承接口。抽象類可以實現(implements)接口,抽象類是否可繼承實體類,但前提是實體類必須有明確的構造函數。
168、構造器Constructor是否可被override?
答:構造器Constructor不能被繼承,因此不能重寫Overriding,但可以被重載Overloading。
169、是否可以繼承String類?
答:String類是final類故不可以繼承。
170、try {}里有一個return語句,那么緊跟在這個try后的finally {}里的code會不會被執行,什么時候被執行,在return前還是后?
答:會執行,在return前執行。
171、兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對?
答:不對,有相同的hash code。
172、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
答:switch(expr1)中,expr1是一個整數表達式。因此傳遞給 switch 和 case 語句的參數應該是 int、 short、 char 或者 byte。long,string 都不能作用於swtich。
173、當一個線程進入一個對象的一個synchronized方法后,其它線程是否可進入此對象的其它方法?
不能,一個對象的一個synchronized方法只能由一個線程訪問。
174、abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized?
答:都不能。
175、List, Set, Map是否繼承自Collection接口?
答:List,Set是Map不是
176、Set里的元素是不能重復的,那么用什么方法來區分重復與否呢? 是用==還是equals()? 它們有何區別?
答:Set里的元素是不能重復的,那么用iterator()方法來區分重復與否。equals()是判讀兩個Set是否相等。
equals()和==方法決定引用值是否指向同一對象equals()在類中被覆蓋,為的是當兩個分離的對象的內容和類型相配的話,返回真值。
177、數組有沒有length()這個方法? String有沒有length()這個方法?
答:數組沒有length()這個方法,有length的屬性。String有有length()這個方法。
ava.lang.StringBuffer線程安全的可變字符序列。一個類似於 String 的字符串緩沖區,但不能修改。雖然在任意時間點上它都包含某種特定的字符序列,但通過某些方法調用可以改變該序列的長度和內容。
178、String Stringbuffer和StringBuilder的區別?
要談它們的區別,首先先說說它們之間的相同的地方,首先他們都是存儲字符的集合,他們的最大長度是2G,他們在存儲字符串數據結構都采用了字符數組,也就是說他們內部都定義了一個字符型數組,用於存儲字符串的值。
它們的不同點有以下幾點:
1) 字符型數組固定長度和可變長度的區別:
String型內部定義的數組是固定長度的,一旦使用者給字符串數組對象賦值后,它內部的字符型數組的長度就固定了;
StringBuff型數組內部數組也是固定長度的,但是在運行狀態下,它能夠自己動態的擴充字符型數組的容量。
2) 效率的區別:
String型數組在所有自身操作,都會比StringBuff效率高。但是如果做多字符串合並的操作時,StringBuff會比String效率高很多。
其原因就是Stirng每次都是重新創建新的String對象然后進行全字符串拷貝。而StringBuff在沒有達到他的容量極限時,它之后進行部分字符串拷貝工作。
例如:String str1=”1234”;
Str1=str1+”5678”;
它要作的工作是,首先重新創建一個str1對象,它的長度是8,然后把”1234”拷貝到新的str1中,然后再把”5678”拷貝到新的str1中,這種對於大字符串操作時效率是非常的底,同時還會出現內存溢出的情況,應為原來的str1垃圾回收器可能沒有及時的回收進行內存釋放。
例如:StringBuff buff1
Buff1.append(“11111”);
它的操作是,首先判斷內部字符型數組對象value的容量是否能裝載要合並的字符串,如果能直接將新的字符串“11111”,直接拷貝過來,如果不能也要創建一個新的字符型數組對象,這個字符型數組對象是原來字符型數組對象value長度的兩倍,然后把value內容拷貝過來,然后把新的字符串拷貝過來,最后把這個擴容的字符型數組對象賦值給value。
在大容量字符串數組操作時,這個要比String效率高很多。
3)線程安全的。在多線程環境下,對StringBuff對象的操作都是線程安全的,也就是說每一時刻只有一個線程能夠處理StringBuff對象。
179、你在寫復雜web界面的時候遇到的最大困難是哪些方面
其實,復雜頁面最大的困難並非如何畫出此界面,而是如何讓此界面清晰有條理.我們做頁面,並非僅顯示數據,而是要准確/清晰地顯示數據,想想看,如果用戶要在此頁面中查找一個數據,卻雜亂無章,難以查看,你說用戶會滿意嗎?
180、NET里面的datagrid翻頁大多是先把數據讀全部取到dataset里面,但是遇到10W條數據以上,這樣的翻頁事件開銷會很大,頁面執行起來反映很慢,你有什么好方法解決?
在數據量大的時候,有兩個解決辦法
1.使用存儲過程.並且,並非因為存儲過程比較快的原因.由於在數據庫內部的存儲過程,能夠實現一些特殊的功能,比如說,可以直接根據當前的排序結果,僅僅取需要的幾條數據,如此,無論數據是多少,它僅僅取需要的幾條.
2.在實際的操作中,取出的數據,並非你有10萬條,它就會把10萬條全部取出來,而是受限於服務器的緩存,其實一次一般僅取1000條左右的記錄,無論你數據多少,它僅會一次取這么多出來.所以,配合分頁控件,再配合.NET提供的加載N條數據的方法,數據量大的情況下,不見得就會慢.
據我測試,真正慢的,是在取數據總共多少條這個步驟上.此操作在數據少時,沒有影響,但在百萬條記錄以上時,求取數據總數,耗時就會大量增加.所以,大數據量條件下,即不應再顯示"共幾條/當前第幾條"這樣的信息.
181、權限控制方面問題:
從面向對象的角度講,如果一個程序中,沒有應用角色及角色組的話,那么這個程序是不合格的.一般來說,權限是由權限及流程角色組合而來的,如果僅有權限而沒有角色,那么這個控制不靈活;如果僅有角色沒有權限,那么這個控制不細致.
當然,用SESSION肯定是要的,但這個SESSION,應當只記錄當前用戶的個人信息,比如他的用戶名.在需要判斷的時候,根據他的用戶名(唯一),至數據庫中去取他的權限,或在類中編寫權限/角色,根據此用戶的用戶號及當前模塊號,計算當前用戶是否對當前頁面有操作權限.不過,如果把用戶的權限也取出來放在SESSION中的話,這種做法一般僅在很小的網站中使用,稍大一點的系統,基本不允許這么做,而且也做不到
作者:陌軒君
出處:http://www.cnblogs.com/yuan-jun/p/6502795.html
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。