[00:00:02] [Παίζει μουσική] ΧΑΝΑ: Γεια, σε όλους. Ευχαριστώ παιδιά τόσο πολύ για την έξοδο στο αηδιαστικό καιρός για ένα κουίζ επανεξετάσει συνεδρία. Όπως εσείς γνωρίζετε, κουίζ η μία είναι αυτή την Τετάρτη. Έτσι θα πάμε να πάει μέσα από μια δέσμη θεμάτων. Davin: Γεια σου, μπορώ να πω κάτι πραγματικά γρήγορα; ΧΑΝΑ: Ναι, Davin πηγαίνει να πω κάτι πραγματικά γρήγορα. Davin: Συγγνώμη. Απλά πραγματικά γρήγορα, αν έχετε απορίες σχετικά με το κουίζ, μπορείτε να πάτε σε απευθείας σύνδεση. Πηγαίνετε στο 2014 κουίζ ένα, για το κουίζ. Είναι πήρε εφοδιαστικής για Πού να πάτε, πότε να πάει. Αν είστε εγγεγραμμένος ταυτόχρονα, είμαστε πρόκειται να έχουμε ένα κουίζ μακιγιάζ στις 5:30. Ή αν μου έστειλε ένα ζήτημα, έχετε κάποιο άλλο πρόβλημα. Αλλά 5:30 είναι το make-up φορά την Τετάρτη. Αλλά αν έχετε ερωτήσεις, γενικές ερωτήσεις, σε απευθείας σύνδεση έχει όλα τα logistics. Έτσι, ελέγξτε πρώτα εκεί. [00:00:47] ΧΑΝΑ: Awesome. Τόσο εδώ είναι η μεγάλη λίστα θεμάτων ότι θα πάμε για να περάσει σήμερα. Πάω να καλύψει το σύνολο της C πράγματα, η οποία είναι ότι η πρώτη στήλη. Έτσι τα πράγματα που έχουμε C καλύπτονται μετά κουίζ μηδέν. Αρχίζοντας με μια συνδεδεμένη λίστα, το οποίο περιλαμβάνει δείκτες. [00:01:05] Εντάξει, έτσι είδαμε αυτό κατά την τελευταία συνεδρίαση επανεξέτασης, έτσι Πάω να περάσουν αυτό είναι λίγο πιο γρήγορα. Απλά σηκώστε το χέρι σας, αν θέλεις να να επιβραδύνουν ή να αντιμετωπίσουν κάτι ακόμη. Αλλά χρησιμοποιούμε συνδεδεμένες λίστες, επειδή αρχίσαμε σε C με συστοιχίες. Και συστοιχίες είναι μεγάλη, αλλά η το πρόβλημα είναι ότι έχουν ένα σταθερό μέγεθος. Συνδεδεμένες λίστες μας επιτρέπουν να δημιουργούμε δυναμικά μεγέθους δομών δεδομένων. [00:01:28] Και έχουμε βασικές λειτουργίες μας, εισαγωγή, τη διαγραφή και αναζήτηση. Και μπορούμε να κάνουμε ένθετο χειρότερη περίπτωση σταθερό χρόνο αν εμείς απλά το έθεσε από την αρχή. Διαγραφή και αναζήτηση, το χειρότερο περίπτωση μεγάλων ω του χρόνου n. Έτσι και πάλι, μόνο και μόνο για να αναστρέψετε Μέσα από τις φωτογραφίες, Ξέρω ότι είδαμε αυτά τελευταία φορά, αλλά εμείς θέλετε να παρακολουθείτε συνδεδεμένη λίστα μας με την παρακολούθηση των επικεφαλής της συνδεδεμένης λίστας μας. Επειδή γνωρίζουμε ότι κάθε ένα από τους κόμβους μας είναι ακριβώς πρόκειται να επισημαίνουν την επόμενο κόμβο σε συνδεδεμένη λίστα μας. [00:01:58] Έτσι, αυτό είναι το πώς μπορούμε να παρακολουθείτε. Ακόμα κι αν αυτά δεν είναι συνεχής κομμάτια της μνήμης, μπορούμε να τα βρούμε με απλά μετά από τα διάφορα βέλη. Εδώ είναι η δομή μας για μία συνδεδεμένη λίστα κόμβων. Είδαμε αυτό το τελευταίο χρονικό διάστημα. Έχουμε struct node μας. Και αυτό έχει δύο ιδιότητες. Νούμερο ένα, το πραγματικό τιμή που θέλετε να αποθηκεύσετε. Σε αυτήν την περίπτωση, είναι ένας ακέραιος αριθμός. Θα μπορούσε να είναι ένα string, θα μπορούσε είναι μια χαρα, ό, τι θέλετε. Και τότε, θα πρέπει να παρακολουθείτε ο επόμενος κόμβος στη συνδεδεμένη λίστα μας. Έτσι, αυτό πρόκειται να είναι ένα δείκτης στον επόμενο κόμβο. Αν απλά κάναμε αναζήτησης, όπως είπα και πριν, που θα πρέπει να ακολουθήσετε τα βέλη σας προς τα κάτω. Εισαγωγή, θα παρακολουθείτε από όπου το υπόλοιπο του καταλόγου σας. Και θέλετε να ανακατευθύνετε το κεφάλι να επισημάνω το νέο στοιχείο μας, η οποία σε αυτή την περίπτωση είναι ένα, και, στη συνέχεια, κάποιος θα επισημάνει για το υπόλοιπο της συνδεδεμένης λίστας. Έτσι και πάλι, ξέρω ότι αυτό είναι ένα μικρό κομμάτι της επανάληψης από το μηδέν κουίζ. Έτσι πρέπει να είμαστε πολύ προσεκτικοί σχετικά με τη σειρά με την οποία θα κάνει αυτές τις επισημάνσεις, ώστε να μην κάνουμε χαθούν τα ίχνη του στο πίσω μέρος της λίστας. Εντάξει, οποιεσδήποτε ερωτήσεις με μόνο μεμονωμένα συνδεδεμένες λίστες; Φοβερό, ΟΚ, δροσερό. [00:03:06] Μέχρι τώρα, θα πάμε για να πάει σε κάτι μόλις λίγο πιο περίπλοκη, διπλά συνδεδεμένες λίστες. Έτσι, εκτός από τη διατήρηση κομμάτι του επόμενου κόμβου, θέλουμε επίσης να παρακολουθείτε του προηγούμενου κόμβου. Και αυτό μας επιτρέπει να, αν είμαστε σε κάποιο σημείο σε συνδεδεμένη λίστα μας, όχι μόνο να πάει προς τα εμπρός, αλλά Επίσης επαναλάβει προς τα πίσω. Διότι όπως είδαμε στο ένα μεμονωμένα συνδεδεμένη λίστα, αν ήμασταν σε κάποιο κόμβο, και ξαφνικά, αποφασίσαμε, στην πραγματικότητα, θέλω να πάω να το δικαίωμα κόμβο πριν από μένα, θα έπρεπε να πάνε όλα το δρόμο της επιστροφής προς το κεφάλι και διέτρεξε μέχρι να βρεθεί ο κόμβος που ψάχνατε. [00:03:35] Έτσι, αυτό κάνει τα πράγματα λίγο πιο εύκολο, όπως είμαστε προσπαθεί να επαναλάβει μέσω συνδεδεμένη λίστα μας. Αλλά αυτό απαιτεί από εμάς να παρακολουθείτε ένα περισσότερα δείκτη, έτσι ένα ακόμη αστέρι κόμβο. Εντάξει, έτσι και εδώ έρχεται το διασκεδαστικό μέρος. Εμείς πάμε για να ασκήσετε την εφαρμογή αφαίρεση για διπλά συνδεδεμένες λίστες. Έτσι, αυτό είναι κάτι που είναι εντελώς δίκαιη παιχνίδι για το κουίζ. Εμφανίστηκε στο παρελθόν κουίζ. Έτσι σίγουρα να παρασκευάζονται να κωδικοποιήσει λίγο στο Γ Μην ξεχνάτε ότι με όλα αυτό το διασκεδαστικό PHP και JavaScript, εξακολουθούμε να έχουμε να θυμόμαστε να κάνουμε Γ Έτσι βούρτσα επάνω σε αυτό εάν αισθάνεστε σκουριασμένο. [00:04:12] Εντάξει, ας δούμε αν μπορούμε να το κάνουμε αυτό. Εντάξει, δροσερό. Έτσι θα πάμε να δοκιμάσετε να επεξεργαστείτε ακριβώς εδώ, και ελπίζουμε ότι αυτό πηγαίνει όπως είχε προγραμματιστεί. Εντάξει, δεν θέλει κανείς να μου δώσει μια πρόταση για το πώς θα πρέπει να αρχίσω; Η μόνη υπόθεση είμαι αποφάσεων είναι ότι έχω ήδη έχουν μια δομή που ορίζεται, η που μου έδειξε στην τελευταία σελίδα, την τελευταία διαφάνεια. Και είμαι αποθήκευση του επικεφαλής της συνδέονται μου Λίστα με κάποιο δείκτη που ονομάζεται λίστα. Υπάρχει κάποιος που θέλει να πάρει άρχισε; [00:04:42] ΚΟΙΝΟ: Μπορείτε να δημιουργήσετε ένα νέο κόμβος να καλέσετε μέσα στη λίστα; [00:04:45] ΧΑΝΑ: Awesome, έτσι θα πάμε να δημιουργήσουμε ένας νέος κόμβος να ανιχνεύσουμε μέσα από τη λίστα. Μου αρέσει αυτό. Θα καλέσω ακριβώς το δείκτη, αν αυτό είναι εντάξει. Και πού θα πρέπει αρχικά να ξεκινήσει; [00:04:57] ΚΟΙΝΟ: Πιθανώς ο επικεφαλής της λίστας. ΧΑΝΑ: Όμορφη. Θέλουμε να ξεκινήσουμε από την κεφαλή, η οποία Είπα πρόκειται να αποθηκευτεί στη λίστα. Awesome. Μέχρι στιγμής, όλα καλά. Και τώρα, ο στόχος μας είναι να διέτρεξε τη λίστα μέχρι να βρούμε τον κόμβο με n αξία που θέλετε να διαγράψετε. Εντάξει; [00:05:13] Έτσι, τώρα είναι το μέρος όπου θέλουμε να μετακινηθείτε μέσα. Μπορεί κανείς να προτείνει μια τρόπος για να μετακινηθείτε μέσα; [00:05:19] ΚΟΙΝΟ: Ένας βρόχος. [00:05:20] ΧΑΝΑ: Ένας βρόχος. Το λατρεύω. Συγκεκριμένα, μπορούμε να δοκιμάσουμε ένα βρόχο while. ΟΚ, και γνωρίζουμε ότι έχουμε φτάσει στο τέλος της λίστας μας, όπου αυτό; ΚΟΙΝΟ: Όταν ο δείκτης είναι άκυρη. ΧΑΝΑ: Όταν ο δείκτης είναι άκυρη. Όμορφη, μου αρέσει αυτό. Εντάξει, δροσερό. Έτσι, συγγνώμη αν οριοθέτησης τιράντες μου είναι είδος πτώση από την οθόνη. Μας έφερε πίσω. Εντάξει, δροσερό. Ποιο είναι το επόμενο; [00:05:48] Έτσι, ξέρουμε ότι θέλετε να διαγράψετε ο κόμβος που έχει τιμή Ν. Ας βρούμε την περίπτωση όπου θα βρείτε πραγματικά κόμβο μας. Λοιπόν, πώς θα μπορώ να ελέγξω αυτό; Θα ήθελα απλώς να πω εάν το δείκτη, και στη συνέχεια, αν μου θέλετε να πάρετε την τιμή από το δείκτη, Εγώ απλά arrow Ν, ισούται με n, την παράμετρο ότι δώσαμε σε αυτή τη λειτουργία, η κόμβο που θέλετε να διαγράψετε πραγματικά. Οποιεσδήποτε ερωτήσεις μέχρι εδώ; Εντάξει. Εντάξει, έτσι και τώρα ας συντάξει μια γρήγορη εικόνα στο διοικητικό συμβούλιο, προκειμένου να απεικονίσει αυτό. [00:06:24] Οπότε ας πούμε ότι υπάρχει υπέροχη κόμβο μας. Και αυτό έχει μια τιμή, θα πω μόνο τέσσερα. Και αυτό υποδεικνύει την επόμενη κόμβος σε συνδεδεμένη λίστα μας. Και δεν υπάρχει τίποτα πριν από αυτό. Έτσι έχουμε τα προηγούμενα μας επισημαίνοντας τίποτα. Σε αυτή την περίπτωση, θα δείχνουν προς τα πίσω. Εντάξει, ακριβώς τη σύσταση μου συνδεδεμένη λίστα εδώ. Και έχουμε μια λίστα που δείχνει σε αυτή τη δομή για να αρχίσει με. Θα αντλήσουν ένα ακόμη για λόγους πληρότητας. ΟΚ. Θα επισημάνω αυτό προς τα εμπρός. Και εγώ θα επισημάνω ότι ένα πίσω. Ωχ, συγνώμη. Ναι, πήρα αυτό προς τα πίσω. Κάν 'το και πάλι. Εντάξει, εκεί πηγαίνουμε. Εντάξει, το πήρα. Εντάξει, εδώ είναι εικόνα μας. [00:07:21] Εντάξει, έτσι θέλουμε να εξετάσουμε δύο περιπτώσεις. Η πρώτη περίπτωση είναι αν η κόμβο που θέλετε να διαγράψετε είναι κατά την έναρξη της λίστας μας. Και στη συνέχεια, η δεύτερη περίπτωση που θέλουμε πρέπει να εξεταστεί είναι αν είναι πουθενά αλλού. Καταλαβαίνω ότι αυτό είναι ένα εντελώς βρώμικο σχέδιο με όλες διαγραφή μου, αλλά ελπίζουμε ότι θα προσπαθήσουμε να ξεκαθαρίσουμε αυτό με κάποιο κωδικό. [00:07:40] Εντάξει, ας καλύπτουν την περίπτωση όπου βρήκαμε τον κόμβο μας, και είναι κατά πολύ έναρξη της συνδεδεμένης λίστας μας. Κάποιος να μου δώσει μια υπόδειξη εδώ ως προς το τι Θα πρέπει να κάνετε για να αφαιρέσετε πραγματικά κόμβο μας; Είναι λίγο δύσκολο. Εντάξει; [00:07:56] ΚΟΙΝΟ: Θα πρέπει να λάβει η κόμβο που θα είναι πριν από την και να καταστεί το σημείο να το ένα που θα ήταν μετά από αυτό, και να λάβει τον κόμβο που θα ήταν μετά από αυτό και να το σημείο στον κόμβο πριν από αυτό. ΧΑΝΑ: Ακριβώς. Εντάξει, έτσι αυτό είναι η περίπτωση where-- έχουμε δύο περιπτώσεις. Έχουμε την περίπτωση κατά την οποία το κόμβο που ψάχνουμε για είναι το μέτωπο της λίστας. OK, και στη συνέχεια η περίπτωση που που περιγράφονται είναι διαφορετικά, έτσι δεν είναι; Είναι κάπου αλλού στον κατάλογο. Έτσι είπε, θα πρέπει να δείτε το προηγούμενο κόμβο, και να κάνει το προηγούμενο κόμβο σημείο στον επόμενο κόμβο. Ας πούμε ότι είμαστε προσπαθούν να πάρουν πέντε σε πολύ βρώμικο σχέδιο μου εδώ. Θέλουμε να βεβαιωθείτε ότι Τέσσερα σημεία τώρα σε έξι. Τέσσερα σημεία δίπλα σε έξι. Και έξι για τα προηγούμενα σημεία σε τέσσερις. Αυτός είναι ο στόχος μας εδώ, έτσι δεν είναι; Αυτό είναι αυτό που νομίζετε μόλις είπε εκεί. [00:08:56] Εντάξει, ας πάρει το πρώτο κομμάτι. Ας κάνουμε το έχει η προηγούμενο δείκτη προηγούμενο. Έτσι, θα πρέπει να επισημάνω σε ό, τι τέσσερις είναι το επόμενο βήμα; Ακριβώς, στην περίπτωση αυτή, έξι. Γι 'αυτό και πρέπει να πούμε δείκτη, το επόμενο. Εντάξει; Εντάξει. Οπότε ας απαλλαγούμε από αυτό το άσχημο εικόνα και προσπαθήστε να σχεδιάσετε μια ελαφρώς καλύτερο ένα. Έχουμε λίστα κεφάλι μας εδώ. Και αυτό δείχνει στον πρώτο κόμβο συνδεδεμένη λίστα μας, που είπαμε είναι τέσσερα. Εδώ είναι το δεύτερο κόμβο μας, πέντε. Και τρίτο κόμβο μας, έξι. Απλά προσπαθεί να επιστήσει την ίδια ακριβώς εικόνα, λίγο πιο καθαρά. Εντάξει, έτσι τέσσερα δίπλα επισημαίνει αρχικά σε πέντε. Πέντε δίπλα σημεία σε έξι. Έξι είναι τα προηγούμενα σημεία σε πέντε. Και τα πέντε προηγούμενα σημεία του σε τέσσερις. Τόσο πολύ καλύτερο! Εντάξει, δροσερό. [00:10:04] Μέχρι τώρα, αυτό που κάναμε μόλις εδώ, αυτή η γραμμή του κώδικα, που λέει δείκτη προηγούμενο επόμενη, έτσι τι σημαίνει αυτό; Αυτό σημαίνει ότι αν ψάχνουμε σε πέντε, μεταβείτε στο προηγούμενο κόμβο, και αυτό είναι το επόμενο βήμα θα πρέπει τώρα σημείο σε πέντε δίπλα. Έτσι, κατ 'ουσίαν, αυτό που κάνει είναι ότι τη διαγραφή αυτού του βέλους και καθιστώντας προχωρήσετε κατευθείαν πάνω από πέντε. Είναι σαφές; Ξέρω ότι μπορεί να είναι λίγο ατελής. Βλέπω κάποια νεύματα της κεφαλής. Αυτό είναι καλό. Εντάξει, δροσερό. Τώρα, ποιο είναι το επόμενο βήμα; [00:10:39] Έχω να επαναφέρετε την επόμενη. Τώρα, ποια άλλα βέλος χρειάζεται να αλλάξει; Αυτός ακριβώς εδώ. Έξι το προηγούμενο. Δεν θέλουμε έξι το προηγούμενο να επισημάνω πέντε πια. Θέλουμε να επισημάνω τέσσερα. Μήπως η εικόνα νόημα; Έτσι τώρα μπορούμε να πάρουμε πραγματικά πέντε έξω. Ας πάρει αυτό το κομμάτι. Τι πρέπει να κάνω πριν επαναφορά του προηγούμενου έξι σε τέσσερα; Οποιεσδήποτε ιδέες εκεί; [00:11:14] ΚΟΙΝΟ: Ελευθερώστε τον κόμβο μεταξύ τους θέτοντας σε κενή; ΧΑΝΑ: Cool. Σίγουρα, ο τελικός στόχος μας είναι πρόκειται να είναι να ελευθερώσει το κόμβο. Έτσι μπορούμε να κάνουμε αυτό το δικαίωμα εδώ. Δωρεάν δείκτη. Απολύτως. Αλλά ακόμη και πριν από αυτό, ας just-- δεξιά στόχος μας εδώ είναι να θέσει το δείκτη του επόμενου προηγούμενο ίσο με το δείκτη του προηγούμενου. Ξέρω ότι αυτό είναι πέφταμε. Εντάξει, ας take-- δροσερό. Μπορούν όλοι να δείτε αυτό το συμπέρασμα; Ή μήπως είναι σούπερ μικροσκοπικό; [00:11:50] Έτσι, πριν εκτελέσει Αυτή η γραμμή εδώ, θέλουμε για να βεβαιωθείτε ότι δείκτης επόμενο δεν είναι μηδενική. Διότι, αν ο δείκτης είναι το επόμενο null, τι είδους σφάλματος θα πάρω όταν προσπαθώ να αναφορά σε ένα κενό δείκτη; ΚΟΙΝΟ: ακολ σφάλμα. ΧΑΝΑ: Ένα σφάλμα SEG, όμορφη. Εντάξει, οπότε αν αυτό δεν είναι null, τότε μπορούμε να ρυθμίσουμε. Και έχουμε έξι σημείο και πάλι σε τέσσερα. Ερωτήσεις μέχρι αυτό το σημείο; Ναι; [00:12:17] ΚΟΙΝΟ: Στο πρώτο σας εάν δήλωση, κάνατε σημαίνει να έχει το βέλος δίπλα, ή [δεν ακούγεται]; ΧΑΝΑ: Εννοούσα δείκτη βέλους Ν. Έτσι, βασικά, αυτό που προσπαθώ να κάνω είναι να λένε, τον τρέχοντα κόμβο που είμαι επανάληψη πάνω, η τρέχουσα κόμβο που Είμαι κοιτάζοντας, είμαι αποθήκευση στο δείκτη. Και θέλω να ξέρω δείκτη του τιμή, η οποία στην περίπτωση αυτή είναι n. Και θέλω να δω, είναι ο κόμβος Ψάχνω για τον κόμβο είμαι με στόχο να διαγραφεί; Έτσι, γι 'αυτό έχουμε εδώ δείκτη n. [00:12:47] ΚΟΙΝΟ: Έτσι το βέλος πηγαίνει στο n, μπορείτε να ορίσετε την τιμή και να το αποθηκεύσετε σε έναν κόμβο που ονομάζεται n; [00:12:55] ΧΑΝΑ: Έτσι είναι σαν να είμαι που διέρχεται από αυτό το συνδεδεμένη λίστα και δείχνοντας πέντε. Αν θέλω να πάρω αυτήν την τιμή, εάν Θέλω να πάρω αυτόν τον αριθμό, 5, Έχω να κάνω δείκτη βέλους Ν. Cool; Ναι. [00:13:07] ΚΟΙΝΟ: είναι Ν το όνομα της μεταβλητής; ΧΑΝΑ: Ναι. Έτσι, αν αναστρέψετε τα πίσω κατά ένα διαφανειών, n είναι το όνομα της αξίας εσωτερικό του κόμβος σε συνδεδεμένη λίστα μας. Και ξέρω ότι μπορεί να πάρει λίγο κάποια σύγχυση, επειδή εμείς επίσης καλούν το πράγμα ότι θέλουμε να διαγράψετε Ν. Έτσι, αυτό είναι όπου η μία γραμμή προέρχεται. Ναι; [00:13:27] ΚΟΙΝΟ: Τι έχετε [Δεν ακούγεται] πώς λειτουργούν; Ένας δείκτης [δεν ακούγεται]; [00:13:35] ΧΑΝΑ: Σίγουρα. Μιλάτε about-- ποια γραμμή; ΚΟΙΝΟ: Η τελευταία γραμμή [δεν ακούγεται]. [00:13:44] ΧΑΝΑ: Σίγουρα, εντάξει. Ας ρίξουμε μια ματιά στην εικόνα προκειμένου να προσπαθήσουμε να εξηγήσουμε αυτό. Λυπάμαι, για το φωτογραφική μηχανή, το ερώτημα ήταν μπορούμε να εξηγήσουμε το δείκτη βέλος δίπλα δείκτη προηγούμενο. Εντάξει, ας πούμε ότι είμαστε σε πέντε και στόχος μας είναι να διαγράψετε πέντε. Έτσι δείκτης επόμενη, ποια από αυτές τις τρεις κόμβους πάει να μας δώσει; Αυτό μας φέρνει στο έκτο κόμβο, έτσι δεν είναι; [00:14:10] Εντάξει, έτσι και τώρα ζητάμε για τα προηγούμενα τα έξι του. Εντάξει; Και είμαστε επαναφορά αυτό να είναι ίσο με τέσσερα, η οποία έτυχε να είναι πέντε της προηγούμενης. Ξέρω, είναι σούπερ δύσκολο να παρακολουθείτε. Θα ήθελα να συστήσω πραγματικά να σας επιστήσω εικόνες εάν έχετε μια ερώτηση σαν αυτό. Ναι; [00:14:30] ΚΟΙΝΟ: είναι ο λόγος που δεν έχουμε ένα [δεν ακούγεται]; [00:14:37] ΧΑΝΑ: Ακριβώς. Άρα το ερώτημα ήταν, γιατί Δεν πρέπει να ελέγξετε εδώ; Γιατί δεν πρέπει να ελέγξουμε ότι δείκτης προηγούμενα δεν είναι ίση με null; Και αυτό συμβαίνει γιατί έχουμε ήδη διαχωριστεί στην περίπτωση που ο δείκτης του από την αρχή. Πολύ καλή ερώτηση. Οτιδήποτε άλλο σχετικά με αυτό; Εντάξει, δροσερό. Οπότε ας το τελειώσουμε. Είμαστε σχεδόν εκεί. [00:14:59] Έτσι, ό, τι και αν είναι στο κεφάλι; Τι θα συμβεί αν αντί προσπαθώντας να διαγράψετε πέντε, πραγματικά θέλαμε να διαγράψει τέσσερα; Τι θα πρέπει να κάνω; Λοιπόν, θέλω να επαναφέρετε το κεφάλι μου σε ό, τι; Φώναξε έξω; ΚΟΙΝΟ: Η μία μετά. ΧΑΝΑ: Όμορφη. Εντάξει, έτσι θέλουμε λίστα να δείχνει σε ό, τι δείκτη επόμενο κόμβο μας είναι. Καλή. Και μόνο για την πληρότητα του χάρη, εμείς θα θέλετε να ελέγξετε ότι όσο λίστα μας δεν είναι μηδενική, όσο λίστα μας δεν είναι άδειο, τότε θα θέλετε να ρυθμίσετε προηγούμενο ίσο μας για μηδενική. Ερώτηση μέχρι στιγμής; Ένα βήμα μακριά from--; [00:15:53] Κοινό: Θα ήταν αν κατάλογος δεν είναι ίση με null; [00:15:55] ΧΑΝΑ: Ναι, είσαι εντελώς δεξιά. Λυπάμαι πολύ. Είναι η λίστα δεν είναι ίση με null. Awesome. Προσπαθώντας να φέρει όλα αυτά στην οθόνη. Είναι το είδος του πτώση. Συγγνώμη, παιδιά. Και τελευταίο αλλά όχι λιγότερο σημαντικό, όλα έχουμε να κάνουμε είναι η επιστροφή. ΟΚ. Αυτό ήταν πολύ στριμωγμένος σε πραγματικά γρήγορα. Πάρτε ένα δευτερόλεπτο για να κοιτάξει πάνω από αυτό. Πείτε μου αν έχετε οποιεσδήποτε ερωτήσεις. Ναι; [00:16:20] ΚΟΙΝΟ: Εάν η λίστα είναι ο κεφάλι, then-- περιμένετε, Nevermind. [00:16:26] ΧΑΝΑ: Εντάξει, καλά. Έτσι, αυτό είναι αν η λίστα είναι στο κεφάλι, θα το αφαιρέσετε σε ό, τι έχουμε τοποθετηθεί. Ναι; [00:16:31] ΚΟΙΝΟ: Μπορείτε να εξηγήσετε η πρώτη δήλωση αν πάλι; Εάν ο δείκτης για το η είναι ίσο με ν? ΧΑΝΑ: Σίγουρα. Έτσι, ο στόχος μας από όλη αυτή την λειτουργία για να διαγράψετε τον κόμβο που έχει αξία ν. Έτσι, εάν βρούμε, όπως είμαστε επανάληψη μέσω του καταλόγου μας, ο κόμβος με τιμή n, που είναι το ένα που θέλετε να διαγράψετε. Έτσι, το σύνολο της διαγραφής συμβαίνει μέσα από αυτό το μεγάλο if. Μήπως αυτό έχει νόημα; Cool. Ναι; [00:16:59] ΚΟΙΝΟ: Ίσως απλά δεν μπορείτε να δείτε αυτό, αλλά δεν θα πρέπει να έχετε επίσης μια γραμμή για κύλιση μέσα στη λίστα; ΧΑΝΑ: Awesome. Ας θέσουμε αυτό το λίγο, και θα ρίξει το δικαίωμα αυτό στο κάτω μέρος. Ίσως το διοικητικό συμβούλιο θα έχουμε ήταν ελαφρώς καλύτερη ιδέα. Λοιπόν, πώς θα μπορώ να μετακινήσετε το δείκτη προς τα εμπρός; [00:17:17] ΚΟΙΝΟ: Δείκτης ισούται με το δείκτη του συν ένα. [00:17:20] ΧΑΝΑ: Όμορφη. Και αυτό μας επιτρέπει να να συνεχίσει την επανάληψη μέσα. ΟΚ. ΚΟΙΝΟ: Δεν θα υπάρξει ένα άλλο; ΧΑΝΑ: Για άλλη μια φορά; ΚΟΙΝΟ: Δεν θα υπάρξει ένας άλλος μετά το μεγάλο παλιό, αν δήλωση [δεν ακούγεται]; ΧΑΝΑ: Ποιο μέρος; Λυπάμαι. [00:17:38] ΚΟΙΝΟ: Η διάσχιση, δεν θα πρέπει να υπάρχει ένα άλλο; ΧΑΝΑ: Μπορείτε απολύτως θα μπορούσε να έχει άλλο. Επειδή έχω δικαίωμα επιστροφής εκεί, δεν χρειάζεται ένα άλλο. Αλλά ναι, καλή ερώτηση. Εντάξει, ναι; ΚΟΙΝΟ: Μπορούμε να σκεφτούμε δείκτη που κινείται μέσα από τη λίστα ως λήψη επί της αξίας κάθε κόμβου στη λίστα; Ή θα πρέπει να σκεφτείτε από το ως είδος της εξωτερικής στη λίστα; [00:18:00] ΧΑΝΑ: Είτε το ένα είναι ωραία, νομίζω. Ο τρόπος που μπορώ να φανταστώ είναι Το λέω, εντάξει, είμαι δείκτη. Και αυτό είναι εγώ. Αυτό είναι το χέρι μου. Πάω να επισημάνω στο διαφορετικό τα πράγματα που θέλω να μετακινηθείτε μέσα. Πρώτον, Πάω να επισημάνω με τον επικεφαλής της λίστας. Και αυτό μου λέει είμαι πρόκειται να επισημάνω τέσσερα. Και έτσι μου, που είναι εξωτερικές στη λίστα, Μπορώ να επισημάνω σε κάθε ένα από αυτά τα στοιχεία. Γι 'αυτό και θεωρώ τον εαυτό μου ως δείκτη. ΚΟΙΝΟ: Έτσι, όταν διαγράφετε ένα από αυτά τα στοιχεία, μπορείτε να διαγράψετε τον εαυτό σας, να το πω έτσι. ΧΑΝΑ: Ακριβώς. Έτσι, μπορείτε να διαγράψετε το πράγμα είστε δείχνοντας. Έτσι, στο παράδειγμα που είδαμε όπου είμαστε προσπαθώντας να διαγράψετε πέντε, όταν είμαι επισημαίνοντας πέντε, Θέλω να διαγράψετε το πράγμα είμαι δείχνοντας. Ακριβώς δεξιά. Ναι; ΚΟΙΝΟ: Έχουμε λάβει μέριμνα για το περίπτωση όπου το η δεν είναι στη λίστα; ΧΑΝΑ: Αν το n δεν είναι στη λίστα; Το μόνο που θα συμβεί είναι ότι είστε πρόκειται να επαναλάβει μέσω και επαναλέγω μέσα, και στη συνέχεια, θα πάμε για να φτάσετε στο δείκτη είναι μηδενική, και στη συνέχεια θα πάμε να γίνουν. [00:18:48] ΚΟΙΝΟ: Έτσι, δεν έχουμε να επιστρέψει τίποτα; ΧΑΝΑ: Θα μπορούσαμε. Ο τρόπος που αν ορίζεται αυτό λειτουργία, θα ήθελα απλώς να πω ότι επιστρέφει ακυρώνονται ανεξάρτητα. Αλλά θα μπορούσαμε να έχουμε κάτι όπως την επιστροφή του έναν ακέραιο, και έχουν επιστρέψει αρνητικό 1 αν αποτύχει. Κάτι σαν αυτό. Ερωτήσεις with-- ναι; ΚΟΙΝΟ: [δεν ακούγεται]; ΧΑΝΑ: Συγνώμη; ΚΟΙΝΟ: [δεν ακούγεται]; ΧΑΝΑ: Σίγουρα. Έτσι, αυτό είναι το actual-- φορά έχουμε γίνεται όλη αυτή η δουλειά του κινείται Όλα αυτά τα βέλη γύρω, ολόκληρη μας Στόχος ήταν να απαλλαγούμε από τον κόμβο ότι ψάχνουμε για. Έτσι, στην περίπτωση αυτή, ελευθερώνοντας δείκτη, αν είμαι επισημαίνοντας πέντε, είναι σαν τη διαγραφή αυτού του μεσαίου κόμβου. Αυτό είναι το ελεύθερο μέρος του δείκτη. Νόημα αυτό; [00:19:29] ΚΟΙΝΟ: Έτσι καν σκεφτεί κάνατε δεν [δεν ακούγεται]; [00:19:31] ΧΑΝΑ: Γι 'αυτό και ανέλαβε στην αρχή είχαμε κάποια λίστα που ήταν already-- είχαν βάλει μαζί. Έτσι, προκειμένου να κατασκευαστεί αυτό κατάλογος, που must've [δεν ακούγεται]. Cool. Οτιδήποτε άλλο με αυτό; Ναι; [00:19:46] ΚΟΙΝΟ: Τι θα συμβεί αν η λίστα δεν ισούται με τη μηδενική γραμμή; [Δεν ακούγεται]; ΧΑΝΑ: Δικαίωμα εδώ; Κοινό: Ναι. ΧΑΝΑ: Εντάξει, όλα τα κάνω είναι ότι είμαι απλώς να διασφαλίσουμε ότι, προτού προσπαθήσω να λίστα dereference, Πριν προσπαθήσουμε να έχετε πρόσβαση στο προηγούμενο, Θέλω να βεβαιωθείτε ότι δεν είναι null έτσι δεν παίρνω ένα σφάλμα SEG. Cool. [00:20:08] Εντάξει, ξέρω ότι αυτό ήταν αρκετά πολλά για να περάσει. Έτσι, αυτή η διαφάνεια θα είναι στη διάθεση σας. Έτσι, μπορείτε να πάτε μέσα από αυτό με περισσότερες λεπτομέρειες. Ναι; [00:20:17] ΚΟΙΝΟ: Γιατί η λίστα [δεν ακούγεται]; ΧΑΝΑ: Σίγουρα. Έτσι λίστα σημεία πραγματικά να Το στοιχείο αυτό ακριβώς εδώ, Το πρώτο στοιχείο στη λίστα. Έτσι, δεν μπορεί να έχει ένα προηγούμενο. Ναι; [00:20:31] ΚΟΙΝΟ: Μήπως το σημείο δείκτη στην ίδια διεύθυνση στη μνήμη; Μήπως να δείχνουν το ίδιο διεύθυνση στη μνήμη ως κόμβο ότι είναι επισημαίνοντας; [00:20:40] ΧΑΝΑ: Ναι, επισημαίνει σε αυτόν τον κόμβο στη μνήμη. [00:20:43] ΚΟΙΝΟ: Δεξιά, έτσι όταν [δεν ακούγεται]; [00:20:47] ΧΑΝΑ: Κατά μία έννοια, ναι. ΟΚ. Εντάξει, ας προχωρήσουμε μαζί με αυτό. Και αν έχετε περισσότερες ερωτήσεις, κολλήσει γύρω στο τέλος, και μπορούμε να πάμε μέσα από αυτό και πάλι. Εντάξει, δροσερό. Τώρα, έχουμε την ευκαιρία να προχωρήσουμε να hash πίνακες, προσπαθεί, και τα δέντρα, τα οποία έχεις σούπερ εξοικειωθούν με π-set πέντε, ορθογράφο. [00:21:04] Έτσι hash πίνακας είναι απλά ένας συστοιχία με μεμονωμένα συνδεδεμένες λίστες ή διπλά συνδεδεμένες λίστες έρχεται από αυτό. Έτσι έχουμε κάποιο είδος συνειρμική σειρά. Και πώς ξέρουμε ποια από αυτά τα συστοιχίες κουβάδες για να μπει, χρησιμοποιούμε μια συνάρτηση κατακερματισμού. Έτσι, σε αυτή την περίπτωση, μπορεί κανείς μάντεψε τη συνάρτηση κατακερματισμού θα πρέπει να βασίζεται μόνο σε ορισμένα της εισόδου και εξόδου; [00:21:31] ΚΟΙΝΟ: αριθμός γράμμα της αλφαβήτου. ΧΑΝΑ: Ακριβώς. Τους βάζει μόνο σε αλφαβητική σειρά. Ό, τι αρχίζει με ένα Α τοποθετείται εντός του πρώτου κάδου. Τα πάντα με μια Β έχει προστεθεί στο δευτερόλεπτα κουβάς, ούτω καθεξής, και ούτω καθεξής. Φοβερό, εντάξει. Και μια συνάρτηση κατακερματισμού είναι οποιαδήποτε συνάρτηση που παίρνει σε μια λέξη και θα σας πω τι κάδος ανήκει σε. Έτσι οποία η είσοδος σε μας σειρά ανήκει στην. [00:21:55] Έτσι, κάθε φορά που δίνω μου Συνάρτηση κατακερματισμού μια λέξη, θα πρέπει να μου πείτε το ίδιο τοποθετήστε κάθε φορά. Έτσι, αν χρησιμοποιήσουμε τη συνάρτηση κατακερματισμού από την προηγούμενη διαφάνεια όπου είμαστε διαλογή από το το πρώτο γράμμα της αλφαβήτου, κάθε φορά που δίνω μου hash λειτουργία "μήλο" θα πρέπει πάντα να μου δώσει πίσω το 0. Έτσι, αν έχω ένα μήλο να θέσει σε πίνακα κατακερματισμού μου, αν δώσω "μήλο" στο συνάρτηση κατακερματισμού μου, θα έπρεπε να λέει, πάει να το θέσω σε κάδο 0. Αν Ψάχνω για μια μήλο στον πίνακα κατακερματισμού μου και λέω, όπου επικρατεί μήλο ζωντανά, ρωτάτε συνάρτηση κατακερματισμού σας. Και λέει, πάει στον κάδο 0. Εντάξει; Ερωτήσεις με συναρτήσεις κατακερματισμού; Awesome. [00:22:34] Εδώ είναι μια ελαφρώς πιο λεπτομερή εξήγηση από ό, τι μια συνάρτηση κατακερματισμού μπορεί να μοιάζει. Εντάξει. Τώρα, το πρόβλημα με χασίς λειτουργίες είναι σε έναν ιδανικό κόσμο, θα είχαμε μόνο μία πράγμα σε κάθε κάδο. Αλλά στην πραγματικότητα, δεν υπάρχει όχι μία μόνο λέξη που ξεκινά με Α δεν υπάρχει μόνο μια λέξη που αρχίζει με Β Έτσι, στην περίπτωση αυτή, αν ξαφνικά να πάρει "μούρο" και θέλουμε να το βάλετε σε πίνακα κατακερματισμού μας, και βλέπουμε, OH, όχι, μπανάνα είναι ήδη εκεί, τι θα κάνουμε; [00:23:03] Λοιπόν, έχουμε δύο επιλογές. Η πρώτη επιλογή είναι γραμμική ανίχνευση, η οποία σημαίνει απλά πηγαίνετε να βρείτε Η επόμενη άδειο κουβά. Πηγαίνετε να βρείτε στην επόμενη κενή καταχώρηση πίνακα. Και απλά βάλτε "μούρο" εκεί. Έτσι ξέρω ότι είναι υποτίθεται ότι πάει με μπανάνα σε ένα κουβά. Αλλά μόλις το βάλετε στο κάδο τρία, επειδή κάδο τρία είναι άδειο. Μια άλλη επιλογή είναι πιθανώς τι θα εφαρμόσουν σε π-set σας, όπου μπορείτε είχε Ξεχωριστές αλυσίδες. Έτσι, κάθε κάδων σας, καθένα από τα στοιχεία πίνακα σας, κατέχει όχι μόνο ένα λόγια, αλλά στην πραγματικότητα κατέχει ένα δείκτη σε μια λίστα λέξεων. Έτσι ώστε, αν είχατε μπανάνα στον πίνακα κατακερματισμού σας και ξαφνικά ήθελε για να προσθέσετε το μούρο, κανένα πρόβλημα. Απλά προσθέστε μούρων στο τέλος, ή να η αρχή της συνδεδεμένης λίστας σας. Εντάξει, φοβερό. Ερωτήσεις με χασίς πίνακες πριν προχωρήσουμε σε; [00:23:58] Εντάξει. Δέντρα και προσπαθεί. Εντάξει, έτσι αυτό ήταν μια άλλη επιλογή για την εφαρμογή του λεξικού. Θα μπορούσε να γίνει μια δοκιμή. Γι 'αυτό είναι ένα ιδιαίτερο είδος του δέντρου που συμπεριφέρεται σαν ένα πίνακα κατακερματισμού πολυεπίπεδη. Έτσι θα δείτε την εικόνα όπου έχετε έναν πίνακα που επισημαίνει σε μια δέσμη των συστοιχιών ότι το σημείο σε μια δέσμη των συστοιχιών ότι το σημείο σε μια δέσμη των συστοιχιών. Και θα δούμε ακριβώς τι θα μοιάζει με μια μελλοντική διαφάνεια. Και γενικότερα, ένα δέντρο είναι απλά οποιαδήποτε δομή δεδομένων στο οποίο τα δεδομένα είναι οργανώνονται σε κάποια ιεραρχία. Έτσι, όταν είδαμε έχουμε κάποιο είδος της κατανόησης του ανωτάτου επιπέδου, ένα επόμενο επίπεδο, ένα επόμενο επίπεδο, το επόμενο επίπεδο. Έτσι, αυτό είναι ίσως το πιο ξεκάθαρο με μερικά ειδικά παραδείγματα. Έτσι, εδώ είναι το δέντρο μας. Μπορείτε να δείτε ότι έχει συγκεκριμένα επίπεδα ότι θα ξεκινήσει με αυτόν τον κόμβο ρίζα, ένα. Και μπορούμε να πάμε κάτω από το δέντρο μας. [00:24:50] Ένα δυαδικό δέντρο είναι μια συγκεκριμένο είδος δέντρου. Και η μόνη προδιαγραφή για ένα δυαδικό δένδρο είναι ότι κάθε κόμβος διαθέτει το πολύ σε δύο φύλλα. Έτσι δεν πρόκειται να δείτε οποιαδήποτε του εν λόγω κόμβοι έχουν τρία ή τέσσερα ή κάποιο άλλο αριθμό φύλλων. Και τότε ακόμα πιο συγκεκριμένα είναι ένα δυαδικό δένδρο αναζήτησης όπου κάθε κόμβος στα αριστερά του κόμβος πρόκειται να έχει μια τιμή μικρότερη. Και κάθε τιμή για το το δικαίωμα πρόκειται να είναι μεγαλύτερο. Έτσι, αν δείτε 44, είναι η ρίζα μας, προς τα αριστερά, 11, 22, και 33 απέχουν λιγότερο από ρίζα μας. Και στα δεξιά είναι όλα αριθμούς bigger-- 66, 55, και 77. Και αυτή η ιδιότητα ισχύει σε κάθε επίπεδο του δέντρου. [00:25:37] Έτσι, όταν κατεβαίνουμε 22, 11, και 33, 11 ακόμα είναι μικρότερη από 22 και 33 είναι μεγαλύτερο από 22. Και αυτό καθιστά ευκολότερη την αναζήτηση γιατί αν ψάχνουμε για έναν αριθμό, γνωρίζουμε ποια ακριβώς υποκατάστημα για να ακολουθήσουν τα κάτω. Έτσι, αυτό θα πρέπει να σας υπενθυμίσω ένα λίγο δυαδική αναζήτηση. Ναι; [00:25:56] ΚΟΙΝΟ: Έτσι, όταν είστε περιγράφοντας δυαδικό, είπατε ότι έχει το πολύ δύο φύλλα; ΧΑΝΑ: MM-HM. ΚΟΙΝΟ: Θα μπορούσε να έχει λιγότερο; ΧΑΝΑ: Ναι. Ας πούμε, για παράδειγμα, μπορείτε δεν έχει ακόμη ορισμένα πράγματα και δεν μπορούσε να καλύψει όλες σας φύλλα, είναι μια χαρά, αν κάποιος έχει ένα. Εντάξει; Awesome. Οποιεσδήποτε άλλες ερωτήσεις σχετικά με τα δέντρα; ΟΚ. [00:26:16] Επιστροφή στην προσπαθειών μας ως μιλούσα περίπου λίγο νωρίτερα, πώς έχουμε αυτές τις συστοιχίες πολλαπλών επιπέδων. Έτσι, σε αυτή την περίπτωση, θα ξεκινήσει στην κορυφή. Και μπορούμε να ακολουθήσουμε οποιαδήποτε δεδομένη λέξη προς τα κάτω. Ας πούμε ότι θέλαμε να ψάξουν για Τούρινγκ. Ξεκινάμε Τ, να ακολουθήσει τα κάτω σε μια σειρά που περιέχει U, και ακολουθούν τα κάτω μέχρι να φτάσουν αυτό το μικρό δέλτα που μας λέει, ναι, έχετε βρει μια λέξη. Σαφή για προσπαθεί; Οτιδήποτε για να πάω εκεί; Ναι; ΚΟΙΝΟ: Μήπως το σύμβολο του δέλτα πρέπει να καταλαμβάνουν χώρο στο εσωτερικό της δοκιμή; ΧΑΝΑ: Ναι, γι 'αυτό δεν αναγκαστικά χρειάζεται καν να είναι ένα δέλτα. Αλλά χρειαζόμαστε κάποιο τρόπο να πείτε μας computer-- συγγνώμη, έτσι ώστε να γνωρίζουμε ότι TUR δεν είναι μια λέξη. Γιατί, ας πούμε, δεν είχαμε η έννοια αυτή του δέλτα, η έννοια αυτή συγχαρητήρια, βρήκατε μια λέξη, θα περάσει και να επαναλάβει Τ-U-R, και στη συνέχεια να πω, φοβερό, το βρήκα! Πρέπει να είναι μια λέξη. Αλλά δεν είναι πραγματικά. Θέλουμε ολόκληρη Turing να είναι μια λέξη. Έτσι πρέπει να έχουμε κάτι στο τέλος που λέει, συγχαρητήρια, έχετε βρει μια νόμιμη λέξη. ΚΟΙΝΟ: Έτσι, αν είχε σαν 26 γράμματα του αλφαβήτου, Θα έχετε πραγματικά 27 πλήκτρα σε δοκιμή σας; [00:27:24] ΧΑΝΑ: Awesome, ναι. Έτσι, στην πραγματικότητα, νομίζω ότι θα είναι στην επόμενη διαφάνεια. Ta-da! Όπου και αν έχετε ένα κόμβος στην προσπάθεια σας, είστε πρόκειται να έχει 27 παιδιά αντί για 26. Όλες οι ερωτήσεις με αυτό; Ναι; ΚΟΙΝΟ: Γιατί προσπαθεί αναλάβουν τόσο πολύ χώρο [δεν ακούγεται] as you go? Γιατί θεωρείται ότι είναι [δεν ακούγεται]; ΧΑΝΑ: Σίγουρα. Ας πάμε πίσω. Το ερώτημα είναι, γιατί είναι προσπαθεί τόσο πολύ μεγαλύτερο από κάτι σαν ένα πίνακα κατακερματισμού. Έτσι, για κάθε ένα από αυτά τα επίπεδα, ακόμα και αν δεν είστε προσοχή εδώ, πρέπει να έχετε όλες τις 26 χαρακτήρες. Και ο λόγος που δεν μπορείτε λένε, ω, αλλά όπως και για Τούρινγκ, εγώ Δεν χρειάζεται να έχουν οποιαδήποτε από αυτές ίδια πράγματα σχετικά με το επίπεδο του U. Καλά, αν ξαφνικά θέλετε να προσθέσετε κάτι που ήταν σαν Τ-Η, που θα πρέπει να έχουν το Δυνατότητα προσθήκης αυτή τη λέξη. Έτσι, για κάθε γράμμα, θα πάμε για να έχουν να έχετε μια δέσμη των συστοιχίες έρχεται από αυτό. Έτσι, μπορείτε να δείτε πώς θα παίρνατε πραγματικά μεγάλη, πολύ γρήγορα. Οποιεσδήποτε άλλες ερωτήσεις; Εντάξει. Ναι; [00:28:29] ΚΟΙΝΟ: Όταν προσπαθεί ταχύτερα από τους πίνακες κατακερματισμού; [00:28:33] ΧΑΝΑ: Όταν προσπαθεί ταχύτερα από τους πίνακες κατακερματισμού; Έτσι, αν είχατε ένα πραγματικά κακή συνάρτηση κατακερματισμού. Ας πούμε ότι ήμουν όπως, εδώ είναι συνάρτηση κατακερματισμού σας. Δεν έχει σημασία ποια λέξη μπορείτε να μου δώσετε, είμαι πάντα πρόκειται να το βάλετε στο φάσμα 0. Και έτσι καταλήγουμε με απλά βάζοντας πάντα σε ένα μεγάλο μακρύ συνδεδεμένη λίστα. Και έτσι μια αναζήτηση χρόνο θα πάρει στη χειρότερη περίπτωση n αν είναι στο τέλος της λίστας μας. Με τη δοκιμή, εμείς απλά πρέπει να επαναλάβει μέσα από τα γράμματα της λέξης. Έτσι, ακόμη και αν προστεθεί ένα μάτσο περισσότερες λέξεις για να προσπαθήσουμε μας, δεν θα μας πάρει πια να βρούμε μια συγκεκριμένη λέξη. [00:29:09] Το μόνο που έχουμε να κάνουμε είναι, για παράδειγμα, στην περίπτωση αυτή, ας πούμε ψάχνουμε για ζουμ, θα πρέπει ακριβώς να μετακινηθείτε πάνω Ζ-Ο-Ο-Μ, τέσσερα γράμματα. Έτσι, αυτό είναι μόνο η το μήκος της λέξης ζουμ. Δεν έχει σημασία πόσες περισσότερες λέξεις που βάζουμε σε αυτό το προσπαθήσουμε. Μπορούμε πάντα να το πάρει σε αυτά τα τέσσερα βήματα. Awesome. Ναι; [00:29:32] ΚΟΙΝΟ: Έτσι [δεν ακούγεται] είναι ένας πίνακας, σωστά; [00:29:34] ΧΑΝΑ: MM-HM. ΚΟΙΝΟ: Αν είστε ψάχνει για [δεν ακούγεται], θα πρέπει να περάσουν από σειρά σας για να βρείτε [δεν ακούγεται]; ΧΑΝΑ: Σίγουρα. ΚΟΙΝΟ: Θεωρεί ότι δεν λαμβάνουν περισσότερο χρόνο; ΧΑΝΑ: Αν Πάω να λένε ότι η σειρά μου είναι πάντα πρόκειται να είναι Α, Β, C, D, Ε, ΣΤ, Ζ, μπλα μπλα μπλα, Έτσι, αν πάντα ξέρω ότι είναι με την ίδια ακριβώς σειρά, αν πάντα ξέρω ότι είναι με αλφαβητική σειρά, Θέλω μόνο να πω είναι O αριθμός έτσι και έτσι στο αλφάβητο. Απλά άλμα σε αυτό το μέρος. Επειδή θυμάμαι, με συστοιχίες, μπορούμε να έχουμε πρόσβαση οποιοδήποτε στοιχείο αυτού του πίνακα σε συνεχή χρόνο, αν ξέρουμε πού ψάχνουμε. Ναι; [00:30:09] ΚΟΙΝΟ: Την προηγούμενη σύρετε [δεν ακούγεται] 27, αλλά 26 για την πρώτη. [00:30:14] ΧΑΝΑ: Συγνώμη; [00:30:15] ΚΟΙΝΟ: δεν είναι η πρώτη ένα 0, οπότε δεν θα ήταν 26; [00:30:18] ΧΑΝΑ: Σίγουρα, έτσι ώστε όταν λέμε 27, ότι είναι πρόκειται να μας δώσει δείκτες από 0 έως 26. Αλλά αν πραγματικά μετράνε εκείνα που βρίσκονται εκτός, πρόκειται να είναι 27. Καλή ερώτηση. Οτιδήποτε άλλο; Ναι; [00:30:31] ΚΟΙΝΟ: Έτσι είναι οι προσπάθειες πιο αργή από ό, τι πίνακες κατακερματισμού; [00:30:34] ΧΑΝΑ: Σουτ πρόκειται να είναι, σε θεωρία, πιο γρήγορα από τους πίνακες κατακερματισμού αλλά καταλαμβάνουν περισσότερο μνήμη. Ναι; ΚΟΙΝΟ: [δεν ακούγεται]; [00:30:45] ΧΑΝΑ: Λυπάμαι, εγώ δεν μάθατε. ΚΟΙΝΟ: [δεν ακούγεται]. 0 έως 25 σας δίνει 26. [00:30:54] ΧΑΝΑ: 0 έως 25 θα να σας δώσω 26, δεξιά. [00:30:56] ΚΟΙΝΟ: Και τότε [δεν ακούγεται]. ΧΑΝΑ: Δεξιά. Έτσι, ο αριθμός είμαστε διευκρινίζοντας είναι ο αριθμός των πράγματα στη σειρά μας. Έτσι, αν έχουμε 27, είναι πρόκειται να μας δώσει το 0 έως 26, η οποία θα δώσει εμάς δωματίου για, στην περίπτωση αυτή, Δεν είμαι συμπεριλαμβανομένων μια απόστροφο. Έτσι παίρνουμε από 0 έως 25 ετών είναι τα πρώτα 26 γράμματα του αλφαβήτου, ή όλα τα 26 γράμματα της αλφαβήτου. Και στη συνέχεια, ότι η τελευταία πράγμα, κατά την είσοδό τους 26, είναι πρόκειται να είναι ο έλεγχος σήμα, ή το δέλτα. Οτιδήποτε άλλο; Awesome. Ξεχάσατε τον χώρο μου. Εντάξει, δροσερό. [00:31:31] Γι 'αυτό και ήδη έθιξε αυτό. Αλλά το μεγάλο εμπόριο off μεταξύ προσπαθεί και πίνακες κατακερματισμού είναι ότι προσπαθεί να παρέχει, σε Θεωρητικά, η συνεχής αναζήτηση φορές, αλλά χρησιμοποιούν ένα σωρό μνήμη. Εντάξει, τώρα έχουμε ελαφρώς λιγότερο περίπλοκες δομές, και εμείς θα πρέπει να γίνει με C, και εμείς θα προχωρήσουμε δεξιά κατά μήκος. [00:31:49] Έτσι, στοίβες, είδαμε αυτό σε διάλεξη όπου μπορείτε έχουν κάτι σαν μια στοίβα των δίσκων όπου το τελευταίο πράγμα που βάζετε στη στοίβα πρόκειται να είναι το πρώτο πράγμα που απογειώνονται. Έτσι, αυτό είναι αυτό που καθορίζει πραγματικά μια στοίβα είναι ότι το τελευταίο πράγμα που θα θέσει σε πρόκειται να είναι η πρώτη πράγμα που απογειώνονται. Και η ορολογία που χρησιμοποιούμε αν θα πάμε να βάλουμε κάτι, αν θα πάμε να προσθέσετε κάτι στο στοίβα μας, λέμε ότι πιέζει. Και αν πάρουμε κάτι μακριά, καλούμε βρεθώ. Και αν θέλουμε να εφαρμόσουν μια στοίβα, εμείς πρέπει να είναι σίγουρος για να παρακολουθείτε τόσο το μέγεθος και η ικανότητα. Έτσι ώστε ο συνολικός αριθμός των στοιχείων μπορούμε κατέχει και ο σημερινός αριθμός των στοιχείων ότι διεξάγουμε. [00:32:27] Και πολύ Ομοίως, έχουμε ουρές. Και η μόνη διαφορά είναι αντί με στοίβες, είπαμε το τελευταίο πράγμα που έχουμε θέσει για Είναι το πρώτο πράγμα που απογειώνονται. Έτσι, με ουρές, η το πρώτο πράγμα που θα τεθεί σε πρόκειται να είναι ο πρώτο πράγμα που βγάζουμε. Έτσι, αυτό είναι σαν αν είστε πραγματικά παράταξη σε ένα κατάστημα και εσείς να βοηθήσει, τότε το πρώτο πρόσωπο στη γραμμή θα πρέπει να είναι το πρώτο πρόσωπο για να βοηθήσει. Έτσι, αυτό θα ήταν μια ουρά. [00:32:52] Πρέπει, λοιπόν, να παρακολουθείτε το μέγεθος, την ικανότητα, και το κεφάλι αφού είμαστε πρόκειται να πάρει ο καθένας από το μέτωπο του καταλόγου αντί της πλάτης. Ερωτήσεις σχετικά με αυτό; Οποιεσδήποτε ερωτήσεις C που σας ενοχλεί; Δομές δεδομένων, καμιά από αυτές τις διασκεδαστικά πράγματα; Εντάξει, δροσερό. Γι 'αυτό και θα το παραδώσει στο Alison να άλμα σε λίγο περισσότερο προγραμματισμό. [00:33:14] ALISON: Ω, θα δούμε. Θα δούμε πόσο καλά κάνω εδώ. Εντάξει, Πάω να προσπαθήσουμε και να πετάξει μέσα αυτά τα πράγματα, ρε παιδιά. Hannah πήγε πολύ σε βάθος για όλα τα πράγματά της. Πάω να προσπαθήσουμε να δώσουμε σας μια γρήγορη επισκόπηση έκρηξη έτσι ώστε να μπορέσουμε να φτάσουμε στην Davin με όλα οι διασκέδαση JavaScript και ασφάλεια πράγματα ότι ίσως πράγματι θέλω να ακούσω περισσότερα σχετικά. [00:33:33] Εντάξει, όπως είπε ο Χάνα, αν έχετε οποιεσδήποτε ερωτήσεις, Πάω πολύ γρήγορα, παρακαλώ, επιτρέψτε μου να ξέρω. Θα απαντήσει σε ερωτήσεις, όπως απαιτείται. Έτσι για να ξεκινήσει, θα πάμε για να ξεκινήσει με ίσως ένα από τα πρώτα πράγματα μάθατε με το web προγραμματισμού, τα δικαιώματα. Έτσι chmod, εσείς πρέπει να πάει εκμαγεία σε αυτό με όλο το Διαδίκτυο προγραμματισμού που έχετε έχει κάνει τον τελευταίο καιρό. Είναι βασικά ακριβώς μια εντολή ότι αλλάζει τα δικαιώματα ή τα δικαιώματα πρόσβασης των αντικειμένων του συστήματος αρχείων μας. Φυσικά, στην πραγματικότητα δείτε αυτά, αν είστε έχει κανένα πρόβλημα με αυτά κατά τη διάρκεια πρόβλημα σύνολα σας, μπορεί να έχετε χρησιμοποιήσει ls -l, η οποία είναι μεγάλη, να πάρει το είδος άποψη του, όπως αυτό, όπου μπορείτε πραγματικά να δείτε όλα τα δικαιώματα για ένα αρχείο. [00:34:16] Και πραγματικά, είμαστε ακριβώς πρόκειται να πάει μέσω της αρκετά γρήγορα μόλις αρκετά πολύ τι σημαίνει το καθένα από αυτά. Έτσι έχουμε d εδώ, η οποία ακριβώς σημαίνει για τον κατάλογο. Προφανώς εδώ, βλέπουμε rwx, η οποία είναι αναγνώσιμη, εγγράψιμο, και εκτελέσιμο. Αυτά θα μπορούσαν επίσης να παρασταθούν ως bits, η οποία θα μπει στην επόμενη σελίδα. Έτσι, κάθε τριάδα που είδαμε εδώ, γι 'αυτό είναι τρεις τριάδες. Έχουμε RWX, r τίποτα x και r x τίποτα γι 'αυτό το πρώτο αρχείο. Είναι αυτή η γενική δομή. [00:34:49] Έτσι έχουμε κάποιο κατάλογο. Έχουμε κάποια ομάδα χρηστών με αυτά τα δικαιώματα. Κάποια ομάδα που έχει αυτά τα δικαιώματα, και έναν κόσμο που έχει άδεια. Μπορείτε να τα φανταστείτε σαν μια τριάδα. Μπορείτε να σκεφτείτε αυτά τα τρία κομμάτια. Έτσι, μπορούν να κρατήσουν τις τιμές οπουδήποτε από μηδέν έως έως 7, η οποία είναι γιατί μερικές φορές Σας είχαμε να κάνουμε chmod 600 αντί του chmod rw οτιδήποτε άλλο. Θα μπει σε ένα παράδειγμα εκεί. Αλλά βασικά, μπορείτε να σκεφτείτε από αυτά, είτε απλά rwx, ή μπορείτε να σκεφτείτε τους όπως μερικοί αριθμός όπου αυτό πρώτη εδώ παριστά έναν αριθμό μεταξύ 0 και 7, αυτή η δεύτερη παριστά έναν αριθμό μεταξύ 0 και 7, και το τρίτο αντιπροσωπεύει έναν αριθμό μεταξύ 0 και 7, εντάξει; [00:35:38] r έχει τιμή 4. w έχει μία τιμή από 2, και το χ έχει τιμή 1, η οποία είναι ο λόγος για αυτό άδεια εδώ θα chmod 700. Επειδή στην προκειμένη περίπτωση εδώ, αυτό θα λέει έχουν το πρώτο bit εκεί γυρνάει στο. Έτσι έχουμε 4 για ανάγνωση. Το δεύτερο κομμάτι γυρνάει στο για W, η οποία είναι 2, έτσι και τώρα έχουμε 6. Και το τρίτο κομμάτι γυρνάει σε για το Χ, το οποίο είναι 1, έτσι ώστε να πάρει επτά. Και φυσικά, η ομάδα μας και ο κόσμος μας είναι κάθε 0. Έτσι, αυτό είναι επίσης η ισοδύναμο chmod 700. Και εγώ θα προσπαθήσω σίγουρα να κατανοήσουν τη χαρτογράφηση μεταξύ αυτών. Δεν είμαι σίγουρος αν έχει καταλήξουμε σε ένα κουίζ πριν, αλλά θα ήταν μια ερώτηση που ήθελα να ρωτήσω. [00:36:18] Λίγο ακόμα και θα περαιτέρω σε chmod εδώ, εδώ είναι η πολύ γενική δομή μιας κλήσης chmod. Έτσι, φυσικά, έχουμε chmod εδώ. Οι αναφορές, τι αναφέρεται αυτό να είναι που δίνουμε αυτά τα δικαιώματα σε ή που θα βασίζεται σε αυτές τις δικαιώματα μακριά από. Έτσι έχουμε ένα εδώ στα δικαιώματα, όπως δώσαμε σας chmod a Plus X, όπως θα δούμε σύντομα. ένα μόνο σημαίνει δώσει αυτές τις συγκεκριμένες δικαιώματα σε όλους. Δώστε τους σε όλους. Έτσι, θα μπορούσε κάλλιστα να έχει U Plus X ή ζ συν x ή o Plus X ή πολλαπλές αυτών. Έτσι ώστε το πρώτο μέρος είναι πάντοτε πρόκειται να είναι αναφορές. Ποιος δίνουμε αυτά τα δικαιώματα σε, ή ποιοι είμαστε εμείς τη λήψη τους μακριά από? [00:37:03] Το δεύτερο είναι ο φορέας εκμετάλλευσης. Έτσι, εσείς έχετε ασχοληθεί περισσότερο με συν. Αυτό δίνει δικαιώματα όποιος κι αν είσαι να τους δίνει, ενώ μείον, λογικά, να τους απομακρύνει. Έτσι, τίποτα δεν είναι πολύ φοβερό εκεί. Και τότε τρόπων μεταφοράς είναι αυτό που μιλήσαμε με την ανάγνωση, τη γραφή, ή εκτέλεσης. Έτσι, ένα συν x σημαίνει να δώσει εκτελέσιμο δικαιώματα σε όλους. Και στη συνέχεια, φυσικά, επί της οποίας συγκεκριμένο αρχείο ή κατάλογο. Εντάξει; Όλοι καλό με chmod; Δεν είναι και τόσο άσχημα; [00:37:37] Εντάξει, έτσι HTML, κάποιος από εσάς είναι αρκετά παλιά to-- MySpace ηλικία; Έστειλα αυτό το τμήμα μου, και κυριολεκτικά μισοί από τους ανθρώπους με κοίταξε σαν να ήμουν τρελός. Και ήμουν όπως, παιδιά, Δεν είμαστε τόσο παλιά. Έλα. Έτσι HyperText Markup Language, Είναι ειλικρινά μόνο ένας τρόπος για να για να εμφανίσετε ορισμένα πράγματα στο διαδίκτυο. Γι 'αυτό είναι μια γλώσσα σήμανσης. Δεν είναι μια scripting γλώσσα. Δεν υπάρχει καμία λογική σε αυτό. Είναι απλά να αλλάξει ο τρόπο κάτι εμφανίζεται. Εντάξει, έτσι ώστε να είναι ένα σημαντικό διάκριση που κάνει. Θεωρείται μια γλώσσα σήμανσης, δεν είναι μια scripting γλώσσα. [00:38:12] Έτσι, εδώ έχουμε ετικέτες HTML μας. Σε αυτή τη διαφάνεια είναι ίσως το μεγαλύτερο μέρος της αυτοί που θα πρέπει να είναι εξοικειωμένοι με και είναι πραγματικά άνετα. Έτσι, προφανώς, έχουμε ετικέτα HTML μας, η οποία ορίζει ότι τα πάντα στο μεταξύ αυτών των δύο θα είναι HTML. Έχουμε κάποια σύνδεση, η οποία προφανώς θα σας δώσει ένα σύνδεσμο προς μια εξωτερική ιστοσελίδα. Κάποια τίτλο, μέσα στο κεφάλι μας εδώ. Και έχουμε το σώμα μας με Η1, η οποία είναι μια κεφαλίδα, γι 'αυτό θα το κάνουν όμορφο και τολμηρές και μεγαλύτερα. Και στη συνέχεια, έχουμε κάποια ρ, η οποία είναι μια παράγραφο. Θα πρέπει πιθανώς να ξέρετε και να είναι εξοικειωμένος με τα πράγματα όπως το πώς μπορείτε να εισαγάγετε μια εικόνα, είναι Υπάρχουν άλλες κατηγορίες επικεφαλίδα; Σίγουρα θα είναι άνετα με div. Έτσι, αυτές έχουν την πλειοψηφία των ετικετών ότι θα πρέπει να είναι εξοικειωμένοι με. Αλλά φυσικά, όπως με τα πάντα σε CS 50, ο κατάλογος δεν είναι εξαντλητικός. Έτσι, βεβαιωθείτε ότι έχετε ανανεώσει τις επ 'αυτού. [00:39:08] CSS, έτσι CSS, αν κάποιος από εσάς να παρακολουθήσετε σεμινάριο μου από πριν από δύο εβδομάδες, Είναι πραγματικά μόνο ένας τρόπος για το στυλ της ιστοσελίδας σας; Εντάξει, έτσι έχουμε κάποια γλώσσα σήμανσης. HTML, που φροντίζει μόνο του κειμένου και όπου θα μπορούσε να είναι στη σελίδα. Αλλά CSS είναι πραγματικά αυτό που κάνει είναι αρκετά. Θα μπορούσατε να έχετε αυτά στο HTML σας αρχείων, αλλά όπως εμείς θα μιλήσουμε αργότερα, Είμαι σχεδόν σίγουρος ότι θα μπορούσε είναι η επόμενη διαφάνεια, το αποτελεί κοινή πρακτική, και στην πραγματικότητα πρακτική που πραγματικά ενθαρρύνει, για να κρατήσει τους χώρισαν όταν εμείς μιλήσουμε για MVC και όλο αυτό το παράδειγμα. Αυτό είναι πραγματικά αυτό που την τροφοδοτεί. [00:39:42] Έτσι, CSS είναι απλά ένας τρόπος για να κάνει τα πράγματα φαίνονται αρκετά. Τα πράγματα εδώ, όπως σώματος και #title και .info, αυτές ονομάζονται επιλογείς και τι κάνουν είναι να επιλέξετε συγκεκριμένα πράγματα μέσα σε αρχείο HTML και εφαρμόζονται ανεξάρτητα από το ύφος, ανεξάρτητα από το είδος των πραγμάτων που θέλετε, για το συγκεκριμένο στοιχείο της ιστοσελίδας σας σελίδα. Εδώ λοιπόν, έχουμε ένα χρώμα του φόντου και το χρώμα και μια οικογένεια γραμματοσειρών που είναι να εφαρμόζεται σε ό, τι είναι στο σώμα. Έτσι, αν κοιτάξαμε πίσω εδώ, αυτό δεν θα ισχύει για τον τίτλο. Θα ισχύει μόνο για ό, τι είναι σε αυτούς τους επιλογείς σώμα, εντάξει; [00:40:22] Με τον τίτλο εδώ, αυτό είναι πρόκειται να είναι το ίδιο πράγμα, το χρώμα του κειμένου είναι μπλε θα είναι μόνο να επηρεάσει ό, τι είναι μέσα Οι επιλογείς τίτλο. Καθώς και πληροφορίες εδώ, το κείμενο θα είναι ροζ, Ό, τι και πληροφορίες, που είναι ακριβώς εδώ. Έτσι, το μόνο πράγμα που θα είναι ροζ σε αυτή τη σελίδα είναι σήμερα, Δευτέρα, 17 Νοεμβρίου 2014. Εντάξει, έτσι CSS είναι απλά ένας τρόπος για να έχουν περισσότερο έλεγχο over-- ναι; [00:40:48] ΚΟΙΝΟ: Γιατί έχετε να χρησιμοποιήσετε το χασίς με τίτλο; [00:40:51] ΧΑΝΑ: Επόμενη διαφάνεια, υπόσχομαι! Θα φτάσουμε εκεί. Έτσι, αυτό είναι ο λόγος που πρέπει να χρησιμοποιήσετε hash. Έτσι επιλογείς αναλάβει τρεις κύριες μορφές που μιλάμε σε σας παιδιά για. Θα fyou θέλετε να μάθετε περισσότερα, υπάρχει αφθονία εκεί έξω. Υπάρχει μεγάλη τεκμηρίωση CSS. Υπάρχει ένα όνομα ετικέτας, η οποία έχει να κάνει με απλά φυσιολογικό ετικέτες σας σε μορφή HTML. Έτσι, h1, σ, div, Η2, αυτά τα είδη των πραγμάτων. Και μπορούμε να αναφέρουμε μόνο αυτά που είναι. Έτσι, όπως βλέπουμε εδώ με το σώμα, είναι μια κανονική ετικέτα. Έτσι, μπορούμε να βάλουμε μόνο το σώμα, όταν μιλάμε στο αρχείο CSS μας. [00:41:26] Με τον τίτλο, το σύνολο λόγος που έχουν αυτό το κλειδί είναι ότι έχουμε ό, τι είναι θεωρείται ένα αναγνωριστικό. Έτσι, η ταυτότητα θα πρέπει πάντα να είναι μοναδικό στην HTML σελίδα σας έτσι ώστε όταν είστε αναφέρεται σε αυτό, σας ξέρετε ότι είστε μόνο αναφορά σε ένα συγκεκριμένο πράγμα. Έτσι, σε αυτή την περίπτωση εδώ, με μας h1 εδώ, CS 50 συνεδρία κριτική, έχουμε ένα αναγνωριστικό του τίτλου. Έτσι, προκειμένου να αναφερθώ μόνο σε ότι κομμάτι της HTML μας, κάνουμε έναν τίτλο κατακερματισμού. Ακριβώς με τη Σύμβαση, οι ταυτότητες που ορίζονται με ένα hash μπροστά τους. Κατά τον ίδιο τρόπο, βλέπουμε Πληροφορίες εδώ είναι μια κατηγορία. Και έτσι τάξη με CSS είναι ορίζεται ως μια τελεία κατηγορία ή dot όποια και αν είναι η κατηγορία. Έτσι, σε αυτή την περίπτωση εδώ, είναι πληροφορίες. [00:42:10] Έτσι, το παίρνω πίσω. Και οι δύο θα είναι ροζ για CSS μας εδώ επειδή και οι δύο έχουν μια κατηγορία πληροφορίες. Και στο CSS αρχείο μας, έχουμε ορίσει ότι τίποτα με μια κατηγορία πληροφοριών θα πρέπει να είναι ροζ. Μήπως αυτό έχει νόημα; Ναι; [00:42:27] ΚΟΙΝΟ: Αν ήταν να κάνει πάντα στο λευκό σώμα, και στη συνέχεια προσπαθήστε να κάνετε κάτι στο εσωτερικό του μπλε, θα ήταν αυτό να προκαλέσει προβλήματα; [00:42:34] ΧΑΝΑ: Έτσι είναι CSS επικαλυπτόμενα φύλλα στυλ. Έτσι, ό, τι είναι προς το κάτω θα υπερισχύουν. Έτσι, αν κάνουμε κάτι με το σώμα, και θα κάνει τα πάντα λευκό, και, στη συνέχεια, αργότερα, μπορείτε να αλλάξετε τον τίτλο ή μπορείτε να αλλάξετε το κείμενο μέσα στο σώμα, διαγράφει αυτό. Έτσι, τίποτα προς το κάτω θα υπερισχύουν. Ναι; [00:42:56] ΚΟΙΝΟ: Και τα αναγνωριστικά είναι μοναδικά, Οι τάξεις όμως μπορεί να είναι περισσότερο; ΧΑΝΑ: Δεξιά. Έτσι ταυτότητες θα πρέπει να είναι μοναδικό, και τα μαθήματα μπορούν να αναφέρονται ως πολλά πράγματα όπως θα θέλατε. Οποιεσδήποτε άλλες ερωτήσεις; Ναι. [00:43:09] ΚΟΙΝΟ: [δεν ακούγεται]. Αναρωτιέμαι αν αυτό κάνει τη διαφορά. ΧΑΝΑ: Λυπάμαι, ποια ήταν η ερώτηση; ΚΟΙΝΟ: Υπάρχει μικρή "F" και το κεφάλαιο "Φ" ΧΑΝΑ: Έτσι, η διαφορά μεταξύ μικρών "f" και το κεφάλαιο "F" δεν θα πρέπει να κάνει τη διαφορά. Έτσι, το "f" θα είναι 15 ή τον άλλο τρόπο. Cool, τίποτα άλλο; Όλοι καλό, CSS; Ναι; [00:43:30] ΚΟΙΝΟ: Συγγνώμη. Μπορεί να έχετε μια τάξη και ένα αναγνωριστικό; [00:43:35] ΧΑΝΑ: Ναι, μπορείτε. Τα πράγματα μπορεί να έχουν και μια τάξη και ένα αναγνωριστικό. Και ήθελα να συστήσω ιδιαίτερα δοκιμή αυτών για τη δική σας. CSS θα μάθετε καλύτερα απλά κάνοντας κάτι, πολύ απλή ιστοσελίδα, κατάρτιση κάποια CSS, και μόνο βλέπουμε πώς αλληλεπιδρούν μεταξύ τους. Και θα κερδίσει ένα πολύ καλό, διαισθητική αίσθηση για το πώς λειτουργεί. [00:43:56] Εντάξει, σε όλους καλή με CSS; Είστε όλοι πρόκειται να κάνει όμορφες ιστοσελίδες με CSS τώρα. Εντάξει, βέλτιστες πρακτικές, απλά πράγματα που πρέπει να έχετε κατά νου, τα πράγματα that-- αυτός είναι ο λόγος που αράζουν σας για το σχεδιαστή και εταζέρα. Έτσι, κλείστε όλες τις ετικέτες HTML σας. Έτσι, εάν έχετε ένα ανοικτό αμάξωμα, θα πρέπει να υπάρξει στενή σώμα. Εάν έχετε ένα ανοιχτό σημείο, θα πρέπει να υπάρξει στενή παράγραφο. Ελέγξτε για να δείτε τη σελίδα σας επικυρώνει. Εσείς θα πρέπει να είναι πολύ εξοικειωμένοι με αυτό από ρ-set επτά με CS 50 χρηματοδότηση με το επικύρωσης W3. Και όπως είπα και πριν, ένα από τα μεγάλα παραδείγματα μας χωρίζει το στυλ σας με CSS από σήμανση σας, η οποία είναι η HTML. Και τότε, φυσικά, έχουμε αυτό το μεγάλο XKCD εδώ κάτω. Yay, κωμική ανακούφιση! [00:44:38] Εντάξει, το πρωτόκολλο TCP / IP. Μεταξύ αυτών και HTTP, Βασικά είναι δύο πρωτόκολλα. Έτσι, θα μπορούσατε απλά σκεφτείτε τους ως ένα σύνολο κανόνων που διέπουν τον τρόπο τα πράγματα κινούνται σε ολόκληρο το Διαδίκτυο. Έτσι, ελέγχου κιβωτίου ταχυτήτων πρωτόκολλο ή στο πρωτόκολλο του Ίντερνετ, Είναι απλά ένας τρόπος για να βεβαιωθείτε ότι ότι τα δεδομένα που παίρνει πού πηγαίνει και ότι γνωρίζουμε αν είμαστε πάντα λείπουν δεδομένα. Έτσι, αν εσείς νομίζετε πίσω σε διάλεξη μερικές εβδομάδες πριν με τον David όπου είχαμε τέσσερις φακέλους, που ήταν όλες αριθμημένες σαν ένα από τα τέσσερα, δύο από τα τέσσερα, τρία από τα τέσσερα, τέσσερα από τέσσερα, αυτό είναι απλά ένα σύνολο κανόνων. Είπαμε, εντάξει, όταν είμαστε στέλνοντας περισσότερα από ένα πακέτο, πρόκειται να αριθμούν με ποιο αριθμό είναι και πόσα σύνολο που ο χρήστης θα πρέπει να πάρετε. [00:45:19] Και αυτό ακριβώς λέει όποιος λαμβάνει τα δεδομένα εάν έχουν πάρει τα πάντα ή αν κάτι χάθηκε στην πορεία. Και πρέπει να το ζητήσετε ξανά. Αυτό είναι πραγματικά ακριβώς ένα σύνολο κανόνων. Αυτό είναι το πώς μπορείτε να σκεφτείτε από το, εντάξει; Και, επίσης, καθορίζει το λιμάνι, το οποίο εσείς can-- ξέρω κατά τη διάρκεια της διάλεξης, είχαν έναν ολόκληρο κατάλογο των λιμένων. Αλλά εμείς δεν τα έχουμε εδώ τώρα. [00:45:41] Έτσι πρωτόκολλο μεταφοράς υπερκειμένου είναι, και πάλι, αυτό είναι ένα άλλο πρωτόκολλο. Έτσι, αυτό είναι ένα άλλο σύνολο κανόνων που διέπουν, στην περίπτωση αυτή, πώς υπερκείμενο μεταφέρεται. Έτσι, επιτρέπει μόνο σε προγράμματα περιήγησης να μιλήσει σε διακομιστές web. Και όπως είπαμε εδώ, είναι όπως τα ανθρώπινα χειραψίας. Είναι απλά ένας τρόπος για να κυβερνήσει πώς ο web server είναι πρόκειται να αλληλεπιδράσουν με το πρόγραμμα περιήγησής σας. Και έχουμε μόνο μερικά παραδείγματα. Έχουμε κάποια αιτήματα εδώ όπου GET είναι η μέθοδος. Έχουμε HTTP 1.1, το οποίο είναι Η έκδοση του πρωτοκόλλου για εμάς. Και στη συνέχεια, ο ξενιστής, το οποίο είναι αυτό είμαστε στην πραγματικότητα προσπαθεί να αποκτήσει πρόσβαση. Και τότε, όπως βλέπετε εδώ, εμείς να πάρετε κάποια απάντηση με αυτό το 200 ΟΚ ως κωδικός απόκρισης HTTP μας. Έχουμε μια μεγάλη λίστα Πάω για να τραβήξει επάνω σε ένα δευτερόλεπτο ότι εσείς θα πρέπει να είναι εξοικειωμένοι με. Και έχουμε αυτού του είδους το περιεχόμενο κειμένου / HTML, η οποία ακριβώς λέει τι είδους δεδομένα είμαστε λήψη από το διακομιστή, εντάξει; Αυτή υποδοχής και αυτός ο τύπος περιεχομένου αποτελούν μέρος της κεφαλίδες HTTP. Μπορείτε να έχετε όσο το δυνατόν λιγότερα ή τόσο λίγα όπως αναγκαία για το περιεχόμενο του τι έχουμε να κάνουμε με. Μερικές φορές θα έχετε μια πολύ πληροφορίες που προέρχονται από το διακομιστή σας. Ίσως να ζητάτε πολλά των πληροφοριών από το χρήστη. Αυτό ποικίλλει ανάλογα με το πλαίσιο. Αν κοιτάξετε CS 50 Μελέτη, υπάρχει πολύ περισσότερο σε αυτό. Αλλά έχουμε πολλά να πάρει μέσα, έτσι Πάω να πηγαίνετε δεξιά μπροστά, αν αυτό είναι εντάξει μαζί σας; Cool. Περίμενε. Έχω σίγουρα ότι όλη τη λίστα of-- huh! Δεν ξέρω γιατί αυτό είναι σε όλη τη διαδρομή εδώ. Νόμιζα ότι κυριολεκτικά μετακινηθεί αυτό, ενώ ήμουν sitting-- [00:47:15] Davin: Θέλετε να το διδάξει; Ή θέλεις να το διδάξει; [00:47:17] ΚΟΙΝΟ: σκέφτηκα ότι θα μπορούσαμε να τους δείξουμε ακριβώς για να αρχίσει με. Θέλω να πω, μπορείτε να πάτε σε τα περαιτέρω, αλλά εγώ θεωρούν ότι είναι πιο λογικό από τότε που ήταν απλά μιλάμε για HTTP καταστάσεις. Έτσι, εδώ είναι όλη η λίστα. Υποθέτω ότι αυτό που πρόκειται να συμβεί είναι Davin πρόκειται να πάει σε αυτά αργότερα. Αλλά υπάρχει μια ολόκληρη λίστα, ένα προεπισκόπηση της γεύσης για να έρθει. Εντάξει, θα πάμε να blow-- αυτό πρόκειται να είναι ένα μάθημα PHP crash σαν κανένα άλλο. [00:47:41] Έτσι, PHP, Hypertext Preprocessor, είναι ένα αναδρομικό backronym, πράγμα που σημαίνει ότι ονομάστηκε κάτι άλλο. Και τότε ήταν σαν, αυτό δεν έχει νόημα. Έτσι απλά το όνομα it-- και αυτό ήταν ένα αρκτικόλεξο, έτσι ακριβώς έκανε PHP Hypertext Preprocessor, η οποία απλά δεν έχει κανένα νόημα. Διασκέδαση ιστορία. Είναι μια γλώσσα προγραμματισμού. Έτσι, όσο τονίζω ότι HTML δεν είναι μια γλώσσα προγραμματισμού, Είναι μια γλώσσα σήμανσης, PHP είναι μια γλώσσα προγραμματισμού. Πώς ξέρετε ότι αυτό είναι επειδή υπάρχει λογική. Υπάρχουν υποθετικοί. Έχουμε μεταβλητές, ενώ εμείς δεν έχουν κανένα από αυτά τα πράγματα σε μορφή HTML. [00:48:12] Εντάξει, τότε έχουμε αυτό το μικρό λίγο εδώ ότι είναι σαν μια γεύση της PHP. Έτσι, βασικά, τα ονόματα των μεταβλητών ξεκινήστε με το σύμβολο του δολαρίου. Πολλοί άνθρωποι σαν αυτό. Υπενθυμίζει μας χρήματα. Είναι όλα υπέροχα. Όλοι θέλουμε την PHP. Γι 'αυτό και δεν προσδιορίζουν ένα Τύπος μεταβλητής πια. Προσδιορίζεται κατά το χρόνο εκτέλεσης. Ο διερμηνέας θα είναι όπως, Ω, θα τρέξει μόνο μέσα, και ανάλογα με το πλαίσιο, Θα δούμε τι τύποι των τύπων Αυτές οι μεταβλητές πρέπει να έχουν. Δεν υπάρχει καμία κύρια λειτουργία. Τα πράγματα θα τρέξει μόνο. Εσείς με την εισαγωγή σας σε σας τελευταία π-set, θα παρατηρήσετε αυτό. Δεν ήταν πραγματικά μια κύρια λειτουργία. Απλά έγραψε ό, τι θα ήθελε να συμβεί. Και αυτό ακριβώς το είδος της συνέβη. Έτσι, αυτό είναι η PHP για εσάς. [00:48:56] Οι πίνακες είναι πολύ παρόμοια. Έχουμε ακόμα αυτό το στήριγμα. Εδώ, έχουμε κάποια μεταβλητή ονομάζεται ARR, και είναι ίση to-- έχουμε την κανονική μας βραχίονα σημειογραφία. Και έχουμε κάποια βασική τιμή. Και η μεγάλη διαφορά μεταξύ του C και PHP συστοιχίες είναι ότι μπορούμε να έχουμε αυτό το associate-- μπορούμε να συσχετίσουμε τις τιμές σε κλειδιά. Έτσι, αντί να έχουμε μια συστοιχία ευρετήριο από τον αριθμό ή τη θέση του εν λόγω στοιχείου στη συστοιχία, μπορούμε να το συνδέσει πραγματικά με ένα κλειδί. Πού μπορούμε να πούμε, εντάξει, θέλω ανεξαρτήτως τιμή σχετίζεται με φρούτα. Και ίσως έχουμε φρούτα πήγε στην μπανάνα. Έτσι θα επιστρέψει μπανάνα για εμάς. [00:49:41] Αλλά βασικά, το πιο ισχυρό πράγμα σχετικά με αυτό είναι ότι αν εσείς θυμάστε το demo από διάλεξη όπου βασικά ξαναέγραψε ορθογράφος σε PHP, και was-- αναζήτηση ήταν πραγματικά ακριβώς ήθελε, δεν υπάρχει αυτό το κλειδί; Αυτό είναι πραγματικά το είδος της εξουσίας του. Δεν χρειάζεται να επαναλάβει μέσω του πίνακα σας. Δεν χρειάζεται να γνωρίζετε Τι χώρο θα είναι σε. Θα μπορούσε να είναι στο τέλος ή την αρχή. Εφ 'όσον γνωρίζετε το κλειδί που είναι συνδεδεμένες με την αξία, PHP μπορεί να φτύσει ακριβώς αυτή την τιμή δεξιά πίσω έξω σε σας, εντάξει; [00:50:09] Και τότε, επίσης, μόλις έχουν μόνο και μόνο επειδή εμείς μπορούν να έχουν ζεύγη κλειδιών αξία δεν σημαίνει ότι πρέπει να. Μπορείτε επίσης να δημιουργήσετε μόνο μια κανονική σειρά, όπως εδώ, στο κάτω μέρος, όπου είναι μόνο ένα, δύο, τρία, τέσσερα. Αυτοί είναι οι αξίες μας. Και στην πραγματικότητα, τα κλειδιά τους είναι οι δείκτες. Έτσι, το κλειδί για ένα θα είναι μηδενική. Το κλειδί για δύο θα είναι ένα. Ούτω καθεξής και ούτω καθεξής, εκτός μπορείτε να εκχωρήσετε ρητά ένα κλειδί, θα μπορούσαμε να υποθέσουμε ότι η τιμή είναι ακριβώς δείκτη τους. Μήπως αυτό έχει νόημα για όλους; Δεν υπάρχουν ερωτήσεις; Awesome. [00:50:38] Εντάξει, foreach είναι ένας τρόπος για να διέτρεξε τη συστοιχίες σας. Έτσι έχουμε κάτι εδώ, μόνο η γενική δομή. Έτσι foreach, το όνομα του σειρά μας, καθώς ό, τι θέλετε να καλέσετε το καθένα στοιχείο σε σειρά σας, και μπορούμε να κάνουμε κάτι με το στοιχείο αυτό ή με την εν λόγω αξία. Έτσι έχουμε ένα παράδειγμα εδώ. Έχουμε μια συνειρμική πίνακα με αυτές τις δύο εισόδους με μπαρ που σχετίζονται με την foo και QUX που σχετίζονται με Baz. Έτσι, τα πλήκτρα είναι foo και Baz. Οι τιμές είναι μπαρ και QUX. Έτσι foreach, έχουμε σειρά μας εδώ, όπως το ζεύγος κλειδιών αξία. Αυτό μας επιτρέπει να έχουν πρόσβαση τόσο το κλειδί και τιμή. Ίσως θέλετε ακριβώς το τιμή, στην οποία περίπτωση θα μπορούσατε να κάνετε ακριβώς όπως ARR ως $ αξία, και τότε θα Τα απλά πρόσβαση στην αξία όπως μπορείτε να μετακινηθείτε μέσα. Αλλά ίσως, για κάποια λόγο, θέλετε το κλειδί, η οποία είναι ο λόγος που επέλεξα αυτό το παράδειγμα αντ 'αυτού. Έτσι μπορείτε πραγματικά να χειριστείτε κλειδί και την αξία σε αυτή την περίπτωση. Εντάξει; Ερώτηση; [00:51:41] ΚΟΙΝΟ: Αν θέλατε να απλά να χειριστείτε το κλειδί, θα που έχετε να κάνετε foreach-- [00:51:45] ALISON: Δεξιά. Έτσι, αν θέλετε να χειρίζονται μόνο το κλειδί, θα χρειαστεί ακόμα αυτό σύνταξη γιατί αν απλά έχουν ARR ως κάτι, ως ένα πράγμα, αυτό είναι πρόκειται να υποθέσουμε ότι θέλετε η τιμή, δεν είναι το κλειδί. Έτσι, αν έχετε ποτέ ακριβώς όπως ARR, όπως, ίσως αυτό είναι σαν $ στοιχείο, πρόκειται να υποθέσουμε ότι κάνεις μόνο για την αξία σε κάθε σημείο. Αν θέλετε ρητά να να κάνει κάτι με το κλειδί, ακόμη και αν δεν πρόκειται να κάνει τίποτα με την αξία, θα πρέπει να έχετε αυτή τη δομή ότι έχουμε εδώ όπου ζητάς ρητά τόσο για το κλειδί και την τιμή. Μεγάλη ερώτηση. Οτιδήποτε άλλο; Cool. [00:52:27] Εντάξει, PHP και HTML. Ω, είμαστε πίσω στην π-set επτά ξανά. Έτσι, αυτό θα πρέπει να κοιτάξουμε λίγο εξοικειωμένοι. Έτσι, αυτό είναι κάποια απλή μορφή HTML ότι έχει κάποιο όνομα εισόδου γεια. Και βλέπουμε έχουμε μέθοδος μας GET. Και αν θυμηθούμε από p-σειρά μας, όταν υποβάλλεται το έντυπο αυτό, στέλνει μια σειρά που ονομάζεται $ _GET που έχει όλα αυτά τα δεδομένα ή τις μεταβλητές από η μορφή που θα πρέπει να είναι χειραγωγείται σε PHP μας. Έτσι, στην περίπτωση αυτή, ο χρήστης θα θέσει στο όνομά τους. Το υποβάλετε. Και βλέπουμε ότι έχουμε κάποια σειρά εδώ. Έχουμε σειρά GET μας. Και έχουμε πρόσβαση το όνομα. [00:53:11] Έτσι ώστε να λέει, εντάξει, να μου δώσει το τιμή που είναι συνδεδεμένες με το όνομα, όνομα του οποίου είναι το κλειδί εδώ. Και αυτό χάρτες απευθείας σε ό, τι είπαμε το όνομα εισόδου μας είναι. Έτσι, αυτό που σας δίνει το κλειδί σε ό, τι πρόκειται να είναι σε σειρά σας εδώ. Μήπως αυτό έχει νόημα για όλους; Ναι; [00:53:32] ΚΟΙΝΟ: Μήπως το όνομα Αποκτήστε αναφέρονται στο μωβ γραμμή σε [δεν ακούγεται]; [00:53:36] ALISON: Αναφέρεται σε αυτό εδώ. Έτσι, αυτό το πεδίο εδώ, αναφέρεται σε αυτό το όνομα εδώ. Έτσι, αυτό θα μπορούσε να ονομαστεί όπως τον αριθμό του τηλεφώνου, ή οτιδήποτε άλλο. Αυτό το όνομα λέει στην πραγματικότητα, τι σας καλεί αυτό το πεδίο; Πώς θα πας να αναφέρονται σε αυτόν τον τομέα; Και αυτό το όνομα είναι στην πραγματικότητα αρέσει, είμαστε λέγοντας ότι αυτό το πεδίο καλείται όνομα. Αυτό είναι το πώς θα πάμε να έχουν πρόσβαση. [00:53:59] ΚΟΙΝΟ: Έτσι είναι σαν, το όνομα εισόδου ισούται με τον Bob, and-- [00:54:02] ALISON: Δεξιά, τότε θα πάρει Bob εκεί κάτω. Ακριβώς. Όλοι δροσερό; Εντάξει, έτσι ώστε να πάρει σε σχέση με μετά, αυτοί είναι οι δύο βασικοί τρόποι ότι έχουμε περάσει τα δεδομένα σε ένα αίτημα HTTP. Εσείς πρέπει να έχετε δει τα δύο αυτά ελπίζουμε. Έτσι, με GET, οι πληροφορίες περνά διαμέσου του URL. Έτσι, αν ποτέ το Google αναζητήσεις, το YouTube, θα ίσως παρατηρήσετε κάποια ερωτηματικό. Και στη συνέχεια, όλες οι λέξεις ότι μόλις βάλει εκεί. Και Ταχυδρομείων περνά τα δεδομένα στο σώμα του μηνύματος HTTP. Έτσι, σε αντίθεση με πάρει, θα εξετάσει το είδος του ότι τα δεδομένα είναι κρυμμένο από τον χρήστη. Αλλά τι είναι πραγματικά σημαντικό να κατανοήσουμε είναι ότι αυτό εξακολουθεί να είναι εξίσου ανασφαλής και να πάρει. Η αναλογία που μου αρέσει να χρησιμοποιήσετε είναι αν Έχετε αριθμό του τραπεζικού σας λογαριασμού και μπορείτε να το γράψετε στο εξωτερικό του ένα φάκελο, ότι είναι αρκετά ασφαλές. Αν ήταν να το γράψετε σε ένα κομμάτι του χαρτί και να το βάλετε μέσα στο φάκελο, είναι ακόμα πολύ ανασφαλείς, διότι το μόνο που έχετε να κάνετε είναι να ανοίξετε ότι μέχρι και να εξετάσουμε τα πραγματικά περιεχόμενα του μηνύματος για να το δω αυτό. Έτσι, αυτό είναι "κρυφή", και οι άνθρωποι σαν να νομίζω ότι είναι ασφαλές, αλλά αυτό δεν είναι πραγματικά. Και είμαι βέβαιος ότι θα Davin μπει σε αυτό περισσότερο, ίσως. Αλλά είναι ένα σημαντικό διάκριση να κάνουν και κάτι πραγματικά καλό να κατανοήσουμε. [00:55:15] Εντάξει, SQL, Structured Query Language. Όλα τα πράγματα που έχουμε δει μέχρι πρόσφατα! Έτσι, αυτό είναι βασικά ακριβώς σχεδιαστεί, Προφανώς, για τη διαχείριση των δεδομένων. Εσείς είχε πολλή εμπειρία με Αυτό σε τραπέζια σας με την PHP MyAdmin. Και υπάρχουν τέσσερις κοινές ερωτήσεις ότι θέλουμε εσείς να ξέρετε. Έτσι, δεν υπάρχει ενημέρωση, ένθετο, επιλέξετε και να διαγράψετε. Έτσι, βεβαιωθείτε ότι γνωρίζετε πολύ καλά εκείνοι. Εμείς πάμε για να πάει μέσα από αυτά πολύ γρήγορα. [00:55:40] Έτσι, ενημέρωση, πραγματικά, και τι ίσως νομίζετε ότι κάνει, ενημερώνει μόνο τα δεδομένα στη βάση δεδομένων σας. Έτσι έχουμε κάποιο παράδειγμα εδώ. Αυτή είναι η γενική δομή ενός ερωτήματος ενημέρωσης. Γι 'αυτό και την ενημέρωση του πίνακα ότι μιλάμε. Και θέλουμε να θέσουμε ορισμένες αξίες, ορισμένες στήλες ίση με συγκεκριμένες τιμές. Έτσι, αυτό ενημερώνει απλώς τον πίνακα, αλλάζοντας τιμές σε όλες τις σειρές σε αυτήν την περίπτωση. Έτσι, σε αυτό εδώ κάτω, ένα πραγματικό παράδειγμα, έχουμε insert-- συγνώμη. Προχωρημένο στάδιο, ώστε διαφάνεια χωρίς εμένα να το συνειδητοποιούμε. [00:56:17] Έτσι, ο πίνακας αυτός ενημερώσεις που Στ1 ίση να VAL1 όπου σπίτι ισούται με «Currier." Τι αυτό κάνει είναι αλλάζει μόνο, μόνο ενημερώνει αυτές τις τιμές σε συγκεκριμένες θέσεις. Έτσι, σε αυτή την πρώτη, αλλάζει αυτά τιμές για τα πάντα στο τραπέζι σας, Εντάξει; Είναι πρόκειται να αλλάξει αυτό στήλη για κάθε είσοδο, για κάθε σειρά. Αλλά αυτό το οποίο, θα μπορούσατε σκεφτείτε το σαν ένα προκριματικό. Έτσι είναι μόνο πρόκειται να αλλάξει είναι σε πολύ συγκεκριμένες θέσεις. Έτσι, σε π-set επτά, όταν ίσως ενημερώνεται το ποσό των μετρητών ότι ο χρήστης σας είχε, θα έπρεπε ίσως μερικοί όπου αναγνωριστικό ισούται αναγνωριστικό περιόδου, σωστά; [00:56:53] Επειδή δεν θέλετε να αλλάξετε το ποσό των μετρητών για κάθε άτομο που χρησιμοποιούσε την ιστοσελίδα σας. Θα ήθελε να το αλλάξει για ένα συγκεκριμένο πρόσωπο, το πρόσωπο αυτό είναι όποιος χρησιμοποιούσε εκείνη τη στιγμή. Σωστά; Εντάξει, έτσι τοποθετήστε, ένθετο ορισμένες τιμές σε πίνακες. Αυτό είναι όπως όταν είστε δημιουργώντας ένα νέο χρήστη. Η γενική δομή εδώ είναι να τοποθετήσετε σε όποιο τραπέζι μιλάμε. Αξίες, που είναι οι αξίες που θέλουμε πραγματικά να εισάγετε. Εντάξει, έτσι όπως βλέπουμε εδώ, εμείς έχουν εισαχθεί στο τραπέζι. Αυτό είναι συγκεκριμένες στήλες με αντιστοιχούσε τιμές τους. Έτσι, αυτό λέει, ένθετο μια νέα σειρά που περιέχει τιμές VAL1 και Val2 κάτω Αυτές οι ειδικές στήλες. [00:57:33] Έτσι, ίσως το μόνο που θέλετε να συμπληρώσετε από το ήμισυ τα πράγματα σε αυτή τη σειρά. Αυτό είναι ό, τι αυτό το μέρος εδώ σας επιτρέπει να κάνετε. Σας επιτρέπει πραγματικά προσδιορίσει ποιο μέρος. Ναι; [00:57:44] ΚΟΙΝΟ: Μπορεί το μόνο που [δεν ακούγεται] κυττάρων στη σειρά [δεν ακούγεται]; [00:57:52] ALISON: Αν έχετε μόνο συμπληρώσετε ορισμένα τμήματα της γραμμής σας, το υπόλοιπο αυτών των κυττάρων είναι απλά άδειο. Εφ 'όσον μπορείτε να τους επιτρέπουν να να είναι άδειο, δεν είναι ένα πρόβλημα. Αν προσπαθήσετε να αποκτήσετε πρόσβαση σε αυτά, είναι πρόκειται να επιστρέψει κάποιο κενό στοιχείο. Αλλά είναι σημαντικό να γνωρίζουμε ότι σε ορισμένες πίνακες, θα πρέπει να επιτρέπεται να είναι μηδενική. Μπορεί να έχετε τρέξει σε ένα πρόβλημα κατά τη διάρκεια της π-set σας γιατί δεν είχαμε αφήσει κανένα των αξιών σας είναι άκυρη. Αλλά μπορείτε να καθορίσετε ένα προαιρετική τιμή στον πίνακα σας. [00:58:26] Εντάξει, επιλέξτε, έτσι αυτό είναι μόνο ένας τρόπος για να πάρει συγκεκριμένα δεδομένα από έναν πίνακα σε κάποια αναγνωριστικό που θέλετε. Έτσι, επιλέξτε αστέρι από το τραπέζι όπου COL ισούται με κάτι σημαίνει απλά, δώσε μου όλα τα δεδομένα που σχετίζονται όπου αυτή η συγκεκριμένη στήλη είναι αλήθεια. Έτσι, το αστέρι σε αυτή την περίπτωση θα να επιστρέψει ολόκληρη τη σειρά σας, εντάξει; [00:58:49] Και τότε, σε αυτή την περίπτωση, επιλέξτε αστέρι από τραπέζι ακριβώς σας δίνει ολόκληρο τον πίνακα. Και στη συνέχεια, διαγράψτε προφανώς, απλά διαγράφει τη γραμμή από τον πίνακα. Έτσι διαγράψει από τον πίνακα, όποιο τραπέζι είμαστε αναφορά, όπου κάποια ειδική αναγνωριστικό ή κάποια συνθήκη είναι αληθής. Ναι; [00:59:07] ΚΟΙΝΟ: Ερώτηση. Γιατί με το διπλό εισαγωγικά, και αν κάνει διπλά εισαγωγικά ή μονά εισαγωγικά, δεν θα κάνει τη διαφορά; [00:59:13] ALISON: Διπλά εισαγωγικά ή μονά εισαγωγικά δεν κάνει τη διαφορά στον SQL. Νόμιζα ότι είδα ένα άλλο ζήτημα. Ναι; [00:59:20] ΚΟΙΝΟ: Δεν επηρεάζει ό, τι παίρνει δραπέτευσε από το ερώτημα αυτό; [00:59:25] ALISON: Rob; [00:59:27] ROB: Τι εννοείτε όταν λέτε διέφυγε από το ερώτημα αυτό; [00:59:31] ΚΟΙΝΟ: Αν κάποιος έχει ένα ένα ερώτημα με τη μορφή of-- [00:59:36] ROB: Αν κάποιος ήταν να θέσει ένα ενιαίο απόσπασμα στο, τότε εφ 'όσον είστε απολύμανση εισόδου σας, τότε δεν έχει σημασία. Αλλά αν είστε με τη χρήση ενός ενιαίου παραθέτω και είστε σωστά διαφυγή των εισροών σας, τότε ναι, θα χρειαστεί να θέσει ένα ενιαίο απόσπασμα προκειμένου να σπάσει κωδικό σας. αν χρησιμοποιείτε διπλά εισαγωγικά, που χρειάζονται για να τεθεί ένα διπλό αναφέρω για να σπάσουν τον κωδικό σας. Αλλά όσο να ξεφύγουν τα πράγματα σωστά, δεν έχει σημασία. Είναι ακριβώς πρόκειται να μεταφραστεί στο σωστό σύμβολο ούτως ή άλλως. [00:59:59] ΚΟΙΝΟ: Τι σημαίνει διαφυγή; ALISON: Λοιπόν, όπως απολύμανση και διαφυγής. Οι εξετάσεις που έχουμε, η μεγάλη XKCD κόμικ ότι σηκώσει όπου έχετε, oh-- ROB: Είναι η τελευταία διαφάνεια. ALISON: Είναι η τελευταία διαφάνεια, πραγματικά; Θεέ μου. Εκεί πάμε, τέλεια. Εντάξει, τόσο βασικά, μπορείτε να κάνετε την ένεση κάτι σε αυτό το ερώτημα SQL όπου σπάει σας κώδικα, ή όπως ο David έδειξε στην τάξη, αν έχουμε κάποια ενιαία Απόσπασμα 1 ισούται με 1 και αν ο κώδικας μας, απλά να αντιγράψετε άμεσα ότι, και έχουμε μια τελική και μόνη προσφορά, αυτό που συμβαίνει είναι παίρνουμε κάποια έκφραση που αληθής, ότι θα ας κάποιος εισέλθετε στην βάση δεδομένων μας και να πάρετε δεδομένα που δεν θέλουν να πάρουν. Έτσι απολύμανση των εισόδων απλά σημαίνει να διασφαλίσουμε ότι δραπετεύουν αυτά χαρακτήρες και για τον ορισμό τους ως χαρακτήρες και όχι τα πράγματα ότι πρέπει να επιτραπεί που πρέπει να ληφθούν κυριολεκτικά ως πρόταση SQL μας. [01:01:04] Έτσι, το μεγάλο πράγμα που είπαμε ότι εσείς θα πρέπει να χρησιμοποιείτε ήταν HTML ειδικούς χαρακτήρες, το οποίο είναι κάτι ότι ίσως να θέλετε να ρίξετε μια ματιά στο. ΟΚ, διαγράψτε. Οι τύποι δεδομένων, όλα αυτά θα είναι σε απευθείας σύνδεση. Δεδομένου ότι έχουμε 15 λεπτά ακόμα, είμαι ακριβώς πρόκειται να πάει δεξιά μέσα από αυτό. PHP και SQL, βασικά αυτό είναι μόλις είχαμε μια λειτουργία ερώτημα που συνέβαλαν στην προστασία έναντι Αυτές οι κακόβουλες επιθέσεις. Έτσι, κάθε φορά που χρησιμοποιείτε ερώτημα, κάναμε σίγουροι ότι τα πράγματα έχουν εξυγιανθεί και εταζέρα. [01:01:36] MVC είναι μόνο ένα παράδειγμα σχεδίασης, έτσι μοντέλο, θέα, ελεγκτή. Είναι απλά ένας τρόπος για να κρατήσει τα πράγματα ωραίο και χωρίσουν με τον ίδιο τρόπο ότι έχουμε την τάση να παράγοντα έξω κώδικα σε λειτουργίες. Αυτό είναι απλά ένα πλαίσιο σχεδιασμού ιστοσελίδων που σας επιτρέπει να κάνετε το ίδιο πράγμα. Πάω να παρακάμψετε αυτό. [01:01:54] Αυτό είναι κάτι που εγώ θα ήταν σούπερ άνετα με. Είναι ένα μεγάλο μικρό τραπέζι εκεί. Σας δίνει τη λειτουργία παράδειγμα του μοντέλου. Είμαι απλά να περάσει αυτό γιατί πραγματικά θέλουν Davin να είναι σε θέση να μιλήσει. Εάν έχετε οποιεσδήποτε ερωτήσεις, παρακαλώ αισθανθείτε ελεύθερος. Θα είμαι εδώ μετά. Μόλις έρθει να μου μιλήσει. Με αυτό, έχουμε HTTP καταστάσεις. Και Davin που πρόκειται να φυσήξει μέσω αυτού σε 15 λεπτά. Αυτό πρόκειται να είναι μεγάλη. [01:02:17] Davin: Εντάξει. Χμ, μικρόφωνο σας; Ναι. Λυπάμαι. ALISON: τρόπος για να προετοιμαστεί. Davin: Όχι, είμαι έτοιμος. Είμαι έτοιμος. Ας το κάνουμε αυτό. Είναι έτοιμος. ΟΚ. Λυπάμαι. Θα χυθεί καφέ για τον εαυτό μου. Δεν ξέρω αν είμαι περισσότερο αναστατωμένος ότι φαίνομαι ανόητος, ή ότι δεν έχω πια τον καφέ. Τέλος πάντων, απλά μια γρήγορη ανακοίνωση σχετικά με το φύλλο εσείς έχετε. Έτσι, αυτό το φύλλο εσείς έχετε δεν είναι ο επίσημος τι είναι για το κουίζ. Αυτή είναι η επίσημη τι στο κουίζ. Επίσης, στην ιστοσελίδα της, λέμε που, εντάξει, αυτό θα είναι το κουίζ. Έτσι, στο μικρό σκονάκι έχετε, δεν είναι επίσημο. Και υπάρχουν λάθη σε αυτό. Έτσι, καλύτερα να μην τυφλά το χρησιμοποιήσετε. Οπότε ναι, αυτό είναι αυτό. Ας μπει σε αυτό το πραγματικά γρήγορα. [01:03:05] Έτσι καταστάσεις HTTP. Λοιπόν, τι συμβαίνει όταν η ιστοσελίδα, όλα είναι εντάξει. Όλα είναι ΟΚ. Τα πάντα έρχεται πίσω στο σας με τον τρόπο που θέλετε να. Μπορείτε να πάρετε ένα 200 OK. 301, όπου έχουμε δει ότι πριν 301; Περιμένετε, τι συμβαίνει; Λυπάμαι. Είδαμε i διάλεξη κασσίτερου κατά τη διάρκεια της ασφάλειας. Έτσι, κατά τη διάρκεια της ασφάλειας, έτσι ώστε αν ο David πληκτρολογήσει στο http και στη συνέχεια προσπάθησε να πάει στο cs50.net, θα πάμε να δούμε 301 κινήθηκε. Γιατί; Επειδή πρόκειται να ανακατευθύνει μπορείτε αυτόματα να HTTPS μας. [01:03:35] Έτσι μετακόμισε 301, μόλις αυτό είναι βασικά μια ανακατεύθυνση. Και μπορείτε να το σκεφτείτε σαν αυτό. Οποιαδήποτε από τις καταστάσεις που ξεκινούν με 2, η αυτά είναι σαν, εντάξει, όλα είναι εντάξει. Οποιαδήποτε από τις καταστάσεις που ξεκινούν με 3, αυτά είναι ανακατεύθυνση. Καταστάσεις που αρχίζουν με 4, ότι μέσα υπάρχει κάποιο είδος λάθους πελάτη. Καταστάσεις που αρχίζουν με 5, ότι είναι κάποιο είδος του σφάλματος διακομιστή. Έτσι, το είδος των χωρίσει Οι καταστάσεις όπως αυτή. Έτσι δεν είναι 304 δεν έχουν τροποποιηθεί, έτσι ώστε σε σας server.c π-σύνολα, γι 'αυτό ας λέτε φορτωμένο cat.html. Τα πάντα έρχεται πίσω, μπορείτε να πάρετε 200s, εντάξει, μεγάλη. [01:04:03] Ας πούμε ότι έχετε να την ανανεώσετε. Λοιπόν, μέσα σε αυτό cat.html, έχετε ένα JPEG. Λοιπόν, αυτό δεν είναι JPEG πρόκειται να πάρει reloaded. Δεν πρόκειται να δημοσιεύσετε ένα άλλο GET αίτηση στον server, και στη συνέχεια να πάρει όλες τις πληροφορίες πίσω. Δεν πρόκειται απλά be-- ότι η εικόνα είναι πρόκειται να αποθηκευτεί προσωρινά στον υπολογιστή σας. Και έτσι η εικόνα θα είναι 304. Έτσι δεν έχουν τροποποιηθεί. Αν, λοιπόν, έχετε κλείσει, σαφής μπισκότα, και στη συνέχεια, ανανεώστε και να προσπαθήσει να φορτώσει αυτή τη σελίδα και πάλι, θα πάμε να δούμε 200s. Δεν πρόκειται να δούμε ότι 304. [01:04:28] 400, κακή αίτημα, το πραγματικό γρήγορη, όπως αν επρόκειτο να στείλει ένα JSON αντικείμενο στο διακομιστή και το αντικείμενο JSON σας ήταν εσφαλμένη, θα δείτε κάτι σαν αυτό. 403, απαγορεύεται. Πότε θα δούμε ένα απαγορευμένο; Μάλλον Μάλλον; ΚΟΙΝΟ: Chmod. Davin: Chmod, ναι. Έτσι, δεν έχετε ορίσει δικαιώματα σωστά. 404, δεν βρέθηκε. Είναι απλά δεν είναι εκεί. Έτσι, αν πληκτρολογήσετε λάθος διεύθυνση URL. 500, εσωτερικό σφάλμα διακομιστή, ο διακομιστής πιθανόν να μην έχει ρυθμιστεί σωστά. Κάτι όχι στο τέλος σας, αλλά κάτι από την πλευρά του διακομιστή. Και 503; Πολλοί άνθρωποι είδαν 503s στο τελευταίο π-σετ. Πότε θα συμβεί αυτό; Άκουσα ψιθύρους. [01:05:05] ΚΟΙΝΟ: Όταν το Google αποφασίζει είστε ένα ρομπότ. Davin: Ναι, όταν η Google αποφασίζει είστε ένα ρομπότ, μπορείτε να πάρετε 503s. Έτσι, αυτό είναι μια υπερφόρτωση. Εάν έχετε ζητήσει από το διακομιστή πάρα πολύ, είναι συνήθως παροδική. Και οι περισσότεροι από εσάς θα παρατηρήσατε. Έτσι είδα 503. Μπορεί να έχετε λάβει ένα μικρό διάλειμμα, τότε οι 503s πήγε μακριά, και όλα ήταν εντάξει. [01:05:20] Gabe: Real γρήγορα, όταν εσείς δεν έχετε 500 σε μάλλον που αυτό το τελευταίο πρόβλημα; Ναι; [01:05:27] ΚΟΙΝΟ: Συνήθως, εάν η server έχει ένα αρχείο άστοχες ή [δεν ακούγεται] τους μηχανή [δεν ακούγεται]. [01:05:34] Gabe: Έτσι θα μπορούσε να είναι μια διαμόρφωση θέμα στην PHP σας στον server σας. Αλλά θα μπορούσε να είναι απλώς κάτι σαν ένα ερωτηματικό που ξέχασε σας. Αν είστε πληκτρολογώντας PHP, κάποια εσφαλμένη σύνταξη μπορεί να σας πάρει κάτι τέτοιο. Εντάξει; [01:05:46] Davin: Cool. Θέλεις να κάνουν ακριβώς μέχρι AJAX; [01:05:51] Gabe: [δεν ακούγεται]. Davin: Εντάξει. Έτσι ποια είναι η DOM; Τι σημαίνει για το DOM; [01:05:55] ΚΟΙΝΟ: Έγγραφο μοντέλο αντικειμένου. Davin: Νίκαια. Και γιατί δεν μας αρέσει; Awesome. Δεξιά, γι 'αυτό ακριβώς μας επιτρέπει να έχουν πρόσβαση η HTML, πρόσβαση στη σελίδα μας πολύ γρήγορα. Γιατί; Επειδή είμαστε θεραπεία μας σελίδα, θεραπεία ετικέτες HTML μας, θεραπεία τα πάντα σαν να είναι αντικείμενα. Αν είμαστε να τους μεταχειρίζονται σαν να είσαι αντικείμενα, τότε τι μπορούμε να κάνουμε; Λοιπόν, μπορούμε να καλέσουμε τις λειτουργίες τους. Και αυτό είναι σημαντικό γιατί; Λοιπόν, επειδή θα πάμε να χρησιμοποιήσετε Την Javascript για να ενημερώσετε HTML μας, ενημερώσετε αυτά τα αντικείμενα. Έτσι, αν τα μεταχειριζόμαστε σαν αντικείμενα, Στη συνέχεια, μπορείτε να καλέσετε τις λειτουργίες τους. Πάω να μπει σε αυτό το λίγο περισσότερο όταν πάω σε ένα JavaScript, αλλά έχετε όλοι δει σαν document.getElementById. Έτσι έγγραφο σας στοιχείο, να πάρει το στοιχείο με ID, έτσι ώστε να πάμε να δούμε για κάποιο αναγνωριστικό σε μια ετικέτα HTML. Και στη συνέχεια, μπορείτε να κάνετε κάτι άλλο σε αυτό. Για παράδειγμα, όπως document.body, Στη συνέχεια μπορείτε να προσθέσετε παιδί. Έτσι θα πάμε να βρούμε το έγγραφο. Έχετε το έγγραφο. Θα πάμε για να βρει το σώμα. Μπορείτε βρήκε το σώμα. Και τότε, θα πάμε να καλέσει κάποια λειτουργία σε αυτό. Έτσι επισυνάπτει παιδί, και μπορείτε να προσθέσετε κάποια HTML στο άκρο μέσα στο σώμα σας. Έτσι, βασικά, είστε ακριβώς κατεργασία σαν ένα αντικείμενο. Είσαι θεραπεία HTML ετικέτες σαν ένα αντικείμενο. Και το κάνει πολύ εύκολο και γρήγορα να πάτε μέσω αυτών. Αλλά σας επιτρέπει επίσης να καλέσετε λειτουργίες τους ώστε να μπορείτε να χειριστείτε και να αλλάξετε τα στοιχεία. [01:07:04] Gabe: Με δεδομένο αυτό, γιατί είναι τέτοια JavaScript ένα ωραίο γλώσσα για να αλληλεπιδρούν με την HTML; Οι πιθανότητες είναι, όταν οι άνθρωποι επιλέγουν η γλώσσα του προγράμματος περιήγησης, για την πλευρά του πελάτη, JavaScript είναι πραγματικά ωραίο, Είναι πολύ καλός στο χειρισμό αντικειμένων. Και τα αντικείμενα είναι το είδος του αρέσει τα αντικείμενα που εμφανίζονται στην HTML, γι 'αυτό είναι πολύ εύκολο για το JavaScript να κάνει αυτό το είδος του χειρισμού. Davin: Νίκαια. Έτσι, εδώ είναι μόνο ένα παράδειγμα. Πιστεύω λοιπόν ότι σε ένα κουίζ του προηγούμενου έτους, ή ίσως και πριν από δύο χρόνια, εμείς σας ζητηθεί να δημιουργήσετε ένα δέντρο. Έτσι, αυτό είναι ακριβώς ό, τι θα κάνετε. Έτσι, μπορείτε να ξεκινήσετε με το έγγραφο. Και τότε βασικά Απλά κοιτάξτε τις ετικέτες. Έτσι, αν δει κανείς, εμείς ξεκινήστε με μια ετικέτα HTML. Και στη συνέχεια, μπορείτε να πάρετε ενδείξεις για το πώς να κάνετε αυτό με βάση την εσοχή. Έτσι, το είδος της κεφαλής του διακλαδίζεται. Μέσα στο κεφάλι, έχουμε μια άλλη ετικέτα για τον τίτλο. Έτσι, λοιπόν, έχουμε μια ετικέττα τίτλου. Και μέσα από αυτό, έχουμε κάποια χορδή. Και έτσι εμείς εκπροσωπούμε ένα string σε έναν κύκλο. Και όλες οι ετικέτες που βρίσκονται σε πλατείες. [01:07:54] Και αν δει κανείς, αν εμείς σκεφτείτε το σαν ένα δέντρο, και ας πούμε ότι η HTML είναι ένας γονέας, τότε το κεφάλι και το σώμα πρόκειται να είναι αδέλφια. Είναι και οι δύο θα είναι τα παιδιά του εν λόγω γονέα. Έτσι, επειδή είναι δύο αδέλφια, που είναι πρόκειται να είναι το είδος του δίπλα στο κάθε άλλη στο μοντέλο μας δέντρο. Και στη συνέχεια, μπορείτε βασικά κάνουν ακριβώς το ίδιο πράγμα. Έτσι, δεν είναι δύσκολο, αλλά έχουμε ζητήσει ερωτήματα όπως αυτό πριν στο κουίζ. Gabe: Μήπως κάποιος απορίες μέχρι στιγμής; Είναι καλό; Davin: Cool. JavaScript, εντάξει, τα καλά πράγματα. Έτσι το JavaScript, τι είναι το JavaScript; Λοιπόν, το JavaScript is-- είναι περίπλοκο, αλλά αυτά είναι μερικά από τα κυριώτερα σημεία ότι θα πρέπει να έχετε κατά νου. Κατ 'αρχάς, είναι χαλαρά πληκτρολογήσει. Τι σημαίνει αυτό; Έτσι PHP was-- ναι, τι συμβαίνει; [01:08:35] ΚΟΙΝΟ: Δεν χρειάζεται να ρητά κατάσταση τι είδους μεταβλητή είναι. Davin: Τέλεια. Έτσι, ο ίδιος είπε ότι δεν χρειάζεται να αναφέρει ρητά τον τύπο της μεταβλητής. Αυτό είναι ακριβώς σωστό. Έτσι, σε C, αν είχα int i ισούται με 50, Στη συνέχεια σε PHP, είναι ακριβώς όπως αυτό, $ i, ισούται με 50. Στη συνέχεια, το JavaScript, ποια θα ήταν η κλήση είναι; Var, σωστά; Θα ήθελα να είναι σαν var i ισούται με 50. Αλλά δεν χρειάζεται να είναι όπως, εντάξει, αυτό είναι ένα int. Εντάξει, αυτό είναι ένα string. Δεν χρειάζεται να το κάνουμε αυτό. Είναι μια ερμηνευμένη γλώσσα. Λοιπόν, τι σημαίνει αυτό; [01:09:04] ΚΟΙΝΟ: Δεν καταρτίζονται. [01:09:06] Davin: Τι δεν καταρτίζονται σημαίνει; Ναι; [01:09:11] ΚΟΙΝΟ: Δεν έχετε για την αναδιάρθρωση του κώδικα για να πάρει έτοιμο για ο υπολογιστής για να το τρέξει. Είναι μόλις ληφθεί κατά το χρόνο της εκτέλεση και ο υπολογιστής [δεν ακούγεται]. Davin: Ναι, γι 'αυτό πρόκειται να διέρχονται μέσω διερμηνέα. Αλλά είστε ακριβώς δεξιά. Έτσι, ποτέ δεν πρόκειται για να το υπολογίσουν, σωστά; Όταν κάνατε σας PHP και JavaScript κώδικα, ποτέ δεν ονομάζεται μεταγλώττιση. Ποτέ δεν ζήτησε κάτι σαν κάνει ή κάτι τέτοιο. Αυτό συμβαίνει γιατί έχει ερμηνευθεί. Έτσι, κάθε φορά που περνά μέσα από το πρόγραμμα περιήγησης, περνά μέσω διερμηνέα. Και αυτό πρόκειται να το ερμηνεύσει ακριβώς σε πραγματικό χρόνο αμέσως για σας. Έτσι ποια είναι τα θετικά και τα αρνητικά να έχουν μια ερμηνευμένη γλώσσα και έχοντας ένα μεταγλωττισμένο γλώσσα; Έτσι compiling-- ναι, τι συμβαίνει; [01:09:50] ΚΟΙΝΟ: Ερμηνεύθηκε είναι πιο αργή. Davin: Με ποια έννοια; [01:09:57] Κοινό: Αφού μεταγλώττιση, δεν έχετε να κάνει οποιαδήποτε επιπλέον μέτρα για να εκτελέσει αυτό, ενώ αυτό το [δεν ακούγεται]. [01:10:04] Davin: Δεξιά, τέλεια. Έτσι, αυτό που είπατε είναι βασικά ότι η μεταγλώττιση, κατά τη μεταγλώττιση, έχετε ένα Πολλοί εκ των προτέρων το κόστος, έτσι δεν είναι; Θα πάμε για να το υπολογίσουν. Αλλά μετά θα το υπολογίσουν, ο compiler πρόκειται να βελτιστοποιήσετε. Είναι πρόκειται να είναι γρήγορη. Είναι πρόκειται να βασικά είναι τόσο γρήγορα όσο μπορεί να είναι. Με τη διερμηνεία, ποτέ δεν έχουν αυτό το αρχικό κόστος. Μάλλον, πρόκειται να είναι ελαφρώς πιο αργή κάθε φορά που θα το ερμηνεύσει. Και θα πάμε να πρέπει να ερμηνεύουν κάθε φορά. Έτσι, αντί να έχει αυτό ένα χρονικό κόστος, τώρα είστε Θα πρέπει να το ερμηνεύσει κάθε φορά που η σελίδα καθιστά. [01:10:29] Έτσι, οι διερμηνείς είναι καλό γιατί δεν χρειάζεται να το υπολογίσουν, αλλά είναι κακό σε αυτό κάθε φορά που γίνεται φόρτωση της σελίδας, είναι πρόκειται να πρέπει να ερμηνεύσουμε αυτή τη JavaScript. Και πρόκειται να τρέξει λίγο πιο αργά ό, τι αν ήταν να το υπολογίσουν. Σας επιτρέπει να communicate-- Περίμενε. Χρησιμοποιείται για να χειραγωγήσουν τον περιεχόμενο και την εμφάνιση. Εμείς απλά μίλησε γι 'αυτό. Χρησιμοποιεί το DOM. AJAX, θα μπει σε AJAX σε λίγο. Και στη συνέχεια, είναι πλευρά του πελάτη. Έτσι PHP είναι πλευρά του server. JavaScript είναι την πλευρά του πελάτη. Τι είναι θετικοί σε αυτό; Είναι λέει. Είναι πιο γρήγορα, σωστά; Επειδή δεν έχετε to-- είναι πιο γρήγορο. Δεν χρειάζεται να επικοινωνούν με κάποια άλλη συσκευή. Εάν είστε ακριβώς για σας πελάτη, ποτέ δεν είσαι πρόκειται να πρέπει να πάει και να δούμε τι είναι στο διακομιστή και στη συνέχεια να υποβάλει σχετική έκθεση ή κάτι τέτοιο. Έτσι πλευρά του πελάτη τείνει να είναι λίγο πιο γρήγορα. [01:11:15] Gabe: Ναι, αλλά αυτό δεν σημαίνει ότι η PHP είναι ταχύτερα από ό, τι το JavaScript ή κάτι παρόμοιο. Τρέχουν είδος του στην ίδια ταχύτητα επειδή είναι τόσο ερμηνευμένες γλώσσες. Το πράγμα που είναι αργή εδώ είναι το αίτημα. Έτσι είστε πραγματικά πρόκειται σε όλη τη διαδρομή πάνω από τη Βραζιλία να πάρετε κάποιες πληροφορίες που ζει εκεί. Αλλά η PHP και JavaScript, που είδος εκτελούνται στην ίδια ταχύτητα. Δεν είναι ότι το ένα είναι ταχύτερα από ό, τι το άλλο. Αυτό, επίσης, τέχνασμα ερώτηση εδώ. Έτσι, το JavaScript δεν γίνεται ποτέ κώδικα μηχανής, αληθής ή ψευδής; [01:11:47] ΚΟΙΝΟ: Λάθος. Gabe: Λάθος. Πρέπει να γίνει μηχανή Κωδικός επειδή κώδικα μηχανής είναι Το μόνο πράγμα που το μηχάνημα καταλαβαίνει. Ακόμα κι αν δεν είναι καταρτίζονται, εξακολουθεί να γίνεται κώδικα μηχανής επειδή ο διερμηνέας είναι απλά ένα πρόγραμμα που πηγαίνει γραμμή προς γραμμή και μετατρέπει αυτή τη γραμμή σε κάτι που ο υπολογιστής κατανοεί. Εντάξει; Cool. [01:12:08] Davin: Εδώ είναι μόνο ένα πολύ βασικό Hello World πρόγραμμα JavaScript. Έτσι, δεν ξέρω if-- έχετε δει αυτό. Αλλά έχετε μόνο HTML εδώ. Και αντί για την πραγματική εισαγωγή η JavaScript στις ετικέτες σενάριο, έτσι θα κανονικά το βάλετε στο κεφάλι. Έχετε ετικέτες σενάριο. Μπορείτε να πέσει εκεί. Όλοι έχουμε κάνει εδώ έχουμε συνδέονται in-- έτσι έχουμε συνδέονται σε ένα αρχείο JavaScript σαν αυτό. Και όλοι έχετε κάνει αυτό, έτσι δεν είναι; Έτσι, όταν ήταν με τη χρήση jQuery και underscore.js στο τελευταίο π-σετ, δεν έχετε τόνους κώδικα σε ετικέτες script σας, μέσα στο κεφάλι σας. Θα μπορούσατε να το κάνετε αυτό, αλλά, αντίθετα, είστε απλά συνδέοντάς σε. Και εσείς το συνδέει σε Ακριβώς όπως κάνετε με CSS. Γι 'αυτό ακριβώς κάνει πιο εύκολο να διαβάσει, έτσι κωδικός σας δεν είναι σαν μακρύς 1.000 γραμμές με τους τόνους του λειτουργίες που δεν μπορεί να χρησιμοποιεί. [01:12:52] Αντ 'αυτού, μπορείτε απλά να συνδέσετε σε. Είναι το compartmentalizes. Είναι σαν να γράφει κάποιο αρχείο κεφαλίδας, και στη συνέχεια, συμπεριλαμβανομένης της εν λόγω αρχείο κεφαλίδας στην Γ Σκεφτείτε το σαν αυτό. Έτσι, αυτό που κάνει αυτό το κάνει; Λοιπόν, αυτό πρόκειται να τρέξει. Είναι πρόκειται να προειδοποιήσει. Έτσι θα πάμε να πάρετε μια μικρή pop up που ονομάζεται παγκόσμια γεια. Γρήγορη ερώτηση, απλά ελέγχου ασφαλείας, έτσι ώστε να δείτε εδώ στο σώμα, λένε σώμα, HTML εδώ. Τι έρχεται πρώτο; Μπορώ να δω το σώμα, HTML εδώ, ή μπορώ να δω την ειδοποίηση για πρώτη φορά; [01:13:19] ΚΟΙΝΟ: ειδοποίησης. [01:13:20] Davin: Δεξιά. Λέει σε εγρήγορση. Γιατί; [01:13:22] ΚΟΙΝΟ: Επειδή σας πάει από πάνω προς τα κάτω. [01:13:24] Davin: Ναι. Τέλεια. Έτσι, λέει, θα πάτε από πάνω προς τα κάτω μέρος, η οποία είναι απολύτως σωστή. Θα πάμε για να πάει από πάνω προς τα κάτω. Και σε JavaScript, jQuery, έχετε ένα λειτουργία που είναι σαν onload, ή έτοιμα, και ότι λέει, εντάξει, περιμένετε έως ότου όλη αυτή η HTML έχει φορτωθεί. Και στη συνέχεια, καλέστε το JavaScript. Επειδή δεν έχουμε εδώ ότι, η το πρώτο πράγμα που πρόκειται να συμβεί Είναι πρόκειται να πάει από πάνω προς τα κάτω. Είναι πρόκειται να χτυπήσει ότι JS κλήση, πρόκειται να προειδοποιήσει. Μετά από αυτό κάνετε κλικ στο κουμπί OK, ότι η ειδοποίηση πάει μακριά. Στη συνέχεια, πρόκειται να δείξει σας το σώμα HTML εδώ. Νίκαιας. [01:13:54] Εντάξει, έτσι απλά πραγματικά γρήγορα, γράψιμο σε JavaScript είναι εξαιρετικά γρήγορη. Προκειμένου να δηλώσουν μια μεταβλητή, το όνομα var. Έτσι, σε C, έχετε int i, έχετε να δηλώσουν τι είδους τύπος είναι. PHP, $. JavaScript, var. Μιλήσαμε για αυτό. Εντάξει, ας πάμε. [01:14:11] Loops, ίδιο πράγμα. Το ίδιο πράγμα. Δηλώσεις λειτουργία, έτσι ακριβώς όπως έχετε δει σε C. Το μόνο πράγμα διαφορετικό είναι έτσι όταν μπορείτε να πάρετε σε άλλες γλώσσες προγραμματισμού, όπως όταν παίρνετε 51 επόμενο εξάμηνο και κάνεις με OCaml, μπορείτε να ασχοληθεί με ανώνυμο λειτουργίες. Έτσι, αυτό είναι ακριβώς αυτό που έχετε εδώ. Έτσι θέλετε να βάλετε στο άθροισμα, κάποιο είδος του ποσού αξίας. Αλλά θα μπορούσε να κάνει μόνο μία φορά. Έτσι, δεν θέλετε να το ονομάσουμε λειτουργία άθροισμα, να δώσει μια δήλωση της συνάρτησης. Αντ 'αυτού, μπορείτε απλά να το χρησιμοποιήσετε ως ανώνυμη συνάρτηση. Και έχετε δει αυτό το πολύ. Θα δείτε ένα παράδειγμα Αυτό σε μερικές διαφάνειες. Ναι, θα δούμε. Gabe: Καλή ερώτηση. Πότε μπορεί να θέλετε να χρησιμοποιήσετε μια ανώνυμη συνάρτηση εδώ; Βασικά, όταν θέλεις κάτι, σαν ένα γεγονός, για να συμβεί αυτό. Έτσι, όταν το ποντίκι είναι κλικ, για παράδειγμα, θέλετε κάποια λειτουργία να ονομάζεται. Έτσι περνάτε στην εκδήλωση χειρισμού, περνάτε στην εκδήλωση, είδος, η λειτουργία που Θέλετε να ονομάζεται. Και τι περνάτε είναι όπως, στο τέλος της ημέρας, μόλις ένας δείκτης για η εντολή, προς την λειτουργία. Έτσι δεν είναι σαν να περνάτε το σύνολο κώδικας, όπως ένα δείκτη προς τη λειτουργία. Και τότε, όταν κάποιος κάνει κλικ στο ποντίκι, τότε η λειτουργία φώναξαν. [01:15:17] Davin: Πίνακες, έτσι ώστε να έχουν μια δήλωση σειρά. Στη συνέχεια, μια σειρά για να βάλει τα πράγματα σε. Ρεάλ γρήγορη, τι αυτό θα εκτυπώσετε; Ποιο θα είναι το τρίτο στοιχείο είναι; [01:15:31] ΚΟΙΝΟ: "JS". [01:15:32] Davin: Δεξιά, θα ήταν "JS". Περιμένετε, πάει πίσω. Ποιο είναι το μήκος; [01:15:37] ΚΟΙΝΟ: Τρία. Davin: Τρεις, σωστά; Ακριβώς ό, τι νομίζετε. Εντάξει, τώρα πάει. Πίνακες, μπορείτε να προσθέσετε τα πράγματα για αυτούς. Έτσι, μπορείτε να πάτε πέρα αρχική όρια τους. Απλά κάτι που πρέπει να θυμάστε. PHP, JavaScript, είναι μια μικρή λίγο πιο επιεικής από την άποψη των πραγμάτων όπως αυτό. Αντικείμενα, μοιάζει πολύ structs σε C, πάρα πολύ όπως συνειρμική συστοιχίες στην PHP. Έχετε όλοι είχαν την εμπειρία με αυτό. Έτσι, JSON, όταν περνώντας JSON εμπρός και πίσω σε π-set οκτώ, αυτό είναι το αντικείμενο σας. [01:16:03] Οπότε ναι, παραδείγματος χάριν, το πραγματικό γρήγορο παράδειγμα. Εδώ είναι ένα αντικείμενο. Ο τρόπος που η αναφορά αυτή αντικείμενο, έτσι απλά πραγματικά γρήγορα, ας πούμε Ήθελα να βρω έξω, εντάξει, αυτό είναι το μάθημα; Και έτσι το όνομα του αντικειμένου εδώ είναι CS50. Και τότε, αν είχα μια συνειρμική σειρά, πώς θα το κάνω αυτό; Θα είμαι με ένα κλειδί, σωστά; Έτσι, δεν έχω το όνομα της συστοιχίας. Έχω βραχίονα, εισαγωγικά, κλειδί, τέλος εισαγωγικά, τέλος βραχίονα, και ότι θα αναφέρει ότι στοιχείο μέσα συνειρμική σειρά μου. Πώς μπορώ να κάνω αναφορά Φυσικά μέσα αντικείμενο μου; Ξέρει κανείς; [01:16:39] ΚΟΙΝΟ: [δεν ακούγεται]. [01:16:40] Davin: Τι συμβαίνει; Κοινό: CS50.course. Davin: Σωστά, ναι. Έτσι CS50.course. Έτσι, ο τρόπος που τα πράγματα αναφορά μέσα σε ένα αντικείμενο JSON είναι με μια τελεία. [01:16:48] ΚΟΙΝΟ: Μπορείτε επίσης να χρησιμοποιήσετε τη σύνταξη του πίνακα. [01:16:53] Davin: Εντάξει, εντάξει. [01:16:54] Gabe: Μπορείτε επίσης να χρησιμοποιήσετε το CS50 βραχίονα, string, όπως εισαγωγικά. ΚΟΙΝΟ: Νομίζω ότι είναι ταυτόσημη με την PHP. Gabe: Είναι το ίδιο πράγμα. Davin: Πρόστιμο! Αλλά θα δείτε αυτό σε άλλα μέρη. Ναι, έτσι συνεχίζω. Αυτό είναι αυτό που μόλις είπα. Έτσι, σε ένα παράδειγμα JavaScript jQuery. Έτσι, αυτό είναι DOM μου, σωστά; Ρεάλ γρήγορα, έτσι έχω μια κεφάλι, γειά σου κόσμος, σώμα. Έχω ένα κουμπί. Λέει "σπρώχνεις", γι 'αυτό θέλω να την προωθήσουν. Και θέλω να κάνω κάτι όταν κάνετε κλικ. Δεξιά, το επόμενο. [01:17:31] Δεξιά, έτσι αυτό είναι το JavaScript μου. Έτσι jQuery είναι απλά ένας ευκολότερος τρόπος για να γράψει το JavaScript. Έτσι, αυτό, και τι Πάω να δείξει την επόμενη, θα είναι jQuery, είναι ταυτόσημα. Έτσι θα κάνουν τα ίδια πράγματα. Απλά jQuery τείνει να είναι λίγο πιο εύκολη. Οι άνθρωποι έχουν την τάση να αρέσει περισσότερο. Έχει πολλές λειτουργίες. Έτσι, οι άνθρωποι τείνουν να χρησιμοποιούν jQuery. Μπορείτε όλοι χρησιμοποιούνται jQuery στο τελευταίο π-σετ. Λοιπόν, τι θα κάνουμε αυτό; Αυτό που θα JavaScript-- έτσι Αυτό είναι απλά το JavaScript. Τι θα κάνετε αυτό; Τι θα κάνει; [01:18:03] Έτσι το πρώτο, θα δείτε το παράθυρο onload. Σωστά; Γι 'αυτό και δεν βλέπω ότι πριν. Έτσι, αυτό πρόκειται να περιμένει μέχρι το σύνολο φορτία παράθυρο. Έτσι πρόκειται να περιμένει μέχρι το φορτίο HTML, όλες οι εικόνες πριν κάνει οτιδήποτε. Ας πούμε DOM μας έχει φορτωθεί. Τα πάντα είναι εκεί. Τότε τι πρόκειται να συμβεί; Ναι; [01:18:19] ΚΟΙΝΟ: Εμφανίζεται Button. [01:18:22] Davin: Το κουμπί είναι ήδη εκεί. Ναι, έτσι το κουμπί είναι ήδη εκεί. Αλλά αυτό πρόκειται να πει, Εντάξει, αν κάνω κλικ στο κουμπί, έτσι ώστε το κουμπί είναι ήδη εκεί, όπως και η ετικέτα HTML. Περιμένετε, πάει πίσω πραγματικά γρήγορα. Αυτή η ετικέτα δεξιά εδώ είναι πρόκειται να είναι ένα κουμπί ήδη. Υπάρχει ήδη ένα κουμπί. Στη συνέχεια, όμως, το JavaScript ετικέτα, ακριβώς εδώ, λέει, εντάξει, θέλω για να πάρετε το στοιχείο με ID, έτσι κουμπί αναζήτησης ακριβώς λέει, εντάξει, θέλω για τη χαρτογράφηση αυτή τη μεταβλητή σε αυτό το κουμπί. Έτσι, η μεταβλητή αυτή είναι απλώς μια ευκολότερος τρόπος για να αποκτήσετε πρόσβαση σε αυτό το κουμπί. Και λέω, εντάξει, αν κάνω κλικ ότι κουμπί, οπότε αν μπορώ κλικ σε αυτό το στοιχείο, και αυτό το στοιχείο αναφέρεται σε το κουμπί, αν το κλικ, Στη συνέχεια θέλω να καλέσετε μια συνάρτηση. Εδώ είναι ένα από αυτά τα ανώνυμα λειτουργίες μιλούσαμε για. [01:19:03] Απλά καλέστε κάποια λειτουργία. Μέσα σε εκείνο λειτουργία, βασικά κάτι που έχουμε δει πολλά, σε εγρήγορση. Κάνετε κλικ στο κουμπί αναζήτησης. Είναι πρόκειται να έχουν βασικά ένα κουμπί. Μπορείτε να κάνετε κλικ. Μπορείτε να πάρετε αυτό το σήμα. Χ έξω. Έτσι μπράβο. Ναι; [01:19:16] ΚΟΙΝΟ: Έτσι, αν βάλετε το σενάριο [Δεν ακούγεται], το σενάριο ετικέτα στο HTML σας; [01:19:21] Davin: Μπορείτε να βάλετε το σενάριο ευθεία ετικέτα στο κεφάλι γιατί έχετε αυτή την onload. Είναι, επίσης, ότι έχετε ένα κλικ. Έτσι πρόκειται να περιμένει μέχρι κάνετε κλικ για κάτι. Αλλά onload είναι ακριβώς για να είναι ασφαλής, να κάνει βεβαιωθείτε ότι όλα τα φορτία στο HTML σας εκ των προτέρων. Ναι; Θέλετε να πείτε κάτι; [01:19:40] Gabe: [δεν ακούγεται]. Davin: Ναι. [01:19:42] ΚΟΙΝΟ: Έτσι onload αποφεύγει τον ορισμό της μεταβλητής κουμπί αναζήτηση με απλά λέγοντας document.getElementById κουμπί αναζήτησης τελεία [δεν ακούγεται]. [01:19:49] Davin: Σίγουρα, αλλά στη συνέχεια, κορδόνι σας παίρνει μόνο τεράστια. Ακριβώς, έτσι αυτό είναι μόνο για να καταστήσει ευκολότερο για σας, ναι. Ναι; [01:19:56] ΚΟΙΝΟ: Όταν κάναμε δημιουργούν window.onload; Ή document.ready; [01:19:58] Davin: Ναι, υπάρχει. Ναι, είναι, έλεγξα εκεί. [01:20:02] Gabe: Όχι για αυτούς να νοιάζονται για. [01:20:03] Davin: Εντάξει, έτσι Πάω να σας πω έτσι κι αλλιώς. Έτσι, βασικά, μόνο σε γενικές γραμμές, έτσι window.onload περιμένει μέχρι DOM σας, όλα HTML, τα φορτία. Θα περιμένει μέχρι να φορτώσουν οι εικόνες. Θα περιμένει μέχρι φορτία πάντα. document.ready, απλά περιμένει μέχρι φορτία DOM σας. Μόλις η HTML είναι όλα εκεί, άπαξ DOM σας είναι εκεί, αρχίζει να τρέχει. Αυτή είναι η μόνη διαφορά. [01:20:23] Gabe: Γρήγορη λογική δείτε εδώ. Έτσι, αυτό μπορεί να δει το είδος του σαν μια γραμμή κώδικα, έτσι δεν είναι; Επειδή είναι window.onload ισούται με ένα σωρό πράγματα. Όταν JavaScript διαβάζει αυτό, αλήθεια ή ψευδής, η λειτουργία παίρνει εκτελεστεί. Λάθος. Εντάξει; Αυτό που συμβαίνει εδώ, απλά είστε περαστικοί Αυτή η λειτουργία ως ανώνυμο λειτουργίες να window.onload. Και τότε, όταν θα έμπαινε να μπορούν όντως να εκτελεστεί; Όταν τα φορτία παράθυρο. Αυτό είναι ένα γεγονός. Έτσι, αυτό είναι το jus t πράγμα είμαστε μίλησα προηγουμένως, σωστά; Έτσι, όταν η εκδήλωση θα συμβεί, η λειτουργία συμβαίνει. Ίδιο πράγμα με το onclick. [01:20:59] Davin: Εντάξει, έτσι ώστε κάποιος πήρε μακριά η document.ready. Αλλά αυτό θα είναι το ακριβές same-- ΚΟΙΝΟ: Το σύμβολο του δολαρίου, ότι είναι μια document.ready. Αυτή είναι μια συντόμευση. [01:21:07] Davin: Ω, αυτό είναι; Εντάξει, έτσι ώστε αυτό το μέσο document.ready, συντόμευση. Αλλά αυτό είναι το ίδιο όπως window.onload εκτός από το μικρό διαφορά Σας είπα περίπου. Και αυτό είναι το jQuery. Έτσι, αυτό είναι ακριβώς το ίδιο thing-- αυτό είναι JavaScript. Αυτό just-- μερικοί άνθρωποι σκέφτονται αυτό ως ένα πιο ελαφρύ, κομψή εκδοχή ότι έχει πολλές λειτουργίες ότι θα πρέπει πιθανώς να χρησιμοποιείτε. Έτσι, αυτό κάνει ακριβώς το ίδιο πράγμα. [01:21:34] Έτσι τα πράγματα με το είδος του επισημάνω. Έτσι, στο άλλο παράδειγμα, είχε document.getElementById, έτσι είχαμε αυτή τη μακρά συμβολοσειρά που πρόκειται να πάρει το στοιχείο από ό, τι αναγνωριστικό που έχει. Αυτό έχει αντικατασταθεί από την παρούσα πρόσκληση εδώ. Έτσι, μπορείτε να δείτε το σύμβολο του δολαρίου, τότε θα δείτε απόσπασμα, hashtag. Hashtag είναι πάντα μια επιλογή. Λέει, εντάξει, αυτό έχει να κάνει με ένα αναγνωριστικό. Τι είναι ο επιλογέας για μια τάξη; [01:21:56] ΚΟΙΝΟ: Dot. [01:21:57] Davin: Dot, δεξιά. Εάν είστε ακριβώς πρόκειται να επιλέξτε μια ετικέτα, τότε τι είναι; Είναι ακριβώς η ετικέτα, ακριβώς. Και θα μπορούσατε να χρησιμοποιήσετε ότι εδώ, όπως καλά. [01:22:05] Gabe: Και με βάση την ετικέτα, εννοούμε σαν div, για παράδειγμα, ή το κεφάλι. [01:22:08] Davin: Ή σώμα ή ρ ή κάτι τέτοιο, ναι. Μέχρι εδώ, εντάξει, αντί να λέει document.getElementById, Αυτό είναι ακριβώς το ίδιο ακριβώς πράγμα. Ακριβώς σε jQuery, είναι πιο κοντή. Έτσι είναι απλούστερη. Έτσι λοιπόν, όχι περισσότερο onclick, απλά κάντε κλικ στο κουμπί. λειτουργία jQuery, καλέστε αυτή τη λειτουργία. Ειδοποίησης είναι ακριβώς το ίδιο. Γι 'αυτό είναι λίγο μικρότερες, ή λίγο μικρότερη, λίγο bit-- άνθρωποι σκέφτονται είναι λίγο πιο εύκολο να γράψει, λίγο πιο εύκολο να καταλάβει. Αλλά αυτό είναι το jQuery. Πολλοί άνθρωποι παίρνουν μια μικρή λίγο σύγχυση και ανήσυχος και νομίζουν ότι, εντάξει, jQuery είναι διαφορετική από ό, τι το JavaScript. Θα πρέπει να θυμόμαστε αυτά δύο διαφορετικά πράγματα. Δεν είναι. Θέλω να πω, είναι διαφορετική σύνταξη. Αλλά jQuery είναι JavaScript. Είναι απλά μια φαινομενικά καλύτερη έκδοση που θα μπορούσε να είναι πιο εύκολο να καταλαβαίνω ότι οι άνθρωποι χρησιμοποιούν. Gabe: Ναι, να είναι ειλικρινής, ότι το σύμβολο του δολαρίου ότι βλέπετε στην jQuery, αυτό είναι μόνο η όνομα της συνάρτησης που ορίζει jQuery. Δεν έχει κάτι το ιδιαίτερο. Είναι ότι είναι ακριβώς το όνομα της συνάρτησης, Ακριβώς όπως και εσείς θα μπορούσε να καθορίσει το σύμβολο του δολαρίου. [01:23:03] Davin: Ναι, έτσι μιλήσει για αυτό. Μερικά χρήσιμα πράγματα. Έψαχνα πίσω στα παλιά κουίζ. Στα τελευταία δύο κουίζ, έχουν έπρεπε να χρησιμοποιήσει τα πράγματα όπως αυτό. Έτσι document.ready, έτσι βεβαιωθείτε ότι όλα είναι φορτωμένο πριν ξεκινήσετε να κάνετε πράγματα. Επιλέξτε ένα αναγνωριστικό, ή επιλέξτε μια κατηγορία, θα έπαιρνα μόνο είναι απόσπασμα dot κάποια κατηγορία, τέλος παραθέτω. Υποβολή, οπότε αν είστε υποβάλει μια φόρμα και κλήση Αυτή η λειτουργία μετά τη μορφή υποβάλλει. Αξία, οπότε ας πούμε ότι είχα μια μορφή υποβολή, όπως ένα όνομα χρήστη, ένα μήνυμα ηλεκτρονικού ταχυδρομείου, οτιδήποτε. Είχα ένα πλαίσιο κειμένου. Έτσι γράφω σε αυτό το πλαίσιο κειμένου. Λοιπόν, αν θέλετε να πάρετε την τιμή έξω από αυτό το πλαίσιο κειμένου, μπορείτε να χρησιμοποιήσετε dot val. Και τότε, εδώ κάτω, dot HTML είναι η ίδια είναι σαν κουκίδα έγγραφο getElementByID dot innerHTML. Έτσι, αυτό πρόκειται να επιστρέψει Σας το HTML από αυτό το αναγνωριστικό. Εδώ, μπορείτε να χρησιμοποιήσετε μόνο μερικά Ταυτότητα ή όποια και αν είναι τελεία HTML. Αυτό θα πάρει το HTML από αυτό το στοιχείο. Αν ήθελε να αλλάξει στη συνέχεια ότι HTML, μπορείτε να το περάσει κάτι. Έτσι, θα ήθελα να είναι σαν κουκίδα HTML, και στη συνέχεια, στο εσωτερικό, εισαγωγικά, νέα HTML ή κάτι τέτοιο. [01:24:05] Gabe: Εντάξει, έτσι AJAX. Μου αρέσει πολύ να κατανοήσουν AJAX πραγματικά καλά. Έτσι σας θέλω τα παιδιά να καταλαβαίνω AJAX πραγματικά καλά. Διότι αν το κάνετε, είστε λίγο πολύ θα να κατανοεί ο, τιδήποτε έχει να κάνει με το HTTP, PHP, JavaScript διότι όλα έρχεται μαζί σε AJAX. AJAX δεν είναι μια γλώσσα. AJAX είναι μια τεχνική. Και χρησιμοποιεί πολλά διαφορετικά εργαλεία. AJAX σημαίνει ασύγχρονη XML JavaScript. Έτσι, η μέθοδος, η γλώσσα, τα στοιχεία. [01:24:36] Έτσι, η κύρια γλώσσα που χρησιμοποιούμε σε AJAX για να προκαλέσει τα πάντα και να χειριστεί τα πάντα αργότερα είναι JavaScript. Γι 'αυτό σχετίζεται πολύ κοντά στο JavaScript. Και τότε είναι ασύγχρονη γιατί εμείς δεν το κάνουμε όλα με τη μία όταν είμαστε φόρτωση της σελίδας. Αυτό είναι το πράγμα που μπορούμε να κάνει τα πράγματα είδος του παράλληλα. Η κύρια ιδέα πίσω AJAX είναι ότι θέλετε να πάρετε κάποιες συγκεκριμένες πληροφορίες. Για παράδειγμα, όταν πληκτρολογείτε νέα όνομα χρήστη κατά την εγγραφή σας ένα όνομα χρήστη, όνομα χρήστη μου είναι abc123. Και έπειτα, στο τέλος της μορφή, πρέπει να κάνετε κλικ στο Υποβολή. Και έπρεπε να πάει στο διακομιστή, και, στη συνέχεια, ελέγξτε αν στη βάση δεδομένων, abc123 είναι ήδη εκεί. Και αν είναι ήδη εκεί, λέει, όνομα χρήστη ήδη στη βάση δεδομένων. Και αυτοί, θα πρέπει να συμπληρώσετε ολόκληρη τη φόρμα ξανά. Και ήταν πραγματικά, πραγματικά κακός. [01:25:23] Και τότε οι άνθρωποι λένε, Εντάξει, γιατί δεν μπορούμε απλά να κάνει ένα μικρό αίτημα HTTP για να ελέγξετε μόνο για να δούμε αν αυτός ο χρήστης είναι στη βάση δεδομένων πριν ο χρήστης έπρεπε να υποβάλουν ολόκληρη τη φόρμα; Έτσι, για παράδειγμα, όταν η χρήστης τελειώσει την πληκτρολόγηση abc123, ας πάμε στο διακομιστή λίγο bit και μόλις πάρει μια αληθινή ή ψεύτικη από τον server για να δούμε αν αυτό είναι ένα έγκυρο όνομα χρήστη ή όχι. Εντάξει, έτσι ώστε να είναι ένα από τα κύρια χρήσεις του AJAX σήμερα ακόμη. [01:25:49] Davin: So Real γρήγορη, σε μια κλήση Αίας jQuery, θα μπορούσε να σημαίνει ότι θα θέλουν να είναι σύγχρονη. Δεν πρέπει να το κάνετε αυτό. Αλλά μπορείτε να το κάνετε αυτό. Και αν το έκανες αυτό, τι θα συμβεί; Λοιπόν, για παράδειγμα, όταν είστε να πάρει ειδήσεις ή οτιδήποτε άλλο, Ο φυλλομετρητής σας πρόκειται ακριβώς να περιμένω μέχρι που ολόκληρη η κλήση είναι πλήρης αντί να αφήσει να κάνετε άλλες τα πράγματα αμέσως μετά κάνετε κλικ. [01:26:14] Gabe: Δεν περνώντας πια. Θεέ μου. Συγγνώμη! Yup. "Στο παρελθόν, η πελάτη που απαιτούνται για την αίτηση Το σύνολο του περιεχομένου του δικτυακού τόπου. " Αυτό είναι ό, τι είπα. Μας επιτρέπει να στείλετε επιπλέον GET ή POST αιτήσεις χωρίς να χρειάζεται να φορτώσετε εκ νέου το πρόγραμμα περιήγησης μας. Έτσι, στο τέλος της ημέρας, είμαστε πράγματι ένας αιτήσεις HTTP εδώ με τη χρήση JavaScript. Επειδή πριν, χρησιμοποιήσαμε μόνο το JavaScript για να αλλάξετε τον κώδικα HTML που ήδη ήρθε. Και τώρα, μπορούμε να το χρησιμοποιήσουμε για τη διασύνδεση με το web servers, καθώς και. Ο τρόπος με τον αυτό συμβαίνει είναι ότι έχουμε τον πελάτη. Davin είναι πελάτης. Και αυτός έχει όλα τα JavaScript τρέχει επειδή HTML είναι χαζός. JavaScript είναι έξυπνος. Έτσι Davin Davin έχει έξυπνες του μέρος και χαζή μέρος του. Αυτός πρόκειται να χρησιμοποιήσετε την έξυπνη μέρος του τώρα. Αυτός πρόκειται να χρησιμοποιήσει το JavaScript να ζητήσει, για παράδειγμα, αν abc123 είναι σε η βάση δεδομένων ή όχι. [01:27:04] Έτσι Davin, παρακαλώ, απλά στείλτε μου ένα αίτημα HTTP. Σας ευχαριστώ. Έτσι ακριβώς έστειλε ένα αίτημα HTTP. Βλέπεις αυτό; Και αυτό είναι ακριβώς με τον ίδιο τρόπο ότι κάθε αίτηση HTTP αποστέλλεται. Το πρόγραμμα περιήγησης, το Google Chrome ή κάτι, είναι Θα δείτε ότι Davin του προσπαθώντας να στείλετε ένα αίτημα HTTP, πρόκειται να βοηθήσει hm λίγο. Και αυτό πρόκειται να πάει όλη τη διαδρομή προς το διακομιστή. Τώρα, ο διακομιστής θα έχει Εδώ PHP, ή οποιαδήποτε άλλη γλώσσα. Ακριβώς όπως σε μια κανονική αίτηση HTTP. Είναι λίγο πολύ μια κανονική αίτηση HTTP. [01:27:31] Και στη συνέχεια, ο διακομιστής πρόκειται να πω, εντάξει, Davin μου θέλει να ελέγξει κατά πόσον αυτό abc123 είναι στη βάση δεδομένων. Να μιλήσετε με το μοντέλο. Το μοντέλο λέει ότι δεν είναι. abc123 είναι ένα καλό όνομα χρήστη. Και τότε, ο web server θα χρησιμοποιήσετε το PHP για να καταστήσει κάποια μορφή αρχείου. Θα μπορούσε να είναι κυριολεκτικά ένα αρχείο ότι περιέχει «ναι» σε αυτό, ή ένα "όχι, ή κάτι τέτοιο. Θα μπορούσε να είναι οποιοδήποτε αρχείο. [01:27:54] Θα μπορούσε να είναι σαν να είμαι πρόκειται να στείλετε Davin μια εικόνα του μια πάπια αν είναι στη βάση δεδομένων και στείλετε μια εικόνα ενός χάμστερ αν δεν είναι στη βάση δεδομένων. Αυτό θα είναι το είδος του χαζή, αλλά αυτό θα λειτουργήσει. Εντάξει, έτσι μπορώ να στείλω μια πάπια να Davin. Davin πήρε μια πάπια. Και τώρα, ποιος θα να χειριστεί την πάπια; Έξυπνο μέρος Davin και πάλι, έτσι το JavaScript, σωστά; JavaScript έστειλε η αίτημα, και JavaScript πρόκειται να λάβει το αίτημα και να ερμηνεύσει σε κάποια μορφή. [01:28:22] Και με αυτή την έννοια, πρόκειται να να πω, εντάξει, αν πάπια τότε είμαι καλός. Αν χάμστερ, τότε θα πάω να πω, όχι, το όνομα χρήστη που ήδη υπάρχει στη βάση δεδομένων. Αλλά συνήθως, δεν είστε πρόκειται να στείλει μια πάπια. Θα πάμε για να στείλετε κάτι λίγο πιο έξυπνοι. Και αυτό που χρησιμοποιούμε είναι το XML. Και πιο πρόσφατα, χρησιμοποιούμε JSON. JSON είναι ακριβώς το JavaScript Αντικείμενο σημειογραφία, η οποία είναι βασικά μπορείτε να πάρετε μια ολόκληρο το αντικείμενο JavaScript. Και μπορείτε να το βάλετε σε ένα αρχείο, όπως ακριβώς ότι αντικείμενο CS50 που εσείς είδατε. Μπορείτε να το βάλετε σε ένα αρχείο, και μπορείτε να το στείλετε πάνω σε Davin. [01:28:53] Έτσι, στην περίπτωση αυτή, θα ήθελα κάνει ένα αντικείμενο το JavaScript και απλώς να πω, υπάρχει χρήστη, ναι. Ή υπάρχει χρήστη, όχι. Και να το στείλετε πίσω σε αυτόν. Και γιατί το JSON; Επειδή το πρόσωπο ποιος λαμβάνει αυτό είναι πρόκειται να χρησιμοποιήσει το JavaScript να χειριστεί την ανταπόκριση. Και το JavaScript λειτουργεί τόσο καλά, επειδή λέγεται το JavaScript Object Notation. Σωστά; Έτσι, μπορεί απλά να καλέσετε μια συνάρτηση και να πάρει αυτό το ωραίο αντικείμενο από την απάντηση. Και στη συνέχεια, ότι πρόκειται να ξέρω αν ότι ο χρήστης είναι στη βάση δεδομένων ή όχι. [01:29:22] Έτσι βλέπετε, όλα αυτά έρχονται μαζί στο web server, και, στη συνέχεια, υπάρχει ένα HTTP στο αίτημα και μία απάντηση HTTP και τα πάντα. Έτσι, βεβαιωθείτε ότι σας παιδιά κατανοήσουμε αυτή την κλήση AJAX επειδή σας βοηθά να κατανοήσετε όλα των εννοιών μιλάμε. [01:29:37] Έτσι, εδώ είναι ένα παράδειγμα του AJAX με jQuery. Και εδώ, το κάνουμε με έρθετε JSON. Γι 'αυτό και δεν προσπαθείτε να πάρετε μια εικόνα του μια γάτα εδώ, ή μια πάπια. Προσπαθούμε να πάρετε ένα αρχείο JSON. Και τότε θα περιμένουμε μέχρι έχει κάνει, τελεία γίνει. Αυτό σημαίνει ότι είμαι σε αναμονή για την απάντηση. Μπορεί να πάρει λίγο χρόνο. Στη συνέχεια, θα δείτε μια μικρή φόρτωσης. Αν θέλετε να το κάνετε αυτό στην ιστοσελίδα σας. Έτσι dot γίνει, και, στη συνέχεια, τι συμβαίνει όταν το κάνει; Περνάτε σε ένα ανώνυμο λειτουργία, όπως ακριβώς είδαμε πριν. Επειδή γίνεται είναι ένα γεγονός, απλά όπως το πάτημα ενός ποντικιού ή οτιδήποτε άλλο, για jQuery. Έτσι θα περάσει σε αυτή τη λειτουργία με δεδομένων, κειμένου, την κατάσταση και jqXHR. Και βασικά, αυτό είναι μόλις μερικές μεταβλητές ότι μπορείτε να χρησιμοποιήσετε αργότερα για να έχουν η κατάσταση του αιτήματος HTTP, τα δεδομένα που πρόκειται να στείλετε πίσω σε σας. Έτσι, θα μπορεί αργότερα να ερμηνεύσει και να κάνουμε κάτι σημαντικό με αυτό. Και αν αυτό αποτύχει, όταν θα μπορούσε να αποτύχει; Λοιπόν, όταν η αίτηση HTTP δίνει Είσαι ένα 500 ή κάτι τέτοιο. Στη συνέχεια, πρόκειται να σας πω το κατάσταση, το είδος της αποτυχίας που ήταν, και όλα τα είδη των πραγμάτων. Θα πρέπει να βεβαιωθείτε να χειριστεί και τις δύο περιπτώσεις, Αλλιώς το πρόγραμμα πηγαίνει τρελό. [01:30:42] Davin: Οπότε ναι, αυτό είναι ακριβώς τι είδατε την τελευταία π-set σας. Η πραγματική κλήση AJAX είναι σε πάρει JSON. Αυτή είναι η κλήση. Και τότε, τελεία γίνει είναι σαν ελέγχει αν είναι επιτυχής. Αν είναι επιτυχής, θέλετε να κάνει κάτι με τα δεδομένα. Μπορείτε να πάρετε πίσω από ότι JSON δεδομένα αιτήματος. Αυτό είναι αυτό που παίρνετε πίσω. Έτσι, αν θυμάστε από την π-set σας, πολλοί από σας ήταν σαν στήριγμα δεδομένων i ή οτιδήποτε άλλο, σύνδεση τελεία ή τον τίτλο. Ό, τι έρχεται πίσω από την εν λόγω JSON, ανεξαρτήτως τα πεδία είναι σε αυτό το αντικείμενο JSON, αυτό είναι αυτό που παίρνετε πίσω. Τα δεδομένα είναι αυτό που παίρνετε πίσω. Κατάσταση κειμένου, απλά κάτι που σας επιτρέπει να γνωρίζετε τι συνέβη. Και τότε, η jqXHR, αυτό είναι μόνο η jQuery αίτημα XML HTTP. Αυτό είναι ακριβώς όπως ένα αντικείμενο. Και στη συνέχεια να αποτύχει, όπως ακριβώς είπε ο Gabe. Gabe: Σε λίγο μας παράδειγμα abc123 ακριβώς για να ελέγξει αν αυτό είναι στη βάση δεδομένων ή όχι, τα δεδομένα θα είναι κάτι που θα θα κάνει, αν υπάρχει τελεία δεδομένων όνομα χρήστη, Ποιο είναι αυτό που σας PHP δημιουργήθηκε για σας, αν υπάρχει όνομα χρήστη dot δεδομένα, τότε Πάω να ειδοποιεί τον χρήστη το όνομα υπάρχει ήδη. Αλλιώς, είμαι απλώς πρόκειται να αφήσει το χρήστης να προχωρήσει τη συμπλήρωση του εντύπου. Εντάξει, ασφάλεια, δροσερό. [01:31:50] Davin: Θέλετε να μου; [01:31:52] Gabe: Μου αρέσει αυτό το ένα. Έτσι, κάτι που φαίνεται οικείο. Είμαστε σχεδόν τελειώσει. Έτσι, αυτό είναι ακριβώς το παράδειγμα εσείς είδαμε στην τάξη. Θα χρησιμοποιούσατε argv1 εδώ. Αυτό είναι σαν ένα επιχείρημα της γραμμής εντολών. Και είμαστε ΜΕΜ αντιγραφής που σε ένα ρυθμιστικό διάλυμα του μεγέθους 12. Ποιο είναι το πρόβλημα εδώ; Υπερχείλιση! Επειδή έχουμε ένα buffer μεγέθους 12. argv1 μπορεί να έχουν μέγεθος από δύο δισεκατομμύρια. Εμείς δεν κάνουμε κανένα όριο ελέγχου. Έτσι, μπορούμε να αντιγράψετε πολλή μνήμη. Και θα είναι ιδιαίτερα άσχημα γι 'αυτό. Τι θα μπορούσαμε να το κάνουμε αυτό είναι πολύ, πολύ σημαίνει σε αυτή την περίπτωση; Ναι; ΚΟΙΝΟ: Μέρος των δύο δισεκατομμυρίων πράγματα περιέχει εκτελέσιμο κώδικα που επιστρέφει [Δεν ακούγεται]. Gabe: Ακριβώς. Έτσι, αυτό είναι το είδος του πράγμα που οι άνθρωποι χρησιμοποιούν να jailbreak iPhone, για παράδειγμα. Έτσι, αυτό το είδος του πράγματος. Επειδή μπορείτε να κάνετε απλά τη συσκευή εκτελέσει οποιοδήποτε κώδικα που σας αρέσει. Η ενημέρωση κώδικα, έτσι ώστε η λύση είναι εύκολη. Ακριβώς ελέγξτε για τα όρια. Μπορείτε να ελέγξετε για μηδενική επειδή μπορούμε πάντα να ελέγχετε για μηδενική όταν έχουμε να κάνουμε με χορδές. Και τότε, θα λάβει η μήκος συμβολοσειράς πριν. Και αν το κορδόνι μήκος είναι μια έγκυρη συμβολοσειρά μήκος, το οποίο είναι εντός 0 και 12, τότε είμαστε καλοί. [01:33:03] Davin: Αν δεν έχετε ελέγξει για null, πραγματικά γρήγορα, τι θα συμβεί; Θα SEG σφάλμα. Γιατί θα SEG σφάλμα; Επειδή είστε καλώντας strlen για μηδενική. Gabe: Ναι. Σωστό ή λάθος, χρησιμοποιώντας ένα κωδικός πρόσβασης είναι μια καλή ιδέα. [01:33:19] ΚΟΙΝΟ: Λάθος. [01:33:20] Gabe: Λάθος. Χρησιμοποιήστε πολλούς κωδικούς πρόσβασης, καθώς και μεγάλα, τα μεγάλα. Εικονίδια Λουκέτο την εξασφάλιση της ασφάλειας. [01:33:26] ΚΟΙΝΟ: Λάθος. [01:33:27] Gabe: Λάθος. Αυτό δεν σημαίνει τίποτα. Είναι απλά ένα εικονίδιο. SSL προστατεύει από μια άνθρωπος στη μέση επίθεση. ΚΟΙΝΟ: Λάθος. Gabe: Λάθος. Εντάξει, έτσι ώστε όλα αυτά είναι ψευδή. Νίκαιας. [Δεν ακούγεται] Θέλετε να μιλήσουμε γι 'αυτό; Η σειρά σου. Davin: Είδη επιθέσεων, άνθρωπος στη μέση. Τι είναι ένας άνθρωπος στη μέση επίθεση; ΚΟΙΝΟ: [δεν ακούγεται]. Davin: Αν στείλετε ένα HTTP αίτημα, θα μπορούσαν να κάνουν αυτό, σωστά; Αλλά αν είστε αποστολή HTTPS, που κατά πάσα πιθανότητα δεν θα είναι σε θέση να το κάνουμε αυτό. Υπάρχουν πολλά σημεία κατά μήκος της σύνδεσης σας. Έχετε δρομολογητές. Έχετε διακομιστές DNS. Αν κάποιος είναι σε θέση να σωματικά δείτε τι αποστολής, έτσι κάποιος είναι σε θέση να πραγματικά να πάρει μεταξύ σας, ο πελάτης και ο διακομιστής, και είναι είναι σε θέση να δείτε τι αποστολής, Αυτό είναι ένας άνθρωπος στη μέση επίθεση. Έτσι για να δούμε τι προσπαθείτε να πάρετε από ο server, ή είναι σε θέση να see-- χειρότερα, να είστε σε θέση να δείτε μπισκότα ή κάτι τέτοιο. [01:34:16] Έτσι, για παράδειγμα, εάν δεν είστε χρησιμοποιώντας το SSL, ο ίδιος να είναι σε θέση να δείτε συνεδρία cookies ID σας. Και αυτό ονομάζεται αεροπειρατεία συνόδου γιατί βλέπει τα cookies ID σας, και τότε είναι σε θέση να πάει στο ότι ιστοσελίδα και να υποκρινόμαστε να σας είναι. Διότι όπως ακριβώς σε PHP, να θυμάστε όταν είμαστε συνδεδεμένοι, τι κάνουμε; Θέτουμε αναγνωριστικό περιόδου ίσο με ταυτότητα. Έτσι ώστε να προσδιορίζει. Αυτός είναι ο λόγος για τον οποίο μπορείτε να δείτε το χαρτοφυλάκιό σας και το χαρτοφυλάκιο δεν παρουσιάζονται σε όλους άλλου. [01:34:38] Λοιπόν, αν είμαι σε θέση να πάρετε αυτό το cookie, τότε μπορώ να συνδεθώ σε αυτή τη σελίδα. Και τότε, μπορώ να δω μόνο τα πράγματά σας και αρχίσουν να αγοράζουν και να πωλούν τα πράγματα. Έτσι, αυτό είναι αεροπειρατεία συνόδου. Αλλά δεν θα πρέπει να είναι σε θέση to--, έτσι ώστε να μπορεί να χρησιμοποιήσει ο άνθρωπος στη μέση επίθεση ακόμη και αν χρησιμοποιείτε SSL. Αλλά δεν θα πρέπει να είναι σε θέση να. Αν χρησιμοποιείτε το SSL, δεν μπορείτε αεροπειρατείας συνεδρία. Γιατί; Επειδή είναι όλα κρυπτογραφημένα, έτσι δεν είναι; αν είναι κρυπτογραφημένα, και είμαι ακόμα ένας άνθρωπος στην μέση, έχω ακόμα να πάρετε τα δεδομένα σας. Αυτό είναι μια χαρά. Αλλά είναι κρυπτογραφημένα. Γι 'αυτό και δεν μπορεί να το χρησιμοποιήσει πραγματικά. Έτσι, αυτό είναι δύο. [01:35:09] Ρεάλ γρήγορη, cross-site αίτημα πλαστογραφία. Αυτό είναι μόνο αν υπάρχει ένας σύνδεσμος και ο σύνδεσμος κάνει κάτι ότι δεν νομίζετε ότι πρέπει να κάνει. Έτσι, για παράδειγμα, εάν η σύνδεση ήταν πρόκειται να αγοράσουν μετοχές ή να πουλήσει τα αποθέματα, και δεν ξέρατε ότι. Μπορείτε κλικ στο σύνδεσμο, απέστειλε αίτημα, αγόρασε ή πωλείται κάτι που που δεν θέλατε να κάνετε. Αυτό είναι αυτό. [01:35:25] Cross Site Scripting για, έτσι και εδώ, είστε περνώντας μέσω μεταβλητή q, αντί να περάσει σε κάποιο είδος της αξίας, ίσως το q είναι σαν ένα όνομα. Έτσι, αντί να περάσει ίσων q Davin ή κάτι τέτοιο, Εάν δεν θέλετε να χρησιμοποιήσετε HTML ειδικούς χαρακτήρες, αν δεν μπορούν να αποφύγουν αυτό για να βεβαιωθείτε ότι είναι Εντάξει, τότε θα μπορούσε να περάσει σε αντ 'αυτού, ας πούμε εδώ λέω εκτύπωσης ή κάτι τέτοιο, τότε θα μπορούσε να περάσει εδώ μια κλήση σενάριο. [01:35:51] Έτσι λοιπόν, αντί του απλά να πάρει μια μεταβλητή, Στη συνέχεια θα ήθελα να εκτελέσει αυτό το σενάριο κλήση. Έτσι, μέσα σε αυτό το σενάριο καλέσετε, τι κάνει; Τοποθεσία dot έγγραφο, που πρόκειται να να αλλάξει τη θέση του εγγράφου. Έτσι, Πάω να ανακατευθύνει κάπου αλλού. Αυτό λέγεται κακός σε αυτό το παράδειγμα, πολύ καλή. Δεν μπορούσα να σκεφτώ τη λέξη. Και τότε, τι είναι ακόμη χειρότερο είναι ότι θα πάω τότε που μπισκότο, το οποίο είναι μερικά μεταβλητή που έχω σε αυτή την ιστοσελίδα. Πάω να ορίσετε ίση στο μπισκότο dot έγγραφο. Ως εκ τούτου, θα πάω για να κλέψουν τα cookies. Και Πάω να ανακατευθύνει κάποιες πληροφορίες σε μια ιστοσελίδα ότι δεν πρέπει να έχουν πρόσβαση. Και όλα αυτά συμβαίνουν επειδή είστε Δεν διαφεύγει αυτό που έχετε δει. Ναι; [01:36:29] ΚΟΙΝΟ: Έτσι απλά για να καταστήσει σαφές, είναι vulnerable.com ότι είναι ευάλωτες σε αυτό. Έτσι, μπορεί να εμφανιστεί ο σύνδεσμος σε οποιαδήποτε δεδομένη σελίδα. Κάποιος κάνει κλικ σε αυτό, πηγαίνει στο vulnerable.com. Έχετε ένα cookie στον vulnerable.com. Ας πούμε ότι το Facebook είναι ευάλωτα, έτσι facebook.com. Έχετε στο Facebook μπισκότο σας. Αυτό που κάνει, είστε πρόκειται να facebook.com, αυτό είναι άμεσα αναπροσανατολισμό μπορείτε να badguy.com, αλλά συμπεριλαμβανομένων των πληροφοριών από τα cookies σας. Γι 'αυτό είναι μια γρήγορη ανακατεύθυνση, αλλά το Facebook μπισκότο σας συμπεριλαμβάνεται με αυτή την ανακατεύθυνση, και αυτό είναι το πώς αυτοί [δεν ακούγεται]. Gabe: Ναι, υπάρχει μερικά πολύ μέση πράγματα ότι οι άνθρωποι μπορούν να κάνουν αν υπάρχει αυτό. Για παράδειγμα, εάν το Facebook επιτρέπονται όλοι να αλλάξετε το όνομα χρήστη σας, και δεν έκαναν οποιαδήποτε έλεγχοι λογική, έτσι ώστε να θα μπορούσε να εισαχθεί ένα πράγμα JavaScript που αλλάζει την εικόνα σας σε ένα χάμστερ. Και αυτό εισάγει το ίδιο το JavaScript σε όλους όσους τις απόψεις σας σελίδα. Έτσι, όλοι όσοι τις απόψεις σας σελίδα έχει το ίδιο πράγμα το όνομα χρήστη. Και επειδή είναι ένας ιός, εξαπλώνεται με γεωμετρική πρόοδο. Davin: Θα παραλείψετε το τελευταίο ένα, και στη συνέχεια να τελειώσουμε. Έτσι, αυτό είναι απλώς άλλο ένα παράδειγμα. Έτσι, αυτό είναι ότι δεν είναι διαφυγή πίνακα του SQL τους. Έτσι, μπορείτε να το ρίξετε. Έτσι θέλετε να ξεφύγουν τα πράγματα. Ότι ήταν το προηγούμενο παράδειγμα με το σταυρό Scripting ιστοσελίδα. Συγγνώμη τρέξαμε λίγο αργά. Αύριο, συγνώμη! Αύριο, έχουμε ώρες γραφείου. Έτσι, ώρες γραφείου στο Cabbot 8:00-11:00. Οι ώρες γραφείου είναι αυστηρά για ερωτήσεις κουίζ.