小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

.Net 面試題整理(一)

 圖書館煮飯少年 2018-04-13

好久的資料了,拿出來分享給大家,主要是記錄一些面試題整理。

  1. Main函數(shù)是什么?在程序中使用Main函數(shù)有什么需要注意的地方?
    Q:程序的入口函數(shù)!函數(shù)名字不能改變;一個程序中有且只有一個Main函數(shù)。

  2. CLR是什么?程序集是什么?當(dāng)運(yùn)行一個程序集的時候,CLR做了什么事情?
    Q:Common Language RunTime 公共語言運(yùn)行時。
    編譯后代碼的集合。(包括exe和dll)。 加載項目里所有的類到內(nèi)存,并找到其中的主函數(shù),并作為默認(rèn)的啟動函數(shù)調(diào)用執(zhí)行。

  3. 值類型的默認(rèn)值是什么?(情況一:字段或全局靜態(tài)變量;情況二:局部變量)
    Q:如果是全局變量,并且沒賦值,就會有默認(rèn)值,如:int 是0;bool 是false;枚舉enum;結(jié)構(gòu)體struct;
    如果是局部變量,就必須手動賦值。

  4. 聲明一個變量時在內(nèi)存中做了什么事情?初始化一個變量的時候又在內(nèi)存中做了什么事情?
    Q:在棧中開辟空間,并將變量放入空間里,默認(rèn)值都是null。
    初始化時:
    如果是值類型,則直接放入棧中;
    如果是引用類型,則在堆中開辟一塊空間,將堆中對象的地址指針放入棧中

  5. new關(guān)鍵字做的事情?
    Q:開辟空間,創(chuàng)建對象,調(diào)用構(gòu)造函數(shù),返回堆地址。
    還可以 顯示的隱藏 父類的同名方法。

  6. 數(shù)組
    061.數(shù)組一旦創(chuàng)建后,能不能修改數(shù)組的長度?
    Q:不能。為什么呢?數(shù)組是引用類型。它在創(chuàng)建時,已經(jīng)根據(jù)創(chuàng)建的長度在內(nèi)存中開辟一塊連續(xù)的空間。

  7. 多維數(shù)組 本質(zhì)就是一個一位數(shù)組,只不過訪問的 時候需要使用多個下標(biāo)訪問
    071.如何聲明一個多維數(shù)組?
    Q:多維數(shù)組string[,] strArr=new string[3,3];

    072.如何獲取多維數(shù)組的總長度?
    Q:各個緯度元素的個數(shù)的乘積

  8. 交錯數(shù)組
    081.如何聲明一個交錯數(shù)組?
    Q:交錯數(shù)組:int[][] arr=new int[3][3];

    082.交錯數(shù)組的本質(zhì)是什么?
    Q:本質(zhì)是一個數(shù)組的數(shù)組。簡單的說這個數(shù)組的元素是一個數(shù)組。

面向?qū)ο螅ㄒ唬?/h2>

01.為什么要有方法?
Q:為了復(fù)用。(封裝)(重復(fù)調(diào)用,封裝具體實現(xiàn))

02.如何實現(xiàn)方法的重載?
Q:方法名相同,但參數(shù)列表不同。(和返回值無關(guān))

03.引用參數(shù)(ref)和輸出參數(shù)(out)的相同點與不同點?
Q:相同點:傳遞的都是(棧)引用。
不同點:
out側(cè)重于輸出參數(shù);ref側(cè)重于修改;
out必須方法返回之前賦值;ref必須在傳入之前賦值。

04.在什么情況下使用引用參數(shù)(ref)和輸出參數(shù)(out)?
Q:如果方法有多個返回值,則可以用out或者ref。只不過ref側(cè)重于修改(即將值傳進(jìn)去修改后再拿出來);而out是為了從方法中獲得一個值后拿到方法外使用。
05.可變參數(shù)與普通數(shù)組參數(shù)的區(qū)別?
Q:params關(guān)鍵字。
特點:
一個方法中只能有一個可變參數(shù);
而且必須放在參數(shù)列表最后;
如果沒有給可變參數(shù)賦值,就初始化長度為0;

01.面向?qū)ο蟮娜筇卣魇鞘裁矗?
Q:封裝;繼承;多態(tài);

02.類和對象的關(guān)系?
Q:抽象和具體的關(guān)系。類是抽象(模板,設(shè)計圖紙),對象是具體(按照圖紙設(shè)計的房子)。類是對對象的抽象描述,而對象是類的具體化。

03.創(chuàng)建某一個類的對象的時候,在內(nèi)存中做了什么事情?例如 Person p = new Person();
Q:開辟空間,創(chuàng)建對象,調(diào)用構(gòu)造函數(shù)。(在內(nèi)存的堆中開辟空間,創(chuàng)建Person對象,然后在內(nèi)存的棧中開辟一個放一個p,然后將Person對象在堆中的引用地址賦值給對象p)
04.屬性存在的目的是什么?
Q:封裝字段。為了對字段的操作設(shè)置規(guī)則。(本質(zhì)是兩個方法,一個get方法和一個set方法)
05.訪問修飾符有哪些并分別每一個訪問修飾符?
Q:public(公有的),
private(只有本類可以訪問),
internal(程序集內(nèi)共享,如果不寫修飾符,默認(rèn)就是internal),
protected(本類和子類可以訪問),
extern(供外部訪問,eg:C#提供接口給C++訪問)
06.為什么要有構(gòu)造函數(shù)呢?
Q:主要方便程序猿在實例化對象的時候就為對象里的一些屬性和字段初始化賦值。
07.什么是封裝?封裝的目的是什么?
Q:封裝就是將對象的字段、行為和功能等“弄”到一起。
封裝的目的:隱蔽代碼實現(xiàn)/復(fù)用/修改方便
08.類的命名規(guī)則是什么?
Q:類命名:首字母大寫(帕斯卡命名)。變量命名:首字母小寫(駱駝命名)

面向?qū)ο螅ǘ?/h2>

01.什么是類型?
Q:用來定義某一種數(shù)據(jù)在內(nèi)存里開辟空間的大小,還可以預(yù)置操作此種類型數(shù)據(jù)的相關(guān)方法

02.this關(guān)鍵字在方法中使用時,它代表什么?
Q:this指當(dāng)前類的對象,或者他的父類的類對象。
base只能指向父類的對象。

03.值類型變量的初始化(內(nèi)存分配)?(兩種情況:一是類的成員變量,二是:方法的局部變量)
Q:1、當(dāng)變量是一個類的成員變量的時候,那么該變量是跟隨累的對象存在于堆內(nèi)存。當(dāng)對象引用斷開時,等著垃圾回收器進(jìn)行清理時便被銷毀
2、當(dāng)變量是一個方法的局域變量時,那么該變量是在方法被調(diào)用時,存在于棧內(nèi)存,方法執(zhí)行完畢后被銷毀

04.繼承
041.繼承的好處?
Q:1.提高代碼的復(fù)用;
2.實現(xiàn)多態(tài);

042.繼承的單根性
    Q:一個類只能繼承一個父類。

043.繼承的傳遞性
    Q:指子類只能繼承父類的非私有的成員。

044.當(dāng)存在繼承關(guān)系的時候,在子類中如何訪問父類的非私有成員?
    Q:通過base關(guān)鍵字--(只能獲取父類的)(base就是存在于子類對象里,用來指向父類對象的指針)
       或者通過this關(guān)鍵字--(可以獲取父類的非私有的成員和本類的成員)

05.什么是里氏替換原則?
Q:子類替換父類所在的位置

06.子類與父類對象之間的轉(zhuǎn)換?
Q:子類可以強(qiáng)制轉(zhuǎn)換為父類,但是父類不能轉(zhuǎn)換為子類。

07.is 和 as 操作符的用處和區(qū)別?
Q:is是對類型的判斷,返回bool。(判斷A是否是B類,或者A是不是B的子類)。(如果一個對象是某個類型或是其父類型的話就返回true,否則就會返回為false。另外is操作符永遠(yuǎn)不會拋出異常。
as是用來做類型轉(zhuǎn)換的。as只能針對引用類型的轉(zhuǎn)換。as 是先判斷再轉(zhuǎn)換(as 操作符首先測試轉(zhuǎn)換是否合法,如果合法就轉(zhuǎn)換,否則返回NULL。不會報錯)
這兩者都不會拋出異常。

08.override可以重寫哪些 “類型” 的方法?
Q:可以重寫虛方法(virtual)–必須有方法體
還可以重寫抽象方法 (abstract)–沒有方法體

09.什么是多態(tài)?
Q:就是用某個子類來實例化父類,調(diào)用的是父類的抽象方法(虛方法),但實際執(zhí)行的是子類實例重寫的方法

10.抽象方法只能定義在抽象類中嗎?
Q:是的。
(virtual or abstract members cannot be private)

面向?qū)ο螅ㄈ?/h2>

01.CLR什么時候加載類?
Q:是在第一次在代碼中遇到這個類的時候才加載類的靜態(tài)成員和信息。(為了節(jié)約資源,只在用的時候才開始加載進(jìn)去)

02.當(dāng)存在繼承關(guān)系的時候,創(chuàng)建子類對象的時候會不會創(chuàng)建父類對象呢?
Q:這個很易錯?。。?!當(dāng)我們創(chuàng)建一個子類時不會創(chuàng)建父類對象,只會有一個對象。Person c=new Student(),(當(dāng)我們new一個子類的時候,在內(nèi)存中,只有一個子類對象)
??!–??!—-那下面括號里面的就是錯誤的?。?!
(new子類時,先創(chuàng)建子類對象,調(diào)用子類的構(gòu)造函數(shù)時,創(chuàng)建父類對象,調(diào)用父類構(gòu)造函數(shù)最后返回來執(zhí)行子類構(gòu)造函數(shù)方法體代碼

子類默認(rèn)調(diào)用父類的無參構(gòu)造函數(shù)
如果父類里沒有無參構(gòu)造函數(shù),則必須顯示的調(diào)用)
其實在內(nèi)存中是沒有對象概念的!new的時候是根據(jù)子類和父類所有靜態(tài)成員的大小以及類型指針開辟一個總的空間(此空間不包含方法),子類和父類的類型指針指向兩個類的方法表,所以,子類對象可以訪問到父類和子類的方法。

03.如果子類和父類存在同名但沒有重寫關(guān)系的方法的時候,那么會調(diào)用哪個方法?(兩種情況:一是使用子類對象,而是使用父類對象)
Q:如果子類和父類存在同名但沒有重寫關(guān)系的方法,那么調(diào)用時,如果是父類變量調(diào)用,則調(diào)用父類方法,如果是子類變量調(diào)用,則調(diào)用子類方法

04.如果子類和父類存在同名且有重寫關(guān)系的方法,那么會調(diào)用那個方法?(兩種情況:一是使用子類對象,而是使用父類對象)
Q:如果子類和父類存在同名且有重寫關(guān)系的方法,那么不管變量是什么類型,調(diào)用的都是子類的方法。

05.虛方法和抽象方法的相同點與不同點?
Q :相同點:都能被子類重寫;都不能為私有的
不同點:
1.abstract 和virtual的關(guān)鍵字不同
2.抽象方法一定沒有方法體,而虛方法必須有方法體。
3.virtual方法的子類可以重寫父類方法也可不重寫,而抽象方法的所在的類的子類必須重寫該父類方法
4.抽象方法必須在抽象類中聲明,而虛方法可以存在于任何一個類里面
5.virtual方法必須有現(xiàn)實(哪怕是空實現(xiàn)),而abstract方法必須沒有實現(xiàn)

06.子類中的base關(guān)鍵字指向的是子類對象還是父類對象?它本身的類型是子類類型還是父類類型呢?
Q:當(dāng)然是指向的父類對象。 但是本身是子類的類型。
(base就是子類對象本身,只不過類型是父類)

07.為什么要有抽象類?
Q:抽象類存在的目的就是指定規(guī)則,而不是具體實現(xiàn),是為了約束子類的行為,具體實現(xiàn)交給子類完成。

08.使用多態(tài)的好處是什么?
Q:1.低耦合,高內(nèi)聚。(低耦合—代碼的內(nèi)部各個層之間的關(guān)聯(lián)小,相互之間約束少。 高內(nèi)聚—方法的功能和職責(zé)單一,即一個方法只做一件事情。)
2.實現(xiàn)代碼的可維護(hù)性 和 可擴(kuò)展性。
3.把不同的子類對象都當(dāng)作父類來看,可以屏蔽不同子類對象之間的差異,寫出通用的代碼,做出通用的編程,以適應(yīng)需求的不斷變化。

09.什么情況下的類不能被實例化?
Q:1.抽象類
2.靜態(tài)類
3.類的構(gòu)造函數(shù)被私有化

10.什么情況下抽象類的子類不需要實現(xiàn)父類的抽象成員?
Q:子類也是抽象類的時候。

11.虛方法(虛擬成員)和抽象方法(抽象成員)能不能被私有化?
Q:當(dāng)然不能。(首先編譯就會報錯)?!顚釉颍核麄儍烧叽嬖诘哪康木褪菫榱俗屪宇惾ブ貙?,如果私有化了,就沒意義了。

12.靜態(tài)成員能不能被標(biāo)記為virtual、override 或 abstract?
Q:不能:

13.接口的命名規(guī)則?
Q:以大寫I為開頭,以…able結(jié)尾。表示有某種能力。

14.什么是接口?
Q:特殊的抽象類。他的存在完全是為了約束和統(tǒng)一類的行為。

15.接口能包含的成員有哪些?
Q:接口只有方法、屬性、索引器和事件的聲明

16.接口的訪問權(quán)限修飾符只能是哪兩種?
Q:public和internal

17.接口能不能繼承接口?
Q:能。而且可以實現(xiàn)多個接口。

18.如果一個抽象類繼承了一個接口,那么將繼承的方法設(shè)置為抽象方法,還是去實現(xiàn)該方法?
Q:都可以。 既可以在抽象類的子類中去實現(xiàn),也可在抽象類中直接實現(xiàn)。


付炯 2月19日
1、使用接口的注意事項
Q:1,接口中的成員不能加訪問修飾符;
2,接口中的成員不能有任何實現(xiàn);
3,實現(xiàn)接口的子類的必須實現(xiàn)接口的全部 成員;
4,接口中只能有方法,屬性,索引器,事件,不能有字段。
5,一個類可以同時繼承一個類并實現(xiàn)多個接口,如果一個子類同時繼承了父類A,并實現(xiàn)了接口IA,那么在語法上A必須寫在IA的前面,因為類是單繼承的,而接口可以實現(xiàn)多個。
6,顯示實現(xiàn)接口和隱式實現(xiàn)接口時需要注意的問題,(通常我們是隱式實現(xiàn)的),
類實現(xiàn)接口,可以顯式的實現(xiàn)接口里的方法,但是注意:一旦使用顯式實現(xiàn)接口里的方法后,那么該方法只能被接口變量調(diào)用
IFlyable fly = new Bird();
fly.Fly(); //正確
Bird fly = new Bird();
fly.Fly(); //錯誤

     7,向上轉(zhuǎn)型

     8,單一職責(zé)原則 (避免定義體積龐大的接口,因為這樣會造成“接口污染”,只把相關(guān)聯(lián)的一組成員定義到一個接口中)

2、接口與抽象類的區(qū)別
Q:相同點:
接口和抽象類都不能被實例化;
不同點:
1,接口中不能存在有具體實現(xiàn)的方法;而抽象類中可以有具體的方法實現(xiàn)。(接口只能定義行為,而抽象類既可以定義行為也可以提供實現(xiàn))
2,接口支持多繼承,而抽象類不能實現(xiàn)多繼承;
3,接口可以定義方法Method,屬性property,索引器Index,事件Event的簽名,但不能定義字段和這些東西的具體實現(xiàn),而抽象類什么都能定義和實現(xiàn),除了 不能被實例化

                  老鄒的2011年答案:
                    1) 抽象基類可以定義字段、屬性、方法實現(xiàn)。接口只能定義屬性、索引器、事件、和方法
                    聲明,不能包含字段。 
                    2) 抽象類是一個不完整的類,需要進(jìn)一步細(xì)化,而接口是一個行為規(guī)范。微軟的自定義接
                    口總是后帶able字段,證明其是表述一類“我能做。。?!?。 
                    3) 接口可以被多重實現(xiàn),抽象類只能被單一繼承。 
                    4) 抽象類更多的是定義在一系列緊密相關(guān)的類間, 而接口大多數(shù)是關(guān)系疏松但都實現(xiàn)某一
                    功能的類中。 
                    5) 抽象類是從一系列相關(guān)對象中抽象出來的概念, 因此反映的是事物的內(nèi)部共性;接口
                    是為了滿足外部調(diào)用而定義的一個功能約定, 因此反映的是事物的外部特性。 
                    6) 接口基本上不具備繼承的任何具體特點,它僅僅承諾了能夠調(diào)用的方法。    
                    7) 接口可以用于支持回調(diào),而繼承并不具備這個特點。 
                    8) 抽象類實現(xiàn)的具體方法默認(rèn)為虛的, 但實現(xiàn)接口的類中的接口方法卻默認(rèn)為非虛的, 當(dāng)
                    然您也可以聲明為虛的。 
                    9) 如果抽象類實現(xiàn)接口,則可以把接口中方法映射到抽象類中作為抽象方法而不必實現(xiàn),
                    而在抽象類的子類中實現(xiàn)接口中方法

3、類型轉(zhuǎn)換
轉(zhuǎn)換分類
Q:隱式轉(zhuǎn)換 int num = 1; string str= num.tostring();
強(qiáng)制轉(zhuǎn)換 int a = 5; (double ) b= a;

    轉(zhuǎn)換條件

    ToString()方法
         Q:它是object對象的一個虛方法,可以自己去重寫該方法。如果不重寫就返回類型名。

    Parse()和TryParse()方法
        Q:相同點:都是針對于字符串進(jìn)行的值類型轉(zhuǎn)換。
               不通點:1,返回值不一樣。Parse()是返回要轉(zhuǎn)換的類型,而TryParse()返回一個轉(zhuǎn)換是否成功的bool值。
                              2,Parse()轉(zhuǎn)換失敗會拋異常,而TryParse()轉(zhuǎn)換失敗返回false,不會拋異常。
                              3,Parse()直接傳入要轉(zhuǎn)換的類型的值,而TryParse()需要一個out輸出參數(shù)輸出轉(zhuǎn)換的結(jié)果。

4、靜態(tài)成員
加載時機(jī) (什么時候加載靜態(tài)成員?)
 Q:在該靜態(tài)成員第一次被調(diào)用的時候加載。

   適用情形(什么時候用靜態(tài)成員?)
        Q:在整個程序內(nèi)部共享的數(shù)據(jù)才定義為靜態(tài)的。通常被作為工具類使用。比如SQLHelper

在普通類和靜態(tài)類中的區(qū)別
        Q:1,靜態(tài)類需要用static。靜態(tài)類不能被實例化。
               2,靜態(tài)類中只能包含靜態(tài)成員;
               3,靜態(tài)成員屬于類所有,非靜態(tài)成員屬于類的實例所有。
               4,在實例方法中可以直接調(diào)用靜態(tài)成員,但在靜態(tài)方法中不能直接調(diào)用實例方法。
               5,靜態(tài)類和靜態(tài)變量創(chuàng)建后始終使用同一塊內(nèi)存,而使用實例的方法會創(chuàng)建多個內(nèi)存。
               6,靜態(tài)構(gòu)造函數(shù)不能有參數(shù),也不能有訪問修飾符(默認(rèn)是private)

5、靜態(tài)類的繼承
Q:1,(從子類的角度)靜態(tài)類不能被任何類繼承
2,(從父類的角度)靜態(tài)類只能繼承Object類,不能繼承其他的類。

6、類和成員的訪問修飾符
Q:1,類的默認(rèn)訪問修飾符是internal,
2,類的成員的默認(rèn)訪問修飾符是private

a.類的訪問修飾符只有兩種:public,internal(默認(rèn))
b.成員的訪問修飾符有:public,protected,private(默認(rèn))

7、結(jié)構(gòu)
本質(zhì)是值類型
值類型和引用類型的選擇
Q:1.值類型:主要是用來封裝一組數(shù)據(jù),并為數(shù)據(jù)提供一種簡單的處理方式
2引用類型:
1).主要用來封裝數(shù)據(jù)和行為
2)使用面向?qū)ο蟮奶卣鳎?
3)當(dāng)類型中的成員比較多的時候用結(jié)構(gòu)(存在堆里)

new關(guān)鍵字的作用
    Q:結(jié)構(gòu) 
           在使用new關(guān)鍵字創(chuàng)建對象后,所有的成員變量都已經(jīng)存在,并有默認(rèn)值(值類型)
           如果沒有用new關(guān)鍵字,則需要程序員手動為所有的  用到了  的成員變量賦值,之后才能調(diào)用結(jié)構(gòu)對象里的方法屬性
           結(jié)構(gòu)不new也可以使用,但是必須給使用到的結(jié)構(gòu)成員賦值才能使用

8、類和結(jié)構(gòu)的區(qū)別
Q:1,結(jié)構(gòu)是值類型,是分配在內(nèi)存的棧上的。而類是引用類型,是分配在內(nèi)存的堆上的;
2,結(jié)構(gòu)不能被繼承,因為結(jié)構(gòu)是值類型,隱式繼承自System.ValueType
3,結(jié)構(gòu)是值傳遞的(復(fù)制傳遞),而類是引用傳遞的。

9、值類型和引用類型作為參數(shù)傳遞的區(qū)別
Q:值類型是值傳遞的(復(fù)制傳遞),而類是引用傳遞的(傳的是地址的引用)。

10、訪問級別約束
Q:1,子類的訪問級別不能比父類高
2,方法參數(shù)的訪問級別 >= 方法的訪問級別 (比如當(dāng)方法的參數(shù)傳遞的是一個類對象時,那么此時這個類對象的訪問級別要高于當(dāng)前方法的訪問級別)

11、析構(gòu)函數(shù)
Q:1,一個類只能有一個析構(gòu)函數(shù),
2,無法繼承或重載析構(gòu)函數(shù)
3,我們無法手動去調(diào)用析構(gòu)函數(shù),因為它是被GC(垃圾回收器)自動調(diào)用的
4,析構(gòu)函數(shù)不能有訪問修飾符,也不能有參數(shù)
5,不能在結(jié)構(gòu)體中定義析構(gòu)函數(shù)(為什么呢?)–因為結(jié)構(gòu)是值類型,而值類型是存儲在棧中的,棧中的數(shù)據(jù)在用完之后就立即銷毀了,而析構(gòu)函數(shù)的目的就是用來釋放資源的,一般存儲在堆中的引用類型才需要GC去釋放,因而結(jié)構(gòu)體中是不能定義析構(gòu)函數(shù)的,只能對類使用析構(gòu)函數(shù)。

       析構(gòu)函數(shù)語法:
       class MyDispose
       {
            ~MyDispose()
            {
                ......//在這里寫釋放資源的代碼
            }
       }

12、字符串
屬性
length
靜態(tài)方法
常用:
1、(Last)IndexOf:用來查找某個字符或字符串,在一個特定字符串對象里的下標(biāo)
2、SubString 截取
3、Split() 根據(jù)特定字符來分割字符串,并返回分割后的字符串的數(shù)組,可以用foreach讀取
4、Join靜態(tài)方法
5、Format() 靜態(tài)方法
6、Replace(),替換完要接收,產(chǎn)生一個新的字符串
7,Replace().Replace()鏈?zhǔn)骄幊?
8、Trim()去首尾空格

實例方法

13、==運(yùn)算符和Equals()方法的區(qū)別
Q:”==”比較時:
如果比較的是值類型,則比較兩個對象的值
如果比較的是引用類型,則比較兩個對象的引用地址是否相同(比較堆地址)
“Equals”比較時:
此方法是Object類里的一個虛方法,默認(rèn)就是用的“==”進(jìn)行比較。(它是對“==”進(jìn)行的一個封裝)
但是,大部分微軟的類,及用戶自定義的類,都重寫了該虛方法,也就是微軟和用戶各自為自己編寫的Object的子類 定義了相等比較規(guī)則。
注意:這里有一個特例,因為string是一個引用類型,所以按理說string.Equals(…)方法比較的是地址,而這里比較的字符串的值。

14、字符串的恒定性
Q:當(dāng)字符串在內(nèi)存中已經(jīng)被創(chuàng)建后,程序員在次創(chuàng)建相同值的字符串對象時,CLR做了優(yōu)化,直接把第一個字符串的引用賦給了第二個變量,也就是說,前后兩個字符串變量保存了相同的字符串對象應(yīng)用

15、StringBuilder對象
Q:高效的的字符串操作。
String 在進(jìn)行運(yùn)算時(如賦值、拼接等)會產(chǎn)生一個新的實例,而 StringBuilder 則不
會 。 所以在大量字符串拼接或頻繁對某一字符串進(jìn)行操作時最好使用 StringBuilder , 不要使
用 String
如果要操作一個不斷增長的字符串,盡量不用 String 類 , 改用 StringBuilder 類。兩個類的工
作原理不同 :String 類是一種傳統(tǒng)的修改字符串的方式 , 它確實可以完成把一個字符串添加到
另一個字符串上的工作沒錯 , 但是在 .NET 框架下 , 這個操作實在是劃不來 。 因為系統(tǒng)先是把
兩個字符串寫入內(nèi)存 , 接著刪除原來的 String 對象 , 然后創(chuàng)建一個 String 對象 , 并讀取內(nèi)存
中的數(shù)據(jù)賦給該對象。這一來二去的,耗了不少時間。而使用 System.Text 命名空間下面 的
StringBuilder 類就不是這樣了,它提供的 Append 方法,能夠在已有對象的原地進(jìn)行字符串
的修改 , 簡單而且直接 。 當(dāng)然 , 一般情況下覺察不到這二者效率的差異 , 但如果你要對某個
字符串進(jìn)行大量的添加操作 , 那么 StringBuilder 類所耗費的時間和 String 類簡直不是一個數(shù)
量級的。

16、枚舉
本質(zhì)是類
枚舉項的相關(guān)問題
Q:1、如果為第一個枚舉項賦了一個int值,那么后面的枚舉項依次遞增。
2、可以將枚舉強(qiáng)轉(zhuǎn)成他所代表的int值
3、因為枚舉項都有對應(yīng)的int值,所以Switch把他當(dāng)成int看
4、C#的枚舉項都是常量(可以去看IL 代碼 literal)
5、不能定義方法,屬性,事件
6、多個枚舉有相同數(shù)值時。數(shù)值強(qiáng)轉(zhuǎn)時,會返回其中最后一個枚舉項
7、枚舉項的數(shù)值類型int ,long….

17、IEnumerable接口
Q:只要實現(xiàn)了該接口,就可以使用foreach進(jìn)行遍歷。 foreach循環(huán)的本質(zhì)就是調(diào)用這個接口返回一個迭代器,調(diào)用迭代器的MoveNext()方法就可以實現(xiàn)循環(huán)。
如下反編譯的源碼:
public interface IEnumerable
{
IEnumerator GetEnumerator(); //返回一個迭代器
}

    public interface IEnumerator
    {
        bool MoveNext();
        object Current { get; }
        void Reset();
    }

從以上反編譯源碼可以看出:   
IEnumerable接口中主要包含GetEnumerable方法(獲取迭代器對象),MoveNext方法(檢查是否存在循環(huán)的下一個元素),GetCurrent方法(獲得當(dāng)前循環(huán)到的元素)

2月20日
1、集合
概念理解
Q: 集合就是能裝一堆東西的容器。主要分為非泛型集合和泛型集合。
Arraylist— 里面真正存儲數(shù)據(jù)的是一個Object[]數(shù)組,它對應(yīng)的泛型是List,
HashTable—非泛型的鍵值對集合,它對應(yīng)的泛型是Dictionary

11.4 表單JS提交方式

王偉 3.18-3.23 第一部分:jquery

一、 查:當(dāng)你想在頁面中找到某個元素的時候,就要想到他們
↖(^ω^)↗
1.1基本選擇器:
Id選擇器 ,Calss選擇器,tag選擇器,* ,組合選
擇器
1.2層次選擇器:
后代選擇器,子代選擇器,匹配選擇器,~選擇器
1.3節(jié)點遍歷:
next(),nextAll(),prev(),prevAll(),siblings()
1.4過濾器:
:first,:last,:not,:even,:odd,:eq,:gt,:lt,
1.5屬性過濾器:
(div[id]),(“div[title=text]”),
1.6表單對象過濾器:
#form1:enabled,#form1:disabled,input:checked,select
option:select,
1.7表單選擇器
:input,:text,:password……
二、修改:修改頁面元素就用我吧 (^__^) 嘻嘻……
2.1jqury對象的方法
html(),val(),text(),css(),attr(),removeAttr()
2.2樣式操作:
attr(),addClass(),removeClass(),toggleClass(),hasClass()
2.3復(fù)制節(jié)點:
clone(),clone(true)
2.4替換
replaceWith(),replaceAll(),wrap(),
三、新增:當(dāng)你要新增元素時就用它們吧!O(∩_∩)O哈哈~
3.1創(chuàng)建Dom節(jié)點 例:$(“傳智播客官網(wǎng)”)
3.2 append(),appendTo()
3.3外部插入節(jié)點
after,before,insertAfter,insertBefore
四、刪除:你不要我們了嗎? ( ^_^ )/~~ 拜拜
remove()
empty()
五、批量處理
5.1隱式迭代
5.2.map,.each
5.3元素的map和each
六、其他內(nèi)容:
jquery動畫
jquery cookie

第二部分:Dom補(bǔ)充
放在這里是不是有點莫名奇妙 (⊙_⊙?)
ChildNodes(NodeList類型-有序類數(shù)組對象),
length屬性是實時的計算元素個數(shù)
insertBefore,appendChild,removeChild,replaceChild
parentNode(父元素),firstChild(第一個子元素),lastChild(最后一個子元
素),ownerDocument
nextSibling(下一個兄弟節(jié)點) , previousSibling(上一個兄弟節(jié)點)
cloneNode(bool)-復(fù)制節(jié)點(true-深拷貝,false-淺拷貝)
style.cssText設(shè)置元素的style屬性值

第三部分:js高級
1. Js面向?qū)ο缶幊?繼承)
2. 閉包
3. apply和call
4. 函數(shù)的屬性(arguments)
5. Eval()方法
6. 數(shù)據(jù)類型(array,object,function(不是)……)
7. Instanceof,typeof

8. 聲明式和表達(dá)式執(zhí)行順序

張連印 3.25-3.30
一:反射
1.同過反射動態(tài)調(diào)用方法 Invoke
2.Type.IsAssignableFrom(Type t);判斷type是否是T的父類,可判斷接口
3.Type.IsSubclassOf(Type T)//與上面方法的區(qū)別
4.通過反射獲得Type的方法,如私有方法、共有方法、靜態(tài)方法????
5.開發(fā)一個基于插件的記事本
6.特性,通過反射獲得特性信息,如何定義特性。

二.多線程:
1.多線程的概念
2.多線程的實現(xiàn)
3.線程重入
4.前臺線程和后臺線程
5.線程的調(diào)度方式

三.
1.什么是socket?
2.Socket的常用兩種通信協(xié)議:Tcp/Udp
3.Tcp、Udp的區(qū)別?
4.編寫基于Socket Tcp協(xié)議的一個簡單即使通信軟件
5.Http服務(wù)器的運(yùn)行方式。
6.長連接和短連接的區(qū)別?
7.Web服務(wù)器的工作過程
7.1.監(jiān)聽請求
7.2.處理請求
7.3.生成響應(yīng)報文
7.4.關(guān)閉通信套接字Socket

四.一般處理程序
1.IIS Web服務(wù)器的處理過程:映射表、外部擴(kuò)展程序、靜態(tài)文件、動態(tài)文件、能處理、不能處理
2.HttpContext上下文對象的作用,其中包含哪些內(nèi)容?
3.Asp.net系統(tǒng)對象:
Page、response、request、application、session、server、cookies
4.瀏覽器提交表單的兩種方式
5.Get/Post的區(qū)別是什么?
6.使用一般處理程序制作用戶登錄程序。
7.Request獲取Get、Post請求參數(shù)的方式分別是什么?Params
8.Response.Redirect() 方法作用。
9.Response中的寫出器
10.瀏覽器能夠提交表單需滿足什么條件?
11.哪些Html標(biāo)簽的值能夠被表單提交?
12.若Html標(biāo)簽的disabled屬性有設(shè)置
13.讀取Html模板文件,處理Html字符串
14.頁面的跳轉(zhuǎn):window.location,window.parent.location,window.top.location
15.一般處理程序進(jìn)行增刪查改


李榮壯 4.1-4.6
———-4.1 一般處理程序
1. 上傳圖片
2. 添加水印
3. 生成縮略圖
4. 生成驗證碼
5. 設(shè)置瀏覽器打開文件打式為下載
———-4.2 - 4.5 WebForm和狀態(tài)保持
1.Ashx與Aspx的關(guān)系
2.Aspx前臺頁與后臺頁的關(guān)系
CodeBehind(代碼后置)
3.前臺頁與后臺頁之間傳遞數(shù)據(jù)
4.Aspx、cs、dll文件之間的關(guān)系
5.WebForm的運(yùn)行流程
ASP.NET 運(yùn)行圖
控件樹
6.Request
6.1 常用成員
UrlReferrer
UserHostAddress
MapPath(Server.MapPath調(diào)用的是Request.MapPath)
7.Response
7.1 常用成員
End()
ContentType
8.Servers
8.1 常用成員
8.2 Transfer與Redirect區(qū)別
Transfer不能內(nèi)部重定向到ashx,否則會報錯“執(zhí)行子請求出錯”
9.無狀態(tài)Http
9.1 其根本原因 :Http協(xié)議是無狀態(tài)的
9.2 對網(wǎng)站的影響
10.ASP.NET中的狀態(tài)保持方案(有哪些,各自的特點,應(yīng)用場景)
10.1 客戶端:
10.1.1 ViewState
10.1.1.1 特點:WebForm特有,頁面級的
10.1.1.2 兩種使用方式
10.1.1.2.1 用戶數(shù)據(jù)保存方式
10.1.1.2.2 非單值服務(wù)器控件的狀態(tài)自動保存于ViewState
10.1.1.3 使用ViewState的前提
10.1.1.4 ViewState的禁用(WebForm的IsPostBack依賴于__ViewState)
10.1.2 HiddenField
10.1.3 Cokies
10.1.3.1 保存Cookie的兩種方式
1. 保存于內(nèi)在中
2. 保存于瀏覽器所在的電腦的硬盤中。
10.1.3.2 使用場景
10.1.3.3 原理
10.1.4 ControlState
10.1.5 QueryString
10.2 服務(wù)器:
10.2.1 Session
每個客戶端的Session是獨立的
開發(fā)場景
如何使用
一般處理程序如果使用Session需要 實現(xiàn)RequiresSessionState接口
與Cookies的區(qū)別
10.2.2 Application 服務(wù)器端保存共享數(shù)據(jù)的一種方式
10.2.3 Caching
10.2.4 Database
11. Web應(yīng)用程序與網(wǎng)站的區(qū)別
12. Iframe
13. 控制父頁跳轉(zhuǎn)
14. 反射方式生成sql查詢條件
15. MD5加密
——–4.5 AJAX
1. 優(yōu)點
2. 使用步驟
3. 瀏覽器兼容方式創(chuàng)建異步對象
4. post 設(shè)置 ContentType
5. get 設(shè)置 不讀取瀏覽器緩存
6. 地區(qū)級聯(lián)選擇
7. 服務(wù)器端與客戶端通過json交換數(shù)據(jù)

8. 將對象序列化為json字符串。

姚羽 4.8-4.13
1.Ajax的使用
1.1四個步驟(核心!重要!)
1.1.1 創(chuàng)建異步對象:Create XMLHttpRequest
1.1.2 設(shè)置訪問方式:open (…)—get 和 post (各自的請求頭設(shè)置語法)
1.1.3 設(shè)置回調(diào)函數(shù):onreadystatechange = function(){…}
1.1.4 發(fā)送請求:send (傳參)
1.2處理ajax請求響應(yīng)的結(jié)果responseText。 處理json格式的字符串,
注意引號問題

2.Ajax完成 增刪改查 一套功能,注意一些細(xì)節(jié)
2.1 細(xì)節(jié)一:查詢時Js創(chuàng)建表格
2.2 細(xì)節(jié)二:新增時Js創(chuàng)建行和刪除行的操作

3.Ajax簡單分頁
3.1 自己利用row_number寫一個簡單的分頁存儲過程(帶參數(shù))
3.2 C#內(nèi)部的事務(wù)操作(自己做成規(guī)范的方法自己將來在需要的時候可
以直接拿來用)
3.3 照片上傳 和 異步上傳(原理:利用Iframe)
3.4 JS自執(zhí)行函數(shù)的使用和JS匿名函數(shù)的使用

4.服務(wù)器控件
4.1 三種控件的區(qū)別(html控件,有runat=server的html控件,服務(wù)器
控件)
4.2 Jsonp 的作用以及怎么實現(xiàn)跨域
4.3 主要掌握服務(wù)器控件的 Repeater (Eval和Bind的區(qū)別)
4.4 掌握服務(wù)器控件的ListView(各個模板的使用,以及內(nèi)置分頁功能
,高效分頁做法)
4.5 頁面生命周期 (表述這個過程和原理)

  1. 緩存 (有哪幾種緩存(頁面級別緩存,數(shù)據(jù)源緩存,自定義緩存)—各自
    用法,回憶)
    5.1 緩存的條件 (為什么要有緩存?)
    5.2 緩存的缺點(臟數(shù)據(jù))
    5.3 如何解決這個缺點 (緩存依賴) (原理)
    5.4 Session和Cache的相同點 和 不同點
    5.5 自定義緩存的 絕對失效時間 和 相對失效時間 (那兩句代碼,不
    同的寫法)

6.母版頁
6.1 母版頁的使用(占位符PlaceHolder),以及母版頁和子頁面的關(guān)系,
先執(zhí)行母版頁還是先執(zhí)行子頁面
6.2 關(guān)于這階段的最重要的那張圖(請求流行執(zhí)行圖),只要在面試過
程中設(shè)計到這階段的問題,就可以想辦法口述出那張圖的流程,需要流利表達(dá)和自信

個人補(bǔ)充(核心的加分回答):
1,頁面靜態(tài)化(偽靜態(tài) 和 真靜態(tài))(可以提到在mvc中靜態(tài)化的方便之處):
1.1,目的:
Q: 1,最大限度的方便搜索引擎的抓取頁面(百度谷歌等網(wǎng)絡(luò)蜘蛛的爬?。赟EO
2,直接生成靜態(tài)頁面,,服務(wù)器端不用每次訪問都去運(yùn)算,這樣就減輕了服務(wù)器壓力
3,給用戶更加友好的展示,地址欄顯示的直接是一個純的html,而不是像….aspx?id=1… 這樣一長串的參數(shù),干凈,好記憶
1.2,如何實現(xiàn)頁面靜態(tài)化:

2,頁面幾大對象的深層次原理(Session,Viewstate,Application,cookie等)
        2.1,關(guān)于Session:
            2.1.1,Session出現(xiàn)的背景:
                Q: 由于Http協(xié)議的無狀態(tài)性,瀏覽器和服務(wù)器通信完畢之后,連接就被斷開。這樣就造成服務(wù)器就無法保存瀏覽器端的狀態(tài).
                        而為了解決這個問題有些聰明的人就發(fā)明了狀態(tài)保持對象,而Session就是其中的一種存放在服務(wù)器端的狀態(tài)保持對象。
            2.1.2,那么Session是如何進(jìn)行狀態(tài)保持的呢?:
                 Q: 比如在登錄的時候,瀏覽器端發(fā)送賬號密碼到服務(wù)器端,通過驗證之后,服務(wù)器端就將這些數(shù)據(jù)以鍵值對的方式保持到Session池中,
                        并且服務(wù)器端生成響應(yīng)報文,并以內(nèi)存型的Cookie的形式發(fā)送SessionId.
                        在瀏覽器未關(guān)閉的條件下,當(dāng)瀏覽器再次訪問這個站點下的頁面時,就會將這個站點接收到的SessionId包含在請求報文中一并發(fā)送到服務(wù)器端。
                        服務(wù)器端一旦拿到這個SessionId,就會去Session中根據(jù)SessionId查找對應(yīng)的值,如果找到,就不再去進(jìn)行驗證。因而就實現(xiàn)了這種狀態(tài)保存機(jī)制。
                        就是這樣,服務(wù)器端就能夠保持客戶端的狀態(tài)。
            2.1.3,用Session會出現(xiàn)那些問題呢?那有如何解決呢?
                Q:會出現(xiàn)的問題 : Session的性能不是很好;當(dāng)網(wǎng)站的訪問量大的時候容易造成內(nèi)存泄漏。
                       如何解決 :  
                                    2.1.3.1,采用進(jìn)程外Session
                                    2.1.3.2,我們可以模擬一個Session,比如把一個用戶的登錄信息和一個Guid放在一起,這樣就可以作為一個鍵值對來模擬Session,然后將其存入到數(shù)據(jù)庫中,這樣就可以避免Session的丟失。我們甚至可以將其存入緩存(因為緩存的性能高),這樣就可以中和數(shù)據(jù)庫的硬盤慢速訪問和內(nèi)存的高速訪問。
                        具體方案:
                                    對于進(jìn)程外Session,主要有這幾種。。。。。。。, 通過配置文件,這是微軟幫我們提供的方式,我們只需要配置一下就OK。<sessionState mode="StateServer" cookieless="UseCookies" stateConnectionString="tcpip=127.0.0.1:42424"/>




3,asp.net的運(yùn)行機(jī)制,頁面生命周期相關(guān)
    Q:當(dāng)客戶端瀏覽器發(fā)送一個請求的時候,比如用戶在瀏覽器輸入一個域名地址,那么此時先進(jìn)行DNS尋址,就是到DNS服務(wù)器去找該域名對象的IP,找到之后就會跟這個對應(yīng)的IP建立連接,這個連接是通過Socket套接字建立起來的,然后通過套接字連接發(fā)送連接請求,此時就跟我們的IIS服務(wù)器建立了連接了,IIS拿到請求之后會將請求交給擴(kuò)展程序,擴(kuò)展程序就將請求交給Framework來處理,aspnet_isapi.dll ,這時會創(chuàng)建一個HttpRuntime對象,調(diào)用其PR方法創(chuàng)建了HttpWorkerRequest對象,并將請求報文信息封裝在里面(當(dāng)然,這個HttpWorkerRequest我們程序員無法直接調(diào)用,它是供.Net運(yùn)行時來用的),然后創(chuàng)建HttpContext對象,它的里面就包含了請求報文對象HttpRequest和響應(yīng)報文對象HttpResponse,此時通過HttpApplicationFactory創(chuàng)建了一個HttpApplication對象,然后調(diào)用該對象的PR方法,并傳入我們上面已經(jīng)創(chuàng)建好的上下文對象HttpContext,然后會執(zhí)行19個委托對象,這也就是我們常說的請求管道,在執(zhí)行到管道事件的第8個事件時會創(chuàng)建被請求的頁面類對象,并將頁面類對象轉(zhuǎn)成IHttpHandler接口。然后會在執(zhí)行到第11到12個事件之間的時候調(diào)用頁面類對象的PR方法,執(zhí)行完畢后,這時就要分兩步走,如果當(dāng)前請求的是一般處理程序ashx,那么就會直接調(diào)用前面創(chuàng)建的HttpRuntime的一個FinisheRequest()方法,這個FinishRequest就會生成響應(yīng)報文,然后將響應(yīng)報文發(fā)回給IIS,再由IIS通過套接字發(fā)回給瀏覽器,那么瀏覽器就砍刀了我們請求的響應(yīng)報文。

4,mvc的運(yùn)行原理,路由的相關(guān)的操作(可以談到領(lǐng)域先行的開發(fā)模式,先關(guān)的,比如如何管理EF上下文,線程內(nèi)實例唯一,Callcontext)

5,JS高級中的幾個概念,比如js閉包,apply和call,原型模式prototype,js繼承等等

6,緩存,哪幾種?cache,有什么好處,會有什么問題?如何解決? 什么是緩存的滑動機(jī)制?談到緩存依賴,幾大依賴方法
        6.1,概念:
                    緩存是指系統(tǒng)或應(yīng)用程序?qū)㈩l繁使用的數(shù)據(jù)保存到內(nèi)存中,當(dāng)系統(tǒng)或應(yīng)用程序再次使用時,能構(gòu)快速的獲取數(shù)據(jù)。
        6.2,有哪幾種:
                    主要有三種: 頁面級緩存(網(wǎng)頁輸出緩存); 數(shù)據(jù)源緩存; 自定義緩存
        6.3,各是怎么實現(xiàn)的?

        6.4,利弊是什么?
                利:
                弊:它的弊端在于顯示的內(nèi)容可能不是最新,最精確的(即通常我們說的臟數(shù)據(jù))

        ASP.Net 緩存主要分為兩大類: 網(wǎng)頁輸出緩存和應(yīng)用程序緩存
           網(wǎng)頁輸出緩存針對ASP.NET Pages 頁面中的HTML進(jìn)行緩存,是可視化內(nèi)容對象,如圖片,GridView表格控件,用戶控件等
           應(yīng)用程序緩存是針對應(yīng)用程序內(nèi)的數(shù)據(jù)緩存,如:將DataSet等數(shù)據(jù)存儲到緩存

           緩存的滑動機(jī)制:其實就是指緩存的相對失效時間

7,IOC(inverse Object control),依賴注入,依賴倒置,控制反轉(zhuǎn)(DI(Dependency Injection)),
    Q:依賴工廠,依賴高層。比如依賴于高層模塊,不要直接new。就是引用本身不依賴
    說白了,就是new的時候通過外部容器來。
    如果從應(yīng)用程序的角度就叫IOC(控制反轉(zhuǎn));如果從容器的角度來說就叫DI(依賴注入)。

8,AOP,面向切面編程  (這里可以對比webform和mvc談里面的過濾器,前者HttpModule和后者的Filter),就可以提到比如日志處理,權(quán)限處理等,順便就可以提log4net
通俗:說白了,就是在調(diào)用目標(biāo)事件之前先執(zhí)行事件委托。

9,進(jìn)程外Session
    Q:出來的目的:在訪問量很大的時候,Session會造成數(shù)據(jù)丟失,那么我們就用另外一個

10,會口述一些模式和設(shè)計的內(nèi)涵:反射抽象工廠,面向接口編程,門面模式Facade,歸約模式,

11,常用的提高程序性能的辦法
        從兩個角度來思考:(實際上我們的程序性能的瓶頸一般都在數(shù)據(jù)庫上面,因為數(shù)據(jù)庫比較耗費CPU,內(nèi)存和IO,而不在程序端,因此我們首先要從數(shù)據(jù)庫角度來做性能優(yōu)化,而數(shù)據(jù)庫優(yōu)化也是個很研究很深的問題,我這里可以從我所知道的層面上來說一些解決方案)(我們要從CPU,內(nèi)存,IO,寬帶)
        1,從數(shù)據(jù)庫角度:
                1.1,給數(shù)據(jù)庫建索引,加快檢索查詢速度。(但是盡量不要在主庫上添加索引,因為主庫主要是用來增刪改的,從庫中的查詢可以通過索引來提高檢索速度)
                1.2,分庫,分表。
                    1.2.1,分庫:數(shù)據(jù)庫主從分離
                    1.2.2,分表:減少表中的數(shù)據(jù)量,就可以在某種程度上加快查詢數(shù)據(jù)。(當(dāng)然了,數(shù)據(jù)庫服務(wù)器和web站點分離,這是最基本的,讓他們不相互爭搶資源)
                1.3,假如是SQL腳本查詢,SQL語句優(yōu)化,可以優(yōu)化join的方式,                 
                         比如通過冗余字段,盡可能減少表之間的Join的次數(shù)。因為一般情況下,
                         當(dāng)表的join個數(shù)超過3個,在大訪問量的時候,基本上就可以廢掉了。
                1.4,減少使用主外鍵關(guān)系,因為在更新數(shù)據(jù)時,外鍵在會自動更新對應(yīng)的表的數(shù)據(jù)。我們應(yīng)該盡可能的采用邏輯外鍵,減少校驗的過程。
                1.5,使用更高性能的數(shù)據(jù)庫,NoSql引入,解放SQLServer。當(dāng)然啦,因為一般情況下,是不會輕易是更換數(shù)據(jù)庫的,但是某些情況下這可以作為一種解決問題的思路
                    1.5.1,比如:可以嘗試采用現(xiàn)在比較流行的非關(guān)系型數(shù)據(jù)庫,NoSQL----MongoDB,它是內(nèi)存型的鍵值對型的數(shù)據(jù)庫(key,value),因而性能很高
                    1.5.2,還比如 Redis,它主要是將數(shù)據(jù)全部放到內(nèi)存中,因此,它非常高效,現(xiàn)在的新浪微博就是用的這玩意
                1.6,盡量減少和數(shù)據(jù)庫的交互,盡量實現(xiàn)批量提交數(shù)據(jù)。比如將一系列的sql語句放到一個隊列里,然后從隊列里批量提,取后再批量和數(shù)據(jù)庫交互。
                1.7,做集群 (站點集群?數(shù)據(jù)庫集群?)
                    1.7.1,合理分配服務(wù),避免資源競爭。比如應(yīng)用集群方案NLB(NetWork Loading Balance,網(wǎng)絡(luò)負(fù)載均衡)
                    1.7.2,數(shù)據(jù)庫集群讀寫分離(主庫Main DB和 從庫Slav DB)。比如增刪改的操作放在主DB上,查詢的操作放在從DB上,這樣就減小了他們各自訪問的壓力
                            關(guān)于集群不是特別了解,只是看過一些相關(guān)的文章,因為我之前的開發(fā)還沒設(shè)計到如此超大并發(fā)的情況。
                    1.7.3,垂直分庫,水平分庫。 前者需要程序在設(shè)計階段就將模塊設(shè)計的低耦合狀態(tài)。后者比如按時間,這個月的數(shù)據(jù)消息在這臺庫上,下個月的數(shù)據(jù)放在另一臺庫上。
        2,從程序端的角度:
                2.1,使用緩存,減少每次訪問服務(wù)器都去都去讀取數(shù)據(jù)量的性能消耗。
                2.2,頁面靜態(tài)化,減少服務(wù)器端運(yùn)算所帶來的消耗,這樣就可以盡可能的減少連接數(shù)據(jù)庫。
                2.3,使用離線型的類型,實現(xiàn)懶加載(lazy  Load),延遲加載。假如是EF領(lǐng)域開發(fā)模式,則可以使用延遲加載機(jī)制。
                          使用返回IQueryable---這是一個離線類型的。另外我們還可以優(yōu)化linq。
                2.4,SOA實踐(Service Oriented Architecture,即面向服務(wù)架構(gòu)),比如將不同的應(yīng)用服務(wù)部署在不同的機(jī)器,這樣當(dāng)并發(fā)訪問的時候,就可以減少壓力。
                2.5,將IIS配置成允許10W的訪問,這樣可以提高一點訪問性能。
                2.6,使用異步方式,用異步單獨用線程去進(jìn)行異步操作。只要設(shè)計到高并發(fā),我們就咬盡可能使用異步編程。

    12,關(guān)于委托,事件,反射,多線程等相關(guān)的東西?

如何解決死鎖:
1,操作資源的時候,盡量遵循操作順序,不要打亂順序
2,Select查詢的時候(默認(rèn)是加上了一個S鎖),而且還有可能為X鎖(拍他鎖)—這種鎖會排除其他請求,其他所有的請求會一直等待
解決的辦法:所有的查詢都不加鎖 ,例如:Select * from Table with (nolock)
另外可以將鎖的級別降到行級別,具體命令我也記不住

發(fā)布訂閱機(jī)制:可以來解決數(shù)據(jù)庫的主從兩個庫之間的同步
但它也有缺陷:有一個10秒的延遲

壓力測試工具:
1,LR — Loader Rander,是惠普出的一款工具
2,AQTime — 這個很牛X,甚至能直接看到代碼中的哪一行代碼性能最差,直接確定到某一行代碼級別
3,TD — 管理Bug

簡歷自我介紹:

熟悉分布式應(yīng)用開發(fā)方式,熟悉面向服務(wù)的開發(fā)方式,親自配置Windows NLB負(fù)載均衡、SqlServer 發(fā)布訂閱機(jī)制實現(xiàn)數(shù)據(jù)集群數(shù)據(jù)同步。項目中應(yīng)用高可用性分布式緩存、高可用性NoSql存儲方案、高可用行Redis隊列實現(xiàn)高并發(fā)訪問事務(wù)處理。有相當(dāng)?shù)牟渴餝OA的經(jīng)驗,以及一些分布式項目開發(fā)的經(jīng)驗和優(yōu)化的經(jīng)驗。
熟悉微軟的Asp.Net MVC+EF +IOC+AOP+多層+WCF?開發(fā)中大型web網(wǎng)站技術(shù),熟悉SOA分布式應(yīng)用開發(fā),熟悉WCF,在金和軟件從事大型SOA平臺開發(fā)經(jīng)驗
熟練掌握編寫sql語句,編寫簡單存儲過程。熟悉?Sqlserver2005/2008、Oracle10g。熟悉ORM技術(shù),對于微軟的Entity Framework技術(shù)做過深入了解,對于基礎(chǔ)知識Ado.Net熟練掌握!Linq更是非常熟練運(yùn)用。
熟悉Spring.Net、Nhibernate等開源框架,對設(shè)計模式有自己獨到見解
能夠熟練運(yùn)用JavaScript操作Dom進(jìn)行web前端的動態(tài)開發(fā)。熟悉JQuary。熟練使用Css+Div對整個網(wǎng)頁進(jìn)行布局,熟練使用float和clear對div進(jìn)行布局。對position也有深入的理解。
理解Asp.Net?生命周期,熟悉Http協(xié)議。深刻理解web開發(fā)的請求、處理、響應(yīng)模型,熟悉asp.net基礎(chǔ)性原理知識。
熟悉AspNet MVC開發(fā)技術(shù),深入理解視圖引擎處理機(jī)制,粗略閱讀AspNet MVC源碼,非常喜歡Razor引擎對于前臺編碼的優(yōu)化
熟悉 靜態(tài)化設(shè)計、有SEO方面的經(jīng)驗
有相關(guān)互聯(lián)網(wǎng)開發(fā)經(jīng)驗,對于研究過大型Web網(wǎng)站部署以及架構(gòu)方面知識,對于負(fù)載均衡、分布式緩存、集群也有相關(guān)自己的認(rèn)識。

    SQL 面試題,去網(wǎng)上找一些題目

    什么是多態(tài)?
    什么是面向?qū)ο螅?    什么是持久化?
    請講一下IsPostBack的原理?
    請描述一下Nhibernate的對象狀態(tài)管理和生命周期? (Nhibernate中的POCO對象狀態(tài))
    請描述一下Nhibernate中有哪幾種集合?他們各自的區(qū)別是什么?(Bag,Set,List,Map)



    ----=================================================

    很多了,數(shù)據(jù)庫方面問的很多。

千萬級數(shù)據(jù),刪除100萬行如何最高效。
寫一個linq語句,要求三層嵌套。
使用遞歸寫一個打印輸出(這個我想了很久,差點都放棄了,最后勉強(qiáng)想出了一個思路,主要處在那種環(huán)境中感覺頭腦暈暈的。)
還有自己使用的設(shè)計模式,并進(jìn)行講解。
自己的特長等。?

答案:下面的經(jīng)驗是針對SQL Server的,但SYBASE也是同理。希望對你有幫助。

我們在SQL Server上面刪除1.6億條記錄,不能用truncate(因為只是刪除其中部分?jǐn)?shù)據(jù))。經(jīng)過實驗,每次刪除400萬條要花1.5 - 3小時,而且是越到后面越慢,正常的話,需要大約102個小 時,大約4天半時間。這在生產(chǎn)環(huán)境下是不能接受的。

經(jīng)過一個處理之后,我每次刪除400萬條記錄花5 - 6分鐘,刪除全部1.6億條記錄花了4 - 5個小時!

為什么??

第一:每次刪除記錄,數(shù)據(jù)庫都要相應(yīng)地更新索引,這是很慢的IO操作。而且后面索引碎片越來越多,就更慢。這就是為什么一開始只花1.5小時,后面要3小時才能刪除400萬條記錄的原因。

我在刪除前先保存當(dāng)前索引的DDL,然后刪除其索引,
然后根據(jù)使用的刪除條件建立一個臨時的索引(這是提高速度的另外一個重要原因!)
開始刪除操作,完成之后再重建之前的索引。

第二:刪除的時候,不要再記錄日志的模式下,否則日志要爆.并且索引越少,刪除速度越快!

打電話過來讓你去面試,公司環(huán)境不錯,中環(huán)大廈20幾樓,記不清了。先是做題,一共3到,一個SQL查詢,按時間橫向顯示,time字段24小時的記錄
數(shù)據(jù)格式
DATE value
查詢結(jié)果每小時有多少次評論
2題,字符串排序
sdfrtger字符串,能有多少種不同順序的顯示
3題,將一組數(shù)字,跟加減乘除小括號迅運(yùn)算符組合,能得到的結(jié)果等于24的,公式有多少種

問了不少,數(shù)據(jù)庫的查詢,類繼承,泛型,靜態(tài)屬性與常量有什么區(qū)別,varchar與nvarchar有什么區(qū)別,流行的JS框架,重要的是WCF,他們的開發(fā)商用JS+WCP開發(fā)的?

早上9點,來到雙井的京城幾點大廈。首先見到了HR,凡客的部門間沒有明確的隔斷區(qū)分,HR就坐在門口。領(lǐng)到了個人信息表,開始填寫。寫完交給HR,說安排面試。很快一個技術(shù)人員就來接 待我。我被安排到了一個員工餐廳,問了一些技術(shù)方面的問題。主要是關(guān)于大數(shù)據(jù)量數(shù)據(jù)處理的。我回答說沒有太多這方面的經(jīng)驗??脊僖矄柫宋沂欠裼惺裁聪雴柕?,我簡單問了一下凡客的軟 件架構(gòu)。于是離開。

一共四輪,HR,技術(shù)Lead,部門經(jīng)理和副總裁。沒有筆試題,技術(shù)部分就是聊工作經(jīng)驗,項目心得,然后寫了幾個簡單的SQL,問了問設(shè)計模式,總體來講比較簡單。部門經(jīng)理和副總裁比較關(guān) 注職業(yè)規(guī)劃,未來想往什么方向發(fā)展,還有對于合作和領(lǐng)導(dǎo)方式的看法。最后HR常規(guī)性的談?wù)?,就結(jié)束了。

說說值對象與引用對象的區(qū)別??

簡單的算法,sql查一張表重復(fù)的數(shù)量,委托,反射,多線程。ViewState?

Nhibernate 中POCO狀態(tài)對象?

瞬時狀態(tài)
持久狀態(tài)
托管狀態(tài)

數(shù)據(jù)庫在大數(shù)據(jù)量或者是大并發(fā)的情況下,一般表與表之間不建立真正的主外鍵關(guān)系,而只建立邏輯外鍵。在Nhibernate中采用*.hbm.xml配置文件來關(guān)聯(lián)表與表的關(guān)系!那么用EF做持久層的 時候,如何在程序中將表與表的模型關(guān)聯(lián)到一起?

說一說面向?qū)ο螅?說一說你對多態(tài)的理解?

能不能手寫SQL腳本?手寫function?手寫事務(wù)?

Http協(xié)議?

構(gòu)造函數(shù)重載和運(yùn)算符重載? 他們分別是干什么的?

前綁定和后綁定?

談?wù)勀銓軜?gòu)的理解?

前綁定—編譯的時候就確定調(diào)用那個辦法(重載是前綁定)

后綁定—運(yùn)行的時候才知道調(diào)用哪個(多態(tài)就是后綁定)

如有錯誤歡迎補(bǔ)充,糾正,批評。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多