.net面試知識(shí)點(diǎn)

異步原理以及實(shí)現(xiàn)方式

參考文檔:https://www.cnblogs.com/haiyoune2/p/9243693.html

原理

  • 同步和異步通信
    1. 步調(diào)用不阻塞線(xiàn)程,而是把調(diào)用塞到線(xiàn)程池中矾兜,程序主線(xiàn)程或UI線(xiàn)程可以繼續(xù)執(zhí)行
    2. 異步是借助于多線(xiàn)程來(lái)實(shí)現(xiàn)的
    3. 一句話(huà)概括:程序無(wú)須按照代碼順序自上而下執(zhí)行

實(shí)現(xiàn)方式

  • C# 5.0 新增async/await關(guān)鍵字咱枉,可以簡(jiǎn)化異步編程
    1. 使用async關(guān)鍵字窍荧,對(duì)方法標(biāo)記為異步(async本身不會(huì)創(chuàng)建異步操作,如果沒(méi)有await關(guān)鍵字卑雁,編譯器會(huì)警告但不報(bào)錯(cuò),將以同步形式執(zhí)行程序)
  • BeginInvoke實(shí)現(xiàn)
  • Timer定時(shí)器實(shí)現(xiàn)

多線(xiàn)程原理以及跨線(xiàn)程交互實(shí)現(xiàn)方式

多線(xiàn)程原理

  • 什么是進(jìn)程地熄?
    當(dāng)一個(gè)程序開(kāi)始運(yùn)行時(shí)叉讥,它就是一個(gè)進(jìn)程窘行,進(jìn)程包括運(yùn)行中的程序和程序所使用到的內(nèi)存和系統(tǒng)資源。 而一個(gè)進(jìn)程又是由多個(gè)線(xiàn)程所組成的图仓。

  • 什么是線(xiàn)程罐盔?
    線(xiàn)程是程序中的一個(gè)執(zhí)行流,每個(gè)線(xiàn)程都有自己的專(zhuān)有寄存器(棧指針救崔、程序計(jì)數(shù)器等)惶看,但代碼區(qū)是共享的,即不同的線(xiàn)程可以執(zhí)行同樣的函數(shù)六孵。

  • 什么是多線(xiàn)程纬黎?
    多線(xiàn)程是指程序中包含多個(gè)執(zhí)行流,即在一個(gè)程序中可以同時(shí)運(yùn)行多個(gè)不同的線(xiàn)程來(lái)執(zhí)行不同的任務(wù)劫窒,也就是說(shuō)允許單個(gè)程序創(chuàng)建多個(gè)并行執(zhí)行的線(xiàn)程來(lái)完成各自的任務(wù)本今。

跨線(xiàn)程交互實(shí)現(xiàn)方式

基于委托方式進(jìn)行實(shí)現(xiàn)

private delegate void DelegateInfo();
private delegate void DelegateIsEnd();
//這個(gè)是線(xiàn)程調(diào)用其他線(xiàn)程的方法
private void Dowork()
{
  // 判斷是否需要Invoke,多線(xiàn)程時(shí)需要
  if (this.InvokeRequired)
  {
    // 通過(guò)委托調(diào)用寫(xiě)主線(xiàn)程控件的程序主巍,傳遞參數(shù)放在object數(shù)組中
    this.Invoke(new DelegateInfo(LoadFile));
  }
  else
  {
    // 如果不需要委托調(diào)用冠息,則直接調(diào)用
    this.LoadFile();
  }
  //=========線(xiàn)程結(jié)束===========
  this.BeginInvoke(new DelegateIsEnd(ISEnd));
}
private void ISEnd()
{
  wf.Visible = false;
  wf.Close();
  wf.Dispose();
}
private void LoadFile()
{
}
private WaitingForm wf = nu

GC原理以及實(shí)現(xiàn)方式

GC原理

簡(jiǎn)單來(lái)說(shuō),是標(biāo)記與清除

  • 標(biāo)記
    從應(yīng)用程序的root出發(fā)孕索,利用相互引用關(guān)系逛艰,遍歷其在Heap上動(dòng)態(tài)分配的所有對(duì)象,沒(méi)有被引用的對(duì)象不被標(biāo)記檬果,即成為垃圾瓮孙;存活的對(duì)象被標(biāo)記,即維護(hù)成了一張“根-對(duì)象可達(dá)圖”选脊。
  • 清除
    啟用Compact算法杭抠,對(duì)內(nèi)存中存活的對(duì)象進(jìn)行移動(dòng),修改它們的指針恳啥,使之在內(nèi)存中連續(xù)偏灿,使空閑的內(nèi)存連續(xù),從而解決內(nèi)存碎片問(wèn)題钝的,當(dāng)再次為新對(duì)象分配內(nèi)存時(shí)翁垂,CLR不必在充滿(mǎn)碎片的內(nèi)存中尋找適合新對(duì)象的內(nèi)存空間,所以分配速度會(huì)大大提高硝桩。注意:大對(duì)象(large object heap)除外沿猜,GC不會(huì)移動(dòng)一個(gè)內(nèi)存中巨無(wú)霸,它會(huì)被放到一個(gè)特殊的內(nèi)存空間中碗脊。

IOC容器實(shí)現(xiàn)原理啼肩,DI實(shí)現(xiàn)方式

MVC

MVC生命周期

數(shù)據(jù)庫(kù)的鎖,netcore的鎖,數(shù)據(jù)庫(kù)索引祈坠,分布式相關(guān)

項(xiàng)目的架構(gòu) 分布式 oauth2 openid clr

Net core? 依賴(lài)注入害碾,什么是中間件?

AOP赦拘、多線(xiàn)程Task thread pool慌随,并發(fā)沖突

AOP面向切面編程

異常捕獲,如何控制線(xiàn)程的并發(fā)訪(fǎng)問(wèn)數(shù)量躺同?

各種數(shù)組類(lèi)型阁猜、數(shù)組與集合的區(qū)別。

什么是委托笋籽?Action與Function的區(qū)別蹦漠?

委托概述

委托是一種引用類(lèi)型,表示對(duì)具有特定參數(shù)列表和返回類(lèi)型的方法的引用车海。

Action與Function區(qū)別

  • 相同:內(nèi)置委托類(lèi)型,顧名思義Action和Func本身就是已經(jīng)定義好的委托類(lèi)型隘击。
  • 區(qū)別:Action委托簽名不提供返回類(lèi)型侍芝,而Func提供返回類(lèi)型。

Redis場(chǎng)景埋同?數(shù)據(jù)類(lèi)型州叠?為什么速度、分布式鎖凶赁? 大規(guī)模秒殺

如何保證緩存與數(shù)據(jù)庫(kù)雙寫(xiě)時(shí)的數(shù)據(jù)一致性咧栗?CAP

緩存雪崩和緩存穿透問(wèn)題解決?

數(shù)據(jù)庫(kù)的鎖類(lèi)型虱肄?共享 排他 更新鎖

數(shù)據(jù)庫(kù)系統(tǒng)角度

  • 排他鎖
  • 共享鎖(Share Lock)
    1. 多個(gè)事務(wù)可封鎖同一個(gè)共享頁(yè)
    2. 任何事務(wù)都不能修改該頁(yè)
    3. 通常是該頁(yè)被讀取完畢致板,讀鎖立即被釋放
    4. sqlserver使用 with(HOLDLOCK)
  • 更新鎖

程序員角度

  • 悲觀鎖
  • 樂(lè)觀鎖

悲觀鎖和樂(lè)觀鎖的區(qū)別?如何實(shí)現(xiàn)樂(lè)觀鎖悲觀鎖咏窿?

索引 mysql索引的方式

事務(wù)隔離級(jí)別 默認(rèn)分布式事務(wù)

EF里如何避免臟讀

臟讀定義

  • 當(dāng)一個(gè)事務(wù)正在訪(fǎng)問(wèn)數(shù)據(jù)斟或,并且對(duì)數(shù)據(jù)進(jìn)行了修改,而這種修改還沒(méi)有提交到數(shù)據(jù)庫(kù)中集嵌,這時(shí)萝挤,另外一個(gè)事務(wù)也訪(fǎng)問(wèn)這個(gè)數(shù)據(jù),然后使用了這個(gè)數(shù)據(jù)根欧。因?yàn)檫@個(gè)數(shù)據(jù)是還沒(méi)有提交的數(shù)據(jù)怜珍,那么另外一個(gè)事務(wù)讀到的這個(gè)數(shù)據(jù)是臟數(shù)據(jù),依據(jù)臟數(shù)據(jù)所做的操作可能是不正確的

如果避免臟讀

  • 設(shè)置事務(wù)隔離級(jí)別TRANSACTION_READ_COMMITTED凤粗,常用防止臟讀

設(shè)計(jì)模式 k8s docker 隊(duì)列 linux

裝箱的底層原理酥泛;裝箱、拆箱過(guò)程中的性能損失,如何避免裝箱彼此相過(guò)程中的性能損失揭璃;

裝箱的底層原理

  • 所有的值類(lèi)型都繼承自System.ValueType晚凿,而System.ValueType繼承自System.Object。
  • 所有的值類(lèi)型對(duì)象都分配在堆棧上瘦馍,而所有的引用類(lèi)型包括System.Object對(duì)象都分配在堆上歼秽。
  • CLR需要做額外的工作把堆棧上的值類(lèi)型移動(dòng)到堆上,這個(gè)操作就被稱(chēng)為裝箱情组。
    1. 在堆上分配一個(gè)內(nèi)存空間燥筷,大小等于需要裝箱的值類(lèi)型對(duì)象的大小加上兩個(gè)引用類(lèi)型對(duì)象都擁有的成員:類(lèi)型對(duì)象指針和同步塊引用。
    2. 把堆棧上的值類(lèi)型對(duì)象復(fù)制到堆上新分配的對(duì)象院崇。
    3. 返回一個(gè)指向堆上新對(duì)象的引用肆氓,并且存儲(chǔ)到堆棧上被裝箱的那個(gè)值類(lèi)型的對(duì)象里。

如何避免裝箱彼此相過(guò)程中的性能損失

  • 盡量減少裝箱拆箱操作
  • 通過(guò)泛型解決
  • 在循環(huán)里外底瓣,提前進(jìn)行裝箱

多線(xiàn)程鎖的類(lèi)型

  • 原子操作(Interlocked)
    所有方法都是執(zhí)行一次原子讀取或一次寫(xiě)入操作谢揪。
  • lock()
    避免鎖定public類(lèi)型,否則實(shí)例將超出代碼控制的范圍捐凭,定義private對(duì)象來(lái)鎖定拨扶。
  • Monitor實(shí)現(xiàn)線(xiàn)程同步
    通過(guò)Monitor.Enter() 和 Monitor.Exit()實(shí)現(xiàn)排它鎖的獲取和釋放,獲取之后獨(dú)占資源茁肠,不允許其他線(xiàn)程訪(fǎng)問(wèn)患民。還有一個(gè)TryEnter方法,請(qǐng)求不到資源時(shí)不會(huì)阻塞等待垦梆,可以設(shè)置超時(shí)時(shí)間匹颤,獲取不到直接返回false。
  • ReaderWriterLock
    當(dāng)對(duì)資源操作讀多寫(xiě)少的時(shí)候托猩,為了提高資源的利用率印蓖,讓讀操作鎖為共享鎖,多個(gè)線(xiàn)程可以并發(fā)讀取資源站刑,而寫(xiě)操作為獨(dú)占鎖另伍,只允許一個(gè)線(xiàn)程操作。
  • 事件(Event)類(lèi)實(shí)現(xiàn)同步
    事件類(lèi)有兩種狀態(tài)绞旅,終止?fàn)顟B(tài)和非終止?fàn)顟B(tài)摆尝,終止?fàn)顟B(tài)時(shí)調(diào)用WaitOne可以請(qǐng)求成功,通過(guò)Set將時(shí)間狀態(tài)設(shè)置為終止?fàn)顟B(tài)因悲。
    • AutoResetEvent(自動(dòng)重置事件)
    • ManualResetEvent(手動(dòng)重置事件)
  • 信號(hào)量(Semaphore)
    信號(hào)量是由內(nèi)核對(duì)象維護(hù)的int變量堕汞,為0時(shí),線(xiàn)程阻塞晃琳,大于0時(shí)解除阻塞讯检,當(dāng)一個(gè)信號(hào)量上的等待線(xiàn)程解除阻塞后琐鲁,信號(hào)量計(jì)數(shù)+1。線(xiàn)程通過(guò)WaitOne將信號(hào)量減1人灼,通過(guò)Release將信號(hào)量加1围段,使用很簡(jiǎn)單。
  • 互斥體(Mutex)
    獨(dú)占資源投放,用法與Semaphore相似奈泪。
  • 跨進(jìn)程間的同步
    通過(guò)設(shè)置同步對(duì)象的名稱(chēng)就可以實(shí)現(xiàn)系統(tǒng)級(jí)的同步,不同應(yīng)用程序通過(guò)同步對(duì)象的名稱(chēng)識(shí)別不同同步對(duì)象灸芳。

Monitor

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末涝桅,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子烙样,更是在濱河造成了極大的恐慌冯遂,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谒获,死亡現(xiàn)場(chǎng)離奇詭異蛤肌,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)批狱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)寻定,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人精耐,你說(shuō)我怎么就攤上這事±哦停” “怎么了卦停?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)恼蓬。 經(jīng)常有香客問(wèn)我惊完,道長(zhǎng),這世上最難降的妖魔是什么处硬? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任小槐,我火速辦了婚禮,結(jié)果婚禮上荷辕,老公的妹妹穿的比我還像新娘凿跳。我一直安慰自己,他們只是感情好疮方,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布控嗜。 她就那樣靜靜地躺著,像睡著了一般骡显。 火紅的嫁衣襯著肌膚如雪疆栏。 梳的紋絲不亂的頭發(fā)上曾掂,一...
    開(kāi)封第一講書(shū)人閱讀 49,144評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音壁顶,去河邊找鬼珠洗。 笑死,一個(gè)胖子當(dāng)著我的面吹牛若专,可吹牛的內(nèi)容都是我干的许蓖。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼富岳,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蛔糯!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起窖式,我...
    開(kāi)封第一講書(shū)人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蚁飒,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后萝喘,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體淮逻,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年阁簸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了爬早。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡启妹,死狀恐怖筛严,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情饶米,我是刑警寧澤桨啃,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站檬输,受9級(jí)特大地震影響照瘾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜丧慈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一析命、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧逃默,春花似錦鹃愤、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至筒主,卻和暖如春关噪,著一層夾襖步出監(jiān)牢的瞬間鸟蟹,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工使兔, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留建钥,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓虐沥,卻偏偏與公主長(zhǎng)得像熊经,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子欲险,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345