2020 ASP.NET C# 面試常見問題

面試準備收集的題目,紀錄一下

什麼是泛型? .NET Framework中的泛型class, interface, method

  • 參數多型
  • 對於邏輯處理相同而僅資料型態不同的兩個程式可以使用泛型類別來處理
  • 泛型就是一種強行別又不用轉換,比其他特定型別定義還有彈性,在編譯時候就會噴錯
  • 不會像弱型別Array裡面可能是Object或突然塞Int or String,在Runtime時候噴錯
  • 可大量減少程式碼撰寫量
  • 性能會提升 (不用轉型)
    var a = new ArrayList();
    a.add(3);
    int b = (int)a[0];
    
    List<int> a = new List<int>();
    a.add(3);
    int b = a[0];
  • 封裝過的東西,要追求極致效能的功能比較會在意
  • 加強程式碼的重複使用程度以及類型安全性

什麼是LINQ的延遲執行? 何時會觸發?

  • 延遲執行 (Deferred Execution)在LINQ呼叫實體化資料時候的相關方法Ex: toList(),toCount()
  • 若與資料庫有關,執行(LINQ provider) SQL語法時候的等在DB回應時間就是延遲執行

請實作一個方法,可以檢查任意數N是否介於2個數字a,b之間

  • public void checkNumber(int[] NumArray, a, b)
    {
    var result = from item in NumArray
    where item > a && item < b
    select item;
    return result.any();
    }

延續上面實作單元測試

  • [TestMethod()]
    public void checkNumberTest()
    {
    int[] NumArray = new int[] { 2 };
    var r = checkNumber(NumArray, 1, 2);
    Assert.AreEqual(true, r);
    }

C#7 ValueTuple結構,跟現有System.Tuple類別有甚麼不同?

  • 解讀上更明確,型態屬性更明確
    var tuple = new Tuple<int, string, string>(1, "張山", "1班");
    
    var valueTuple = GetValueTuple();
    int id = valueTuple.id;
    string name = valueTuple.name;
    string className = valueTuple.className;
    
    var tuple = GetTuple();
    var (id1,name1,className1)= GetValueTuple();

使用繼承時,有哪些修飾詞?

  • public 任何人都可以使用
  • private 只有自己可以使用
  • protected 只有繼承的類別才可以使用
  • internal 只有相同的組件或namespace才可使用
  • abstract 定義基礎父類別,方法不實作
  • new 子類別覆寫父類別方法
  • override 子類別覆寫父類別方法
  • virtual 定義基礎父類別,且實作方法
  • override 重寫 不會影響父類別
  • new 覆蓋 會影響父類別

請比較Array和List差異? 使用情境?

  • Array使用連續記憶體空間
  • List不需要使用連續記憶體空間
  • Array輪循速度比較快,List輪循速度比較慢
  • Array無法新增或刪除其中的元素
  • List可以複雜的型態建議使用List,單一型態的資料集合建議使用Array

請解釋async await是什麼? 有什麼優缺點?

  • 非同步執行續讓一件大型工作的不同部份
  • 能夠重疊在一起整體完成的時間就能縮短
  • 優點 平行運算可以大量處理資料
  • 缺點 若有順序型的資料就無法使用平行運算
  • 非同步只對 I/O 相關作業有效,對吃 CPU 的作業沒轍

JavaScript 要複製clone一個物件有哪些方法?

  • 在修改b時並不會改到a
    var a = 10;
    var b = a;
    b = 20;
    console.log(a); // 10
    console.log(b); // 20
  • 物件複製 (會互蓋)
    var obj1 = { a: 10, b: 20, c: 30 };
    var obj2 = obj1;
  • 物件複製 (互相獨立)
    var obj1 = { a: 10, b: 20, c: 30 };
    var obj2 = { a: obj1.a, b: obj1.b, c: obj1.c };
  • ES6 Object.assign({}, obj1)的意思是先建立一個空物件{},接著把obj1中所有的屬性複製過去
  • JSON轉換複製
    var obj1 = { body: { a: 10 } };
    var obj2 = JSON.parse(JSON.stringify(obj1));
  • jQuery複製
    var obj2 = $.extend(true, {}, obj1);

JavaScript 有哪些關鍵特性?

  • 雙向綁定
  • 大量函式庫
  • 關注點分離
  • 物件操作便利
  • 模板系統降低程式碼重複性

網頁緩慢會用什麼工具去查效能? 排除網路因素

  • chrome developer tools
  • 觀看網站封包大小,預載入資源大小,js是否要壓縮,css是否要壓縮,html是否要壓縮,CDN測速
  • Google PageSpeed Insights

ASP.NET Filter是什麼? 有什麼用途?

  • Authorization filters 權限驗證合不合法
  • Resource Filter 針對Model加工處理
  • Action filters Controll過濾器
  • Result filters 完成後最後的過濾器
  • Exception filters 系統發生Exception

Web API或MVC要如何記下每一個Request Log? 在.NET Core要怎麼做?

  • NuGet下載 NLog套件
  • 使用 Message Handler 進行捕捉Request,記錄所有請求,若怕延遲可設定為非同步方式進行Log
  • ASP.NET Core 內建支援的 Logging 記錄器,只要在 Program.cs 檔案中設定 Logging 的機制

設計MVC Route有哪幾種方式?

  • 除了預設的Route
  • Area 區域

網站實作快取有哪幾種方式?

  • Action上面就直接增加OutputCache
  • 資料快取 CacheItem
  • DB實作快取的方式
  • ASP.NET MVC Redis Session

NET Core 原本進入點 Application_Start() 由什麼取代?

  • Web Application 觸發 Application_Start() 事件 (Global.asax.cs 文件中)
  • core 使用 startup

Respone.Redirect 跟 Server.Transfer的差異?

  • Respone.Redirect: 可跨不同WebSite
  • 是直接下一個HttpRequest出去,它並沒有將來源Form的相關物件資料也一併傳出去
  • Server.Transfer: 可降低伺服器請求負荷,但只限單一WebSite
  • 將目前表單Form中的資料送到我們指定的表單,所以,可以夾帶的訊息也比較多
  • Server.Transfer,只能傳送在我們Server上的所屬網頁
  • (Server.Transfer方法的轉向操作完全在Web伺服器完成)

看到500錯誤你要怎麼偵錯?

  • 伺服器端開啟Debug或加入Log紀錄查看錯誤

WebAPI Request/Response生命週期簡化圖

在客戶端跑 SP 速度很慢,但把正式站原封不動搬回來執行SP速度很快,要怎麼去查原因?

  • 開發環境是SSD
  • 正式可能是HDD
  • 可能其他資源被占用,資源管理器去偵錯

SP有什麼好處和缺點? ORM有什麼好處跟缺點?

  • ORM
    • 物件方式操控資料庫
    • 替換不同資料庫時,只需調整資料連接層,實作層都不用調整
    • 自動產生SQL,可避免不安全的SQL語法
    • 可進版本控制
  • SP
    • 可寫出ORM無法產生的語法(可能會提高效能,反之)

Git 懂多少?

DI, IOC 是甚麼? 舉例

  • DI 依賴注入,IOC 控制反轉
  • IOC: A物件程式裡面有需要使用到B物件,A, B物件中有依賴成份,IOC就是把 原本 A, B控制權交給第三方容器
  • 降低A對B物件的耦合性,讓雙方都依賴在第三方容器中
  • 系統中模組建議依賴抽象化,因為各個模組間不需要知道對方太多細節(實作),知道越多耦合越強
  • DI依賴注入
    • A物件程式中需要B物件,因此A物件相依B物件
  • 控制反轉後
    • A物件和B物件都是相依第三方容器
    • 當A物件需要B物件的實作,A物件不用管第三方容器會給甚麼
    • 只知道第三方容器一定會給B物件實作
    • 第三方物件給A物件的東西可看成依賴注入容器
  • 像網頁瀏覽器和伺服器是依賴Http協議,用戶端不管是手機.電腦、平板,伺服器端php,asp.net,java都可互相交信,依賴Http協議共用的合約
    控制反轉:是一個設計思想 ,把對於某個物件的控制權移轉給共同第三方
    依賴注入:把被依賴物件注入被動接收物件中

高併發怎麼發生? 怎麼解?

  • 高併發(High Concurrency)是一種系統執行過程中遇到的一種“短時間內遇到大量操作請求”的情況
  • 主要發生在web系統集中大量訪問收到大量請求(例如:12306的搶票情況;雙十一活動)
    該情況的發生會導致系統在這段時間內執行大量操作,例如對資源的請求,資料庫的操作等
  • 響應時間、吞吐量、每秒查詢率,併發使用者數
  • 多執行緒只是一種解法之一
  • 高併發解法
    • 分散式快取:redis、memcached等,結合CDN來解決圖片檔案等訪問
    • 訊息佇列中介軟體:activeMQ等,解決大量訊息的非同步處理能力
    • 應用拆分:一個工程被拆分為多個工程部署,利用dubbo解決多工程之間的通訊
    • 資料庫垂直拆分和水平拆分(分庫分表)等
    • 資料庫讀寫分離,解決大資料的查詢問題
    • 還可以利用nosql ,例如mongoDB配合mysql組合使用
    • 固定頁面就不連資料庫
    • JS、CSS、HTML壓縮
    • k8s

Cache有哪些用法

  • 降低SQL請求次數
  • 傳統Cache 只支援集中式快取
  • MemoryCache 與 Object Cache 支援分散式系統快取

Code review看哪些點

  • 命名上是否恰到好處
  • 是否太多重複邏輯與冗余程式碼
  • 是否有更好寫法可建議
  • 個人習慣的Code Style 就不要強押
  • 可讀性
  • 是否有漏洞或機密外洩
  • 測試流程是否完善

軟體開發流程

  • 需求分析 > 設計 > 實作 > 測試 > 交付 > 維運

異步工作/job queue

防重複請求

評估系統可能的瓶頸

  • https://docs.microsoft.com/zh-tw/biztalk/core/how-to-investigate-bottlenecks

MicroService

  • https://docs.microsoft.com/zh-tw/dotnet/architecture/microservices/multi-container-microservice-net-applications/microservice-application-design

Messaging Queue

如何確保資料一致性?

Value Type 與 Reference Type

  • https://medium.com/@ad57475747/c-%E7%A8%8B%E5%BC%8F%E5%9F%BA%E7%A4%8E-%E5%9F%BA%E7%A4%8E%E5%9E%8B%E5%88%A5-value-type-reference-type-pointer-type-cacc1bb29004

.NET core 懂多少

對於新的.net code 有哪些新功能很心動

對於新的C# 有哪些功能特別新的

LINQ 的 Left Join 怎麼寫?

設計模式最印象深刻的有哪些? 用來解決什麼問題?

流量大的時候的一些應對方法

在客戶端跑 SP 速度很慢,但把正式站原封不動搬回來執行SP速度很快,要怎麼去查原因?

SP有什麼好處和缺點? ORM有什麼好處跟缺點?

單純紀錄,未來有時間再更新、補充,資料也許有誤,請斟酌參考

訂閱
通知
guest
0 留言
預約回饋
查看所有留言