go golang 筆試題 面試題 筆試 面試


go golang 筆試題 面試題 筆試 面試

發現go的筆試題目和面試題目還都是比較少的,於是乎就打算最近總結一下。雖然都不難,但是如果沒有准備猛地遇到了還是挺容易踩坑的。

就是幾個簡單的筆試題目,也可能面試的時候直接給看讓說結果。

1, 用不同的goroutine去操作map的時候會存在線程同步的問題,把map換成int ,這個問題同樣存在。在go里是這樣。
2,下面這段代碼輸出的值為:
    func (){
	jsonStr:=[]byte(`{"age":1}`)
	var value map[string]interface{}
	json.Unmarshal(jsonStr,&value)
	age:=value["age"]
	fmt.Println(reflect.TypeOf(age))
	//float64
}
3,下邊代碼是否有問題,問題在哪里

    import (
	"sync"
	"fmt"
)
type UserAges struct {
	ages map[string] int
	sync.Mutex
}

func (u *UserAges)Add(name string,age int)  {
	u.Lock()
	defer u.Unlock()
	u.ages[name] = age
}

func (u *UserAges)Get(name string)int{
	if age,ok:=u.ages[name];ok{
		return age
	}
	return -1
}

問題在於,ages沒有暴露背外部的包,導致調用者無法初始化ages。然后在調用add函數時,就會報錯。考察函數的作用域問題。

4,下邊代碼的輸出結果是什么?
func TestArrayAndSlice(){
	s1:=[]int{1,2,3}
	s2:=s1[1:]
	for i:=range s2{
		s2[i]+=10
	}
	fmt.Println(s2)
	s2=append(s2, 4)
	for i:=range s2{
		s2[i]+=10
	}
	fmt.Println(s2)
}

輸出結果如下:這個是在考察數組和切片用s2截取s1的下邊為1及之后;而后執行操作。

[12 13]
[22 23 14]

5,下邊代碼輸出什么
func TestDoit(){
   doit:= func(arg int) interface{}{
   	var result *struct{}=nil

   	if (arg>0) {
   		result = &struct{}{}
   	}
   	return result
   }
   //輸出結果。
   //-1:result: <nil>    為空的匿名結構體
   //1://result: &{}     匿名結構體的地址
   if res:=doit(1);res!=nil{
   	fmt.Println("result:",res)
   }

}
6,下邊代碼的輸出結果是什么
//放在main里邊
	//指定只能用一個邏輯處理器,方便看調度順序。
	runtime.GOMAXPROCS(1)
	wg:=sync.WaitGroup{}
	wg.Add(20)
	for i:=0;i<10 ;i++  {
		go func() {
			fmt.Println("i",i)
			wg.Done()
		}()
	}
	for i:=0;i<10 ;i++  {
		go func(i int) {
			fmt.Println("j",i)
			wg.Done()
		}(i)
	}
	wg.Wait()

	/*
	j 9
	i 10
	i 10
	i 10
	i 10
	i 10
	i 10
	i 10
	i 10
	i 10
	i 10
	j 0
	j 1
	j 2
	j 3
	j 4
	j 5
	j 6
	j 7
	j 8
	 */

這個要注意,第一個for里沒有傳參數,第二個傳參數了。所以第一個for里啟動的goroutine用的i其實是主線程里的i;之所以都是10,(也有可能前面幾個<10);是因為調用i的時候,i在主線程內已經加到10了。而第二個for里的i是通過參數傳遞,所以會打印0~9;
至於為什么會先打印J,9;希望有大神來回答下。

暫時先寫這么多,回頭再接着加。

轉載注明出處--名白

http://www.cnblogs.com/mingbai/p/go-golangCodingTest.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM