1、簡述 private、 protected、 public、 internal 修飾符的訪問許可權。private : 私有成員, 在類的內部才可以訪問。protected : 保護成員,該類內部和繼承類中可以訪問。public : 公共成員,完全公開,沒有訪問限制。internal: 當前程式集 ...
1、簡述 private、 protected、 public、 internal 修飾符的訪問許可權。
private : 私有成員, 在類的內部才可以訪問。
protected : 保護成員,該類內部和繼承類中可以訪問。
public : 公共成員,完全公開,沒有訪問限制。
internal: 當前程式集內可以訪問。
2、ADO.NET中的五個主要對象
Connection:主要是開啟程式和資料庫之間的連接。沒有利用連接對象將資料庫打開,是無法從資料庫中取得數據的。Close和Dispose的區別,Close以後還可以Open,Dispose以後則不能再用。
Command:主要可以用來對資料庫發出一些指令,例如可以對資料庫下達查詢、新增、修改、刪除數據等指令,以及調用存在資料庫中的存儲過程等。這個對象是架構在Connection 對象上,也就是Command 對象是透過連接到數據源。
DataAdapter:主要是在數據源以及DataSet 之間執行數據傳輸的工作,它可以透過Command 對象下達命令後,並將取得的數據放入DataSet 對象中。這個對象是架構在Command對象上,並提供了許多配合DataSet 使用的功能。
DataSet:這個對象可以視為一個暫存區(Cache),可以把從資料庫中所查詢到的數據保留起來,甚至可以將整個資料庫顯示出來,DataSet是放在記憶體中的。DataSet 的能力不只是可以儲存多個Table 而已,還可以透過DataAdapter對象取得一些例如主鍵等的數據表結構,並可以記錄數據表間的關聯。DataSet 對象可以說是ADO.NET 中重量級的對象,這個對象架構在DataAdapter對象上,本身不具備和數據源溝通的能力;也就是說我們是將DataAdapter對象當做DataSet 對象以及數據源間傳輸數據的橋梁。DataSet包含若幹DataTable、DataTableTable包含若幹DataRow。
DataReader:當我們只需要循序的讀取數據而不需要其它操作時,可以使用DataReader 對象。DataReader對象只是一次一筆向下循序的讀取數據源中的數據,這些數據是存在資料庫伺服器中的,而不是一次性載入到程式的記憶體中的,只能(通過游標)讀取當前行的數據,而且這些數據是只讀的,並不允許作其它的操作。因為DataReader 在讀取數據的時候限制了每次只讀取一筆,而且只能只讀,所以使用起來不但節省資源而且效率很好。使用DataReader 對象除了效率較好之外,因為不用把數據全部傳回,故可以降低網路的負載。
ADO.NET 使用Connection 對象來連接資料庫,使用Command 或DataAdapter對象來執行SQL語句,並將執行的結果返回給DataReader 或 DataAdapter ,然後再使用取得的DataReader 或DataAdapter 對象操作數據結果。
3、列舉ASP.NET 頁面之間傳遞值的幾種方式。
1.使用QueryString, 如....?id=1; response. Redirect()....
2.使用Session變數
3.使用Server.Transfer
4.Cookie傳值
4、C#中的委托是什麼?事件是不是一種委托?事件和委托的關係。
委托可以把一個方法作為參數代入另一個方法。
委托可以理解為指向一個函數的指針。
委托和事件沒有可比性,因為委托是類型,事件是對象,下麵說的是委托的對象(用委托方式實現的事件)和(標準的event方式實現)事件的區別。事件的內部是用委托實現的。因為對於事件來講,外部只能“註冊自己+=、註銷自己-=”,外界不可以註銷其他的註冊者,外界不可以主動觸發事件,因此如果用Delegate就沒法進行上面的控制,因此誕生了事件這種語法。事件是用來閹割委托實例的,類比用一個自定義類閹割List。事件只能add、remove自己,不能賦值。事件只能+=、-=,不能= 。加分的補充回答:事件內部就是一個private的委托和add、remove兩個方法
面試聊:用Reflector查看.Net的類的內部實現,解決問題。
5、override與重載(overload)的區別
重載是方法的名稱相同。參數或參數類型不同,進行多次重載以適應不同的需要。重載(overload)是面向過程的概念。
Override 是進行基類中函數的重寫。Override是面向對象的概念
6、C#中索引器是否只能根據數字進行索引?是否允許多個索引器參數?
參數的個數和類型都是任意的。加分的補充回答:用reflector反編譯可以看出,索引器的內部本質上就是set_item、get_item方法。
基礎知識:
索引的語法:
public string this[string s],通過get、set塊來定義取值、賦值的邏輯
索引可以有多個參數、參數類型任意
索引可以重載。
如果只有get沒有set就是只讀的索引。
索引其實就是set_Item、get_Item兩個方法。
7、屬性和public欄位的區別是什麼?調用set方法為一個屬性設值,然後用get方法讀取出來的值一定是set進去的值嗎?
屬性可以對設值、取值的過程進行非法值控制,比如年齡禁止設值負數,而欄位則不能進行這樣的設置。雖然一般情況下get讀取的值就是set設置的值,但是可以讓get讀取的值不是set設置的值的,極端的例子。Public Age{get{return 100;}set{}}。加分的補充回答:用reflector反編譯可以看出,屬性內部本質上就是set_***、get_***方法
class Person
{
public int Age
{
get
{
return 3;
}
set
{
}
}
}
Person p1 = new Person();
p1.Age = 30;
p1.Age++;
Console.Write(p1.Age);//輸出3
必須手寫掌握的代碼(既包含拿電腦寫,拿筆寫):
手寫三層架構
手寫冒泡排序
手寫AJAX:XMLHttpRequest
手寫增刪改查、SQLHelper
8、三層架構
通常意義上的三層架構就是將整個業務應用劃分為:表現層(UI)、業務邏輯層(BLL)、數據訪問層(DAL)。區分層次的目的即為了“高內聚,低耦合”的思想。表現層(UI):通俗講就是展現給用戶的界面,即用戶在使用一個系統的時候的所見所得。業務邏輯層(BLL):針對具體問題的操作,也可以說是對數據層的操作,對數據業務邏輯處理。數據訪問層(DAL):該層所做事務直接操作資料庫,針對數據的增添、刪除、修改、更新、查找等每層之間是一種垂直的關係。三層結構是N層結構的一種,一般來說,層次之間是向下依賴的,下層代碼未確定其介面(契約)前,上層代碼是無法開發的,下層代碼介面(契約)的變化將使上層的代碼一起變化。
優點: 分工明確,條理清晰,易於調試,而且具有可擴展性。
缺點: 增加成本。
9、什麼是裝箱(boxing)和拆箱(unboxing)? (*)
Object是引用類型,但是它的子類Int32竟然不能去Object能去的“要求必須是引用類型”
的地方,違反了繼承的原則,所以需要把Int32裝在Object中才能傳遞。
裝箱:從值類型介面轉換到引用類型。
拆箱:從引用類型轉換到值類型。
object obj = null;//引用類型
obj = 1;//裝箱,boxing。把值類型包裝為引用類型。
int i1 = (int)obj;//拆箱。unboxing
2)下麵三句代碼有沒有錯,以inboxing或者unboxing為例,解釋一下記憶體是怎麼變化的
int i=10;
object obj = i;
int j = obj;
分析:在inboxing(裝箱)時是不需要顯式的類型轉換的,不過unboxing(拆箱)需要顯式的類型轉換,所以第三行代碼應該改為:
3 int j = (int)obj;
要掌握裝箱與拆箱,就必須瞭解CTS及它的特點:
NET重要技術和基礎之一的CTS(Common Type System)。CTS是為了實現在應用程式聲明和使用這些類型時必須遵循的規則而存在的通用類型系統。.Net將整個系統的類型分成兩大類 :值類型和引用類型。
CTS中的所有東西都是對象;所有的對象都源自一個基類——System.Object類型。值類型的一個最大的特點是它們不能為null,值類型的變數總有一個值。為瞭解決值類型不可以為null,引用類型可以為null的問題,微軟在.Net中引入了裝箱和拆箱:裝箱就是將值類型用引用類型包裝起來轉換為引用類型;而從引用類型中拿到被包裝的值類型數據進行拆箱。
10、CTS、CLS、CLR分別作何解釋(*)把英文全稱背過來。
C#和.Net的關係。
C#只是抽象的語言,可以把C#編譯生成Java平臺的二進位代碼,也可以把Java代碼編譯生成.Net平臺的二進位代碼。所以C#只是提供了if、while、+-*/、定義類、int、string等基礎的語法,而Convert.ToInt32、FileStream、SqlConnection、String.Split等都屬於.Net的東西。深藍色是C#的,淺藍色是.Net的。
C# new→IL:newobj
C# string →.Net中的String
類型的差別:.net中的Int32在C#中是int,在VB.Net中是Integer。String、Int32等公共類型。
語法的差別:IL中創建一個對象的方法是L_0001: newobj instance void 索引.C1::.ctor()
C#中是new C1();VB.net中是 Dim c1 As New C1
CTS:Common Type System 通用類型系統。Int32、Int16→int、String→string、Boolean→bool。每種語言都定義了自己的類型,.Net通過CTS提供了公共的類型,然後翻譯生成對應的.Net類型。
CLS:Common Language Specification 通用語言規範。不同語言語法的不同。每種語言都有自己的語法,.Net通過CLS提供了公共的語法,然後不同語言翻譯生成對應的.Net語法。
CLR:Common Language Runtime 公共語言運行時,就是GC、JIT等這些。有不同的CLR,比如伺服器CLR、Linux CLR(Mono)、Silverlight CLR(CoreCLR)。相當於一個發動機,負責執行IL。
11、在dotnet中類(class)與結構(struct)的異同?
Class可以被實例化,屬於引用類型,是分配在記憶體的堆上的。類是引用傳遞的。
Struct屬於值類型,是分配在記憶體的棧上的。結構體是複製傳遞的。加分的回答:Int32、Boolean等都屬於結構體
12、堆和棧的區別?
棧是編譯期間就分配好的記憶體空間,因此你的代碼中必須就棧的大小有明確的定義;局部值類型變數、值類型參數等都在棧記憶體中。
堆是程式運行期間動態分配的記憶體空間,你可以根據程式的運行情況確定要分配的堆記憶體的大小。
13、能用foreach遍歷訪問的對象的要求
需要實現IEnumerable介面或聲明GetEnumerator方法的類型。
14、GC是什麼? 為什麼要有GC?
C/C++中由程式員進行對象的回收像學校食堂中由學生收盤子,.Net中由GC進行垃圾回收像餐館中店員去回收。
GC是垃圾收集器(Garbage Collection)。程式員不用擔心記憶體管理,因為垃圾收集器會自動進行管理。GC只能處理托管記憶體資源的釋放,對於非托管資源則不能使用GC進行回收,必須由程式員手工回收,一個例子就是FileStream或者SqlConnection需要程式員調用Dispose進行資源的回收。
要請求垃圾收集,可以調用下麵的方法:GC.Collect()一般不需要手動調用GC.Collect()。當一個對象沒有任何變數指向(不再能使用)的時候就可以被回收了。
基礎知識:當沒有任何變數指向一個對象的時候對象就可以被回收掉了,但不一定會立即被回收。
object obj = new object();//只有new才會有新對象
Console.WriteLine(obj);
object obj2 = obj;
obj = null;
obj2 = null;
Console.WriteLine();
15、值類型和引用類型的區別?
1.將一個值類型變數賦給另一個值類型變數時,將複製包含的值。引用類型變數的賦值只複製對對象的引用,而不複製對象本身。
2.值類型不可能派生出新的類型:所有的值類型均隱式派生自 System.ValueType。但與引用類型相同的是,結構也可以實現介面。
3.值類型不可能包含 null 值:然而,可空類型功能允許將 null 賦給值類型。
4.每種值類型均有一個隱式的預設構造函數來初始化該類型的預設值。
16、C#中的介面和類有什麼異同。
不同點:
不能直接實例化介面。
介面不包含方法的實現。
介面可以多繼承,類只能單繼承。
類定義可在不同的源文件之間進行拆分。
相同點:
介面、類和結構都可以從多個介面繼承。
介面類似於抽象基類:繼承介面的任何非抽象類型都必須實現介面的所有成員。
介面和類都可以包含事件、索引器、方法和屬性。
基礎知識:介面只能定義方法(只能定義行為,不能定義實現也就是欄位),因為事件、索引器、屬性本質上都是方法,所以介面中也可以定義事件、索引器、屬性。
17、abstract class和interface有什麼區別?
相同點:
都不能被直接實例化,都可以通過繼承實現其抽象方法。
不同點:
介面支持多繼承;抽象類不能實現多繼承。
介面只能定義行為;抽象類既可以定義行為,還可能提供實現。
介面只包含方法(Method)、屬性(Property)、索引器(Index)、事件(Event)的簽名,但不能定義欄位和包含實現的方法;
抽象類可以定義欄位、屬性、包含有實現的方法。
介面可以作用於值類型(Struct)和引用類型(Class);抽象類只能作用於引用類型。例如,Struct就可以繼承介面,而不能繼承類。
加分的補充回答:講設計模式的時候SettingsProvider的例子。
18、是否可以繼承String類?
String類是sealed類故不可以繼承。
19、int、DateTime、string是否可以為null?
null表示“不知道”,而不是“沒有”。沒有年齡和不知道年齡是不一樣。
資料庫中null不能用0表示。0歲和不知道多少歲不一樣。
Sex is zero。《色即是空》
//int i1 = null;
//int? i2 = null;//值類型後加?就成了可空數據類型
////int i3 = i2;//所以把可空的賦值給一定不能為空的會報錯。
//int i4 = (int)i2;//可以顯式轉換,由程式員來保證“一定不為空”
//int? i5 = i4;//一定會成功!
//using()→try{]catch{}finally{}
//int?是微軟的一個語法糖。是一種和int沒有直接關係的Nullable類型
Nullable<int> d1 = new Nullable<int>();//int? d1=null;
Nullable<int> d2 = new Nullable<int>(3);//int? d2=3;
Console.WriteLine(d1==null);
int、DateTime不能,因為其為Struct類型,而結構屬於值類型,值類型不能為null,只有引用類型才能被賦值null。string可以為null。
C#中int等值類型不可以為null、而資料庫中的int可以為null,這就是糾結的地方。int?就變成了可空的int類型。bool?、DateTime?
int i1 = 3;
int? i2 = i1;
//int i3 = i2;//不能把可能為空的賦值給一定不能為空的變數
int i3 = (int)i2;//顯式轉換
可空數據類型經典應用場景:三層中的Model屬性的設計。
int?翻譯生成.Net的Nullable<int>,CTS。
20、using關鍵字有什麼用?什麼是IDisposable?
using可以聲明namespace的引入,還可以實現非托管資源的釋放,實現了IDisposiable的類在using中創建,using結束後會自動調用該對象的Dispose方法,釋放資源。加分的補充回答:using其實等價於try……finally,用起來更方便。
21、XML 與 HTML 的主要區別
1. XML是區分大小寫字母的,HTML不區分。
2. 在HTML中,如果上下文清楚地顯示出段落或者列表鍵在何處結尾,那麼你可以省略</p>或者</li>之類的結束 標記。在XML中,絕對不能省略掉結束標記。
HTML:<img src="1.jpg"><br><br>
XML:<img src="1.jpg"></img><br/><br/>
3. 在XML中,擁有單個標記而沒有匹配的結束標記的元素必須用一個 / 字元作為結尾。這樣分析器就知道不用 查找結束標記了。
4. 在XML中,屬性值必須分裝在引號中。在HTML中,引號是可用可不用的。
5. 在HTML中,可以擁有不帶值的屬性名。在XML中,所有的屬性都必須帶有相應的值。
XML是用來存儲和傳輸數據的
HTML是用來顯示數據的
如果使用了完全符合XML語法要求的HTML,那麼就叫做符合XHTML標準。符合XHTML標準的頁面有利於SEO。
22、string str = null 與 string str =””說明其中的區別。
答:string str = null 是不給他分配記憶體空間,而string str = \"\" 給它分配長度為空字元串的記憶體空間。 string str = null沒有string對象,string str = “”有一個字元串對象。
string s3 = string.Empty;//反編譯發現,string.Empty就是在類構造函數中 Empty = "";
23、寫出一條Sql語句:取出表A中第31到第40記錄(SQLServer,以自動增長的ID作為主鍵,註意:ID可能不是連續的。
答:解1: select top 10 * from A where id not in (select top 30 id from A)
演變步驟:
1)select top 30 id from T_FilterWords--取前條
2)select * from T_FilterWords
where id not in (select top 30 id from T_FilterWords)--取id不等於前三十條的
--也就是把前條排除在外
3)select top 10 * from T_FilterWords
where id not in (select top 30 id from T_FilterWords)
--取把前條排除在外的前條,也就是-40條
解2: select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A)
解答3:用ROW_NUMBER實現
24、在.Net中所有可序列化的類都被標記為
[serializable]
25、什麼是code-Behind技術。
就是代碼隱藏,在ASP.NET中通過ASPX頁面指向CS文件的方法實現顯示邏輯和處理邏輯的分離,這樣有助於web應用程式的創建。比如分工,美工和編程的可以個乾各的,不用再像以前asp那樣都代碼和html代碼混在一起,難以維護。code-Behind是基於部分類技術實現的,在我的項目的三層代碼生成器中用到了部分類。
26、介面是一種引用類型,在介面中可以聲明( a),但不可以聲明公有的域或私有的成員變數。
a) 方法、屬性、索引器和事件;
b) 索引器和欄位;
c) 事件和欄位;
解讀:介面中不能聲明欄位只能聲明方法,屬性、索引器和事件 最終都編譯生成方法。因為欄位屬於實現層面的東西,只有存取值的時候才會用到欄位,所以中介面中不能定義欄位。
27、在ADO.NET中,對於Command對象的ExecuteNonQuery()方法和ExecuteReader()方法,下麵敘述錯誤的是(c)。
a) insert、update、delete等操作的Sql語句主要用ExecuteNonQuery()方法來執行;
b) ExecuteNonQuery()方法返回執行Sql語句所影響的行數。
c) Select操作的Sql語句只能由ExecuteReader()方法來執行;
d) ExecuteReader()方法返回一個DataReader對象;
拿SQLHelper實現一下。
28、StringBuilder 和 String 的區別?
答:String 在進行運算時(如賦值、拼接等)會產生一個新的實例,而 StringBuilder 則不會。所以在大量字元串拼接或頻繁對某一字元串進行操作時最好使用 StringBuilder,不要使用 String
如果要操作一個不斷增長的字元串,儘量不用String類,改用StringBuilder類。兩個類的工作原理不同:String類是一種傳統的修改字元串的方式,它確實可以完成把一個字元串添加到另一個字元串上的工作沒錯,但是在.NET框架下,這個操作實在是划不來。因為系統先是把兩個字元串寫入記憶體,接著刪除原來的String對象,然後創建一個String對象,並讀取記憶體中的數據賦給該對象。這一來二去的,耗了不少時間。而使用System.Text命名空間下麵的StringBuilder類就不是這樣了,它提供的Append方法,能夠在已有對象的原地進行字元串的修改,簡單而且直接。當然,一般情況下覺察不到這二者效率的差異,但如果你要對某個字元串進行大量的添加操作,那麼StringBuilder類所耗費的時間和String類簡直不是一個數量級的。
29、請敘述屬性與索引器的區別。 (*)
屬性 索引器
通過名稱標識。 通過簽名標識。
通過簡單名稱或成員訪問來訪問。 通過元素訪問來訪問。
可以為靜態成員或實例成員。 必須為實例成員。
屬性的 get 訪問器沒有參數。 索引器的 get 訪問器具有與索引器相同的形參表。
屬性的 set 訪問器包含隱式 value 參數。 除了 value 參數外,索引器的 set 訪問器還具有與索引器相同的形參表。
30、請解釋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" 表用運行時使用哪一個隱藏類
aspx頁面會編譯生成一個類,這個類從隱藏類繼承。
31、您在什麼情況下會用到虛方法?它與介面有什麼不同?
答案:子類重新定義父類的某一個方法時,必須把父類的方法定義為virtual
在定義介面中不能有方法體,虛方法可以。
實現時,子類可以不重新定義虛方法,但如果一個類繼承介面,那必須實現這個介面。
32、DataReader和DataSet的異同?
DataReader使用時始終占用SqlConnection,線上操作資料庫
每次只在記憶體中載入一條數據,所以占用的記憶體是很小的
是只進的、 只讀的
DataSet則是將數據一次性載入在記憶體中.拋棄資料庫連接..讀取完畢即放棄資料庫連接(非連接模式)
DataSet將數據全部載入在記憶體中.所以比較消耗記憶體...但是確比DataReader要靈活..可以動態的添加行,列,數據.對資料庫進行 回傳更新操作(動態操作讀入到記憶體的數據)
33、public static const int A = 1;這段代碼有錯誤麽?
錯誤:const不能被修飾為static ;因為定義為常量 (const )後就是靜態的(static )。
34、傳入某個屬性的set方法的隱含參數的名稱是什麼?
value,它的類型和屬性所聲名的類型相同。
35、C#支持多重繼承麽?
類之間不支持,介面之間支持。類對介面叫做實現,不叫繼承。 類是爹、介面是能力,能有多個能力,但不能有多個爹。
36、C#中所有對象共同的基類是什麼?
System.Object
37、通過超鏈接怎樣傳遞中文參數?
答:用URL編碼,通過QueryString傳遞,用urlencode編碼 用urldecode解碼
38、string、String;int、Int32;Boolean、bool的區別
String、Int32、Boolean等都屬於.Net中定義的類,而string、int、bool相當於C#中對這些類定義的別名。CTS。
39、Server.Transfer和Response.Redirect的區別是什麼?(常考)
答: Server.Transfer僅是伺服器中控制權的轉向,在客戶端瀏覽器地址欄中不會顯示出轉向後的地址;Response.Redirect則是完全的跳轉,瀏覽器將會得到跳轉的地址,並重新發送請求鏈接。這樣,從瀏覽器的地址欄中可以看到跳轉後的鏈接地址。
Server.Transfer是伺服器請求資源,伺服器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然後把這些內容再發給瀏覽器,瀏覽器根本不知道伺服器發送的內容是從哪兒來的,所以它的地址欄中還是原來的地址。 這個過程中瀏覽器和Web伺服器之間經過了一次交互。
Response.Redirect就是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器重新去請求那個地址,一般來說瀏覽器會用剛纔請求的所有參數重新請求。這個過程中瀏覽器和Web伺服器之間經過了兩次交互。
Server.Transfer不可以轉向外部網站,而Response.Redirect可以。
Server.Execute效果和Server.Transfer類似,但是是把執行的結果嵌入當前頁面。
40、不是說字元串是不可變的嗎?string s="abc";s="123"不就是變了嗎?
String是不可變的在這段代碼中,s原先指向一個String對象,內容是 "abc",然後我們將s指向"123",那麼s所指向的那個對象是否發生了改變呢?答案是沒有。這時,s不指向原來那個對象了,而指向了另一個 String對象,內容為"123",原來那個對象還存在於記憶體之中,只是s這個引用變數不再指向它了。
41、是否可以從一個static方法內部發出對非static方法的調用?
不可以。因為非static方法是要與對象關聯在一起的,必須創建一個對象後,才可以在該對象上進行方法調用,而static方法調用時不需要創建對象,可以直接調用。也就是說,當一個static方法被調用時,可能還沒有創建任何實例對象,如果從一個static方法中發出對非static方法的調用,那個非static方法是關聯到哪個對象上的呢?這個邏輯無法成立,所以,一個static方法內部不能發出對非static方法的調用。
42、說出一些常用的類、介面,請各舉5個
要讓人家感覺你對.Net開發很熟,所以,不能僅僅只列誰都能想到的那些東西,要多列你在做項目中涉及的那些東西。就寫你最近寫的那些程式中涉及的那些類。
常用的類:StreamReader、WebClient、Dictionary<K,V>、StringBuilder、SqlConnection、FileStream、File、Regex、List<T>
常用的介面:IDisposable、IEnumerable、IDbConnection、IComparable、ICollection、IList、IDictionary
要出乎意料!不要僅僅完成任務!筆試不是高考!處處要顯出牛!
說出幾個開源軟體?MySQL、Linux、 Discuz、Apache、Paint.Net、Android、Chrome、Notepad++……
開源項目有一些是開發包。開源軟體指的是可以直接用的。Jquery、NPOI、ASP.Net MVC、Silverlight Toolkit、AJAX toolkit、json.net
43、編寫一個單例(Singleton)類。
把構造函數設置為private,設置一個public、static的對象實例
public FileManager
{
private FileManager(){}
public readonly static FileManager Instance = new FileManager();
}
擴展:搜“C# Singleton”,有線程安全的更牛B的實現
44、什麼是sql註入?如何避免sql註入?
用戶根據系統的程式構造非法的參數從而導致程式執行不是程式員期望的惡意SQL語句。使用參數化的SQL就可以避免SQL註入。
詳細參考複習ppt。舉例子,擺事實!
1' or 1=1
45、資料庫三範式是什麼?
用自己的話解釋,而不是背概念。
第一範式:欄位不能有冗餘信息,所有欄位都是必不可少的。
第二範式:滿足第一範式並且表必須有主鍵。
第三範式:滿足第二範式並且表引用其他的表必須通過主鍵引用。
員工內部→自己的老大→外部的老大
記憶順序:自己內部不重覆→別人引用自己→自己引用別人。
46、post、get的區別
get的參數會顯示在瀏覽器地址欄中,而post的參數不會顯示在瀏覽器地址欄中;
使用post提交的頁面在點擊【刷新】按鈕的時候瀏覽器一般會提示“是否重新提交”,而get則不會;
用get的頁面可以被搜索引擎抓取,而用post的則不可以;
用post可以提交的數據量非常大,而用get可以提交的數據量則非常小(2k),受限於網頁地址的長度。
用post可以進行文件的提交,而用get則不可以。
參考閱讀:http://www.cnblogs.com/skynet/archive/2010/05/18/1738301.html
47、.Net、ASP.Net、C#、VisualStudio之間的關係是什麼?
答:.Net一般指的是.Net Framework,提供了基礎的.Net類,這些類可以被任何一種.Net編程語言調用,.Net Framework還提供了CLR、JIT、GC等基礎功能。
ASP.Net是.Net中用來進行Web開發的一種技術,ASP.Net的頁面部分寫在aspx 文件中,邏輯代碼通常通過Code-behind的方式用C#、VB.Net等支持.Net的語言編寫。
C#是使用最廣泛的支持.Net的編程語言。除了C#還有VB.Net、IronPython等。
VisualStudio是微軟提供的用來進行.Net開發的集成開發環境(IDE),使用VisualStudio可以簡化很多工作,不用程式員直接調用csc.exe等命令行進行程式的編譯,而且VisualStudio提供了代碼自動完成、代碼高亮等功能方便開發。除了VisualStudio,還有SharpDevelop、MonoDevelop等免費、開源的IDE,VisualStudio Express版這個免費版本。
48、AJAX解決什麼問題?如何使用AJAX?AJAX有什麼問題需要註意?項目中哪裡用到了AJAX?
答:AJAX解決的問題就是“無刷新更新頁面”,用傳統的HTML表單方式進行頁面的更新時,每次都要將請求提交到伺服器,伺服器返回後再重繪界面,這樣界面就會經歷:提交→變白→重新顯示這樣一個過程,用戶體驗非常差,使用AJAX則不會導致頁面重新提交、刷新。
AJAX最本質的實現是在Javascript中使用XMLHttpRequest進行Http的請求,開發中通常使用UpdatePanel、JQuery等方式簡化AJAX的開發,UpdatePanel的方式實現AJAX最簡單,但是數據通訊量比較大,因為要來回傳整個ViewState,而且不靈活,對於複雜的需求則可以使用JQuery提供的ajax功能。
UpdatePanel的內部原理。
AJAX最重要的問題是無法跨域請求(www.rupeng.com →so.rupeng.com),也就是無法在頁面中向和當前功能變數名稱不同的頁面發送請求,可以使用在當前頁面所在的域的服務端做代理頁面的方式解決。
在如鵬網項目中發帖的時候顯示相關帖的功能、站內搜索項目中顯示搜索Suggestion、數據採集項目中都用到了AJAX。
常考:不用任何框架編寫一個AJAX程式。XHR:XmlHttpRequest。背也要背下來!
如果面試的時候談AJAX談到UpdatePanel的時候,就是NB的時候!!!先侃UpdatePanel的原理!引出為什麼Dom操作的動態效果在用UpdatePanel提交刷新以後沒有了,以及CKEditor被套在UpdatePanel中提交以後也變成了textarea,為什麼把Fileupload放到Updatepanel中無法實現無刷新上傳。說成是公司內部的一個菜鳥用UpdatePanel遇到這樣問題,由於我懂XHR、UpdatePanel的原理,所以輕鬆解決!UpdatePanel生成的上萬行JS腳本,不適合於互聯網項目。“WebForm怎麼可能把開發人員編程傻子呢!不明白原理苦命呀!還是MVC好呀,MVC。。。。。。。”
49、Application 、Cookie和 Session 兩種會話有什麼不同?
答:Application是用來存取整個網站全局的信息,而Session是用來存取與具體某個訪問者關聯的信息。Cookie是保存在客戶端的,機密信息不能保存在Cookie中,只能放小數據;Session是保存在伺服器端的,比較安全,可以放大數據。
談到Session的時候就侃Session和Cookie的關係:Cookie中的SessionId。和別人對比說自己懂這個原理而給工作帶來的方便之處。
50、開放式問題:你經常訪問的技術類的網站是什麼?
博客園(www.cnblogs.com)、csdn、codeplex、codeproject、msdn文檔、msdn論壇(遇到問題先到網上搜解決方案,還不行就問同事,同事也解決不了就去MSDN論壇提問,一定能得到解決)。Cnbeta.com。
————————————————
版權聲明:本文為CSDN博主「知更鳥的碼」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/ananlele_/article/details/99583286