1. 程式人生 > >.NET面試資料整理

.NET面試資料整理

臨時 sources creat 腳本 符號 和數 一個數 字符 orm

1.WCF和Web Api的區別
答:1WCF是.NET平臺開發的一站式框架,Web Api的設計和構建只考慮一件事情,那就是Http,而WCF的設計主要考慮是SOAP和WS-*;Web Api非常輕量,在功能和靈活性上都不能和WCF相比。如果你的服務是基於TCP的,或者支持更多的傳輸機制,那麽WCF是更好地選擇。然而並不是所有的平臺都支持SOAP和WS-*,當客戶端不支持這些協議的時候,Web Api將是更好地選擇;WCF是基於SOAP協議的,數據格式是XML,而Web Api是基於RESTful標準的,數據格式多樣化,可以是XML,JSON等。WCF配置繁瑣,而Web Api它是簡單的,代碼可讀性強,上手快,接口更標準,更清晰,沒有混亂的方法名稱,有的只是集中比較標準的請求,如get,post,put,delete等,並且Web api是一個URL連接,可以在不同的平臺運轉,同時支持MVC的特征,像路由、控制器、action、filter、模型綁定、控制反轉(IOC)或依賴註入(DI),單元測試。
SOAP(SOAP:Simple Object Access Protocol) 簡單對象訪問協議,一般是基於XML的。
google,facebook,baidu,新浪還是騰訊。他們對外開放的接口都是基於Http的Web API

2.MVC和Web Api的區別
答:MVC主要用於建站,WEB Api主要用於構建http服務。兩種架構都是在ASP.NET的基礎上進行改造的,主要是對httpModule和httpHandler做了擴展,MVC引申出了強大的路由機制,實現了諸如MvcHandler和ControllerFactory這種消息處理和後臺控制器方法選擇機制,而Web api在MVC基礎上另外寫了一套獨立於ASP.NET的消息處理管道。
MVC只能運行在IIS上,Web api可以運行在WebHost,ConsoleHost甚至windows Services上。

3.MVC的路由配置
答:基本的路由規則是從特殊到一般的排列,小範圍寫在前,大範圍寫在後,路由規則可以註冊多條,路由的名稱(name)不能重復,路由規則可以設置約束,即正則表達式。
URl構造:
routes.MapRoute(name:"Default",url:"{controller}/{action}/{id}",defaults:new {controller="home",action="Index",id=UrlParamter.Optional})
在RouterConfig.cs中配置這些的

4.MVC 的生命周期(運行機制)
答:http是一種無狀態的請求,他的生命周期就是從客戶端瀏覽器發出請求開始,到得到響應結束。
Request → UrlRoutingModule(IHttpModule init) → Route Table → RouteHandler(MvcRouteHandler) → MvcHandler(IHttpHandler)→ ProcessRequest → Controller(IController Factory)→ Controller.Execute
→ ActionInvoker → ActionMethod → ActionResult → ActionResult.ExecuteResult → reponse

5.Web Api2 http請求生命周期
答:IIS Hosting → Http Request → HttpServer → HttpRequestMessage → HttpRouteDispatcher → HttpControllerDispatcher → Authorization Filters → Action Filters → View

6.Web Api2應用架構詳解
答:常見的應用包括以下四類,PC客戶端程序,APP程序,網站程序,H5程序。
如何確認一個app能夠訪問webapi?
使用AppID驗證app訪問webapi的合法性,AppID為服務端給出的一個ID標誌。
我們可以為web/app/winform分別分配一個ID,從而可以確定訪問的合法性,和訪問的渠道。

如何保證app參數的正確性,沒有被篡改?
客戶端使用AppID對應的AppSecert,對參數進行簽名(MD5/SHA等)
服務端使用同樣的方式簽名,和客戶端簽名校驗。

如何防止webapi url被截獲,重新訪問?
客戶端訪問webapi時帶上時間戳參數,服務端對時間戳進行校驗,如10分鐘內的訪問才是有效的。

涉及具體用戶的操作時,如何驗證用戶?
可以使用username,psw參數的方式訪問webapi。但是這種方式很不安全。
使用授權token是很好的解決辦法。在用戶登錄成功時,服務端生成一個授權碼,對應用戶信息。
訪問時帶上token參數,服務端查詢token有效性,和token對應的用戶信息。

7.MVC、MVP、MVVM架構模式的區別和聯系
MVC是比較直觀的架構模式,用戶操作->View(負責接收用戶的輸入操作)->Controller(業務邏輯處理)->Model(數據持久化)->View(將結果反饋給View)。MVP是把MVC中的Controller換成了Presenter(呈現),目的就是為了完全切斷View跟Model之間的聯系,由Presenter充當橋梁,做到View-Model之間通信的完全隔離。如果說MVP是對MVC的進一步改進,那麽MVVM則是思想的完全變革。它是將“數據模型數據雙向綁定”的思想作為核心,因此在View和Model之間沒有聯系,通過ViewModel進行交互,而且Model和ViewModel之間的交互是雙向的,因此視圖的數據的變化會同時修改數據源,而數據源數據的變化也會立即反應到View上。這方面典型的應用有.NET的WPF,js框架Knockout、AngularJS等。

8.反射的簡單介紹
C#中反射的概念:在運行的時候發現對象的相關信息。根據這些信息可以動態的執行對象的方法以及獲取對象的屬性所儲存的值。
那麽EF實體框架,就是反射的應用之一。

9.EF介紹
EntityFramework是ADO.NET中的一套支持開發面向數據的軟件應用程序的技術,是微軟的一個ORM框架。
有Dapper.NET、NHeberneit、EF、IBatis.Net和SubSonic等
優點:
1.簡潔的Linq to Sql語句大大提高了開發人員的效率,不要再寫復雜的sql語句;
2.不再需要再管應用程序如何去連接數據庫;
3.傳統的表驅動方式創建EDM,然後通過EDM生成模型和數據層代
DataBase First、Model First、CodeFirst

10.MVC2,MVC3,MVC4和MVC5的不同
答:MVC3需要.net framework4.0,可以指定視圖引擎,WebForm,Razor等。
MVC4 多了Web api,asp.net4.5,MVC5 多了Web Api2.0 asp.net4.5.1

11.javascript中閉包
如果一個函數訪問了它的外部變量,那麽它就是一個閉包。通過訪問外部變量,一個閉包可以維持(keep alive)這些變量
var add = (function () {
var counter = 0;
return function () {return counter += 1;}
})();
或者
var add = function () {
var counter = 0;
return function () {return counter += 1;}
};
var add1=add()

12.SQL的執行順序
答:from → on → join → where → group by → with → having → select → distinct → order by → top

13.SQL性能優化
答:1)盡量避免模糊查詢(like),解決辦法,把檢索條件修改為下拉框,根據下拉框直接查詢數據;根據條件查詢出一個臨時表數據,再和臨時表數據進行復雜關聯。2)索引問題,避免對索引字段進行運算,像<>,!=,not,is null,is not null,避免索引字段使用函數,索引字段不要用空值表示。3)update,select復雜語句,多級嵌套的時候,盡量修改為拆成幾步,生成一些臨時數據,再進行操作。4)update同一張表的時候多次執行,修改為一次執行(update ATable set name = (select name from BTable where id =ATable .id))。5)用union all代替union,union會將各查詢的記錄作對比。6)在where語句中,盡量避免對索引字段濟寧計算。7)where中應該避免使用having,in,not in,or。可以使用exist代替(select * from ATable where exists(select * from BTable where BTable.id=ATable.id))。8)索引的時候,數字類型就是數字類型,時間類型就是時間類型,不要用字符串表示數字類型或者時間類型,否則索引回無效。9)不用動不動就select * ,很傻的好不好。10)排序的時候,避免使用耗費資源的操作,如:distinct、union、minus、itersect,order by的SQL語句或啟動SQL引擎,耗費資源的排序(SORT)功能,distinct需要執行一次排序,其他的都需要執行兩次排序。11)慎重用臨時表可以極大地提高效率。(drop table #temp;create table #temp(id int,name nvarchar(50)))

14.事務的特性
1)原子性(要麽全成功,要麽全失敗);2)一致性(加加減減保持一致);3)隔離性(多個事務之間的並發操作,事務之間相互隔離,互不影響);4)持久性(事務一旦提交將是永久性的)

15.事務的隔離級別
1)read uncommitted(未提交讀,臟讀),相當於nolock;2)read committed(已提交讀,默認級別);3)repeatable read(可以重復讀),相當於(hold lock);4)seriable(可序列化);5)snapshot(快照);6)read comminted snapshot(已提交讀隔離)
read uncommitted → read committed → repeatable read → seriable 隔離級別越來越高,讀操作的請求鎖定就越嚴格,鎖的市價越長久,所以隔離級別越高,一致性就越高,同時性能也影響很大。

16.sql server中存儲過程和函數
1)CREATE FUNCTION Sales.ufn_SalesByStore (@storeid int)
RETURNS TABLE
AS
RETURN
(
SELECT P.ProductID, P.Name, SUM(SD.LineTotal) AS ‘Total‘
FROM Production.Product AS P
JOIN Sales.SalesOrderDetail AS SD ON SD.ProductID = P.ProductID
JOIN Sales.SalesOrderHeader AS SH ON SH.SalesOrderID = SD.SalesOrderID
JOIN Sales.Customer AS C ON SH.CustomerID = C.CustomerID
WHERE C.StoreID = @storeid
GROUP BY P.ProductID, P.Name
);
GO

SELECT * FROM Sales.ufn_SalesByStore (602);
2)存儲過程
CREATE PROCEDURE HumanResources.uspGetEmployees
@LastName nvarchar(50),
@FirstName nvarchar(50)
AS
SET NOCOUNT ON;
SELECT FirstName, LastName, JobTitle, Department
FROM HumanResources.vEmployeeDepartment
WHERE FirstName = @FirstName AND LastName = @LastName;
GO

EXEC HumanResources.uspGetEmployees @LastName = N‘Ackerman‘, @FirstName = N‘Pilar‘;

17.Sqlserver中常用函數
1)concat連接函數;2)length返回字符串的長度;3)lower轉換成小寫;4)upper;5)ltrim刪除左邊的自負互傳
6)substr截取字符串;7)replace替換字符串;8)
聚合函數、配置函數、轉換函數、加密函數、遊標函數、日期和時間函數、數學函數、元數據函數、排名函數、行集函數、安全函數、字符串函數、系統函數、文本和圖像函數等。9)sum、coun、max、min、avg

18.常用的SQL
1)常用的單詞,create(創建)、drop(刪除),適用於(database、table、view、index)
2)修改列,alter table tablename add column col type
3)基本sql語句
3.1)選擇:select * from talename where 範圍
3.2)插入:insert into tablename(col1,col2) values("col1","col2")
3.3) 刪除:delete from tablename where 範圍
3.4)更新:update tablename set col1="col1",col2="col2"

19.Web常見的安全漏洞
1)安全攻擊
1.1)SQL,HTML,JS,OS命令註入
1.2)XSS(CSS)跨站腳本攻擊,利用站內信任用戶,在WEB頁面插入惡意script代碼
1.3)CSRF跨站請求偽造
1.4)目錄便利漏洞
1.5)參數篡改
1.6)會話劫持
2)防止攻擊的措施總結
2.1)對用戶輸入的數據進行全面安全檢查或過濾,尤其註意檢查是否包含SQL或XSS特殊符號。(服務器和客戶端都需要驗證)
2.2)不要使用管理員權限的數據庫連接,不要動態拼接sql
2.3)機密信息加密,不能使用明文
2.4)每個頁面加載時,對用戶進行合法性驗證
2.5)登陸後session中的敏感信息進行加密,避免在永久cookie中存儲敏感信息,重要的cookie信息標記為http only
2.6)發送敏感信息時使用SSL,POST方式。盡量使用新型web http安全協議
2.7)不要直接拋出異常的詳細信息給用戶,異常返回友好的頁面,防止用戶看到敏感信息
2.8)在服務器與網絡的接口處設置防火墻,用於阻斷外界用戶對服務器的掃描和探測
2.9)限制網站後臺訪問權限,如:禁止公網IP訪問後臺,禁止服務員使用弱口令
2.10)限制敏感頁面或目錄的訪問權限
2.11)項目發布前使用漏洞掃描軟件,如IBM appScan,UnisWebScanner

20.Cookie和session
由於HTTP是無狀態的協議,所以服務器端用記住用戶登錄的狀態,就需要某種機制來識別具體的用戶,這個機制就是session
服務器如何識別特定的用戶,這個時候cookie就產生了,每次http請求的時候,客戶端都會發送相應的cookie信息到服務器,
第一次創建session的時候,服務器會在http協議中告訴客戶,需要在cookie裏面記錄一個sessionid,以後每次請求把這個
會話id發送服務器,服務器就知道是誰了。
session是服務器端保存的一個數據結果,用來跟蹤用戶狀態,這個數據可以保存在集群、數據庫、文件中
cookie是客戶端保存用戶信息的一種機制,用來記錄用戶的一些信息,也是實現session的一種方式

21.http常用協議狀態
200:請求被正常處理 204:請求被受理但沒有資源可以返回
206:請求一部分 301:永久性重定向
400:請求報文語法有誤,服務器無法識別 401:請求需要認證
403:請求的對應資源禁止被訪問 404:服務器無法找到對應資源
500:服務內內部錯誤 503:服務器正忙

22.web跨域解決辦法
在JavaScript中,有一種很重要的安全性限制,被稱為“Same-Origin Policy”(同源策略), 即JavaScript只能訪問與包含他的文檔在統一域名下的內容。
跨域處理方法:
1)JSONP
原理:js腳本,css樣式文件,圖片,這三種是與頁面本身不同源的,JSONP就是利用script中src屬性沒有限制達到跨域
請求的:動態添加一個<script>標簽來實現。當然這些都是get請求
2)CORS策略
需要服務器對CORS的支持,設置Access-Control-Allow-Origin來進行。
3)document.domain+iframe的設置
主域名相同的條件下才鞥進行
4)HTML5的postMessage
在IE中使用
5)使用window.name來進行跨域

.NET面試資料整理