心之所向,勇往直前!
記錄面試中的那些小事,
正文
請解釋什么是強型別、弱型別
強型別:指定明確的資料型別,如: 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命令保證資料一致性
結語
本篇到此結束,如果有任何疑問或者指正,請發表在評論區,
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/288331.html
標籤:.NET Core
