成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

這三個 Go 水平自測題,手寫不出來還是先老實(shí)上班吧

開發(fā) 前端
利用 select+chan+defualt 的方式,很容易實(shí)現(xiàn) TryLock、TryLockWithTimeout 的功能。具體來說就是,在 select 語句中,我們可以使用 default 實(shí)現(xiàn) TryLock,再加一個 Timer 來實(shí)現(xiàn) Timeout 的功能。

現(xiàn)在技術(shù)文章特別卷,啥啥底層都能給你分析的頭頭是道,但是分析的對不對要看作者水平,很有可能一個錯,抄他的那些人也跟著錯,因?yàn)槲乙郧翱丛创a的時候就經(jīng)常感覺自己在兩種狀態(tài)下切換:懂了 / 娘咧漏看了,這個函數(shù)干啥的。

八股文這個事兒,其實(shí)也特別考驗(yàn)面試官,如果只會一味的問八股文,那也只能說你正巧比面試的人多看點(diǎn)八股,并不能彰顯你多有水平,換個小年輕當(dāng)面試官人家也能干啊。

最近跟以前的老同事聊,他說了個他特別愛問的面試題,我覺得還是挺有水平的,既能引導(dǎo)候選人循序漸進(jìn)地展開思維,又能考察基礎(chǔ)和動手能力。

PS:老哥是83年的,以前在一個廣告平臺公司 C++,Java,安卓啥的都干過,之前當(dāng)過我領(lǐng)導(dǎo),就是他讓我剛來公司兩星期就去會議室封閉參與用 Go 重構(gòu)項目的,算是硬逼著我學(xué)了學(xué) Go。

老哥說:Go 當(dāng)初吸引人的地方不就是并發(fā)、Channel 這些嘛,其實(shí)用過后你會發(fā)現(xiàn)也就那樣,宣傳的有點(diǎn)過了,但是既然平時用 Go 開發(fā),這塊就一定得過關(guān),那怎么并發(fā)和 Channel 都考察到呢?我一般會問:"Channel 和 并發(fā)掌握的熟練吧(一般沒人會說不熟)那咱們先用 Channel 實(shí)現(xiàn)一個互斥鎖",嘿,說你呢,實(shí)現(xiàn)一下。

我心想這題我面試別人用過,我背過……,還能難倒我:先初始化一個 capacity 等于 1 的 Channel,它的“空槽”代表鎖,哪個協(xié)程能成功地把元素發(fā)送到這個 Channel,誰就獲取了這把鎖,給你上代碼:

// 使用chan實(shí)現(xiàn)互斥鎖
type Mutex struct {
ch chan struct{}
}

// 使用鎖需要初始化
func NewMutex() *Mutex {
mu := &Mutex{make(chan struct{}, 1)}
mu.ch <- struct{}{}
return mu
}

// 請求鎖,直到獲取到
func (m *Mutex) Lock() {
<-m.ch
}

// 解鎖
func (m *Mutex) Unlock() {
select {
case m.ch <- struct{}{}:
default:
panic("unlock of unlocked mutex")
}
}

老哥說:只要不是太混,這個道題都能答出來,那么接下來我一般會在這道題的基礎(chǔ)上兩個變種,首先讓候選人再擴(kuò)展一下給這個鎖實(shí)現(xiàn) TryLock 功能,TryLock 知道吧,你不是寫過兩年Java,這個用過吧,你在剛才的基礎(chǔ)上實(shí)現(xiàn)一下。

我心想:我現(xiàn)在偶爾寫Java 的時候都是把以前做的那些項目代碼翻出來抄抄,我哪能記得這么清楚,不過這個不就是嘗試獲取鎖,獲取不到返回 false 嘛。

這里再給大家解釋一下 TryLock 這個功能,下面這段話我從JavaDoc 里抄的:

tryLock() - 可輪詢獲取鎖。如果成功,則返回 true;如果失敗,則返回 false。也就是說,這個方法無論成敗都會立即返回,獲取不到鎖(鎖已被其他線程獲取)時不會一直等待。

那這個也難不倒我啊,咱們學(xué) Channel 的時候,都要學(xué)會利用 select+chan+default 的方式,避免程序阻塞住嘛,那我就套一下這個公式唄。(不過我老不寫這個,語法我給忘了,多虧GoLand 提示我半天我才寫出來,面試的時候一般在紙上寫,咱們讀者到時候記得貝貝哈)

// 嘗試獲取鎖
func (m *Mutex) TryLock() bool {
select {
case <-m.ch:
return true
default:
}
return false
}

老哥:嗯,確實(shí)是這么個解法,不過你這寫的也太慢了,算你過吧,其實(shí)我直接寫估計也寫不出來,天天開會手都生了。那好,這個變種如果能答出來,證明這個候選人基礎(chǔ)應(yīng)該還可以,Channel 使用這塊應(yīng)該都沒啥問題,那這會兒我就會再擴(kuò)展一下,讓候選人再實(shí)現(xiàn)下 TryLock 的重載方法,就是可以設(shè)置超時時間那個重載函數(shù),考察一下他定時器這塊的知識過不過關(guān),誒,我怎么把答案給說出來了,你懂我意思吧。

老哥的意思就是實(shí)現(xiàn)一下 TryWithTimeout,Java 里鎖的 Try Lock 還有個重載方法:

tryLock(long, TimeUnit) - 可定時獲取鎖。和 tryLock() 類似,區(qū)別僅在于這個方法在獲取不到鎖時會等待一定的時間,在時間期限之內(nèi)如果還獲取不到鎖,就返回 false。如果如果一開始拿到鎖或者在等待期間內(nèi)拿到了鎖,則返回 true。

因?yàn)?Go 里邊沒有重載方法這種機(jī)制咱們就只能寫個 TryWithTimeout 方法啦,剛才說了用定時器能實(shí)現(xiàn),不過這塊我也忘了怎么用了…...只好默默打開的了瀏覽器搜索,最后實(shí)現(xiàn)答案版本如下:

// 加入一個超時的設(shè)置
func (m *Mutex) LockTimeout(timeout time.Duration) bool {
timer := time.NewTimer(timeout)
select {
case <-m.ch:
timer.Stop()
return true
case <-timer.C:
}
return false
}

最后老哥看了看:嗯,看著挺像那么回事的,今天家里領(lǐng)導(dǎo)有事,我得趕緊接二公主放學(xué)了,下回再聊吧。

平時我們實(shí)際應(yīng)用時最好不要用 Channel 替代sync.Mutex,但是用 Channel 確實(shí)除了實(shí)現(xiàn)互斥鎖的功能外,還能擴(kuò)充出TryLocK和LockTimeout這些擴(kuò)展功能。

利用 select+chan+defualt? 的方式,很容易實(shí)現(xiàn) TryLock、TryLockWithTimeout? 的功能。具體來說就是,在 select? 語句中,我們可以使用 default? 實(shí)現(xiàn) TryLock?,再加一個 Timer? 來實(shí)現(xiàn) Timeout 的功能。

責(zé)任編輯:武曉燕 來源: 網(wǎng)管叨bi叨
相關(guān)推薦

2023-10-26 07:29:06

mongodb十六進(jìn)制ID

2010-08-17 22:20:20

HCNE網(wǎng)絡(luò)工程師

2011-04-28 10:32:02

PHP自測

2010-08-17 22:51:02

HCNE網(wǎng)絡(luò)工程師

2010-08-17 22:32:57

HCNE網(wǎng)絡(luò)工程師

2023-02-07 13:51:11

SQLupdate語句

2021-02-06 12:28:53

低代碼開發(fā)者數(shù)字化

2021-04-16 09:17:39

機(jī)器學(xué)習(xí)人工智能AI

2017-01-06 10:07:39

Linuxwindowsatime

2017-11-02 13:15:18

Linux

2018-04-28 11:03:58

2023-11-07 08:36:34

JavaScriptJS挑戰(zhàn)

2022-03-30 14:19:36

云安全云計算風(fēng)險

2015-09-23 09:48:04

2021-10-15 08:32:03

RocketMQ數(shù)據(jù)結(jié)構(gòu)架構(gòu)

2020-05-29 10:18:58

python開發(fā)代碼

2022-06-01 11:52:42

網(wǎng)站客戶端網(wǎng)絡(luò)

2020-10-09 11:30:07

Redis緩存數(shù)據(jù)庫

2021-03-30 15:10:50

Java序列化

2020-04-16 14:53:39

JavaScript開發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 成人免费观看视频 | 九九精品在线 | 欧美激情综合 | 国产精品永久免费视频 | 亚av在线 | 毛片一级黄色 | 日本高清视频在线播放 | 久久婷婷国产香蕉 | 免费国产黄网站在线观看视频 | 欧美二区乱c黑人 | 欧美精品一区二区三区在线 | 成人在线精品视频 | h视频免费在线观看 | 亚洲欧洲一区二区 | 日韩国产精品一区二区三区 | 99精品国自产在线观看 | 日本免费一区二区三区 | 玖玖久久| 久久久久国产一区二区三区四区 | 久久大陆 | 亚洲顶级毛片 | 精品乱码一区二区 | 亚洲欧美另类在线观看 | 欧美日产国产成人免费图片 | 色视频成人在线观看免 | 中文字幕在线观 | 一区欧美 | 欧美日本韩国一区二区 | 成人免费视频网站在线看 | 一区二区三区亚洲 | 日韩在线免费播放 | 久久久精品一区 | 亚洲视频在线免费观看 | 日本视频免费观看 | 国产精品国产a级 | 爱爱视频在线观看 | 国产精品久久久久久久粉嫩 | 国产精品视频一区二区三区不卡 | 亚洲一二视频 | 国产精品18久久久 | 午夜精品一区二区三区在线观看 |