標籤:傳遞 時間 三層 comm 排序演算法 遠程 不用 ica 回收機制
1.簡述public、private、protected、Internal修飾符的存取權限
public:公用成員,完全公開,沒有訪問限制。
private:私人成員,在類的內部才可以訪問。
protected:保護成員,該類的內部和繼承的類中可以訪問。
Internal:在同一命名空間類才可以訪問。
2.列舉ASP.NET頁面之間傳值的幾種方式
(1) QueryString:傳遞的參數會顯示在url中,不安全並且不能傳遞數組或對象。
(2) Session變數:常用於使用者身份的驗證,安全性較高,但Session變數儲存過多的資料會消耗過多的伺服器資源。
(3) Server.Transfer:流程從當前頁面遷移到另一個頁面保持著服務資源,資料庫穩定安全,但效能相對弱。
(4) Cookie傳值:以文字檔的形式存在磁碟中,雖然方便,儲存時間可以自由設定,但安全性不高。
(5) Application傳值:對象的作用範圍是全域,對所有使用者都有效,個人的敏感性資料則不用這種方法儲存。
3.重載(overload)和重寫(override)的區別
overload重載是方法的名稱相同,參數的個數或參數類型不同。override重寫是重寫某個方法的商務邏輯。
4.string和StringBuild的區別
string對象長度是不可以變的。
StringBuild是可變的,常用於字串的拼接,效率比直接操作string高。
5.break和continue的區別
break是結束當前迴圈。
continue是跳出本次迴圈,繼續下一次迴圈。
6.List和ArrayList的區別
List是介面類,ArrayList類實現了這個介面,也就是說ArrayList是List的子類。
7.進程和線程的區別
進程是系統進行資源分派和調度的單位。
線程是CPU調度和指派的單位,一個進程可以有多個線程,這些線程共用這個進程的資源。
8.堆和棧的區別
棧是編譯期間就分配好的記憶體空間,代碼中棧的大小要有明確的定義;局部實值型別變數、實值型別參數等都在棧記憶體中。
堆是程式運行期間動態分配的記憶體空間,可以根據程式的運行情況確定要分配的堆記憶體大小。
9.C#中委託和事件
委託是一個類,它定義了方法的類型,可以把方法作為參數進行傳遞。
事件是一個特殊的委託,委託和事件就類似於欄位和屬性的關係,事件是對委託做了一個封裝。
10.反射和序列化
反射是管理程式集、模組、類型的對象,可以動態獲得類型或者執行個體的資訊。
序列化是將對象轉換為容易傳輸的格式的過程。例如,序列化一個對象,通過HTTP在用戶端和伺服器之間傳輸該對象,在另一端還原序列化構造該對象。
11.什麼是事務?使用事務的語句有哪些?
事務是一種機制,是一個操作序列,它包括了一組資料庫操作命令,而且所有的命令作為一個整體向系統提交或者撤消操作請求,要麼全部執行,要麼全部不執行。
begin transaction
commit transaction
rollback transaction
12.你對泛型瞭解嗎?簡明說一下泛型的優點?
泛型:通過參數化型別來實現在同一份代碼上操作多種資料類型。利用"參數化型別"將類型抽象化,從而實現靈活的複用。
優點是型別安全和減少裝箱、拆箱。提高效能、型別安全和品質,減少重複性的編程任務。
13.什麼是sql注入?如何避免sql注入?
使用者根據系統的程式構造非法的參數從而導致程式執行不是程式員期望的惡意的SQL語句。
使用參數化的SQL就可以避免SQL注入,使用參數化1‘ or 1 = 1
14.三層架構
表現層(UI):頁面的視圖。
商務邏輯層(BLL):對資料層的操作和商務邏輯的處理。
資料訪問層(DAL):對資料庫的增、刪、改、查。
15.MVC模式
MVC(Model View Controller)模型-視圖-控制器
模型負責業務領域,視圖負責顯示,控制器負責把資料讀取出來填充到模型後交給視圖去處理,MVC最大的好處是將邏輯和頁面分離。
16.如何理解.NET的記憶體回收機制
每次使用new運算子建立對象時,運行庫都會為新對象分配空間。但是記憶體不可能無限大,所以需要記憶體回收行程釋放一些記憶體。當一個對象沒有任何引用的時候,記憶體回收行程不定時自動進行回收,可以調用GC.Collect()讓GC立即回收。GC不能回收非託管資源,對於非託管資源一般都是實現了IDisposable介面,然後使用using關鍵字進行資源的回收。
17.提高.NET的效能
(1) 使用非同步方式調用web服務和遠程對象,避免在請求的處理過程中對web服務和遠程對象的同步調用,因為佔用了線程池中的背景工作執行緒,影響了web伺服器響應其他請求的能力。
(2) 使用適當的caching策略來提高效能。
(3) 判斷字串不要用" "比較。
(4) 頁面最佳化
(5) 盡量寫預存程序,並最佳化查詢語句
(6) 唯讀資料訪問用sqlDataReader,不要用DataSet
18.請編程實現一個冒泡排序演算法?
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 ; } } }
或者
public static void bubble_sort(int[] x) { for (int i = 0; i < x.Length; i++) { for (int j = i; j < x.Length; j++) { if (x[i] < x[j]) //從大到小排序 { int temp; temp = x[i]; x[i] = x[j]; x[j] = temp; } } } } static void Main(string[] args) { int[] arr = { 1, 5, 2, 9, 3, 7, 6,4,8,0}; bubble_sort(arr); foreach (var a in arr) { Console.WriteLine(a ); } }
19.寫出一條Sql語句:取出表A中第31到第40記錄(SQLServer,以自動成長的id作為主鍵,注意:id可能不是連續的)
select top 10 * from A where id not in (select top 30 id from A)select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A)select id,row_number() over (order by id) as rowNum from A where rowNum between 31 and 40(推薦)
20.一列數的規則如下: 1、1、2、3、5、8、13、21、34...... 求第30位元是多少, 用遞迴演算法實現。
public class MainClass { public static void Main() { Console.WriteLine(Num(30)); } public static int Num(int i) { if (i <= 0) return 0; else if(i > 0 && i <= 2) return 1; else return Num(i -1) + Num(i - 2); } }
.net題目