到11月15號之前,陸陸續續面試了多家公司,以下是各公司的筆試題,重復的就不說了,權當記錄,方便明年的金三銀四,適合初級的程序員,有錯誤歡迎指正
一.列舉ASP.NET 頁面之間傳值的幾種方式,優缺點?
①QueryString
優點:1.使用簡單,對於安全性要求不高時傳遞數字或是文本值非常有效。
缺點:1.缺乏安全性,由於它的值暴露在瀏覽器的URL地址中 2 不能傳遞對象
使用方法:1.在源頁面的代碼中用需要傳遞的名稱和值構造URL地址。
2.在源頁面的代碼用Response.Redirect(URL);重定向到上面的URL地址中。
url = "b.aspx?name=Carl" ; Response.Redirect(url);
3.在目的頁面的代碼使用Request.QueryString["name"];取出URL地址中傳遞的值。(a的值就是Carl)
string a = Request.QueryString["name"];
②Session
優點:1.使用簡單,不僅能傳遞簡單數據類型,還能傳遞對象。2.數據量大小是不限制的。
缺點:1.在Session變量存儲大量的數據會消耗較多的服務器資源。2.容易丟失。
使用方法:1.在源頁面:Session["Name"]="Value(Or Object)";
Session["Name"] ="Carl";
2.在目的頁面。Result = Session["Name"]
name = Session["Name"].ToString();
注意:session不用時可以銷毀它,銷毀的方法是:清除一個:Session.Remove("session名"); 清除所有:Session.Clear();
③Cookie
優點:1.使用簡單,是保持用戶狀態的一種非常常用的方法。比如在購物網站中用戶跨多個頁面表單時可以用它來保持用戶狀態。
缺點:1.常常被人認為用來收集用戶隱私而遭到批評。2.安全性不高,容易偽造。
使用方法
1.在源頁面的代碼中創建你需要傳遞的名稱和值構造Cookie對象:
HttpCookie objCookie = new HttpCookie("Name","Carl!"); Response.Cookies.Add(cookie);
2.在目的頁面的代碼使用Cookie對象取出傳遞的值:Result = Request.Cookies[ "Name" ].Value;
string myName1Value; myName1Value = Request.Cookies[ "Name" ].Value;
④Application
優點:1.使用簡單,消耗較少的服務器資源。2.不僅能傳遞簡單數據,還能傳遞對象。3.數據量大小是不限制的。
缺點:1.作為全局變量容易被誤操作。所以單個用戶使用的變量一般不能用application。
使用方法:1.在源頁面的代碼中創建你需要傳遞的名稱和值構造Application變量:Application["Name"]="Value(Or Object)";
Application["Name"] = "Carl";
2.在目的頁面的代碼使用Application變量取出傳遞的值。Result = Application["Name"]
string Name; Application.Lock(); //使用lock防止並發修改 Name = Application["Name"].ToString(); Application.UnLock();
⑤Server.Transfer
優點:1.直接在服務器端重定向,使用簡單方便,減少了客戶端對服務器端提出請求。2.可以傳遞各種數據類型的值和控件的值。
缺點:1.客戶端瀏覽器中的URL地址是不改變,會導致在新的頁面可能出現一些意想不到的問題。比如如果源頁面和目的頁面不在同一個虛擬目錄或其子目錄下,那么使用相對路徑的圖片、超鏈接都會導致錯誤的指向。
使用方法:1.在源頁面的代碼中,使用Page類的Server.Transfer跳到另一個頁面傳遞頁面數據:Server.Transfer("b.aspx","false")。
public string Name { get{ return "Carl";} } private void Button1_Click(object sender, System.EventArgs e) { Server.Transfer("b.aspx"); }
2.在目的頁面中,使用Context.Handler來接收數據:FormerPage formerPage = (FormerPage)Context.Handler; 然后用formerPage的屬性和方法來獲取前一個頁面的值,或者直接用Context.Items["myParameter "]
a newWeb; //實例a窗體 newWeb = (source)Context.Handler; string Name; Name = newWeb.Name;
二.private、protected、public、internal修飾符訪問權限
private:私有成員,在類的內部才可以訪問
protected:保護成員,在類的內部和繼承類中可以訪問
public:公共成員,完全公開,沒有訪問限制
internal:當前程序集內可以訪問
三 abstract class 和 interface 有什么區別
1.抽象類可以有構造方法,接口中不能有構造方法。
2.抽象類中可以有普通成員變量,接口中沒有普通成員變量
3.抽象類中可以包含非抽象的普通方法,接口中的所有方法必須都是抽象的,不能有非抽象的普通方法。
4. 抽象類中的抽象方法的訪問類型可以是public,protected,但接口中的抽象方法只能是public類型的,並且默認即為public abstract類型。
5. 抽象類中可以包含靜態方法,接口中不能包含靜態方法
6. 抽象類和接口中都可以包含靜態成員變量,抽象類中的靜態成員變量的訪問類型可以任意,但接口中定義的變量只能是public static final類型,並且默認即為public static final類型。
7. 一個類可以實現多個接口,但只能繼承一個抽象類。
四 委托是什么?委托和事件的關系?
委托是一種在對象里保存方法引用的類型,同時也是一種類型安全的函數指針。事件是特殊的委托
五 C#中using 和new 這兩個關鍵字的意義?
using引入名稱空間或者使用非托管資源
new新建實例或者隱藏父類方法(重寫)
六 重寫和重載的區別?
2重載發生在一個類內,重寫發生在具有繼承關系的類內
3重載要求方法名相同,必須具有不同的參數列表,返回值類型可以相同也可以不同;重寫要求訪問修飾符、方法名、參數列表必須完全與被重寫的方法相同
在定義泛型類時,可以對客戶端代碼能夠在實例化類時用於類型參數的類型種類施加限制。如果客戶端代碼嘗試使用某個約束所不允許的類型來實例化類,則會產生編譯時錯誤。這些限制稱為約束。約束是使用 where 上下文關鍵字指定的。下表列出了六種類型的約束:約束說明
T:結構
類型參數必須是值類型。可以指定除 Nullable 以外的任何值類型。有關更多信息,請參見使用可以為 null 的類型(C# 編程指南)。
T:類
類型參數必須是引用類型;這一點也適用於任何類、接口、委托或數組類型。
T:new()
類型參數必須具有無參數的公共構造函數。當與其他約束一起使用時,new() 約束必須最后指定。
T:<基類名>
類型參數必須是指定的基類或派生自指定的基類。
T:<接口名稱>
類型參數必須是指定的接口或實現指定的接口。可以指定多個接口約束。約束接口也可以是泛型的。
T:U
為 T 提供的類型參數必須是為 U 提供的參數或派生自為 U 提供的參數。這稱為裸類型約束。
裝箱時值類型轉換為引用類型,拆箱是引用類型轉換為值類型
八 向服務器發送請求有幾種方式?
post 和get
九 ADO.NET中常用的對象有哪些?分別描述一下?
connection 連接數據庫對象
command 命令對象,指示要執行的命令和存儲過程!
datareader是一個向前的只讀的數據流。
dataAdapter是功能強大的適配器,支持增刪改查的功能
dataset是一個數據級對象,相當與內存中的一張表或多張表
十 .NET的錯誤處理機制是什么?
采用try->catch->finally結構,發生錯誤時,層層上拋,直到找到匹配的Catch為止。
十一 概述反射和序列化
反射:程序集包含模塊,而模塊包含類型,類型又包含成員。反射則提供了封裝程序集、模塊和類型的對象。您可以使用反射動態地創建類型的實例,將類型綁定到現有對象,或從現有對象中獲取類型。然后,可以調用類型的方法或訪問其字段和屬性
序列化:序列化是將對象轉換為容易傳輸的格式的過程。例如,可以序列化一個對象,然后使用 HTTP 通過 Internet 在客戶端和服務器之間傳輸該對象。在另一端,反序列化將從該流重新構造對象。
十二 什么是虛函數?什么是抽象函數?
虛函數:沒有實現的,可以由子類繼承並重寫的函數。
抽象函數:規定其非虛子類必須實現的函數,必須被重寫。
繼承:繼承是一種聯結類的層次模型,可以提高代碼的可復用性和可擴展性。在需要定義和實現一個類時,可以從一個已存在的類中派生,這個過程被稱為類繼承。新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。子類將父類所定義的內容作為自己的內容(可復用性),並可以加入新內容(可擴展性)。
封裝:封裝是將對象的實現細節隱藏,然后定義一些公有方法來顯示該對象的功能。封裝可以保證代碼具有優良模塊性的基礎,目的是實現代碼的“高內聚,低耦合”。
多態:多態是指允許不同類的對象對同一信息作出響應。不用修改源程序代碼,就可以讓程序選擇多個運行狀態。多態性包括參數化多態性和包含多態性,能夠很好的解決程序函數同名問題。
十五 Func<T> 與Action<T> 的區別?
Func<T>有返回類型;Action<T>只有參數類型,不能傳返回類型。所以Action<T>的委托函數都是沒有返回值的。
十六 簡述Linq是什么?以及原理?
LINQ是一種用來進行數據訪問的編程模型,使得.NET語言可以直接支持數據查詢。原理就是一個方法的擴展,使用委托
十七 什么是MVC?完整流程是什么?使用MVC的好處?
MVC是Model-View-Controller的簡稱,即模型-視圖-控制器
流程
好處:視圖層和業務層分離,高重用性和可適用性,較低的生命周期成本,可維護性,快速的部署,有利於軟件工程化管理
十八 ASP.NET MVC的路由選擇是什么?
{controller}/{action}/{id}
十九 ASP.NET MVC 的局部視圖是什么?MVC中可以創建自定義視圖引擎嗎?
PartialView , 可以
二十 控制器和視圖之間數據傳遞的方式有哪些?
①ViewBag ②ViewData ③TempData ④Model
二十一 MVC中的ActionResult的返回值有幾種類型?
12種,ViewResult,PartialViewResult,RedirectResult,RedirectToRouteResult,ContentResult,EmptyResult,JavaScriptResult,JsonResult,FileResult,HttpUnauthorizedResult,HttpStatusCodeResult,HttpNoFoundResult
二十二 MVC中的HtmlHelper是什么?
HtmlHelper是一個返回Html字符串的方法。返回的字符串可以是任意類型。例如你可以使用HtmlHelper方法返回一個標准的html標簽<input>
<button>
<img>
等等。
你也可以自定義HtmlHelper方法,返回一些復雜的html,來展示數據。
二十三 說一說存儲過程和觸發器的特點
優點:1 預編譯,已優化,效率較高。避免了SQL語句在網絡傳輸然后再解釋的低效率。 2 存儲過程可以重復使用,減少開發人員的工作量。 3 業務邏輯封裝性好,修改方便。 4 安全。不會有SQL語句注入問題存在。
缺點:1 可移植性是存儲過程和觸發器最大的缺點。 2 占用服務器端太多的資源,對服務器造成很大的壓力 3 不能做DDL。 4 觸發器排錯困難,而且數據容易造成不一致,后期維護不方便。
二十四 索引的作用?它的優點缺點?
索引的作用:創建索引能夠大大的提高系統的性能
優點:①通過創建唯一性索引,可以保證數據庫表中每一行數據的唯一性
②大大加快數據的檢索速度,這也是創建索引的最主要原因 ③加快表與表之間的連接,在實現數據的參考完整性方面特別有意義
④在使用分組和排序,子句進行數據檢索時,同樣可以顯著減少查詢中分組和排序的時間
⑤通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的性能。
缺點:①創建索引和維護索引需要時間,這種時間隨着數據量的增加而增加
②索引需要占物理空間,除了數據表占數據空間之外,每一個索引還要占物理空間,如果要建立聚簇索引,需要的空間更大
③當對表中的數據進行增加、刪除和修改的時候,索引也要動態的維護,這就降低了數據的維護速度。
二十五 寫一條SQL語句,取出表A中第31到第四十記錄 (sqlserver,自動增長id為主鍵,id可能不是連續的)
select * from (select ROW_NUMBER() over(order by t.ID) curr,t.* from tableA t) a where a.curr between 31 and 40
select top 40 * from tableA except select top 30 * from tableA
select top 10 * from tableA where ID not in (select top 30 ID from tableA)
二十六 寫出一種或幾種實現方法 1-2+3-4+5......-m
int Sum = 0 ; //判斷奇偶,奇就加,偶就減 for (int i = 0 ; i < m+ 1 ; i++) { if((i%2) == 1) { Sum += i ; } else { Sum = Sum - i ; } }
int result = 0; //第二種:(1 - 2) + (3 - 4)+...
if (max % 2 == 0)
{
result = (max / 2) * (-1);
}
else
{ result = ((max + 1) / 2) * (-1) + max + 1; }
二十七 假設有50瓶飲料,喝完3個空瓶可以換一瓶飲料,以此類推,請問總共可以和多少瓶飲料?
思路:總共五十瓶喝完三瓶 +1 那么 50-3+1-3+1
int n = 50;
int i = 0; while(true)
{ n-=3; n++; i++; if (n<3)
{ Console.WriteLine("共喝了"+(50+i)+"瓶"); break; } }
二十八 如何終止多線程
用interrupt來處理,而不是stop或者volatile等方法。把主動權交給被中斷的線程。這樣可以保證線程的安全停止。
要想達到這樣的效果不僅僅需要調用interrupt方法,而且需要被請求方,被停止方和子方法被調用方相互配合。作為請求方,就是調用Thread.interrupt()
發送一個中斷請求的信號,而被停止方必須在適當的時候去檢查這個中斷信號,並且在可能拋出InterruptedException
的時候去處理這個信號。
二十九 給定表 table1 中有兩個字段 ID、LastUpdateDate,ID表示更新的事務號, LastUpdateDate表示更新時的服務器時間,請使用一句SQL語句獲得最后更新的事務號
Select ID FROM table1 Where LastUpdateDate = (Select MAX(LastUpdateDate) FROM table1)
三十 用代碼寫出一種你熟悉的排序算法
int i, j; int temp; for (i = 0; i < len -1; ++i) { for (j = len - 1; j > i; --j) { if (array[j] < array[j - 1]) { temp = array[j]; array[j] = array[j - 1]; array[j - 1] = temp; } } }
三十一 Observer 模式
namespace 觀察者模式的實現 { //銀行短信系統抽象接口,是被觀察者--該類型相當於抽象主體角色Subject public abstract class BankMessageSystem { protected IList<Depositor> observers; //構造函數初始化觀察者列表實例 protected BankMessageSystem() { observers = new List<Depositor>(); } //增加預約儲戶 public abstract void Add(Depositor depositor); //刪除預約儲戶 public abstract void Delete(Depositor depositor); //通知儲戶 public void Notify() { foreach (Depositor depositor in observers) { if (depositor.AccountIsChanged) { depositor.Update(depositor.Balance, depositor.OperationDateTime); //賬戶發生了變化,並且通知了,儲戶的賬戶就認為沒有變化 depositor.AccountIsChanged = false; } } } } //北京銀行短信系統,是被觀察者--該類型相當於具體主體角色ConcreteSubject public sealed class BeiJingBankMessageSystem : BankMessageSystem { //增加預約儲戶 public override void Add(Depositor depositor) { //應該先判斷該用戶是否存在,存在不操作,不存在則增加到儲戶列表中,這里簡化了 observers.Add(depositor); } //刪除預約儲戶 public override void Delete(Depositor depositor) { //應該先判斷該用戶是否存在,存在則刪除,不存在無操作,這里簡化了 observers.Remove(depositor); } } //儲戶的抽象接口--相當於抽象觀察者角色(Observer) public abstract class Depositor { //狀態數據 private string _name; private int _balance; private int _total; private bool _isChanged; //初始化狀態數據 protected Depositor(string name, int total) { this._name = name; this._balance = total;//存款總額等於余額 this._isChanged = false;//賬戶未發生變化 } //儲戶的名稱,假設可以唯一區別的 public string Name { get { return _name; } private set { this._name = value; } } public int Balance { get { return this._balance; } } //取錢 public void GetMoney(int num) { if (num <= this._balance && num > 0) { this._balance = this._balance - num; this._isChanged = true; OperationDateTime = DateTime.Now; } } //賬戶操作時間 public DateTime OperationDateTime { get; set; } //賬戶是否發生變化 public bool AccountIsChanged { get { return this._isChanged; } set { this._isChanged = value; } } //更新儲戶狀態 public abstract void Update(int currentBalance, DateTime dateTime); } //北京的具體儲戶--相當於具體觀察者角色ConcreteObserver public sealed class BeiJingDepositor : Depositor { public BeiJingDepositor(string name, int total) : base(name, total) { } public override void Update(int currentBalance, DateTime dateTime) { Console.WriteLine(Name + ":賬戶發生了變化,變化時間是" + dateTime.ToString() + ",當前余額是" + currentBalance.ToString()); } } // 客戶端(Client) class Program { static void Main(string[] args) { //我們有了三位儲戶,都是武林高手,也比較有錢 Depositor huangFeiHong = new BeiJingDepositor("黃飛鴻", 3000); Depositor fangShiYu = new BeiJingDepositor("方世玉", 1300); Depositor hongXiGuan = new BeiJingDepositor("洪熙官", 2500); BankMessageSystem beijingBank = new BeiJingBankMessageSystem(); //這三位開始訂閱銀行短信業務 beijingBank.Add(huangFeiHong); beijingBank.Add(fangShiYu); beijingBank.Add(hongXiGuan); //黃飛鴻取100塊錢 huangFeiHong.GetMoney(100); beijingBank.Notify(); //黃飛鴻和方世玉都取了錢 huangFeiHong.GetMoney(200); fangShiYu.GetMoney(200); beijingBank.Notify(); //他們三個都取了錢 huangFeiHong.GetMoney(320); fangShiYu.GetMoney(4330); hongXiGuan.GetMoney(332); beijingBank.Notify(); Console.Read(); } } }
三十二 什么是AJAX?它有幾種請求處理模式?如何避免AJAX請求到緩存數據?
AJAX的全稱是Asynchronous JavaScript and XML(異步的 JavaScript 和 XML)。能夠實現局部刷新頁面。 兩種post和get
產生緩存的情況:
Ajax在發送的數據成功后,會把請求的URL和返回的響應結果保存在緩存內,當下一次調用Ajax發送相同的請求時,它會直接從緩存中把數據取出來,這是為了提高頁面的響應速度和用戶體驗。當前這要求兩次請求URL完全相同,包括參數。這個時候,瀏覽器就不會與服務器交互。
解決緩存方案:
解決這個問題最有效的辦法是禁止頁面緩存,有以下幾種處理方法:
1、在ajax發送請求前加上 xmlHttpRequest.setRequestHeader(“Cache-Control”,”no-cache”);
2、在服務端加 header(“Cache-Control: no-cache, must-revalidate”);
3、在ajax發送請求前加上 xmlHttpRequest.setRequestHeader(“If-Modified-Since”,”0″);
4、在 Ajax 的 URL 參數后加上 "?fresh=" + Math.random(); //當然這里參數 fresh 可以任意取了
5、第五種方法和第四種類似,在 URL 參數后加上 "?timestamp=" + new Date().getTime();
6、用POST替代GET:不推薦
三十三 是否可以繼承string類?為什么?
不可以,因為String類有final修飾符,而final修飾的類是不能被繼承的,實現細節不允許改變。
三十四 列舉c#中集合類型
1.數組集合類型:描述允許將數組視為集合處理的數組功能。
2.ArrayList 和List 集合類型:描述泛型和非泛型列表(最常用的集合類型)的功能。
3.Hashtable 和Dictionary 集合類型:描述基於哈希的泛型和非泛型字典類型的功能。
4.SortedList 和SortedDictionary 集合類型:描述排序的字典以及組合字典和列表功能的混合類型。
5.隊列Queue集合類型:描述泛型和非泛型隊列的功能。
6.堆棧Stack集合類型:描述泛型和非泛型堆棧的功能。
7.HashSet 集合類型:描述泛型HashSet(T) 集合類型。
8.HashSet 和LINQ Set 運算:描述HashSet(T) 集合類型提供的Set 操作以及LINQ Set 操作。
三十五匿名類型對象是可變對象還是不可變對象?
我理解的是可變的(有大神歡迎指正)
三十六嵌套類型可以訪問外部包含類型的所有private成員,這一說法正確嗎? 正確
三十七 線程池中的線程是前台線程還是后台線程?前台線程和后台線程的區別是什么?
線程池的線程默認為后台線程。前台線程和后台線程唯一區別就是:應用程序必須運行完所有的前台線程才可以退出
三十八 方法聲明中的params關鍵字之后不允許任何其他參數,說法正確嗎?
為了將方法聲明為可以接受可變數量參數的方法,我們可以使用params關鍵字來聲明數組,要求:
(1)在方法聲明中的 params 關鍵字之后不允許任何其他參數,並且在方法聲明中只允許一個 params 關鍵字。
(2)該參數必須標識一個一維數組,但類型不限,對該參數傳遞null或者0個數目的數組的引用都是合法的
三十九 為什么不提倡catch(exception)?
方法如果過大,則無法直觀體現出錯的代碼段,假設如果報了空指針,出錯的原因可能是在XX行參數為NULL,但這個原本不該為NULL的參數變為NULL才是代碼出問題的根本原因。所以不提倡開頭結尾包這種捕獲異常。當然只是不提倡,沒有說一定有多不好。
四十 序列化是指什么過程?列出幾種需要序列化的場景?
序列化是通過將對象轉換為字節流,從而存儲對象或將對象傳輸到內存,數據庫或文件的過程。主要用途是保存對象的狀態,包括對象的數據,以便能夠在需要是重建對象。反向過程稱為 反序列化。XML序列化、SOAP序列化等
四十一 ODP.NET 主要功能
我理解的是類似於ADO.NET ,ODP.NET 用於連接Oracle數據庫
四十二 Oracle數據庫中如何實現自增長列?
第一步,創建sequence
-- Create sequence create sequence SEQ_T_RECV minvalue 1 maxvalue 9999999 start with 1 increment by 1 cache 50;
第二步,創建表
-- Create table create table RECV_MSG ( id NUMBER, messageid VARCHAR2(32), contents VARCHAR2(2000), app_flg VARCHAR2(100), phonenumber VARCHAR2(2000), updatetime DATE default sysdate );
第三步,建立觸發器
CREATE OR REPLACE TRIGGER "recv_trig" BEFORE INSERT ON recv_msg REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW DECLARE BEGIN SELECT SEQ_T_RECV.NEXTVAL INTO :NEW.ID FROM DUAL; END recv_trig;
第四步,測試並確認
四十三 數據庫中的Union 和Union All的區別?
1、UNION和UNION ALL關鍵字都是將兩個結果集合並為一個,但這兩者從使用和效率上來說都有所不同。
2、對重復結果的處理:UNION在進行表鏈接后會篩選掉重復的記錄,Union All不會去除重復記錄。
3、對排序的處理:Union將會按照字段的順序進行排序;UNION ALL只是簡單的將兩個結果合並后就返回。
4、從效率上說,UNION ALL 要比UNION快很多,所以,如果可以確認合並的兩個結果集中不包含重復數據且不需要排序時的話,那么就使用UNION ALL。
四十四 htttpmodule和httphandler的作用和區別
1.先后次序.先IHttpModule,后IHttpHandler. 注:Module要看你響應了哪個事件,一些事件是在Handler之前運行的,一些是在Handler之后運行的
2.對請求的處理上:IHttpModule是屬於大小通吃類型,無論客戶端請求的是什么文件,都會調用到它;例如aspx,rar,html的請求.IHttpHandler則屬於挑食類型,只有ASP.net注冊過的文件類型(例如aspx,asmx等等)才會輪到調用它.
3.IHttpHandler按照你的請求 生成響應的內容,IHttpModule對請求進行預處理,如驗證、修改、過濾等等,同時也可以對響應進行處理ASP.Net系統本身配置有很多HttpHandler和HttpModule,以處理aspx等.Net標准的頁面文件,以及這些頁面文件中標 准的事件等。
四十五 用遞歸求1+2+3+4+....+100
int digui (int n) { if(n==1) return 1; else return (digui(n-1)+n); }
四十六 string str =null;與string str = “”,兩者的區別?
1.最大的區別在於String str=null沒有分配內存,String str=""分配了內存
2.String str=null 這個引用指向了一個null ,沒有地址沒有值的地方
3,String str="" 這個引用指向了一個地址,地址里面存的是空的字符
四十七 ASP.NET常見內置對象有?
1.Response對象:通過該對象的屬性和方法可以控制如何將服務器端的數據發送到客戶端瀏覽器。
2. Request對象:當客戶發出請求執行ASP.NET程序時,客戶端的請求信息會包裝在Request對象中,這些請求信息包括請求報頭(Header)、客戶端的機器信息,客戶端瀏覽器信息,請求方法(如POST、GET)、提交的窗體信息等。
3.Server對象:反映了Web服務器的各種信息,它提供了服務器可以提供的各種服務。
4. Application對象:一個集合對象,並在整個ASP.NET網站內可用,不同的用戶在不同的時間都可以訪問Application對象的變量。由於它是一個內置對象,所以使用它的時候與使用Response對象和Request對象類似,不需要進行任何對象的實例化,就可以直接用。
5.Session對象:負責存儲、讀取和改變一個特定用戶的會話信息。對於每個用戶的每次訪問Session對象是唯一的。
6. Cookie對象:在Web程序設計中,它表示一個長度不超過4K的一個普通的文本文件。這個文件在用戶的硬盤上,可以由Web瀏覽器進行訪問。
四十八C# 下實現把Array復制到ArrayList
//方法一 Console.WriteLine("方法一:for循環"); for (int i = 0; i < array.Length; i++) { list.Add(array[i]); Console.WriteLine(list[i]); } //方法二 Console.WriteLine("方法二:使用ArrayList 的CopyTo()方法"); list.CopyTo(array); forList(array, list); //方法三 Console.WriteLine("方法三:使用ArrayList的Adapter()方法"); ArrayList list1 = ArrayList.Adapter(array); forList(array, list1); //f方法四 Console.WriteLine("方法四:直接使用構造方法傳入,因為Array實現了ICollection:"); ArrayList list2 = new ArrayList(array); forList(array, list1); Console.ReadKey();
四十九 用c#創建一個int數組,長度為100,並向其中隨機插入1-100,並且不重復
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();
五十 編寫一個類,繼承基類(基類有方法F1),繼承接口並實現其方法F2 (類A,基類BaseA,接口InterA)
Class A: BaseA ,IneterA { public voerride void F1(){....} PUblic void F2(){....} }