以下內容不是 NET 面試的全部,而是寫一些我認為可能會遺漏的。
一、面試總結
避雷:深圳龍崗李朗 YH 股份會放鳥 offer
因為 offer 被放鳥重新找工作,從 8 號開始面試到 12 號(11 家公司),整體感覺面試難度不大,就是很多公司都是走流程,並不是真的需要人,有些甚至聊一兩句就讓回去等通知。值得注意的是面試之前要了解公司是做什麼的,大概的業務是怎麼樣的,因為簡歷通過一般是技術符合或者某個項目是類似的,這樣可以避免在二面的時候回答不了,而且同一個城市的面試盡量真誠,因為彼此的 HR 和管理可能都是認識的。
二、面試內容總結:
後端技術要點:物件導向、常見演算法和實現、常見設計模式、C# 基礎、.NET Core(中介軟體、與 .NET 異同、IOC/DI、AOP、國產框架(Furion))、EF Core 和 ORM 相關、多執行緒、效能優化、快取(Redis、MongoDB)、MQ、微服務、分散式(少)、Docker(少)、CI/CD(少)、Linux(少)、分庫分表(少)。
資料庫技術要點:SQL 語法、索引、查詢優化、預存程序、主流資料庫的異同(SQL Server、MySQL、PostgreSQL(少))、死結、交易、函數、B+ 樹、紅黑樹、B 樹(這部分很少)。
前端技術要點:Vue、jQuery、UniApp。
業務相關:1. 是否和客戶或者現場直接溝通需求,是怎麼做的。2. 講解一下項目的功能和場景,是否遇到問題,是怎麼解決的。
面試題(記得的部分):
- 說一下你對物件導向的理解,有什麼特點
參考答案:https://blog.csdn.net/weixin_51201930/article/details/122652397
答:物件導向指的是將現實世界中的事物抽象為一個個物件,每個物件都有對應的方法和屬性,物件導向的三大特性:繼承、封裝、多型
- 平時工作中有用到什麼演算法嗎?
參考答案:https://blog.csdn.net/dreame_life/article/details/104342490 https://www.runoob.com/w3cnote/ten-sorting-algorithm.html
答:遞迴、氣泡排序、二分搜尋。(這個問題我覺得是在問資料結構,可以參考這個https://blog.csdn.net/heyuchang666/article/details/49891635)
- 常見設計模式有哪些?工作中用到了哪些?
參考答案:https://www.cnblogs.com/abcdwxc/archive/2007/10/30/942834.html
答:配接器、裝飾器、抽象工廠
- C# 的實值型別和參考型別有哪些?區別是什麼
參考:https://learn.microsoft.com/zh-tw/dotnet/csharp/language-reference/builtin-types/value-types 答:實值型別有整數型、浮點型、布林型、結構、列舉、元組、char,參考型別有 class、interface、delegate、record、dynamic、object、string。
實值型別的變數包含型別的執行個體。它不同於參考型別的變數,後者包含對型別執行個體的參考。
實值型別均隱式衍生自 System.ValueType
- C# 集合有哪些,區別是什麼?
參考:https://learn.microsoft.com/zh-tw/dotnet/standard/collections/commonly-used-collection-types
答:用得比較多的是:ArrayList、List、Queue、Hashtable、Dictionary,區別是在執行緒安全和應用場景上,像 List 的讀取是執行緒安全而 ArrayList 不是,List 可以用於泛型進行排序、搜尋,Dictionary 用於鍵值對的字典集合。Queue 代表了一個先進先出的物件集合。當需要對各項進行先進先出的存取時,則使用佇列。雜湊表中的每一項都有一個鍵/值對。可以直接用雜湊鍵存取集合中的項目。
- char、string、StringBuilder 有什麼區別。
參考:https://learn.microsoft.com/zh-tw/dotnet/csharp/programming-guide/strings/ https://blog.csdn.net/qq_44034384/article/details/106739003
答:char 用於儲存單一字元,string 是 char 物件的依序唯讀集合,每次對 string 的修改都會建立一個新的 string 物件,StringBuilder 類別則不同,每次操作都是對自身物件進行操作,而不是產生新的物件,其所佔空間會隨著內容的增加而擴充,在做大量的修改操作時,不會因產生大量匿名物件而影響系統效能。
- .NET Framework、.NET Standard、.NET Core、.NET 5/6/7 區別
答:.NET Framework 和 .NET Core 都可以用於產生多種類型的應用程式。.NET Framework 框架只能在 Windows 上執行。
.NET Core 是一個適用於 Windows、Linux、macOS 作業系統的免費開源受控框架。
.NET 5/6/7 是 .NET Core 的穩定版本。
.NET Standard 是一套規範,相當於一個關係表,把 .NET Framework 的某些組件對應到 .NET Core
- 談談你對 .NET Core 中介軟體和管線的理解
參考:https://learn.microsoft.com/zh-tw/aspnet/core/fundamentals/middleware/?view=aspnetcore-6.0
答:應用程式的完整要求處理稱為管線,中介軟體是一種裝配到應用程式管線以處理要求和回應的元件,常用於記錄、例外狀況捕捉、要求攔截、快取處理
- IOC、DI、AOP 是什麼,為什麼使用,怎麼用
參考:https://learn.microsoft.com/zh-tw/dotnet/core/extensions/dependency-injection
IOC 為控制反轉,它是一種思想,把類別的具體實作交給外部容器,而不是由類別直接具現化,透過這個反轉,把控制權交給了外部容器,降低了類別與類別之間的耦合性。
DI 為相依性插入,它是 IOC 的具體實作,它負責把類別與類別之間的相依關係結合起來,有三個生命週期:
- Transient 服務始終不同,每次要求服務時都會建立一個新執行個體。
- Scoped 服務僅隨新範圍變更,但在某個範圍內是相同執行個體。
- Singleton 服務始終相同,新執行個體僅建立一次。
原生 DI 支援建構函式插入或 ServiceProvider.CreateScope.GetService 取得執行個體,如果需要擴充插入可以使用 Autofac
AOP 面向方面程式設計,透過預編譯方式和執行期間動態代理實現程式功能的統一維護的一種技術。我的理解是在執行時期動態對應 DLL 取得類別執行個體
- EF Core 和 ORM 相關
參考:https://blog.csdn.net/u011854789/article/details/72783902
答:ORM 指的是物件導向的物件模型和關聯式資料庫的資料結構之間的互相轉換,EF 三種程式設計方式:Database First、Model First、Code First。
多執行緒看這個https://www.yuque.com/zhanglin-l1ak6/ll06t7/tkq97k
Redis 面試看這個:https://blog.csdn.net/adminpd/article/details/122934938
什麼是索引,索引有哪幾類(SQL Server)
參考:https://learn.microsoft.com/zh-tw/sql/relational-databases/indexes/indexes?view=sql-server-ver16
答:索引用於加速查詢的效能。它可以更快地從資料表中擷取資料
- 什麼是預存程序?有哪些優缺點?
答:預存程序是一組為了完成特定功能的 SQL 陳述式集,儲存在資料庫中。
預存程序的優點:
-
- 效率高
預存程序編譯一次後,就會存到資料庫,每次呼叫時都直接執行。而普通的 SQL 陳述式我們要儲存到其他地方(例如:記事本上),都要先分析編譯才會執行。所以相對而言預存程序效率更高。
-
- 降低網路流量
預存程序編譯好會放在資料庫,我們在遠端呼叫時,不會傳輸大量的字串類型的 SQL 陳述式。
-
- 可重複使用性高
預存程序往往是針對一個特定的功能編寫的,當再需要完成這個特定的功能時,可以再次呼叫該預存程序。
-
- 可維護性高
當功能要求發生小的變化時,修改之前的預存程序比較容易,花費精力少。
-
- 安全性高
完成某個特定功能的預存程序一般只有特定的使用者可以使用,具有使用身份限制,更安全。
預存程序的缺點:
- 每個資料庫的預存程序語法幾乎都不一樣,十分難以維護(不通用)
- 業務邏輯放在資料庫上,難以迭代
手寫:
create proc StuProc
@sname varchar(100)
begin
select S#,Sname,Sage,Ssex from student where sname=@sname
end
go
exec StuProc '趙雷' //執行陳述式
- 什麼是死結,如何避免。
答:死結是指兩個或兩個以上的程序在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法繼續推進下去。按同一順序存取物件、避免交易中的使用者互動,保持交易簡短並在一個批次處理中,合理設計索引避免全表掃描
SqlServer 函數建立:https://www.cnblogs.com/Brambling/p/6686947.html
什麼是交易,有哪些特點
答:交易是一種機制、一個操作序列,包含了一組資料庫操作命令。交易把所有的命令作為一個整體一起向系統提交或復原操作請求,即這一組資料庫命令要麼都執行,要麼都不執行,因此交易是一個不可分割的工作邏輯單元。具有 4 個特性,即原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)和持久性(Durability),這 4 個特性通常簡稱為 ACID。
前端部分:Vue 相關基礎知識、元件通訊和複用、與 jQuery 的區別、JS 語法、JS 基礎、常用 UI 框架等。
還會問到快取中介軟體、訊息中介軟體、日誌中介軟體(日誌上報和統計)、分表分庫、快取持久性和一致性、主從同步、資料讀寫分離、資料庫的 B+ 樹、紅黑樹、B 樹等。