天天看點

今天的面試小記

做程式員以來,一直都是在創業型小公司呆着,手下的程式員最多也就三倆号人,但是老闆的各種要求和任務都要快速滿足,很多技術還不及深鑽就要去趕緊學習其它東西,是以造成了現在技術層面:“廣度有,深度無”的尴尬局面,今天去某公司面試了,被問一些我以往工作中沒用到(或很少用)的知識點,基本上都是憑經驗當場猜的,記在這裡備忘:

1、在一個同步的asp.net頁面(即正常aspx頁面)時,如果一個Button點選去發起一個異步操作,頁面會不會有異常?

因為我之前在asp.net頁上有試過異步查詢,也是類似回調的機制處理,當時頁面能正常跑的,沒報異常,是以我說不會報異常。

回來後測試了一下:

确實也沒報異常,調試視窗也正常輸出了。但是從面試官當時的反應上看,好象對我的回答有些不認同。事後我反思了一下:如果網絡問題或其它原因,導緻回調逾時,也許有可能報異常吧。

馬後炮:如果在異步或多線程中,調用其它控件(比如修改界面上TextBox框裡的值),不光是APS.NET,WINFORM也會出異常,不過面試當時,沒提到是否需要調用其它控件的值,隻是問到在同步頁面裡,發起異步操作,能不能正常跑下去,是以我的回答也不能算錯,最多也就是不完備而已

2、ref與"指針的指針":一個類的執行個體,當成參數傳入方法中後,如果在方法中改變了執行個體的屬性,方法調用完成後,該執行個體的屬性最終是否也改變了?

這個問題很基礎,就是引用類型與值類型的了解,引用類型的參數傳到方法中時,實際上相當于指針,方法調用完成後,當然屬性值也變了,這個很easy,99%的程式員就算新手也能回答。

然後面試官接着問:如果在這個引用類型的參數前再加一個ref關鍵字,結果又是怎樣?我的回答,應該還是變了。(後面我回來在vs.net上試了下,我的回答是對的)

問題還沒結束:如果引用類型的參數,相當于傳入的是指針,指針的前面加一個ref,代表什麼意思?我的回答:指針的指針。

繼續:指針的指針是個什麼含義?這時候,方法體内什麼事情不能做? 我一時短路,懵了,c語言沒學好的遺憾。

3、一個第三方的類(不能修改),但是該類的某個屬性的setter方法是private的?有什麼方法可以修改這個屬性的值?

 上面是這個類的原型,要求不能修改它,但是必須要求Person類的執行個體,能修改Name屬性值。

第一次遇到這種要求,正常辦法肯定是行不通的,看來隻能不走尋常路。大腦空白,沒想法! 不過回來的路上,我想了想,除了将第三方的dll反編譯,得到IL代碼(或其它語言的源碼),重新編譯外,貌似沒有其它辦法。這個問題也是所有問題中,最讓我感到不知所措,最想知道答案的,如果園友有其它高招,跪求指點。

注:好吧,如果面試官換個問法“反射能幹些什麼”?也許我就不會這麼盲然了

我的馬後炮答案:

4、一個複雜的sql語句比如: select ... from ... join on ... where ... group by ... order by ... ,資料庫内部在執行時,是按什麼順序處理的?

這個基本上也沒回答全。 回頭得去翻翻SqlServer的相關書籍。

5、在寫html代碼時,用什麼代碼可以改變浏覽器的解析方式?

這個基本上,也沒答上來,以前寫css時,隻知道<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />這個可以将IE8強制改成相容視圖,但是明顯不是面試官要的答案。

馬後炮:同樣,如果面試官問:DocType的三種類型Strict、Transitional 以及 Frameset,分别有什麼不同?我就知道怎麼回答了,當時被“解析方式”這一專業詞彙給卡住了,導緻大腦神遊短路。

6、SqlServer的預設系統資料庫中model庫是幹嘛用的?

當時也瞎扯了一通,基本上也沒扯全,仍然要去翻翻SqlServer的相關書籍

馬後炮:model庫是系統資料庫之一,是一個模闆資料庫,每當建立一個新的資料庫時,會把model建立一個副本,然後重命名為使用者自己定義的資料庫名。相當于印刷術中的“字模”

7、二個委托A與B,用Combine操作連接配接後,指派給委托C,C指向的是A還是B?

我隻知道最終C會執行委托A與委托B中調用的方法,但是最終指向誰?真沒想過

馬後炮:委托A與委托B的Combine操作,其實考查的是委托鍊的知識點,多個委托合并後,内部的_invocationList會初始化成一個委托數組,依次存放A與B,然後C指向這個數組,是以該問題中的“指向誰”,如果這個意思的話,應該是指向A(因為A是數組的第一個元素)

8、如果在Asp.Net中開發者即自定義了HttpModule,又定義了HttpHandle,且均在web.config中正确注冊了,最後誰會先執行?

我的回答:HttpModule,然後面試官繼續問到:如果沒有在web.config中注冊的HttpModule,如何動态加載? 沒答上來

馬後炮:當時是憑印象答的,回來驗證了一下順序,沒答錯,代碼如下,但是動态加載httpModule,還是沒頭緒(嘗試在global裡搗鼓了下,失敗收場,個人感覺多半是要用C#來對IIS進行控制了,繼續求達人指點)

MyModule.cs

MyHandler.cs

然後在web.config中注冊

最終調試視窗的輸出:

MyModule.Init is called

MyHandler.ProcessRequest is called

更新: 動态加載HttpModule的問題,在微軟中文論壇上發貼求助後,很快得到了解答,原來很簡單:)

在Global.asax裡重載Init事件就ok了

實際工作中,也許可以去查資料,google+百度+msdn,但是面試當場,除了回答yes or no來押寶,基本上沒其它招數。不過這也暴露出個人技術層面的很多問題,今後要向除了知識面的廣度,更要注重深度的學習。

知之為知之,不知為不知。做技術,來不了虛假,不知道不丢人,丢人的知道了問題所在,還是解決不了,文中提到的問題,歡迎大家回貼指點,本人一定虛心接受:)