Πώς να προετοιμαστείτε για μια συνέντευξη στο Google και να την αποτύχετε. Εις διπλούν

Πώς να προετοιμαστείτε για μια συνέντευξη στο Google και να την αποτύχετε. Εις διπλούν

Ο τίτλος του άρθρου ακούγεται σαν epic fail, αλλά στην πραγματικότητα όλα δεν είναι τόσο απλά. Και γενικά, αυτή η ιστορία τελείωσε πολύ θετικά, αν και όχι στο Google. Αλλά αυτό είναι ένα θέμα για άλλο άρθρο. Σε αυτό το ίδιο άρθρο, θα μιλήσω για τρία πράγματα: πώς πήγε η διαδικασία προετοιμασίας μου, πώς έγιναν οι συνεντεύξεις στη Google και γιατί, κατά τη γνώμη μου, όλα δεν είναι τόσο ξεκάθαρα όσο φαίνονται.

Πώς ξεκίνησαν όλα

Ένα κρύο κυπριακό χειμωνιάτικο απόγευμα, ξαφνικά μου ήρθε η σκέψη ότι οι γνώσεις μου στην κλασική Επιστήμη των Υπολογιστών απείχαν πολύ από το μέσο όρο και κάτι έπρεπε να γίνει γι' αυτό. Αν, παρεμπιπτόντως, κάποιος δεν έχει διαβάσει ακόμα γιατί το βράδυ είναι κυπριακό και κρύο, τότε μπορείτε να το μάθετε εδώ. Μετά από λίγη σκέψη, αποφασίστηκε να ξεκινήσουμε παρακολουθώντας ένα διαδικτυακό μάθημα για αλγόριθμους και δομές δεδομένων. Από έναν από τους πρώην συναδέλφους μου άκουσα για την πορεία του Robert Sedgewick στο Coursera. Το μάθημα αποτελείται από δύο μέρη (Μέρος 1 и Μέρος 2). Εάν ξαφνικά αλλάξουν οι σύνδεσμοι, μπορείτε πάντα να Google το όνομα του συγγραφέα. Κάθε μέρος διαρκεί 6 εβδομάδες. Οι διαλέξεις δίνονται στην αρχή της εβδομάδας και κατά τη διάρκεια της εβδομάδας πρέπει ακόμα να κάνετε ασκήσεις. Το πρώτο μέρος του μαθήματος καλύπτει βασικές δομές δεδομένων, βασικούς τύπους ταξινόμησης και την πολυπλοκότητα των αλγορίθμων. Το δεύτερο μέρος είναι ήδη πιο προχωρημένο, ξεκινώντας με γραφήματα και τελειώνοντας με πράγματα όπως ο Γραμμικός Προγραμματισμός και η Δυσκολία. Αφού σκέφτηκα όλα τα παραπάνω, κατέληξα στο συμπέρασμα ότι αυτό ακριβώς χρειάζομαι. Παρεμπιπτόντως, ένας περίεργος αναγνώστης μπορεί να ρωτήσει, τι σχέση έχει η Google με αυτό; Και πράγματι, μέχρι αυτή τη στιγμή δεν είχε καμία απολύτως σχέση. Χρειαζόμουν όμως έναν στόχο, αφού το να μελετάς για 12 εβδομάδες τα βράδια χωρίς στόχο είναι κάπως δύσκολο. Ποιος θα μπορούσε να είναι ο σκοπός της απόκτησης νέας γνώσης; Φυσικά η εφαρμογή τους στην πράξη. Στην καθημερινή ζωή αυτό είναι αρκετά προβληματικό, αλλά κατά τη διάρκεια μιας συνέντευξης με μια μεγάλη εταιρεία είναι εύκολο. Μια γρήγορη Google έδειξε ότι η Google (συγχωρέστε την ταυτολογία) είναι μια από τις μεγαλύτερες εταιρείες στην Ευρώπη (και κοίταζα συγκεκριμένα την Ευρώπη) που κάνει τέτοιες συνεντεύξεις. Δηλαδή, το γραφείο τους βρίσκεται στη Ζυρίχη της Ελβετίας. Αποφασίστηκε λοιπόν - ας μελετήσουμε και ας πάμε για μια συνέντευξη στην Google.

Προετοιμασία για την πρώτη προσέγγιση

Οι 12 εβδομάδες πέρασαν γρήγορα και ολοκλήρωσα και τα δύο μαθήματα. Οι εντυπώσεις μου από τα μαθήματα είναι κάτι παραπάνω από θετικές και μπορώ να τις προτείνω σε όποιον ενδιαφέρεται. Μου άρεσαν τα μαθήματα για τους εξής λόγους:

  • Ο καθηγητής μιλά αρκετά καθαρά αγγλικά
  • Το υλικό είναι καλά δομημένο
  • Υπέροχες παρουσιάσεις που δείχνουν το εσωτερικό κάθε αλγορίθμου
  • Αρμόδια επιλογή υλικού
  • Ενδιαφέρουσες ασκήσεις
  • Οι ασκήσεις ελέγχονται αυτόματα στον ιστότοπο και μετά δημιουργείται μια αναφορά

Η δουλειά μου στα μαθήματα συνήθως πήγαινε έτσι. Άκουσα διαλέξεις σε 1-2 μέρες. Στη συνέχεια έκαναν ένα γρήγορο τεστ για τις γνώσεις τους για το υλικό. Την υπόλοιπη εβδομάδα έκανα την άσκηση σε πολλές επαναλήψεις. Μετά την πρώτη πήρα το 30-70%, οι επόμενες έφεραν το αποτέλεσμα στο 97-100%. Η άσκηση συνήθως περιελάμβανε την εφαρμογή κάποιου αλγορίθμου, π.χ. Σκάλισμα ραφής ή bzip.

Μετά την ολοκλήρωση των μαθημάτων κατάλαβα ότι η πολλή γνώση έρχεται με πολύ λύπη. Αν πριν ήξερα απλώς ότι δεν ήξερα τίποτα, τώρα άρχισα να συνειδητοποιώ ότι ήμουν εγώ που δεν ήξερα.

Δεδομένου ότι ήταν μόλις μήνας Μάιος και είχα προγραμματίσει τη συνέντευξη για το φθινόπωρο, αποφάσισα να συνεχίσω τις σπουδές μου. Μετά την εξέταση των απαιτήσεων για την κενή θέση, αποφασίστηκε να προχωρήσουμε σε δύο κατευθύνσεις παράλληλα: να συνεχίσουμε τη μελέτη αλγορίθμων και να παρακολουθήσουμε ένα βασικό μάθημα στη μηχανική μάθηση. Για τον πρώτο στόχο, αποφάσισα να μεταβώ από μαθήματα σε βιβλίο και επέλεξα το μνημειώδες έργο του Steven Skiena «Algorithms. Εγχειρίδιο σχεδίασης αλγορίθμων. Όχι τόσο μνημειώδη όσο του Knut, αλλά ακόμα. Για το δεύτερο γκολ, επέστρεψα στην Coursera και έγραψα την πορεία του Andrew Ng. Μηχανική μάθηση.

Πέρασαν άλλοι 3 μήνες και τελείωσα το μάθημα και την κράτηση.

Ας ξεκινήσουμε με το βιβλίο. Η ανάγνωση αποδείχθηκε αρκετά ενδιαφέρουσα, αν και όχι εύκολη. Καταρχήν, θα συνιστούσα το βιβλίο, αλλά όχι αμέσως. Συνολικά, το βιβλίο παρέχει μια πιο εις βάθος ματιά σε όσα έμαθα στο μάθημα. Επιπλέον, ανακάλυψα (από τυπική άποψη) πράγματα όπως η ευρετική και ο δυναμικός προγραμματισμός. Φυσικά, τα είχα χρησιμοποιήσει στο παρελθόν, αλλά δεν ήξερα πώς λέγονται. Το βιβλίο περιέχει επίσης μια σειρά από ιστορίες από τη ζωή του συγγραφέα (War Story), που κάπως αραιώνουν τον ακαδημαϊκό χαρακτήρα της παρουσίασης. Παρεμπιπτόντως, το δεύτερο μισό του βιβλίου μπορεί να παραλειφθεί· περιέχει μάλλον μια περιγραφή των υπαρχόντων προβλημάτων και μεθόδων επίλυσής τους. Είναι χρήσιμο εάν χρησιμοποιείται τακτικά στην πράξη, διαφορετικά θα ξεχαστεί αμέσως.

Ήμουν περισσότερο από ευχαριστημένος με την πορεία. Ο συγγραφέας ξέρει ξεκάθαρα τα πράγματά του και μιλάει με ενδιαφέροντα τρόπο. Επιπλέον, αρκετά από αυτά, δηλαδή τη γραμμική άλγεβρα και τα βασικά των νευρωνικών δικτύων, το θυμόμουν από το πανεπιστήμιο, οπότε δεν αντιμετώπισα ιδιαίτερες δυσκολίες. Η δομή του μαθήματος είναι αρκετά τυπική. Το μάθημα χωρίζεται σε εβδομάδες. Κάθε εβδομάδα γίνονται διαλέξεις με σύντομες δοκιμασίες. Μετά τις διαλέξεις, σας δίνεται μια εργασία που πρέπει να κάνετε, να υποβάλετε και θα ελεγχθεί αυτόματα. Συνοπτικά, η λίστα των πραγμάτων που διδάσκονται στο μάθημα έχει ως εξής:
- λειτουργία κόστους
- γραμμικής παλινδρόμησης
- κλίση κατάβασης
- κλιμάκωση χαρακτηριστικών
- κανονική εξίσωση
- υλικοτεχνική παλινδρόμηση
— ταξινόμηση πολλαπλών τάξεων (ένας έναντι όλων)
- νευρωνικά δίκτυα
- οπίσθιο πολλαπλασιασμό
- τακτοποίηση
— μεροληψία/διακύμανση
— καμπύλες εκμάθησης
— μετρήσεις σφάλματος (ακρίβεια, ανάκληση, F1)
— Υποστήριξη Vector Machines (ταξινόμηση μεγάλου περιθωρίου)
— Κ-σημαίνει
—Ανάλυση βασικών εξαρτημάτων
- ανίχνευση ανωμαλιών
— συλλογικό φιλτράρισμα (σύστημα σύστασης)
— στοχαστικές, mini-batch, παρτίδες gradient descents
— διαδικτυακή μάθηση
- ΜΕΙΩΣΗ ΧΑΡΤΗ
- ανάλυση οροφής
Μετά την ολοκλήρωση του μαθήματος, υπήρξε κατανόηση όλων αυτών των θεμάτων. Μετά από 2 χρόνια, σχεδόν όλα ξεχάστηκαν φυσικά. Το προτείνω σε όσους δεν είναι εξοικειωμένοι με τη μηχανική μάθηση και θέλουν να κατανοήσουν καλά τα βασικά πράγματα για να προχωρήσουν.

Πρώτο τρέξιμο

Ήταν ήδη Σεπτέμβριος και ήρθε η ώρα να σκεφτώ μια συνέντευξη. Δεδομένου ότι η αίτηση μέσω του ιστότοπου είναι αρκετά καταστροφική, άρχισα να ψάχνω για φίλους που εργάζονται στη Google. Η επιλογή έπεσε datacompboy, αφού ήταν ο μόνος που γνώριζα άμεσα (έστω και όχι προσωπικά). Συμφώνησε να προωθήσει το βιογραφικό μου και σύντομα έλαβα μια επιστολή από τον υπεύθυνο προσλήψεων που προσφερόταν να κρατήσω μια θέση στο ημερολόγιό του για την πρώτη συνομιλία. Λίγες μέρες αργότερα έγινε η κλήση. Προσπαθήσαμε να επικοινωνήσουμε μέσω Hangouts, αλλά η ποιότητα ήταν τρομερή, οπότε αλλάξαμε στο τηλέφωνο. Πρώτα, συζητήσαμε γρήγορα το πρότυπο πώς, γιατί και γιατί, και μετά προχωρήσαμε στον τεχνικό έλεγχο. Αποτελούνταν από μια ντουζίνα ερωτήσεις στο πνεύμα του «ποια είναι η δυσκολία εισαγωγής σε έναν χάρτη κατακερματισμού», «τι ισορροπημένα δέντρα γνωρίζετε». Δεν είναι δύσκολο αν έχεις βασικές γνώσεις για αυτά τα πράγματα. Η προβολή πήγε καλά και με βάση τα αποτελέσματα αποφάσισαν να οργανώσουν την πρώτη συνέντευξη σε μια εβδομάδα.

Η συνέντευξη έγινε και μέσω Hangouts. Πρώτα μίλησαν για μένα για περίπου 5 λεπτά και μετά πέρασαν στο πρόβλημα. Το πρόβλημα ήταν στα γραφήματα. Γρήγορα συνειδητοποίησα τι έπρεπε να γίνει, αλλά επέλεξα λάθος αλγόριθμο. Όταν άρχισα να γράφω κώδικα το κατάλαβα και πέρασα σε άλλη επιλογή, την οποία και ολοκλήρωσα. Ο ερευνητής έκανε πολλές ερωτήσεις σχετικά με την πολυπλοκότητα του αλγορίθμου και ρώτησε αν θα μπορούσε να γίνει πιο γρήγορα. Κατά κάποιον τρόπο έγινα βαρετή και δεν μπορούσα να το κάνω. Σε αυτό το σημείο, ο χρόνος πέρασε και είπαμε αντίο. Στη συνέχεια, μετά από περίπου 10 λεπτά, κατάλαβα ότι αντί για τον αλγόριθμο Dijkstra που χρησιμοποιούσα, στο συγκεκριμένο πρόβλημα θα μπορούσα να χρησιμοποιήσω την αναζήτηση κατά πλάτος και θα ήταν πιο γρήγορη. Μετά από λίγο καιρό, ο υπεύθυνος προσλήψεων τηλεφώνησε και είπε ότι η συνέντευξη συνολικά πήγε καλά και ότι έπρεπε να οργανωθεί μια άλλη. Συμφωνήσαμε για άλλη μια εβδομάδα.

Αυτή τη φορά τα πράγματα έγιναν χειρότερα. Αν την πρώτη φορά ο συνεντευκτής ήταν φιλικός και κοινωνικός, αυτή τη φορά ήταν κάπως ζοφερός. Δεν μπόρεσα να καταλάβω το πρόβλημα αμέσως, αν και οι ιδέες που βρήκα θα μπορούσαν, καταρχήν, να οδηγήσουν στη λύση του. Στο τέλος, μετά από πολλές προτροπές από τον συνεντευκτή, ήρθε η λύση σε εμένα. Αυτή τη φορά αποδείχθηκε ότι ήταν και πάλι μια αναζήτηση πλάτους, μόνο από πολλά σημεία. Έγραψα τις λύσεις, τις συνάντησα στην ώρα τους, αλλά ξέχασα τα edge case. Μετά από λίγο, ο υπεύθυνος προσλήψεων τηλεφώνησε και είπε ότι αυτή τη φορά ο συνεντευκτής ήταν δυσαρεστημένος, γιατί κατά τη γνώμη του χρειαζόμουν πάρα πολλές συμβουλές (3 ή 4 κομμάτια) και άλλαζα συνεχώς τον κωδικό ενώ έγραφα. Με βάση τα αποτελέσματα δύο συνεντεύξεων, αποφασίστηκε να μην προχωρήσουμε περαιτέρω, αλλά να αναβάλουμε την επόμενη συνέντευξη για ένα χρόνο, αν το επιθυμώ. Γι' αυτό αποχαιρετιστήκαμε.

Και από αυτή την ιστορία έβγαλα πολλά συμπεράσματα:

  • Η θεωρία είναι καλή, αλλά πρέπει να την περιηγηθείτε γρήγορα
  • Θεωρία χωρίς πρακτική δεν θα βοηθήσει. Πρέπει να λύσουμε προβλήματα και να φέρουμε την κωδικοποίηση στην αυτοματοποίηση.
  • Πολλά εξαρτώνται από τον συνεντευκτή. Και τίποτα δεν μπορεί να γίνει για αυτό.

Προετοιμασία για το δεύτερο γύρο

Αφού σκέφτηκα την κατάσταση, αποφάσισα να προσπαθήσω ξανά σε ένα χρόνο. Και ελαφρώς επεξεργάστηκε τον στόχο. Αν νωρίτερα ο κύριος στόχος ήταν η μελέτη και μια συνέντευξη στη Google ήταν σαν ένα μακρινό καρότο, τώρα το να περάσεις μια συνέντευξη ήταν ο στόχος και η μελέτη ήταν το μέσο.
Έτσι, αναπτύχθηκε ένα νέο σχέδιο, το οποίο περιλάμβανε τα ακόλουθα σημεία:

  • Συνεχίστε να μελετάτε τη θεωρία διαβάζοντας βιβλία και άρθρα.
  • Επίλυση αλγοριθμικών προβλημάτων σε ποσότητα 500-1000 τεμαχίων.
  • Συνεχίστε να μαθαίνετε τη θεωρία παρακολουθώντας βίντεο.
  • Συνεχίστε να μελετάτε θεωρία μέσω μαθημάτων.
  • Μελετήστε τις εμπειρίες άλλων ανθρώπων με συνεντεύξεις στο Google.

Ολοκλήρωσα το σχέδιο μέσα σε ένα χρόνο. Στη συνέχεια θα περιγράψω τι ακριβώς έκανα για κάθε ένα από τα σημεία.

Βιβλία και άρθρα

Δεν θυμάμαι καν τον αριθμό των άρθρων που διάβασα· τα διάβασα και στα ρωσικά και στα αγγλικά. Ίσως το πιο χρήσιμο site αυτό. Εδώ μπορείτε να βρείτε μια περιγραφή ενός μεγάλου αριθμού ενδιαφέροντων αλγορίθμων με παραδείγματα κώδικα.

Διάβασα 5 βιβλία: Algorithms, 4th edition (Sedgewick, Wayne), Introduction to Algorithms 3rd Edition (Cormen, Leiserson, Rivest, Stein), Cracking the Coding Interview 4th edition (Gayle Laakmann), Programming Interviews Exposure 2nd, Suojanan , Giguere), Elements of Programming Interviews (Aziz, Lee, Prakash). Μπορούν να χωριστούν σε 2 κατηγορίες. Το πρώτο περιλαμβάνει βιβλία των Sedgwick και Corman. Αυτό είναι μια θεωρία. Τα υπόλοιπα είναι προετοιμασία για τη συνέντευξη. Ο Sedgwick λέει για το ίδιο πράγμα στο βιβλίο όπως και στα μαθήματά του. Μόνο γραπτώς. Δεν έχει πολύ νόημα να το διαβάσετε προσεκτικά αν έχετε παρακολουθήσει το μάθημα, αλλά αξίζει να το διαβάσετε ούτως ή άλλως. Αν δεν έχετε παρακολουθήσει το μάθημα, είναι λογικό να το διαβάσετε. Ο Κόρμεν μου φάνηκε πολύ βαρετός. Για να είμαι ειλικρινής, δυσκολεύτηκα να το κατακτήσω. Μόλις το έβγαλα από εκεί κυρίαρχη θεωρία, και αρκετές δομές δεδομένων που χρησιμοποιούνται σπάνια (σωρός Fibonacci, δέντρο van Emde Boas, σωρός ριζών).

Αξίζει να διαβάσετε τουλάχιστον ένα βιβλίο για να προετοιμαστείτε για μια συνέντευξη. Είναι όλα χτισμένα πάνω στην ίδια περίπου αρχή. Περιγράφουν τη διαδικασία συνέντευξης σε μεγάλες εταιρείες τεχνολογίας, δίνουν βασικά πράγματα από την Πληροφορική, προβλήματα για αυτά τα βασικά πράγματα, λύσεις σε προβλήματα και ανάλυση λύσεων. Από τα τρία παραπάνω, πιθανότατα θα συνιστούσα το Cracking the Coding Interview ως κύριο και τα υπόλοιπα είναι προαιρετικά.

Αλγοριθμικά προβλήματα

Αυτό ήταν ίσως το πιο ενδιαφέρον σημείο προετοιμασίας. Μπορείτε, φυσικά, να καθίσετε και να λύσετε προβλήματα βλακωδώς. Υπάρχουν πολλοί διαφορετικοί ιστότοποι για αυτό. Χρησιμοποίησα κυρίως τρία: Hackerrank, CodeChef и LeetCode. Στο CodeChef, τα προβλήματα χωρίζονται ανά δυσκολία, αλλά όχι ανά θέμα. Στο Hackerrank τόσο από πολυπλοκότητα όσο και από θέμα.

Αλλά όπως διαπίστωσα αμέσως για τον εαυτό μου, υπάρχει ένας πιο ενδιαφέρον τρόπος. Και αυτοί είναι διαγωνισμοί (προκλήσεις προγραμματισμού ή διαγωνισμοί προγραμματισμού). Και οι τρεις τοποθεσίες τις παρέχουν. Είναι αλήθεια ότι υπάρχει πρόβλημα με το LeetCode - μια άβολη ζώνη ώρας. Γι' αυτό δεν συμμετείχα σε αυτόν τον ιστότοπο. Το Hackerrank και το CodeChef παρέχουν έναν αρκετά μεγάλο αριθμό διαφορετικών διαγωνισμών, διάρκειας από 1 ώρα έως 10 ημέρες. Διαφορετικές μορφές έχουν διαφορετικούς κανόνες, αλλά θα μπορούσαμε να το συζητήσουμε για μεγάλο χρονικό διάστημα. Το κύριο σημείο γιατί οι διαγωνισμοί είναι καλοί είναι η εισαγωγή ενός ανταγωνιστικού (και πάλι ταυτολογίας) στοιχείου στη μαθησιακή διαδικασία.

Συνολικά, συμμετείχα σε 37 διαγωνισμούς στο Hackerrank. Από αυτά, 32 ήταν αξιολογήσεις και 5 είτε χορηγήθηκαν (έλαβα ακόμη και 25 $ σε ένα από αυτά) είτε για διασκέδαση. Στην κατάταξη βρέθηκα στο πρώτο 10% 4 φορές, στο πρώτο 11% 12 φορές και στο πρώτο 5% 25 φορές. Τα καλύτερα αποτελέσματα ήταν 27/1459 το 3ωρο και 22/9721 την εβδομάδα.

Άλλαξα στο CodeChef όταν το Hackerrank άρχισε να φιλοξενεί διαγωνισμούς λιγότερο συχνά. Συνολικά κατάφερα να συμμετάσχω σε 5 διαγωνισμούς. Η καλύτερη βαθμολογία ήταν 426/5019 στο διαγωνισμό των δέκα ημερών.

Συνολικά, σε διαγωνισμούς και έτσι έλυσα λίγο περισσότερα από 1000 προβλήματα, τα οποία ταιριάζουν στο σχέδιο. Πλέον, δυστυχώς, δεν υπάρχει ελεύθερος χρόνος για συνέχιση ανταγωνιστικών δραστηριοτήτων, όπως δεν υπάρχει στόχος για τον οποίο να μπορεί να διαγραφεί ο ανελεύθερος χρόνος. Αλλά ήταν διασκεδαστικό. Συνιστώ σε όσους ενδιαφέρονται για αυτό να βρουν ομοϊδεάτες. Μαζί ή σε ομάδα είναι πολύ πιο ενδιαφέρον. Διασκέδασα με αυτό με έναν φίλο, οπότε ίσως πήγε καλά.

Παρακολουθήστε βίντεο

Αφού διάβασα το βιβλίο του Skiena, με ενδιέφερε αυτό που έκανε. Όπως και ο Sedgwick, είναι καθηγητής πανεπιστημίου. Από αυτή την άποψη, βίντεο από τα μαθήματά του μπορούν να βρεθούν στο διαδίκτυο. Αποφάσισα να αναθεωρήσω το μάθημα COMP300E - Προκλήσεις προγραμματισμού - 2009 HKUST. Δεν μπορώ να πω ότι μου άρεσε πολύ. Πρώτα απ 'όλα, η ποιότητα του βίντεο δεν είναι πολύ καλή. Δεύτερον, δεν προσπάθησα να λύσω μόνος μου τα προβλήματα που συζητήθηκαν στο μάθημα. Άρα ο αρραβώνας δεν ήταν πολύ υψηλός.
Επίσης, ενώ έλυνα προβλήματα, προσπαθώντας να βρω τον σωστό αλγόριθμο, έπεσα πάνω στο βίντεο του Tushar Roy. Εργάστηκε στην Amazon και τώρα εργάζεται στην Apple. Όπως διαπίστωσα αργότερα μόνος μου, έχει Κανάλι YouTube, όπου δημοσιεύει μια ανάλυση διαφόρων αλγορίθμων. Τη στιγμή της γραφής, το κανάλι περιέχει 103 βίντεο. Και πρέπει να πω ότι η ανάλυσή του έγινε πολύ καλά. Προσπάθησα να παρακολουθήσω άλλους συγγραφείς, αλλά κατά κάποιο τρόπο δεν λειτούργησε. Οπότε μπορώ σίγουρα να προτείνω αυτό το κανάλι για προβολή.

Παρακολούθηση μαθημάτων

Δεν έκανα κάτι ιδιαίτερο εδώ. Παρακολούθησα ένα βίντεο από το Nanodegree για προγραμματιστές Android της Google και παρακολούθησα ένα μάθημα από το ITMO Πώς να κερδίσετε Διαγωνισμούς Κωδικοποίησης: Secrets of Champions. Το Nanodegree είναι αρκετά καλό, αν και φυσικά δεν έμαθα τίποτα νέο από αυτό. Το μάθημα από το ITMO είναι λίγο λοξό ως προς τη θεωρία, αλλά τα προβλήματα ήταν ενδιαφέροντα. Δεν θα συνιστούσα να ξεκινήσετε με αυτό, αλλά καταρχήν ήταν ο χρόνος που ξοδεύτηκε καλά.

Μάθετε από τις εμπειρίες άλλων ανθρώπων

Φυσικά, πολλοί άνθρωποι προσπάθησαν να μπουν στο Google. Κάποιοι το κατάλαβαν, κάποιοι όχι. Κάποιοι έχουν γράψει άρθρα για αυτό. Από τα ενδιαφέροντα πράγματα που μάλλον θα αναφέρω αυτό и αυτό. Στην πρώτη περίπτωση, το άτομο ετοίμασε για τον εαυτό του μια λίστα με όσα πρέπει να μάθει για να γίνει Μηχανικός Λογισμικού και να μπει στην Google. Τελικά κατέληξε στο Amazon, αλλά αυτό δεν είναι πλέον τόσο σημαντικό. Το δεύτερο εγχειρίδιο γράφτηκε από τη μηχανικό της Google, Larisa Agarkova (Larrr). Εκτός από αυτό το έγγραφο, μπορείτε επίσης να διαβάσετε το blog της.

Είναι λογικό να διαβάζουμε κριτικές συνεντεύξεων στο Glassdoor. Όλα είναι λίγο πολύ παρόμοια, αλλά μπορείτε να πάρετε μερικές χρήσιμες πληροφορίες.

Δεν θα παρέχω συνδέσμους προς άλλα μικρά άρθρα, μπορείτε εύκολα να τα βρείτε στο Google.

Δεύτερο τρέξιμο

Και τώρα πέρασε ένας χρόνος. Αποδείχθηκε πολύ έντονο σε επίπεδο σπουδών. Αλλά προσέγγισα το νέο φθινόπωρο με πολύ βαθύτερες θεωρητικές γνώσεις και ανέπτυξα πρακτικές δεξιότητες. Είχαν μείνει ακόμα λίγες εβδομάδες πριν από το τέλος του έτους που μου είχε διατεθεί για προετοιμασία, όταν ξαφνικά έπεσε στο ταχυδρομείο ένα γράμμα από έναν υπεύθυνο προσλήψεων από την Google, στο οποίο με ρώτησε αν εξακολουθώ να έχω επιθυμία να εργαστώ στη Google και Με πειράζει να μιλήσω μαζί του. Φυσικά, δεν με πείραξε. Συμφωνήσαμε να τηλεφωνήσουμε σε μια εβδομάδα. Μου ζήτησαν επίσης ένα ενημερωμένο βιογραφικό, στο οποίο πρόσθεσα μια σύντομη περιγραφή του τι είχα κάνει κατά τη διάρκεια της χρονιάς στη δουλειά και γενικότερα.

Αφού επικοινωνήσαμε εφ' όρου ζωής, αποφασίσαμε ότι σε μια εβδομάδα θα γίνει μια συνέντευξη Hangout, όπως και πέρσι. Πέρασε μια εβδομάδα, ήρθε η ώρα της συνέντευξης, αλλά ο συνεντευκτής δεν εμφανίστηκε. Πέρασαν 10 λεπτά, είχα ήδη αρχίσει να νευριάζω, όταν ξαφνικά κάποιος ξέσπασε στο chat. Όπως αποδείχθηκε λίγο αργότερα, ο συνεντευκτής μου για κάποιο λόγο δεν μπόρεσε να εμφανιστεί και βρέθηκε επειγόντως αντικαταστάτης του. Το άτομο ήταν κάπως απροετοίμαστο τόσο ως προς τη ρύθμιση του υπολογιστή όσο και ως προς τη διεξαγωγή της συνέντευξης. Αλλά μετά όλα πήγαν καλά. Έλυσα το πρόβλημα γρήγορα, περιέγραψα πού ήταν πιθανές παγίδες και πώς θα μπορούσαν να παρακαμφθούν. Συζητήσαμε πολλές διαφορετικές εκδοχές του προβλήματος και την πολυπλοκότητα του αλγορίθμου. Μετά μιλήσαμε για άλλα 5 λεπτά, ο μηχανικός μας είπε τις εντυπώσεις του από τη δουλειά στο Μόναχο (προφανώς δεν βρήκαν επείγοντα αντικαταστάτη στη Ζυρίχη) και μετά χωρίσαμε.

Την ίδια μέρα, ο υπεύθυνος προσλήψεων επικοινώνησε μαζί μου και είπε ότι η συνέντευξη πήγε καλά και ήταν έτοιμοι να με καλέσουν σε συνέντευξη στο γραφείο. Την επόμενη μέρα τηλεφωνήσαμε μέσω Hangouts και συζητήσαμε τις λεπτομέρειες. Επειδή έπρεπε να κάνω αίτηση για βίζα, αποφασίσαμε να προγραμματίσουμε μια συνέντευξη σε ένα μήνα.

Ενώ ετοίμαζα τα έγγραφα, συζήτησα ταυτόχρονα την επερχόμενη συνέντευξη με τον υπεύθυνο προσλήψεων. Μια τυπική συνέντευξη στη Google αποτελείται από 4 αλγοριθμικές συνεντεύξεις και μία συνέντευξη Σχεδιασμού Συστήματος. Όμως, καθώς έκανα αίτηση για δουλειά ως προγραμματιστής Android, μου είπαν ότι μέρος της συνέντευξης θα ήταν συγκεκριμένο για το Android. Δεν θα μπορούσα να ξεφύγω από τον υπεύθυνο προσλήψεων τι ακριβώς και ποια θα ήταν τα συγκεκριμένα. Από όσο καταλαβαίνω, αυτό εισήχθη σχετικά πρόσφατα και ο ίδιος δεν το γνώριζε πολύ. Είχα επίσης εγγραφεί για δύο εκπαιδευτικές συνεδρίες: πώς να περάσω μια συνέντευξη αλγοριθμικής και πώς να περάσω μια συνέντευξη Σχεδιασμού Συστήματος. Οι συνεδρίες ήταν μέτριας χρησιμότητας. Και εκεί, κανείς δεν μπορούσε να μου πει τι ζητάει από τους προγραμματιστές Android. Επομένως, η προετοιμασία μου για αυτόν τον μήνα συνοψίστηκε στα εξής:

  • Αγοράζοντας έναν πίνακα μαρκαδόρων και γράφοντας 2-3 δωδεκάδες από τους πιο δημοφιλείς αλγόριθμους σε αυτόν από τη μνήμη. 3-5 τεμάχια κάθε μέρα. Συνολικά, το καθένα γράφτηκε πολλές φορές.
  • Ανανεώστε τη μνήμη σας με διάφορες πληροφορίες στο Android που δεν χρησιμοποιείτε καθημερινά
  • Παρακολούθηση μερικών βίντεο σχετικά με τη Μεγάλη Κλίμακα και άλλα παρόμοια

Όπως είπα ήδη, την ίδια στιγμή ετοίμαζα έγγραφα για το ταξίδι. Αρχικά, μου ζήτησαν πληροφορίες για να κάνουν μια επιστολή πρόσκλησης. Μετά προσπάθησα για πολύ καιρό να μάθω ποιος στην Κύπρο δίνει βίζα για την Ελβετία, αφού η ελβετική πρεσβεία δεν ασχολείται με αυτό. Όπως αποδείχθηκε, το αυστριακό προξενείο το κάνει αυτό. Τηλεφώνησα και έκλεισα ραντεβού. Ζήτησαν ένα σωρό έγγραφα, αλλά τίποτα το ιδιαίτερο ενδιαφέρον. Φωτογραφία, διαβατήριο, άδεια παραμονής, ένα σωρό διαφορετικά πιστοποιητικά και, φυσικά, μια επιστολή πρόσκλησης. Στο μεταξύ η επιστολή δεν έφτασε. Τελικά πήγα με κανονική εκτύπωση και δούλεψε αρκετά καλά. Το ίδιο το γράμμα έφτασε 3 ημέρες αργότερα, και η κυπριακή FedEx δεν μπόρεσε να βρει τη διεύθυνσή μου και έπρεπε να πάω να το πάρω μόνος μου. Ταυτόχρονα, έλαβα ένα δέμα από την ίδια FedEx, το οποίο επίσης δεν μπόρεσαν να μου το παραδώσουν, αφού δεν βρήκαν τη διεύθυνση, και το οποίο βρισκόταν εκεί από τον Ιούνιο (5 μήνες, Karl). Δεδομένου ότι δεν το ήξερα, φυσικά, δεν υπέθεσα ότι το είχαν. Έλαβα τη βίζα μου εγκαίρως, μετά από την οποία μου έκλεισαν ένα ξενοδοχείο και μου πρόσφεραν επιλογές πτήσης. Έχω προσαρμόσει τις επιλογές για να το κάνω πιο βολικό. Δεν υπήρχαν πλέον απευθείας πτήσεις, οπότε κατέληξα να πετάω εκεί μέσω Αθήνας και πίσω μέσω Βιέννης.

Αφού διευθετήθηκαν όλα τα τυπικά με το ταξίδι, πέρασαν λίγες μέρες ακόμα και πέταξα πραγματικά στη Ζυρίχη. Έφτασε εκεί χωρίς επεισόδια. Από το αεροδρόμιο προς την πόλη πήρα το τρένο - γρήγορα και άνετα. Αφού περιπλανήθηκα λίγο στην πόλη, βρήκα ένα ξενοδοχείο και έκανα check in. Δεδομένου ότι το ξενοδοχείο είχε κλείσει χωρίς φαγητό, είχα δείπνο δίπλα και πήγα για ύπνο, επειδή η πτήση ήταν πρωί και ήθελα ήδη να κοιμηθώ. Την επόμενη μέρα πήρα πρωινό στο ξενοδοχείο (με επιπλέον χρήματα) και πήγα στο γραφείο της Google. Η Google έχει πολλά γραφεία στη Ζυρίχη. Η συνέντευξή μου δεν ήταν στο κεντρικό. Και γενικά, το γραφείο φαινόταν αρκετά συνηθισμένο, οπότε δεν είχα την ευκαιρία να δω όλα τα καλούδια ενός "κανονικού" γραφείου της Google. Έκανα εγγραφή στον διαχειριστή και κάθισα να περιμένω. Μετά από αρκετή ώρα, ο υπεύθυνος προσλήψεων βγήκε και μου είπε το σχέδιο της ημέρας και μετά με πήγε στην αίθουσα όπου επρόκειτο να γίνουν οι συνεντεύξεις. Στην πραγματικότητα, το σχέδιο περιελάμβανε 3 συνεντεύξεις, μεσημεριανό γεύμα και 2 ακόμη συνεντεύξεις.

Συνέντευξη νούμερο ένα

Η πρώτη συνέντευξη ήταν μόνο στο Android. Και δεν είχε καμία σχέση με αλγόριθμους. Έκπληξη όμως. Λοιπόν, εντάξει, είναι ακόμα πιο συνηθισμένο με αυτόν τον τρόπο. Μας ζητήθηκε να δημιουργήσουμε ένα συγκεκριμένο στοιχείο διεπαφής χρήστη. Πρώτα συζητήσαμε τι και πώς. Προσφέρθηκε να φτιάξει μια λύση χρησιμοποιώντας το RxJava, περιέγραψε τι ακριβώς θα έκανε και γιατί. Είπαν ότι αυτό είναι σίγουρα καλό, αλλά ας το κάνουμε χρησιμοποιώντας το πλαίσιο Android. Και ταυτόχρονα θα γράψουμε τον κωδικό στον πίνακα. Και όχι μόνο ένα στοιχείο, αλλά ολόκληρη η Δραστηριότητα που χρησιμοποιεί αυτό το στοιχείο. Για αυτό δεν ήμουν έτοιμος. Άλλο είναι να γράφεις έναν αλγόριθμο 30-50 γραμμών στον πίνακα και άλλο πράγμα να γράφεις noodles κώδικα Android, ακόμη και με συντομογραφίες και σχόλια στο πνεύμα του "καλά, δεν θα το γράψω αυτό, αφού είναι ήδη προφανές". Το αποτέλεσμα ήταν ένα είδος βινεγκρέτ για 3 σανίδες. Εκείνοι. Έλυσα το πρόβλημα, αλλά φαινόταν χαζό.

Συνέντευξη νούμερο δύο

Αυτή τη φορά η συνέντευξη αφορούσε αλγόριθμους. Και υπήρχαν δύο συνεντεύξεις. Ο ένας είναι ο πραγματικός συνεντευκτής και ο δεύτερος είναι ένας νεαρός padawan (σκιώδης συνεντευκτής). Ήταν απαραίτητο να καταλήξουμε σε μια δομή δεδομένων με ορισμένες ιδιότητες. Αρχικά, συζητήσαμε το πρόβλημα ως συνήθως. Έκανα διαφορετικές ερωτήσεις, απάντησε ο συνεντευκτής. Μετά από κάποιο χρονικό διάστημα, τους ζητήθηκε να γράψουν διάφορες μεθόδους της δομής που επινοήθηκε στον πίνακα. Αυτή τη φορά ήμουν περισσότερο ή λιγότερο επιτυχημένος, αν και με μερικά μικρά λάθη, τα οποία διόρθωσα μετά από προτροπή του συνεντευκτή.

Συνέντευξη νούμερο τρία

Αυτή τη φορά System Design, που ξαφνικά αποδείχθηκε επίσης ότι ήταν Android. Ήταν απαραίτητο να αναπτυχθεί μια εφαρμογή με συγκεκριμένη λειτουργικότητα. Συζητήσαμε τις απαιτήσεις για την εφαρμογή, τον διακομιστή και το πρωτόκολλο επικοινωνίας. Στη συνέχεια, άρχισα να περιγράφω ποια στοιχεία ή βιβλιοθήκες θα χρησιμοποιούσα κατά τη δημιουργία της εφαρμογής. Και στη συνέχεια, όταν αναφέρθηκε το Job Scheduler, υπήρξε κάποια σύγχυση. Το θέμα είναι ότι δεν το χρησιμοποίησα ποτέ στην πράξη, αφού την εποχή που κυκλοφόρησε μόλις είχα περάσει σε υποστηρικτικές εφαρμογές όπου δεν υπήρχαν εργασίες για τη χρήση του. Το ίδιο συνέβη κατά την ανάπτυξη των επόμενων. Δηλαδή θεωρητικά ξέρω τι είναι αυτό το πράγμα, πότε και πώς χρησιμοποιείται, αλλά δεν έχω εμπειρία στη χρήση του. Και στον συνεντευκτή δεν φάνηκε να αρέσει πολύ. Μετά μου ζήτησαν να γράψω κάποιον κώδικα. Ναι, κατά την ανάπτυξη μιας εφαρμογής πρέπει να γράψετε αμέσως κώδικα. Και πάλι κώδικας Android στον πίνακα. Έγινε πάλι τρομακτικό.

Μεσημεριανό

Ένα άλλο άτομο έπρεπε να έρθει, αλλά δεν το έκανε. Και η Google κάνει λάθη. Ως αποτέλεσμα, πήγα για μεσημεριανό γεύμα με την προηγούμενη συνεντευκτή, τη συνάδελφό της, και λίγο αργότερα ήρθε και η επόμενη συνέντευξη. Το μεσημεριανό ήταν αρκετά αξιοπρεπές. Και πάλι, καθώς αυτό δεν είναι το κεντρικό γραφείο στη Ζυρίχη, η τραπεζαρία φαινόταν αρκετά συνηθισμένη, αν και πολύ ωραία.

Συνέντευξη νούμερο τέσσερα

Τέλος, οι αλγόριθμοι στην πιο καθαρή τους μορφή. Έλυσα το πρώτο πρόβλημα αρκετά γρήγορα και αμέσως αποτελεσματικά, αν και έχασα μια περίπτωση, αλλά με την προτροπή του συνεντευξιαστή (έδωσε αυτήν ακριβώς την ακραία περίπτωση) βρήκα το πρόβλημα και το διόρθωσα. Φυσικά, έπρεπε να γράψω τον κωδικό στον πίνακα. Στη συνέχεια δόθηκε μια παρόμοια εργασία, αλλά πιο δύσκολη. Για αυτό, βρήκα μερικές μη βέλτιστες λύσεις και σχεδόν βρήκα τη βέλτιστη, 5-10 λεπτά δεν ήταν αρκετά για να ολοκληρώσω τη σκέψη. Λοιπόν, δεν είχα χρόνο να γράψω τον κωδικό για αυτό.

Συνέντευξη νούμερο πέντε

Και πάλι συνέντευξη Android. Αναρωτιέμαι γιατί μελετούσα αλγόριθμους όλο το χρόνο;
Στην αρχή υπήρχαν μερικές απλές ερωτήσεις. Στη συνέχεια, ο ερευνητής έγραψε κώδικα στον πίνακα και ζήτησε να βρει προβλήματα σε αυτόν. Το βρήκα, το εξήγησα, το διόρθωσε. Συζητήθηκε. Και μετά ξεκίνησαν μερικές απροσδόκητες ερωτήσεις με το πνεύμα «τι κάνει η μέθοδος Υ στην τάξη Χ», «τι είναι μέσα στη μέθοδο Υ», «τι κάνει η τάξη Ζ». Φυσικά, απάντησα κάτι, αλλά μετά είπα ότι δεν το έχω συναντήσει πρόσφατα στη δουλειά μου και φυσικά δεν θυμάμαι ποιος κάνει τι και πώς λεπτομερώς. Μετά από αυτό, ο συνεντευκτής ρώτησε τι έκανα τώρα. Και οι ερωτήσεις πήγαν σε αυτό το θέμα. Έχω ήδη απαντήσει πολύ καλύτερα εδώ.

Μετά το τέλος της τελευταίας συνέντευξης, μου πήραν το πάσο, μου ευχήθηκαν καλή επιτυχία και με έστειλαν στο δρόμο. Περπάτησα λίγο στην πόλη, έφαγα και πήγα στο ξενοδοχείο, όπου κοιμήθηκα, μιας και η πτήση ήταν πάλι νωρίς το πρωί. Την επόμενη μέρα έφτασα με ασφάλεια στην Κύπρο. Κατόπιν αιτήματος του υπεύθυνου προσλήψεων, έγραψα σχόλια για τη συνέντευξη και συμπλήρωσα μια φόρμα σε μια ειδική υπηρεσία για να επιστρέψω τα χρήματα που δαπανήθηκαν. Από όλα τα έξοδα, η Google πληρώνει απευθείας μόνο για εισιτήρια. Το ξενοδοχείο, το φαγητό και τα ταξίδια πληρώνονται από τον υποψήφιο. Στη συνέχεια συμπληρώνουμε τη φόρμα, επισυνάπτουμε τις αποδείξεις και τη στέλνουμε σε ειδικό γραφείο. Το επεξεργάζονται και μεταφέρουν χρήματα στον λογαριασμό αρκετά γρήγορα.

Χρειάστηκε μιάμιση εβδομάδα για την επεξεργασία των αποτελεσμάτων της συνέντευξης. Μετά από αυτό ενημερώθηκα ότι ήμουν "λίγο κάτω από το μπαρ". Δηλαδή έπεσα λίγο κοντός. Πιο συγκεκριμένα, 2 συνεντεύξεις πήγαν καλά, 2 λίγο όχι και τόσο καλά, και System Design όχι πολύ καλά. Τώρα, αν τουλάχιστον 3 είχαν πάει καλά, τότε θα μπορούσαμε να αγωνιστούμε, διαφορετικά δεν υπάρχει περίπτωση. Προσφέρθηκαν να επιστρέψουν σε άλλον έναν χρόνο.

Στην αρχή βέβαια στενοχωρήθηκα, γιατί είχε γίνει πολύς κόπος στην προετοιμασία και μέχρι τη συνέντευξη σκεφτόμουν ήδη να φύγω από την Κύπρο. Η εγγραφή στην Google και η μετακόμιση στην Ελβετία φαινόταν εξαιρετική επιλογή.

Συμπέρασμα

Και εδώ φτάνουμε στο τελευταίο μέρος του άρθρου. Ναι, απέτυχα δύο φορές στη συνέντευξη της Google. Είναι λυπηρό. Μάλλον θα ήταν ενδιαφέρον να δουλέψω εκεί. Αλλά, μπορείτε να δείτε το θέμα από την άλλη πλευρά.

  • Σε ενάμιση χρόνο, έμαθα πολλά πράγματα σχετικά με την ανάπτυξη λογισμικού.
  • Διασκέδασα πολύ συμμετέχοντας σε διαγωνισμούς προγραμματισμού.
  • Πήγα στη Ζυρίχη για μερικές μέρες. Πότε θα πάω ξανά εκεί;
  • Είχα μια ενδιαφέρουσα εμπειρία συνέντευξης σε μια από τις μεγαλύτερες εταιρείες πληροφορικής στον κόσμο.

Έτσι, όλα όσα συνέβησαν κατά τη διάρκεια αυτών των ενάμιση ετών μπορούν απλώς να θεωρηθούν εκπαίδευση ή εκπαίδευση. Και τα αποτελέσματα αυτής της εκπαίδευσης έγιναν αισθητά. Η ιδέα μου να φύγω από την Κύπρο ωρίμασε (λόγω κάποιων οικογενειακών συνθηκών), πέρασα με επιτυχία αρκετές συνεντεύξεις με άλλη γνωστή εταιρεία και μετακόμισα μετά από 8 μήνες. Αλλά αυτό είναι μια εντελώς διαφορετική ιστορία. Ωστόσο, νομίζω ότι πρέπει να ευχαριστήσω την Google τόσο για τον ενάμιση χρόνο που δούλεψα πάνω μου, όσο και για 2 ενδιαφέρουσες μέρες στη Ζυρίχη.

Τι να πω επιτέλους; Εάν εργάζεστε στον τομέα της πληροφορικής, προετοιμαστείτε για συνεντεύξεις στην Google (Amazon, Microsoft, Apple, κ.λπ.). Ίσως κάποια μέρα να πάτε εκεί για να φτάσετε εκεί. Ακόμα κι αν δεν το θέλετε, πιστέψτε με, μια τέτοια προετοιμασία δεν θα σας κάνει χειρότερο. Τη στιγμή που θα συνειδητοποιήσετε ότι μπορείτε (έστω και με τύχη) να πάρετε μια συνέντευξη με μια από αυτές τις εταιρείες, θα ανοίξουν πολλοί περισσότεροι δρόμοι για εσάς από ό,τι πριν ξεκινήσετε την προετοιμασία σας. Και το μόνο που χρειάζεστε στην πορεία είναι σκοπός, επιμονή και χρόνο. Σου εύχομαι επιτυχία :)

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο