答案會(huì)在后續(xù)更新
cch關(guān)于知乎go面試題的部分答案:https://xargin.com/answers-for-some-interview-questions/
進(jìn)程、線程、協(xié)程扭粱、goroutine區(qū)別呐矾,windows的協(xié)程和goroutine區(qū)別
go有用過什么框架或者包
go的調(diào)度、GMP什么運(yùn)行
mysql相關(guān)的golang包
redis相關(guān)的包、redigo、goredis,redis的haspmap养筒,zset原理
goroutine是連續(xù)棧,可以擴(kuò)容端姚,那么Linux線程分配的棧不能類似擴(kuò)容機(jī)制嗎
golang的包使用和原理分析晕粪,map,sync.map渐裸,container(list heap)巫湘,net/http,io昏鹃,bytes
data4000000000int尚氛,20核40線程256G內(nèi)存,怎么快速求和洞渤?大文件排序阅嘶,歸并排序,小文件再排序载迄。
linux內(nèi)存分配圖讯柔,主要是隊(duì)和棧的位置定位故障
tcp握手和揮手的流程和狀態(tài)圖,以及time_wait什么原因造成护昧,怎么定位解決
goroutine阻塞怎么診斷定位魂迄,一般什么原因造成
pprof,net/http/pprof惋耙,實(shí)時(shí)web查看相關(guān)信息捣炬,cpu、內(nèi)存绽榛,goroutine信息遥金,命令:top、list蒜田、traces、web
主要是channel leak或者其他原因选泻,可以runtime打印goroutine信息冲粤,數(shù)量及內(nèi)存
runtime三大核心組件
垃圾回收器
內(nèi)存分配器
協(xié)程調(diào)度器(并發(fā)調(diào)度)
線程美莫、協(xié)程池
ants
fasthttp使用協(xié)程池提升性能,就是使用sync.waitgroup梯捕,channel厢呵,atomic來控制go的數(shù)量
線程模型
主流線程模型主要分為三種,內(nèi)核級(jí)線程傀顾、用戶級(jí)線程襟铭、兩級(jí)線程模型(混合型線程模型)
內(nèi)核級(jí)線程:kse,由于io操作而阻塞短曾,不會(huì)影響其他線程運(yùn)行寒砖。java C++11的thread都是內(nèi)核級(jí)線程的封裝,1VS1綁定嫉拐,內(nèi)核操作創(chuàng)建銷毀線程上下問調(diào)度資源性能影響較大哩都。
用戶級(jí)線程:不能很少利用多核cpu,linux的pthred就是婉徘,用戶級(jí)線程VSKSE是(N:1)漠嵌,線程的創(chuàng)建銷毀調(diào)度都是依靠庫(kù)來實(shí)現(xiàn),一個(gè)進(jìn)程所有創(chuàng)建的線程都只和同一個(gè)KSE運(yùn)行時(shí)動(dòng)態(tài)綁定盖呼,內(nèi)核的多有調(diào)度都是基于用戶進(jìn)程儒鹿,如python的gevent庫(kù)
兩級(jí)線程模型:用戶線程和KSE是N:M,一個(gè)進(jìn)程可以和多個(gè)KSE關(guān)聯(lián)几晤,進(jìn)程中的多個(gè)線程可以分別綁定一個(gè)KSE约炎,但是不是KSE唯一綁定,可以多個(gè)用戶線程映射到同一個(gè)KSE锌仅,自身調(diào)度和系統(tǒng)調(diào)度協(xié)同工作章钾。
goroutine的生命周期
主動(dòng)退出和被動(dòng)退出
1.time.tick(1s)定時(shí)退出
2.context通知退出context.Done()
3.外部操作信號(hào)退出,signal.notify(ch热芹,SIGINT贱傀,SIGTERM)
生命周期
https://xargin.com/state-of-goroutine/
runtime。go伊脓,定義了goroutine所有狀態(tài)府寒。
上圖包含gc,去掉gc下圖报腔,去掉前綴runtime株搔。
P的狀態(tài)切換如下。
select有什么用
主要是對(duì)channel的IO監(jiān)聽纯蛾,select「」優(yōu)化成while
slice的擴(kuò)容機(jī)制纤房、slice結(jié)構(gòu)和數(shù)組,map的擴(kuò)容機(jī)制翻诉,map的有序讀扰谝獭(依靠key的有序再讀劝乒巍),slice和數(shù)組轉(zhuǎn)換
實(shí)現(xiàn)消息隊(duì)列舒岸,多生產(chǎn)者多消費(fèi)者
slice+lock绅作,channel+lock
數(shù)據(jù)庫(kù)如何建索引
git merge rebase操作
lru實(shí)現(xiàn)
日志包glog.Errorf
golang實(shí)現(xiàn)服務(wù)器高性能 tcp aocket epool,轉(zhuǎn)發(fā)蛾派。
mysql索引俄认,優(yōu)化。
redis的其他類型洪乍,zset原理等眯杏。
棧多大,系統(tǒng)等
空接口有什么用
字節(jié)對(duì)齊怎么實(shí)現(xiàn)(C語(yǔ)言系統(tǒng)層)