## 1\. 寫出以下邏輯,要求每秒鐘調用一次 proc 并保證程序不退出?
~~~go
package main
func main() {
go func() {
// 1 在這里需要你寫算法
// 2 要求每秒鐘調用一次proc函數
// 3 要求程序不能退出
}()
select {}
}
func proc() {
panic("ok")
}
~~~
**解析**
題目主要考察了兩個知識點:
1. 定時執行執行任務
2. 捕獲 panic 錯誤
題目中要求每秒鐘執行一次,首先想到的就是`time.Ticker`對象,該函數可每秒鐘往`chan`中放一個`Time`,正好符合我們的要求。
在`golang`中捕獲`panic`一般會用到`recover()`函數。
~~~go
package main
import (
"fmt"
"time"
)
func main() {
go func() {
// 1 在這里需要你寫算法
// 2 要求每秒鐘調用一次proc函數
// 3 要求程序不能退出
t := time.NewTicker(time.Second * 1)
for {
select {
case <-t.C:
go func() {
defer func() {
if err := recover(); err != nil {
fmt.Println(err)
}
}()
proc()
}()
}
}
}()
select {}
}
func proc() {
panic("ok")
}
~~~
- Golnag常見面試題目解析
- 交替打印數組和字母
- 判斷字符串中字符是否全都不同
- 翻轉字符串
- 判斷兩個給定的字符串排序后是否一致
- 字符串替換問題
- 機器人坐標計算
- 語法題目一
- 語法題目二
- goroutine和channel使用一
- 實現阻塞讀的并發安全Map
- 定時與 panic 恢復
- 高并發下的鎖與map讀寫問題
- 為 sync.WaitGroup 中Wait函數支持 WaitTimeout 功能.
- 七道語法找錯題目
- golang 并發題目測試
- 記一道字節跳動的算法面試題
- 多協程查詢切片問題
- 對已經關閉的的chan進行讀寫,會怎么樣?為什么?
- 簡單聊聊內存逃逸?
- 字符串轉成byte數組,會發生內存拷貝嗎?
- http包的內存泄漏