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

心之所向,勇往直前!
記錄面試中的那些小事。

正文

   請解釋什麼是強類型、弱類型

    強類型:指定明確的數據類型,如: int a = 1

    弱類型:沒有指定明確的數據類型,會在程序運行的時候解析數據類型,如: var a = 1

 

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

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

    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命令保證數據一致性

結語

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章