## 一、go struct能不能比較
~~~
因為是強類型語言,所以不同類型的結構不能作比較,但是同一類型的實例值是可以比較的,實例不可以比較,因為是指針類型
~~~
## 二、go defer(for defer),先進后出,后進先出
~~~
func b() {
for i := 0; i < 4; i++ {
defer fmt.Print(i)
}
}
~~~
## 三、select可以用于什么,常用語gorotine的完美退出
~~~
golang 的 select 就是監聽 IO 操作,當 IO 操作發生時,觸發相應的動作
每個case語句里必須是一個IO操作,確切的說,應該是一個面向channel的IO操作
~~~
## 四、client如何實現長連接
~~~
server是設置超時時間,for循環遍歷的
~~~
## 五、主協程如何等其余協程完再操作
~~~
1、使用channel進行通信,context,select
~~~
2、Go提供了更簡單的方法——使用`sync.WaitGroup`。`WaitGroup`,就是用來等待一組操作完成的。`WaitGroup`內部實現了一個計數器,用來記錄未完成的操作個數.
它提供了三個方法,`Add()`用來添加計數。`Done()`用來在操作結束時調用,使計數減一。`Wait()`用來等待所有的操作結束,即計數變為0,該函數會在計數不為0時等待,在計數為0時立即返回。
```
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
wg.Add(2) // 因為有兩個動作,所以增加2個計數
go func() {
fmt.Println("Goroutine 1")
wg.Done() // 操作完成,減少一個計數
}()
go func() {
fmt.Println("Goroutine 2")
wg.Done() // 操作完成,減少一個計數
}()
wg.Wait() // 等待,直到計數為0
}
```
執行結果:
```
Goroutine 2
Goroutine 1
```
## 六、slice,len,cap,共享,擴容
~~~
append函數,因為slice底層數據結構是,由數組、len、cap組成,所以,在使用append擴容時,會查看數組后面有沒有連續內存快,有就在后面添加,沒有就重新生成一個大的素組
~~~
## 七、map如何順序讀取
~~~
map不能順序讀取,是因為他是無序的,想要有序讀取,首先的解決的問題就是,把key變為有序,所以可以把key放入切片,對切片進行排序,遍歷切片,通過key取值。
~~~
## 八、http get跟head
~~~
HEAD和GET本質是一樣的,區別在于HEAD不含有呈現數據,而僅僅是HTTP頭信息。有的人可能覺得這個方法沒什么用,其實不是這樣的。想象一個業務情景:欲判斷某個資源是否存在,我們通常使用GET,但這里用HEAD則意義更加明確。
~~~
## 九、http 401,403
~~~
400 bad request,請求報文存在語法錯誤
401 unauthorized,表示發送的請求需要有通過 HTTP 認證的認證信息
403 forbidden,表示對請求資源的訪問被服務器拒絕
404 not found,表示在服務器上沒有找到請求的資源
~~~
## 十、http能不能一次連接多次請求,不等后端返回
~~~
http本質上市使用socket連接,因此發送請求,接寫入tcp緩沖,是可以多次進行的,這也是http是無狀態的原因
~~~
## 十一、tcp與udp區別,udp優點,適用場景
~~~
tcp傳輸的是數據流,而udp是數據包,tcp會進過三次握手,udp不需要
~~~
## 其他
[更多推薦](https://blog.csdn.net/ilini/article/details/107330173)
[更多推薦](https://zhuanlan.zhihu.com/p/434629143)
- 一、經典(一)
- 二、經典(二)
- 三、經典(三)
- 四、經典(四)
- 五、經典(五)
- 六、經典(六)
- 七、經典(七)
- 八、經典(八)
- 九、經典(九)
- 十、經典(十)
- 十一、經典(十一)
- 十二、經典(十二)
- 其他
- 1、知識點一
- 2、面試集
- 3、負載均衡原理
- 4、LVS相關了解
- 5、微服務架構
- 6、分布式鎖實現原理
- 7、Etcd怎么實現分布式鎖
- 8、Redis的數據結構有哪些,以及實現場景
- 9、Mysql高可用方案有哪些
- 10、Go語言的棧空間管理是怎么樣的
- 11、Goroutine和Channel的作用分別是什么
- 12、Go中的鎖有哪些?三種鎖,讀寫鎖,互斥鎖,還有map的安全的鎖?
- 13、怎么限制Goroutine的數量
- 14、Goroutine和線程的區別?
- 15、中間件原理