1、對於 Web 性能優化,您有哪些瞭解和經驗嗎?javascript
出現指數:五顆星css
主要考點:這道題是博主在博客園的新聞裏面看到的,回想以前幾年的面試經歷,發現此題出現機率仍是比較高的。由於它的考麪灰常廣,可讓面試官很快了解你的技術涉及面以及這些技術面的深度。html
參考答案:這個問題能夠分前端和後端來講。前端
一、前端優化java
(1)減小 HTTP 請求的次數。咱們知道每次發送http請求,創建鏈接和等待相應會花去至關一部分時間,因此在發送http請求的時候,儘可能減小請求的次數,一次請求能取出的數據就不要分屢次發送。jquery
(2)啓用瀏覽器緩存,當肯定請求的數據不會發生變化時,可以直接讀瀏覽器緩存的就不要向服務端發送請求。好比咱們ajax裏面有一個參數可以設置請求的時候是否啓用緩存,這種狀況下就須要咱們在發送請求的時候作好相應的緩存處理。程序員
(3)css文件放 在<head>裏面,js文件儘可能放在頁面的底部。由於請求js文件是很花費時間,若是放在<head>裏面,就會致使頁面的 DOM樹呈現須要等待js文件加載完成。這也就是爲何不少網站的源碼裏面看到引用的文件放在最後的緣由。web
(4)使用壓縮的css和js文件。這個不用多說,網絡流量小。面試
(5)若是條件容許,儘可能使用CDN的方式引用文件,這樣就能減小網絡流量。好比咱們經常使用的網站http://www.bootcdn.cn/。ajax
(6)在寫js和css的語法時,儘可能避免重複的css,儘可能減小js裏面循環的次數,諸如此類。
二、後端優化:
(1)程序的優化:這是一個很大的話題,我這裏就選幾個常見的。好比減小代碼的層級結構、避免循環嵌套、避免循環CURD數據庫、優化算法等等。
(2)數據庫的優化:(因爲數據庫優化不是本題重點,因此可選幾個主要的來講)好比啓用數據庫緩存、經常使用的字段建索引、儘可能避免大事務操做、避免select * 的寫法、儘可能不用in和not in 這種耗性能的用法等等。
(3)服務器優化:(這個可做爲可選項)負載均衡、Web服務器和數據庫分離、UI和Service分離等等。
2、MVC路由理解?(家常便飯)
出現指數:五顆星
主要考點:此題主要考點是MVC路由的理解。
參考答案:
一、首先咱們要理解MVC中路由的做用:url Routing的做用是將瀏覽器的URL請求映射到特定的MVC控制器動做。
二、當咱們訪問http://localhost:8080/Home/Index 這個地址的時候,請求首先被UrlRoutingModule截獲,截獲請求後,從Routes中獲得與當前請求URL相符合的RouteData對象, 將RouteData對象和當前URL封裝成一個RequestContext對象,而後從Requestcontext封裝的RouteData中獲得 Controller名字,根據Controller的名字,經過反射建立控制器對象,這個時候控制器才真正被激活,最後去執行控制器裏面對應的 action。
3、談談你以爲作的不錯系統,大概介紹下用到了哪些技術?
出現指數:五顆星
主要考點:這是一道很是開放的面試題。博主遇到過好幾家公司的面試官都問道了這個,博主以爲他們是想經過這個問題快速瞭解面試者的技術水平。此題只要結合你最近項目用到的技術談談就行了。
參考答案:
就拿我以前作過的一個項目爲例來簡單說明一下吧。項目分爲客戶端和服務端,客戶端分 爲BS客戶端和CS客戶端,BS客戶端採用MVC 5.0的框架,CS客戶端是Winform項目,服務端使用WebApi統一提供服務接口,考慮之後可能還要擴展手機端,因此服務接口的參數和返回值使用 通用的Json格式來傳遞數據。
一、服務端採用的面向接口編程,咱們在軟件架構的過程當中,層和層之間經過接口依賴, 下層不是直接給上層提供實現,而是提供接口,具體的實現以依賴注入的方式在運行的時候動態注入進去。MEF就是實現依賴注入的一種組件。它的使用使得UI 層不直接依賴於BLL層,而是依賴於中間的一個IBLL層,在程序運行的時候,經過MEF動態將BLL裏面的實現注入到UI層裏面去,這樣作的好處是減小 了層與層之間的耦合。服務端的異常裏面、權限驗證、日誌記錄等通用功能使用了AOP攔截的機制統一管理,項目中使用的是Postsharp這個組件,很好 地將通用需求功能從不相關的類當中分離出來,提升了代碼的可維護性。
二、BS的客戶端採用的jquery+bootstrap 的方式,全部頁面採用流式佈局,能更好適應各類不一樣的終端設備(PC、手機)。項目中使用了各類功能強大的bootstrap組件,能適應各類複雜的業務需求。
4、Js繼承實現。
出現指數:五顆星
主要考點:這道題考驗面試者對js理解的深度。根據博主的經歷,這種題通常在筆試出現的概率較大,爲何把它放在這裏,由於它確實太常見了。其實js實現繼承的方式不少,咱們只要寫好其中一種就行了。
參考答案:原型鏈繼承
5、談談你對設計模式的認識?結合你用得最多的一種設計模式說說它的使用。
出現指數:五顆星
主要考點:不用多說,這題考的就是對設計模式的理解。通常爲了簡單可能會要求你寫一個單例模式,注意最好是寫一個完整點的,考慮線程安全的那種。而後會讓你說說你在項目中什麼狀況下會用到這種模式
參考答案:
通用寫法
單例模式確保一個類只有一個實例,並提供一個全局訪問點,它的使用場景好比任務管理 器整個系統中應該只有一個把,再好比操做文件的對象,同一時間咱們只能有一個對象去操做文件吧。最重要的,好比咱們項目中用得很是多的功能→日誌記錄,在 一個線程中,記錄日誌的對象應該也只能有一個吧。單例模式的目的是爲了保證程序的安全性和數據的惟一性。或者你也能夠結合你使用的其餘設計模式來講明。
6、IIS的工做原理?
出現指數:四顆星
主要考點:此題主要考的是.net framework和IIS是如何結合呈現頁面的。這是一個有點複雜的過程,面試的時候不可能說得完整,那麼咱們就抓住幾個關鍵點說說就能夠。其實博主也不能徹底理解這個過程,今天正好借這個機會溫習下。
參考答案:
一、當客戶端發送HTTP Request時,服務端的HTTP.sys(能夠理解爲IIS的一個監聽組件) 攔截到這個請求;
二、HTTP.sys 聯繫 WAS 向配置存儲中心請求配置信息。
三、而後將請求傳入IIS的應用程序池。
四、檢查請求的後綴,啓動aspnet_isapi.dll這個dll,這個dll是.net framework裏面的,也就是說到這一步,請求進入了.net framework的管轄範圍。
五、這個時候若是是WebForm,開始執行復雜的頁面生命週期(HttpRuntime→ProcessRequest→HttpContext→HttpHandler);若是是MVC,則啓動mvc的路由機制,根據路由規則爲URL來指定HttpHandler。
六、httpHandler處理請求後,請求結束,給出Response,客戶端處理響應,整個過程結束。
7、Http協議
出現指數:四顆星
主要考點:此題主要考對於web裏面http協議的理解。
參考答案:
一、http協議是瀏覽器和服務器雙方共同遵循的規範,是一種基於TCP/IP應用層協議。
二、http是一種典型的請求/響應協議。客戶端發送請求,請求的內容以及參數存放到請求報文裏面,服務端收到請求後,作出響應,返回響應的結果放到響應報文裏面。經過F12能夠查看請求報文和響應報文。
三、http協議是」無狀態」的,當客戶端向服務端發送一次http請求後,服務端收到請求而後返回給客戶端相應的結果,服務器會當即斷開鏈接並釋放資源。在實際開發過程當中,咱們有時須要「保持」這種狀態,因此衍生出了Session/Cookie這些技術。
四、http請求的方式主要有get/post。
五、http狀態碼最好記幾個,博主有一次面試就被問到了。200(請求成功)、404(請求的資源不存在)、403(禁止訪問)、5xx(服務端錯誤)
8、數據庫優化經驗(後端工程師很是常見)
出現指數:四顆星
主要考點:此題考察後端工程師操做數據庫的經驗。說實話,數據庫是博主的弱項,博主以爲對於這種考題,須要抓住幾個經常使用而且關鍵的優化經驗,若是說得不對,歡迎你們斧正。
參考答案:
一、數據庫運維方面的優化:啓用數據庫緩存。對於一些比較經常使用的查詢能夠採用數據庫緩存的機制,部署的時候須要注意設置好緩存依賴項,防止「過時」數據的產生。
二、數據庫索引方面的優化:好比經常使用的字段建索引,聯合查詢考慮聯合索引。(PS:若是你有基礎,能夠敞開談談彙集索引和非彙集索引的使用場景和區別)
三、數據庫查詢方面的優化:避免select * 的寫法、儘可能不用in和not in 這種耗性能的用法等等。
四、數據庫算法方面的優化:儘可能避免大事務操做、減小循環算法,對於大數據量的操做,避免使用遊標的用法等等。
9、關於代碼優化你怎麼理解?你會考慮去代碼重構嗎?
出現指數:四顆星
主要考點:此題考的是面試者對代碼優化的理解,以及代碼如何重構的相關知識。
參考答案:
一、對於代碼優化,以前的公司每週會作代碼審覈,審覈的主要做用就是保證代碼的正確性和執行效率,好比減小代碼的層級結構、避免循環嵌套、避免循環CURD數據庫、儘可能避免一次取出大量數據放在內存中(容易內存溢出)、優化算法等。
二、對於陳舊代碼,可能不少地方有調用,而且開發和維護人員頗有可能不是同一我的,因此重構時要格外當心,若是沒有十足的把握,不要輕易重構。若是必需要重構,必須作好充分的單元測試和全局測試。
10、談談你的優勢和缺點?
出現指數:四顆星
主要考點:這道題讓人有一種罵人的衝動,可是沒辦法,恰恰不少所謂的大公司會問這個。好比華爲。這個問題見仁見智,答案能夠本身組織。
參考答案:
優勢:對於新的技術學習能力強,能很快適應新環境等等
缺點:對技術太過於執着等等
11、關於服務器端 MVC 架構的技術實現,您是怎樣理解的?這種架構方式有什麼好處?您在項目中是如何應用這一架構的?
出現指數:三顆星
主要考點:此題主要考的對於MVC這種框架的理解。
參考答案:MVC,顧名思義,Model、View、Controller。全部的 界面代碼放在View裏面,全部涉及和界面交互以及URL路由相關的邏輯都在Controller裏面,Model提供數據模型。MVC的架構方式會讓系 統的可維護性更高,使得每一部分更加專一本身的職責,而且MVC提供了強大的路由機制,方便了頁面切換和界面交互。而後能夠結合和WebForm的比較, 談談MVC如何解決複雜的控件樹生成、如何避免了複雜的頁面生命週期。
12、網站優化:網站運行慢,如何定位問題?發現問題如何解決?
出現指數:三顆星
主要考點:此題和問題一相似,考察Web的問題定位能力和優化方案。
參考答案:
瀏覽器F12→網絡→查看http請求數以及每一個請求的耗時,找到問題的根源,而後依次解決,解決方案能夠參考問題一里面的Web優化方案。
十3、說說你最擅長的技術?並說說你是如何使用的?
出現指數:三顆星
主要考點:這是一道很是開放的面試題。最初遇到這種問題,博主很想來一句:你妹,這叫什麼問題!但確實有面試官問到。回頭想一想,其實此題考查你擅長的技術的涉及深度。其實博主以爲對於這個問題,能夠結合你項目中用到的某一個技術來講就行了。
參考答案:
簡單談談MEF在咱們項目裏面的使用吧。
在談MEF以前,咱們必需要先談談DIP、IOC、DI
依賴倒置原則(DIP):一種軟件架構設計的原則(抽象概念)
控制反轉(IoC):一種反轉流、依賴和接口的方式(DIP的具體實現方式)。
依賴注入(DI):IoC的一種實現方式,用來反轉依賴(IoC的具體實現方式)。
什麼意思呢?也就是說,咱們在軟件架構的過程當中,層和層之間經過接口依賴,下層不是 直接給上層提供實現,而是提供接口,具體的實現以依賴注入的方式在運行的時候動態注入進去。MEF就是實現依賴注入的一種組件。它的使用使得UI層不直接 依賴於BLL層,而是依賴於中間的一個IBLL層,在程序運行的時候,經過MEF動態將BLL裏面的實現注入到UI層裏面去,這樣作的好處是減小了層與層 之間的耦合。這也正是面向接口編程方式的體現。
十4、本身寫過JS組件嗎?舉例說明。
出現指數:三顆星
主要考點:此題考的js組件封裝和js閉包的一些用法。通常來講,仍是筆試出現的概率較大。
參考答案:自定義html的select組件
就能自動從後臺取數據,注意valueField和textField對應要顯示和實際值。
十5、本身寫過多線程組件嗎?簡要說明!
出現指數:三顆星
主要考點:此題是兩年前博主在攜程的一次電話面試中遇到的,其餘地方基本上沒遇到過,其實到如今也不能理解當時面試官問這個問題的目的。但我想,此問題必有出處,估計面試官是想了解你對多線程以及線程池等的理解深度。
參考答案:能夠參考http://www.cnblogs.com/Alexander-Lee/archive/2009/10/31/1593647.html
一.填空題
1.面向對象的語言具備(繼承)性、(多態)性、(封裝)性。
2.能用foreach遍歷訪問的對象須要實現 (IEnumberable)接口或聲明(GetEnumberator)方法的類型。
3.列舉ADO.net中的五個主要對象(Command)、(Connection)、(DataReader)、(DataSet)、(DataAdapter)。
4.C#中的三元運算符是__(?:)__
5.當整數a賦值給一個object對象時,整數a將會被__(裝箱)___
6.類成員有__(3)__種可訪問形式
7.float f=-123.567F;int i=(int)f;i的值如今是_(-123)__
8.委託聲明的關鍵字是___( delegate) _
9.在Asp.net中全部的自定義用戶控件都必須繼承自_ (System.Web.UI.UserControl) __
10.在.Net中全部可序列化的類都被標記爲__[serializable]___
11.在.Net託管代碼中咱們不用擔憂內存漏洞,這是由於有了_ GC __
12.當類T只聲明瞭私有實例構造函數時,則在T的程序文本外部,_不能夠_(能夠 or 不能夠)從T派生出新的類,_不能夠_(能夠 or 不能夠)直接建立T的任何實例。
二.選擇題
1.如下敘述正確的是: BC
A. 接口中能夠有虛方法。 B. 一個類能夠實現多個接口。
C. 接口不能被實例化。 D. 接口中能夠包含已實現的方法。
2.從數據庫讀取記錄,你可能用到的方法有: BCD
A. ExecuteNonQuery B. ExecuteScalar
C. Fill D. ExecuteReader
3.對於一個實現了IDisposable接口的類,如下哪些項能夠執行與釋放或重置非託管資
相關的應用程序定義的任務?(多選) ( ABC )
A.Close B.Dispose C.Finalize D.using E.Quit
4.如下關於ref和out的描述哪些項是正確的?(多選) ( ACD )
A.使用ref參數,傳遞到ref參數的參數必須最早初始化。
B.使用out參數,傳遞到out參數的參數必須最早初始化。
C.使用ref參數,必須將參數做爲ref參數顯式傳遞到方法。
D.使用out參數,必須將參數做爲out參數顯式傳遞到方法。
5.在對SQL Server 數據庫操做時應選用(A)
A.SQL Server .NET Framework 數據提供程序;
B.OLE DB .NET Framework 數據提供程序;
C.ODBC .NET Framework 數據提供程序;
D.Oracle .NET Framework數據提供程序;
6.下列選項中,(C)是引用類型。
A.enum類型 B.struct類型 C.string類型 D.int類型
7.關於ASP.NET中的代碼隱藏文件的描述正確的是(C)
A.Web窗體頁的程序的邏輯由代碼組成,這些代碼的建立用於與窗體交互。編程邏輯惟一與用戶界面不一樣的文件中。該文件稱做爲「代碼隱藏」文件,若是用C#建立,該文件將具備「.ascx.cs」擴展名。
B.項目中全部Web窗體頁的代碼隱藏文件都被編譯成.EXE文件。
C.項目中全部的Web窗體頁的代碼隱藏文件都被編譯成項目動態連接庫(.dll)文件。
D.以上都不正確。
8.如下描述錯誤的是(A)
A.在C++中支持抽象類而在C#中不支持抽象類。
B.C++中可在頭文件中聲明類的成員而在CPP文件中定義類的成員,在C#中沒有頭文件而且在同一處聲明和定義類的成員。
C.在C#中可以使用 new 修飾符顯式隱藏從基類繼承的成員。
D.在C#中要在派生類中從新定義基類的虛函數必須在前面加Override。
9.C#的數據類型有(B)
A.值類型和調用類型 B.值類型和引用類型
C.引用類型和關係類型 D.關係類型和調用類型
10.下列描述錯誤的是(D)
A.類不能夠多重繼承而接口能夠
B.抽象類自身能夠定義成員而接口不能夠
C.抽象類和接口都不能被實例化
D.一個類能夠有多個基類和多個基接口
11.在DOM中,裝載一個XML文檔的方法(D)
A.save方法 B.load方法 C.loadXML方法 D.send方法
12.下列關於構造函數的描述正確的是(C)
A.構造函數能夠聲明返回類型。
B.構造函數不能夠用private修飾
C.構造函數必須與類名相同
D.構造函數不能帶參數
13.如下是一些C#中的枚舉型的定義,其中錯誤的用法有(A)
A.public enum var1{ Mike = 100, Nike = 102, Jike }
B.public enum var1{ Mike = 100, Nike, Jike }
C.public enum var1{ Mike=-1 , Nike, Jike }
D.public enum var1{ Mike , Nike , Jike }
14.int[][] myArray3=new int[3][]{new int[3]{5,6,2},new int[5]{6,9,7,8,3},new int[2]{3,2}}; myArray3[2][2]的值是(D)
A.9 B.2 C.6 D.越界
15.接口是一種引用類型,在接口中能夠聲明(A),但不能夠聲明公有的域或私有的成員變量
A..方法、屬性、索引器和事件 B.方法、屬性信息、屬
C.索引器和字段 D.事件和字段;
16.ASP.NET框架中,服務器控件是爲配合Web表單工做而專門設計的。服務器控件有兩種類型,它們是(A )
A.HTML控件和Web控件 B.HTML控件和XML控件
C.XML控件和Web控件 D.HTML控件和IIS控件
17.ASP.NET中,在Web窗體頁上註冊一個用戶控件,指定該控件的名稱爲」Mike」,正確的註冊指令爲( D)
A.<%@Register TagPrefix = 「Mike」 TagName = 「Space2」 Src = 「myX.ascx」%>
B.<%@Register TagPrefix = 「Space2」 TagName = 「Mike」 Src = 「myX.ascx」%>
C.<%@Register TagPrefix = 「SpaceX」 TagName = 「Space2」 Src = 「Mike」%>
D.以上皆非
18.在ADO.NET中,對於Command對象的ExecuteNonQuery()方法和ExecuteReader()方法,下面敘述錯誤的是(C)
A.insert、update、delete等操做的Sql語句主要用ExecuteNonQuery()方法來執行;
B.ExecuteNonQuery()方法返回執行Sql語句所影響的行數。
C.Select操做的Sql語句只能由ExecuteReader()方法來執行;
D.ExecuteReader()方法返回一個DataReder對象;
19.下列ASP.NET語句(B)正確地建立了一個與SQL Server 2000數據庫的鏈接。
A. SqlConnection con1 = new Connection(「Data Source = localhost; Integrated Security = SSPI; Initial Catalog = myDB」);
B. SqlConnection con1 = new SqlConnection(「Data Source = localhost; Integrated Security = SSPI; Initial Catalog = myDB」);
C. SqlConnection con1 = new SqlConnection(Data Source = localhost; Integrated Security = SSPI; Initial Catalog = myDB);
D. SqlConnection con1 = new OleDbConnection(「Data Source = localhost; Integrated Security = SSPI; Initial Catalog = myDB」);
20.Winform中,關於ToolBar控件的屬性和事件的描述不正確的是(D)
A.Buttons屬性表示ToolBar控件的全部工具欄按鈕
B.ButtonSize屬性表示ToolBar控件上的工具欄按鈕的大小,如高度和寬度
C.DropDownArrows屬性代表工具欄按鈕(該按鈕有一列值須要如下拉方式顯示)旁邊是否顯示下箭頭鍵
D.ButtonClick事件在用戶單擊工具欄任何地方時都會觸發
21.在ADO.NET中執行一個存儲過程時,若是要設置輸出參數則必須同時設置參數的方向和(D ),必要時還要設置參數尺寸。
A.大小; B.上限; C.初始值; D.類型
22.若是將窗體的FormBoderStyle設置爲None,則( A)。
A.窗體沒有邊框並不能調整大小; B.窗體沒有邊框但能調整大小;
C.窗體有邊框但不能調整大小; D.窗體是透明的;
23.若是要將窗體設置爲透明的,則( B)
A.要將FormBoderStyle屬性設置爲None; B.要將Opacity屬性設置爲小於100%的值;
C.要將locked 屬性設置爲True; D.要將 Enabled屬性設置爲True;
24.下列關於C#中索引器理解正確的是(B/C )
A.索引器的參數必須是兩個或兩個以上 B.索引器的參數類型必須是整數型
C.索引器沒有名字 D.以上皆非
25.下面描述錯誤的是( C/D)
A.窗體也是控件; B.窗體也是類; C.控件是從窗體繼承來的;D.窗體的父類是控件類
26.要對註冊表進行操做則必須包含( D)
A.System.ComponentModel命名空間;B.System.Collections命名空間;
C.System.Threading命名空間; D.Microsoft.Win32命名空間;
27.要建立多文檔應用程序,須要將窗體的(D )屬性設爲true。
A.DrawGrid; B.ShowInTaskbar; C.Enabled; D.IsMdiContainer;
28.若是設treeView1=new TreeView(),則treeView1.Nodes.Add("根節點")返回的是一個 (A)類型的值。
A.TreeNode; B.int; C.string; D.TreeView;
29.下面關於XML的描述錯誤的是(D)
A.XML提供一種描述結構化數據的方法;
B.XML 是一種簡單、與平臺無關並被普遍採用的標準;
C.XML文檔可承載各類信息;
D.XML只是爲了生成結構化文檔;
30.裝箱、拆箱操做發生在: ( C )
A.類與對象之間 B.對象與對象之間
C.引用類型與值類型之間 D.引用類型與引用類型之間
31.用戶類若想支持Foreach語句須要實現的接口是: ( A )
A.Ienumerable B.Ienumerator C.Icollection D.IcollectData
32.Net Framework經過什麼與COM組件進行交互操做?( C )
A.Side By Side B.Web Service C.Interop D.PInvoke
33..Net依靠如下哪一項技術解決COM存在的Dll Hell問題的?( A )
A.Side By Side B.Interop C.Pinvoke D.COM+
34.裝箱與拆箱操做是不是互逆的操做?( B )
A.是 B.否
35.如下哪一個是能夠變長的數組?( D )
A.Array B.string[] C.string[N] D.ArrayList
36.用戶自定義異常類須要從如下哪一個類繼承:( A )
A.Exception B.CustomException C.ApplicationException D.BaseException
在此提醒下,本文適合:
文章引用:http://www.cnblogs.com/jiajiayuan/archive/2011/09/16/2178462.html
接口中的方法用來定義對象之間通訊的契約,指定接口中的方法爲私有或保護沒有意義。它們默認爲公有方法。
interface IProgram { void Fun(); } class Program:IProgram { //顯式實現接口成員 void IProgram.Fun() { Console.WriteLine("I am Fun."); } staticvoid Main(string[] args) { IProgram p =new Program(); //聲明一個接口實例,但不是對接口進行實例化 p.Fun(); Console.Read(); } }
通常狀況,當類或者結構要實現的是單個接口,能夠使用隱式實現。
若是類或者結構繼承了多個接口且接口中具備相同名稱成員時,就要用到顯式實現,當顯式實現方式存在時,隱式實現方式就失效了。
interface IProgram { void Fun(); } interface IAProgram { void Fun(); } class Program : IProgram, IAProgram { void IProgram.Fun() //顯式實現接口IProgram { Console.WriteLine("I am IProgram Fun."); } void IAProgram.Fun() //顯式實現接口IAProgram { Console.WriteLine("I am IAProgram Fun."); } //public void Fun() //隱式實現接口 //{ // Console.WriteLine("I am Program Fun."); //} staticvoid Main(string[] args) { //IProgram p = new Program(); //p.Fun(); //IAProgram ap = new Program(); //ap.Fun(); Program pro =new Program(); ((IProgram)pro).Fun(); ((IAProgram)pro).Fun(); Console.Read(); } }
接口繼承和類繼承不一樣
interface IProgram { void Fun(); } interface IAProgram:IProgram { } class Program : IAProgram { void IProgram.Fun() { Console.WriteLine("I am IProgram Fun."); } static void Main(string[] args) { Program pro =new Program(); ((IAProgram)pro).Fun(); Console.Read(); } }
因爲接口的實現沒有方法體,抽象方法也沒有方法體,那麼當咱們在接口的實現方法裏調用抽象方法時,會如何執行呢?
interface IProgram { void Fun(); } abstract class AProgram : IProgram { public abstract void AFun(); void IProgram.Fun() { AFun(); } } class Program:AProgram { public override void AFun() { Console.WriteLine("I am AProgram."); } static void Main(string[] args) { IProgram pro =new Program(); pro.Fun(); Console.Read(); } } //結果:I am Aprogram.
經過斷點,能夠看到,當執行pro.Fun();時,首先會跳到接口的實現方法裏,而後去調用抽象函數的實現方法,當抽象函數的方法實現後,再回到接口的實現方法,直到執行完成。
當咱們在實現接口的方法裏調用虛函數呢?
interface IProgram { void Fun(); } class AProgram : IProgram { public virtual void AFun() //注意這裏是虛函數 { Console.WriteLine("I am virtual AFun."); } void IProgram.Fun() { AFun(); } } class Program:AProgram { public override void AFun() //這裏是Override重寫 { Console.WriteLine("I am override AFun."); } static void Main(string[] args) { IProgram pro =new Program(); pro.Fun(); Console.Read(); } }
這時,咱們發現,執行的順序和上一個例子是相同的。因此結果爲:I am override AFun.
由此,咱們能夠繼續聯想,當咱們把override關鍵字,換成new呢?是否是也是一樣的結果,仍是和咱們之前講的例子同樣,是隱藏呢?
咱們把上面的例子進行改進:
interface IProgram { void Fun(); } class AProgram : IProgram { public virtual void AFun() { Console.WriteLine("I am virtual AFun."); } void IProgram.Fun() { AFun(); } } class Program:AProgram { public new void AFun() { Console.WriteLine("I am new AFun."); } static void Main(string[] args) { Program pro =new Program(); ((IProgram)pro).Fun(); pro.AFun(); Console.Read(); } }
結果爲:
I am virtual AFun.
I am new AFun.
因爲前面已經講過了==,這裏不在對此進行分析,由此咱們可知使用New關鍵字是對其進行隱藏,當對接口實現的方法裏調用的是虛方法時,和類的執行過程是同樣的。
異:
同:
簡述:簡單的說,一個是同一個函數的幾種形式,一個是重寫父類函數。
重載:當類包含兩個名稱相同但簽名不一樣(方法名相同,參數列表不相同)的方法時發生方法重載。用方法重載來提供在語義上完成相同而功能不一樣的方法。
覆寫:在類的繼承中使用,經過覆寫子類方法能夠改變父類虛方法的實現。
區別:
簡述:值類型包括簡單類型、結構體類型和枚舉類型,引用類型包括自定義類、數組、接口、委託等
每種值類型均有一個隱式的默認構造函數來初始化該類型的默認值。
值類型主要由兩類組成:結構、枚舉
①. 結構分爲如下幾類:Numeric(數值)類型、整型、浮點型、decimal、bool、用戶定義的結構。
②. 引用類型的變量又稱爲對象,可存儲對實際數據的引用。聲明引用類型的關鍵字:class、interface、delegate、內置引用類型: object、string
值類型存貯在棧中,而引用類型存貯在動態的堆中,棧是先進先出的有系統管理的空間,而堆是由應用程序控制的可隨時申請和釋放該空間,在Donnet中通常狀況下有垃圾收集器處理,他們的不一樣致使在編程上的不一樣。
例:
using System; using System.Text; class EventDel { static void Main(string[] args) { StringBuilder a=new StringBuilder();//將StringBuilder的一個首地址傳給a StringBuilder b=a; //將StringBuilder的一個首地址傳給b b.Append("mxh"); Console.WriteLine(a); a=null; Console.WriteLine(b); } }
"a=null"的意思是:a的引用置爲空但此時StringBuilder的堆空間並無被釋放,所以在此以後,輸出b時,仍然能夠輸出mxh
輸出結果:
mxh
mxh
參考資料 :
C# 知識回顧 - 委託 delegate
委託是一種安全的函數指針,事件是一種消息機制
委託提供了封裝方法的方式,事件是某動做已發生的說明,事件是創建於委託之上的。
程序運行時同一個委託可以用來調用不一樣的方法,只要改變它的引用方法便可,所以委託調節器用的方法不是在編譯時決定的,而是在運行時肯定的.
在ASP.NET中,有不少種保存信息的內置對象,如:Application,Session,Cookie,ViewState和Cache等。下面分別介紹它們的用法和區別。
Application用於保存全部用戶的公共的數據信息,若是使用Application對象,一個須要考慮的問題是任何寫操做都要在Application_OnStart事件(global.asax)中完成.儘管使用Application.Lock和Applicaiton.Unlock方法來避免寫操做的同步,可是它串行化了對Application對象的請求,當網站訪問量大的時候會產生嚴重的性能瓶頸.所以最好不要用此對象保存大的數據集合. 下面咱們作個在線用戶統計的例子來講明這個問題:
Global.asax類
代碼
using System; using System.Collections; using System.ComponentModel; using System.Web; using System.Web.SessionState; using System.IO; /// Global 的摘要說明。 public class Global : System.Web.HttpApplication { /// 必需的設計器變量。 private System.ComponentModel.IContainer components = null; private FileStream fileStream; private StreamReader reader;//讀字符流 private StreamWriter writer;//寫字符流 public Global() { InitializeComponent(); } protected void Application_Start(Object sender, EventArgs e) { Application["CurrentGuests"]=0;//初始花爲0; fileStream = File.Open(Server.MapPath("counts.text"),FileMode.OpenOrCreate);//文件不存在,建立文件 reader = new StreamReader(fileStream);//要讀取的完整路徑 Application["AllGuests"] = Convert.ToInt32(reader.ReadLine()); //從當前流中讀取一行字符並將數據做爲字符串返回 reader.Close();//關閉流 } protected void Session_Start(Object sender, EventArgs e)//當用戶訪問網站時,在線用戶+1,總訪問數+1 { Application.Lock();//同步,避免同時寫入 Application["CurrentGuests"] =(int)Application["CurrentGuests"]+ 1;//總在線用戶數 Application["AllGuests"] =(int)Application["AllGuests"]+ 1;//訪問網站的總用戶數 fileStream = new FileStream(Server.MapPath("counts.text"),FileMode.OpenOrCreate,FileAccess.ReadWrite);// writer = new StreamWriter(fileStream);//實現一個寫入流,使其以一種特定的編碼向流中寫入字符 writer.WriteLine(Application["AllGuests"].ToString());//把訪問網站的總用戶數再次寫入到文件 writer.Close();//關閉寫入流 Application.UnLock();//同步結束 } protected void Session_End(Object sender, EventArgs e)//當前用戶退出網站時,在線用戶數量-1, { Application.Lock(); Application["CurrentGuests"] =(int)Application["CurrentGuests"] - 1;//總在線用戶數量-1 Application.UnLock(); } (2) WebForm1.aspx private void Page_Load(object sender, System.EventArgs e) { this.Label1.Text = "正在訪問站點的用戶數:" + Application["CurrentGuests"].ToString(); this.Label2.Text ="訪問過站點的總用戶數:" + Application["AllGuests"].ToString(); }
Session用於保存每一個用戶的專用信息.每一個客戶端用戶訪問時,服務器都爲每一個用戶分配一個惟一的會話ID(Session ID) . 她的生存期是用戶持續請求時間再加上一段時間(通常是20分鐘左右).Session中的信息保存在Web服務器內容中,保存的數據量可大可小.當Session超時或被關閉時將自動釋放保存的數據信息.因爲用戶中止使用應用程序後它仍然在內存中保持一段時間,所以使用Session對象使保存用戶數據的方法效率很低.對於小量的數據,使用Session對象保存仍是一個不錯的選擇.使用Session對象保存信息的代碼以下:
//存放信息 Session["key"]="value" //讀取數據 string UserName=Session["key"].ToString();
Cookie用於保存客戶瀏覽器請求服務器頁面的請求信息,程序員也能夠用它存放非敏感性的用戶信息,信息保存的時間能夠根據須要設置.若是沒有設置Cookie失效日期,它們僅保存到關閉瀏覽器程序爲止.若是將Cookie對象的Expires屬性設置爲Minvalue,則表示Cookie永遠不會過時.Cookie存儲的數據量很受限制,大多數瀏覽器支持最大容量爲4K,所以不要用來保存數據集及其餘大量數據.因爲並不是全部的瀏覽器都支持Cookie,而且數據信息是以明文文本的形式保存在客戶端的計算機中,所以最好不要保存敏感的,未加密的數據,不然會影響網站的安全性.使用Cookie對象保存的代碼以下:
//存放信息 Response.Cookies["key"].Value="value"; //讀取信息 string UserID=Response.Cookies["key"].Value;
ViewState 經常使用於保存單個用戶的狀態信息,有效期等於頁面的生存期。跟隱藏控件類似。viewstate是在本頁面以內各函數間進行傳值的 , 至於爲何要使用這種方法是由於在一個事件發生以後 , 頁面可能會刷新 , 若是定義全局變量會被清零 , 因此要使用viewstate. ViewState容器能夠保持大量的數據,可是必須謹慎使用,由於過多使用會影響應用程序的性能。全部Web服務器控件都使用ViewState在頁面回發期音保存本身的狀態信息。若是某個控件不須要在回發期間保存狀態信息,最好關閉該對象的ViewState,避免沒必要要的資源浪費。經過給@Page指令添加「EnableViewState=false」屬性能夠禁止整個頁面的ViewState。使用ViewState對象保存信息的代碼以下。
//存放信息 ViewState["key"]="value"; //讀取信息 string NameID=ViewState["nameID"].ToString();
Cache對象用於在HTTP請求間保存頁面或數據。該對象的使用能夠極大地提升整個應用程序的效率。經常使用於將頻繁訪問的大量服務器資源存儲在內存中,當用戶發出相同的請求後服務器再也不次處理而是將Cache中保存的信息返回給用戶,節省了服務器處理請求的時間。其生存期依賴於該應用程序的生存期。當從新啓動應用程序時,將從新建立其Cache對象的實例。使用Cache對象保存信息的代碼以下。
//存放信息
Cache["nameID"]="0001"; //存放信息 Cache.Insert("nameID","0001"1); //讀取信息 string NameID=Cache["nameID"].ToString();
Hidden控件是屬於HTML類型的服務器控件,使用此控件能夠實現隱藏域的功能。其實此控件和其它服務器控件的使用沒有太大區別,只是它不會在用戶端的瀏覽器中顯示,始終處於隱藏狀態。可是每次頁面提交的時候,此控件和其它服務器控件一同提交到服務器端,所以在服務器端能夠使用Value屬性獲取或保存一些數據信息。使用Hidden控件保存信息的代碼以下。
//存放信息 Hidden.Value="0001"; //獲取信息 string NameID=Hidden.Value;
查詢字符串的方式是將要傳遞的值鏈接在URL後面,而後經過Response.Redirect方法實現客戶端的重定向。這種方式能夠實如今兩個頁面之間傳遞信息。因爲URL的長度有必定的限制,所以不能傳遞太大的信息,加外安全性也不是很好。
傳遞信息以下。問號後面格式 key1=value1&key2=value2
Response.Redirect("List.aspx?nameID=0001&gradeID=002"); //執行上面的語句後在IE地址欄顯示的URL的代碼以下。 http://localhost/List.aspx?nameID=0001&grade=002 //當跳轉到List.aspx後,能夠經過如下代碼得到所傳遞的信息。 string NameID.GradeID;
簡述: Ajax的原理就是:經過javascript的方式,將前臺數據經過xmlhttp對象傳遞到後臺,後臺在接收到請求後,將須要的結果,再傳回到前臺,這樣就能夠實現不須要頁面的回發,頁是數據實現來回傳遞,從頁實現無刷新。
Ajax的原理簡單來講,實際上就是經過XmlHttpRequest對象來向服務器發異步請求,從服務器得到數據,而後用javascript來操做DOM而更新頁面。
這其中最關鍵的一步就是從服務器得到請求數據。要清楚這個過程和原理,咱們必須對 XMLHttpRequest有所瞭解。
總結:咱們能夠看出,XMLHttpRequest對象徹底用來向服務器發出一個請求的,它的做用也侷限於此,但它的做用是整個ajax實現的關鍵,咱們能夠把服務器端當作一個數據接口,它返回的是一個純文本流,固然,這個文本流能夠是XML格式,能夠是Html,能夠是Javascript代碼,也能夠只是一個字符串。這時候,XMLHttpRequest向服務器端請求這個頁面,服務器端將文本的結果寫入頁面,這和普通的web開發流程是同樣的,不一樣的是,客戶端在異步獲取這個結果後,不是直接顯示在頁面,而是先由javascript來處理,而後再顯示在頁面。
屬性 | 索引器 |
---|---|
經過名稱標識 | 經過簽名標識 |
經過簡單名稱或成員訪問來訪問 | 經過元素訪問來訪問 |
能夠爲靜態成員或實例成員 | 必須爲實例成員 |
屬性的get訪問器沒有參數 | 索引器的get訪問器具備與索引器相同的形參表 |
屬性的set訪問器包含隱式value參數器 | 除了value參數外,索引的 set 訪問器還具備與索引器相同的形參表 |
若是要操做一個不斷增加的字符串,儘可能不用String類,改用StringBuilder類
String類原理:String類是一種傳統的修改字符串的方式,它確實能夠完成把一個字符串添加到另外一個字符串上的工做沒錯,可是在.NET框架下,這個操做實在是划不來。由於系統先是把兩個字符串寫入內存,接着刪除原來的String對象,而後建立一個String對象,並讀取內存中的數據賦給該對象。這一來二去的,耗了很多時間。
StringBulider原理:而使用 System.Text命名空間下面的StringBuilder類就不是這樣了,它提供的Append方法,可以在已有對象的原地進行字符串的修改,簡單並且直接。
提醒:通常狀況下覺察不到這兩者效率的差別,但若是你要對某個字符串進行大量的添加操做,那麼StringBuilder類所耗費的時間和 String類簡直不是一個數量級的
枚舉類型是一種的值類型,它用於聲明一組命名的常數。
訪問修辭符 enum 枚舉名:基礎類型 { 枚舉成員 }
基礎類型必須可以表示該枚舉中定義的全部枚舉數值。枚舉聲明能夠顯式地聲明 byte、sbyte、short、ushort、int、uint、long 或 ulong 類型做爲對應的基礎類型。沒有顯式地聲明基礎類型的枚舉聲明意味着所對應的基礎類型是 int。
枚舉成員是該枚舉類型的命名常數。任意兩個枚舉成員不能具備相同的名稱。每一個枚舉成員均具備相關聯的常數值。此值的類型就是枚舉的基礎類型。每一個枚舉成員的常數值必須在該枚舉的基礎類型的範圍以內。
public enum TimeofDay:uint { Morning=-3, Afternoon=-2, Evening=-1 }
產生編譯時錯誤,緣由是常數值 -一、-2 和 –3 不在基礎整型 uint 的範圍內。
在枚舉類型中聲明的第一個枚舉成員它的默值爲零。
之後的枚舉成員值是將前一個枚舉成員(按照文本順序)的值加 1 獲得的。這樣增長後的值必須在該基礎類型可表示的值的範圍內;不然,會出現編譯時錯誤。
示例:
public enum TimeofDay:uint { Morning, Afternoon, Evening }
Morning的值爲0,Afternoon的值爲1,Evening的值爲2。
容許多個枚舉成員有相同的值。沒有顯示賦值的枚舉成員的值,老是前一個枚舉成員的值+1
public enum Number { a=1, b, c=1, d }
b的值爲2,d的值爲2.
注意:以上枚舉值都不能超過它的基礎類型範圍。不然會報錯.
基礎類型不能隱式轉換爲枚舉類型; 枚舉類型也不能隱式轉換爲基礎類型
public enum Number { a, b, c, d } class Test { public static void Main() { int i=Number.a;//錯誤,要強制類型轉換(int)Number.a Number n; n=2 //錯誤,要強制類型轉換(Number)2 } }
using System;
public enum TimeofDay { Morning, Afternoon, Evening } class Test { static void WriteGreeting(TimeofDay timeofDay) { switch(timeofDay) { case TimeofDay.Morning: Console.WriteLine("good morning"); break; case TimeofDay.Afternoon: Console.WriteLine("good afternoon"); break; case TimeofDay.Evening: Console.WriteLine("good evening"); break; } } static void Main() { WriteGreeting(TimeofDay.Morning); WriteGreeting(TimeofDay.Evening); WriteGreeting(TimeofDay.Afternoon); } }
例:int myInt=new int();
myInt初始化爲0,它是int類型的默認值。該語句的效果等同於:intmyInt=0;
使用new修飾符顯式隱藏從基類繼承的成員。若要隱藏繼承的成員,請使用相同名稱在派生類中聲明該成員,並用new修飾符修飾它。
請看下面的類:
public class MyClass { public int x; public void Invoke(){} }
在派生類中用Invoke名稱聲明成員會隱藏基類中的Invoke方法,即:
public class MyDerivedC:MyClass { new public void Invoke(){} }
可是,由於字段x不是經過相似名隱藏的,因此不會影響該字段。
經過繼承隱藏名稱採用下列形式之一:
1.引入類或結構中的常數、指定、屬性或類型隱藏具備相同名稱的全部基類成員。
2.引入類或結構中的方法隱藏基類中具備相同名稱的屬性、字段和類型。同時也隱藏具備相同簽名的全部基類方法。
3.引入類或結構中的索引器將隱藏具備相同名稱的全部基類索引器。
4.在同一成員上同時使用new和override是錯誤的。
注意:在不隱藏繼承成員的聲明中使用new修飾符將生成警告。
示例:在該例中,嵌套類MyClass隱藏了基類中具備相同名稱的類。該例不只說明了如何使用徹底限定名訪問隱藏類成員,同時也說明了如何使用new修飾符消除警告消息。
using System; public class MyBaseC { public class MyClass { public int x=200; public int y; } } public class MyDerivedC:MyBaseC { new public class MyClass //nestedtypehidingthebasetypemembers { public int x=100; public int y; public int z; } public static void Main() { //Creating object from the overlapping class: MyClass S1=new MyClass(); //Creating object from the hidden class: MyBaseC.MyClass S2=new MyBaseC.MyClass(); Console.WriteLine(S1.x); Console.WriteLine(S2.x); }
輸出:
100
200
基礎題:
1.簡述List與string[]的區別。
2.簡述裝箱和拆箱操做中的性能損耗是如何產生的。
3.簡述對ASP.NET中的事件機制的理解。
4.在一個ASP.NET的三層結構系統中,以登陸操做爲例,簡述在各層中如何組織代碼。
5.簡述相比DATASET,實體類在WEB項目中的優勢與缺點。
6.簡述GC是如何工做的。
7.簡述3個熟悉的設計模式。
8.簡述UDP協議特色,以及如何提升UDP傳輸可靠性。
9.簡述.NET2.0,.NET3.0,.NET3.5各版本中推出的新特性。
算法題:(如下三題不用做答,想好思路面試談便可)
1. 一個整數數列,元素取值多是0~65535中的任意一個數,相同數值不會重複出現。0是例外,能夠反覆出現。
請設計一個算法,當你從該數列中隨意選取5個數值,判斷這5個數值是否連續相鄰。
注意:
- 5個數值容許是亂序的。好比: 8 7 5 0 6
- 0能夠通配任意數值。好比:8 7 5 0 6 中的0能夠通配成9或者4
- 0能夠屢次出現。
- 複雜度若是是O(n2)則不得分。
2. 設計一個在一百萬個數字中求十個最大的數算法
3. 有以下輸入:若干個由大寫英文字母構成的單詞,以’,’號隔開。如「ABCCD,CDA,BCDD,DCA,ADC,BCD,CDCAB」。 寫一段程序,從輸入中尋找由相同字符構成(重複字符出現次數也是同樣)的單詞組輸出。
如以上輸入,則輸出:
第1組:ABCCD,CDCAB
第2組:CDA,DCA,ADC
項目&管理:(如下兩題不用做答,想好思路面試談便可)
1.假設你作爲一個開發團隊的領導者,通過長時間的磨合,有了一隻10人左右的不錯的團隊。其中每一個成員都在其職位上有不可或缺的做用。現因爲一些緣由,須要你辭退其中一人。你會如何處理這件事情?
2.有一套公司本身開發供本公司使用的CRM系統,其中的權限控制過於簡單。現須要你從新設計其權限系統,你會如何開展這個工做?
非技術(面談):
1.在上份工做中,本身體現最大的優勢和缺點是什麼。
一、學校幾本(是否統招)、英語等級、大學成績排名Top%幾、當前月薪(入職前是否能提供薪資證實材料)、指望月薪
二本,統招
英語四級
排名top10
二、作過的項目技術棧是什麼?(例如 .NET、Sql Server、Dapper、EF、Redis……)
.NET、C#、EF、MVC、SQL Server、Oracle、WebService、API、SDK、Redis、JPush、Lucene.Net
Html、css、JavaScript、Ajax、Jquery、AngularJS、Bootstrap
iOS、Objective-C、Winforms、WPF
三、作過的項目中最大的表數據量大概多少?業務高峯期每分鐘併發請求數量大概多少?遇到的最大技術難點與解決方案,研究過的.NET開源項目,舉例說明3-5個
最大的表有200萬條數據,數據查詢出現慢的狀況,優化方案:在條件語句的列上加索引;優化SQL避免like,in、not in等;使用分頁臨時表避免全表掃描;
高峯期每分鐘併發請求2千左右;
技術難點:團隊創立初期,APP剛剛上線,功能在逐步完善。當時爲了推廣拉新,想開發一個功能,實現APP的在微信裏的傳播分享。網站享用的是微信開放平臺的網站應用號受權,還有另外一塊是微信公衆平臺公衆號分享,分別是不一樣的兩套APPID,受權以後會獲取到兩個不一樣的OpenID,但願用戶信息打通,用戶只要受權過一次以後就能在另外一個模塊實現免登錄。因爲當時一心想經過業務存儲兩個不一樣的OpenID的關聯關係,作到統一,結果走了很多彎路,仍然達不到想要的效果。
解決方案:UnionID,將兩個帳號在後臺關聯以後就能獲取到統一的UnionID,業務記錄此ID便可。
開源項目
Json.net Json序列化和反序列化,基本支持全部的json特性,性能也很好,MVC4的默認引用程序集中已包含.
Log4net 傳統的日誌框架,移植於log4jV1.2,高效,穩定
Html Agility Pack Html解析庫
DotNetZip 建立,壓縮,解壓Zip文件
DotNetCodes 一些經常使用的功能性代碼Utilities,能夠減小許多開發時間,並且類與類之間沒有什麼依賴,每一個類均可以單獨拿出來使用,excel導出、二維碼生成、網絡請求等;
四、.NET系統如何實現水平擴展、如何解決高併發問題,解決方案思路
應用服務和數據服務分離:把網站分爲應用服務器、文件服務器和數據庫服務器,不一樣服務器承擔不一樣角色,從而提成網站處理能力和文件存儲能力;
數據庫讀寫分離:經過配置主從服務器實現數據庫讀寫分離,改善數據庫負載壓力;
業務拆分:根據產品線拆分,例如訂單、商鋪、買家等,分歸不一樣業務團隊管理,不一樣業務分不一樣物理服務器處理,能夠經過消息隊列進行數據分發;
使用NoSQL和搜索引擎:應用服務器經過統一模塊訪問各類數據,減輕應用程序管理數據源的麻煩;
應用服務器集羣:經過負載均衡使一批設備共同對外提供服務,由統一調度服務器經過調度策略進行分發,當有服務器宕機時,調度服務器會將請求轉移到其餘服務器上,保證不影響用戶使用;
分佈式文件系統和分佈式數據庫系統:將業務拆分紅不一樣模塊,不一樣業務的數據庫放在不一樣的物理服務器上;
緩存:包括本地緩存、分佈式緩存、反向代理和CDN加速;
使用緩存改善網站性能:把業務常常訪問的數據緩存到內存中,能夠大大減小數據庫的讀取訪問壓力,從而改善寫入性能,方式有本地緩存和分佈式服務器緩存,部署大內存服務器;
反向代理和CDN加速:基本原理都是緩存,用戶請求服務時,經過距離判斷最近機房代理服務器中緩存這用戶請求的資源,直接返回給用戶,減輕後端服務器負載壓力;
異步操做:典型的生產者消費者模式,二者不存在直接調用,只要保持數據結構不便,彼此功能實現能夠隨意變化而不互相影響;
固態硬盤代替機械硬盤:使用SSD,物理設備上加快文件訪問速度;
五、國內外基於.NET技術的知名網站有哪些,.NET與Java相比有哪些優勢、缺點,如何看待微軟全新一代.NET Core開源、免費、跨平臺的將來發展前景
.NET知名網站
國外:microsoft、stackoverflow、codeproject、myspace、Godaddy、msn、
國內:cnblogs、csdn、智聯、攜程、必應、起點、凡客
.NET和java對比
開源和跨平臺,Java一直開源跨平臺,有很是豐富的社區資源;微軟14年也宣佈開源跨平臺,有.NET Core、xamarin,微軟正在努力,但作到Java如今的程度我的以爲還有很長一段路要走。
編程工具,C#有好用的IDE Visual Studio;Java之前有eclipse,如今有Intellij。
語言特性,二者語法相似,C#feature更多(語言特性,泛型、委託、重載運算符、LINQ、lambda、delegate、擴展等),語法糖也更多,程序員基本能夠專一邏輯而不用關注如何實現;而Java這塊比較貧乏。
更新速度,C#由微軟維護,版本更新快,支持更多新特性;java版本更新慢。
應用領域,C#目前主要應用在windows的PC應用,unitity3D,web。Java應用於web,Android,Hadoop等。
生態環境,我的認爲最重要的一點。開源庫和框架Java數不勝數,各類層面的解決方案眼花繚亂,C# web比較好用的框架只有asp .net、MVC。
.NET Core將來發展前景
我的看好 .Net Core 的將來發展前景。
.NET Core是一個開源通用的開發框架,支持跨平臺,即支持在Window,macOS,Linux等系統上的開發和部署,而且能夠在硬件設備,雲服務,和嵌入式/物聯網方案中進行使用。首先從Core的定位上來講,他摒棄了原有AspNet的那些臃腫組件,面向高性能服務器開發。雖然如今版本功能還比較弱,各種三方庫支持也沒有更新,可是這只是時間問題,以微軟的更新速度和推廣力度,幾年後必將完善。
基於微軟的 Azure 雲的平臺優點,後期勢必會加入 .Net Core 的支持,加上微軟的跨平臺戰略,對 Docker 的親和性,對於開發人員也很是友好,因此總體環境來講是健康發展的,將來技術決策時 .Net Core 也有很大的優點。
所以將來其發展主要看的就是微軟推廣力度及社區開發者的支持度。
喜歡C#就會一直堅持下去,由於興趣是最好的老師。
六、www.dot.net官網任選一篇英文技術文章,不用單詞軟件大概能看懂百分之多少?
看了一篇教學文章
https://www.microsoft.com/net/tutorials/csharp/getting-started/hello-world
所有英文文檔大概能看懂百分之80
七、咱們會根據以上信息進行崗位匹配度的評估(教育背景、技術能力、抽象總結能力……),節省應聘者的面試成本,提高招聘效率
八、爲了方便及時溝通,請加技術經理微信 2531685528 註明:應聘.NET 姓名
-------------------------------------------------------
【.NET技術面試參考資料、圖書】
一、《大型網站技術架構》
二、《Sql Server性能優化與管理的藝術》
三、《跟阿銘學Linux》
四、《深刻淺出MySQL數據庫開發優化與管理維護》
五、《微服務設計》
參考資料共享地址
http://pan.baidu.com/s/1nvUc1nz
http://www.apelearn.com/study_v2/