微軟的官方網站上寫著"我們期待具有獨創性、開拓性的智者加入隊伍,我們的面試程序也是為網羅這樣的人才專門設計。"
聽似簡單。但無數被微軟拒之門外的哈佛博士、麻省理工精英會告訴你,微軟的面試題有多"BT"。這些被稱為"惡魔試題"的考題千奇百怪,無所不有。
究竟應試者需要多高的IQ、多麼完備的邏輯思維,才能打動比爾·蓋茨,加入他的豪華辦公樓?
最近,美國作家威廉·龐德斯撰寫新書《如何搬動富士山———微軟的面試難題》,揭開"微軟問題"的真面孔。
光聰明沒用
微軟公司的招聘信箱,每個月會收到1.2萬份簡歷。如果用A4紙列印出來,能堆得比姚明還高。
不過,微軟HR們並不擔心加班工作,他們有比人工篩選更高效的"秘密武器"———計算機核對搜索。每封按規格投遞給微軟的電子簡歷,會經由特定程序搜索關鍵詞,然後錄入資料庫。計算機"認為"有前景的簡歷,HR才給應聘者一個電話應答的機會。
兩輪篩選出的"勝利者"能收到一張來往華盛頓州雷蒙德的微軟總部的機票。打包好頭腦,准備接受"眼高於頂"的面試官們一整天超高難度的"馬拉松"面試吧!
"為什麼啤酒罐的兩端要做成凹形設計?"
"你要怎麼製造M&Ms巧克力?"
"芝加哥全體大學生的體重總和是多少?"
聽到這些問題少皺眉頭,它們都是微軟面試最典型也最小兒科的"一星級題庫"。通不過這類測試,別說微軟,矽谷中的其他計算機企業都不會"接收"你。
其實,早在20年前,微軟還未曾開創、矽谷還是群雄爭霸時,就開始流行用這些"扯淡"考題招聘。因為計算機產業的快速變動和創新,許多企業發現,光測試應聘者的IQ遠遠不夠,高分IQ員工往往光有一副聰明腦袋,愛說不能做。
於是,老闆們開始尋求可以考查"全方位解決能力"的招聘題目,"讀取"應聘者邏輯思維能力、想像力和解決問題的能力"指數"。這就是"怪考題"的老祖宗們。
為比爾設計浴室
如今,在"巨無霸"微軟的推動下,這類考題愈出愈冷僻。
來看看最近比爾·蓋茨最中意的考題———為他設計一個浴室。
很異想天開?可以隨便回答?這么想的話你鐵定無法通過微軟面試!用心分析題目,應試者可以得出2個答題關鍵———一是要考慮符合比爾·蓋茨身份、職業、性格的浴室設計方案;二是至少要提出一些讓比爾·蓋茨欣賞但他自己卻從未想到過的設計理念。否則,比爾·蓋茨干嗎雇你為他設計浴室?
被微軟接受的合理設計理念於是誕生了。
能夠自動上鎖的智能醫葯箱:用來存放家用葯品,以便無大人陪伴的孩子進入浴室、偶遇意外時能夠得到及時救治。
自動記事本:在浴室里產生奇思妙想,卻又因為手濕,無法使用PDA。那麼,或許比爾·蓋茨需要一個聲音識別設備,當他說出諸如"比爾的備忘錄"等代碼後,設備可以錄下信息,並自動將信息發送到電子郵箱,以備隨時取用。
一面物像非對稱的鏡子:鏡子背後安裝了視頻屏幕,屏幕連接著四周圍隱蔽的攝像機。這樣,站在鏡子面前,你能輕易看到你的背面圖像和側面圖像,穿衣服、剪頭發或者擠掉背後的暗瘡就方便多了。
"面臨不確定時的行動力"而非"想像力",才是微軟設計這道考題的真正目的。
答對了未必得分
更令人抓狂的是:有時,應試者即使給出了題目的正確答案,卻依舊無法得分。
比如"地球上有多少這樣的點:你先朝南走一公里,再向東一公里,再向北1公里,這時你回到了你的起點上。"
首先你想,這不是四方形少了一個邊嗎?回到起點簡直不可能!
然後,很快想到"極點"這個特殊地點———從北極點出發,任何方向都是南。於是從北極點出發,向三個方向分別走一公里,回到極點。於是你慶幸自己找到了答案,而且是惟一的答案。因為這樣的事情在南極點上不能發生,南極點已經不能再向南了。
考官面無表情,在你的答卷上批下"湯團"一個,你和回答"沒有這個點"的朋友們站在同一個叫做"淘汰"的陣營。
答案的關鍵正是在南極點上。
假定你站在離開南極點一公里多一些的地方走向南極。走完向南的一公里後,你還未曾達到南極點,但已經非常接近。於是你繼續向東,因為實在離南極點太近,你發現不斷向東走的路線形成了一個以南極為圓心,與赤道平行的圓,它的周長剛好一公里。這樣一來,你回到了圓形的出發點。往北一公里後,你回到原點。這樣一來,答題的點增加到了無數。
完了嗎?並沒有,你還可以增加一些點,比如,那個圓形的周長恰好是1/2公里、1/4公里、1/8公里......
只有回答出後面兩類答案的人,才有資格被微軟留下來
⑵ asp.net程序員面試
一般的流程就是一面(技術面試),技術負責人跟你聊聊你做過的一些項目以及經驗,或者給你做份題等等;然後人事會簡單跟你聊聊,主要看看你的性格,以及給人的感覺等(有的公司在技術面試都要經過2-3輪,我05年在微軟,技術有兩輪面試);然後情況好的可能會有二面,二面一般就是談薪水待遇等,談妥了就可以了。
機試很少的,一般都是筆試,小公司的話都沒有筆試,就跟技術負責人聊聊一些技術細節他就心裡有數了。筆試肯定就是一些技術方面的基礎題,比如問你一個asp.net頁面的生命周期、冒泡演算法、資料庫設計以及一些sql語句等等,有時候還會有一些智商或者性格特點方面的題目。
關於待遇,你就說一個你期望的數就行了,行不行人事部門會根據崗位情況以及你的能力來評判的,一般來說他們都會根據崗位待遇跟你的要求來「殺殺價」,你覺得你值得那個價值就堅持。
⑶ 求asp.net程序員的面試題(asp.net、javascript、mssql、xml)
1. 簡述 private、 protected、 public、 internal 修飾符的訪問許可權。
答 . private : 私有成員, 在類的內部才可以訪問。
protected : 保護成員,該類內部和繼承類中可以訪問。
public : 公共成員,完全公開,沒有訪問限制。
internal: 在同一命名空間內可以訪問。
2 .列舉ASP.NET 頁面之間傳遞值的幾種方式。
答. 1.使用QueryString, 如....?id=1; response. Redirect()....
2.使用Session變數
3.使用Server.Transfer
3. 一列數的規則如下: 1、1、2、3、5、8、13、21、34...... 求第30位數是多少, 用遞歸演算法實現。
答:public class MainClass
{
public static void Main()
{
Console.WriteLine(Foo(30));
}
public static int Foo(int i)
{
if (i <= 0)
return 0;
else if(i > 0 && i <= 2)
return 1;
else return Foo(i -1) + Foo(i - 2);
}
}
4.C#中的委託是什麼?事件是不是一種委託?
答 :
委託可以把一個方法作為參數代入另一個方法。
委託可以理解為指向一個函數的引用。
是,是一種特殊的委託
5.override與重載的區別
答 :
override 與重載的區別。重載是方法的名稱相同。參數或參數類型不同,進行多次重載以適應不同的需要
Override 是進行基類中函數的重寫。為了適應需要。
6.如果在一個B/S結構的系統中需要傳遞變數值,但是又不能使用Session、Cookie、Application,您有幾種方法進行處理?
答 :
this.Server.Transfer
7.請編程遍歷頁面上所有TextBox控制項並給它賦值為string.Empty?
答:
foreach (System.Windows.Forms.Control control in this.Controls)
{
if (control is System.Windows.Forms.TextBox)
{
System.Windows.Forms.TextBox tb = (System.Windows.Forms.TextBox)control ;
tb.Text = String.Empty ;
}
}
8.請編程實現一個冒泡排序演算法?
答:
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 ;
}
}
}
9.描述一下C#中索引器的實現過程,是否只能根據數字進行索引?
答:不是。可以用任意類型。
10.求以下表達式的值,寫出您想到的一種或幾種實現方法: 1-2+3-4+……+m
答:
int Num = this.TextBox1.Text.ToString() ;
int Sum = 0 ;
for (int i = 0 ; i < Num + 1 ; i++)
{
if((i%2) == 1)
{
Sum += i ;
}
else
{
Sum = Sum - I ;
}
}
System.Console.WriteLine(Sum.ToString());
System.Console.ReadLine() ;
11.用.net做B/S結構的系統,您是用幾層結構來開發,每一層之間的關系以及為什麼要這樣分層?
答:一般為3層
數據訪問層,業務層,表示層。
數據訪問層對資料庫進行增刪查改。
業務層一般分為二層,業務表觀層實現與表示層的溝通,業務規則層實現用戶密碼的安全等。
表示層為了與用戶交互例如用戶添加表單。
優點: 分工明確,條理清晰,易於調試,而且具有可擴展性。
缺點: 增加成本。
12.在下面的例子里
using System;
class A
{
public A()
{
PrintFields();
}
public virtual void PrintFields(){}
}
class B:A
{
int x=1;
int y;
public B()
{
y=-1;
}
public override void PrintFields()
{
Console.WriteLine("x={0},y={1}",x,y);
}
}
當使用new B()創建B的實例時,產生什麼輸出?
答:X=1,Y=0
13.什麼叫應用程序域?
答:應用程序域可以理解為一種輕量級進程。起到安全的作用。佔用資源小。
14.CTS、CLS、CLR分別作何解釋?
答:CTS:通用語言系統。CLS:通用語言規范。CLR:公共語言運行庫。
15.什麼是裝箱和拆箱?
答:從值類型介面轉換到引用類型裝箱。從引用類型轉換到值類型拆箱。
16.什麼是受管制的代碼?
答:unsafe:非託管代碼。不經過CLR運行。
17.什麼是強類型系統?
答:RTTI:類型識別系統。
18.net中讀寫資料庫需要用到那些類?他們的作用?
答:DataSet:數據存儲器。
DataCommand:執行語句命令。
DataAdapter:數據的集合,用語填充。
19.ASP.net的身份驗證方式有哪些?分別是什麼原理?
答:10。Windwos(默認)用IIS...From(窗體)用帳戶....Passport(密鑰)
20.什麼是Code-Behind技術?
答:代碼後植。
21.在.net中,配件的意思是?
答:程序集。(中間語言,源數據,資源,裝配清單)
22.常用的調用WebService的方法有哪些?
答:1.使用WSDL.exe命令行工具。
2.使用VS.NET中的Add Web Reference菜單選項
23..net Remoting 的工作原理是什麼?
答:伺服器端向客戶端發送一個進程編號,一個程序域編號,以確定對象的位置。
24.在C#中,string str = null 與 string str = 「」 請盡量使用文字或圖象說明其中的區別。
答:string str = null 是不給他分配內存空間,而string str = "" 給它分配長度為空字元串的內存空間。
25.請詳述在dotnet中類(class)與結構(struct)的異同?
答:Class可以被實例化,屬於引用類型,是分配在內存的堆上的,Struct屬於值類型,是分配在內存的棧上的.
26.根據委託(delegate)的知識,請完成以下用戶控制項中代碼片段的填寫:
namespace test
{
public delegate void OnDBOperate();
public class UserControlBase : System.Windows.Forms.UserControl
{
public event OnDBOperate OnNew;
privatevoidtoolBar_ButtonClick(objectsender,System.Windows.Forms.ToolBarButtonClickEventArgs e)
{
if(e.Button.Equals(BtnNew))
{
//請在以下補齊代碼用來調用OnDBOperate委託簽名的OnNew事件。
}
}
}
答:if( OnNew != null )
OnNew( this, e );
27.分析以下代碼,完成填空
string strTmp = "abcdefg某某某";
int i= System.Text.Encoding.Default.GetBytes(strTmp).Length;
int j= strTmp.Length;
以上代碼執行完後,i= j=
答:i=13,j=10
28.SQLSERVER伺服器中,給定表 table1 中有兩個欄位 ID、LastUpdateDate,ID表示更新的事務號, LastUpdateDate表示更新時的伺服器時間,請使用一句SQL語句獲得最後更新的事務號
答:Select ID FROM table1 Where LastUpdateDate = (Select MAX(LastUpdateDate) FROM table1)
29.根據線程安全的相關知識,分析以下代碼,當調用test方法時i>10時是否會引起死鎖?並簡要說明理由。
public void test(int i)
{
lock(this)
{
if (i>10)
{
i--;
test(i);
}
}
}
答:不會發生死鎖,(但有一點int是按值傳遞的,所以每次改變的都只是一個副本,因此不會出現死鎖。但如果把int換做一個object,那麼死鎖會發生)
30.簡要談一下您對微軟.NET 構架下remoting和webservice兩項技術的理解以及實際中的應用。
答:WS主要是可利用HTTP,穿透防火牆。而Remoting可以利用TCP/IP,二進制傳送提高效率。
31.公司要求開發一個繼承System.Windows.Forms.ListView類的組件,要求達到以下的特殊功能:點擊ListView各列列頭時,能按照點擊列的每行值進行重排視圖中的所有行 (排序的方式如DataGrid相似)。根據您的知識,請簡要談一下您的思路
答:根據點擊的列頭,包該列的ID取出,按照該ID排序後,在給綁定到ListView中。
32.給定以下XML文件,完成演算法流程圖。
<FileSystem>
< DriverC >
<Dir DirName=」MSDOS622」>
<File FileName =」 Command.com」 ></File>
</Dir>
<File FileName =」MSDOS.SYS」 ></File>
<File FileName =」 IO.SYS」 ></File>
</DriverC>
</FileSystem>
請畫出遍歷所有文件名(FileName)的流程圖(請使用遞歸演算法)。
答:
void FindFile( Directory d )
{
FileOrFolders = d.GetFileOrFolders();
foreach( FileOrFolder fof in FileOrFolders )
{
if( fof is File )
You Found a file;
else if ( fof is Directory )
FindFile( fof );
}
}
33.寫出一條Sql語句:取出表A中第31到第40記錄(SQLServer,以自動增長的ID作為主鍵,注意:ID可能不是連續的。
答:解1: select top 10 * from A where id not in (select top 30 id from A)
解2: select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A)
34.面向對象的語言具有________性、_________性、________性
答:封裝、繼承、多態。
35.能用foreach遍歷訪問的對象需要實現 ________________介面或聲明________________方法的類型。
答:IEnumerable 、 GetEnumerator。
36.GC是什麼? 為什麼要有GC?
答:GC是垃圾收集器。程序員不用擔心內存管理,因為垃圾收集器會自動進行管理。要請求垃圾收集,可以調用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()
37.String s = new String("xyz");創建了幾個String Object?
答:兩個對象,一個是「xyx」,一個是指向「xyx」的引用對象s。
38.abstract class和interface有什麼區別?
答:
聲明方法的存在而不去實現它的類被叫做抽象類(abstract class),它用於要創建一個體現某些基本行為的類,並為該類聲明方法,但不能在該類中實現該類的情況。不能創建abstract 類的實例。然而可以創建一個變數,其類型是一個抽象類,並讓它指向具體子類的一個實例。不能有抽象構造函數或抽象靜態方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現,否則它們也是抽象類為。取而代之,在子類中實現該方法。知道其行為的其它類可以在類中實現這些方法。
介面(interface)是抽象類的變體。在介面中,所有方法都是抽象的。多繼承性可通過實現這樣的介面而獲得。介面中的所有方法都是抽象的,沒有一個有程序體。介面只可以定義static final成員變數。介面的實現與子類相似,除了該實現類不能從介面定義中繼承行為。當類實現特殊介面時,它定義(即將程序體給予)所有這種介面的方法。然後,它可以在實現了該介面的類的任何對象上調用介面的方法。由於有抽象類,它允許使用介面名作為引用變數的類型。通常的動態聯編將生效。引用可以轉換到介面類型或從介面類型轉換,instanceof 運算符可以用來決定某對象的類是否實現了介面。
39.啟動一個線程是用run()還是start()?
答:啟動一個線程是調用start()方法,使線程所代表的虛擬處理機處於可運行狀態,這意味著它可以由JVM調度並執行。這並不意味著線程就會立即運行。run()方法可以產生必須退出的標志來停止一個線程。
40.介面是否可繼承介面? 抽象類是否可實現(implements)介面? 抽象類是否可繼承實體類(concrete class)?
答:介面可以繼承介面。抽象類可以實現(implements)介面,抽象類是否可繼承實體類,但前提是實體類必須有明確的構造函數。
41.構造器Constructor是否可被override?
答:構造器Constructor不能被繼承,因此不能重寫Overriding,但可以被重載Overloading。
42.是否可以繼承String類?
答:String類是final類故不可以繼承。
43.try {}里有一個return語句,那麼緊跟在這個try後的finally {}里的code會不會被執行,什麼時候被執行,在return前還是後?
答:會執行,在return前執行。
44.兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對?
答:不對,有相同的hash code。
45.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
答:switch(expr1)中,expr1是一個整數表達式。因此傳遞給 switch 和 case 語句的參數應該是 int、 short、 char 或者 byte。long,string 都不能作用於swtich。
47.當一個線程進入一個對象的一個synchronized方法後,其它線程是否可進入此對象的其它方法?
不能,一個對象的一個synchronized方法只能由一個線程訪問。
48.abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized?
答:都不能。
49.List, Set, Map是否繼承自Collection介面?
答:List,Set是Map不是
50.Set里的元素是不能重復的,那麼用什麼方法來區分重復與否呢? 是用==還是equals()? 它們有何區別?
答:Set里的元素是不能重復的,那麼用iterator()方法來區分重復與否。equals()是判讀兩個Set是否相等。
equals()和==方法決定引用值是否指向同一對象equals()在類中被覆蓋,為的是當兩個分離的對象的內容和類型相配的話,返回真值。
51.數組有沒有length()這個方法? String有沒有length()這個方法?
答:數組沒有length()這個方法,有length的屬性。String有有length()這個方法。
52.sleep() 和 wait() 有什麼區別?
答:sleep()方法是使線程停止一段時間的方法。在sleep 時間間隔期滿後,線程不一定立即恢復執行。這是因為在那個時刻,其它線程可能正在運行而且沒有被調度為放棄執行,除非(a)「醒來」的線程具有更高的優先順序
(b)正在運行的線程因為其它原因而阻塞。
wait()是線程交互時,如果線程對一個同步對象x 發出一個wait()調用,該線程會暫停執行,被調對象進入等待狀態,直到被喚醒或等待時間到。
53.short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?
答:short s1 = 1; s1 = s1 + 1;有錯,s1是short型,s1+1是int型,不能顯式轉化為short型。可修改為s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正確。
54.談談final, finally, finalize的區別。
答:
final—修飾符(關鍵字)如果一個類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此 一個類不能既被聲明為 abstract的,又被聲明為final的。將變數或方法聲明為final,可以保證它們在使用中 不被改變。被聲明為final的變數必須在聲明時給定初值,而在以後的引用中只能讀取,不可修改。被聲明為 final的方法也同樣只能使用,不能重載
finally—再異常處理時提供 finally 塊來執行任何清除操作。如果拋出一個異常,那麼相匹配的 catch 子句就會 執行,然後控制就會進入 finally 塊(如果有的話)。
finalize—方法名。Java 技術允許使用 finalize() 方法在垃圾收集器將對象從內存中清除出去之前做必要的清理 工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。它是在 Object 類中定義的 ,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行其他清理工作。finalize() 方法是在垃圾收集器刪除對象之前對這個對象調用的。
55.如何處理幾十萬條並發數據?
答:用存儲過程或事務。取得最大標識的時候同時更新..注意主鍵不是自增量方式這種方法並發的時候是不會有重復主鍵的..取得最大標識要有一個存儲過程來獲取.
56.Session有什麼重大BUG,微軟提出了什麼方法加以解決?
答:是iis中由於有進程回收機制,系統繁忙的話Session會丟失,可以用Sate server或SQL Server資料庫的方式存儲Session不過這種方式比較慢,而且無法捕獲Session的END事件。
57.進程和線程的區別?
答:進程是系統進行資源分配和調度的單位;線程是CPU調度和分派的單位,一個進程可以有多個線程,這些線程共享這個進程的資源。
58.堆和棧的區別?
答:
棧:由編譯器自動分配、釋放。在函數體中定義的變數通常在棧上。
堆:一般由程序員分配釋放。用new、malloc等分配內存函數分配得到的就是在堆上。
59.成員變數和成員函數前加static的作用?
答:它們被稱為常成員變數和常成員函數,又稱為類成員變數和類成員函數。分別用來反映類的狀態。比如類成員變數可以用來統計類實例的數量,類成員函數負責這種統計的動作。
60.ASP。NET與ASP相比,主要有哪些進步?
答:asp解釋形,aspx編譯型,性能提高,有利於保護源碼。
61.產生一個int數組,長度為100,並向其中隨機插入1-100,並且不能重復。
int[] intArr=new int[100];
ArrayList myList=new ArrayList();
Random rnd=new Random();
while(myList.Count<100)
{
int num=rnd.Next(1,101);
if(!myList.Contains(num))
myList.Add(num);
}
for(int i=0;i<100;i++)
intArr[i]=(int)myList[i];
⑷ 程序員面試的時候考官一般問什麼問題(比較流行的)
給你提供點參考信息,希望能幫助到你:
1、使用相同的工具和時間限制模擬面試訓練
Google和微軟都會讓應聘者在白板上手工解答編程問題,但通常大部分的應聘者都是習慣於在電腦上利用編程工具系統編寫程序。因此面試的時候,某些應聘者離開了熟悉的電腦游標,站在白板前感覺手足無措不知該如何起行。又或者他們不習慣在編程之時旁邊有人觀看,這會讓他們感到緊張而無法正常思考。
在現實生活中,如果你想要橫渡英吉利海峽,自然不能總是在室內游泳池練習。你必須投身於大海在波濤之中訓練,在准備面試的時候也是如此。
在面試開始之前你最好向招聘單位詢問面試形式和面試問題。如果招聘單位讓你在某個房間考試且僅提供沒有匯編程序的編輯器,那麼就應該在家中按照這種情景進行練習。如果招聘公司單位讓你在白板上回答問題並會安排考官在旁監督,那麼你就要找一位軟體工程師來扮演考官配合你練習。即使找來的考官經驗不如你也沒有關系,他們依然能幫助你消除在他人面前出錯所帶來的緊張感,這樣可以讓你適應有人在旁邊盯著看的面試氛圍。
如果你恰巧認識我並希望由我來幫你聯系,那我的條件就是必須請我吃飯:如果你已經工作了就吃日本壽司大餐;如果你還是學生,那麼吃比薩餅也可以。
2、在面試過程中不要對細小錯誤耿耿於懷
我曾不止一次的在面試過程中碰到這種情況:當應聘者知道編程問題後,他馬上就想到了最佳的方案、確定了邊界條件,然後開始編寫程序。但在編寫過程中,應聘者犯了諸如首先檢查是不是操作順序錯誤或忘記設定某變數等無關大局的小錯誤,當我指出其錯誤之後,應聘者立刻變得十分緊張,這種焦慮情緒影響了他在後面環節的正常發揮。
其實這種恐懼心理完全不必要。一名優秀的程序員在編程過程中出現錯誤也是很正常的,就像是小提琴手在演奏高難度的巴赫交響樂時也會偶爾失誤。音樂會的聽眾可能會覺察到這些錯誤,但是聽眾絕對不會因為這種細小失誤就把出色的小提琴手看作是門外漢。
即便應聘者徹底搞砸了某個編程問題,面試考官也可能會提出不同的問題並會容忍應聘者在某個問題上的失誤。再退一步說,就算某次面試徹底失敗,你也有機會在其它面試上補救。
我的一位同事(一個項目的技術負責人)最近面試了一個人,在開始面試時他覺得面試者的交流方式存在問題,因此開始表現的相當不友好。但經過了整個面試過程後,面試者證明了自身的能力,而我的那位同事也成了那位面試者最堅定的支持者。在過去的一年中,我從未見過這位同事如此強烈的支持哪位面試者。
所以,因此就算面試進展不順,也務必堅持到底不要放棄。
⑸ 程序員 面試 如何回答
做一份工作,實際就是追尋夢想的過程,而為了完成夢想,必須有一個長期規劃,從而指導我們選擇工作。它是擇業過程中最本質和最原始的參考借鑒。下載鏈接
為此,小雲為你精選一份程序員面試書單,分為職業規劃、編程技能兩部分,適合剛畢業的大學生、正准備換工作的程序員們,涵蓋演算法工程師、Java工程師、測試等多個領域。
軟技能 代碼之外的生存指南約翰 Z.森梅茲 著
這是一本真正從「人」(而非技術也非管理)的角度關注軟體開發人員自身發展的書。書中論述的內容既涉及生活習慣,又包括思維方式,凸顯技術中「人」的因素,全面講解軟體行業從業人員所需知道的所有「軟技能」。
本書聚焦於軟體開發人員生活的方方面面,從揭秘面試的流程到精耕細作出一份殺手級簡歷,從創建大受歡迎的博客到打造你,從提高自己工作效率到與如何與「拖延症」做斗爭,甚至包括如何投資不動產,如何關注自己的健康。
編程珠璣(第2版)喬恩·本特利(Jon Bentley) 著
作者雖然沒有給出解決這些問題的具體代碼,但始終非常富有洞察力和創造力地圍繞著這些折磨程序員的實際問題展開討論,從而引導讀者理解問題並學會解決問題的技能,這些都是程序員實際編程生涯中的基本技能。
為此,本書給出了一些精心設計的有趣而且頗具指導意義的程序,這些程序能夠為那些復雜的編程問題提供清晰而且完備的解決思路,書中還充滿了對實用程序設計技巧及基本設計原則的清晰而睿智的描述。
PS:本書在第一版的基礎上增加了3個方面的新內容:測試、調試和計量,集合表示,字元串問題,並對第一版的所有程序都進行了改寫,生成了等量的新代碼。
重構 改善既有代碼的設計馬丁·福勒(Martin Fowler) 著
軟體開發的不朽經典,生動闡述重構原理和具體做法,普通程序員進階到編程高手必須修煉的秘笈。
重構,一言以蔽之,就是在不改變外部行為的前提下,有條不紊地改善代碼。多年前,正是《重構:改善既有代碼的設計》原版的出版,使重構終於從編程高手們的小圈子走出,成為眾多普通程序員日常開發工作中不可或缺的一部分。《重構:改善既有代碼的設計》也因此成為與《設計模式》齊名的經典著作,被譯為中、德、俄、日等眾多語言,在世界范圍內暢銷不衰。
《重構:改善既有代碼的設計》凝聚了軟體開發社區專家多年摸索而獲得的寶貴經驗,擁有不因時光流逝而磨滅的價值。今天,無論是重構本身,業界對重構的理解,還是開發工具對重構的支持力度,都與《重構:改善既有代碼的設計》最初出版時不可同日而語,但書中所蘊涵的意味和精華,依然值得反復咀嚼,而且往往能夠常讀常新。
C和C++程序員面試秘籍董山海 著
眾多高級語言都從C/C++有所借鑒,所以說C/C++的語言基礎對從事軟體開發的人員來說非常重要。
本書是一本解析C/C++面試題的書,可以幫助求職者更好地准備面試。《C和C++程序員面試秘笈》共包含12章,囊括了目前企業中常見的面試題類型和考點,包括C/C++程序基礎,預處理、const、static與sizeof,引用和指針,字元串,位運算與嵌入式編程,C++面向對象,C++繼承和多態,數據結構,排序,泛型編程,STL,演算法和邏輯思維等最常見的面試題。《C和C++程序員面試秘笈》通過技術點解析、代碼輔佐的方式讓讀者能深刻領會每個考點背後的技術。
本書緊扣面試精髓,對各種技術的剖析一針見血,是目前想找工作的C/C++程序員和剛畢業的大學生的面試寶典。
Java程序員面試寶典楊磊 著
本書對程序設計面試中Java常見的題型和常用解答技巧進行了介紹,對現代職業人如何有效求職、面試考官如何關注求職者動態等做了詳細解說。本書將為您揭開知名IT企業面試、筆試的核心機密;傳授程序員崗位求職的關鍵技巧。
編程之法:面試和演算法心得July 著
本書涉及面試、演算法、機器學習三個主題。書中的每道編程題目都給出了多種思路、多種解法,不斷優化、逐層遞進。本書第1章至第6章分別闡述字元串、數組、樹、查找、動態規劃、海量數據處理等相關的編程面試題和演算法,第7章介紹機器學習的兩個演算法—K近鄰和SVM。此外,每一章都有「舉一反三」和「習題」,以便讀者及時運用所學的方法解決相似的問題,且在附錄中收錄了語言、鏈表、概率等其他題型。
書中的每一道題都是面試的高頻題目,反復出現在最近5年各大公司的筆試和面試中,對面試備考有著極強的參考價值。全書邏輯清晰、通俗易懂,適合熱愛編程、演算法、機器學習,以及准備IT筆試和面試,即將求職、找工作的讀者閱讀。
C#與.NET程序員面試秘笈靳華 著
《C#與.NET程序員面試寶典》取材於各大IT公司的歷年面試題252個(包括研發類筆試及口試題目、情商及智商類題目),詳細分析了應聘C#與.NET程序員職位的常見考點。《C#與.NET程序員面試寶典》主要內容包括:面試流程、基礎語法和技術框架、數據訪問及XML應用、高級特性及應用進階、測試及質量保證、跨國公司經典面試題等。
軟體測試工程師面試指導蔡為東 著
對於想要得到一份軟體測試工程師職位的朋友來說,可能會有一些疑問,如軟體測試這個行業究竟怎麼樣?什麼樣的人適合做軟體測試?面試當中要注意什麼?軟體測試的基本知識點都有哪些?筆試都會涉及哪些內容?等等。本書將解答以上所有的疑問。
本書共6章內容,主要包括軟體測試行業概貌、軟體測試從業人員的基本要求、如何找工作、軟體測試技術基礎、典型的測試工程師筆試題等。本書內容豐富,講解深入淺出,能讓讀者朋友在短時間內掌握基本的測試技術,了解求職過程的各個環節,熟悉各種類型的筆試題,領會面試技巧。本書後附有一些實用的附錄,例如簡歷模板、新人工作指南等,尤其是「我在微軟做軟體測試外包」這一部分內容,寓故事性和知識性於一體,講述了作者在國際軟體巨頭——微軟公司做軟體測試外包的親身經歷,相信對於廣大的讀者朋友有閱讀和參考的價值。
本書適合想要從事軟體測試工作的朋友,也可供初級軟體測試工程師學習之用,另外也可作為大專院校軟體測試培訓的教材之一。
Android高薪之路李寧 著
《Android高薪之路:Android程序員面試寶典》取材於各大IT公司面試真題,所給出的試題盡可能地覆蓋了Android應用開發的各個方面,而且大多數試題都有解析部分,讀者可以通過這部分更深入地理解試題中所包含的技術內容,希望真正做到由點成線,舉一反三。
《Android高薪之路:Android程序員面試寶典》中還將Android中涉及的各個常用技術問題進行篩選、分類。這樣讀者可以有的放矢,對自己還沒有掌握的Android技術進行重點攻破,從而起到事半功倍的效果。除了對每道題目都有詳細的解析和回答外,對相關知識點還有擴展說明。
《Android高薪之路:Android程序員面試寶典》對面試中Android常見的題型和常用解答技巧進行了介紹,它不僅能幫助求職者快速復習相關知識點,也對現代職業人如何有效求職做了詳細解說。《Android高薪之路:Android程序員面試寶典》對於讀者從求職就業到提升計算機專業知識都有顯著的幫助。
編程之美《編程之美小組》
《編程之美—— 微軟 技術面試心得》收集了約60道演算法和 程序設計題目,這些題目大部分在近年的筆試,面試中出現過,或者是被微軟員工熱烈討論過。作者試圖從書中各種有趣的問題出發,引導讀者發現問題,分析問題,解決問題,尋找更優的解法。
書中絕大部分題目都提供了詳細的解說。 每道題目後面還有一至兩道擴展問題,供讀者進一步鑽研。
書中還講述了面試的各種小故事,告訴讀者微軟需要什麼樣的技術人才,重視什麼樣的能力,如何甄別人才。回答讀者關於IT業面試,招聘, 職業發展的疑問。 這本書的很多題目會出現在IT 行業的各種筆試,面試中。但本書更深層的意義在於引導讀者思考,和讀者共享思考之樂,編程之美。
⑹ 微軟程序員面試時間
很快,大概1-2天就能收到第一輪面試的安排。
微軟的社會招聘面試總共是1輪電話面試+5輪線上面試(疫情原因)。候選人以內推為主,微軟暫時未與獵頭公司合作。簡歷篩選通過後,先約電話面試時間,電話面試和每輪線上面試時間都在1小時左右。電話面試通過後,大約一周以後會約線上面試時間,線上面試用的是MicrosoftTeams,5輪線上面試一天完成,效率杠杠滴~。線上面試大約一周後會告知結果,通過之後就是offer、背調等流程。
不同部門和不同面試官的面試風格、側重點可能差別很大,但主要考察點應該沒有太大出入。網上也有很多人寫微軟的面經,也可以多搜一些作為參考,但是他們列出的面試題在你面試的時候可能一個也不會遇到。
⑺ 跪求flex程序員面試題...急急急
1.使用Flex Bulider3建立一下新的.mxml的頁面時默認的背景是藍色的,請問用什麼辦法能修改掉此背景顏色,以至於下次創建時背景不是為默認的藍色的呢?請寫出你認為正確的方法.
2.使用Flex Bulider3如何跟蹤程序?
3.請問enterFrame和timerEvent這2個事件有什麼區別?請說下具體的使用方法和相關的使用場合?
4.請說下你理解AS3的事件機制是什麼機制?你認為正確的就可以說出來.
5.請問addEventListener裡面有幾個參數,你能說出具體的使用方法嘛?
6.請問我想判斷一個字體是否是數字,用什麼辦法去判斷呢?
7.請問我想判斷一個字元或者一個對象的類型怎麼判斷呢?
8.請問你了解 internal 控制符么?能說下具體使用方法和場合嘛?
9.我想在某一點不去執行任何內容,也就是說我想停止執行了,你知道要怎麼做嘛?
10.請問 undefined 和 null 是否一樣,如果不一樣能否說出其中的區別呢?
11.創建常量知道怎麼創建嘛?說下你是怎麼創建的.
12.請問用什麼方法自定義一個事件呢?說下具體的方式.
13.請問怎麼樣檢測本機的內容呢,比如說,我想知道本機的操作系系,是否有視頻等這些.
14.請問用什麼辦法解決安全域的問題?如果你不知道安全域的問題的話,可以在本機中綁定一下圖片,然後再放到伺服器上,就會出現此問題了.
15.有三種基本數字類型: number, int, 和uint 請問有什麼區別.具體說一下.
16.parseInt此方法轉化為int型的方法,請問你知道此方法的第二個參數是什麼意思嘛?
17.Math.round( ), Math.floor( ) 和Math.ceil( ) 三個方法都是四捨五入,請問有什麼區別?
18.請問一個數組里可以放不同的類型嘛?
19.var letters:Array = ["a", "b", "c"];我想在這個數組里搜索 『b』 字元,請問怎麼辦?
20.怎麼樣轉換數組為字元串,怎麼樣將字元串轉化為數組?
21.我想創建的視圖居中怎麼辦?
22.請問知道層級的概念嘛?如果知道請問怎麼樣交換2個組件的層級呢?
23.請問你知道loader,URLLoader,URLStream這個三種動態載入資源的具體使用場合,以及有什麼區別嘛?
24.如何把MouseEvent 的localX 和localY 屬性轉化成全局坐標?
25.請問我現在有一個正方形的圖片,我想把他做成圓形,有什麼辦法呢?前提是用flex或者as3
26.請問新創建的一個sprite能否被直接加到ui容器里?如果不能請說出用什麼辦法能加入.
27.我怎麼設置把一個文本框,設置成一個密碼框?
28.我想在文本框里只能輸入abcd,有什麼辦法能做到呢?如果我想輸入除abcd以外的其它都能輸入又怎麼做呢?
29.請問condenseWhite 這個屬性在TextInput里是表示什麼意思?
30.我現在剛創建的文件的text為 this is a text,我想設置游標在 is 上,請問怎麼設置?
31.請問怎麼樣在文本框里添加超鏈接?
32.我想獲取系統里的字體,請問怎麼辦?
33.substring( ),substr( ), slice(),請說下3種解析字元串的不同之處,以及適用場合?
34. var fruits:XML =
Apple
Orange
Pear
Watermelon
;
以下有一個字元串,我現在知道了color為orange,我想知道此color相對應的name節點的值,我應該怎麼做?
35.請說下目前使用flex和後台交互的幾種方法,以及適用場合.
36.我現在想在flex里調用JS方法,我要怎麼辦呢?
37.我想用JavaScript調用ActionScript函數,我要怎麼辦呢?
38.FileReference 請說下此對象的幾個相關事件
組件
1.我不想在容器里顯示滾動條怎麼辦?
2.請問Flex bulider3可以創建幾種不同的項目?
3.你了解RSL嘛?請說明下RSL的使用方法,以及使用RSL為了解決什麼問題?
4.請問SWC是做什麼用的,怎麼樣自己製作一個SWC?
5.flex生成出來的文件都是很大,請問你用什麼辦法進行縮小呢?
6.請問 trace( NaN == NaN ) 結果為true 還是false,為什麼?
7.warning: unable to bind to property 」 on class 『Object』 (class is not an IEventDispatcher) 在使用ItemRender時,經常會出現這種警告,請問想去除的話怎麼辦呢?
8.現在流行MVC,但是as代碼有的時候還是大部分寫在mxml裡面,請問我想代碼分離怎麼辦呢?
9.我想繼續UIComponent重新寫一個正方形的組件,我應該怎麼做?請說重點部分即可.
10.常用的幾個切換數據的組件比如: TabNavigator等都有屬性 creationPolicy 你知道這種策略的使用方式是什麼嘛?以及優,缺點呢?
11.我想在application里獲取當前運行的URL,我要怎麼獲取.
12.請說下事件里的currentTarget 和 target的區別?
13.請列舉下你常用的幾種effects,並說明使用原因.
14.HBox,VBox和canvas有什麼區別呢?試說出其中幾點
15.請問我想在list里選中多行信息,我要怎麼做呢?
16.Alert裡面有幾個屬性,我想設置圖片怎麼辦呢?
17.請問你是否設置過樣式呢,我想動態設置樣式怎麼辦呢?如果我想在as代碼里設置樣式我又要怎麼辦呢?
18.你能說一下UIComponent的生命周期嘛?以及相關的使用場合呢?
19.請問你是否發現過 flex3里的bug呢,請列舉一些?
20.列舉出flex裡面的幾個綁定數據對象的方式
21.請問我自己定義了一個組件,我想在組件里的屬性里設置幾個默認值,我要怎麼設置呢?
22.callLater()方法怎麼使用,為什麼要使用這個方法呢?
23.請問你是否使用過mole這種方法去做項目呢?他的優,缺點是什麼呢?使用組件的方式載入的話,他的優,缺點是什麼呢?
24.目前網頁里都有導航,請問在Flex要做導航要注意一些什麼呢?以及怎麼樣做呢?
25.我想在一個錯誤的圖片鏈接里,定義一下默認的圖片怎麼做呢?
26.請試寫一個自定義的驗證組件
27.請說明下tigger tiggerEvent 在驗證組件里是什麼意思,具體怎麼使用呢?
28.ExternalInterface, LocalConnection 2者有什麼區別?
29.你是否使用過flex的測試工具呢?請說明下具體是哪種,以及使用方式,你為什麼使用這種工具?
30.我能把CSS編譯成swf嘛?
31.請用as3列舉下你用過的模式
32.Embed綁定圖片有什麼缺點?
33.TitleWindow的組件是可以拖動的,我不想讓他拖動我要怎麼辦呢?
34.你是否使用過profile,你覺得這個工具怎麼樣,優,缺點是什麼呢?
35.你是否做過flex 前端的性能優化,你覺得怎麼做是比較完美的?
36.你是否了解E4X,請說明一下優,缺點?
37.請列舉一下你知道的影響性能的幾個因素?
38.請說明一下ShareObject的使用方法?以及優,缺點?
39.請列舉一下,你認為不錯的網站或者blog.
40.我現在給你100萬做一個flex項目,你認為成功的要素在哪呢?
標簽:FLEX, FLEX, 資源
flex實現微軟面試題演算法分析
[來源:dmh2002 | 作者:dmh2002 | 時間:2008-04-30 | 點擊: 603 | 收藏本文 【大 中 小】]
題目是:統計從1至400億之間的自然數中含有多少個1?比如1-11中,有1,10,11這三個自然數有4個1。
這是一道微軟的面試題,我在網上看到的,但是沒有答案,這是件很痛苦的事情,折磨人,所以我決心自己來搞定。
實際解題過程中,用遞歸的方法很容易,但是僅僅局限於400億這樣的數字,如果是1-1231111321這樣的數字的話,就復雜多了,我在文檔類裡面有非常詳盡的解題思路,用了3種解題的方法,因為排版麻煩,我就不重復貼在網頁上了,要看的朋友下載看吧。
有可能演算法不是最完美的,希望朋友們能多指教。
本來用的是flash寫文檔類,今天改了一下,用flex做了一個界面,方便大家計算使用。
此外這個計算器還有計算1到任意數字(如1230321)中有多少個1。
註:第一種演算法有最大限制。
提供的下載為flex工程。
countNumberOneFlex.rar
騰訊的面試題
int a[]={10,20,30,40};
short *p,*q;
p=(short*)(a+1);
q=(short*)a;
a[p-q]=?
---------
假設a地址為X, a+1 = X+4, 賦值給p
q指向a的首地址X
p,q之間相差四個位元組,即p-q為2個short長
所以a[p-q]-> a[2]
微軟面試題---求子數組最大乘積問題
給定一個長度為N的整數數組,只允許用乘法,計算任意(N-1)個數的組合乘積中最大的一組,並
寫出演算法的時間復雜度。
最容易想到的就是通過一次遍歷把所有(N-1)個數的組合找出來,分別計算他們的乘積,並比較
大小。由於總共有N個(N-1)個數的組合,總的時間復雜度為O(N的2次方),顯然這不是最好的解決
辦法。
且看下面的實現方法,當然也是比較簡單的,畢竟沒太多時間思考,他的時間復雜度只有O(N)。
當然肯定有其他的方式解決這個問題,blog友如果有好的方式可以貼出來分享。謝謝!
⑻ 去微軟應聘需要什麼條件
就一個條件:你必須是高手!
微軟能夠「生產」數以千計,並且忠心耿耿的百萬富翁,關鍵原因就是微軟建立了一套網羅和珍惜頂尖科技人才的機制以及「寧缺毋濫,人盡其才」的選用科技人才模式。
1、一般來說,招聘的常用捷徑有:熟人推薦(企業員工和現有關系推薦)和毛遂自薦。這些方法的好處是成本低、速度快。熟人推薦還可以幫助企業找到那些在本單位表現優秀、因而並不出現在人才市場上的「潛在」人才。由於作為推薦人的企業員工通常認為自己在本企業的聲譽與所薦人才的表現息息相關,因此一般不會推薦不可靠的人員。
根據微軟統計,公司每年接到來自世界各地的求職申請達12萬份左右。面對眾多的求職者,蓋茨並不滿足,他認為許多優秀科技人才沒有注意到微軟。為了找到那些人,微軟公司主要是依靠現有人才推薦。因此,在微軟科技人才中有近40%是內部推薦。在國外的經營機構中,微軟盡量僱用外國人,而不是採取外派人員的方式。
2、另外,微軟公司可能是所有企業在招聘途徑中最出其不意的——微軟在自己的用戶中檢索人才。微軟公司的網站上,每月都有12000多個用戶登錄,他們主要是檢索資料。微軟有編有一個專用程序,負責統計出用戶所使用的關鍵詞。從統計結果可分析出此人是否具有較高的計算機技能(比如是否會使用c語言),根據檢索結果列出招聘對象。當然,還要打電話邀請他們前來面試。
要在激烈的市場競爭中站住腳,必須不斷超越自己,超越競爭對手,微軟的經驗在於非常重視科技人才的心理素質。在微軟,優秀科技人才的標準是不僅要有很高的專業技能,還要能承受巨大的工作壓力,並勇於接受新知識,不斷創新
⑼ hr面試程序員問什麼問題,程序員在面試的時候的注意事項
01 和優秀開發者溝通
如果你本身沒有編程背景,那就盡量找到一些優秀的開發人員給你指點迷津。
02 問專業的問題
1. 簡要介紹一下你自己以及你最近在做的項目嗎?
作用:這個問題可以讓你更好地了解你的候選人,而談論近期工作能了解他對工作的熱情和奉獻。
2. 其他時間有別的項目要做嗎
作用:鑒於你的項目的時間長短和工作復雜程度,你可能只想找一個能完全投入到這個項目的人。但是很多程序員都會同時兼顧好幾個項目,你要確保彼此雙方的需求是什麼。
3. 你是怎麼看待自己的身份的?開發?產品經理?還是二者都是?
作用:理想的回答一般是『二者都是』, 但是你要認真評估每個候選人可能給你團隊帶來的有利和不利影響。產品經理可以幫助設計新的功能和交互,但是你也需要足夠的開發才能跟上方向從而建構你想要的內容。
4. 你會如何管理一個程序員團隊?
作用:這個問題可以幫你了解候選人的領導能力和風格。
5. 告訴他們公司想要的人是怎樣的。
作用:直截了當地告訴對方你的期望。像工作時間,項目長短,目標等等,這些都是對方很想知道的。就像你評價他是否適合公司一樣,對方也會評價你的公司是否適合他。
03 去合適的地方招聘
你不能指望天上會掉下個好程序員給你,微軟和谷歌的優秀程序員也不會自己蹦到你跟前。你的機會在於,很多這樣的程序員都擁有或追求商業想法。
你可以多去一些網站、活動大賽等地方探索發掘,這比你在社交網站上找到他們的運氣要大得多。
· 編程大賽
編程大賽就是程序員高手們雲集在一起,合作共同完成一個軟體的開發。
猿圈會定期舉辦此類招聘編程大賽,幫助企業挑選優質人才,提高企業品牌僱主形象。
· 開放性源代碼貢獻者
一些網站比如GitHub,提供在線代碼存儲庫, 程序員可以自由對開源項目貢獻自己的代碼。
所以,在招聘之前,你可以先去這種網站上找一找有潛力的候選人。
· 大學
· 軟體開發大會
盡可能多的去參加一些和你的產品相關的軟體開發大會。
· 技術博客
你能根據他們的博客判斷他們的技術技能、解決問題的能力以及寫作和溝通能力。
04 沒通過編程測試,堅決不錄用
你只能記住一條原則,那必須是,沒有讓候選人參加編程測試之前,千萬不能決定錄用與否。
通常情況下,出於項目的緊迫,我們會傾向於選擇看起來靠譜的第一個程序員,但是不拿到他的編程測試結果,不要沖動地下offer。
我也是個不懂代碼的HR,但是我善於利用各種各樣的工具,前段時間發現了一個猿圈測評的工具,我用它測試程序員候選人,通過測試結果判斷是否值得邀約來面試,這個我覺得很贊,你可以試試看
⑽ 給來面試計算機的人,問及各問題,越多越好
一、ADO 與ADO.NET兩種數據訪問方式區別?
1. ADO與ADO.NET簡介
ADO與ADO.NET既有相似也有區別,他們都能夠編寫對資料庫伺服器中的數據進行訪問和操作的應用程序,並且易於使用、高速度、低內存支出和佔用磁碟空間較少,支持用於建立基於客戶端/伺服器和 Web 的應用程序的主要功能。但是ADO使用OLE DB介面並基於微軟的COM技術,而ADO.NET擁有自己的ADO.NET介面並且基於微軟的.NET體系架構。眾所周知.NET體系不同於COM體系,ADO.NET介面也就完全不同於ADO和OLE DB介面,這也就是說 ADO.NET和ADO是兩種數據訪問方式。
2. 數據訪問方式的歷史
下面簡單的回顧一下微軟的數據訪問方式所走過的幾個階段。
ODBC – (Open Database Connectivity)是第一個使用SQL訪問不同關系資料庫的數據訪問技術。使用ODBC應用程序能夠通過單一的命令操縱不同的資料庫,而開發人員需要做的僅僅只是針對不同的應用加入相應的ODBC驅動。
DAO - (Data Access Objects)不像ODBC那樣是面向C/C++程序員的,它是微軟提供給Visual Basic開發人員的一種簡單的數據訪問方法,用於操縱Access資料庫。
RDO – 在使用DAO訪問不同的關系型資料庫的時候,Jet引擎不得不在DAO和ODBC之間進行命令的轉化,導致了性能的下降,而RDO(Remote Data Objects)的出現就順理成章了。
OLE DB – 隨著越來越多的數據以非關系型格式存儲,需要一種新的架構來提供這種應用和數據源之間的無縫連接,基於COM(Component Object Model)的OLE DB應運而生了。
ADO – 基於OLE DB之上的ADO更簡單、更高級、更適合Visual Basic程序員,同時消除了OLE DB的多種弊端,取而代之是微軟技術發展的趨勢。
ADO架構圖表
3. ADO與ADO.NET對照
在開始設計.NET體系架構時,微軟就決定重新設計數據訪問模型,以便能夠完全的基於XML和離線計算模型。兩者的區別主要有:
ADO以Recordset存儲,而ADO.NET則以DataSet表示。Recordset看起來更像單表,如果讓Recordset以多表的方式表示就必須在SQL中進行多表連接。反之,DataSet可以是多個表的集合。ADO 的運作是一種在線方式,這意味著不論是瀏覽或更新數據都必須是實時的。ADO.NET則使用離線方式,在訪問數據的時候ADO.NET會利用XML製作數據的一份幅本,ADO.NET的資料庫連接也只有在這段時間需要在線。
由於ADO使用COM技術,這就要求所使用的數據類型必須符合COM規范,而ADO.NET基於XML格式,數據類型更為豐富並且不需要再做COM編排導致的數據類型轉換,從而提高了整體性能。
4. 小結
ADO.NET為.NET構架提供了優化的數據訪問模型,和基於COM的ADO是完全兩樣的數據訪問方式。
二、DataSet與DataReader的區別
ADO.NET 提供以下兩個對象,用於檢索關系數據並將其存儲在內存中:DataSet和DataReader。DataSet提供一個內存中數據的關系表示形式,一整套包括一些表在內的數據(這些表包含數據、對數據進行排序並約束數據),以及表之間的關系。DataReader提供一個來自資料庫的快速、僅向前、只讀數據流。
當使用DataSet時,經常會利用DataAdapter(也可能是CommandBuilder)與數據源進行交互。當使用 DataSet時,也可以利用DataView對DataSet中的數據應用排序和篩選。也可以從DataSet繼承,創建強類型DataSet,用於將表、行和列作為強類型對象屬性公開。
下列主題包括的信息涉及:使用DataSet或DataReader的最佳時機、如何優化訪問它們所包含數據、以及如何優化使用DataAdapter(包括CommandBuilder)和DataView的技巧。
DataSet與DataReader
當設計應用程序時,要考慮應用程序所需功能的等級,以確定使用DataSet或者是DataReader。
要通過應用程序執行以下操作,就要使用DataSet:
r 在結果的多個離散表之間進行導航。
r 操作來自多個數據源(例如,來自多個資料庫、一個XML文件和一個電子表格的混合數據)的數據。
r 在各層之間交換數據或使用XML Web服務。與DataReader不同的是,DataSet能傳遞給遠程客戶端。
r 重用同樣的記錄集合,以便通過緩存獲得性能改善(例如排序、搜索或篩選數據)。
r 每條記錄都需要執行大量處理。對使用DataReader返回的每一行進行擴展處理會延長服務於DataReader的連接的必要時間,這影響了性能。
r 使用XML操作對數據進行操作,例如可擴展樣式表語言轉換(XSLT轉換)或XPath查詢。
對於下列情況,要在應用程序中使用DataReader:
r 不需要緩存數據。
r 要處理的結果集太大,內存中放不下。
r 一旦需要以僅向前、只讀方式快速訪問數據。
注填充DataSet時,DataAdapter使用DataReader。因此,使用DataAdapter取代DataSet提升的性能表現為節省了 DataSet佔用內存和填充DataSet需要的循環。一般來說,此性能提升只是象徵性的,因此,設計決策應以所需功能為基礎。
三、基本概念
1、面向對象的語言具有封裝性、繼承性、多態性。
2、ADO.NET中的五個主要對象Connection、Command、DataSet、DataReader、DataAdapter
3、ASP.NET中的身份驗證有Windows、Forms、Passport,一般採用Forms,比較簡單、適用面廣
4、介面----介面定義了一組方法(Method,子程序或函數常式[譯註:指Visual Basic .NET中的Sub和Function])、屬性(Property)、事件(Event)和域(Field,變數或特性),這些都被聲明為公有。介面也可以被另一個介面繼承。任何繼承了一個介面的類或結構都必須實現介面繼承鏈中所有介面所定義的成員。
5、繼承------繼承是指一個類——稱為子類[譯註:亦稱派生類],可以基於另一個類——稱為基類[譯註:亦稱父類、超類]。繼承提供了一種建立對象層次的機制。繼承使得你能夠在你自己的類中使用另外一個類的介面和代碼。
base->訪問基類的成員。
this->引用調用一個方法的當前對象。
6、抽象類-------抽象類是一種特殊的基類。除了通常的類成員,它們還帶有抽象類成員。抽象類成員是指沒有實現而只有聲明的方法和屬性。所有直接從抽象類派生的類都必須實現所有這些抽象方法和屬性。
抽象方法不能實例化。這樣做[譯註:指實例化一個抽象類]是不合邏輯的,因為那些抽象成員沒有實現。那麼,不能實例化一個類有什麼好處呢?很多!抽象類穩坐類繼承樹的頂端。它們確定了類的結構和代碼的意圖。用它們可以得到更易搭建的框架。這是可能的,因為抽象類具有這個框架中所有基類的一般信息和行為。
7、介面和抽象類之間的區別--------介面和抽象類關系很緊密,它們都具有對成員的抽象。
對於一個抽象類,至少一個方法是抽象方法既可,這意味著它也可以具有具體方法[譯註:Concrete Method,這只是相對於抽象方法而言,面向對象中並沒有這個概念]。
對於一個介面,所有的方法必須都是抽象的。
實現了一個介面的類必須為介面中的所有方法提供具體的實現,否則只能聲明為抽象類。
在C#中,多重繼承(Multiple Inheritance)只能通過實現多個介面得到。抽象類只能單繼承[譯註:C#中的單繼承是指所有類作為基類的時候都只能是派生類聲明中唯一的基類,而不僅僅是抽象類]。
介面定義的是一個契約,其中只能包含四種實體,即方法、屬性、事件和索引器。因此介面不能包含常數(Constant)、域、操作符、構造器、析構器、靜態構造器或類型[譯註:指嵌套的類型]。
同時,一個介面還不能包含任何類型的靜態成員。修飾符abstract、public、protected、internal、private、virtual、override都是不允許出現的,因為它們在這種環境中是沒有意義的。
類中實現的介面成員必須具有公有的可訪問性。
8、多態性--------多態性反映了能夠在多於一個類的對象中完成同一事物的能力——用同一種方法在不同的類中處理不同的對象。例如,如果Customer和Vendor對象都有一個Name屬性,則我們可以寫一個事物來調用Name屬性而不管我們所使用的是Customer對象還是Vendor對象,這就是多態性。
交通工具是多態性的一個很好的例子。一個交通工具介面可以只包括所有交通工具都具有的屬性和方法,還可能包括顏色、車門數、變速器和點火器等。這些屬性可以用於所有類型的交通工具,包括轎車、卡車和掛車。 多態性不在交通工具的屬性和方法背後實現代碼。相反,多態性只是實現介面。如果轎車、卡車和掛車都實現了同樣的交通工具介面,則所有這三個類的客戶代碼是完全一樣的。
C#通過繼承來為我們提供多態性。C#提供了virtual關鍵字用於定義一個支持多態的方法。
9、結構----------結構是和類相似的一種封裝構造,因為它可以包含數據、類型和函數成員。但和類不同的
是,結構是值類型,因此存放在內存中稱為棧的地方。結構通常用來存入簡單數據類型--
在內存中有固定大小的實體----的集合,事實上,內建的基本值類型Int32、Int64、Double
等在.NET Framework中實現為結構。
10、委託---------委託是提供對具有特定返回類型和參數列表的方法的一般引用的引用類型。它的本質上和C或C++中的函數指針相似。但和C++函數指針不同的是,委託是完全面向對象的---它們既封裝方法又封裝對象實例。委託是用戶定義的類型,所以當定義委託時,實際上是定義一個特定類型的委託,而不是一個
具體的實例
11、.Net中的內存回收機制
垃圾回收器是用來管理應用程序的內存分配和釋放的。在垃圾回收器出現以前,程序員在使用內存時需要向系統申請內存空間。有些語言,例如Visual Basic,可以自動完成向系統申請內存空間的工作。但是在諸如Visual C ++的語言中要求程序員在程序代碼中申請內存空間。如果程序員在使用了內存之後忘了釋放內存,則會引起內存泄漏。但是有了垃圾回收器,程序員就不必關心內存中對象在離開生存期後是否被釋放的問題。當一個應用程序在運行的時候,垃圾回收器設置了一個託管堆。託管堆和C語言中的堆向類似,但是程序員不需要從託管堆中釋放對象,並且在託管堆中對象的存放是連續的。
每次當開發人員使用 new 運算符創建對象時,運行庫都從託管堆為該對象分配內存。新創建的對象被放在上次創建的對象之後。垃圾回收器保存了一個指針,該指針總是指向託管堆中最後一個對象之後的內存空間。當新的對象被產生時,運行庫就知道應該將新的對象放在內存的什麼地方。同時開發人員應該將相同類型的對象放在一起。例如當開發人員希望向資料庫寫入數據的時侯,首先需要創建一個連接對象,然後是Command對象,最後是DataSet對象。如果這些對象放在託管堆相鄰的區域內,存取它們就非常快。
四、Public、Protected、Internal、Protected internal、Private的訪問許可權
1、Public ------公共成員,成員對於任何人都是可見的。我們可以在類內部的和類的子孫的代碼中通過使用類的實例來訪問一個公有的成員。
2、Protected------保護成員,成員和私有成員類似,只能由包含它的類訪問。然而,受保護成員可以由一個類的子類所使用。如果類中的一個成員可能被該類的子類訪問,它應該聲明未受保護的
3、 Internal/Friend--------成員對整個應用程序是公有的,但對於其他的外部應用程序是私有的。當我們希望其他應用程序能夠使用當前應用程序中的包含的一個類,但又希望這個類為當前應用程序保留一定的功能時,就要用到內部/友元成員。在C#中我們使用internal,而在 Visual Basic .NET中我們使用Friend。
4、Protected internal -------包括了 Protected和Internal修飾符,成員只能由包含了基類的應用程序中的從該基類派生的子類所訪問。當你希望一個類中的成員只能由其子類訪問,並且拒絕其他應用程序訪問該類的這個成員的時候,你就要將其聲明未受保護內部成員。
5、Private -------私有成員,成員是隱藏的,只有對類本身是可用的。所有使用了一個類的實例的代碼都不能直接訪問一個私有成員,這個類的子類也不允許。
五、ASP.NET兩個頁面之間傳遞值的幾種方式
ASP.NET 提供了卓越的事件驅動編程模型,讓開發者簡化了應用程序的總體設計,但是這個也造成了它固有的一些問題,例如,使用傳統的ASP里,我們可以通過使用 POST方法很容易地實現頁面間傳遞值,同樣的事情,在使用事件驅動編程模型的ASP.NET就不是那麼容易了,當然了,我們仍然有一些方法可以實現同樣的功能。本文將試著使用不同的可能的方法來解決這個問題,但可以預見是,本文將包含使用querystring,session變數以及 server.Transfer方法來實現頁面間的值傳遞。
使用QueryString
使用QuerySting在頁面間傳遞值已經是一種很老的機制了,這種方法的主要優點是實現起來非常簡單,然而它的缺點是傳遞的值是會顯示在瀏覽器的地址欄上的(不安全),同時又不能傳遞對象,但是在傳遞的值少而安全性要求不高的情況下,這個方法還是一個不錯的方案。使用這種方法的步驟如下:
1,使用控制項創建web表單(form)
2,創建可以返回表單的按鈕和鏈接按鈕
3,在按鈕或鏈接按鈕的單擊事件里創建一個保存URL的字元變數
4,在保存的URL里添加QueryString參數
5,使用Response.Redirect重定向到上面保存的URL
下面的代碼片斷演示了如何實現這個方法:
源頁面代碼:
private void Button1_Click
(object sender, System.EventArgs e)
{
string url;
url="anotherwebform.aspx?name=" + TextBox1.Text + "&email=" + TextBox2.Text;
Response.Redirect(url);
}
目標頁面代碼:
private void Page_Load
(object sender, System.EventArgs e)
{
Label1.Text=Request.QueryString["name"];
Label2.Text=Request.QueryString["email"];
}
使用Session變數
使用Session變數是可以在頁面間傳遞值的的另一種方式,在本例中我們把控制項中的值存在Session變數中,然後在另一個頁面中使用它,以不同頁面間實現值傳遞的目的。但是,需要注意的是在Session變數存儲過多的數據會消耗比較多的伺服器資源,在使用session時應該慎重,當然了,我們也應該使用一些清理動作來去除一些不需要的session來降低資源的無謂消耗。使用Session變數傳遞值的一般步驟如下:
1,在頁面里添加必要的控制項
2,創建可以返回表單的按鈕和鏈接按鈕
3,在按鈕或鏈接按鈕的單擊事件里,把控制項的值添加到session變數里
4,使用Response.Redirect方法重定向到另一個頁面
5,在另一個頁面提取session的值,在確定不需要使用該session時,要顯式清除它
下面的代碼片斷演示了如何實現這個方法:
源頁面代碼:
private void Button1_Click
(object sender, System.EventArgs e)
{
//textbox1 and textbox2 are webform
//controls
Session["name"]=TextBox1.Text;
Session["email"]=TextBox2.Text;
Server.Transfer("anotherwebform.aspx";
}
目標頁面代碼:
private void Page_Load
(object sender, System.EventArgs e)
{
Label1.Text=Session["name"].ToString();
Label2.Text=Session["email"].ToString();
Session.Remove("name";
Session.Remove("email";
}
使用Server.Transfer
這個方法相比上面介紹的方法稍微復雜一點,但在頁面間值傳遞中卻是特別有用的,使用該方法你可以在另一個頁面以對象屬性的方式來存取顯露的值,當然了,使用這種方法,你需要額外寫一些代碼以創建一些屬性以便可以在另一個頁面訪問它,但是,這個方式帶來的好處也是顯而易見的。總體來說,使用這種方法是簡潔的同時又是面向對象的。使用這種方法的整個過程如下:
1,在頁面里添加必要的控制項
2,創建返回值的Get屬性過程
3,創建可以返回表單的按鈕和鏈接按鈕
4,在按鈕單擊事件處理程序中調用Server.Transfer方法轉移到指定的頁面
5,在第二個頁面中,我們就可以使用Context.Handler屬性來獲得前一個頁面實例對象的引用,通過它,就可以使用存取前一個頁面的控制項的值了
以下代碼綜合實現上述步驟過程的代碼:
源頁面代碼:
把以下的代碼添加到頁面中
public string Name
{
get
{
return TextBox1.Text;
}
}
public string EMail
{
get
{
return TextBox2.Text;
}
}
然後調用Server.Transfer方法
private void Button1_Click
(object sender, System.EventArgs e)
{
Server.Transfer("anotherwebform.aspx";
}
目標頁面代碼:
private void Page_Load
(object sender, System.EventArgs e)
{
//create instance of source web form
WebForm1 wf1;
//get reference to current handler instance
wf1=(WebForm1)Context.Handler;
Label1.Text=wf1.Name;
Label2.Text=wf1.EMail;
}
六、ASP.NET的Application、Session、Cookie、ViewState和Cache等變數的區別是什麼?
Application是公共的,所有人都能看到,所以可以用來做聊天室,
session是私有的,每個客戶端都存在一個不同的session 生存期正常是20分鍾,也可以自己設定為1分鍾或2個小時
cookie是保存在本機的文件,記錄短小的信息,除非你讓cookie過期,否則會一直存在
viewstate類似於asp中的hidden控制項,用來記錄頁面中的控制項的狀態的,主要在頁面間信息傳遞時用,
cache是緩存,用來記錄已經執行過的一些數據,比如讀取資料庫,目的是加速顯示,減少伺服器的負擔,過期時間也是可以自己設定的,
七、C#中介面與類的區別?
1、介面類似於類,但介面的成員都沒有執行方式,它只是方法、屬性、事件和索引符的組合而已,並且也只能包含這四種成員;類除了這四種成員之外還可以別的成員(如欄位)。
2、不能實例化一個介面,介面只包括成員的簽名;而類可以實例化(abstract類除外)。
3、介面沒有構造函數,類有構造函數。
4、介面不能進行運算符的重載,類可以進行運算符重載。
5、介面的成員沒有任何修飾符,其成員總是公共的,而類的成員則可以有修飾符(如:虛擬或者靜態)。
6、派生於介面的類必須實現介面中所有成員的執行方式,而從類派生則不然。
那麼為什麼還要有介面呢?主要原因是它是一種有效的契約。類有一些成員,不考慮把這些成員組合在一起,類只是一個擁有各種方法、欄位和屬性的列表,但為了能以某種方式使用類,必須知道類能執行那些功能,具體的操作就是聲明執行一個或多個介面的類,類執行介面的方式是從介面中派生,再提供這個介面中定義的所有成員的執行方式。