.net面試寶典
目前,關于java的面試寶典,網(wǎng)上可以說是多的數(shù)不勝數(shù),并且內容各不相同,但是關于.net的,找來找去卻都是差不多的,所以,這里我匯總一下我最近的面試所問到的問題,并且會繼續(xù)更新。
基礎:
1、const與static readonly的區(qū)別
參考:const的值是在編譯期間確定的,因此只能在聲明時通過常量表達式指定其值,而static readonly是在運行時計算出其值的,所以還可以通過靜態(tài)構造函數(shù)來賦值。理論上static readonly不可已更改,但是可以通過別的方法,例如static readonly List<int> list,可以通過list.Add()的方法修改。
2、webapi和webservice的區(qū)別
參考:
webapi用的是http協(xié)議,無狀態(tài),可以構建restful,可以擁有很多種傳輸格式;
WebService是基于Soap協(xié)議,soap在http協(xié)議的基礎上,一個基于XML的協(xié)議。
3、Redis數(shù)據(jù)類型及用途
參考:
string:計數(shù)、點贊、token;
Hash:存儲一個用戶信息對象數(shù)據(jù)。
List:最新消息排行榜、消息隊列;
Set:利用唯一性,可以統(tǒng)計訪問網(wǎng)站的所有獨立IP;
(sorted set:有序集合):例如存儲全班同學的成績,其集合value可以是同學的學號,而score就可以是成績。(2)排行榜應用,根據(jù)得分列出topN的用戶等。
3、RabbitMQ五種工作模式
參考:
簡單模式;
work 模式(一個生產者對應多個消費者,但是一條消息只能有一個消費者獲得消息!!!);
發(fā)布/訂閱模式(fanout)(一個消費者將消息首先發(fā)送到交換器,交換器綁定到多個隊列,然后被監(jiān)聽該隊列的消費者所接收并消費。);
路由模式(生產者將消息發(fā)送到direct交換器,在綁定隊列和交換器的時候有一個路由key,生產者發(fā)送的消息會指定一個路由key,那么消息只會發(fā)送到相應key相同的隊列,接著監(jiān)聽該隊列的消費者消費消息。);
主題模式(上面的路由模式是根據(jù)路由key進行完整的匹配(完全相等才發(fā)送消息),這里的通配符模式通俗的來講就是模糊匹配。)
4、如何保證線程安全
參考:使用lock或者線程安全集合如ConcurrentDictionary、ConcurrentBag等
5、Ioc容器的理解:
參考:接口和實現(xiàn)分離,IoC容器可以解決類之間的依賴關系,當你需要獲得一個類A的實例時,而這個類又需要調用其他兩個接口/類(B、C),IoC容器可以根據(jù)配置自動創(chuàng)建B和C實例,然后再用B和C的實例創(chuàng)建A。相比較以前用工廠模式創(chuàng)建實例,IoC容器更加簡潔方便。
6、數(shù)組與鏈表的區(qū)別
參考:
數(shù)組:數(shù)組是將元素在內存中連續(xù)存放,由于每個元素占用內存 相同,可以通過下標迅速訪問數(shù)組中任何元素。但是如果要在數(shù)組中增加一個元素,需要移動大量元素,在內存中空出一個元素的空間,然后將要增加的元素放在其 中。同養(yǎng)的道理,如果想刪除一個元素,同樣需要移動大量元素去填掉被移動的元素。如果應用需要快速訪問數(shù)據(jù),很少或不插入和刪除元素,就應該用數(shù)組。
鏈表:
鏈表恰好相反,鏈表中的元素在內存中不是順序存儲的,而是通過存在元素中的指針聯(lián)系到一起。比如:上一個元素有個指針指到下一個元素,以此類推,直到最后 一個元素。如果要訪問鏈表中一個元素,需要從第一個元素開始,一直找到需要的元素位置。但是增加和刪除一個元素對于鏈表數(shù)據(jù)結構就非常簡單了,只要修改元 素中的指針就可以了。如果應用需要經(jīng)常插入和刪除元素你就需要用鏈表數(shù)據(jù)結構了。
數(shù)組靜態(tài)分配內存,鏈表動態(tài)分配內存;
數(shù)組在內存中連續(xù),鏈表不連續(xù);
數(shù)組元素在棧區(qū),鏈表元素在堆區(qū);
數(shù)組利用下標定位,時間復雜度為O(1),鏈表定位元素時間復雜度O(n);
數(shù)組插入或刪除元素的時間復雜度O(n),鏈表的時間復雜度O(1)。
7、在不使用事務的情況下去保證事務的一致性
參考:mq的消息一致性
8、數(shù)組的快速排序
參考:算法,例如冒泡排序等
9、如何保證webapi的高并發(fā)性
參考:api限流,提升api內部代碼的效率,數(shù)據(jù)庫性能等
10、Win64位程序如何調用Win32位的dll
參考:百度
11、如何啟動線程,如何等待所有線程完成:
參考:Task啟動,可以用Task.Wait()或者Task.WailAll()等待
12、有沒有Redis實際用過,什么場景使用
參考:變化比較少的數(shù)據(jù)使用,例如菜單目錄,人員信息等
13、使用過哪些前端框架
參考:layui、vue、echart
14、了解過哪些開源技術或者框架
15、如何保證rabblimq消息隊列的消息的完整性
16、談談rabbitmq的手動應答和自動應答
17、c#反射
18、c#加密解密
19、mvc過濾器
20、EF導航屬性
21、線程間通信
數(shù)據(jù)庫:
1、 over函數(shù)
參考:Over函數(shù)不能單獨使用,要和分析函數(shù):rank(),dense_rank(),row_number()等一起使用 。
2、事務的四種級別
參考:未提交讀(Read uncommitted)提交讀(Read committed)可重復讀(Repeatable read)可串行化(Serializable),其中Read committed是sql server的默認級別
3、聚集索引和非聚集索引的區(qū)別
參考:聚集索引一個表只能有一個,而非聚集索引一個表可以存在多個,這個跟沒問題沒差別,一般人都知道。
聚集索引存儲記錄是物理上連續(xù)存在,而非聚集索引是邏輯上的連續(xù),物理存儲并不連續(xù),這個大家也都知道。參考 http://www.rzrgm.cn/qwg123/p/4572253.html
4、分庫分表有木有經(jīng)驗
參考:我的回答是模擬過主從備份,沒有分表經(jīng)驗,然后講了下主從備份的操作,以及帶來的問題。
5、當一個表的數(shù)據(jù)超過一千萬時有什么影響,怎么解決
參考:百度
6、兩個線程同時插入數(shù)據(jù)庫,id自增,第一個異常了,第二個插入的id是多少
參考:自己百度
7、數(shù)據(jù)庫思死鎖

浙公網(wǎng)安備 33010602011771號