linkedin-skill-assessments-quizzes

Go (Programming Language)

Q1. Di cosa hanno bisogno due funzioni per essere dello stesso tipo?

User defined function types in Go (Golang)

Q2. Cosa restituisce la funzione len() se le viene passata una stringa codificata in UTF-8?

Length of string in Go (Golang).

Q3. Quale NON è una costruzione di ciclo valida in Go?

      do { ... } while i < 5
      for _,c := range "hello" { ... }
      for i := 1; i < 5; i++ { ... }
      for i < 5 { ... }

Spiegazione: Go ha solo cicli for.

Q4. Come aggiungeresti il numero 3 a destra?

values := []int{1, 1, 2}
      values.append(3)
      values.insert(3, 3)
      append(values, 3)
      values = append(values, 3)

Spiegazione: le slice in Go sono immutabili, quindi chiamare append non modifica la slice.

Q5. Qual è il valore di Read?

const (
  Write = iota
  Read
  Execute
)

IOTA in Go (Golang)

Q6. Qual è l’unica istruzione di import valida in Go?

      import "github/gin-gonic/gin"
      import "https://github.com/gin-gonic/gin"
      import "../template"
      import "github.com/gin-gonic/gin"

Import in GoLang

Q7. Cosa succede se provi a compilare ed eseguire questo programma Go?

package main
var GlobalFlag string
func main() {
  print("["+GlobalFlag+"]")
}
  1. Le variabili in Go hanno valori iniziali. Per il tipo string è la stringa vuota.
  2. Go Playground

Q8. Da dove è accessibile la variabile myVar se è dichiarata fuori da qualsiasi funzione in un file nel package myPackage dentro il modulo myModule?

Spiegazione: per rendere la variabile disponibile fuori da myPackage cambia il nome in MyVar. Vedi anche un esempio di Exported names nel Tour of Go.

Q9. Come dici a go test di stampare i test che sta eseguendo?

test package

Q10. Questo codice ha stampato {0, 0}. Come lo correggi?

type Point struct {
  x int
  y int
}

func main() {
  data := []byte(`{"x":1, "y": 2}`)
  var p Point
  if err := json.Unmarshal(data, &p); err != nil {
    fmt.Println("error: ", err)
  } else {
    fmt.Println(p)
  }
}
  1. How to Parse JSON in Golang?
  2. Go Playground

Q11. Cosa blocca un sync.Mutex mentre è bloccato (locked)?

  1. Mutex in GoLang, sync.Mutex blocca in modo che solo una goroutine alla volta possa accedere alla variabile protetta.
  2. sync.Mutex

Q12. Qual è un modo idiomatico per sospendere l’esecuzione dell’ambito corrente finché un numero arbitrario di goroutine non è terminato?

Spiegazione: è esattamente per questo che è progettato sync.WaitGroup - Use sync.WaitGroup in Golang

Q13. Qual è un effetto collaterale dell’uso di time.After in uno statement select?

Nota: non blocca select e non blocca altri canali.

  1. time.After() Function in Golang With Examples
  2. How can I use ‘time.After’ and ‘default’ in Golang?
  3. Go Playground example

Q14. A cosa serve l’istruzione select?

Select statement in GoLang

Q15. Secondo lo standard di documentazione di Go, come dovresti documentare questa funzione?

func Add(a, b int) int {
        return a + b
}

Spiegazione: il blocco di documentazione dovrebbe iniziare con il nome della funzione.

Comments in Go

Q16. Quale restrizione c’è sul tipo di myVal per compilare i := myVal.(int)?

Spiegazione: Questo tipo di casting (usando .(type)) si usa solo sulle interfacce.

  1. this example
  2. Primitive types are type-casted differently
  3. Go Playground
  4. Type assertions

Q17. Cos’è un canale?

Channels

Q18. Come puoi fare in modo che un file venga compilato solo su Windows?

  1. How to use conditional compilation with the go build tool, Oct 2013
  2. go commands Build constraints

//go:build windows “Go versions 1.16 and earlier used a different syntax for build constraints, with a “// +build” prefix. The gofmt command will add an equivalent //go:build constraint when encountering the older syntax.”

Q19. Qual è il modo corretto per passare questo come body di una richiesta HTTP POST?

data := "A group of Owls is called a parliament"
  resp, err := http.Post("https://httpbin.org/post", "text/plain", []byte(data))
      resp, err := http.Post("https://httpbin.org/post", "text/plain", data)
      resp, err := http.Post("https://httpbin.org/post", "text/plain", strings.NewReader(data))
      resp, err := http.Post("https://httpbin.org/post", "text/plain", &data)
  1. net/http#Client.Post
  2. http.Post Golang example

Q20. Quale dovrebbe essere il nome idiomatico per un’interfaccia con un singolo metodo con firma Save() error?

Effective Go, Interface names

Q21. Un’istruzione switch _ il proprio blocco lessicale. Ogni istruzione case _ un blocco lessicale aggiuntivo

Go Language Core technology (Volume one) 1.5-scope

Estratto rilevante dall’articolo:

La seconda istruzione if è annidata dentro la prima, quindi una variabile dichiarata nella prima è visibile alla seconda. Regole simili in switch: ogni case ha il proprio blocco lessicale oltre al blocco condizionale.

Q22. Qual è la sensibilità al maiuscolo/minuscolo predefinita della funzione JSON Unmarshal?

encoding/json#Unmarshal

Estratto rilevante dall’articolo:

Per deserializzare JSON in una struct, Unmarshal associa le chiavi dell’oggetto in ingresso alle chiavi usate da Marshal (il nome del campo struct o il suo tag), preferendo una corrispondenza esatta ma accettando anche una corrispondenza case-insensitive. Per impostazione predefinita, le chiavi senza campo corrispondente vengono ignorate (vedi Decoder.DisallowUnknownFields per un’alternativa).

Q23. Qual è la differenza tra i metodi Time.Sub() e Time.Add() del package time?

  1. time#Time.Add
  2. time#Time.Sub

Q24. Qual è il rischio di usare più tag di campo in un’unica struct?

  1. Example Code / b29r0fUD1cp
  2. How To Use Struct Tags in Go

Q25. Dove è utile il metodo built-in recover?

Example of Recover Function in Go (Golang)

Estratto rilevante dall’articolo:

recover è utile solo quando chiamato dentro funzioni differite. Eseguire recover dentro una funzione differita interrompe la sequenza di panic ripristinando l’esecuzione normale e recupera il messaggio di errore passato a panic. Se chiamato fuori da una funzione differita, non interrompe il panic.

Q26. Quale scelta NON invia output su standard error?

  1. func println: scrive il risultato su standard error.
  2. func New: func New(out io.Writer, prefix string, flag int) *Logger; la variabile out imposta la destinazione per i log.
  3. func Errorf: formatta e restituisce la stringa come valore.
  4. func Fprintln: formatta e scrive su w.

Q27. Come puoi dire a Go di importare un package da una posizione diversa?

  1. Call your code from another module: capitolo 5., go mod edit -replace example.com/greetings=../greetings.
  2. go.mod replace directive

Q28. Se la directory di lavoro corrente è il livello superiore del progetto, quale comando eseguirà tutti i package di test?

  1. Example of testing in Go (Golang)
  2. Example of cmd in Go (Golang)

Estratto rilevante dall’articolo:

Sono consentiti anche pattern relativi, come “go test ./…” per testare tutte le sottodirectory.

Q29. Quali codifiche puoi mettere in una stringa?

  1. Strings, bytes, runes and characters in Go

Estratto rilevante dall’articolo:

In breve, il codice sorgente Go è UTF-8, quindi il letterale di stringa è testo UTF-8.

  1. Example of encoding in Go (Golang)

Estratto rilevante dall’articolo:

Il package encoding definisce un’interfaccia per le codifiche di caratteri che possono convertire da e verso UTF-8.

Q30. In cosa differisce il comportamento di t.Fatal dentro un t.Run?

  1. Reference:
  2. testing package in Go, estratto rilevante:

Fatal è equivalente a Log seguito da FailNow… l’esecuzione continuerà al prossimo test o benchmark.

Q31. Cosa fa log.Fatal?

Example of func Fatal in Go (Golang)

Estratto rilevante:

Fatal è equivalente a Print() seguito da os.Exit(1).

Q32. Quale è un formato letterale di tempo Go valido?

func Time in Go

Estratto rilevante:

Year: "2006" "06"
Month: "Jan" "January" "01" "1"
Day of the week: "Mon" "Monday"
Day of the month: "2" "_2" "02"
Day of the year: "__2" "002"
Hour: "15" "3" "03" (PM or AM)
Minute: "4" "04"
Second: "5" "05"
AM/PM mark: "PM"

Q33. Come dovresti loggare un errore (err)

Spiegazione: Non esistono né log.ERRORlog.Error() nel package log di Go; log.Print() gestisce gli argomenti come fmt.Print(); log.Printf() come fmt.Printf().

Q34. Quali nomi di file il comando go test riconosce come file di test?

  1. Test packages in go command in Go
  2. Add a test in Go

Q35. Quale sarà l’output di questo codice?

ch := make(chan int)
ch <- 7
val := <-ch
fmt.Println(val)

Go Playground share, output:

fatal error: all goroutines are asleep - deadlock!

goroutine 1 [chan send]:
main.main()
 /tmp/sandbox2282523250/prog.go:7 +0x37

Program exited.

Q36. Quale sarà l’output di questo programma?

ch := make(chan int)
close(ch)
val := <-ch
fmt.Println(val)
  1. The Go Programming Language Specification “Receive operator”
  2. Go Playground share
0

Program exited.

Q37. Cosa verrà stampato in questo codice?

var stocks map[string]float64 // stock -> price
price := stocks["MSFT"]
fmt.Printf("%f\n", price)

Go Playground share, output:

0.000000

Program exited.

Q38. Qual è il modo comune per avere più eseguibili nel tuo progetto?

  1. stackoverflow
  2. medium
  3. medium

Q39. Come puoi compilare main.go in un eseguibile che girerà su macOS arm64?

documentation

Q40. Qual è la sintassi corretta per avviare una goroutine che print Hello Gopher!?

Example of start a goroutine

Q41. Se iteri su una mappa in un for range, in che ordine verranno accessi i pair chiave:valore?

Reference

Q42. Qual è un modo idiomatico per personalizzare la rappresentazione di una struct personalizzata in una stringa formattata?

Reference

Q43. Come puoi evitare una perdita di goroutine in questo codice?

func findUser(ctx context.Context, login string) (*User, error) {
    ch := make(chan *User)
    go func() {
            ch <- findUserInDB(login)
    }()

    select {
    case user := <-ch:
            return user, nil
    case <-ctx.Done():
            return nil, fmt.Errorf("timeout")
    }
}

Reference

Estratto rilevante:

Il modo più semplice per risolvere questa perdita è cambiare il canale da non bufferizzato a bufferizzato con capacità 1…

44. Cosa stamperà questo codice?

var i int8 = 120
i += 10
fmt.Println(i)

Go Playground example

-126

Program exited.

45. Data la definizione di worker sotto, qual è la sintassi corretta per avviare una goroutine che chiamerà worker e invierà il risultato su un canale ch?

func worker(m Message) Result
go func() {
    r := worker(m)
    ch <- r
}
go func() {
    r := worker(m)
    r -> ch
} ()
go func() {
    r := worker(m)
    ch <- r
} ()
go ch <- worker(m)

Go Playground example

Q46. In questo codice, quali nomi sono esportati?

package os

type FilePermission int
type userID int

Reference 1 Reference 2

Q47. Quale delle seguenti è corretta sulle struct in Go?

Q48. Cosa fa il comando built-in generate del compilatore Go?

Generate Go files by processing source

Q49. Usando il package time, come puoi ottenere l’ora tra 90 minuti da adesso?

func (Time) Add example

Q50. Un programma usa un canale per stampare cinque interi dentro una goroutine mentre il main alimenta il canale con interi, ma così non funziona. Cosa devi cambiare per farlo funzionare?

Reference

Estratto rilevante:

Il modo più semplice per risolvere questa perdita è cambiare il canale da non bufferizzato a bufferizzato con capacità 1…

Q51. Dopo aver importato encoding/json, come accederai alla funzione Marshal?

encoding/json#Marshal example

Q52. Quali sono i due segmenti mancanti per usare context.Context e implementare un timeout di 3 secondi per un client HTTP che fa una GET?

package main

import (
        "context"
        "fmt"
        "net/http"
)

func main() {
        var cancel context.CancelFunc
        ctx := context.Background()

        // #1: <=== Cosa va qui?

        req, _ := http.NewRequest(http.MethodGet,
                "https://linkedin.com",
                nil)

        // #2: <=== Cosa va qui?

        client := &http.Client{}
        res, err := client.Do(req)
        if err != nil {
                fmt.Println("Request failed:", err)
                return
        }
        fmt.Println("Response received, status code:",
                res.StatusCode)
}
      ctx.SetTimeout(3*time.Second)
      req.AttachContext(ctx)
      ctx, cancel = context.WithTimeout(ctx, 3*time.Second); defer cancel()
      req = req.WithContext(ctx)
      ctx, cancel = context.WithTimeout(ctx, 3*time.Second); defer cancel() #2: req.AttachContext(ctx)
      ctx.SetTimeout(3*time.Second)
      req = req.WithContext(ctx)
  1. context#WithTimeout
  2. net/http#Request.WithContext

Q53. Se hai una struct chiamata Client definita nello stesso file .go dell’istruzione, come esporti una variabile con un valore di default in modo che sia accessibile dagli altri package?

Q54. Questo programma produce {Master Chief Spartan Protagonist Halo}. Come faresti ad ottenere Master Chief - a Spartan - is the Protagonist of Halo invece?

package main

import "fmt"

type Character struct{
        Name  string
        Class string
        Role  string
        Game  string
}

func main() {
        mc := Character{
                Name: "Master Chief",
                Class: "Spartan",
                Role: "Protagonist",
                Game: "Halo",
        }
        fmt.Println(mc)
}
  1. fmt#Stringer

Q55. Come implementeresti un metodo Append() funzionante per Clients?

package main

type Client struct {
  Name string
}
type Clients struct {
  clients []*Client
}
func main() {
  c:= &Clients{clients.make([]*Client,0)}
  c.Append(&Client{Name: "LinkedIn API})
}

Q56. Come recupereresti da un panic() lanciato da una funzione chiamata senza permettere che il programma fallisca, assumendo che la risposta giri nello stesso scope in cui avviene il panic?

Q57. Cosa stamperà questo codice?

var n int
fmt.Println (n)

Questo perché in Go, quando una variabile è dichiarata ma non inizializzata, riceve il valore zero del suo tipo. Per gli interi come n, è 0.

Q58. Creando una stringa formattata, quale verb dovresti usare per chiamare il metodo String() string di un tipo custom?

In Go, il verb %s formatta una stringa. Con un tipo che ha String(), verrà chiamato automaticamente e usato il suo valore di ritorno.

Q59. Quale NON è un valore valido per layout chiamando time.Now().Format(layout)?

time#Time.Format

Secondo la documentazione, i valori 1 e 01 rappresentano il mese corrente.

each layout string is a representation of the time stamp,
	Jan 2 15:04:05 2006 MST
An easy way to remember this value is that it holds, when presented in this order, the values (lined up with the elements above):
	  1 2  3  4  5    6  -7

Q60. Come segnaleresti al compilatore Go che la struct Namespace deve implementare l’interfaccia JSONConverter? Si assume che la risposta sia nello stesso package di Namespace.

Questa sintassi crea una variabile _ di tipo JSONConverter e le assegna (*Namespace)(nil). In pratica verifica che Namespace soddisfi l’interfaccia.

Q61. Quale affermazione su typing e interfacce è falsa?

In Go, un tipo soddisfa un’interfaccia automaticamente se implementa tutti i metodi. Non c’è keyword per dichiararlo.

Q62. Come completeresti questo programma per generare l’output specificato, assumendo la tabella SQL

===[Output]================
1: &{GameId:1 Title:Wolfenstein YearReleased:1992}
2: &{GameId:2 Title:Doom YearReleased:1993}
3: &{GameId:3 Title:Quake YearReleased:1996}

===[main.go]================
package main

import (
        "database/sql"
        "fmt"
        _ "github.com/go-sql-driver/mysql"
        "log"
)

type Game struct {
        GameId       int
        Title        string
        YearReleased int
}

func main() {

        conn, err := sql.Open("mysql",
                "john_carmack:agiftw!@tcp(localhost:3306)/idsoftware")

        if err != nil {
                panic(err)
        }
        defer func() { _ = conn.Close() }()

        results, err := conn.Query("SELECT game_id,title,year_released FROM games;")
        if err != nil {
                panic(err)
        }
        defer func() { _ = results.Close() }()

        // #1 <=== Cosa va qui?

        for results.Next() {
                var g Game

                // #2 <=== Cosa va qui?

                if err != nil {
                        panic(err)
                }

                // #3 <=== Cosa va qui?

        }

        for i, g := range games {
                fmt.Printf("%d: %+v\n", i, g)
        }

}
#1: games := make([]*Game, results.RowsAffected())
#2: g, err = results.Fetch()
#3: games[results.Index()] = &g
#1: games := []Game{}
#2: g, err = results.Fetch()
#3: games = append(games,g)
#1: games := map[int]Game{}
#2: err = results.Scan(&g)
#3: games[g.GameId] = g

#- [x] ­

#1: games := make(map[int]*Game, 0)
#2: err = results.Scan(&g.GameId, &g.Title, &g.YearReleased)
#3: games[g.GameId] = &g

Q63. Riempi gli spazi

  1. I file di test in Go devono _.
  2. I test individuali sono identificati da _.
  3. Puoi eseguire i subtest __.
  4. Logghi l’errore e marchi il test come fallito _.

Q64. Di quale tipo è alias rune?

  1. Strings, bytes, runes and characters in Go

Estratto rilevante:

Go definisce la parola rune come alias per int32, così i programmi possono essere chiari quando un intero rappresenta un code point.

Q65. Quando puoi usare la sintassi := per assegnare a più variabili? Per esempio:

x, err := myFunc()
  1. Short variable declarations

Q66. Come puoi visualizzare l’output del profiler in cpu.pprof nel browser?

Q67. Quando una variabile di tipo interface{} valuta a nil?

Q68. Che valore contiene una variabile string se è stata allocata ma non assegnata?

Se una string è allocata ma non assegnata, il suo valore di default è la stringa vuota “”. In Go, le variabili string non inizializzate ricevono il valore zero del tipo.

Q69. Quale funzione built-in si usa per fermare l’esecuzione di un programma?

La funzione built-in per fermare l’esecuzione è panic(). Se non viene recuperata, il programma termina.

Q70. Quale sarà l’output?

a,b := 1, 2
b,c:= 3, 4
fmt.Println(a, b, c)

Go Playground Example

Q71. Qual è l’operatore per l’AND logico?

Q72. Cos’è una funzione anonima in Go?

Q73. Quale keyword si usa per dichiarare una funzione anonima in Go?

Q74. Qual è il principale vantaggio nell’uso di funzioni anonime in Go?

Spiegazione: possono essere definite inline dove sono usate, offrendo maggiore flessibilità nell’organizzazione del codice.

Q75. Qual è la sintassi per chiamare immediatamente una funzione anonima dopo la sua dichiarazione in Go?

reference

Q76. Per quali tipi gli sviluppatori Go possono definire metodi?

I metodi possono essere definiti per qualsiasi tipo con nome che non sia built-in. Non possono essere attaccati direttamente a tipi built-in come int, string, ecc. reference