Sobes.tech

Χρησιμοποιήσατε τα μοτίβα Inbox και Outbox;

284

Αντικείμενο: «Ping-pong με timeout» Γράψτε μια συνάρτηση pingPong που: - Ξεκινά δύο goroutines: μία παράγει μηνύματα "ping", η άλλη — "pong". - Οι goroutines πρέπει να ανταλλάσσουν μηνύματα μέσω ενός κοινού καναλιού αυστηρά με σειρά. - Η ανταλλαγή συνεχίζεται για 3 δευτερόλεπτα, μετά το οποίο το πρόγραμμα πρέπει να τερματίσει (ομαλό τερματισμός). - Χρησιμοποιήστε ένα context για ακύρωση με timeout. - Εμφανίστε κάθε μήνυμα στην οθόνη μαζί με τον χρόνο (σε milliseconds από την έναρξη). Παράδειγμα αναμενόμενης εξόδου: 0ms: ping

220

Απλή εργασία live coding (βασικός ανταγωνισμός) Όροι: Γράψτε μια συνάρτηση fetchAll(urls []string) map[string]string, που για κάθε URL εκτελεί ανταγωνιστικά ένα HTTP GET αίτημα και επιστρέφει έναν χάρτη όπου το κλειδί είναι το URL και η τιμή το σώμα της απάντησης (string). Αν το αίτημα αποτύχει (σφάλμα, όχι 200), η τιμή θα είναι κενή συμβολοσειρά. Περιορισμοί: - Δεν επιτρέπεται η χρήση εξωτερικών βιβλιοθηκών (μόνο οι standard). - Δεν επιτρέπεται η αλλαγή της υπογραφής. - Το πρόγραμμα δεν πρέπει να πέσει σε περίπτωση πανικού στο http.Get. Παράδειγμα εισόδου: ["[link]" "[link]" "[link]"]

203

package main import ( "fmt" ) func a(p *string) { s2 := "string2" *p = s2 } func main() { str1 := "string1" p := &str1 fmt.Println(*p) a(&p) fmt.Println(*p) }

193

Γεμίστε το slice με στοιχεία χωρίς mutex ώστε να περιέχει όλα τα 1000 στοιχεία.

182

Πώς διασφάλισαν την ιδιοκτησία;

179

Πού αποθηκεύτηκαν τα αρχεία καταγραφής;

179

Τι να πείτε στον συνεντευξιαστή (αν σας ρωτήσουν) "Θα χρησιμοποιούσα ένα pool εργαζομένων με σταθερό αριθμό εργαζομένων, ένα κανάλι για εργασίες και sync.WaitGroup. Οι εργαζόμενοι θα εκτελούν τα αιτήματα, και το timeout και η ακύρωση θα ελέγχονται μέσω του context. Τα αποτελέσματα θα συγκεντρώνονται σε ένα buffer, προστατευμένο από ένα mutex (ή μέσω ενός ξεχωριστού καναλιού)." Τώρα είναι η σειρά σου Γράψε τον κώδικα σε αυτό το chat. Θα τον ελέγξω και θα σου δώσω ανατροφοδότηση. Αν δεν ξέρεις από πού να ξεκινήσεις, ζήτησε μια υπόδειξη. Καλή επιτυχία!

177

Έχεις ακούσει για την κατανομή ιχνών;

172

// όλα τα στοιχεία του slice πρέπει να είναι μοναδικά + συνολικά 1000 στοιχεία // το πρόγραμμα δεν πρέπει να κολλήσει περιττά λόγω του time.sleep func main() { checkIncrement := map[int]int32{} var data []int for i := 0; i < 1000; i++ { go func() { data = append(data, i) if _, found := checkIncrement[i]; found { fmt.Println(i) panic("διπλό increment") } checkIncrement[i] = 1 }() } time.Sleep(2 * time.Second) fmt.Println(len(data)) }

167

Τι είναι ένας δείκτης και τι συμβαίνει αν το όρισμα μιας συνάρτησης είναι δείκτης;

161

Ποια είναι η διαφορά μεταξύ DELETE και TRUNCATE;

148

Μίλησε για τους αποκλεισμούς στο Postgres.

147

Πες μου για το τελευταίο σου έργο.

143