2021年.Net中級開發工程師面試題


心之所向,勇往直前!
記錄面試中的那些小事。面試題只是一道門,最好還是走進屋里看看。

正文

   你是如何保證系統是高可用的(結合自己項目講解最好,不一定需要行業內很復雜的方案)參考資料

    高可用就是減少程序停機的可能性,常用做法是負載均衡 + 集群。

    a. nginx負載均衡 + 前后端分離 + Api微服務 + 集群

    b. Redis可以啟用哨兵模式或者cluster

    c. MQ集群

    d. 數據庫主從

 

   什么情況下會產生死鎖

    當兩個進程同時競爭相同資源時,如在A中獲取1號資源后加鎖再獲取2號資源,同時B先獲取2號資源加鎖,再去獲取1號資源,兩者會進入死鎖狀態。 

    a. 互斥條件:進程要求對所分配的資源進行排它性控制,即在一段時間內某資源僅為一進程所占用

    b. 請求和保持條件:當進程因請求資源而阻塞時,對已獲得的資源保持不放

    c. 占有申請條件:進程自己已經至少保持一個資源,又請求其他資源,但是這個資源被其他進程占有,而且又不釋放自己已經占有的資源

    d. 循環等待條件:發生死鎖時,必定會形成一個進程——資源的環路。

 

   如何避免死鎖的發生?參考資料

    a. 盡量讓事務按順序執行。

     b. 將大事務拆成多個小事務執行

    c. 讀寫分離

    d. 避免編寫需要用戶交互的事務

 

   什么是樂觀鎖、悲觀鎖?參考資料

    樂觀鎖:假設數據一般情況不會造成沖突,通過給數據添加Version列來實現並發控制

    悲觀鎖:數據庫鎖,具有極強的獨占、排他性。比較少用。

      - 共享鎖:也稱讀鎖,多個事務中只能讀不能改

      - 排他鎖:也稱寫鎖,獲取到鎖的事務擁有讀和寫的權限,其他事務不能再獲取資源的一切鎖

      

    什么是臟讀、幻讀、不可重復讀,如何避免?參考資料

     臟讀:指一個事務中訪問到了另外一個事務未提交的數據,當事務A出現回滾時,事務B的讀取到的將是臟數據(被事務A修改過的)

     幻讀:指一個事務中兩次相同的查詢,得到的數據量不一致

      不可重復讀:指一個事務兩次相同的查詢,得到的結果不一致

 

    你都了解哪些ORM?

     Entity Framework,Dapper,NHibernate

 

    你都了解哪些MQ?參考資料

     a. ActiveMQ

      b. RocketMQ

      c. RabbitMQ

      d. Kafka

 

    一般什么業務場景下會使用MQ

     使用MQ是為了解耦、異步、消峰。

     a. 系統只能承受2000人並發,但出秒殺活動時出現5000並發,此時使用隊列可讓多余的請求等待。

     b. 有多個系統需要同時獲取相同數據的時候

 

    如何保證MQ的冪等性(不會重復消費)

      a. 在寫庫時先查詢一次是否已經存在,存在則Update

      b. 如果是Set到Redis中具有天然冪等性

      c. 主鍵唯一

 

    如何保證MQ的可靠性(不會丟失數據) 參考資料

       a. 生產階段:要捕獲消息發送錯誤,並重發消息

       b. 儲存階段:數據持久化,集群

       c. 消費階段:確認業務邏輯都完成后再發送確認消息

 

    MQ消息積壓如何處理

       a. 部分業務可以采取限流操作,減少消息的產生

      b. 對Broker進行擴容處理

      c. 增加消費端

 

     你都了解哪些數據庫?

       a. Access:基於Windows的關系型小型數據庫。數據量大會出現性能問題

       b. Sqlite:開源、輕量級嵌入式數據庫、簡單配置、無需安裝

        - 不支持高並發

        - 適用數據量小

       c. MySql: 關系型、體積小、查詢速度快,支持上千萬數據量查詢

        - 不是完全開源免費

       d. Sqlserver:功能全面,商業型數據庫,Windows Server部署時優先選用

       e. Oracle:功能全面,商業型數據庫,大型項目/Linux部署優先選用

       f. MongoDB:開源、文檔型NoSql數據庫,查詢性能極高,有豐富的社區支持

        - 不支持事務

        - 占用磁盤

 

     知道數據庫索引類型有哪些嗎?

       a. 聚集索引:聚集索引全表只能有一個,比如主鍵

       b. 非聚集索引:可以有多個

 

     使用索引的優缺點

       a. 優點:提升查詢速度

       b. 缺點:增加維護成本,降低增、刪、改速度

    

    你了解過哪些緩存技術?

       a. Redis

        - 單線程

        - 支持多種數據類型:list、set、hash、string、zset

        - 支持持久化RDB和AOF兩種模式

        - 支持事務

       b. Memcached

        - 多線程

        - 支持Key-Value型

        - 不支持持久化,可靠性低

        - 通過cas命令保證數據一致性

結語

  本篇到此結束,如果有任何疑問或者指正,請發表在評論區。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM