func Copy(src io.Reader, dst io.Writer) error { //... } import gocopy s := file.Open() err := gocopy.Copy(s, d) func Copy(src io.Reader, dst io.Writer) (statusCh, error) { //... go func() { statusCh }() } func Read() { select { case status := <-statusCh: } } type Stat struct { status string err error } func Copy(src io.Reader, dst io.Writer) chan Stat { //... statusCh := make(chan Stat{}) go func() { statusCh{ } } return statusCh } func Read() { select { case status := <-statusCh: } } import gocopy s := file.Open() err := gocopy.Copy(s, d) func Copy(src io.Reader, dst io.Writer) chan Stat { //... statusCh := make(chan Stat{}) buf := make([]byte, 1024) var total int64 go func() { for { n, err := src.Read(buf) if n > 0 { writen, err := dst.Write(buf[:n]) total += int64(writen) if err != nil { statusCh <- Stat{ status: "done with err", err: err, } return } } if err == io.EOF { statusCh <- Stat{ bCopy: total, status: "done", err: nil, } return } if err != nil { statusCh <- Stat{ status: "done with err", err: err, } return } } } return statusCh } func Read() { select { case status := <-statusCh: if status.err != nil { return } } } func Copy(src io.Reader, dst io.Writer) chan Stat { //... statusCh := make(chan Stat{}) buf := make([]byte, 1024) var total int64 go func() { for { select { case : n, err := src.Read(buf) if n > 0 { writen, err := dst.Write(buf[:n]) total += int64(writen) if err != nil { statusCh <- Stat{ status: "done with err", err: err, } return } } if err == io.EOF { statusCh <- Stat{ bCopy: total, status: "done", err: nil, } return } if err != nil { statusCh <- Stat{ status: "done with err", err: err, } return } default: statusCh <- Stat{ bCopy: total, status: "pending", err: nil, } } } } return statusCh } func Read() { select { case status := <-statusCh: if status.err != nil { return } } }
Golang
Τι ψάχνεις στη δουλειά, με τι θέλεις να ασχοληθείς;
Υπάρχει μια λειτουργία `unpredictableFunc()`, την οποία πρέπει να τυλίξουμε έτσι ώστε να εκτελείται με χρονικό όριο (π.χ., 1 δευτερόλεπτο) και να καταγράφουμε τον χρόνο εκτέλεσης. // Υπάρχει μια λειτουργία που λειτουργεί απεριόριστα και επιστρέφει έναν αριθμό. // Το σώμα της δεν μπορεί να αλλάξει (υποθέτουμε ότι μέσα υπάρχει ένα αίτημα δικτύου). func unpredictableFunc() int64 { rnd := rand.Int63n(5000) time.Sleep(time.Duration(rnd) * time.Millisecond) return rnd } // Πρέπει να τροποποιηθεί η λειτουργία περιτύλιξης, η οποία θα λειτουργεί με ένα καθορισμένο χρονικό όριο (π.χ., 1 δευτερόλεπτο). // Αν η "μακρά" λειτουργία ολοκληρωθεί σε αυτό το χρόνο, τέλεια, επιστρέφουμε το αποτέλεσμα. // Αν όχι, επιστρέφουμε σφάλμα. Το αποτέλεσμα της εκτέλεσης σε αυτήν την περίπτωση δεν μας ενδιαφέρει. // // Επιπλέον, πρέπει να μετρηθεί πόσο χρόνο διήρκεσε αυτή η λειτουργία (απλώς να το εμφανίσουμε στο λογισμικό). // Η υπογραφή της λειτουργίας περιτύλιξης μπορεί να αλλάξει. func predictableFunc() int64 { return unpredictableFunc() }
Σε ποια ομάδα εργάστηκες στην τράπεζα; Τι έκανε η ομάδα;
Πώς λειτουργεί το SSL/TLS; Περιγράψτε τη διαδικασία εγκατάστασης της σύνδεσης.
Πώς είναι δομημένα τα map στο Go;
Τι είναι ένα slice στο Go;
Έχεις γράψει operators για το Kubernetes;
Πώς λειτουργεί εσωτερικά το context.WithTimeout;
Ποια είναι τα επίπεδα απομόνωσης των συναλλαγών; Ποια χρησιμοποιήσατε;
Τι θα εμφανίσει ο κώδικας; package main import "fmt" func main() { nums := make([]int, 1, 2) fmt.Println(nums) // appendSlice(nums, 1024) fmt.Println(nums) // mutateSlice(nums, 1, 512) fmt.Println(nums) // } func appendSlice(sl []int, val int) { sl = append(sl, val) } func mutateSlice(sl []int, idx, val int) { sl[idx] = val }
Πώς να ελέγξετε τη φόρτωση CPU και μνήμης στο Linux;
Πώς διαφέρουν οι goroutines από τα νήματα του λειτουργικού συστήματος; Ποιος είναι ο σκοπός των goroutines;
**Όρος** Τα αιτήματα σε πολλαπλές URL πρέπει να εκτελούνται παράλληλα. Εμφανίστε τις καταστάσεις HTTP, διαχειριστείτε τα σφάλματα. ```go package main func main() { urls := []string{"[link]"} // Κάτι κάνε } ```
Έχει εξεταστεί η διαίρεση των δεδομένων σε ζεστά (τελευταίοι 3 μήνες) και κρύα για τη μείωση του φορτίου αντί του Elasticsearch;
Πώς διακρίνεις τους Junior, Middle και Senior προγραμματιστές; Με ποια κριτήρια θεωρείς τον εαυτό σου Senior;
Πώς βρίσκουμε ένα αργό ερώτημα στο PostgreSQL και πώς το βελτιστοποιούμε;
Μίλησε για το resp.Body.Close() — γιατί είναι απαραίτητο και γιατί έβαλες ένα buffer 10;
Πόρες γραμμές υπήρχαν στη βάση δεδομένων;
Γράψτε ένα ερώτημα SQL που θα εμφανίζει **το όνομα του πελάτη**, την **πόλη** και **το συνολικό ποσό** όλων των παραγγελιών του. Μόνο οι πελάτες των οποίων τα συνολικά έξοδα υπερβαίνουν **τα 1000** μονάδες, θα συμπεριληφθούν στο τελικό αποτέλεσμα. --- **Σχήμα δεδομένων:** 1. **Πίνακας `customers`:** - `customer_id` (int) – μοναδικός αναγνωριστικός πελάτη. - `customer_name` (varchar) – όνομα πελάτη. - `city` (varchar) – πόλη διαμονής. 2. **Πίνακας `orders`:** - `order_id` (int) – μοναδικός αριθμός παραγγελίας. - `customer_id` (int) – ID του πελάτη που έκανε την παραγγελία. - `total_amount` (decimal) – ποσό μιας συγκεκριμένης παραγγελίας.