Χρησιμοποιήσατε τα μοτίβα Inbox και Outbox;
Golang
Αντικείμενο: «Ping-pong με timeout» Γράψτε μια συνάρτηση pingPong που: - Ξεκινά δύο goroutines: μία παράγει μηνύματα "ping", η άλλη — "pong". - Οι goroutines πρέπει να ανταλλάσσουν μηνύματα μέσω ενός κοινού καναλιού αυστηρά με σειρά. - Η ανταλλαγή συνεχίζεται για 3 δευτερόλεπτα, μετά το οποίο το πρόγραμμα πρέπει να τερματίσει (ομαλό τερματισμός). - Χρησιμοποιήστε ένα context για ακύρωση με timeout. - Εμφανίστε κάθε μήνυμα στην οθόνη μαζί με τον χρόνο (σε milliseconds από την έναρξη). Παράδειγμα αναμενόμενης εξόδου: 0ms: ping
Απλή εργασία live coding (βασικός ανταγωνισμός) Όροι: Γράψτε μια συνάρτηση fetchAll(urls []string) map[string]string, που για κάθε URL εκτελεί ανταγωνιστικά ένα HTTP GET αίτημα και επιστρέφει έναν χάρτη όπου το κλειδί είναι το URL και η τιμή το σώμα της απάντησης (string). Αν το αίτημα αποτύχει (σφάλμα, όχι 200), η τιμή θα είναι κενή συμβολοσειρά. Περιορισμοί: - Δεν επιτρέπεται η χρήση εξωτερικών βιβλιοθηκών (μόνο οι standard). - Δεν επιτρέπεται η αλλαγή της υπογραφής. - Το πρόγραμμα δεν πρέπει να πέσει σε περίπτωση πανικού στο http.Get. Παράδειγμα εισόδου: ["[link]" "[link]" "[link]"]
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) }
Γεμίστε το slice με στοιχεία χωρίς mutex ώστε να περιέχει όλα τα 1000 στοιχεία.
Πώς διασφάλισαν την ιδιοκτησία;
Πού αποθηκεύτηκαν τα αρχεία καταγραφής;
Τι να πείτε στον συνεντευξιαστή (αν σας ρωτήσουν) "Θα χρησιμοποιούσα ένα pool εργαζομένων με σταθερό αριθμό εργαζομένων, ένα κανάλι για εργασίες και sync.WaitGroup. Οι εργαζόμενοι θα εκτελούν τα αιτήματα, και το timeout και η ακύρωση θα ελέγχονται μέσω του context. Τα αποτελέσματα θα συγκεντρώνονται σε ένα buffer, προστατευμένο από ένα mutex (ή μέσω ενός ξεχωριστού καναλιού)." Τώρα είναι η σειρά σου Γράψε τον κώδικα σε αυτό το chat. Θα τον ελέγξω και θα σου δώσω ανατροφοδότηση. Αν δεν ξέρεις από πού να ξεκινήσεις, ζήτησε μια υπόδειξη. Καλή επιτυχία!
Έχεις ακούσει για την κατανομή ιχνών;
// όλα τα στοιχεία του 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)) }
Τι είναι ένας δείκτης και τι συμβαίνει αν το όρισμα μιας συνάρτησης είναι δείκτης;
Ποια είναι η διαφορά μεταξύ DELETE και TRUNCATE;
Μίλησε για τους αποκλεισμούς στο Postgres.
Πώς χρησιμοποιήσατε το Redis;
Πες μου για το τελευταίο σου έργο.