版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
golang基礎(chǔ)?試題啟動(dòng)流程Q.go的init函數(shù)是什么時(shí)候執(zhí)?的?Q.多個(gè)init函數(shù)執(zhí)?順序能保證嗎?Q.goinit的執(zhí)?順序,注意是不按導(dǎo)?規(guī)則的(這?是編譯時(shí)按?件名的順序執(zhí)?的)Q.init函數(shù)能被外部調(diào)?嗎??jī)?nèi)存分配[外鏈圖?轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖?保存下來(lái)直接上傳(img-p22eNrMY-1646530923570)(C:\Users\MSI\AppData\Local\Temp\1646493064752.png)]代已未堆棧環(huán)命:mspan在arena區(qū)),bitmap區(qū)16GB,arena區(qū)512GB內(nèi)存管理組件:mcache?鎖分配,mcentral,mheapmspan是雙向鏈表tiny分配器,減少內(nèi)存浪費(fèi)率,但回收困難,所有對(duì)象可回收才能回收span?少1個(gè)page(8k),被劃分成固定??的slot,bitmap表?slotmchache?鎖分配,mcentral,mheap.>32kb,從mheap從獲取.<16且?指針,使?tiny分配器.<16有指針或者16-32kb,從mchache中獲取mspan中的slotnewnew和make有什么區(qū)別?newobject函數(shù)makeQ.go對(duì)象在內(nèi)存中是怎樣的Q.go的內(nèi)存分配是怎么樣的Q.棧的內(nèi)存是怎么分配的Q.檢測(cè)Golang內(nèi)存泄漏的?具A.pprof,trace,race檢測(cè)Q.gostruct能不能?較??的逃逸分析是什么?怎么避免內(nèi)存逃逸?Q.簡(jiǎn)單介紹?下go的內(nèi)存分配機(jī)制?有mcentral為啥要mcache?A.答了mcentral是服務(wù)所有系統(tǒng)線程,mcache為系統(tǒng)線程獨(dú)享,mcache缺少span時(shí)去mcentral->mheap中取Q.內(nèi)存對(duì)齊跟c++的?樣,8字節(jié)對(duì)齊Q.go內(nèi)存分配,和tcmalloc的區(qū)別A.借?了tcmalloc的思想(固定分區(qū)、動(dòng)態(tài)分區(qū)、頁(yè)式分配)A.是操作符還是內(nèi)置函數(shù)A.內(nèi)置函數(shù)Q.Go怎么做深拷貝A.先序列化,再反序列化Q.了解內(nèi)存泄漏嗎?有什么危害?A.占資源,甚?程序奔潰Q.空結(jié)構(gòu)體的?處A.1.map。是空結(jié)構(gòu)體,構(gòu)造集合。2.通道。不管切?多長(zhǎng),都不會(huì)占?空間。4.僅包含?法的結(jié)構(gòu)體。不?指針,節(jié)約空間。5.最后零字段。finalzerofield:結(jié)構(gòu)體?的最后?個(gè)屬性如果是空結(jié)構(gòu)體,會(huì)當(dāng)成1個(gè)字節(jié)處理。如果結(jié)構(gòu)體嵌套的全是空結(jié)構(gòu)體,還是0個(gè)字節(jié)。Q.golang如何確定有沒(méi)有內(nèi)存泄露?系統(tǒng)?怎么去監(jiān)控整體的運(yùn)?情況??志是怎么處理的?A.Q.虛擬內(nèi)存地址Q.char*Ptr=0;*Ptr=‘a(chǎn)’說(shuō)明?下內(nèi)存分配流程A.報(bào)錯(cuò)。A.?法內(nèi)變量是值,返回了變量地址,這個(gè)時(shí)候會(huì)出現(xiàn)內(nèi)存逃逸Q.逃逸分析說(shuō)下?為什么要逃逸分析?如何避免逃逸A.少?指針Q.連接池的好處復(fù)?,減少資源消耗。Q.byte和rune有什么區(qū)別A.rune是int32,占?的字節(jié)數(shù)不?樣Q.malloc(?啥玩意不會(huì))A.極?分配器,會(huì)內(nèi)存合并Q.Go語(yǔ)?內(nèi)存分配,什么分配在堆上,什么分配在棧上?!疚翼槺闾崃?下內(nèi)存逃逸,應(yīng)該算加分了嘻嘻】A.局部變量,?參,全局變量存在棧上。引?類型存堆上。數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式A.能說(shuō)說(shuō)棧在實(shí)際中的應(yīng)?嗎A.Q.A.Q.go的啟動(dòng)過(guò)程A.Q.go怎么實(shí)現(xiàn)封裝繼承多態(tài)A.?struct模擬類。Q.知道浮點(diǎn)數(shù)在機(jī)器上?怎么存儲(chǔ)的A.符號(hào)位,階碼,尾數(shù)Q.go語(yǔ)?的時(shí)候垃圾回收,寫(xiě)代碼的時(shí)候如何減少?對(duì)象分配A.Q.簡(jiǎn)單介紹?下go的內(nèi)存分配機(jī)制?有mcentral為啥要mcache?答了mcentral是服務(wù)所有系統(tǒng)線程,mcache為系統(tǒng)線程獨(dú)享,mcache缺少span時(shí)去mcentral->mheap中取Q.當(dāng)寫(xiě)?個(gè)程序申請(qǐng)內(nèi)存時(shí),會(huì)做哪些操作?A.中斷,頁(yè)?置換,堆,棧等。Q.說(shuō)?下string和[]byte的?效轉(zhuǎn)換Q.Go的數(shù)據(jù)結(jié)構(gòu)的零值是什么A.引?類型是nil,其他是0,0.0,""等等垃圾回收1.3版本是標(biāo)記清除算法,stw時(shí)間過(guò)長(zhǎng)STW,stoptheworld;讓程序暫停,程序出現(xiàn)卡頓(重要問(wèn)題)。標(biāo)記需要掃描整個(gè)heap清除數(shù)據(jù)會(huì)產(chǎn)?heap碎?gcStart三?標(biāo)記法,“強(qiáng)-弱”三?不變式、插?屏障、刪除屏障、混合寫(xiě)屏障、STW有兩個(gè)問(wèn)題,在三?標(biāo)記法中,是不希望被發(fā)?的條件1:?個(gè)??對(duì)象被??對(duì)象引?(??被掛在??下)條件2:灰?對(duì)象與它之間的可達(dá)關(guān)系的??對(duì)象遭到破壞(灰?同時(shí)丟了該??)當(dāng)以上兩個(gè)條件同時(shí)滿?時(shí),就會(huì)出現(xiàn)對(duì)象丟失現(xiàn)象!插?寫(xiě)屏障:A引?C,A?C?,會(huì)把C加?寫(xiě)屏障buf,最終flush到掃描隊(duì)列,stw不?:結(jié)束時(shí)需要stw重新掃描棧,?約需要10~100ms刪除屏障:具體操作:被刪除的對(duì)象,如果??為灰?或者??,那么被標(biāo)記為灰??;厥站鹊?。滿?:弱三?不變式.(保護(hù)灰?對(duì)象到??對(duì)象的路徑不會(huì)斷)插?寫(xiě)屏障和刪除寫(xiě)屏障的短板:插?寫(xiě)屏障:結(jié)束時(shí)需要STW來(lái)重新掃描棧,標(biāo)記棧上引?的??對(duì)象的存活;刪除寫(xiě)屏障:回收精度低,GC開(kāi)始時(shí)STW掃描堆棧來(lái)記錄初始快照,這個(gè)過(guò)程會(huì)保護(hù)開(kāi)始時(shí)刻的所有存活對(duì)象?;旌蠈?xiě)屏障:前提條件棧引?的對(duì)象都是??,后來(lái)添加的依然是??。span?有g(shù)cmarkBits,0??,1灰?或??三?標(biāo)記:通過(guò)mspan查看是否被引?灰?:對(duì)象已被標(biāo)記,但這個(gè)對(duì)象包含的?對(duì)象未標(biāo)記??:對(duì)象已被標(biāo)記,且這個(gè)對(duì)象包含的?對(duì)象也已標(biāo)記,gcmarkBits對(duì)應(yīng)的位為1(該對(duì)象不會(huì)在本次GC中被清理)??:對(duì)象未被標(biāo)記,gcmarkBits對(duì)應(yīng)的位為0(該對(duì)象將會(huì)在本次GC中被清理)例如,當(dāng)前內(nèi)存中有A~F?共6個(gè)對(duì)象,根對(duì)象a,b本?為棧上分配的局部變量,根對(duì)象a、b分別引?了對(duì)象A、B,?B對(duì)象?引?了對(duì)象D,則GC開(kāi)始前各對(duì)象的狀態(tài)如下圖所?:初始狀態(tài)下所有對(duì)象都是??的。接著開(kāi)始掃描根對(duì)象a、b;由于根對(duì)象引?了對(duì)象A、B,那么A、B變?yōu)榛?對(duì)象,接下來(lái)就開(kāi)始分析灰?對(duì)象,分析A時(shí),A沒(méi)有引?其他對(duì)象很快就轉(zhuǎn)???,B引?了D,則B轉(zhuǎn)???的同時(shí)還需要將D轉(zhuǎn)為灰?,進(jìn)?接下來(lái)的分析。D沒(méi)有引?其他對(duì)象,所以D轉(zhuǎn)???。標(biāo)記過(guò)程結(jié)束最終,??的對(duì)象會(huì)被保留下來(lái),??對(duì)象會(huì)被回收掉。root對(duì)象:棧,全局對(duì)象等Q.gc觸發(fā)時(shí)機(jī)GOGC?例后臺(tái)觸發(fā)-sysmon檢測(cè)?動(dòng)觸發(fā)-runtime.GC()Q.Golang的GC觸發(fā)時(shí)機(jī)是什么A.閾值觸發(fā);主動(dòng)觸發(fā);兩分鐘定時(shí)觸發(fā);Q.執(zhí)?時(shí)為啥需要STW?A.漏標(biāo),多標(biāo)Q.如何解決漏標(biāo)?A.滿?三?不變性Q.如何滿?三?不變性?A.屏障技術(shù)。Q.gc怎么幫我們回收對(duì)象A.三?標(biāo)記Q.go的gc會(huì)不會(huì)漏掉對(duì)象或者回收還在?的對(duì)象?A.不會(huì)回收還在?的對(duì)象,如果有這個(gè)問(wèn)題,早就歇菜了。當(dāng)前gc漏掉是有,但在下?次gc的時(shí)候就不會(huì)漏掉。Q.gc會(huì)不會(huì)太慢,跟不上內(nèi)存分配的速度?A.STW會(huì)暫停,肯定有影響。不過(guò)最新的垃圾回收機(jī)制將STW時(shí)間降低到了極致。Q.如果a=5,b=a,c=&a,gc啟動(dòng)后,a,b,c是什么顏?的?為什么?A.Q.go的GC和Python的GCA.go是可達(dá)性分析,Python是引?標(biāo)記。是為了什么?了解新版本go對(duì)寫(xiě)屏障的改進(jìn)嗎?A.掃描棧會(huì)STW。新版本是混合寫(xiě)屏障,不需要重新掃描棧。Q.兩次GC周期重疊會(huì)引發(fā)什么問(wèn)題,GC觸發(fā)機(jī)制是什么樣的?Q.那如果?戶在并發(fā)CMS期間改了引?,寫(xiě)屏障如何保證三?不變性?A.插?屏障和刪除屏障共同保證Q.pprof使?A.調(diào)度器newprocrunnext123→312排隊(duì)邏輯,g調(diào)度邏輯GODEBUG=schedtrace=1000可執(zhí)?程序M?P多,不會(huì)多太多,最?1萬(wàn)個(gè)Q.go調(diào)度都發(fā)?了啥A.gmp?絡(luò)和鎖會(huì)不會(huì)阻塞線程A.會(huì)。Q.什么時(shí)候阻塞線程A.休眠,加鎖等等。Q.協(xié)程同步的?式waitgroup和context區(qū)別A.waitgroup收集次數(shù),context不收集次數(shù)Q.什么場(chǎng)景不適合?協(xié)程?那該?什么實(shí)現(xiàn)并發(fā)呢?(epoll)A.Q.創(chuàng)建多個(gè)goroutine在多核的情況下是如何分配的A.gmpQ.?個(gè)main函數(shù)內(nèi)?go開(kāi)啟多個(gè)協(xié)程,現(xiàn)在?個(gè)協(xié)程panic了,main函數(shù)會(huì)怎樣?為什么?A.整個(gè)程序就奔潰了Q.Golang的協(xié)程間通訊?式有哪些?共享內(nèi)存和協(xié)程通信。Q.說(shuō)?下go協(xié)程設(shè)計(jì)A.由于???c實(shí)現(xiàn)過(guò)協(xié)程,所以答的很隨意。講了?下函數(shù)調(diào)?約定,棧布局,上下?切換,x86寄存器,?講了?下?gcc的"-finstrument-functions"。然后講了?下go的調(diào)度思路。參考go源碼runtime.scheduleQ.go實(shí)現(xiàn)協(xié)程池channel實(shí)現(xiàn)。Q.golanggmp模型怎么調(diào)度的,?個(gè)goroutinesleep了,操作系統(tǒng)是怎么喚醒的A.信號(hào)量、互斥鎖、條件變量M,那能有?個(gè)groutinue,groutinue數(shù)量的上限是多少?A.理論?上限什么時(shí)候會(huì)被掛起A.?ioQ.主線程控制協(xié)程的?法A.泄露,或是內(nèi)存泄漏。A.Q.go的goroutine,如何停??個(gè)goroutine?goroutine的退出,可以?channel和Context)Q.起?個(gè)線程死循環(huán)cpu會(huì)爆嗎?,8個(gè)協(xié)程就能讓cpu100%Q.如何實(shí)現(xiàn)只開(kāi)100個(gè)協(xié)程A.?channel控制,容量是100Q.golang如何知道或者檢測(cè)死鎖A.pprof怎么操作內(nèi)核線程A.Q.?產(chǎn)中哪些服務(wù)?的進(jìn)程、線程,為什么要這么做,有什么好處A.Q.什么情況下M會(huì)進(jìn)??旋的狀態(tài)?A.(MGMM需要處理)Q.Golang怎么在并發(fā)編程中等待多個(gè)goroutine結(jié)束?A.channel,sync.WaitGroupQ.怎么限制goroutine的數(shù)量?A.channelQ.golang調(diào)度能不能不要pA.可以不要,但不好控制。Q.協(xié)程泄***r>如果你啟動(dòng)了?個(gè)goroutine,但并沒(méi)有符合預(yù)期的退出,直到程序結(jié)束,此goroutine才退出,這種情況就是goroutine泄露。當(dāng)goroutine泄露發(fā)?時(shí),該goroutine的棧(?般2k內(nèi)存空間起)?直被占?不能釋放,goroutine?的函數(shù)在堆上申請(qǐng)的空間也不能被垃圾回收器回收。A.Q.協(xié)程中參數(shù)直接使?,和傳參的區(qū)別是什么?為什么會(huì)造成這種結(jié)果。A.直接使?是閉包,傳參跟普通函數(shù)?樣了。Q.為什么P的localqueue可?鎖訪問(wèn),任務(wù)竊取的時(shí)候要加鎖嗎?A.?casgo協(xié)程池,怎么實(shí)現(xiàn)的?協(xié)程池上限確定的原則是什么?A.goroutine泄漏的例??A.Q.goroutine和線程的區(qū)別:goroutine是建?在線程之上的輕量級(jí)的抽象,允許以?常低的代價(jià)在同?地址空間中并?地執(zhí)?多個(gè)函數(shù)和?法。相?如線程,創(chuàng)建和銷毀的代價(jià)更?,調(diào)度是獨(dú)?于線程之外的。Q.為什么說(shuō)goroutine輕量:創(chuàng)建Goroutine通常只需要2kb的內(nèi)存,但是線程則需要1mb2.go中創(chuàng)建和銷毀都是??管理的,?不是像操作系統(tǒng)申請(qǐng)資源,銷毀再歸還。3GMP調(diào)度Q.協(xié)程內(nèi)部再啟?協(xié)程,它們是沒(méi)關(guān)系,對(duì)吧?外?的協(xié)程奔潰,??的還會(huì)執(zhí)?嗎?外部協(xié)程執(zhí)?結(jié)束的時(shí)候,如何讓內(nèi)部協(xié)程也停?運(yùn)??golang原?提供的包?,讓內(nèi)部協(xié)程停?運(yùn)?。context打配合。Q.協(xié)程直接如何通信?A.共享內(nèi)存和通道Q.進(jìn)程間的通信?式A.Q.進(jìn)程、線程、GoroutineQ.線程什么是私有的A.獲取返回值(捕獲參數(shù)),有哪些?案A.(全局參數(shù)、channel,閉包)Q.gmp當(dāng)?個(gè)g堵塞時(shí),g、m、p會(huì)發(fā)?什么A.cpu密集型:p和g分離,io密集型:p和mg分離創(chuàng)建協(xié)程的過(guò)程知道嗎A.Q.線程池是核?態(tài)還是?戶態(tài)創(chuàng)建的?A.線程的切換是在核?態(tài)嗎?A.g會(huì)怎么處理A.放全局隊(duì)列Q.go調(diào)度中阻塞都有那些?式A.通道,睡眠,Q.?goroutine退出,如何使得?goroutine也退出?A.context兩個(gè)協(xié)程,其中?個(gè)協(xié)程在死循環(huán),會(huì)發(fā)?什么A.p和g分離,g放在全局隊(duì)列Q.?Channel和兩個(gè)協(xié)程實(shí)現(xiàn)數(shù)組相加A.?協(xié)程實(shí)現(xiàn)順序打印123A>goroutineA.實(shí)現(xiàn)?個(gè)協(xié)程池,?概?什么實(shí)現(xiàn)A.goroutineA.Qgo??goroutine創(chuàng)建數(shù)量有限制嗎?A.?持哪些并發(fā)機(jī)制A.服務(wù)能開(kāi)多少個(gè)m由什么決定A.Q.開(kāi)多少個(gè)p由什么決定A.和p是什么樣的關(guān)系A(chǔ).同時(shí)啟了?萬(wàn)個(gè)g,如何調(diào)度的?A.goroutine的返回值,如何區(qū)別他們A.創(chuàng)建數(shù)量有限制嗎?A.G會(huì)不會(huì)饑餓,為什么?P的數(shù)量是多少?能修改嗎?M的數(shù)量是多少?A.1:1嗎?如果?個(gè)G阻塞了會(huì)怎么樣?A.?chan、sync包A.讀請(qǐng)求,剩余900個(gè)寫(xiě)協(xié)程阻塞了,如何設(shè)計(jì)避免阻塞?A.低優(yōu)先級(jí)任務(wù),其他為?優(yōu)先級(jí)任務(wù),雙核CPU如何調(diào)度最為?效。A.Q.協(xié)程與線程區(qū)別?為什么快,快在哪了??定義了4個(gè)偽寄存器fpspsbpc,輕量,初始2KB動(dòng)態(tài)伸縮,由runtime管理,對(duì)os透明等等各種原因,?說(shuō)了以下gmp調(diào)度的優(yōu)勢(shì)。追問(wèn)寄存器是什么,你對(duì)寄存器還有什么了解。我說(shuō)了?點(diǎn)關(guān)于go和c在寄存器??使?的不同,函數(shù)傳參,調(diào)?堆棧等等,扯了點(diǎn)匯編區(qū)別,就?問(wèn)了?個(gè)匯編指令,過(guò)了并發(fā)GMP版本迭代的過(guò)程?說(shuō)說(shuō)如何避免全局隊(duì)列饑餓?A.問(wèn):stack??保存什么?答:method棧幀,pc,局部變量。問(wèn):局部變量是什么?應(yīng)該不會(huì)保存在stack??吧?答:java分配對(duì)象內(nèi)存是在堆??的,你可以理解為?個(gè)指針。問(wèn):協(xié)程怎么停頓?答:拋異常造成suspend,保存現(xiàn)場(chǎng)。問(wèn):協(xié)程為什么?效?答:避免內(nèi)核中線程的上下?切換、協(xié)程數(shù)據(jù)更輕量。問(wèn):還有嗎?等了?會(huì)我沒(méi)思路,然后?試官??說(shuō)了其實(shí)還有?個(gè),線程是可以隨時(shí)發(fā)?上下?切換的,?協(xié)程是需要在固定位置顯式切換的,所以保存上下?更輕量。Q.什么時(shí)候?多線程,什么時(shí)候?多進(jìn)程A.Q.IO密集型和CPU密集型如何分配線程優(yōu)先級(jí)A.Q.go語(yǔ)?的并發(fā)問(wèn)題,?試官輸?了?段代碼:funcmain(){fori:=0;i<10;i++{gofmt.Println(i)}}A.主協(xié)程睡眠的情況下是亂序。?定會(huì)輸出0-9的數(shù)字。原因在于i傳參了。不睡眠就沒(méi)輸出。Q.Go的協(xié)程可以不可以??讓出cpuA.runtime.Gosched()Q.Go的協(xié)程可以只掛在?個(gè)線程上?嗎P。runtime.GOMAXPROCS(1)Q.?個(gè)協(xié)程掛起換?另外?個(gè)協(xié)程是什么過(guò)程?A.Q.Go???個(gè)協(xié)程能保證綁定在?個(gè)內(nèi)核線程上?的。A.Q.如何讓n個(gè)線程執(zhí)?完后?起結(jié)束A.sync.WaitGroupchannelQ.在IO密集型場(chǎng)景下,可以適當(dāng)調(diào)?P的數(shù)量A.在IO密集型場(chǎng)景下,可以適當(dāng)調(diào)?P的數(shù)量通道創(chuàng)建chansend1,chanrecv1對(duì)?個(gè)關(guān)閉的通道再發(fā)送值就會(huì)導(dǎo)致panic。對(duì)?個(gè)關(guān)閉的通道進(jìn)?接收會(huì)?直獲取值直到通道為空。操作 nilchannel操作 nilchannelclosedchannelnotnil,notclosedchannelclosepanicpanic正常關(guān)閉讀<-ch阻塞讀到對(duì)應(yīng)類型的零值channelchannel寫(xiě)ch<-阻塞panic阻塞或正常寫(xiě)?數(shù)據(jù)。?緩沖型channel沒(méi)有等待接收者或緩沖型channelbuf滿時(shí)會(huì)被阻塞數(shù)據(jù)交流:當(dāng)作并發(fā)的buffer或者queue,解決?產(chǎn)者-消費(fèi)者問(wèn)題。多個(gè)goroutine可以并發(fā)當(dāng)作?產(chǎn)者(Producer)和消費(fèi)者(Consumer)。數(shù)據(jù)傳遞:?個(gè)goroutine將數(shù)據(jù)交給另?個(gè)goroutine,相當(dāng)于把數(shù)據(jù)的擁有權(quán)(引?)托付出去。信號(hào)通知:?個(gè)goroutine可以將信號(hào)(closing、closed、dataready等)傳遞給另?個(gè)或者另?組goroutine。任務(wù)編排:可以讓?組goroutine按照?定的順序并發(fā)或者串?的執(zhí)?,這就是編排的功能。鎖:利?Channel也可以實(shí)現(xiàn)互斥鎖的機(jī)制。Q.優(yōu)雅關(guān)閉channel?A.如果sender(發(fā)送者)只是唯?的sender或者是channel最后?個(gè)活躍的sender,那么你應(yīng)該在sender的goroutine關(guān)閉channel不要從?個(gè)receiver側(cè)關(guān)閉channel,也不要在有多個(gè)sender時(shí),關(guān)閉channel。sync.Once封裝close?法根據(jù)sender和receiver的個(gè)數(shù),分下??種情況:?個(gè)sender,?個(gè)receiver?個(gè)sender,M個(gè)receiverN個(gè)sender,?個(gè)reciverN個(gè)sender,M個(gè)receiver對(duì)于1,2,只有?個(gè)sender的情況就不?說(shuō)了,直接從sender端關(guān)閉就好了,沒(méi)有問(wèn)題。重點(diǎn)關(guān)注第3,4種情況。第3種情況,解決?案就是增加?個(gè)傳遞關(guān)閉信號(hào)的channel,receiver通過(guò)信號(hào)channel下達(dá)關(guān)閉數(shù)據(jù)channel指令。senders監(jiān)聽(tīng)到關(guān)閉信號(hào)后,停?發(fā)送數(shù)據(jù)。并不主動(dòng)關(guān)閉。Q.?go擼?個(gè)?產(chǎn)者消費(fèi)型,?channel通信,怎么友好的關(guān)閉chan.Q.有?道經(jīng)典的使?Channel進(jìn)?任務(wù)編排的題,你可以嘗試做?下:有四個(gè)goroutine,編號(hào)為1、2、3、4。每秒鐘會(huì)有?個(gè)goroutine打印出它??的編號(hào),要求你編寫(xiě)?個(gè)程序,讓輸出的編號(hào)總是按照1、2、3、4、1、2、3、4、……的順序打印出來(lái)。Q.開(kāi)倆個(gè)協(xié)程,?個(gè)協(xié)程?產(chǎn)數(shù)據(jù),另?個(gè)協(xié)程對(duì)數(shù)據(jù)進(jìn)?處理,處理完后再把數(shù)據(jù)發(fā)回去,使?管道如何實(shí)現(xiàn)?Q.channel實(shí)現(xiàn)原理,為什么不?加鎖?關(guān)閉以后,再往其發(fā)送或接收,會(huì)發(fā)?什么Q.連續(xù)關(guān)閉兩次管道會(huì)發(fā)?什么Q.如何判斷channel是否關(guān)閉?Q.channel底層實(shí)現(xiàn):buf,sendx,recvx,lock,sendq,recvq;hchan結(jié)構(gòu)體并發(fā)安全:CSPchannel通信加鎖Q.Channel的阻塞和?阻塞(順帶問(wèn)了select?法)Q.channel了解嗎,channel的?作原理是什么?對(duì)已經(jīng)關(guān)閉的channel進(jìn)?讀寫(xiě)操作會(huì)發(fā)?什么Q.channel的實(shí)現(xiàn)原理?答了環(huán)形隊(duì)列,被追問(wèn)為什么?環(huán)形隊(duì)列Q.寫(xiě)個(gè)channel相關(guān)的題,并發(fā)模型,爬?url,控制并發(fā)量Q.關(guān)閉channel有什么作??Q.被close的channel會(huì)有什么問(wèn)題Q.分布式鎖知道哪些??channel如何實(shí)現(xiàn)?來(lái)計(jì)數(shù),再開(kāi)啟?個(gè)協(xié)程wg.wait()監(jiān)聽(tīng)所有?產(chǎn)者。?試官說(shuō)不是他想要的。是想要atomic來(lái)計(jì)數(shù)嗎?求?佬解惑。?試超時(shí)反問(wèn)時(shí)沒(méi)時(shí)間問(wèn)了。。)Q.?寫(xiě)?產(chǎn)者消費(fèi)者模型Q.寫(xiě)多?產(chǎn)者多消費(fèi)者模型延遲Q.如何處理異常deferdefer進(jìn)?解鎖和???動(dòng)解鎖有什么區(qū)別?Q.defer函數(shù)的使?場(chǎng)景(延遲Close、recoverpanic)Q.defer的執(zhí)?順序?Q.go語(yǔ)?的panic如何恢復(fù)Q.defer關(guān)鍵字后的函數(shù)在什么時(shí)候調(diào)?主函數(shù)return前還是return后:defer的執(zhí)?順序在return之后,但是在返回值返回給調(diào)??之前,所以使?defer可以達(dá)到修改返回值的?的。Q.deferA;deferB;deferpanic("")A和B能不能執(zhí)?到Q.defer的執(zhí)?流程Q.怎么保存在程序崩潰時(shí)的數(shù)據(jù),當(dāng)時(shí)沒(méi)理解到,我覺(jué)得是(defer+reciver)切?切?結(jié)構(gòu)typeslicestruct{arrayunsafe.Pointer//指針lenint//長(zhǎng)度capint//容量}//AnnotInHeapSliceisaslicebackedbygo:notinheapmemory.typenotInHeapSlicestruct{array*notInHeap//指針lenint//長(zhǎng)度capint//容量}//nil切?可以append//※創(chuàng)建切?funcmakeslice(et*_type,len,capint)unsafe.Pointer{//所需要分配的內(nèi)存??mem,overflow:=math.MulUintptr(et.size,uintptr(cap))//len>cap{//NOTE:Producea‘lenoutofrange’errorinsteadofa//‘capoutofrange’errorwhensomeonedoesmake([]T,bignumber).//‘capoutofrange’istruetoo,butsincethecapisonlybeing//suppliedimplicitly,sayinglenisclearer.//See/issue/4085.mem,overflow:=math.MulUintptr(et.size,uintptr(len))//}panicmakeslicecap()}}擴(kuò)容策略如果2倍容量還?于新增的容量,那就取新增的容量如果新容量?于原來(lái)容量的?倍直接?新容量。如果原來(lái)切?的容量?于1024,于是擴(kuò)容的時(shí)候就翻倍增加容量。?旦元素個(gè)數(shù)超過(guò)1024,那么增長(zhǎng)因?就變成1.25,即每次增加原來(lái)容量的四分之?。//擴(kuò)容//growslicehandlesslicegrowthduringappend.//Itispassedthesliceelementtype,theoldslice,andthedesirednewminimumcapacity,//anditreturnsanewslicewithatleastthatcapacity,withtheolddata//copiedintoit.//Thenewslice’slengthissettotheoldslice’slength,//NOTtothenewrequestedcapacity.//Thisisforcodegenconvenience.Theoldslice’slengthisusedimmediately//tocalculatewheretowritenewvaluesduringanappend.//TODO:Whentheoldbackendisgone,reconsiderthisdecision.//TheSSAbackendmightpreferthenewlengthortoreturnonlyptr/capandsavestackspace.funcgrowslice(et*_type,oldslice,capint)slice{Q.go的slice擴(kuò)容機(jī)制,slice在for?遍會(huì)改變內(nèi)容嗎Q.Slice是否線程安全Q.講下golang的slice和string底層,空slice和nil的slice區(qū)別?能直接append嗎?擴(kuò)容?Q.Golangslice不斷append,是如何給它分配內(nèi)存的?slice如果分配的capacity是10,那當(dāng)容量到多?的時(shí)候才會(huì)擴(kuò)容?8、9、10?Q.切?和數(shù)組差別Q.如何刪除slice中間的元素(s=append(s[:i],s[i+1,]…),我感覺(jué)其實(shí)就是切?的應(yīng)?。Q.Gostring底層實(shí)現(xiàn)?Q.[]byte和string互轉(zhuǎn)的?效?法Q.那你這個(gè)?unsafe.Pointer和uintptr的?案,不會(huì)有問(wèn)題嗎?string少的那個(gè)cap字段怎么填充?(我答可能GC會(huì)有點(diǎn)影響,因?yàn)閡nsafe.Pointer指向的對(duì)象不會(huì)被GC回收了)Q.string類型轉(zhuǎn)為[]byte過(guò)程發(fā)?了什么Q.slice作為函數(shù)參數(shù)怎么解決上?的問(wèn)題?Q.數(shù)組相?slice的優(yōu)點(diǎn)在哪?A.可?較編譯安全長(zhǎng)度是類型規(guī)劃內(nèi)存布局訪問(wèn)速度map使?map的2種常見(jiàn)錯(cuò)誤常見(jiàn)錯(cuò)誤?:未初始化Q.hash沖突的解決辦法有哪些?Q.項(xiàng)??的map并發(fā)怎么做?為啥?分段鎖不?sync.map?分段鎖拆了?個(gè)分??Q.hashmap數(shù)據(jù)太多rehash時(shí)間長(zhǎng)怎么解決Q.rehash時(shí)候可以getput嗎Q.golang中兩個(gè)map對(duì)象如何?較Q.哈希的實(shí)現(xiàn)有哪?種,如何取hashcode,沖突檢測(cè)?種?法Q.map遍歷的時(shí)候每次順序都是固定的嗎?為什么?Q.Map可以?數(shù)組作為Key嗎(數(shù)組可以,切?不可以)Q.如何實(shí)現(xiàn)Map的有序查找(利??個(gè)輔助slice)(sync.Map,底層實(shí)際上?了?個(gè)Map緩存)Q.擴(kuò)容機(jī)制?Q.sync.map與map的區(qū)別,怎么實(shí)現(xiàn)的【答了個(gè)?概,這個(gè)沒(méi)答好】Q.map哈希過(guò)程(講錯(cuò)了?點(diǎn)點(diǎn),忘了可能插?相同鍵不同值)Q.哈希過(guò)程是什么樣?的Q.桶的增加(這個(gè)具體還挺復(fù)雜的)Q.map中對(duì)于key的哈希是怎么計(jì)算的?然后修改這個(gè)值,原map數(shù)據(jù)的值會(huì)不會(huì)變化Q.Hash實(shí)現(xiàn)、沖突解決、應(yīng)?Q.map??解決hash沖突怎么做的,沖突了元素放在頭還是尾Q.項(xiàng)??的map并發(fā)怎么做?為啥?分段鎖不?sync.map?分段鎖拆了?個(gè)分??Q.hash沖突解決辦法,有什么弊端Q.map??解決hash沖突怎么做的,沖突了元素放在頭還是尾接?接?不能直接使?接收者為值類型的?法。Q.go??interface是什么概念Q.那你說(shuō)下interface底層實(shí)現(xiàn)Q.go語(yǔ)?中結(jié)構(gòu)體指針為空,賦給?個(gè)interface{}為什么interface不為空Q.interface不是個(gè)好的形式,會(huì)導(dǎo)致GC壓??,為啥,那?什么形式?較好反射Q.golang類型斷?,怎么?selectQ.golang的多路復(fù)?A.selectchannelQ.Go語(yǔ)?的Select與I/O多路復(fù)?的Select區(qū)別Q.select的?法,加上default?會(huì)怎么樣?context上下?信息傳遞goroutine得運(yùn)?超時(shí)控制的?法調(diào)?Q.使?WithCancel和WithValue寫(xiě)?個(gè)級(jí)聯(lián)的使?Context的例?,驗(yàn)證?下parentContext被cancel后,?conext是否也?刻被cancel了。Q.問(wèn)了context的作?,哪些場(chǎng)景使?過(guò)context?Q.context包內(nèi)部如何實(shí)現(xiàn)的?Q.go怎么控制查詢timeout(context)Q.context包的?途?Q.Context包的作?編譯時(shí)做接?檢查(PSE.gvar_InterfaceName(*TypeName)(nil))運(yùn)?時(shí)做接?檢查(PSE.g_okTypeName.(InterfaceName))heaplistring(我聽(tīng)到這個(gè)問(wèn)題懵了?下?然后就基于ListNode和List結(jié)構(gòu)體,說(shuō)了?下,然后在List結(jié)構(gòu)體?保存頭尾指針這樣)B站app的頁(yè)?分區(qū)怎么設(shè)計(jì)(這個(gè)?開(kāi)始沒(méi)想到應(yīng)該怎么回答,最后回答的是數(shù)據(jù)庫(kù)表的設(shè)計(jì),主鍵和外鍵)同步庫(kù)條件變量CondQ.?個(gè)Cond的waiter被喚醒的時(shí)候,為什么需要再檢查等待條件,?不是喚醒后進(jìn)?下?步?Q.你能否利?Cond實(shí)現(xiàn)?個(gè)容量有限的queue?映射Q.為什么sync.Map中的集合核??法的實(shí)現(xiàn)中,如果read中項(xiàng)?不存在,加鎖后還要雙檢查,再檢查?次read?Q.你看到sync.map元素刪除的時(shí)候只是把它的值設(shè)置為nil,那么什么時(shí)候這個(gè)key才會(huì)真正從map對(duì)象中刪除?鎖gorun-racecounter.go開(kāi)啟了race的程序部署在線上,還是?較影響性能的。運(yùn)?gotoolcompile-race-Scounter.go,可以查看計(jì)數(shù)器例?的代碼,重點(diǎn)關(guān)注?下count++前后的編譯后的代碼在編譯的代碼中,增加了runtime.racefuncenter、runtime.raceread、runtime.racewrite、runtime.racefuncexit等檢測(cè)datarace的?法。通過(guò)這些插?的指令,Goracedetector?具就能夠成功地檢測(cè)出datarace問(wèn)題了互斥量typetypeMutexstructstateint32semauint32}const(mutexLocked=1<<iota//持有鎖的標(biāo)記mutexWoken//喚醒標(biāo)記mutexStarving//從state字段中分出?個(gè)饑餓標(biāo)記mutexWaiterShift//阻塞等待的waiter數(shù)量starvationThresholdNs=1e6)Q.?前Mutex的state字段有?個(gè)意義,這?個(gè)意義分別是由哪些字段表?的?A.可重?鎖,try鎖(通過(guò)unsafe的?式讀取到Mutex內(nèi)部的state字段,),需要?動(dòng)實(shí)現(xiàn)Q.等待?個(gè)Mutex的goroutine數(shù)最?是多少?是否能滿?現(xiàn)實(shí)的需求?Q.常見(jiàn)的4種錯(cuò)誤場(chǎng)景Lock/Unlock不是成對(duì)出現(xiàn)2.CopyMutexgovetGo4.死鎖過(guò)Go運(yùn)?時(shí)?帶的死鎖檢測(cè)?具,或者是第三?的?具(?如Gopprof?具分析,它提供了?個(gè)blockprofiler監(jiān)控阻塞的Q.如何實(shí)現(xiàn)可重?鎖??案?:通過(guò)hacker的?式獲取到goroutineid,記錄下獲取鎖的goroutineid,它可以實(shí)現(xiàn)Locker接?。runtime.Stack?法獲取棧幀信息,棧幀信息?包含goroutineid。petermattis/goid也可以獲取goid?案?:調(diào)?Lock/Unlock?法時(shí),由goroutine提供?個(gè)token,?來(lái)標(biāo)識(shí)它??,?不是我們通過(guò)hacker的?式獲取到goroutineid,但是,這樣?來(lái),就不滿?Locker接?了。//goget-u/petermattis/goid//goget-u/petermattis/goid//RecursiveMutex包裝?個(gè)Mutex,實(shí)現(xiàn)可重?typeRecursiveMutexstruct{sync.Mutexowner int64//goroutineidrecursionint32//這個(gè)goroutine重?的次數(shù)}func(m*RecursiveMutex)Lock(){gid:=goid.Get()//如果當(dāng)前持有鎖的goroutine就是這次調(diào)?的goroutine,說(shuō)明是重?ifatomic.LoadInt64(&m.owner)==gid{m.recursion++return}m.Mutex.Lock()//獲得鎖的goroutine第?次調(diào)?,記錄下它的goroutineid,調(diào)?次數(shù)加1atomic.StoreInt64(&m.owner,gid)m.recursion=1}func(m*RecursiveMutex)Unlock(){gid:=goid.Get()//?持有鎖的goroutine嘗試釋放鎖,錯(cuò)誤的使?ifatomic.LoadInt64(&m.owner)!=gid{panic(fmt.Sprintf("wrongtheowner(%d):%d!",m.owner,gid))}//1m.recursion--ifm.recursion!=0{//如果這個(gè)goroutine還沒(méi)有完全釋放,則直接返回return}//此goroutine最后?次調(diào)?,需要釋放鎖atomic.StoreInt64(&m.owner,-1)m.Mutex.Unlock()}//Token//Token?式的遞歸鎖typeTokenRecursiveMutexstruct{sync.Mutextoken int64recursion}//請(qǐng)求鎖,需要傳?tokenfunc(m*TokenRecursiveMutex)Lock(tokenint64){ifatomic.LoadInt64(&m.token)==token{//如果傳?的token和持有鎖的token?致,m.recursion++return}m.Mutex.Lock()//傳?的token不?致,說(shuō)明不是遞歸調(diào)?//搶到鎖之后記錄這個(gè)tokenatomic.StoreInt64(&m.token,token)m.recursion=1}//釋放鎖func(m*TokenRecursiveMutex)Unlock(tokenint64){ifatomic.LoadInt64(&m.token)!=token{//釋放其它token持有的鎖panic(fmt.Sprintf("wrongtheowner(%d):%d!",m.token,token))}m.recursion--//token釋放鎖ifm.recursion!=0{//還沒(méi)有回退到最初的遞歸調(diào)?return}atomic.StoreInt64(&m.token,0)//沒(méi)有遞歸調(diào)?了,釋放鎖m.Mutex.Unlock()}Q.你可以為Mutex獲取鎖時(shí)加上Timeout機(jī)制嗎?會(huì)有什么問(wèn)題嗎?Q.互斥鎖的底層實(shí)現(xiàn)Q.go中的互斥鎖:正常、饑餓狀態(tài),讀寫(xiě)鎖中寫(xiě)操作如何阻?讀操作?Q.go的鎖是可重?的嗎?Q.獲取不到鎖會(huì)?直等待嗎?timeout的鎖?Q.讀寫(xiě)鎖說(shuō)下Q.?鎖編程Q.寫(xiě)?個(gè)會(huì)產(chǎn)?死鎖的代碼Q.sync.Map的使?,與??寫(xiě)的阻塞鎖有什么區(qū)別?那個(gè)更快Q.golang中的CAS問(wèn)題Q.sync包了解嗎Q.syncpool的實(shí)現(xiàn)原理Q.golang中的CAS問(wèn)題讀寫(xiě)鎖readers-writers問(wèn)題讀優(yōu)先的設(shè)計(jì)可以提供很?的并發(fā)性,但是,在競(jìng)爭(zhēng)激烈的情況下Write-preferring:寫(xiě)優(yōu)先的設(shè)計(jì)意味著,如果已經(jīng)有?個(gè)writer在等待請(qǐng)求鎖的話,它會(huì)阻?新來(lái)的請(qǐng)求鎖的reader獲取到鎖,所以優(yōu)先保障writer。當(dāng)然,如果有?些reader已經(jīng)請(qǐng)求了鎖的話,新請(qǐng)求的writer也會(huì)等待已經(jīng)存在的reader都釋放鎖之后才能獲取。所以,寫(xiě)優(yōu)先級(jí)設(shè)計(jì)中的優(yōu)先權(quán)是針對(duì)新來(lái)的請(qǐng)求??的。這種設(shè)計(jì)主要避免了writer的饑餓問(wèn)題。不指定優(yōu)先級(jí):這種設(shè)計(jì)?較簡(jiǎn)單,不區(qū)分reader和writer優(yōu)先級(jí),某些場(chǎng)景下這種不指定優(yōu)先級(jí)的設(shè)計(jì)反?更有效,因?yàn)榈?類優(yōu)先級(jí)會(huì)導(dǎo)致寫(xiě)?zhàn)囸I,第?類優(yōu)先級(jí)可能會(huì)導(dǎo)致讀饑餓,這種不指定優(yōu)先級(jí)的訪問(wèn)不再區(qū)分讀寫(xiě),?家都是同?個(gè)優(yōu)先級(jí),解決了饑餓的問(wèn)題。typeRWMutextypeRWMutexstruct{wMutex//互斥鎖解決多個(gè)writer的競(jìng)爭(zhēng)writerSemuint32//writer信號(hào)量readerSemuint32//reader信號(hào)量readerCountint32//reader的數(shù)量readerWaitint32//writer等待完成的reader的數(shù)量}constrwmutexMaxReaders=1<<30不可復(fù)制重?導(dǎo)致死鎖釋放未加鎖的RWMutex單例Once//Onceisanobjectthatwillperformexactlyoneaction.//Onceisanobjectthatwillperformexactlyoneaction.////AOncemustnotbecopiedafterfirstuse.typeOncestruct{//doneindicateswhethertheactionhasbeenperformed.//Itisfirstinthestructbecauseitisusedinthehotpath.//Thehotpathisinlinedateverycallsite.//Placingdonefirstallowsmorecompactinstructionsonsomearchitectures(amd64/386),//andfewerinstructions(tocalculateoffset)onotherarchitectures.doneuint32mMutex}////?個(gè)功能更加強(qiáng)?的OncetypeOncestruct{msync.Mutexdoneuint32}//ferror,如果初始化失敗,需要返回失敗error//Do?法會(huì)把這個(gè)error返回給調(diào)?者func(o*Once)Do(ffunc()error)error{ifatomic.LoadUint32(&o.done)==1{//fastpathreturnnil}returno.slowDo(f)}//如果還沒(méi)有初始化func(o*Once)slowDo(ffunc()error)error{o.m.Lock()defero.m.Unlock()varerrerrorifo.done==0{//雙檢查,還沒(méi)有初始化err=f()iferr==nil{//初始化成功才將標(biāo)記置為已初始化atomic.StoreUint32(&o.done,1)}}returnerr}第?種錯(cuò)誤:死鎖.once。Do嵌套第?種錯(cuò)誤:未初始化Q.我已經(jīng)分析了?個(gè)并發(fā)原語(yǔ)的實(shí)現(xiàn),你可能注意到總是有些slowXXXX的?法,從XXXX?法中單獨(dú)抽取出來(lái),你明?為什么要這么做嗎,有什么好處?Q.Once在第?次使?之后,還能復(fù)制給其它變量使?嗎?池bytebufferpooloxtoacart/bpool連接池標(biāo)準(zhǔn)庫(kù)中的httpclient池TCP連接池MemcachedClient連接池WorkerPool等待組WaitGroup,相當(dāng)于java中的CountDownLatchAdd,?來(lái)設(shè)置WaitGroup的計(jì)數(shù)值;typeWaitGrouptypeWaitGroupstruct{//避免復(fù)制使?的?個(gè)技巧,可以告vet?具違反了復(fù)制使?的規(guī)則noCopynoCopy//64bit(8bytes)的值分成兩段,?32bit是計(jì)數(shù)值,低32bit是waiter的計(jì)數(shù)//另外32bit是?作信號(hào)量的//因?yàn)?4bit值的原?操作需要64bit對(duì)齊,但是32bit編譯器不?持,所以數(shù)組中的元素在不同的//總之,會(huì)找到對(duì)齊的那64bit作為state,其余的32bit做信號(hào)量state1[3]uint32}常見(jiàn)問(wèn)題?:計(jì)數(shù)器設(shè)置為負(fù)值常見(jiàn)問(wèn)題?:計(jì)數(shù)器設(shè)置為負(fù)值第?種?法是:調(diào)?Add的時(shí)候傳遞?個(gè)負(fù)數(shù)第?個(gè)?法是:調(diào)?Done?法的次數(shù)過(guò)多,超過(guò)了WaitGroup的計(jì)數(shù)值。常見(jiàn)問(wèn)題?:不期望的Add時(shí)機(jī)常見(jiàn)問(wèn)題三:前?個(gè)Wait還沒(méi)結(jié)束就重?WaitGroupnoCopy:輔助vet檢查Q.通常我們可以把WaitGroup的計(jì)數(shù)值,理解為等待要完成的waiter的數(shù)量。你可以試著擴(kuò)展下WaitGroup,來(lái)查詢WaitGroup的當(dāng)前的計(jì)數(shù)值嗎?timertime/tick.gotime/sleep.go和runtimeTimertick多了periodQ.while(tree){sleep(1)}這個(gè)會(huì)有什么問(wèn)題Q.sleep底層實(shí)現(xiàn)原理設(shè)計(jì)模式Q.介紹除了單例與??模式外的設(shè)計(jì)模式(消費(fèi)者模式)grpcQ.grpc?的什么協(xié)議?流式rpc是怎么處理的?Q.RPC是基于TCP和UDP?數(shù)據(jù)傳輸過(guò)程中的簡(jiǎn)單流程?是怎樣的?框架Q.看我有使?Kratos框架,問(wèn)這個(gè)框架有哪些特性?Q.Gin框架如何保證并發(fā)請(qǐng)求消息準(zhǔn)確不出錯(cuò)?Q.說(shuō)到了protobuf問(wèn)為什么protobuf這么快底層有去了解過(guò)嗎你覺(jué)得解決了什么問(wèn)題Q.?go寫(xiě)的rpc框架的具體功能細(xì)節(jié),注冊(cè)中?單機(jī)還是分布式的,其中?個(gè)掛了怎么辦??致性,可靠性怎么保證的。超時(shí)控制,加鎖和管道?持并發(fā),單機(jī)(考慮了多機(jī)情況,說(shuō)了已經(jīng)在todo?了)。Q.Go+QML利?cgo實(shí)現(xiàn)的跨平臺(tái)桌?應(yīng)?功能,場(chǎng)景,為什么要寫(xiě)這個(gè)東西?我說(shuō)為了性能,追問(wèn)性能如何體現(xiàn),如何測(cè)試的,如何優(yōu)化。答宏觀上從任務(wù)管理器,top中看,細(xì)節(jié)上從pprof進(jìn)?性能定位調(diào)優(yōu),從?焰圖上看。追問(wèn)pprof還有什么功能,你?般是怎么定位問(wèn)題的?回答還是先具體再細(xì)節(jié)。Q.項(xiàng)?的RPC怎么實(shí)現(xiàn)的;如何保證數(shù)據(jù)不丟包;數(shù)據(jù)存儲(chǔ);Q.protobuf為什么快Q.grpc和jsonrpc的優(yōu)劣Q.Rpc協(xié)議?般如何做序列化?grpc是怎么做的??絡(luò)epoll,nonblockpprof,trace,race檢測(cè)dlvgo語(yǔ)?調(diào)試?yán)鱣obuild--gcflags="-l-N"-ohelloworld//去掉優(yōu)化的編譯objdump-dhelloworld>att.asm//反匯編成AT&T匯編gotoolobjdump-Shelloworld>plan9.asm//反匯編成Plan9匯編Q.組合式繼承g(shù)otoolcompile-l-pmainmain.gogotoolnmmain.oQ.go有什么的缺陷,你怎么看A.?泛型,錯(cuò)誤處理
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度交通行業(yè)勞務(wù)派遣管理規(guī)范范本2篇
- 自愿性與強(qiáng)制性之間-中國(guó)農(nóng)村合作醫(yī)療的制度嵌入性與可持續(xù)性發(fā)展分析
- 臨床胸腔閉式引流護(hù)理要點(diǎn)
- 陜西省寶雞市鳳翔區(qū)2024-2025學(xué)年八年級(jí)上學(xué)期期末質(zhì)量檢測(cè)地理試卷(含答案)
- 二零二五年度擔(dān)保合同標(biāo)的特性與案例分析3篇
- 二零二五年度商鋪?zhàn)赓U合同-含環(huán)保材料及綠色裝修2篇
- Unit7 How much?(說(shuō)課稿)-2024-2025學(xué)年譯林版(三起)英語(yǔ)四年級(jí)上冊(cè)
- 二零二五年度房地產(chǎn)經(jīng)紀(jì)實(shí)務(wù)培訓(xùn)第二十六講經(jīng)紀(jì)機(jī)構(gòu)品牌建設(shè)合同3篇
- 貴州盛華職業(yè)學(xué)院《生物醫(yī)學(xué)信號(hào)檢測(cè)與處理》2023-2024學(xué)年第一學(xué)期期末試卷
- 新疆塔城地區(qū)(2024年-2025年小學(xué)六年級(jí)語(yǔ)文)部編版質(zhì)量測(cè)試(上學(xué)期)試卷及答案
- 2025年首都機(jī)場(chǎng)地服公司招聘筆試參考題庫(kù)含答案解析
- 《廉政講堂格言》課件
- 2024年03月中國(guó)農(nóng)業(yè)發(fā)展銀行內(nèi)蒙古分行校園招考擬招錄人員筆試歷年參考題庫(kù)附帶答案詳解
- 空置房檢查培訓(xùn)
- 浙江省紹興市越城區(qū)2023-2024學(xué)年四年級(jí)上學(xué)期數(shù)學(xué)期末考試試卷
- 廣東省廣州市海珠區(qū)2023-2024學(xué)年九年級(jí)上學(xué)期期末英語(yǔ)試題(答案)
- ISO 56001-2024《創(chuàng)新管理體系-要求》專業(yè)解讀與應(yīng)用實(shí)踐指導(dǎo)材料之8:“5領(lǐng)導(dǎo)作用-5.2創(chuàng)新方針”(雷澤佳編制-2025B0)
- 金科新未來(lái)大聯(lián)考2025屆高三12月質(zhì)量檢測(cè)語(yǔ)文試題(含答案解析)
- 烤煙科技員考試題答案
- 《地下水環(huán)境背景值統(tǒng)計(jì)表征技術(shù)指南(試行)》
- 高職院校智能制造實(shí)驗(yàn)室實(shí)訓(xùn)中心建設(shè)方案
評(píng)論
0/150
提交評(píng)論