0 .NET高薪面試高頻題庫
值類型(struct)和引用類(class)型的區別
- 值類型分配在棧上(管理由操作系統負責),引用類型分配在托管堆上(管理由垃圾回收器GC負責)。管理指內存空間的分配和釋放
(1) 變量本身是存儲在堆棧上的(無論是值類型變量還是引用類型變量)
(2) 但是對於實際數據:引用類型存在托管堆上,值類型存在堆棧
- 值類型繼承自valueType,valueType繼承自System.Object;引用類型直接繼承自System.Object
- 值類型在作用域內結束時,會被操作系統自釋放,減少托管堆壓力;引用類型則靠GC。因此值類型在性能上由優勢
- 值類型是密封的,不能作為基類。引用類型一般具有繼承性
- 值類型不能為null,默認初始化為該類型的默認值;引用類型默認初始化為null
- 值類型作為參數傳遞時,不影響本身。引用類型作為參數傳遞時,會改變最終該變量的值
- 裝箱:值類型轉為引用類型
- 拆箱:引用類型轉為值類型
簡述 C#中重寫、重載和隱藏的概念
- 重寫是指用 override 關鍵字重新實現基類中的虛方法,在運行的過程中,無論通過哪個類型的引用,真正對象類型的方法將被調用。
- 隱藏是指用 new關鍵字重新實現基類中的方法,在運行的過程中通過引用的類型判斷應該調用哪個類型的方法。
- 重載(overlode)是指多個方法共享同一個名字並且擁有相同的返回值,但是卻可以擁有不同的參數列表。
Serializable 特性有何作用
通過為類型添加Serialization特性,可以使對象申明為可被序列化,簡單說,就是數據通信時,並不是所有的數據類型都支持的,這時就需要雙方都支持的一種格式,把你的對象轉換成能通訊的格式就是序列化,反之就是反序列化。
請解釋委托的基本原理
委托是一類繼承自System.Delegate 的類型,每個委托對象至少包含了一個指向某個方法的指針,該方法可以是實例方法,也可以是靜態方法。委托實現了回調方法的機制,能夠幫助程序員設計更加簡潔優美的面向對象程序。
什么是鏈式委托
鏈式委托是指一個由委托串成的鏈表,當鏈表上的一個委托被回調時,所有鏈表上該委托的后續委托將會被順序執行。
請解釋事件的基本使用方法
事件是一種使對象或類能夠提供通知的成員。客戶端可以通過提供事件處理程序為相應的事件添加可執行代碼。事件是一種特殊的委托。
請解釋反射的基本原理和其實現的基石
反射是.NET中的重要機制,通過反射,可以在運行時獲得程序或程序集中每一個類型(包括類、結構、委托、接口和枚舉等)的成員和成員的信息。有了反射,即可對每一個類型了如指掌。另外還可以直接創建對象,即使這個對象的類型在編譯時還不知道。
如何利用反射來實現工廠模式
使用反射可以實現靈活性較高的工廠模式,其關鍵在於動態地查找產品所包含的所有零件,而不需要通過代碼來逐一分析使用者的需求。反射工廠模式具有靈活性高,運行效率相對較低的特點。
什么是線程
線程(Thread)是進程中的基本執行單元,是操作系統分配CPU時間的基本單位,一個進程可以包含若干個線程,在進程入口執行的第一個線程被視為這個進程的主線程。在.NET應用程序中,都是以Main()方法作為入口的,當調用此方法時系統就會自動創建一個主線程。
線程和進程的關系
windows系統是一個多線程的操作系統。一個程序至少有一個進程,一個進程至少有一個線程。進程是線程的容器,一個C#客戶端程序開始於一個單獨的線程,CLR(公共語言運行庫)為該進程創建了一個線程,該線程稱為主線程。例如當我們創建一個C#控制台程序,程序的入口是Main()函數,Main()函數是始於一個主線程的。它的功能主要 是產生新的線程和執行程序。C#是一門支持多線程的編程語言,通過Thread類創建子線程。
前台線程與后台線程
C#中的線程分為前台線程和后台線程,線程創建時不做設置默認是前台線程。即線程屬性IsBackground=false。
Thread.IsBackground = false;
兩者的區別就是:應用程序必須運行完所有的前台線程才可以退出;而對於后台線程,應用程序則可以不考慮其是否已經運行完畢而直接退出,所有的后台線程在應用程序退出時都會自動結束。一般后台線程用於處理時間較短的任務,如在一個Web服務器中可以利用后台線程來處理客戶端發過來的請求信息。而前台線程一般用於處理需要長時間等待的任務,如在Web服務器中的監聽客戶端請求的程序
如何使用.NET的線程池
線程池是一種多線程處理形式,處理過程中將任務添加到隊列,然后在創建線程后自動啟動這些任務。線程池線程都是后台線程。每個線程都使用默認的堆棧大小,以默認的優先級運行,並處於多線程單元中。如果某個線程在托管代碼中空閑(如正在等待某個事件),則線程池將插入另一個輔助線程來使所有處理器保持繁忙。如果所有線程池線程都始終保持繁忙,但隊列中包含掛起的工作,則線程池將在一段時間后創建另一個輔助線程但線程的數目永遠不會超過最大值。超過最大值的線程可以排隊,但他們要等到其他線程完成后才啟動。
C#中的 lock 關鍵字有何作用
C#中的lock關鍵字實質是調用 Monitor.Enter 和Monitor.Exit兩個方法的簡化語法,功能上其實現了進入和退出某個對象的同步。通常情況下,可以通過 lock一個私有的引用成員變量來完成成員方法內的線程同步,而通過lock一個私有的靜態引用成員變量來完成靜態方法內的線程同步。
GET請求和 POST 請求有何區別
HTTP協議中有兩種常用的請求:GET 和POST。
GET 請求把表單的數據顯示地放在 URI 中,並且對長度和數據值編碼有所限制。
POST 請求把表單數據放在 HTTP請求體中,並且沒有長度的限制。
如何防止 SQL注入式攻擊
SQL 注入式攻擊時常見的一種攻擊方法,主要利用的是系統設計的弊端。程序員在設計時需要考慮到注入式攻擊的問題,避免直接使用用戶輸入拼接 SQL 語句,適當使用加密數據進行存儲,並且在合適的場合使用存儲過程。
Jquery選擇器有哪些?
元素選擇器、ID選擇器、類選擇器、屬性選擇器、過濾選擇器、層級選擇器、表單選擇器
什么是跨域請求
1.瀏覽器從一個域名的網頁去請求另一個域名的資源時,域名、端口、協議任一不同,都是跨域
2.只要協議、域名、端口有任何一個不同,都被當作是不同的域,之間的請求就是跨域操作。
數據庫多表聯建查詢幾種方式
交叉連接,內連接,自連接,外連接
如果表的數據量比較大
- 合理使用索引;
- 避免或簡化排序;
- 消除對大型表行數據的順序存取;
- 避免相關子查詢;
- 避免困難的正規表達式;
- 使用臨時表加速查詢。
視圖和表的區別
1、表只用物理空間而視圖不占用物理空間,視圖只是邏輯概念的存在,表可以及時對它進行修改,但視圖只能有創建的語句來修改。
2、視圖是查看數據表的一種方法,可以查詢數據表中某些字段構成的數據,只是一些SQL語句的集合。從安全的角度說,視圖可以不給用戶接觸數據表,從而不知道表結構。
3、表屬於全局模式中的表,是實表;視圖屬於局部模式的表,是虛表。 聯系:視圖(view)是在基本表之上建立的表,它的結構(即所定義的列)和內容(即所有數據行)都來自基本表,它依據基本表存在而存在。一個視圖可以對應一個基本表,也可以對應多個基本表。視圖是基本表的抽象和在邏輯意義上建立的新關系。
視圖可以操作數據么?
要通過視圖更新基本表數據,必須保證視圖是可更新視圖,即可以在INSET、UPDATE或DELETE等語句當中使用它們。對於可更新的視圖,在視圖中的行和基表中的行之間必須具有一對一的關系。還有一些特定的其他結構,這類結構會使得視圖不可更新。
如果視圖包含下述結構中的任何一種,那么它就是不可更新的:
(1)聚合函數;
(2)DISTINCT關鍵字;
(3)GROUP BY子句;
(4)ORDER BY子句;
(5)HAVING子句;
(6)UNION運算符;
(7)位於選擇列表中的子查詢;
(8)FROM子句中包含多個表;
(9)SELECT語句中引用了不可更新視圖;
(10)WHERE子句中的子查詢,引用FROM子句中的表;
(11)ALGORITHM 選項指定為TEMPTABLE(使用臨時表總會使視圖成為不可更新的)。
工廠模式
工廠方法模式:工廠方法模式定義一個用於創建對象的接口,讓子類決定實例化哪一個類。工廠方法使一個類的實例化延遲到其子類。工廠模式分為簡單工廠模式,工廠方法模式和抽象工廠模式,它們都屬於設計模式中的創建型模式。其主要功能都是幫助我們把對象的實例化部分抽取了出來,目的是降低系統中代碼耦合度,並且增強了系統的擴展性。
接口和類的區別
1、接口類似於類,但接口的成員都沒有執行方式,它只是方法、屬性、事件和索引的組合而已,並且也只能包含這四種成員;類除了這四種成員之外還可以有別的成員(如字段)。
2、不能實例化一個接口,接口只包括成員的簽名;而類可以實例化(abstract類除外)。
3、接口沒有構造函數,類有構造函數。
4、接口不能進行運算符的重載,類可以進行運算符重載。
5、接口的成員沒有任何修飾符,其成員總是公共的,而類的成員則可以有修飾符(如:虛擬或者靜態)。
6、派生於接口的類必須實現接口中所有成員的執行方式,而從類派生則不然。
談一下對EF的理解 使用它的好處
EF是一種通過映射操作實現數據交互的ORM框架技術
優點:
1.簡潔的Linq to Sql語句大大提高了開發人員的效率,不要再寫復雜的sql語句;
2.不再需要再管應用程序如何去連接數據庫;
3.EF可以用作用於數據服務和OData Service的基礎設施;
ajax的底層原理
ajax是一種異步通信技術,AJAX 的核心是 XMLHttpRequest 對象。使用XMLHttpRequest來和服務器進行異步通信
Api的接口和我們平時定義的接口有什么不同
從狹義上講,接口指的是借由 interface 定義的結構,接口中只對方法做定義,不做實現。具體實現由最終實現接口的類提供。 interface 作為一種類型,可以用於定義方法,我們只關心類實現了接口聲明的方法,並不關心實際上引用的是哪個類的對象。
接口是應用程序和模塊之間相互溝通的方式。提供某些功能的應用程序或者模塊為了與其它程序相互溝通,對外公開了某些功能的調用方式方法,這一套方式方法就是 API 。
C#接口是狹義的接口,只是編程中的一個規范,像模式、AOP之流,局限於某個領域
api是一個自閉的最小模塊向外部提供訪問的一個公開途徑,是公眾稱呼
廣義的接口是指對外提供交互,如api接口、usb接口、rest接口
OOP是怎么理解的?
OOP是面向對象編程,特征分別是封裝、繼承、多態、抽象。
學過別的語言嗎?
學過,C語言,JS,Java也了解一點
如果是自己開發,會選擇的哪種ORM框來進行數據庫交互?
Dapper或者EF
問題:WebApi和WebService的區別是什么?
WebService的數據格式是XML,消息體比較大,它的應用協議是SOAP(簡單對象訪問協議),在某些業務復雜,穩定性和正確性要求較高的領域,WebService還是有用武之地的。
WebApi是網絡應用程序接口,用的是HTTP協議,可以對接各種客戶端,移動設備,構建http服務的框架。
問題:MVC的特點是什么?
耦合性低,重用性高,部署快,可維護性高,前后端分離,有利於軟件工程化管理。
談談你對索引的理解?
SQL索引有兩種,聚集索引和非聚集索引,索引主要目的是提高了SQL Server系統的性能,加快數據的查詢速度與減少系統的響應時間 聚集索引存儲記錄是物理上連續存在,而非聚集索引是邏輯上的連續,物理存儲並不連續SQL索引有兩種,聚集索引和非聚集索引,索引主要目的是提高了SQL Server系統的性能,加快數據的查詢速度與減少系統的響應時間 聚集索引存儲記錄是物理上連續存在,而非聚集索引是邏輯上的連續,物理存儲並不連續
對異步加載的理解
- Ajax異步加載,減少渲染阻塞的js和css
- 推遲js的解析
- 不重要的腳本可推遲執行解析。
對隊列的特點?
先進先出,像一些高並發的也都處理過 "隊列是一種只允許在表的一端進行插入,在另一端進行刪除操作的線性表,因此具有先進先出的特性。隊列中允許進行插入的一端稱為隊尾,允許刪除的另一端成為對頭,當隊列中沒有元素時稱為空對。
隊列的基本操作有:1.構造一個空的隊列。2.在隊尾部插入元素3.在對頭刪除元素。4.得到對頭元素。5.判斷隊列是否為空。
面試問題:簡單敘述EF的核心思想
將表實體的變化,映射到表的變化;
對於ADO.net的使用在博客中進行了總結:.Net連接SQL Server。
在ADO .NET中用於存取和管理資料的兩個主要元件是.NET Framework 資料提供者和 DataSet,5大對象實現應用 程序和數據庫之間的操作。而在EF中
1.封裝了數據庫的統一入口,EF上下文;
2.把對實體的操作放入上下文中;
3.把對實體操作產生的變化生成Sql腳本執行到數據庫中
面試問題:WebAPI通常來干什么使用
問題解答:
一般作為接口來使用
面試問題:你們現在服務端的分層一般是什么結果
問題解答:
我們一般就是三層+工廠+接口+依賴注入
面試問題:Redis這東西有什么用
問題解答:
通常局限點來說,Redis也以消息隊列的形式存在,作為內嵌的List存在,滿足實時的高並發需求。而通常在一個電商類型的數據處理過程之中,有關商品,熱銷,推薦排序的隊列,通常存放在Redis之中,期間也包擴Storm對於Redis列表的讀取和更新。
面試問題:Redis常用的五種方式
問題解答:
字符串(String)、哈希/散列/字典(Hash)、列表(List)、集合(Set)、有序集合(sorted set)五種
面試問題:什么叫做多線程
問題解答:
多線程是為了使得多個線程並行的工作以完成多項任務,以提高系統的效率。線程是在同一時間需要完成多項任務的時候被實現的。
面試問題:分層結構是哪幾層
問題解答:界面層(User Interface layer)、業務邏輯層(Business Logic Layer)、數據訪問層(Data access layer)
面試問題:VUE是什么
問題解答:是一套構建用戶界面的 漸進式框架。與其他重量級框架不同的是,Vue 采用自底向上增量開發的設計。Vue 的核心庫只關注視圖層,並且非常容易學習,非常容易與其它庫或已有項目整合
面試問題:后端拿到數據有哪些過程
問題解答:請求數據,解析,發送請求,查找路徑,查詢到控制器中的方法。
面試問題:存儲過程接觸過嗎
問題解答: 固化在SQL數據庫系統內部的SQL語句,這樣做的好處是可以提高效率、增強數據庫的安全性、減少網絡流量。
面試問題:緩存失效是什么意思
問題解答:有時候如果網站並發訪問高,一個緩存如果失效,可能出現多個進程同時查詢DB,同時設置緩存的情況,如果並發確實很大,這也可能造成DB壓力過大,還有緩存頻繁更新的問題。
我現在的想法是對緩存查詢加鎖,如果KEY不存在,就加鎖,然后查DB入緩存,然后解鎖;其他進程如果發現有鎖就等待,然后等解鎖后返回數據或者進入DB查詢。
這種情況和剛才說的預先設定值問題有些類似,只不過利用鎖的方式,會造成部分請求等待。
面試問題:支付模塊獨立開發(開放原則)和解耦
問題解答:
首先要開發一個獨立松耦合的支付模塊的話,根據我目前所掌握的技術的話,我覺得用工廠模式是必須的,我們開一個支付的接口,其他模塊可以通過反射找到這個方法,讓其他模塊的來實現這個接口功能,也可以采用通知的模式來進行開發
String和StringBuiler的區別?
String 是不可變的對象,因此在每次對String類型進行改變的時候其實都等同於生成了一個新的 String對象,然后將指針指向新的String對象,所以經常改變內容的字符串最好不要用 String,因為每次生成對象都會對系統性能產生影響.
StringBuilder 上來先設置個緩沖區,然后開始寫入字符串,超過了緩存區就二倍增容。
可不可以介紹下MVC是什么?
MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設計典范,用一種業務邏輯、數據、界面顯示分離的方法組織代碼,將業務邏輯聚集到一個部件里面,在改進和個性化定制界面及用戶交互的同時,不需要重新編寫業務邏輯。MVC被獨特的發展起來用於映射傳統的輸入、處理和輸出功能在一個邏輯的圖形化用戶界面的結構中。
MVC就是類似三層的一種 架構,主要還是采用封裝(分層)的思想,來降低耦合度,從而使我們的系統更加的靈活,擴展性更好。
路由是什么?
WebApi和WebSerive的區別?
Ref和Out的區別?
1、使用ref型參數時,傳入的參數必須先被初始化,對out而言,必須在方法中對其完成初始化。
2、使用ref和out時,在方法的參數和執行方法時,都要加Ref或Out關鍵字,以滿足匹配。
3、out適合用在需要retrun多個返回值的地方,而ref則用在需要被調用的方法修改調用者的引用的時候。
4、ref傳進去的參數在函數內部可以直接使用,而out不可。
5、系統對ref的限制是更少一些的。
6、若要使用 ref 參數,必須將參數作為 ref 參數顯式傳遞到方法,ref 參數的值被傳遞到 ref 參數。
7、當希望方法返回多個值時,聲明 out 方法非常有用;使用 out 參數的方法仍然可以返回一個值.
out:標識一個參數值會受影響的參數,但在傳入方法時,該參數無需先初始化。
ref:標識一個參數值可能會受影響的參數。
對Sql的優化的理解?
1、在表中建立索引,優先考慮where、group by使用到的字段。
2、盡量避免使用select *,返回無用的字段會降低查詢效率。
3、盡量避免使用in 和not in,會導致數據庫引擎放棄索引進行全表掃描。
4、盡量避免使用or,會導致數據庫引擎放棄索引進行全表掃描。
5、盡量避免在字段開頭模糊查詢,會導致數據庫引擎放棄索引進行全表掃描。
6、盡量避免進行null值的判斷,會導致數據庫引擎放棄索引進行全表掃描。
7、盡量避免在where條件中等號的左側進行表達式、函數操作,會導致數據庫引擎放棄索引進行全表掃描。
8、當數據量大時,避免使用where 1=1的條件。通常為了方便拼裝查詢條件,我們會默認使用該條件,數據庫引擎會放棄索引進行全表掃描。
對泛型的理解?
泛型是 2.0 版 C# 語言和公共語言運行庫 (CLR) 中的一個非常重要的新功能。
泛型(Generic) 允許您延遲編寫類或方法中的編程元素的數據類型的規范,直到實際在程序中使用它的時候。換句話說,泛型允許您編寫一個可以與任何數據類型一起工作的類或方法。您可以通過數據類型的替代參數編寫類或方法的規范。當編譯器遇到類的構造函數或方法的函數調用時,它會生成代碼來處理指定的數據類型。
面試問題:數據庫為什么不使用IN和ONTIN優化
問題解答 因為在建立索引后進行IN 和NOT IN會使數據庫放棄建立的索引進行全表掃描
面試問題:控制反轉
問題解答 也就是依賴注入,就是創建調用者的工作不再有被調用者來創建,有Sping容易來實現,然后注入調用者
面試問題:webAPI通信安全
問題解答 可以再API使用token和簽名驗證來加密API的安全性
http和https的主要區別
http的安全性很低,他的鏈接是很簡單,https 他是可以加密的,可以進行身份驗證,安全性比http要安全的多,
http協議
Http 是客戶端和服務器的一個應答標准,通常由客戶端發起一個請求 發送到服務器,服務器收到請求以后,給客戶端返回一個請求 比如說200 然后客戶端收到請求 向服務器發送一個收到請求 這就是三次握手
多繼承
一個子類同時有多個父類這樣的關系稱之為 多繼承 多繼承可以看做是單繼承的擴展.
IOC
Ioc 他不是一個技術 是一種思想, 他可以指導我們如何設計出 松耦合,更優良的程序,傳統應用程序都是由於我們在類內部主動創建依賴對象 從而導致類與類之間 高耦合,難於測試,有了ioc容器以后我們可以吧創建依賴對象的控制權交給了ioc 容器 由容器注入組合對象,所以對象和對象之間是松耦合的 便於測試 最重要的是 使各個功能之間變得非常靈活
依賴注入
所謂依賴注入就是說 在運行期 由外部容器直接將動態對象注入到組件中,當spring 容器初始化,創建並且管理bean對象,以及銷毀他, 所以我們只需要從外部容器直接獲取bean對象,而不用編寫代碼創建bean 對象, 這種現象就叫做控制反轉,就是應用本身不負責以來對象的創建和維護,依賴對象的創建和維護是由外部容器控制的,這樣控制權就從應用本身轉移
mvc 中 string 和 String 有什么區別
String是 Framework中的 , string 是 c#中的 , string是String的別名, 一般來說寫string的時候編譯的時候 , 會把string 轉為 String , 而用String編譯的時候會少做一點工作.
作業
作業他是sql server 自動執行的指定操作 比如 可以實現 數據庫每天十點進行備份
.NET中集合類型有哪些?
動態數組(ArrayList) 它代表了可被單獨索引的對象的有序集合。
哈希表(Hashtable) 它使用鍵來訪問集合中的元素。
排序列表(SortedList)它可以使用鍵和索引來訪問列表中的項。
堆棧(Stack) 它代表了一個后進先出的對象集合。
隊列(Queue) 它代表了一個先進先出的對象集合。
點陣列(BitArray) 它代表了一個使用值 1 和 0 來表示的二進制數組。
字典類型的說明
回 答: 字典是Key—value類型的,是個數組類型的,是個鍵值對類型的集合;
解 答: 必須包含名空間System.Collection.Generic,Dictionary里面的每一個元素都是一個鍵值對(由二個元素組成:鍵和值) , 鍵必須是唯一的,而值不需要唯一的,鍵和值都可以是任何類型(比如:string, int, 自定義類型,等等),通過一個鍵讀取一個值的時間是接近O(1),鍵值對之間的偏序可以不定義。
.NET 數據類型float、double和decimal區別
回 答: float 單精度浮點,double 雙精度浮點,decimal是高精度浮點型;
解 答: float 單精度浮點 32bit,double 雙精度浮點64bit,decimal是高精度 128bit,浮點型,float double 是 基本類型(primitive type),decimal不是。decimal的有效位數很大,達到了28位,但是表示的數據范圍卻比float和double類型小。
使用的時候會對計算時的性能有影響。decimal所能儲存的數比double大,從double到decimal的類型轉換不會出現任何問題。
高並發怎么處理?
盡量使用Redis緩存,包括用戶緩存,信息緩存等,多花點內存來做緩存,可以大量減少與數據庫的交互,提高性能。
使用Redis隊列List,Push和POP方法保證了原子性的實現。即使有很多用戶同時到達,也是依次執行。緩存也是可以應對寫請求的,比如我們就可以把數據庫中的庫存數據轉移到Redis緩存中,所有減庫存操作都在Redis中進行,然后再通過后台進程把Redis中的用戶請求同步到數據庫中。
問題:方法重寫、抽象類是什么意思?
重寫要求方法名、參數和返回值相同,重寫是為了增強類的重用性和復用性,擴展性;重寫是對類中方法的擴充。要被重寫的基方法必須聲明為為virtual、abstract。
抽象類是類,只能被繼承,但是不能實例化。可以包含抽象成員,也可以包含非抽象成員,抽象成員只能出現在抽象類中,抽象方法不能有方法體語句,可以有參數列表,如果子類不是抽象類,子類必須實現抽象類所有抽象方法。
問題:什么是依賴注入?
在程序運行期間,由外部容器動態的將依賴對象注入到組件中。當spring容器啟動后,spring容器初始化,創建並管理bean對象,以及銷毀它。我們只需要從容器中直接獲取bean對象,不用編寫代碼來創建,這種現象叫做依賴注入。
所謂依賴注入,是指程序運行過程中,如果需要調用另一個對象協助時,無須在代碼中創建被調用者,而是依賴於外部的注入。Spring的依賴注入對調用者和被調用者幾乎沒有任何要求,完全支持對POJO之間依賴關系的管理。
Webapi異常捕抓:
局部的話采用try...cache
全局可以使用異常過濾器
C#中var與js中var的區別:
在c#中必須初始化,定義時不能為空值,初始化完成后就不能再賦值,
在JS中var是弱類型的可以當類型使用,也可以當引用類型使用,如果為控不會報錯而是默認為undefined。
lambda表達式:
lambda是一種運算符=>,lambda表達式相當於一個匿名函數
它的寫法更加的簡單靈活,
使用過哪些前段框架?
答:使用過html,css,js,vue等框架。
什么是回調函數?
答:字面上的理解,回調函數就是一個參數,將這個函數作為參數傳到另一個函數 里面,當那個函數執行完之后,再執行傳進去的這個函數。這個過程就叫做回調。
問題六:EF怎么怎么執行SQL語句
答:1、使用SqlQuery在已知的實體上執行SQL查詢語句
2、使用ExcuteSqlCommand在未知實體上執行增刪改操作
秒殺的業務邏輯?
答:①計時交互:通過后端請求拿到當前系統時間;將start,end,now作為參數 傳進countdown方法作時間判斷,now>end-->秒殺結束;now<start-->
秒殺未開始,計時事件綁定(countdown),並在計時結束后,獲取秒殺地址,控 制現實邏輯,執行秒殺[handleSeckill(exposer)],即出現按鈕;now>start&&now<end :執行秒殺操作[handleSeckill(exposer)]
②執行秒殺:獲取exposer,判斷是否開啟秒殺,是:給出秒殺地址,並且綁定 一次點擊事件以執行秒殺請求(1.禁用按鈕;2.發送秒殺請求),根據實際情況判斷 秒殺成功與秒殺異常(重復秒殺,秒殺結束,系統異常等);否:獲取now,start, end,再次執行countdown操作。
問題四:cookie和Session的區別
答:1、cookie數據存放在客戶的瀏覽器上,session數據放在服務器上。
2、cookie不是很安全,別人可以分析存放在本地的COOKIE並進.
問題五:cookie放在那里,session放在那里?
答:cookie存放在客戶端,session存放在服務器
問題六:BS和CS的區別
答:1.硬件環境不同 2.對安全要求不同 3.對程序架構不同 4.軟件重用不同 5.系統維護不同 6.處理問題不同 7.用戶接口不同 8.信息流不同 。
存儲過程和一般sql語句那個效率高
數據庫會對存儲過程進行預編譯,因此存儲過程的速度比較快一些、效率比較高
mvc 路由機制
首先URL會進入到路由表中再通過路由表內的路由找到匹配的方法
四大過濾器(filters)攔截器
授權過濾器、異常過濾器、結果過濾器、行為過濾器
代碼重構
改善軟件質量、性能,使他的設計模式、架構更加的合理,提高擴展性和維護性
token驗證
每一次訪問API都有一個token令牌,token令牌進行三次判斷,驗證是否存、第二次驗證是否過期、第三次驗證是否有效合法
B/S架構優先訪問的文件
Global.asax
方法重寫
重寫是編譯時的一種多態,根據參數的不同、類型的不同、順序的的不同調用不同的方法
消息隊列
主要用於解耦、異步調用、消息通訊、流量削峰等問題,實現高性能、可伸縮、最終一致性的架構
oop面對對象
核心思想就是:封裝、繼承、多態。是一種面向對象的設計模式,主要目標就是重用性、靈活性、擴展性。
Ef的核心思想
是Ado.net中的一套支持面向數據的應用程序的技術屬於ORM框架
DI和IOC
IOC(控制反轉):將自身對象中的一個內置對象的控制反轉,反轉后不再有自己操作創建,而是由第三方系統來完成。DI(依賴注入):自身對象中的內置對象是通過注入的方式進行創建。
面試問題:值類型后面加?
問題解答:
在值類型后面加?是可以為NULL值的
依賴注入
我的回答:
依賴注入(DI)和控制反轉(IOC)是同一個概念。具體含義是:當某個角色需要另一個角色的協助時,在一般的程序設計過程中,通常由調用者來創建被調用者的實例。但在Spring里,創建被調用者的工作不再由調用者來完成,因此稱為控制反轉;創建被調用者 實例的工作通常由Spring容器來完成,然后注入調用者,因此也稱為依賴注入。依賴注入(Dependency Injection)是用於實現控制反轉(Inversion of Control)的最常見的方式之一(控制反轉還有一種常見的實現方式稱為依賴查找)