1 00:00:00,000 --> 00:00:12,610 2 00:00:12,610 --> 00:00:12,900 >> DAVID J. MALAN: Εντάξει. 3 00:00:12,900 --> 00:00:16,790 Έτσι, καλωσορίζουμε το πρώτο στην ιστορία CS50 μεταθανάτια για ένα κουίζ. 4 00:00:16,790 --> 00:00:18,340 Σκεφτήκαμε ότι θα εγκαινιάσει αυτή η παράδοση του τρέχοντος έτους. 5 00:00:18,340 --> 00:00:20,960 Και αυτό θα είναι μια ευκαιρία να περπατήσει μέσα από το 6 00:00:20,960 --> 00:00:22,220 λύσεις για το κουίζ. 7 00:00:22,220 --> 00:00:26,160 Και θα επιταχύνει ή να επιβραδύνει με βάση επί των τόκων αυτών εδώ. 8 00:00:26,160 --> 00:00:29,730 >> Έτσι, είστε πιθανώς εδώ επειδή είστε ενδιαφέρονται για το πώς θα μπορούσατε να έχετε ή 9 00:00:29,730 --> 00:00:31,170 θα έπρεπε να απαντήσει σε ορισμένες από αυτά τα προβλήματα. 10 00:00:31,170 --> 00:00:33,300 Έτσι, γιατί δεν ρίχνουμε μια ματιά σε αυτό το τμήμα πρώτα; 11 00:00:33,300 --> 00:00:34,450 Έτσι, να πάρει χορδές. 12 00:00:34,450 --> 00:00:37,600 Αυτό σας έδωσε τρεις διαφορετικές εκδόσεις ενός προγράμματος που ήταν, τελικά, 13 00:00:37,600 --> 00:00:39,650 σήμαινε να πάρει μια σειρά από ένα χρήστη. 14 00:00:39,650 --> 00:00:42,530 Και αν δεν έκανε ότι ήταν αριστερά για να μπορείτε να προσδιορίσετε. 15 00:00:42,530 --> 00:00:45,150 >> Και ζητήσαμε Ερώτηση 0, ας υποθέσουμε ότι η έκδοση 1 είναι 16 00:00:45,150 --> 00:00:46,400 καταρτίζονται και εκτελούνται. 17 00:00:46,400 --> 00:00:48,860 Γιατί μπορεί segfault το πρόγραμμα; 18 00:00:48,860 --> 00:00:51,150 Με την πρώτη ματιά, οποιεσδήποτε προτάσεις ως προς το γιατί; 19 00:00:51,150 --> 00:00:54,012 20 00:00:54,012 --> 00:00:54,489 Ναι. 21 00:00:54,489 --> 00:00:59,260 >> ΚΟΙΝΟ: Έτσι Θυμάμαι που έβλεπα αυτό ένα προηγούμενο παράδειγμα κοιτάζοντας το 22 00:00:59,260 --> 00:01:05,506 char * s και βλέποντας τη σάρωση των s και βλέποντας επειδή είναι ένας δείκτης, πώς 23 00:01:05,506 --> 00:01:07,971 δεν επηρεάζει αυτό που σαρώνονται; 24 00:01:07,971 --> 00:01:10,940 Είναι s ή η διεύθυνση του s; 25 00:01:10,940 --> 00:01:11,180 >> DAVID J. MALAN: OK. 26 00:01:11,180 --> 00:01:11,480 Καλή. 27 00:01:11,480 --> 00:01:14,830 Έτσι, τελικά, η πηγή κάθε πρόβλημα είναι προφανώς πρόκειται να μειώσει 28 00:01:14,830 --> 00:01:16,210 σε αυτή τη μεταβλητή s. 29 00:01:16,210 --> 00:01:17,280 Και είναι πράγματι μια μεταβλητή. 30 00:01:17,280 --> 00:01:19,900 Ο τύπος δεδομένων της μεταβλητής είναι char *, πράγμα που σημαίνει ότι πρόκειται να 31 00:01:19,900 --> 00:01:22,570 περιέχει τη διεύθυνση ενός χαρακτήρα. 32 00:01:22,570 --> 00:01:23,850 Και εκεί βρίσκεται η εικόνα. 33 00:01:23,850 --> 00:01:28,330 Είναι πρόκειται να περιέχει τη διεύθυνση του ένα χαρακτήρα ή, γενικότερα, η 34 00:01:28,330 --> 00:01:32,110 διεύθυνση του πρώτου χαρακτήρα ένα ολόκληρο οικοδομικό τετράγωνο χαρακτήρων. 35 00:01:32,110 --> 00:01:36,680 >> Όμως, τα αλιεύματα είναι ότι s σάρωσης, σκοπό ζωή, έχει δοθεί μια διεύθυνση και δεδομένου 36 00:01:36,680 --> 00:01:40,960 κωδικός μορφή, όπως% s, διαβάστε μια σειρά στο κομμάτι της 37 00:01:40,960 --> 00:01:42,330 μνήμη σε αυτή τη διεύθυνση. 38 00:01:42,330 --> 00:01:46,040 Αλλά επειδή δεν υπάρχει ίσον πριν ότι ερωτηματικό σχετικά με την πρώτη 39 00:01:46,040 --> 00:01:49,310 γραμμή κώδικα, γιατί δεν το κάνουμε πραγματικότητα χορηγεί κανένα μνήμης με 40 00:01:49,310 --> 00:01:53,020 malloc, γιατί στην πραγματικότητα δεν διαθέσει μια σειρά από κάποιο μέγεθος, όλα 41 00:01:53,020 --> 00:01:57,620 κάνετε διαβάζει το χρήστη πληκτρολόγιο εισόδου σε κάποιο ολοκληρωμένο 42 00:01:57,620 --> 00:02:00,490 αξία σκουπιδιών, η οποία είναι s από προεπιλογή. 43 00:02:00,490 --> 00:02:04,480 Έτσι πιθανότητες είναι εσείς πρόκειται να segfault αν ότι η διεύθυνση δεν είναι μόνο έτσι να συμβεί 44 00:02:04,480 --> 00:02:08,009 να είναι μια τιμή που μπορείτε, Στην πραγματικότητα, γράψτε. 45 00:02:08,009 --> 00:02:10,889 Τόσο κακό να μην διαθέσει μνήμη σας εκεί. 46 00:02:10,889 --> 00:02:13,150 >> Έτσι, στο ερώτημα 1, ζητήσαμε, ας υποθέσουμε ότι η έκδοση 2 είναι 47 00:02:13,150 --> 00:02:14,230 καταρτίζονται και εκτελούνται. 48 00:02:14,230 --> 00:02:15,900 Γιατί μπορεί να segfault αυτό το πρόγραμμα; 49 00:02:15,900 --> 00:02:17,990 Έτσι, αυτό είναι λιγότερο λάθη. 50 00:02:17,990 --> 00:02:21,470 Και υπάρχει πραγματικά μόνο ένας προφανής τρόπος όπου μπορείτε να 51 00:02:21,470 --> 00:02:22,810 το έναυσμα για μια segfault εδώ. 52 00:02:22,810 --> 00:02:23,730 Και αυτό είναι θεματικό. 53 00:02:23,730 --> 00:02:28,180 Κάθε φορά που χρησιμοποιούμε c στη μνήμη, ό, τι θα μπορούσατε να κάνετε για να προκαλέσει μια segfault 54 00:02:28,180 --> 00:02:30,718 με την έκδοση 2; 55 00:02:30,718 --> 00:02:35,560 >> ΚΟΙΝΟ: Εάν χρησιμοποιήσετε αυτή την είσοδο στην μια σειρά που είναι περισσότερο από 49 56 00:02:35,560 --> 00:02:35,975 χαρακτήρων. 57 00:02:35,975 --> 00:02:37,260 >> DAVID J. MALAN: Ακριβώς. 58 00:02:37,260 --> 00:02:41,420 Κάθε φορά που βλέπετε κάτι σταθερό μήκος όταν πρόκειται για έναν πίνακα, σας 59 00:02:41,420 --> 00:02:44,650 ραντάρ πρέπει να πάει μακριά ότι αυτό θα μπορούσε να είναι προβληματική, αν δεν είστε τον έλεγχο της 60 00:02:44,650 --> 00:02:45,810 όρια μιας συστοιχίας. 61 00:02:45,810 --> 00:02:46,650 Και αυτό είναι το πρόβλημα εδώ. 62 00:02:46,650 --> 00:02:47,910 Είμαστε εξακολουθούν να χρησιμοποιούν scanf. 63 00:02:47,910 --> 00:02:52,200 Είμαστε ακόμα χρησιμοποιώντας% s, το οποίο σημαίνει να προσπαθήσουμε να διαβάσει ένα κορδόνι από το χρήστη. 64 00:02:52,200 --> 00:02:56,300 Αυτό πρόκειται να διαβαστεί σε s, η οποία, σε αυτό το σημείο, είναι ουσιαστικά η 65 00:02:56,300 --> 00:02:58,570 διεύθυνση του ένα μεγάλο κομμάτι της μνήμης ή να είναι ισοδύναμες. 66 00:02:58,570 --> 00:03:02,080 Είναι το όνομα ενός πίνακα των χαρακτήρων της μνήμης. 67 00:03:02,080 --> 00:03:07,610 >> Αλλά ακριβώς αυτό, αν έχετε διαβάσει ένα string αυτό είναι μεγαλύτερο από 49 χαρακτήρες, 49 68 00:03:07,610 --> 00:03:10,440 γιατί θα πρέπει να έχετε χώρο για το backslash 0, θα πάμε να ξεχειλίσει 69 00:03:10,440 --> 00:03:11,390 ότι το ρυθμιστικό. 70 00:03:11,390 --> 00:03:16,410 Και μπορείτε να πάρετε τυχεροί και να είναι σε θέση να γράφετε 51η χαρακτήρα, 52η, 53η. 71 00:03:16,410 --> 00:03:18,560 Αλλά σε κάποιο σημείο, το λειτουργικό σύστημα πρόκειται να πει, όχι. 72 00:03:18,560 --> 00:03:21,270 Αυτό σίγουρα δεν είναι η μνήμη σας επιτρέπεται να αγγίξει. 73 00:03:21,270 --> 00:03:23,380 Και το πρόγραμμα πρόκειται να segfault. 74 00:03:23,380 --> 00:03:26,650 >> Έτσι εκεί, τα heuristics πρέπει να είναι κάθε φορά που θα έχεις σταθερό μήκος, έχετε 75 00:03:26,650 --> 00:03:30,150 για να βεβαιωθείτε ότι έχετε τον έλεγχο του μήκους από ό, τι είναι αυτό που προσπαθείτε 76 00:03:30,150 --> 00:03:31,090 να διαβάσει σε αυτό. 77 00:03:31,090 --> 00:03:35,110 >> ΚΟΙΝΟ: Έτσι για να λύσει αυτό, θα μπορούσε να είχαν μια δήλωση ελέγχου πραγματικότητα 78 00:03:35,110 --> 00:03:37,140 είναι το μήκος μεγαλύτερο ή μικρότερο από; 79 00:03:37,140 --> 00:03:37,730 >> DAVID J. MALAN: Απολύτως. 80 00:03:37,730 --> 00:03:41,706 Απλά έχουν μια κατάσταση που λέει, αν η - 81 00:03:41,706 --> 00:03:46,080 ή μάλλον δεν γνωρίζουν απαραίτητα εκ των προτέρων πόσους χαρακτήρες η 82 00:03:46,080 --> 00:03:49,060 χρήστης πρόκειται να πληκτρολογήσετε, επειδή έχετε το κοτόπουλο και το αυγό. 83 00:03:49,060 --> 00:03:51,860 Δεν έως ότου έχετε διαβάσει με scanf μπορεί να σας καταλάβω πόσο καιρό είναι. 84 00:03:51,860 --> 00:03:54,500 Αλλά σε εκείνο το σημείο, είναι πολύ αργά, επειδή έχετε ήδη διαβάσει σε 85 00:03:54,500 --> 00:03:55,710 κάποια μπλοκ της μνήμης. 86 00:03:55,710 --> 00:03:59,590 Έτσι, ως ένα μέρος, τα αποφεύγει βιβλιοθήκη CS50 αυτό το ζήτημα συνολικά, ανάκληση 87 00:03:59,590 --> 00:04:01,060 με τη χρήση fgetc. 88 00:04:01,060 --> 00:04:05,390 Και να διαβάζει ένα χαρακτήρα κάθε φορά, tip-toeing μαζί, γνωρίζοντας ότι θα 89 00:04:05,390 --> 00:04:08,060 δεν μπορεί να υπερχειλίσει έναν χαρακτήρα εάν μπορείτε να διαβάσετε ένα κάθε φορά. 90 00:04:08,060 --> 00:04:11,580 >> Τα αλιεύματα είναι με GetString ανάκληση είναι ότι πρέπει διαρκώς να επανεξετάζουμε το μέγεθος 91 00:04:11,580 --> 00:04:13,590 ότι κομμάτι της μνήμης, η οποία είναι απλά ένας πόνος. 92 00:04:13,590 --> 00:04:15,310 Είναι πολύ γραμμών κώδικα για να το κάνουμε αυτό. 93 00:04:15,310 --> 00:04:18,779 Έτσι, μια άλλη προσέγγιση θα ήταν να πραγματικά να χρησιμοποιήσετε έναν ξάδελφο, έτσι 94 00:04:18,779 --> 00:04:19,790 να μιλήσει, της scanf. 95 00:04:19,790 --> 00:04:22,820 Υπάρχουν παραλλαγές σε πολλά από αυτά λειτουργίες που στην πραγματικότητα ελέγχουν το 96 00:04:22,820 --> 00:04:25,870 μήκος πόσους χαρακτήρες μπορείτε να διαβάσετε στο μέγιστο. 97 00:04:25,870 --> 00:04:29,430 Και μπορείτε να καθορίσετε, δεν διαβάζουν περισσότερο από 50 χαρακτήρες. 98 00:04:29,430 --> 00:04:34,110 Έτσι, αυτό θα είναι μια άλλη προσέγγιση, αλλά μικρότερη υποδοχή των μεγαλύτερων εισροών. 99 00:04:34,110 --> 00:04:37,040 >> Έτσι ερώτηση 2 ερωτά, ας υποθέσουμε ότι η έκδοση 3 καταρτίζεται και εκτελείται. 100 00:04:37,040 --> 00:04:39,960 Γιατί μπορεί segfault ότι το πρόγραμμα; 101 00:04:39,960 --> 00:04:42,650 Έτσι, αυτό είναι στην πραγματικότητα το ίδιο απαντήσει, μολονότι 102 00:04:42,650 --> 00:04:43,590 φαίνεται λίγο περίπλοκη. 103 00:04:43,590 --> 00:04:46,440 Είμαστε με malloc, η οποία αισθάνεται σαν δίνουμε τον εαυτό μας περισσότερες επιλογές. 104 00:04:46,440 --> 00:04:48,030 Και τότε είμαστε απελευθερώνοντας ότι μνήμη στο τέλος. 105 00:04:48,030 --> 00:04:49,580 Είναι ακόμα μόνο 50 bytes της μνήμης. 106 00:04:49,580 --> 00:04:53,620 Έτσι, θα μπορούσαμε ακόμα προσπαθώ να διαβάσω σε 51, 52, 1000 bytes. 107 00:04:53,620 --> 00:04:55,830 Είναι πρόκειται να segfault για τον ίδιο ακριβώς λόγο. 108 00:04:55,830 --> 00:04:57,530 >> Αλλά υπάρχει και ένας άλλος λόγος πάρα πολύ. 109 00:04:57,530 --> 00:05:03,890 Τι άλλο θα μπορούσε malloc επιστροφή, εκτός από η διεύθυνση του ένα μεγάλο κομμάτι της μνήμης; 110 00:05:03,890 --> 00:05:04,920 Θα μπορούσε να επιστρέψει null. 111 00:05:04,920 --> 00:05:07,560 Και επειδή δεν είμαστε ο έλεγχος για ότι, θα μπορούσαμε να κάνουμε κάτι 112 00:05:07,560 --> 00:05:11,350 ηλίθιο για έναν άλλο λόγο, που είναι ότι θα μπορούσαμε να λέει scanf, διαβάστε 113 00:05:11,350 --> 00:05:16,050 είσοδο του χρήστη από το πληκτρολόγιο σε θέση 0, AKA null. 114 00:05:16,050 --> 00:05:18,890 Και αυτό, επίσης, θα είναι σίγουρα το έναυσμα για μια segfault. 115 00:05:18,890 --> 00:05:21,590 Έτσι, για το σκοπό του κουίζ του, θα θέλαμε έχουν αποδεχθεί είτε από αυτούς ως 116 00:05:21,590 --> 00:05:22,740 βάσιμο λόγο. 117 00:05:22,740 --> 00:05:23,420 Το ένα είναι πανομοιότυπο. 118 00:05:23,420 --> 00:05:25,720 Το ένα είναι λίγο πιο λεπτή. 119 00:05:25,720 --> 00:05:28,975 >> Τέλος, σε σχέση με το προγράμματος χρήση της μνήμης, πώς να κάνει την έκδοση 2 και 120 00:05:28,975 --> 00:05:30,350 έκδοση 3 διαφέρουν; 121 00:05:30,350 --> 00:05:35,070 Έτσι, για ό, τι αξίζει, είδαμε μια φαινομενικά ατελείωτη προσφορά των πιθανών 122 00:05:35,070 --> 00:05:35,770 απαντήσεις σε αυτό. 123 00:05:35,770 --> 00:05:39,300 Και μεταξύ των απαντήσεων των ανθρώπων, αυτό που ήταν ελπίζοντας, αλλά το δεχτήκαμε άλλα 124 00:05:39,300 --> 00:05:42,250 τα πράγματα, ήταν κάποια αναφορά του το γεγονός ότι η έκδοση 2 χρησιμοποιώντας 125 00:05:42,250 --> 00:05:44,560 η λεγόμενη στοίβα. 126 00:05:44,560 --> 00:05:46,710 Έκδοση 3 χρησιμοποιεί το σωρό. 127 00:05:46,710 --> 00:05:50,060 Και λειτουργικά, αυτό δεν κάνει πραγματικά κάνουν όλοι ότι ένα μεγάλο μέρος μιας διαφοράς. 128 00:05:50,060 --> 00:05:54,040 Στο τέλος της ημέρας, είμαστε ακόμα απλά να πάρει 50 bytes της μνήμης. 129 00:05:54,040 --> 00:05:56,640 >> Αλλά αυτό ήταν μία από τις πιθανές απαντήσεις ότι ψάχναμε. 130 00:05:56,640 --> 00:05:59,730 Αλλά θα δούμε, όπως μπορείτε να πάρετε κουίζ σας πίσω από το TFs, ότι κάναμε 131 00:05:59,730 --> 00:06:04,330 αποδεχθεί άλλες συζητήσεις τους ανόμοιες χρήσεις της μνήμης, καθώς και. 132 00:06:04,330 --> 00:06:08,600 Αλλά και στοίβα σωρός θα ήταν μια εύκολη απάντηση για να πάει με. 133 00:06:08,600 --> 00:06:11,150 Οποιεσδήποτε ερωτήσεις; 134 00:06:11,150 --> 00:06:12,400 Σας δίνω τον Rob. 135 00:06:12,400 --> 00:06:18,360 136 00:06:18,360 --> 00:06:20,210 >> ROB BOWDEN: Έτσι το πρόβλημα 4. 137 00:06:20,210 --> 00:06:21,985 Αυτό είναι το ένα, όπου θα έπρεπε να συμπληρώσετε στον αριθμό των bytes έξω από όλα 138 00:06:21,985 --> 00:06:23,460 αυτοί οι διαφορετικοί τύποι που χρησιμοποιούνται. 139 00:06:23,460 --> 00:06:24,830 Έτσι το πρώτο πράγμα που βλέπουμε. 140 00:06:24,830 --> 00:06:27,930 Ας υποθέσουμε ότι μια αρχιτεκτονική 32-bit, όπως αυτή τη συσκευή CS50. 141 00:06:27,930 --> 00:06:33,530 Έτσι, ένα από τα θεμελιώδη πράγματα για Αρχιτεκτονικές 32-bit, που μας λέει 142 00:06:33,530 --> 00:06:37,490 ακριβώς πόσο μεγάλη είναι ένας δείκτης θα να είναι στην αρχιτεκτονική. 143 00:06:37,490 --> 00:06:43,020 >> Έτσι, αμέσως, γνωρίζουμε ότι κάθε δείκτη τύπος είναι 32-bits ή 4 bytes. 144 00:06:43,020 --> 00:06:46,010 Έτσι, αναζητούν σε αυτό το τραπέζι, ένα * κόμβος είναι ένας τύπος δείκτη. 145 00:06:46,010 --> 00:06:47,250 Αυτό πρόκειται να είναι 4 bytes. 146 00:06:47,250 --> 00:06:51,640 Struct node *, είναι κυριολεκτικά ταυτόσημη με κόμβο αστέρι. 147 00:06:51,640 --> 00:06:53,590 Και έτσι αυτό θα είναι 4 bytes. 148 00:06:53,590 --> 00:06:58,270 String, γι 'αυτό δεν μοιάζει με ένα pointer ακόμα, αλλά το typedef, ένα 149 00:06:58,270 --> 00:07:01,590 string είναι απλά ένα char *, η οποία είναι ένας τύπος δείκτη. 150 00:07:01,590 --> 00:07:03,550 Έτσι, αυτό πρόκειται να είναι 4 bytes. 151 00:07:03,550 --> 00:07:06,150 >> Έτσι, αυτά τα τρία είναι τα 4 bytes. 152 00:07:06,150 --> 00:07:09,350 Τώρα, ο κόμβος και ο μαθητής είναι λίγο πιο περίπλοκη. 153 00:07:09,350 --> 00:07:15,160 Έτσι, κοιτάζοντας κόμβο και φοιτητών, βλέπουμε κόμβο ως ακέραιο και ένα δείκτη. 154 00:07:15,160 --> 00:07:18,050 Και μαθητής είναι δύο δείκτες στο εσωτερικό του. 155 00:07:18,050 --> 00:07:23,340 Έτσι, τουλάχιστον για την περίπτωσή μας εδώ, ο τρόπος ότι θα καταλήξουμε υπολογισμό του μεγέθους της 156 00:07:23,340 --> 00:07:27,020 αυτό το struct είναι απλώς προσθέστε τα πάντα αυτό είναι μέσα στο struct. 157 00:07:27,020 --> 00:07:30,690 >> Έτσι, για τον κόμβο, έχουμε έναν ακέραιο, η οποία είναι 4 bytes. 158 00:07:30,690 --> 00:07:32,830 Έχουμε ένα δείκτη, η οποία είναι 4 bytes. 159 00:07:32,830 --> 00:07:35,820 Και έτσι ένας κόμβος θα να αναλάβουν 8 bytes. 160 00:07:35,820 --> 00:07:39,490 Και ομοίως για το μαθητή, έχουμε ένα δείκτη που είναι 4 bytes και ένα άλλο 161 00:07:39,490 --> 00:07:40,770 δείκτη που είναι 4 bytes. 162 00:07:40,770 --> 00:07:43,180 Έτσι, αυτό πρόκειται να καταλήξει να είναι 8 bytes. 163 00:07:43,180 --> 00:07:45,480 Έτσι, ο κόμβος και ο μαθητής είναι 8 bytes. 164 00:07:45,480 --> 00:07:48,950 Και αυτά τα τρία είναι τα 4 bytes. 165 00:07:48,950 --> 00:07:50,240 Ερωτήσεις σχετικά με αυτό; 166 00:07:50,240 --> 00:07:54,640 167 00:07:54,640 --> 00:07:54,990 Ναι. 168 00:07:54,990 --> 00:07:58,413 >> ΚΟΙΝΟ: Είναι ήταν ένα 64-bit αρχιτεκτονική, θα ήταν αυτό 169 00:07:58,413 --> 00:07:59,880 διπλασιάσει όλα αυτά; 170 00:07:59,880 --> 00:08:01,790 >> ROB BOWDEN: Δεν θα διπλασιάσει όλα αυτά. 171 00:08:01,790 --> 00:08:05,830 Έτσι, 64-bit αρχιτεκτονική, αυτό, και πάλι, αλλαγές που βασικό πράγμα ότι ένα 172 00:08:05,830 --> 00:08:08,910 δείκτης είναι σήμερα 64 bits. 173 00:08:08,910 --> 00:08:09,290 Ναι. 174 00:08:09,290 --> 00:08:10,930 Έτσι, ένας δείκτης είναι 8 bytes. 175 00:08:10,930 --> 00:08:15,420 Έτσι, αυτά που ήταν 4 bytes πρόκειται να είναι 8 bytes. 176 00:08:15,420 --> 00:08:18,617 Ένας φοιτητής, ο οποίος ήταν δίποντα, καλά, τώρα πρόκειται να 177 00:08:18,617 --> 00:08:19,800 είναι 8 bytes, 8 bytes. 178 00:08:19,800 --> 00:08:21,980 Είναι πρόκειται να κάνει 16 bytes. 179 00:08:21,980 --> 00:08:25,710 >> Αλλά ένας κόμβος εξακολουθεί να είναι 4 bytes. 180 00:08:25,710 --> 00:08:27,800 Έτσι, αυτό το δείκτη πρόκειται να είναι 8 bytes. 181 00:08:27,800 --> 00:08:28,930 Αυτό είναι 4 bytes. 182 00:08:28,930 --> 00:08:30,870 Έτσι, ένας κόμβος θα είναι μόνο να είναι 12 bytes. 183 00:08:30,870 --> 00:08:36,309 184 00:08:36,309 --> 00:08:39,280 Οποιεσδήποτε άλλες ερωτήσεις σχετικά με αυτό; 185 00:08:39,280 --> 00:08:44,500 Έτσι ώστε η επόμενη, αυτά είναι οι κωδικοί κατάστασης HTTP. 186 00:08:44,500 --> 00:08:48,000 Και θα έπρεπε να περιγράψει τις συνθήκες υπό τους οποίους θα μπορούσε 187 00:08:48,000 --> 00:08:49,810 να σας επιστραφεί. 188 00:08:49,810 --> 00:08:56,730 ένα πρόβλημα που άκουσα μερικούς μαθητές έχουν είναι ότι προσπάθησαν να κάνουν το 189 00:08:56,730 --> 00:08:58,950 σφάλματα είναι στο τέλος του πελάτη. 190 00:08:58,950 --> 00:09:02,320 Έτσι, όταν θα προσπαθήσουμε να κάνουμε το αίτημα στο διακομιστή, κάτι πάει 191 00:09:02,320 --> 00:09:03,820 λάθος στο τέλος μας. 192 00:09:03,820 --> 00:09:07,660 Αλλά γενικά, οι κωδικοί αυτοί είναι επιστρέφεται από το διακομιστή. 193 00:09:07,660 --> 00:09:11,720 Έτσι θέλουμε να καταλάβουμε τι συμβαίνει σωστό ή λάθος στο διακομιστή που 194 00:09:11,720 --> 00:09:14,280 προκαλεί αυτά τα πράγματα που πρέπει να επιστραφεί. 195 00:09:14,280 --> 00:09:18,670 Γιατί, λοιπόν, θα μπορούσε ένας διακομιστής επιστρέφει κωδικό κατάστασης 200; 196 00:09:18,670 --> 00:09:19,920 Οποιεσδήποτε σκέψεις; 197 00:09:19,920 --> 00:09:23,360 198 00:09:23,360 --> 00:09:23,730 >> Ναι. 199 00:09:23,730 --> 00:09:27,850 Έτσι, κάτι για επιτυχία το αίτημα πέρασε. 200 00:09:27,850 --> 00:09:30,260 Και θα είστε σε θέση να επιστρέψει ό, τι ζήτησε. 201 00:09:30,260 --> 00:09:32,240 Έτσι, όλα ήταν μια χαρά. 202 00:09:32,240 --> 00:09:35,662 Τι γίνεται με 302 βρέθηκε; 203 00:09:35,662 --> 00:09:36,618 Ναι. 204 00:09:36,618 --> 00:09:39,008 >> ΚΟΙΝΟ: Ο διακομιστής έψαχνε για ό, τι ζητήσει. 205 00:09:39,008 --> 00:09:40,442 Αλλά δεν μπορούσα να το βρω. 206 00:09:40,442 --> 00:09:42,850 Έτσι, υπάρχει ένα λάθος. 207 00:09:42,850 --> 00:09:47,720 >> ROB BOWDEN: Έτσι, ο διακομιστής ήταν ψάχνει για ό, τι ήθελε. 208 00:09:47,720 --> 00:09:51,682 Έτσι απλά ψάχνουν εδώ, 302 βρέθηκαν, ήταν σε θέση να το βρείτε. 209 00:09:51,682 --> 00:09:53,035 >> ΚΟΙΝΟ: Λυπάμαι. 210 00:09:53,035 --> 00:09:54,388 Βρέθηκαν σημαίνει ότι έκαναν το βρείτε. 211 00:09:54,388 --> 00:09:55,638 Λυπάμαι. 212 00:09:55,638 --> 00:09:58,120 213 00:09:58,120 --> 00:10:00,160 >> ROB BOWDEN: Μέχρι 302 εγγραφές. 214 00:10:00,160 --> 00:10:02,350 Ο διακομιστής είναι σε θέση να βρει ό, τι ήθελε. 215 00:10:02,350 --> 00:10:04,640 >> ΚΟΙΝΟ: Αλλά δεν το εμφανίζει; 216 00:10:04,640 --> 00:10:08,180 >> ROB BOWDEN: Η διαφορά μεταξύ Αυτό το 302 και 200 ​​είναι ότι 217 00:10:08,180 --> 00:10:09,280 ξέρει τι θέλετε. 218 00:10:09,280 --> 00:10:12,000 Αλλά δεν είναι ακριβώς όπου θα ήθελα να ρωτήσω. 219 00:10:12,000 --> 00:10:14,580 Έτσι 302 είναι ένα τυπικό ανακατεύθυνση. 220 00:10:14,580 --> 00:10:16,510 Έτσι θα ζητήσει μία σελίδα. 221 00:10:16,510 --> 00:10:19,590 Γνωρίζει, OH, θέλω να σας επιστρέψουμε αυτό. 222 00:10:19,590 --> 00:10:21,070 Αλλά αυτό είναι μια διαφορετική διεύθυνση URL. 223 00:10:21,070 --> 00:10:23,534 Έτσι, hey, που πραγματικά το θέλουν. 224 00:10:23,534 --> 00:10:26,950 >> DAVID J. MALAN: Είναι ένα κομμάτι που είπε ότι δώσαμε εσείς μια ανακατεύθυνση 225 00:10:26,950 --> 00:10:30,830 λειτουργία που χρησιμοποιείται η header ότι, με τη σειρά του, να εκτυπωθούν τοποθεσία, 226 00:10:30,830 --> 00:10:34,110 του παχέος εντέρου, και, στη συνέχεια, η διεύθυνση URL στην οποία θέλετε να απορρίψετε το χρήστη. 227 00:10:34,110 --> 00:10:37,480 Ακόμα κι αν δεν έχετε δει 302 ρητά εκεί, αυτό είναι ό, τι PHP 228 00:10:37,480 --> 00:10:41,550 θα εισάγετε μαγικά με την κεφαλίδα λέει ακριβώς τι είπε ο Rob εκεί - 229 00:10:41,550 --> 00:10:41,930 βρέθηκε. 230 00:10:41,930 --> 00:10:43,180 Αλλά αντ 'αυτού πηγαίνετε εδώ. 231 00:10:43,180 --> 00:10:45,960 232 00:10:45,960 --> 00:10:46,160 >> ROB BOWDEN: OK. 233 00:10:46,160 --> 00:10:47,630 Έτσι τι γίνεται με 403 απαγορεύεται; 234 00:10:47,630 --> 00:10:52,240 235 00:10:52,240 --> 00:10:57,120 >> ΚΟΙΝΟ: Νομίζω ότι είναι ότι ο διακομιστής είναι βασικά λέγοντας ότι ο πελάτης 236 00:10:57,120 --> 00:10:59,970 δεν μπορούν να έχουν πρόσβαση από το σπίτι σελίδα. 237 00:10:59,970 --> 00:11:03,260 >> ROB BOWDEN: Ναι λοιπόν. 238 00:11:03,260 --> 00:11:07,670 Λοιπόν, η τυπική απάντηση ήμασταν περιμένει είναι κάτι σαν, τα αρχεία 239 00:11:07,670 --> 00:11:08,920 δεν chmodded κατάλληλα. 240 00:11:08,920 --> 00:11:11,590 Αυτό είναι πιθανώς κάτω από ποιες συνθήκες τους είδατε. 241 00:11:11,590 --> 00:11:18,920 Αλλά υπάρχει ένας λόγος για τον οποίο ο πελάτης θα μπορούσε να είναι σε υπαιτιότητά του εδώ. 242 00:11:18,920 --> 00:11:20,440 Υπάρχει πράγματι ένας άλλος κωδικός κατάστασης - 243 00:11:20,440 --> 00:11:21,210 401. 244 00:11:21,210 --> 00:11:22,820 Έτσι, αυτά είναι πολύ παρόμοια. 245 00:11:22,820 --> 00:11:24,590 >> 401 δεν είναι εξουσιοδοτημένο. 246 00:11:24,590 --> 00:11:26,130 Και 403 απαγορεύεται. 247 00:11:26,130 --> 00:11:31,890 Και έτσι τη μη εξουσιοδοτημένη σας αποκλειστικά πάρετε αν δεν είστε συνδεδεμένοι μέσα 248 00:11:31,890 --> 00:11:34,520 Αλλά συνδεθείτε μπορεί να σημαίνει ότι έχετε εξουσιοδοτηθεί. 249 00:11:34,520 --> 00:11:37,930 Αλλά αν είστε ήδη συνδεδεμένος και εξακολουθούν να μην έχουν δικαίωμα, στη συνέχεια, 250 00:11:37,930 --> 00:11:40,140 μπορείτε επίσης να πάρετε απαγορεύεται. 251 00:11:40,140 --> 00:11:45,320 Έτσι, εάν είστε συνδεδεμένοι και δεν έχουν άδεια, απαγορεύεται επίσης 252 00:11:45,320 --> 00:11:47,164 κάτι που μπορείτε να πάρετε. 253 00:11:47,164 --> 00:11:48,900 >> DAVID J. MALAN: Και ο μηχανισμός με τον οποία τα προβλήματα αυτά είναι συνήθως 254 00:11:48,900 --> 00:11:53,100 λυθεί στο διακομιστή είναι μέσω ποια εντολή; 255 00:11:53,100 --> 00:11:57,700 Chmod, αν είναι, πράγματι, ένας δικαιώματα εκδίδουν στο αρχείο ή κατάλογο. 256 00:11:57,700 --> 00:11:59,220 >> ROB BOWDEN: 404 Τότε δεν βρέθηκε. 257 00:11:59,220 --> 00:12:03,100 258 00:12:03,100 --> 00:12:03,470 Ναι. 259 00:12:03,470 --> 00:12:10,150 Έτσι, σε αντίθεση με 302 όπου δεν ήταν ακριβώς όπου ζητάς, αλλά ξέρει τι 260 00:12:10,150 --> 00:12:12,710 θέλετε, αυτό, έχει μόνο καμία ιδέα για το τι θέλετε. 261 00:12:12,710 --> 00:12:15,648 Και δεν ζητούν κάτι που ισχύει. 262 00:12:15,648 --> 00:12:18,580 263 00:12:18,580 --> 00:12:22,310 418 Είμαι μια τσαγιέρα και, στη συνέχεια, 500 εσωτερικό διακομιστή. 264 00:12:22,310 --> 00:12:24,870 Έτσι, γιατί μπορεί να σας πάρει αυτό; 265 00:12:24,870 --> 00:12:26,120 >> Έτσι segfault - 266 00:12:26,120 --> 00:12:28,760 267 00:12:28,760 --> 00:12:30,640 Εγώ πραγματικά δεν ξέρω την ταξινόμηση πρότυπο για αυτό. 268 00:12:30,640 --> 00:12:34,850 Αλλά εάν ο κώδικας PHP σας είχε κάτι λάθος σε αυτό, θεωρητικά, θα μπορούσε να 269 00:12:34,850 --> 00:12:39,650 πράγματι segfault, στην οποία περίπτωση, η παρούσα 500 error εσωτερικό διακομιστή, κάτι 270 00:12:39,650 --> 00:12:41,400 είναι λάθος με το διακομιστή σας διαμόρφωσης. 271 00:12:41,400 --> 00:12:44,320 Ή υπάρχει συντακτικό σφάλμα στον κώδικα PHP σας. 272 00:12:44,320 --> 00:12:46,095 Ή κάτι κακό συμβαίνει. 273 00:12:46,095 --> 00:12:48,320 >> DAVID J. MALAN: Κάναμε δούμε segfault μεταξύ των απαντήσεων λίγα ανθρώπων. 274 00:12:48,320 --> 00:12:49,490 Και από τεχνική άποψη, θα μπορούσε να συμβεί. 275 00:12:49,490 --> 00:12:53,820 Αλλά αυτό θα ήταν ένα PHP, το πρόγραμμα γραμμένα από άλλους ανθρώπους, στην πραγματικότητα 276 00:12:53,820 --> 00:12:57,790 segfaulted, που μόνο αν αυτοί οι άνθρωποι σκάτωσε και έγραψε λάθη κώδικα σε 277 00:12:57,790 --> 00:13:00,680 διερμηνέα τους θα Η ίδια η PHP segfault. 278 00:13:00,680 --> 00:13:06,460 Έτσι, παρόλο που 500 είναι σαν ένα segfault στο πνεύμα, είναι σχεδόν πάντα η 279 00:13:06,460 --> 00:13:10,490 αποτέλεσμα της έκδοσης του αρχείου ρυθμίσεων με τον web server σας ή, όπως δήλωσε ο Rob, 280 00:13:10,490 --> 00:13:13,200 συντακτικό σφάλμα, όπως σας δεν κλείσει ένα απόσπασμα. 281 00:13:13,200 --> 00:13:16,180 Ή έχετε χάσει ένα ερωτηματικό κάπου. 282 00:13:16,180 --> 00:13:23,677 >> ΚΟΙΝΟ: Έτσι, για το Shuttle από το chipset, I ότι όταν το έκανα μια φορά χτύπησα το 283 00:13:23,677 --> 00:13:26,300 πρόγραμμα περιήγησης, αλλά τίποτα δεν ήρθε, αυτό που ονομάζεται λευκή σελίδα. 284 00:13:26,300 --> 00:13:28,056 Αλλά ήταν εξαιτίας του κώδικα. 285 00:13:28,056 --> 00:13:29,440 Νομίζω ότι ήταν JavaScript, σωστά; 286 00:13:29,440 --> 00:13:29,770 >> ROB BOWDEN: Ναι. 287 00:13:29,770 --> 00:13:31,180 >> ΚΟΙΝΟ: Θα το σφάλμα ακόμα καταλήξει; 288 00:13:31,180 --> 00:13:34,290 >> ROB BOWDEN: Έτσι δεν θα έχετε πάρει αυτό το σφάλμα επειδή τα πάντα 289 00:13:34,290 --> 00:13:36,930 από την πλευρά του διακομιστή διαδικτύου ήταν εντελώς καλά. 290 00:13:36,930 --> 00:13:39,090 Αλλά ζητήσατε index.html. 291 00:13:39,090 --> 00:13:42,000 Ζητήσατε shuttle.js και service.js. 292 00:13:42,000 --> 00:13:44,580 Και ήταν σε θέση να επιστρέψει με επιτυχία σε όλους σας αυτά τα πράγματα - 293 00:13:44,580 --> 00:13:44,980 200. 294 00:13:44,980 --> 00:13:45,680 OK. 295 00:13:45,680 --> 00:13:49,330 Είναι μόνο όταν το πρόγραμμα περιήγησης προσπάθησε να ερμηνεύσει τον κώδικα JavaScript που 296 00:13:49,330 --> 00:13:51,370 είναι παρόμοια, περιμένετε, αυτό δεν είναι έγκυρο σφάλμα JavaScript. 297 00:13:51,370 --> 00:13:55,720 298 00:13:55,720 --> 00:13:58,210 Οποιεσδήποτε άλλες ερωτήσεις; 299 00:13:58,210 --> 00:14:00,750 Εντάξει. 300 00:14:00,750 --> 00:14:04,120 >> DAVID J. MALAN: Μέχρι την επόμενη up ήταν νούμερο 11. 301 00:14:04,120 --> 00:14:07,610 Και 11 ήταν το πιο τρομακτικό για πολλούς ανθρώπους. 302 00:14:07,610 --> 00:14:14,620 303 00:14:14,620 --> 00:14:18,570 Έτσι, το πιο σημαντικό πράγμα που πρέπει να σημειωθεί εδώ ήταν ότι αυτό ήταν, πράγματι, περίπου 304 00:14:18,570 --> 00:14:19,840 μια διπλά συνδεδεμένη λίστα. 305 00:14:19,840 --> 00:14:23,160 Αλλά αυτό δεν ήταν το ίδιο με πέρυσι διπλά συνδεδεμένη λίστα προβλήματος, 306 00:14:23,160 --> 00:14:27,170 που δεν σας δώσει την προειδοποίηση ότι ο κατάλογος θα μπορούσε, στην πραγματικότητα, είναι αδιαχώριστα. 307 00:14:27,170 --> 00:14:29,640 >> Έτσι, το γεγονός ότι ο κατάλογος ήταν αδιαχώριστα και το γεγονός ότι η λέξη αυτή 308 00:14:29,640 --> 00:14:32,930 υπογράμμισε υπήρχε ως στόχο να μεταφέρει ότι αυτό είναι στην πραγματικότητα μια απλοποίηση 309 00:14:32,930 --> 00:14:35,430 από ό, τι διαφορετικά θα ήταν ένα πιο δύσκολο πρόβλημα 310 00:14:35,430 --> 00:14:36,600 και ένα μακρύτερο. 311 00:14:36,600 --> 00:14:40,760 Έτσι, ένα κοινό λάθος εδώ ήταν να έχουν θέσει λύση του περασμένου έτους σε ένα σας 312 00:14:40,760 --> 00:14:45,580 τηλεειδοποίησης και στη συνέχεια απλά να αντιγράψετε τυφλά ότι προς τα κάτω ως απάντηση, η οποία είναι η σωστή 313 00:14:45,580 --> 00:14:48,520 απαντήσετε σε μια διαφορετική ερώτηση συναφείς στο πνεύμα. 314 00:14:48,520 --> 00:14:51,340 Αλλά οι λεπτές αποχρώσεις εδώ ήταν ως ακολούθως. 315 00:14:51,340 --> 00:14:55,200 >> Έτσι, ένα, έχουμε ένα κόμβο που δηλώνονται και ορίζεται με τον συνήθη τρόπο εδώ. 316 00:14:55,200 --> 00:14:59,230 Στη συνέχεια ορίσαμε λίστα είναι μια παγκόσμια pointer αρχικοποιείται σε null. 317 00:14:59,230 --> 00:15:02,150 Στη συνέχεια, προφανώς, υπάρχουν δύο λειτουργίες έχουμε πρωτότυπα για εδώ, ένθετο 318 00:15:02,150 --> 00:15:03,240 και αφαιρέστε το. 319 00:15:03,240 --> 00:15:06,600 Και τότε έχουμε κάποια δείγμα κώδικα εδώ να κάνει ένα σωρό προσθήκες. 320 00:15:06,600 --> 00:15:09,930 Και τότε θα σας ζητήσουμε να συμπληρώσετε το εφαρμογή του ενθέματος κάτω σε τέτοιες 321 00:15:09,930 --> 00:15:14,380 τρόπο ώστε να εισάγει το η στον κατάλογο σε συνεχή χρόνο, υπογράμμισε επίσης, 322 00:15:14,380 --> 00:15:15,730 ακόμη και αν ήδη υπάρχουν. 323 00:15:15,730 --> 00:15:20,600 >> Έτσι, η ομορφιά της είναι σε θέση να εισαγάγετε σε σταθερό χρόνο είναι ότι συνεπάγεται 324 00:15:20,600 --> 00:15:23,060 ότι θα πρέπει να τοποθετήσετε ο νέος κόμβος πού; 325 00:15:23,060 --> 00:15:23,690 Στο μπροστινό. 326 00:15:23,690 --> 00:15:27,760 Έτσι, εξαλείφει, ευτυχώς, τουλάχιστον μία από τις περιπτώσεις που χρησιμοποιείται για να απαιτήσει 327 00:15:27,760 --> 00:15:30,520 ακόμη περισσότερες γραμμές κώδικα, όπως το έκανε πέρυσι και ακόμα και στην τάξη, όταν εμείς 328 00:15:30,520 --> 00:15:34,040 μίλησε μέσα από αυτό το είδος του πράγματος με τον άνθρωπο και με μερικά 329 00:15:34,040 --> 00:15:35,250 λεκτική ψευδοκώδικα. 330 00:15:35,250 --> 00:15:39,190 Έτσι, στη λύση εδώ, ας υπερπηδήσει στο ότι μόνο και μόνο για να έχουν οπτική επαφή με 331 00:15:39,190 --> 00:15:40,480 η οθόνη. 332 00:15:40,480 --> 00:15:42,230 >> Παρατηρήστε ότι κάνουμε το εξής. 333 00:15:42,230 --> 00:15:45,140 Και επίσης να παρατηρήσετε την περαιτέρω απλοποίηση ήταν ότι ακόμα κι αν είναι 334 00:15:45,140 --> 00:15:48,280 που υπάρχουν ήδη, έτσι αυτό σημαίνει ότι, ακόμη και αν ο αριθμός είναι ήδη εκεί, μπορείτε να 335 00:15:48,280 --> 00:15:50,280 ακριβώς τυφλά εισάγετε άλλη αντίγραφό της. 336 00:15:50,280 --> 00:15:52,560 Και αυτό, επίσης, ήταν γραφτό να γίνει μια απλοποίηση, έτσι ώστε να μπορούσε να 337 00:15:52,560 --> 00:15:54,940 επικεντρωθεί, πραγματικά, κάποιες από τις πιο διανοητικά ενδιαφέρον μέρος και 338 00:15:54,940 --> 00:15:58,090 όχι μόνο μερικά επιπλέον έλεγχο σφαλμάτων δεδομένου του περιορισμένου χρόνου. 339 00:15:58,090 --> 00:16:02,880 >> Έτσι, σε αυτό το διάλυμα του δείγματος, διαθέτουμε ένα δείκτη στο αριστερό χέρι 340 00:16:02,880 --> 00:16:04,510 πλευρά εδώ σε έναν κόμβο. 341 00:16:04,510 --> 00:16:07,190 Τώρα, συνειδητοποιούν ότι δείκτη, όπως Rob είπε, είναι μόνο 32 bits. 342 00:16:07,190 --> 00:16:09,060 Και στην πραγματικότητα δεν περιέχει μια διεύθυνση μέχρι να 343 00:16:09,060 --> 00:16:09,970 αντιστοιχίσετε τη διεύθυνση. 344 00:16:09,970 --> 00:16:13,220 Και το κάνουμε αυτό για το δεξί χέρι πλευρά μέσω malloc. 345 00:16:13,220 --> 00:16:16,550 Όπως ένας καλός πολίτης, ελέγχουμε ότι malloc δεν είναι, στην πραγματικότητα, NULL, έτσι ώστε 346 00:16:16,550 --> 00:16:18,690 δεν δημιουργούν λάθος μια segfault εδώ. 347 00:16:18,690 --> 00:16:22,840 Και κάθε φορά που χρησιμοποιείτε malloc στη ζωή, πρέπει να ελέγξει for null, μήπως 348 00:16:22,840 --> 00:16:24,090 έχετε μια λεπτή bug. 349 00:16:24,090 --> 00:16:28,460 >> Τότε θα προετοιμαστεί αυτό το άκυρο με n ανάθεση και την προηγούμενη και την επόμενη. 350 00:16:28,460 --> 00:16:32,450 Και σε αυτήν την περίπτωση εδώ, έχω προετοιμαστεί προηγούμενο με μηδενική, επειδή αυτό το νέο 351 00:16:32,450 --> 00:16:34,780 κόμβος πρόκειται να είναι η νέα ξεκινώντας από τη λίστα μου. 352 00:16:34,780 --> 00:16:37,050 Έτσι υπάρχει πρόκειται να είναι τίποτα πριν από αυτό. 353 00:16:37,050 --> 00:16:42,010 Και θέλω να προσαρτήσει ουσιαστικά η υπάρχουσα λίστα στο νέο κόμβο 354 00:16:42,010 --> 00:16:44,700 ρύθμιση δίπλα ίσο με λίστα η ίδια. 355 00:16:44,700 --> 00:16:47,120 Αλλά εγώ δεν τελείωσα ακόμα. 356 00:16:47,120 --> 00:16:51,780 Έτσι, αν η ίδια η λίστα υπήρχε ήδη, και υπήρχε τουλάχιστον ένας κόμβος 357 00:16:51,780 --> 00:16:57,070 ήδη σε ισχύ, αν αυτή είναι η λίστα εδώ και εισάγετε ένα νέο κόμβο εδώ, 358 00:16:57,070 --> 00:17:01,840 πρέπει να βεβαιωθείτε ότι ο πρώην κόμβο μου επισημαίνει προς τα πίσω στο νέο μου κόμβο, 359 00:17:01,840 --> 00:17:04,260 επειδή αυτό είναι, και πάλι, μια διπλά συνδεδεμένη λίστα. 360 00:17:04,260 --> 00:17:05,460 >> Έτσι, κάνουμε έναν έλεγχο λογική. 361 00:17:05,460 --> 00:17:10,109 Εάν η λίστα δεν είναι null, αν υπάρχει ήδη έναν ή περισσότερους κόμβους εκεί, τότε 362 00:17:10,109 --> 00:17:12,470 προσθέσω ότι πίσω αναφοράς, ώστε να μιλήσουν. 363 00:17:12,470 --> 00:17:15,420 Και τότε το τελευταίο πράγμα που χρειαζόμαστε να κάνετε είναι να ενημερώσετε την παγκόσμια 364 00:17:15,420 --> 00:17:20,329 ίδια λίστα μεταβλητών στο σημείο στο νέο κόμβο. 365 00:17:20,329 --> 00:17:21,790 Ναι. 366 00:17:21,790 --> 00:17:26,579 >> ΚΟΙΝΟ: Στο δείκτη βέλους [Δεν ακούγεται] ισούται με null, το κάνει αυτό 367 00:17:26,579 --> 00:17:30,420 ασχολούνται με τη λίστα, επειδή ο κατάλογος είναι άκυρη; 368 00:17:30,420 --> 00:17:30,596 >> DAVID J. MALAN: Όχι. 369 00:17:30,596 --> 00:17:34,500 Αυτό είναι απλά μου είναι προληπτικά Προσέξτε, ότι αν αυτό είναι μου 370 00:17:34,500 --> 00:17:38,730 αρχική λίστα με ίσως κάποιες περισσότερους κόμβους εδώ και είμαι εισαγωγή μου 371 00:17:38,730 --> 00:17:42,380 νέος κόμβος εδώ, υπάρχει μετάβαση να είναι τίποτα εδώ. 372 00:17:42,380 --> 00:17:44,720 Και θέλω να συλλάβει αυτή την ιδέα θέτοντας προηγούμενο για 373 00:17:44,720 --> 00:17:47,740 null στο νέο κόμβο. 374 00:17:47,740 --> 00:17:51,410 Και προφανώς, αν κωδικό μου είναι σωστή και δεν υπάρχει κανένας άλλος τρόπος για να εισάγετε 375 00:17:51,410 --> 00:17:54,970 κόμβοι πλην αυτή τη λειτουργία, προφανώς, ακόμη και αν η λίστα έχει ήδη 376 00:17:54,970 --> 00:18:00,090 έναν ή περισσότερους κόμβους σε αυτό, πιθανώς το κατάλογο, ο πρώτος κόμβος, θα έχουν 377 00:18:00,090 --> 00:18:02,750 προηγούμενο δείκτη του ίδιου null. 378 00:18:02,750 --> 00:18:03,550 >> ΚΟΙΝΟ: Και μόλις παρακολούθηση. 379 00:18:03,550 --> 00:18:08,139 Ο λόγος που βάζετε το δείκτη του επόμενου ίσων κατάλογος κάνεις το δείκτη 380 00:18:08,139 --> 00:18:13,579 πριν από κατάλογο που να υποδεικνύουν στην επόμενη, υποθέτω - 381 00:18:13,579 --> 00:18:14,980 I ικ - 382 00:18:14,980 --> 00:18:15,450 απλά παραθέτει; 383 00:18:15,450 --> 00:18:16,400 >> DAVID J. MALAN: Ακριβώς. 384 00:18:16,400 --> 00:18:19,400 Και έτσι ας εξετάσουμε στην πραγματικότητα δύο περιπτώσεις εδώ πραγματικά, ακόμα και αν η 385 00:18:19,400 --> 00:18:22,070 σειρά που θα τις εξετάσει, δεν είναι ακριβώς το ίδιο με τον κώδικα. 386 00:18:22,070 --> 00:18:26,250 Αλλά σε ένα υψηλό επίπεδο, αν αυτό αντιπροσωπεύει λίστα και αυτό είναι ένα 32-bit 387 00:18:26,250 --> 00:18:29,560 δείκτη, η απλούστερη σενάριο είναι ότι αυτό είναι μηδενική από προεπιλογή. 388 00:18:29,560 --> 00:18:33,010 Και ας υποθέσουμε ότι θέλετε να εισαγάγετε το αριθμός 50 ήταν ο πρώτος αριθμός. 389 00:18:33,010 --> 00:18:37,640 Έτσι, Πάω να πάει μπροστά και να διαθέσει ένας κόμβος, ο οποίος πρόκειται να περιέχουν 390 00:18:37,640 --> 00:18:38,770 τρεις τομείς - 391 00:18:38,770 --> 00:18:42,070 n, την προηγούμενη και την επόμενη. 392 00:18:42,070 --> 00:18:44,580 >> Πάω να θέσει τον αριθμό 50 εδώ, γιατί αυτό θα είναι n. 393 00:18:44,580 --> 00:18:46,130 Αυτό θα είναι το επόμενο. 394 00:18:46,130 --> 00:18:48,530 Και αυτό θα είναι προγενέστερη. 395 00:18:48,530 --> 00:18:50,910 Και ναι, τι μπορώ να κάνω σε αυτή την περίπτωση; 396 00:18:50,910 --> 00:18:53,900 Λοιπόν, έχω κάνει μόνο 1 γραμμή εδώ. 397 00:18:53,900 --> 00:18:55,400 Δείκτη n παίρνει n. 398 00:18:55,400 --> 00:18:57,740 Είμαι στη συνέχεια, λέγοντας προηγούμενο θα πρέπει να πάρει null. 399 00:18:57,740 --> 00:18:59,470 Έτσι, αυτό πρόκειται να είναι null. 400 00:18:59,470 --> 00:19:01,365 Στη συνέχεια, Πάω να πω στη συνέχεια πρόκειται να πάρετε τον κατάλογο. 401 00:19:01,365 --> 00:19:05,150 >> Και αυτό λειτουργεί ακριβώς καλά. 402 00:19:05,150 --> 00:19:06,500 Αυτό είναι null. 403 00:19:06,500 --> 00:19:10,620 Και έτσι λέω, ο νέος κόμβος δίπλα τομέα θα πρέπει να πάρει ό, τι είναι αυτό. 404 00:19:10,620 --> 00:19:12,570 Έτσι ώστε να προσφέρει έναν ακόμη null εκεί. 405 00:19:12,570 --> 00:19:14,510 Και τότε το τελευταίο πράγμα Που κάνω είναι να δείτε εδώ. 406 00:19:14,510 --> 00:19:17,870 Εάν η λίστα δεν είναι ίση με μηδενική, αλλά είναι ίση με null, έτσι ώστε να παραλείψετε το 407 00:19:17,870 --> 00:19:18,470 συνολικά. 408 00:19:18,470 --> 00:19:23,520 Και έτσι το μόνο που κάνω είναι την επόμενη λίστα παίρνει δείκτη, η οποία οδηγεί σε εικονογραφικά 409 00:19:23,520 --> 00:19:25,570 μια εικόνα σαν αυτό. 410 00:19:25,570 --> 00:19:26,620 Έτσι, αυτό είναι ένα σενάριο. 411 00:19:26,620 --> 00:19:30,490 >> Και αυτό που σας ζητούσαν για Συγκεκριμένα είναι μια κατάσταση όπως αυτή, 412 00:19:30,490 --> 00:19:33,190 όπου έχουμε ήδη μια λίστα ενός κόμβου. 413 00:19:33,190 --> 00:19:36,240 Και αν μπορώ να πάω πίσω στην αρχική Δήλωση πρόβλημα, η επόμενη θα 414 00:19:36,240 --> 00:19:39,320 εισάγετε ας πούμε είναι 34, μόνο για η χάρη της συζήτησης. 415 00:19:39,320 --> 00:19:46,210 Έτσι, Πάω να απλά βολική Ισοπαλία ότι εδώ. 416 00:19:46,210 --> 00:19:47,540 Έχω μόλις malloced. 417 00:19:47,540 --> 00:19:49,310 Ας υποθέσουμε ότι είμαι έλεγχο για null. 418 00:19:49,310 --> 00:19:51,870 >> Τώρα, είμαι πρόκειται να προετοιμαστεί n να είναι 34. 419 00:19:51,870 --> 00:19:53,040 Και αυτό θα είναι n. 420 00:19:53,040 --> 00:19:54,670 Αυτό θα είναι το επόμενο. 421 00:19:54,670 --> 00:19:57,100 Και αυτό θα είναι προγενέστερη. 422 00:19:57,100 --> 00:19:59,370 Ας βεβαιωθείτε ότι δεν το έκανα πάρετε αυτό προς τα πίσω. 423 00:19:59,370 --> 00:20:01,110 Προηγούμενη έρχεται πρώτη στον ορισμό. 424 00:20:01,110 --> 00:20:03,070 Επιτρέψτε μου να το διορθώσω αυτό. 425 00:20:03,070 --> 00:20:04,410 Αυτή είναι η προηγούμενη. 426 00:20:04,410 --> 00:20:05,780 Αυτό είναι το επόμενο. 427 00:20:05,780 --> 00:20:08,620 Ακόμα κι αν αυτά είναι ταυτόσημα, ας μείνει συνεπής. 428 00:20:08,620 --> 00:20:09,450 >> Προηγούμενη. 429 00:20:09,450 --> 00:20:11,030 Αυτό είναι το επόμενο. 430 00:20:11,030 --> 00:20:16,310 Έτσι έχω μόνο malloced σημείωμά μου, που ελέγχθηκαν for null, αποδίδεται 34 εντός του κόμβου. 431 00:20:16,310 --> 00:20:17,570 Προηγούμενη παίρνει null. 432 00:20:17,570 --> 00:20:19,480 Έτσι, αυτό μου δίνει αυτό. 433 00:20:19,480 --> 00:20:21,010 Στη συνέχεια παίρνει λίστα. 434 00:20:21,010 --> 00:20:22,370 Έτσι, η λίστα είναι αυτό. 435 00:20:22,370 --> 00:20:26,520 Έτσι, αυτό είναι η ίδια σήμερα όπως κατάρτιση αυτή βέλος, ώστε να είναι στραμμένες προς ένα 436 00:20:26,520 --> 00:20:27,940 στο ίδιο. 437 00:20:27,940 --> 00:20:30,400 Και τότε Φεύγω εάν η λίστα δεν είναι ίση με null. 438 00:20:30,400 --> 00:20:31,740 Και δεν είναι αυτή τη φορά. 439 00:20:31,740 --> 00:20:35,580 Στη συνέχεια, Πάω να κάνουμε λίστα προηγούμενη παίρνει δείκτη. 440 00:20:35,580 --> 00:20:39,700 >> Έτσι λίστα προηγούμενη παίρνει PTR. 441 00:20:39,700 --> 00:20:44,300 Έτσι αυτό έχει ως αποτέλεσμα την τοποθέτηση ένα γραφικό βέλος εδώ. 442 00:20:44,300 --> 00:20:46,930 Και ότι είναι να πάρει μια μικρή κυματιστό, οι γραμμές. 443 00:20:46,930 --> 00:20:50,780 Και στη συνέχεια, τέλος, μπορώ να ενημερώσω λίστα να επισημάνω pointer. 444 00:20:50,780 --> 00:20:55,560 Μέχρι τώρα αυτά τα σημεία σε αυτόν τον τύπο. 445 00:20:55,560 --> 00:20:57,170 Και τώρα, ας κάνουμε μια γρήγορη ελέγχου ασφαλείας. 446 00:20:57,170 --> 00:20:59,470 >> Εδώ είναι η λίστα, η οποία είναι η παγκόσμια μεταβλητή. 447 00:20:59,470 --> 00:21:02,850 Ο πρώτος κόμβος είναι, πράγματι, 34, διότι Είμαι μετά από αυτό το βέλος. 448 00:21:02,850 --> 00:21:05,210 Και αυτό είναι σωστό, γιατί θέλω να τοποθετήστε στην αρχή της λίστας 449 00:21:05,210 --> 00:21:06,070 όλα τα νέα κόμβους. 450 00:21:06,070 --> 00:21:08,860 Επόμενο πεδίο του με οδηγεί σε αυτόν τον άνθρωπο. 451 00:21:08,860 --> 00:21:10,710 Αν μπορώ να συνεχίσω, χτύπησα επόμενο είναι null. 452 00:21:10,710 --> 00:21:11,760 Έτσι, δεν υπάρχει ακόμα λίστα. 453 00:21:11,760 --> 00:21:14,460 Αν χτύπησα προηγούμενο, παίρνω πίσω που περιμένω. 454 00:21:14,460 --> 00:21:16,435 >> Έτσι, υπάρχουν ακόμα μερικοί δείκτες, προφανώς, να χειραγωγήσουν. 455 00:21:16,435 --> 00:21:19,870 Αλλά το γεγονός ότι σας είπαν να κάνετε αυτό σε σταθερό χρόνο σας σημαίνει μόνο 456 00:21:19,870 --> 00:21:22,910 έχει έναν πεπερασμένο αριθμό των πραγμάτων έχετε τη δυνατότητα να κάνετε. 457 00:21:22,910 --> 00:21:24,290 Και τι είναι αυτός ο αριθμός; 458 00:21:24,290 --> 00:21:25,185 Θα μπορούσε να είναι ένα βήμα. 459 00:21:25,185 --> 00:21:25,700 Θα μπορούσε να είναι δύο. 460 00:21:25,700 --> 00:21:26,820 Θα μπορούσε να είναι 1000 βήματα. 461 00:21:26,820 --> 00:21:30,500 Αλλά είναι πεπερασμένο, το οποίο σημαίνει ότι δεν μπορείτε να Οι κάθε είδους looping σε εξέλιξη 462 00:21:30,500 --> 00:21:32,010 εδώ, δεν αναδρομή, χωρίς βρόγχους. 463 00:21:32,010 --> 00:21:37,390 Είναι μόλις πήρε να είναι δύσκολο κωδικοποιημένων γραμμών του κώδικα, καθώς έχουμε σε αυτό το δείγμα. 464 00:21:37,390 --> 00:21:42,330 >> Έτσι, το επόμενο πρόβλημα 12 μας ζήτησε να ολοκληρωθεί η εφαρμογή της αφαίρεση 465 00:21:42,330 --> 00:21:46,740 κάτω κατά τέτοιο τρόπο ώστε να απομακρύνει n από τον κατάλογο σε γραμμικό χρόνο. 466 00:21:46,740 --> 00:21:48,740 Έτσι, έχετε λίγο περισσότερο περιθώρια κουνάω τώρα. 467 00:21:48,740 --> 00:21:52,380 Μπορείτε να υποθέσετε ότι n, αν υπάρχει στον κατάλογο, θα είναι παρούσα 468 00:21:52,380 --> 00:21:53,340 όχι περισσότερο από μία φορά. 469 00:21:53,340 --> 00:21:56,770 Και αυτό επίσης είναι γραφτό να γίνει ένα κουίζ που βασίζονται απλουστευτική παραδοχή, τόσο 470 00:21:56,770 --> 00:21:59,780 ότι αν βρείτε τον αριθμό 50 κάπου στη λίστα, δεν χρειάζεται να 471 00:21:59,780 --> 00:22:02,890 έχετε να ανησυχείτε για τη συνέχιση της επαναλήψεις, ψάχνει για κάθε πιθανή 472 00:22:02,890 --> 00:22:06,990 αντίγραφο του 50, η οποία θα μεταβιβάσει μόνο σε κάποια minutia σε περιορισμένο χρονικό διάστημα. 473 00:22:06,990 --> 00:22:10,460 >> Έτσι, με αφαίρεση, αυτό ήταν σίγουρα πιο δύσκολο και πιο 474 00:22:10,460 --> 00:22:11,640 κώδικα για να γράψει. 475 00:22:11,640 --> 00:22:14,990 Αλλά με την πρώτη ματιά, ειλικρινά, ότι θα μπορούσε φανεί συντριπτική και σαν κάτι 476 00:22:14,990 --> 00:22:17,060 δεν υπάρχει κανένας τρόπος που θα μπορούσε να έχει καταλήξουμε σε ένα κουίζ. 477 00:22:17,060 --> 00:22:22,450 Αλλά αν έχουμε επικεντρωθεί σε επιμέρους βήματα, ελπίζουμε, θα ξαφνικά 478 00:22:22,450 --> 00:22:26,060 χτυπάτε ότι καθένα από αυτά τα μεμονωμένα βήματα καθιστά προφανή αίσθηση 479 00:22:26,060 --> 00:22:27,080 εκ των υστέρων. 480 00:22:27,080 --> 00:22:28,200 Έτσι, ας ρίξουμε μια ματιά. 481 00:22:28,200 --> 00:22:32,570 >> Έτσι, η πρώτη, έχουμε προετοιμαστεί δείκτη να είναι η ίδια λίστα. 482 00:22:32,570 --> 00:22:36,040 Επειδή θέλω γραμμικό χρόνο, αυτό σημαίνει Πάω να έχουν κάποια βρόχο. 483 00:22:36,040 --> 00:22:39,730 Και ένας κοινός τρόπος για να μετακινηθείτε πάνω από το κόμβων σε μια δομή λίστας ή οποιουδήποτε είδους 484 00:22:39,730 --> 00:22:43,860 της δομής επαναληπτικά είναι να λάβει ένα δείκτη προς το μπροστινό μέρος του στοιχείων 485 00:22:43,860 --> 00:22:46,990 δομή και στη συνέχεια, μόλις αρχίσει ενημέρωση αυτό και τα πόδια το δρόμο σας 486 00:22:46,990 --> 00:22:48,650 μέσω της δομής των δεδομένων. 487 00:22:48,650 --> 00:22:50,040 Έτσι, Πάω να κάνουμε ακριβώς αυτό. 488 00:22:50,040 --> 00:22:54,260 >> Ενώ δείκτη, προσωρινή μεταβλητή μου, δεν είναι ίση με null, ας 489 00:22:54,260 --> 00:22:55,660 να προχωρήσει και να ελέγξετε. 490 00:22:55,660 --> 00:22:56,910 Μήπως είμαι τυχερός; 491 00:22:56,910 --> 00:23:01,740 Είναι το πεδίο n στον κόμβο είμαι σήμερα κοιτάζοντας ίσο με το 492 00:23:01,740 --> 00:23:03,380 Αριθμός ψάχνω; 493 00:23:03,380 --> 00:23:05,410 Και αν ναι, ας κάνουμε κάτι. 494 00:23:05,410 --> 00:23:10,020 Τώρα, αν παρατηρήσετε αυτό τον όρο περιβάλλει ολόκληρο 495 00:23:10,020 --> 00:23:11,520 παρακάτω γραμμές κώδικα. 496 00:23:11,520 --> 00:23:14,610 Αυτό είναι το μόνο που με νοιάζει - βρίσκοντας έναν αριθμό σε ερώτηση. 497 00:23:14,610 --> 00:23:18,010 Έτσι, δεν υπάρχει άλλο, το οποίο απλοποιεί εννοιολογικά τα πράγματα λίγο. 498 00:23:18,010 --> 00:23:22,040 >> Αλλά τώρα, κατάλαβα, και μπορεί να έχετε υλοποιηθεί μόνο αυτό μετά από σκέψη 499 00:23:22,040 --> 00:23:24,720 μέσα από ένα κομμάτι, υπάρχει στην πραγματικότητα δύο περιπτώσεις εδώ. 500 00:23:24,720 --> 00:23:28,060 Το ένα είναι όπου ο κόμβος είναι κατά τη αρχή της λίστας, η οποία είναι μια 501 00:23:28,060 --> 00:23:31,040 λίγο ενοχλητικό, γιατί αυτό είναι ένα ειδική περίπτωση, γιατί θα έχουν να αντιμετωπίσουν 502 00:23:31,040 --> 00:23:33,340 με αυτό το πράγμα, το οποίο είναι η μόνη ανωμαλία. 503 00:23:33,340 --> 00:23:35,720 Οπουδήποτε αλλού στον κατάλογο, είναι το ίδιο πράγμα. 504 00:23:35,720 --> 00:23:38,050 Υπάρχει ένα προηγούμενο κόμβο και το επόμενο κόμβο, τον προηγούμενο κόμβο, το επόμενο κόμβο. 505 00:23:38,050 --> 00:23:40,940 Αλλά αυτός ο τύπος είναι λίγο ειδική αν είναι στην αρχή. 506 00:23:40,940 --> 00:23:48,710 >> Έτσι, αν ο δείκτης ισούται με τη λίστα μόνη της, οπότε αν είμαι στην αρχή του 507 00:23:48,710 --> 00:23:53,960 ο κατάλογος και έχω βρεθεί n, χρειάζομαι να κάνει μερικά πράγματα. 508 00:23:53,960 --> 00:23:59,230 Ένα, θα πρέπει να αλλάξει σε λίστα σημείο στο επόμενο πεδίο, 50. 509 00:23:59,230 --> 00:24:01,270 Έτσι, ας υποθέσουμε ότι εγώ προσπαθώ για την απομάκρυνση 34. 510 00:24:01,270 --> 00:24:03,560 Έτσι, αυτός ο τύπος πρέπει να πάει μέσα σε μόλις μια στιγμή. 511 00:24:03,560 --> 00:24:07,210 >> Έτσι, Πάω να πω, λίστα pointer παίρνει το επόμενο. 512 00:24:07,210 --> 00:24:08,570 Λοιπόν, αυτό είναι δείκτης. 513 00:24:08,570 --> 00:24:10,360 Επόμενο είναι στραμμένο προς τα εδώ. 514 00:24:10,360 --> 00:24:17,470 Έτσι, αυτό αλλάζει αυτό το δεξί βέλος τώρα να επισημάνω σε αυτόν τον άνθρωπο εδώ. 515 00:24:17,470 --> 00:24:19,580 Τώρα, να θυμάστε, έχουμε μια προσωρινή μεταβλητή. 516 00:24:19,580 --> 00:24:23,520 Έτσι, δεν έχουμε καμία ορφανά κόμβους, γιατί και εγώ έχω αυτόν τον τύπο κατά τη γνώμη μου 517 00:24:23,520 --> 00:24:25,010 εφαρμογή του αφαίρεση. 518 00:24:25,010 --> 00:24:29,600 Έτσι τώρα, αν η ίδια η λίστα δεν είναι null, Θα πρέπει να καθοριστεί κάτι. 519 00:24:29,600 --> 00:24:32,690 >> Πρέπει τώρα να διασφαλίσουμε ότι αυτό το βέλος, το οποίο προηγουμένως κατάδειξης 520 00:24:32,690 --> 00:24:36,830 50-34, αυτό πρέπει να πάει μακριά, γιατί αν προσπαθώ να απαλλαγούμε 521 00:24:36,830 --> 00:24:41,910 34, 50 είχαν καλύτερα να μην διατηρεί καμία το είδος της αναφοράς πίσω σε αυτό, όπως η 522 00:24:41,910 --> 00:24:42,820 βέλος πρότεινε. 523 00:24:42,820 --> 00:24:44,820 Γι 'αυτό ακριβώς έκανα αυτή τη γραμμή. 524 00:24:44,820 --> 00:24:46,520 Έτσι, στη συνέχεια, τέλειωσα. 525 00:24:46,520 --> 00:24:48,040 Η υπόθεση αυτή είναι πραγματικά αρκετά εύκολο. 526 00:24:48,040 --> 00:24:51,010 Κόβοντας το κεφάλι της λίστας είναι σχετικά απλή. 527 00:24:51,010 --> 00:24:52,980 >> Δυστυχώς, υπάρχει αυτή η ενοχλητικό άλλο μπλοκ. 528 00:24:52,980 --> 00:24:56,170 Μέχρι τώρα, έχω να εξετάσει την περίπτωση όπου υπάρχει κάτι στη μέση. 529 00:24:56,170 --> 00:24:59,880 Αλλά δεν είναι πολύ φοβερό, εκτός για σύνταξη σαν αυτό. 530 00:24:59,880 --> 00:25:03,080 Έτσι, αν δεν είμαι στην αρχή της λίστα, είμαι κάπου στη μέση. 531 00:25:03,080 --> 00:25:08,160 Και αυτή η γραμμή εδώ λέει, έναρξη σε ό, τι κόμβο είστε. 532 00:25:08,160 --> 00:25:11,210 533 00:25:11,210 --> 00:25:18,550 Μετάβαση στο επόμενο πεδίο του προηγούμενου κόμβου και το σημείο ότι στο δείκτη. 534 00:25:18,550 --> 00:25:20,390 >> Ας κάνουμε αυτό εικονογραφικά. 535 00:25:20,390 --> 00:25:21,640 Αυτό ήταν να πάρει περίπλοκη. 536 00:25:21,640 --> 00:25:30,480 537 00:25:30,480 --> 00:25:37,990 Έτσι, αν έχω προηγούμενα πεδία εδώ - ας το κάνουμε αυτό - επόμενη τομείς εδώ. 538 00:25:37,990 --> 00:25:41,200 Πάω να απλοποιήσει τους δείκτες μου και όχι από σχεδιάσετε ένα σωρό 539 00:25:41,200 --> 00:25:45,710 τα πράγματα και πίσω διασταυρώνονται κάθε άλλο. 540 00:25:45,710 --> 00:25:50,870 Και τώρα, ας πούμε ότι αυτό είναι 1, 2, 3 για χάρη της συζήτησης, ακόμη 541 00:25:50,870 --> 00:25:53,410 αν και αυτό δεν είναι ευθυγραμμισμένο με το εν λόγω πρόβλημα. 542 00:25:53,410 --> 00:25:55,900 >> Έτσι, εδώ είναι συνδεδεμένη λίστα μου. 543 00:25:55,900 --> 00:25:59,300 Είμαι προσπαθεί να αφαιρέσει δύο σε αυτό συγκεκριμένη εκδοχή της ιστορίας. 544 00:25:59,300 --> 00:26:01,960 Έτσι έχω ενημερωθεί δείκτη σε να δείχνει σε αυτόν τον άνθρωπο. 545 00:26:01,960 --> 00:26:03,315 Έτσι, αυτό είναι το PTR. 546 00:26:03,315 --> 00:26:04,530 Έχει δείχνει εδώ. 547 00:26:04,530 --> 00:26:07,170 Αυτή είναι η λίστα, η οποία υπάρχει σε παγκόσμιο επίπεδο όπως και πριν. 548 00:26:07,170 --> 00:26:09,200 Και αυτός είναι προς τα εδώ δεν έχει σημασία τι. 549 00:26:09,200 --> 00:26:10,800 Και τώρα, προσπαθώ να αφαιρέσει δύο. 550 00:26:10,800 --> 00:26:13,850 >> Έτσι, αν δείκτης δείχνει εδώ, είμαι πρόκειται να ακολουθήσει, προφανώς, η 551 00:26:13,850 --> 00:26:17,110 προηγούμενο δείκτη, που με βάζει σε 1. 552 00:26:17,110 --> 00:26:22,290 Είμαι στη συνέχεια πρόκειται να πει ότι η επόμενη πεδίο, το οποίο με φέρνει πάνω σε αυτό 553 00:26:22,290 --> 00:26:25,410 box εδώ, πρόκειται να ίση δείκτη επόμενο. 554 00:26:25,410 --> 00:26:28,400 Έτσι, αν αυτό το δείκτη, αυτό είναι το επόμενο. 555 00:26:28,400 --> 00:26:31,840 Αυτό σημαίνει ότι αυτό το βέλος ανάγκες να επισημάνω σε αυτόν τον άνθρωπο. 556 00:26:31,840 --> 00:26:35,140 >> Έτσι, αυτό που η γραμμή του κώδικα έχει μόνο γίνει είναι λίγο αυτό. 557 00:26:35,140 --> 00:26:37,500 Και τώρα, αυτό μοιάζει με μια βήμα προς τη σωστή κατεύθυνση. 558 00:26:37,500 --> 00:26:41,390 Εμείς θέλουμε ουσιαστικά να κόβουν από 2 του μέσου των 1 και 3. 559 00:26:41,390 --> 00:26:44,400 Έτσι είναι λογικό ότι θέλουμε να διαδρομή αυτού του δείκτη γύρω από αυτό. 560 00:26:44,400 --> 00:26:50,400 Έτσι, αυτή η επόμενη γραμμή είναι να ελέγξετε αν το δείκτη επόμενο δεν είναι null, δεν υπάρχει 561 00:26:50,400 --> 00:26:54,200 πράγματι κάποιος το δικαίωμα των 2, αυτό σημαίνει ότι έχουμε επίσης να κάνουμε 562 00:26:54,200 --> 00:26:55,850 ένα μικρό απόκομμα εδώ. 563 00:26:55,850 --> 00:27:00,590 >> Γι 'αυτό τώρα πρέπει να ακολουθήσουν αυτόν το δείκτη και να ενημερώσετε το προηγούμενο δείκτη για 564 00:27:00,590 --> 00:27:05,410 αυτός ο τύπος να κάνει ένα μικρό κομμάτι ενός παρακάμψετε εδώ το σημείο εδώ. 565 00:27:05,410 --> 00:27:07,100 Και τώρα, οπτικά αυτό είναι ωραίο. 566 00:27:07,100 --> 00:27:11,930 Είναι λίγο ακατάστατο στο ότι υπάρχει κανείς δεν δείχνει στο 2 πια. 567 00:27:11,930 --> 00:27:13,600 2 είναι στραμμένη προς τα αριστερά. 568 00:27:13,600 --> 00:27:14,980 Και 2 είναι στραμμένη προς τα δεξιά. 569 00:27:14,980 --> 00:27:17,480 Αλλά μπορεί να κάνει ό, τι θέλει, γιατί είναι έτοιμος να πάρει απελευθερωθεί. 570 00:27:17,480 --> 00:27:19,480 Και δεν έχει σημασία τι αυτές οι τιμές είναι πια. 571 00:27:19,480 --> 00:27:23,040 >> Αυτό που είναι σημαντικό είναι ότι το υπόλοιπο Τα παιδιά δρομολόγησης παραπάνω 572 00:27:23,040 --> 00:27:24,280 και κάτω από αυτόν τώρα. 573 00:27:24,280 --> 00:27:25,810 Και πράγματι, αυτό είναι που θα κάνουμε στη συνέχεια. 574 00:27:25,810 --> 00:27:29,360 Εμείς δωρεάν δείκτη, πράγμα που σημαίνει ότι πει η το λειτουργικό σύστημα, είστε ευπρόσδεκτοι 575 00:27:29,360 --> 00:27:30,906 να διεκδικήσει αυτό. 576 00:27:30,906 --> 00:27:34,900 Και στη συνέχεια, τέλος, θα επιστρέψει. 577 00:27:34,900 --> 00:27:37,220 Αλλιώς σιωπηρά, αν δεν έχουν επιστρέψει ακόμα, 578 00:27:37,220 --> 00:27:38,290 έχουμε να συνεχίσετε να ψάχνετε. 579 00:27:38,290 --> 00:27:41,485 Έτσι δείκτης ισούται με το δείκτη δίπλα ακριβώς σημαίνει να μετακινήσετε αυτόν τον τύπο εδώ. 580 00:27:41,485 --> 00:27:42,600 Μετακινήστε αυτόν τον τύπο εδώ. 581 00:27:42,600 --> 00:27:45,400 Μετακινήστε αυτόν τον τύπο εδώ αν, στην πραγματικότητα, δεν βρήκαμε τον αριθμό 582 00:27:45,400 --> 00:27:46,960 ψάχνουμε ακόμη για. 583 00:27:46,960 --> 00:27:49,630 >> Έτσι, ειλικρινά, φαίνεται εντελώς συντριπτική, νομίζω, κατά την πρώτη 584 00:27:49,630 --> 00:27:52,180 ματιά, ειδικά αν έχετε παλέψει με αυτό κατά τη διάρκεια του κουίζ στη συνέχεια να δούμε 585 00:27:52,180 --> 00:27:52,850 κάτι σαν αυτό. 586 00:27:52,850 --> 00:27:55,050 Και εσείς τον εαυτό σας ελαφρύ κτύπημα στην πλάτη. 587 00:27:55,050 --> 00:27:57,080 Λοιπόν, δεν υπάρχει κανένας τρόπος που θα μπορούσε να έχει καταλήξει ότι στο κουίζ. 588 00:27:57,080 --> 00:28:00,470 Αλλά θα έλεγα, μπορείτε αν σπάσει προς τα κάτω σε αυτές τις μεμονωμένες 589 00:28:00,470 --> 00:28:04,400 περιπτώσεις και μόνο με τα πόδια μέσα από αυτό προσεκτικά, αν και, κατά γενική ομολογία, υπό 590 00:28:04,400 --> 00:28:06,300 στρεσογόνες συνθήκες. 591 00:28:06,300 --> 00:28:09,470 >> Ευτυχώς, η εικόνα που πάντα ευτυχισμένοι. 592 00:28:09,470 --> 00:28:11,050 Θα μπορούσε να αντλήσει αυτό οποιοδήποτε αριθμό τρόπων. 593 00:28:11,050 --> 00:28:12,760 Δεν χρειάζεται να κάνουν το διασταυρώνονται πράγμα εδώ. 594 00:28:12,760 --> 00:28:14,520 Θα μπορούσατε να το κάνετε με ευθείες γραμμές όπως αυτό. 595 00:28:14,520 --> 00:28:18,790 Αλλά η ουσία του προβλήματος αυτού, σε Γενικά, ήταν να συνειδητοποιήσουμε ότι η 596 00:28:18,790 --> 00:28:22,060 εικόνα στο τέλος θα πρέπει να κοιτάξουμε λίγο κάτι σαν αυτό, γιατί 597 00:28:22,060 --> 00:28:25,030 συνεχή φορά άφησε να εννοηθεί ότι θα κρατήσει εμπλοκές και εμπλοκές και εμπλοκές της 598 00:28:25,030 --> 00:28:29,900 νέων κόμβων στην αρχή του καταλόγου. 599 00:28:29,900 --> 00:28:31,960 Οποιεσδήποτε ερωτήσεις; 600 00:28:31,960 --> 00:28:34,565 Πιθανώς το πιο δύσκολο από σίγουρα η κωδικοποίηση ερωτήσεις. 601 00:28:34,565 --> 00:28:37,690 >> ΚΟΙΝΟ: Έτσι είναι η λίστα παρόμοια με κεφάλι στα προηγούμενα παραδείγματα. 602 00:28:37,690 --> 00:28:39,640 >> DAVID J. MALAN: Ακριβώς, ακριβώς. 603 00:28:39,640 --> 00:28:43,130 Απλά ένα διαφορετικό όνομα για μια καθολική μεταβλητή. 604 00:28:43,130 --> 00:28:44,380 Σε παγκόσμιο επίπεδο, τι; 605 00:28:44,380 --> 00:28:48,880 606 00:28:48,880 --> 00:28:49,730 >> ROB BOWDEN: OK. 607 00:28:49,730 --> 00:28:52,020 Έτσι, αυτό είναι το ένα, όπου μπορείτε Έπρεπε να γράψει το σημείο. 608 00:28:52,020 --> 00:28:56,060 Μερικοί άνθρωποι έγραψαν δοκίμια για το θέμα αυτό. 609 00:28:56,060 --> 00:29:00,230 Αλλά το μόνο που χρειάζεται να χρησιμοποιήσετε αυτές τις έξι όρους για να περιγράψει τι συμβαίνει όταν 610 00:29:00,230 --> 00:29:02,440 θα προσπαθήσει να επικοινωνήσει με facebook.com. 611 00:29:02,440 --> 00:29:07,930 Γι 'αυτό θα μιλήσω μόνο μέσω της διαδικασίας χρήση όλων αυτών των όρων. 612 00:29:07,930 --> 00:29:11,290 Έτσι, στο πρόγραμμα περιήγησής μας, πληκτρολογήστε facebook.com και πατήστε Enter. 613 00:29:11,290 --> 00:29:17,280 Έτσι, το πρόγραμμα περιήγησης μας πρόκειται να κατασκευάσει ένα HTTP ζητήσει ότι πρόκειται να στείλει 614 00:29:17,280 --> 00:29:22,220 μέσα από κάποια διαδικασία στο Facebook για Facebook για να μας απαντήσουν με το 615 00:29:22,220 --> 00:29:24,450 HTML της σελίδας του. 616 00:29:24,450 --> 00:29:28,800 >> Έτσι ποια είναι η διαδικασία με την οποία η αίτηση HTTP 617 00:29:28,800 --> 00:29:30,730 παίρνει πραγματικά στο Facebook; 618 00:29:30,730 --> 00:29:32,790 Έτσι, η πρώτη, θα πρέπει να μεταφράσει Facebook.com. 619 00:29:32,790 --> 00:29:38,780 Έτσι μόλις δοθεί το όνομα Facebook.com, όταν κάνει πραγματικότητα το αίτημα HTTP 620 00:29:38,780 --> 00:29:39,940 Πρέπει να πάτε; 621 00:29:39,940 --> 00:29:44,120 Πρέπει, λοιπόν, να μεταφράσει Facebook.com σε μια διεύθυνση IP, που με μοναδικό τρόπο 622 00:29:44,120 --> 00:29:47,620 προσδιορίζει τι μηχανή που πραγματικά θέλετε να στείλετε το αίτημα αυτό. 623 00:29:47,620 --> 00:29:49,310 Ο φορητός υπολογιστής σας έχει μια διεύθυνση IP. 624 00:29:49,310 --> 00:29:52,240 Οτιδήποτε συνδέεται στο διαδίκτυο έχει μια διεύθυνση IP. 625 00:29:52,240 --> 00:29:59,030 >> Έτσι, DNS, Domain Name System, που είναι τι πρόκειται να αναλάβουμε τη μετάφραση 626 00:29:59,030 --> 00:30:03,750 από facebook.com σε μια διεύθυνση IP που που πραγματικά θέλετε να επικοινωνήσετε. 627 00:30:03,750 --> 00:30:08,075 Έτσι, ερχόμαστε σε επαφή με τους διακομιστές DNS και ας πούμε, τι είναι facebook.com; 628 00:30:08,075 --> 00:30:16,560 Λέει, το OH, αυτό είναι η διεύθυνση IP 190,212 κάτι, κάτι, κάτι. 629 00:30:16,560 --> 00:30:16,900 Εντάξει. 630 00:30:16,900 --> 00:30:18,850 Τώρα, ξέρω τι μηχανή Θέλω να επικοινωνήσω. 631 00:30:18,850 --> 00:30:22,360 >> Έτσι, τότε μπορείτε να στείλετε το αίτημα σας HTTP πάνω σε αυτό το μηχάνημα. 632 00:30:22,360 --> 00:30:24,140 Έτσι, πώς να το φτάσουμε σε αυτό το μηχάνημα; 633 00:30:24,140 --> 00:30:27,200 Λοιπόν, το αίτημα πηγαίνει από το router γερός. 634 00:30:27,200 --> 00:30:32,630 Θυμηθείτε το παράδειγμα στην τάξη, όπου είδαμε πραγματικά την πορεία που ακολουθεί το 635 00:30:32,630 --> 00:30:35,340 πακέτα πήρε όταν προσπαθήσαμε να επικοινωνούν. 636 00:30:35,340 --> 00:30:38,460 Είδαμε να πηδήξει πάνω από τον Ατλαντικό Ocean σε ένα σημείο ή οτιδήποτε άλλο. 637 00:30:38,460 --> 00:30:42,820 >> Έτσι, το τελευταίο διάστημα το λιμάνι. 638 00:30:42,820 --> 00:30:46,520 Έτσι, αυτό είναι τώρα στον υπολογιστή σας. 639 00:30:46,520 --> 00:30:49,970 Μπορείτε να έχετε πολλαπλές πράγματα σήμερα επικοινωνεί με το διαδίκτυο. 640 00:30:49,970 --> 00:30:53,730 Γι 'αυτό και μπορεί να τρέχει, ας πούμε, το Skype. 641 00:30:53,730 --> 00:30:55,670 Θα μπορούσα να έχω ένα web browser ανοιχτό. 642 00:30:55,670 --> 00:30:59,010 Μπορεί να έχω κάτι που torrenting αρχεία. 643 00:30:59,010 --> 00:31:00,880 Έτσι, όλα αυτά τα πράγματα είναι που επικοινωνεί με το 644 00:31:00,880 --> 00:31:02,600 διαδίκτυο με κάποιο τρόπο. 645 00:31:02,600 --> 00:31:08,070 >> Έτσι, όταν ο υπολογιστής σας λαμβάνει κάποια δεδομένα από το διαδίκτυο, πώς το κάνει 646 00:31:08,070 --> 00:31:10,130 γνωρίζουν τι πραγματικά εφαρμογής θέλει τα δεδομένα; 647 00:31:10,130 --> 00:31:12,610 Πώς να ξέρω αν αυτό το συγκεκριμένο δεδομένων προορίζεται για την 648 00:31:12,610 --> 00:31:16,070 torrenting εφαρμογή σε αντιδιαστολή στο πρόγραμμα περιήγησης στο Web; 649 00:31:16,070 --> 00:31:20,980 Έτσι, αυτός είναι ο σκοπός των λιμένων που όλες αυτές οι εφαρμογές έχουν 650 00:31:20,980 --> 00:31:22,720 υποστήριξε μια θύρα του υπολογιστή σας. 651 00:31:22,720 --> 00:31:27,580 Έτσι, web browser σας λέει, hey, Είμαι ακρόαση στη θύρα 1000. 652 00:31:27,580 --> 00:31:32,240 Και το πρόγραμμα torrenting σας λέει, Είμαι ακρόαση στη θύρα 3000. 653 00:31:32,240 --> 00:31:34,770 Και Skype λέει, είμαι χρησιμοποιώντας τη θύρα 4000. 654 00:31:34,770 --> 00:31:41,950 >> Έτσι, όταν θα έχετε κάποια στοιχεία που ανήκει σε μία από αυτές τις εφαρμογές, τα δεδομένα 655 00:31:41,950 --> 00:31:45,510 επισημαίνεται με τη θύρα πραγματικά πρέπει να αποστέλλονται μαζί με. 656 00:31:45,510 --> 00:31:47,950 Έτσι, αυτό λέει, ω, ανήκω στη θύρα 1000. 657 00:31:47,950 --> 00:31:50,950 Ξέρω τότε θα πρέπει να διαβιβάσει αυτό μαζί με πρόγραμμα περιήγησης στο web μου. 658 00:31:50,950 --> 00:31:56,440 Έτσι, ο λόγος που είναι σχετικές εδώ είναι ότι οι web server τείνουν να 659 00:31:56,440 --> 00:31:58,240 ακρόαση στη θύρα 80. 660 00:31:58,240 --> 00:32:02,420 Έτσι, όταν μπορώ να επικοινωνήσω με Facebook.com, είμαι επικοινωνεί με κάποια μηχανή. 661 00:32:02,420 --> 00:32:06,390 Αλλά πρέπει να πω ποια θύρα του ότι μηχάνημα θέλω να επικοινωνήσω με. 662 00:32:06,390 --> 00:32:09,160 Και διακομιστές web τείνουν να είναι ακρόαση στη θύρα 80. 663 00:32:09,160 --> 00:32:14,010 >> Αν ήθελαν, θα μπορούσαν να το ρυθμίσετε έτσι απαριθμεί όπως στη θύρα 7000. 664 00:32:14,010 --> 00:32:19,090 Και στη συνέχεια, σε ένα πρόγραμμα περιήγησης στο web, θα μπορούσα πληκτρολογώντας Facebook.com: 7000 έως 665 00:32:19,090 --> 00:32:24,600 αποστέλλει το αίτημα στη θύρα 7000 του web server του Facebook. 666 00:32:24,600 --> 00:32:26,820 >> DAVID J. MALAN: Και σε αυτή την περίπτωση, ακόμα και παρόλο που δεν απαιτούν ότι οι άνθρωποι 667 00:32:26,820 --> 00:32:30,000 Το αναφέρω αυτό, στην περίπτωση αυτή, ποια θύρα Θα το αίτημα πραγματικά να πάει να? 668 00:32:30,000 --> 00:32:36,630 669 00:32:36,630 --> 00:32:37,880 Δοκιμάστε ξανά. 670 00:32:37,880 --> 00:32:42,810 671 00:32:42,810 --> 00:32:44,300 Ακριβώς. 672 00:32:44,300 --> 00:32:47,960 Δεν ψάχνει για αυτό, αλλά μια λεπτότητα ότι δεν υπάρχει κανένας το τελευταίο. 673 00:32:47,960 --> 00:32:51,770 >> ROB BOWDEN: Έτσι, το HTTPS, δεδομένου ότι είναι ακούγοντας ειδικά για το 674 00:32:51,770 --> 00:32:55,180 κρυπτογραφημένα, είναι στη θύρα 4430. 675 00:32:55,180 --> 00:32:57,680 >> ΚΟΙΝΟ: Και τα μηνύματα είναι 25, σωστά; 676 00:32:57,680 --> 00:33:00,670 >> DAVID J. MALAN: Εξερχόμενος emails, 25, ναι. 677 00:33:00,670 --> 00:33:03,760 >> ROB BOWDEN: Εγώ δεν ξέρω καν οι περισσότεροι από η - όλα από τα χαμηλότερα αυτά τείνουν να είναι 678 00:33:03,760 --> 00:33:06,310 προορίζεται για τα πράγματα. 679 00:33:06,310 --> 00:33:09,260 Νομίζω ότι τα πάντα κάτω από 1024 είναι δεσμευμένο. 680 00:33:09,260 --> 00:33:13,450 >> ΚΟΙΝΟ: Γιατί το είπες 3 ήταν το λάθος αριθμό; 681 00:33:13,450 --> 00:33:18,820 >> ROB BOWDEN: Επειδή σε μια διεύθυνση IP, υπάρχει τέσσερις ομάδες ψηφίων. 682 00:33:18,820 --> 00:33:21,090 Και είναι από 0 έως 255. 683 00:33:21,090 --> 00:33:28,060 Έτσι 192.168.2.1 είναι μια κοινή τοπική διεύθυνση IP του δικτύου. 684 00:33:28,060 --> 00:33:30,840 Παρατηρήστε όλα αυτά είναι μικρότερη από 255. 685 00:33:30,840 --> 00:33:33,570 Έτσι, όταν άρχισα με 300, ότι δεν θα μπορούσε να έχει 686 00:33:33,570 --> 00:33:35,210 ήταν ένας από τους αριθμούς. 687 00:33:35,210 --> 00:33:38,170 >> DAVID J. MALAN: Αλλά αυτή η ανόητη clip από - ήταν CSI, όπου είχαν μια 688 00:33:38,170 --> 00:33:39,970 Αριθμός μονάδων που ήταν πολύ μεγάλο για τη διεύθυνση IP. 689 00:33:39,970 --> 00:33:42,940 690 00:33:42,940 --> 00:33:46,110 >> ROB BOWDEN: Οποιεσδήποτε ερωτήσεις σχετικά με αυτό; 691 00:33:46,110 --> 00:33:51,710 Η επόμενη, τόσο ολοκληρωτική αλλαγή το θέμα, αλλά έχουμε αυτό το PHP-array για 692 00:33:51,710 --> 00:33:53,270 τα σπίτια στο τετραπλό. 693 00:33:53,270 --> 00:33:56,360 Και έχουμε μια μη διατεταγμένη λίστα. 694 00:33:56,360 --> 00:33:59,550 Και θέλουμε να εκτυπώσει το κάθε στοιχείο της λίστας ακριβώς περιέχει το όνομα του σπιτιού. 695 00:33:59,550 --> 00:34:09,090 696 00:34:09,090 --> 00:34:11,870 Έτσι έχουμε έναν βρόχο foreach. 697 00:34:11,870 --> 00:34:17,540 Έτσι θυμηθείτε, η σύνταξη είναι foreach πίνακα ως στοιχείο της συστοιχίας. 698 00:34:17,540 --> 00:34:22,360 Έτσι μέσα από κάθε επανάληψη του βρόχου, το σπίτι πρόκειται να αναλάβει μία από τις 699 00:34:22,360 --> 00:34:24,060 τιμές στο εσωτερικό της συστοιχίας. 700 00:34:24,060 --> 00:34:26,530 >> Από την πρώτη επανάληψη, το σπίτι θα είναι Cabot House. 701 00:34:26,530 --> 00:34:30,370 Σε μια δεύτερη επανάληψη, το σπίτι θα να Courier Σπίτι και ούτω καθεξής. 702 00:34:30,370 --> 00:34:34,370 Έτσι, για κάθε quad, όπως το σπίτι, είμαστε ακριβώς πρόκειται να εκτυπώσετε - 703 00:34:34,370 --> 00:34:37,250 μπορείτε επίσης θα μπορούσε να έχει απήχηση - 704 00:34:37,250 --> 00:34:42,199 το στοιχείο της λίστας και στη συνέχεια το όνομα του σπιτιού και στη συνέχεια κλείστε το στοιχείο λίστας. 705 00:34:42,199 --> 00:34:45,210 Οι αγκύλες είναι προαιρετικές εδώ. 706 00:34:45,210 --> 00:34:49,480 >> Και τότε είπε, επίσης, στην ερώτηση η ίδια, θυμηθείτε να κλείσετε το 707 00:34:49,480 --> 00:34:50,770 μη διατεταγμένη λίστα tag. 708 00:34:50,770 --> 00:34:53,949 Γι 'αυτό και πρέπει να βγείτε από τη λειτουργία PHP για να γίνει αυτό. 709 00:34:53,949 --> 00:35:00,280 Ή θα μπορούσαμε να έχουμε επανέλαβε το κλείστε μη διατεταγμένη λίστα tag. 710 00:35:00,280 --> 00:35:02,380 >> DAVID J. MALAN: Επίσης ωραία εδώ θα ήταν να χρησιμοποιήσετε ένα παλιό σχολείο για 711 00:35:02,380 --> 00:35:07,340 βρόχο με $ i = 0 0 και χρησιμοποιώντας Η προς καταλάβουμε το μήκος της ακτίνας. 712 00:35:07,340 --> 00:35:09,240 Εντελώς πάρα πολύ ωραία, απλά λίγο wordier. 713 00:35:09,240 --> 00:35:12,170 714 00:35:12,170 --> 00:35:14,742 >> ΚΟΙΝΟ: Έτσι, αν επρόκειτο να [Δεν ακούγεται], θα κάνουμε - 715 00:35:14,742 --> 00:35:16,734 Ξεχάσω ό, τι ο βρόχος [δεν ακούγεται] είναι. 716 00:35:16,734 --> 00:35:21,380 Θα σας $ βραχίονα quad i; 717 00:35:21,380 --> 00:35:21,850 >> DAVID J. MALAN: Ακριβώς. 718 00:35:21,850 --> 00:35:23,100 Ναι, ακριβώς. 719 00:35:23,100 --> 00:35:26,650 720 00:35:26,650 --> 00:35:27,900 >> ROB BOWDEN: Τίποτα άλλο; 721 00:35:27,900 --> 00:35:31,350 722 00:35:31,350 --> 00:35:32,010 >> DAVID J. MALAN: Εντάξει. 723 00:35:32,010 --> 00:35:32,300 Εμπόριο-offs. 724 00:35:32,300 --> 00:35:38,290 Έτσι, υπήρχαν δέσμες των απαντήσεων δυνατό για καθένα από αυτά. 725 00:35:38,290 --> 00:35:40,510 Ήμασταν πολύ απλά ψάχνουν για κάτι συναρπαστικό για ένα αναποδογυρισμένο και 726 00:35:40,510 --> 00:35:41,100 ένα μειονέκτημα. 727 00:35:41,100 --> 00:35:44,830 Και το νούμερο 16 ζήτησε, την επικύρωση των χρηστών εισόδου στην πλευρά του πελάτη, όπως και με JavaScript, 728 00:35:44,830 --> 00:35:47,280 αντί των server-side, όπως με την PHP. 729 00:35:47,280 --> 00:35:49,450 Έτσι, αυτό είναι ένα θετικό στοιχείο της κάνει client-side; 730 00:35:49,450 --> 00:35:53,780 >> Λοιπόν, ένα από τα πράγματα που προτείνεται είναι ότι μείωση του χρόνου αναμονής, γιατί 731 00:35:53,780 --> 00:35:56,750 Δεν χρειάζεται να ασχοληθείτε σε επαφή με το διακομιστή, η οποία μπορεί να διαρκέσει μερικά 732 00:35:56,750 --> 00:36:00,390 χιλιοστά του δευτερολέπτου ή ακόμη και ένα ζευγάρι δευτερόλεπτα αποφεύγοντας ότι και μόνο 733 00:36:00,390 --> 00:36:04,670 επικύρωση των χρηστών εισόδου client-side από προκαλώντας μια on-χειριστή και να υποβάλει 734 00:36:04,670 --> 00:36:06,650 μόνο τον έλεγχο, έκαναν τύπου κάτι για το όνομα; 735 00:36:06,650 --> 00:36:08,080 Μήπως πληκτρολογήσετε κάτι μέσα για τη διεύθυνση ηλεκτρονικού ταχυδρομείου; 736 00:36:08,080 --> 00:36:10,950 Μήπως θα επιλέξουν έναν κοιτώνα από το drop-down μενού; 737 00:36:10,950 --> 00:36:14,360 >> Μπορείτε να τους δώσει στιγμιαία ανατροφοδότηση χρησιμοποιώντας τον υπολογιστή gigahertz 738 00:36:14,360 --> 00:36:16,770 ή ό, τι έχει αυτό είναι στην πραγματικότητα στο γραφείο τους. 739 00:36:16,770 --> 00:36:19,310 Έτσι είναι απλά μια καλύτερη χρήστη δοκιμάσει συνήθως. 740 00:36:19,310 --> 00:36:24,460 Αλλά ένα μειονέκτημα να κάνει client-side επικύρωση, αν το κάνεις χωρίς να 741 00:36:24,460 --> 00:36:29,860 κάνει επικύρωση server-side είναι ότι οι περισσότεροι καθένας που βγαίνει από CS50 ξέρει 742 00:36:29,860 --> 00:36:33,980 ότι μπορείτε απλά να στείλετε τα δεδομένα που θέλετε σε ένα διακομιστή οποιοδήποτε αριθμό από τρόπους. 743 00:36:33,980 --> 00:36:37,030 Ειλικρινά, στα περισσότερα οποιοδήποτε πρόγραμμα περιήγησης, μπορείτε να κλικ γύρω στις ρυθμίσεις και απλά 744 00:36:37,030 --> 00:36:40,110 σβήνετε τη JavaScript, τα οποία θα μπορούσε, Ως εκ τούτου, απενεργοποιήστε κάθε μορφή 745 00:36:40,110 --> 00:36:41,080 επικύρωση. 746 00:36:41,080 --> 00:36:44,460 >> Αλλά μπορείτε επίσης να θυμηθούμε ότι ακόμα και εγώ έκανε κάποιες απόκρυφες πράγματα σε τάξη με τη χρήση 747 00:36:44,460 --> 00:36:47,790 telnet και μάλιστα προσποιείται ότι είναι ένα πρόγραμμα περιήγησης με την αποστολή get 748 00:36:47,790 --> 00:36:49,240 αιτήσεις σε ένα διακομιστή. 749 00:36:49,240 --> 00:36:51,030 Και αυτό σίγουρα δεν είναι χρησιμοποιώντας οποιαδήποτε JavaScript. 750 00:36:51,030 --> 00:36:53,290 Αυτό ακριβώς μου πληκτρολογώντας εντολές σε ένα πληκτρολόγιο. 751 00:36:53,290 --> 00:36:57,410 Έτσι, πραγματικά, κάθε προγραμματιστής μέσα σε αρκετά άνεση με το διαδίκτυο και HTTP 752 00:36:57,410 --> 00:37:01,690 θα μπορούσε να στείλει οποιαδήποτε στοιχεία που θέλει σε ένα διακομιστή χωρίς επικύρωση. 753 00:37:01,690 --> 00:37:05,470 Και αν ο διακομιστής σας δεν είναι, επίσης, τον έλεγχο, δεν μου δίνουν ένα όνομα, είναι 754 00:37:05,470 --> 00:37:08,930 Αυτό πραγματικά μια έγκυρη διεύθυνση e-mail, έκανε επιλέγουν έναν κοιτώνα, ίσως να καταλήξετε 755 00:37:08,930 --> 00:37:12,800 μέχρι την εισαγωγή ανύπαρκτων ή απλά κενό δεδομένων στη βάση δεδομένων σας, η οποία κατά πάσα πιθανότητα 756 00:37:12,800 --> 00:37:15,450 Δεν πρόκειται να είναι ένα καλό πράγμα, αν θα ήταν αν υποτεθεί ότι υπήρχε. 757 00:37:15,450 --> 00:37:16,770 >> Έτσι, αυτό είναι μια ενοχλητική πραγματικότητα. 758 00:37:16,770 --> 00:37:19,890 Αλλά σε γενικές γραμμές, client-side επικύρωση είναι μεγάλη. 759 00:37:19,890 --> 00:37:21,810 Αλλά αυτό σημαίνει διπλάσια δουλειά. 760 00:37:21,810 --> 00:37:25,970 Παρά το γεγονός ότι υπάρχουν πράγματι διάφορες βιβλιοθήκες, βιβλιοθήκες JavaScript για 761 00:37:25,970 --> 00:37:28,830 παράδειγμα, που κάνουν αυτό το πολύ, πολύ λιγότερο από έναν πονοκέφαλο. 762 00:37:28,830 --> 00:37:31,940 Και μπορείτε να χρησιμοποιήσετε ξανά μερικά από τα κωδικού server-side, client-side. 763 00:37:31,940 --> 00:37:35,980 Αλλά συνειδητοποιούν ότι είναι συνήθως πρόσθετη εργασία. 764 00:37:35,980 --> 00:37:36,415 Ναι. 765 00:37:36,415 --> 00:37:37,792 >> ΚΟΙΝΟ: Έτσι, αν εμείς απλά είπε ο λιγότερο ασφαλής - 766 00:37:37,792 --> 00:37:39,205 >> DAVID J. MALAN: [Γελάει] 767 00:37:39,205 --> 00:37:39,680 Ugh. 768 00:37:39,680 --> 00:37:43,105 Αυτά είναι πάντα το πιο δύσκολο αυτοί να αποφανθεί. 769 00:37:43,105 --> 00:37:44,480 >> ROB BOWDEN: Αυτό θα έχουν γίνει αποδεκτές. 770 00:37:44,480 --> 00:37:44,810 >> DAVID J. MALAN: Τι; 771 00:37:44,810 --> 00:37:45,810 >> ROB BOWDEN: Δημιούργησα αυτό το πρόβλημα. 772 00:37:45,810 --> 00:37:46,735 Αυτό θα μπορούσε να γίνει αποδεκτή. 773 00:37:46,735 --> 00:37:47,220 >> DAVID J. MALAN: Ναι. 774 00:37:47,220 --> 00:37:47,830 >> ΚΟΙΝΟ: Cool. 775 00:37:47,830 --> 00:37:51,770 >> ROB BOWDEN: Αλλά δεν αποδέχονται για το πρώτο - 776 00:37:51,770 --> 00:37:53,630 καλά, αυτό που ψάχναμε για είναι κάτι σαν να μην χρειάζεται να 777 00:37:53,630 --> 00:37:55,270 επικοινωνία με το διακομιστή. 778 00:37:55,270 --> 00:37:58,355 Δεν δεχόμαστε μόνο πιο γρήγορα. 779 00:37:58,355 --> 00:38:00,080 >> ΚΟΙΝΟ: Τι γίνεται με Δεν επανάληψη φόρτωσης της σελίδας; 780 00:38:00,080 --> 00:38:00,430 >> ROB BOWDEN: Ναι. 781 00:38:00,430 --> 00:38:03,000 Αυτό ήταν μια αποδεκτή απάντηση. 782 00:38:03,000 --> 00:38:06,300 >> DAVID J. MALAN: Οτιδήποτε όπου αισθανθήκαμε ήταν πιο πιθανό από ό, τι δεν είναι πιθανό 783 00:38:06,300 --> 00:38:09,780 ότι ήξερες τι ήταν λέγοντας, η οποία είναι μια σκληρή 784 00:38:09,780 --> 00:38:13,500 γραμμή για να συντάξει μερικές φορές. 785 00:38:13,500 --> 00:38:16,000 Χρησιμοποιώντας μια συνδεδεμένη λίστα, αντί ενός πίνακα για να διατηρήσει μια 786 00:38:16,000 --> 00:38:17,590 ταξινομημένη λίστα των ακεραίων. 787 00:38:17,590 --> 00:38:21,000 Έτσι, και η άλλη πλευρά που αναφέρουν συχνά συνδέονται με καταλόγους που παρακίνησε όλη τους τη 788 00:38:21,000 --> 00:38:22,370 εισαγωγή ήταν μπορείτε να πάρετε δυναμισμό. 789 00:38:22,370 --> 00:38:23,030 Μπορούν να αναπτυχθούν. 790 00:38:23,030 --> 00:38:23,950 Μπορούν να συρρικνωθεί. 791 00:38:23,950 --> 00:38:27,370 Έτσι, δεν χρειάζεται να πηδούν μέσα από στεφάνες για να δημιουργήσετε πραγματικά περισσότερη μνήμη 792 00:38:27,370 --> 00:38:28,140 με μία συστοιχία. 793 00:38:28,140 --> 00:38:30,310 Ή δεν χρειάζεται να είναι μόνο λένε, συγγνώμη, ο χρήστης. 794 00:38:30,310 --> 00:38:31,410 Η συστοιχία είναι γεμάτη. 795 00:38:31,410 --> 00:38:35,850 Έτσι δυναμική ανάπτυξη του καταλόγου. 796 00:38:35,850 --> 00:38:37,210 Ένα μειονέκτημα όμως από συνδεδεμένες λίστες; 797 00:38:37,210 --> 00:38:40,916 798 00:38:40,916 --> 00:38:43,356 >> ΚΟΙΝΟ: Είναι γραμμική. 799 00:38:43,356 --> 00:38:45,800 Ψάχνοντας για συνδεδεμένη λίστα είναι γραμμική αντί για αυτό που θα συνδεθείτε 800 00:38:45,800 --> 00:38:46,360 >> DAVID J. MALAN: Ακριβώς. 801 00:38:46,360 --> 00:38:50,160 Ψάχνοντας για μια συνδεδεμένη λίστα είναι γραμμική, ακόμα κι αν είναι ταξινομημένο, επειδή μπορείτε να 802 00:38:50,160 --> 00:38:53,170 μόνο ακολουθήστε τα ψίχουλα ψωμιού, αυτά δείκτες, από την αρχή της λίστας 803 00:38:53,170 --> 00:38:53,570 μέχρι το τέλος. 804 00:38:53,570 --> 00:38:57,970 Δεν μπορείτε να μόχλευσης τυχαίας προσπέλασης και, Έτσι, δυαδική αναζήτηση, ακόμα κι αν είναι 805 00:38:57,970 --> 00:39:00,740 ταξινόμηση, ότι θα μπορούσατε κάνει με μια σειρά. 806 00:39:00,740 --> 00:39:02,390 Και υπάρχει επίσης ένα άλλο κόστος. 807 00:39:02,390 --> 00:39:02,966 Ναι. 808 00:39:02,966 --> 00:39:03,800 >> ΚΟΙΝΟ: Μνήμη αναποτελεσματική; 809 00:39:03,800 --> 00:39:04,130 >> DAVID J. MALAN: Ναι. 810 00:39:04,130 --> 00:39:06,940 Λοιπόν, εγώ δεν θα 'ανάγκην λένε αναποτελεσματική. 811 00:39:06,940 --> 00:39:10,110 Αλλά δεν σας κοστίσει περισσότερη μνήμη, γιατί θα πρέπει να έχετε 32 bits για κάθε 812 00:39:10,110 --> 00:39:13,400 κόμβος για την πρόσθετη δείκτη, σε τουλάχιστον για μεμονωμένα συνδεδεμένη λίστα. 813 00:39:13,400 --> 00:39:16,660 Τώρα, αν είστε αποθήκευση μόνο ακέραιοι και θέλετε να προσθέσετε το δείκτη, αυτό είναι 814 00:39:16,660 --> 00:39:17,830 πραγματικά το είδος της μη τετριμμένη. 815 00:39:17,830 --> 00:39:19,340 Είναι διπλασιάζοντας την ποσότητα της μνήμης. 816 00:39:19,340 --> 00:39:22,330 Αλλά στην πραγματικότητα, εάν είστε αποθήκευση ενός συνδεδεμένη λίστα structs που μπορεί να έχουν 817 00:39:22,330 --> 00:39:25,540 8 bytes, 16 bytes, ακόμη πιο από αυτό, ίσως είναι λιγότερο 818 00:39:25,540 --> 00:39:26,500 του οριακού κόστους. 819 00:39:26,500 --> 00:39:28,320 Αλλά αυτό είναι ένα κόστος, ωστόσο. 820 00:39:28,320 --> 00:39:31,880 Έτσι, είτε από εκείνους που θα έχουμε ήταν ωραία ως μειονεκτήματα. 821 00:39:31,880 --> 00:39:32,110 >> 18. 822 00:39:32,110 --> 00:39:36,100 Χρησιμοποιώντας την PHP, αντί της C για να γράψει ένα πρόγραμμα γραμμής εντολών. 823 00:39:36,100 --> 00:39:41,890 Έτσι, εδώ, είναι συχνά πιο γρήγορα για να χρησιμοποιήσετε ένα γλώσσα όπως PHP ή Ruby ή Python. 824 00:39:41,890 --> 00:39:43,700 Απλά ανοίξετε γρήγορα μέχρι ένα πρόγραμμα επεξεργασίας κειμένου. 825 00:39:43,700 --> 00:39:45,900 Έχετε πολλές περισσότερες λειτουργίες στη διάθεσή σας. 826 00:39:45,900 --> 00:39:49,325 PHP έχει το νεροχύτη της κουζίνας των λειτουργιών, ενώ στην C, θα 827 00:39:49,325 --> 00:39:50,420 έχουν πολύ, πολύ μικρή. 828 00:39:50,420 --> 00:39:53,820 Στην πραγματικότητα, τα παιδιά το γνωρίζουν το σκληρό τρόπο ότι δεν έχετε πίνακες κατακερματισμού. 829 00:39:53,820 --> 00:39:55,000 Δεν έχετε συνδεδεμένες λίστες. 830 00:39:55,000 --> 00:39:57,470 Αν θέλετε αυτά, θα πρέπει να εφαρμόσουν οι ίδιοι. 831 00:39:57,470 --> 00:40:00,950 >> Έτσι, ένα θετικό στοιχείο της PHP ή πραγματικά οποιοδήποτε ερμηνευμένη γλώσσα είναι η ταχύτητα 832 00:40:00,950 --> 00:40:02,920 με την οποία μπορείτε να γράψετε κώδικα. 833 00:40:02,920 --> 00:40:06,660 Αλλά ένα μειονέκτημα, είδαμε αυτό όταν γρήγορα χτυπημένη ένα misspeller 834 00:40:06,660 --> 00:40:11,780 εφαρμογή στη διάλεξη με χρήση PHP, είναι ότι χρησιμοποιώντας ένα ερμηνευμένη γλώσσα 835 00:40:11,780 --> 00:40:13,570 είναι συνήθως πιο αργή. 836 00:40:13,570 --> 00:40:18,420 Και είδαμε ότι αποδεδειγμένα με ένα αύξηση του χρόνου από 0,3 δευτερόλεπτα έως 3 837 00:40:18,420 --> 00:40:24,440 δευτερόλεπτα, λόγω της ερμηνείας αυτό συμβαίνει στην πραγματικότητα. 838 00:40:24,440 --> 00:40:27,060 >> Μια άλλη ανάποδα ήταν ότι θα Δεν χρειάζεται να συγκεντρώνουν. 839 00:40:27,060 --> 00:40:30,130 Έτσι, είναι να επιταχύνει την ανάπτυξη παρεμπιπτόντως, επειδή δεν έχετε 840 00:40:30,130 --> 00:40:31,360 δύο βήματα για την εκτέλεση ενός προγράμματος. 841 00:40:31,360 --> 00:40:32,140 Έχετε μόνο ένα. 842 00:40:32,140 --> 00:40:35,260 Και έτσι ώστε να είναι αρκετά συναρπαστικό, καθώς και. 843 00:40:35,260 --> 00:40:38,450 Χρησιμοποιώντας μια βάση δεδομένων SQL, αντί της ένα αρχείο CSV για την αποθήκευση δεδομένων. 844 00:40:38,450 --> 00:40:40,230 Έτσι SQL βάση δεδομένων χρησιμοποιείται για pset7. 845 00:40:40,230 --> 00:40:42,060 Αρχεία CSV που δεν χρησιμοποιούν σε μεγάλο βαθμό. 846 00:40:42,060 --> 00:40:45,960 Αλλά μπορείτε να το χρησιμοποιείται έμμεσα ως pset7 και μιλώντας με το Yahoo Finance. 847 00:40:45,960 --> 00:40:49,330 >> Αλλά CSV είναι ακριβώς όπως ένα αρχείο Excel, αλλά εξαιρετικά απλή, όπου οι στήλες είναι 848 00:40:49,330 --> 00:40:54,010 απλά μαρκάρεται με κόμματα μέσα μιας κατά τα άλλα αρχείο κειμένου. 849 00:40:54,010 --> 00:40:56,740 Και χρησιμοποιώντας μια βάση δεδομένων SQL είναι λίγο πιο συναρπαστικό. 850 00:40:56,740 --> 00:41:00,060 Είναι η άλλη πλευρά, επειδή μπορείτε να πάρετε τα πράγματα όπως επιλέξετε και να εισάγετε και να διαγράψετε. 851 00:41:00,060 --> 00:41:03,790 Και μπορείτε να πάρετε, κατά πάσα πιθανότητα, τα ευρετήρια που MySQL και άλλες βάσεις δεδομένων, όπως 852 00:41:03,790 --> 00:41:07,510 Oracle, χτίζουμε για εσάς στη μνήμη, η οποία σημαίνει επιλέξτε σας δεν είναι πιθανώς 853 00:41:07,510 --> 00:41:09,000 πρόκειται να είναι γραμμική πάνω προς τα κάτω. 854 00:41:09,000 --> 00:41:11,300 Είναι πραγματικά πρόκειται να είναι κάτι όπως δυαδική αναζήτηση ή κάτι 855 00:41:11,300 --> 00:41:12,520 συναφείς στο πνεύμα. 856 00:41:12,520 --> 00:41:13,930 Έτσι είναι γενικά πιο γρήγορα. 857 00:41:13,930 --> 00:41:16,040 >> Αλλά ένα μειονέκτημα είναι ότι είναι απλά περισσότερη δουλειά. 858 00:41:16,040 --> 00:41:16,730 Είναι περισσότερη προσπάθεια. 859 00:41:16,730 --> 00:41:18,140 Θα πρέπει να καταλάβετε τις βάσεις δεδομένων. 860 00:41:18,140 --> 00:41:18,940 Θα πρέπει να το δημιουργήσει. 861 00:41:18,940 --> 00:41:20,840 Χρειάζεται ένα διακομιστή για να τρέξει ότι η βάση δεδομένων σχετικά. 862 00:41:20,840 --> 00:41:22,750 Θα πρέπει να κατανοήσουν πώς να το ρυθμίσετε. 863 00:41:22,750 --> 00:41:24,930 Έτσι, αυτά είναι μόνο αυτά είδη των συμβιβασμών. 864 00:41:24,930 --> 00:41:27,860 Λαμβάνοντας υπόψη ότι ένα αρχείο CSV, μπορείτε να δημιουργήστε το gedit. 865 00:41:27,860 --> 00:41:28,770 Και είστε καλοί να πάτε. 866 00:41:28,770 --> 00:41:31,550 Δεν υπάρχει καμία πολυπλοκότητα πέρα ​​από αυτό. 867 00:41:31,550 --> 00:41:34,870 >> Χρησιμοποιώντας ένα trie αντί για ένα πίνακα κατακερματισμού με Ξεχωριστές αλυσίδες για να αποθηκεύσετε ένα 868 00:41:34,870 --> 00:41:37,490 λεξικό των λέξεων που θυμίζουν της pset5. 869 00:41:37,490 --> 00:41:42,480 Έτσι, μια προσπαθεί ανάποδα, στη θεωρία τουλάχιστον, είναι αυτό; 870 00:41:42,480 --> 00:41:46,380 Σταθερό χρόνο, τουλάχιστον αν είστε hashing σε καθένα από τα επιμέρους 871 00:41:46,380 --> 00:41:48,990 γραμμάτων σε μια λέξη, όπως σας θα μπορούσε να έχει για pset5. 872 00:41:48,990 --> 00:41:52,720 Αυτό θα μπορούσε να είναι πέντε hashes, έξι hashes αν υπάρχουν πέντε ή έξι 873 00:41:52,720 --> 00:41:53,900 γράμματα της λέξης. 874 00:41:53,900 --> 00:41:54,580 Και αυτό είναι πολύ καλό. 875 00:41:54,580 --> 00:41:56,910 Και αν υπάρχει ένα άνω φράγμα για το πώς καιρό τα λόγια σας μπορεί να είναι, αυτό είναι 876 00:41:56,910 --> 00:41:59,320 Πράγματι ασυμπτωτικά σταθερό χρόνο. 877 00:41:59,320 --> 00:42:05,180 >> Λαμβάνοντας υπόψη ότι ένας πίνακας κατακερματισμού με ξεχωριστό αλυσιδωτή σύνδεση, το πρόβλημα υπάρχει με αυτό 878 00:42:05,180 --> 00:42:09,070 είδος της δομής δεδομένων είναι ότι η απόδοση των αλγορίθμων σας συνήθως 879 00:42:09,070 --> 00:42:12,700 εξαρτάται από τον αριθμό των πραγμάτων ήδη στη δομή δεδομένων. 880 00:42:12,700 --> 00:42:15,660 Και αυτό είναι σίγουρα η περίπτωση με αλυσίδες, σύμφωνα με την οποία η περισσότερα πράγματα βάζετε 881 00:42:15,660 --> 00:42:18,800 σε έναν πίνακα κατακερματισμού, ο πλέον εκείνων αλυσίδες πάει, πράγμα που σημαίνει στη χειρότερη 882 00:42:18,800 --> 00:42:21,960 περίπτωση, το πράγμα που μπορεί να ψάχνει για είναι όλος ο τρόπος στο τέλος του ενός 883 00:42:21,960 --> 00:42:26,000 από αυτές τις αλυσίδες, τα οποία ουσιαστικά περιέρχεται σε κάτι γραμμικό. 884 00:42:26,000 --> 00:42:29,450 >> Τώρα, στην πράξη, θα μπορούσε να είναι απολύτως είναι η περίπτωση που ένα πίνακα κατακερματισμού με 885 00:42:29,450 --> 00:42:32,820 αλυσίδες είναι ταχύτερη από ό, τι ένα αντίστοιχο εφαρμογή trie. 886 00:42:32,820 --> 00:42:35,570 Αλλά αυτό είναι για διάφορους λόγους, μεταξύ των τα οποία προσπαθεί να χρησιμοποιήσετε ένα σωρό 887 00:42:35,570 --> 00:42:39,240 ότι η μνήμη μπορεί, στην πραγματικότητα, αργά τα πράγματα προς τα κάτω, επειδή δεν έχετε ωραία 888 00:42:39,240 --> 00:42:42,410 οφέλη από κάτι που ονομάζεται caching, όπου τα πράγματα που είναι κοντά μεταξύ τους 889 00:42:42,410 --> 00:42:45,420 στη μνήμη μπορεί να προσεγγιστεί συχνά πιο γρήγορα. 890 00:42:45,420 --> 00:42:48,180 Και μερικές φορές μπορείτε να καταλήξει σε μια πραγματικά καλή συνάρτηση κατακερματισμού. 891 00:42:48,180 --> 00:42:51,060 Ακόμα κι αν πρέπει να χάνουμε ένα κομμάτι της τη μνήμη, ίσως, πράγματι, να είναι σε θέση να 892 00:42:51,060 --> 00:42:54,430 βρείτε τα πράγματα γρήγορα και δεν τόσο άσχημα όσο γραμμικά. 893 00:42:54,430 --> 00:42:58,410 >> Έτσι, με λίγα λόγια, δεν υπήρχε κατ 'ανάγκην με οποιοδήποτε από αυτά ένα ή ακόμα και δύο 894 00:42:58,410 --> 00:43:00,050 συγκεκριμένα πράγματα που ψάχναμε. 895 00:43:00,050 --> 00:43:03,080 Πραγματικά τίποτα πειστική ως ανοδικοί και καθοδικοί 896 00:43:03,080 --> 00:43:04,800 γενικά έπεσε στην αντίληψή μας. 897 00:43:04,800 --> 00:43:11,840 >> ROB BOWDEN: Έτσι, για την άλλη πλευρά, κάναμε Δεν δέχονται από μόνη της "πιο γρήγορα." Εσείς 898 00:43:11,840 --> 00:43:14,540 Έπρεπε να πω κάτι γι 'αυτό. 899 00:43:14,540 --> 00:43:17,910 Ακόμα κι αν είπε θεωρητικά πιο γρήγορα, ξέραμε ότι το είδος κατανοητή 900 00:43:17,910 --> 00:43:19,470 ότι είναι 0 1. 901 00:43:19,470 --> 00:43:22,820 Και πίνακα κατακερματισμού, στη θεωρία, δεν είναι μηδέν 1. 902 00:43:22,820 --> 00:43:26,550 Η αναφορά τίποτα για το χρόνο εκτέλεσης γενικά έχεις τα σημεία. 903 00:43:26,550 --> 00:43:32,640 Αλλά "πιο γρήγορα," περισσότερες λύσεις στην το μεγάλο πλοίο που προσπαθεί ήταν 904 00:43:32,640 --> 00:43:34,990 αντικειμενικά πιο αργή από ό, τι λύσεις ότι υπήρχαν πίνακες κατακερματισμού. 905 00:43:34,990 --> 00:43:37,250 Έτσι ταχύτερη και αυτή η ίδια Δεν είναι αλήθεια. 906 00:43:37,250 --> 00:43:41,550 907 00:43:41,550 --> 00:43:44,380 >> DAVID J. MALAN: Dom de dom dom. 908 00:43:44,380 --> 00:43:46,686 Είμαι ίσως ο μόνος που αντιλαμβάνεται αυτό είναι το πώς υποτίθεται πως 909 00:43:46,686 --> 00:43:47,500 να προφέρεται, σωστά; 910 00:43:47,500 --> 00:43:50,400 >> ROB BOWDEN: είχα πραγματικά καμία ιδέα. 911 00:43:50,400 --> 00:43:51,650 >> DAVID J. MALAN: Έκανε αίσθηση στο κεφάλι μου. 912 00:43:51,650 --> 00:43:53,830 913 00:43:53,830 --> 00:43:57,580 >> ROB BOWDEN: Κάνω αυτό. 914 00:43:57,580 --> 00:43:58,020 OK. 915 00:43:58,020 --> 00:44:04,243 Έτσι, αυτό είναι το ένα, όπου θα έπρεπε να επιστήσει το διάγραμμα παρόμοιο με ίσως 916 00:44:04,243 --> 00:44:06,040 έχουν δει στο παρελθόν εξετάσεις. 917 00:44:06,040 --> 00:44:12,200 Οπότε ας δούμε αυτό. 918 00:44:12,200 --> 00:44:18,170 Έτσι, από τον κόμβο HTML, έχουμε δύο τα παιδιά, το κεφάλι και το σώμα. 919 00:44:18,170 --> 00:44:20,570 Γι 'αυτό και υποκατάστημα - το κεφάλι και το σώμα. 920 00:44:20,570 --> 00:44:22,280 Το κεφάλι έχει μια ετικέττα τίτλου. 921 00:44:22,280 --> 00:44:23,710 Έτσι έχουμε έναν τίτλο. 922 00:44:23,710 --> 00:44:28,450 >> Τώρα, το μόνο πράγμα που πολλοί άνθρωποι ξέχασα είναι ότι αυτές οι κόμβοι κειμένου είναι 923 00:44:28,450 --> 00:44:30,430 στοιχεία μέσα σε αυτό το δέντρο. 924 00:44:30,430 --> 00:44:36,260 Έτσι, εδώ έχουμε να τους συμβεί επιστήσει την ωοειδή για να τους διακρίνει από αυτά 925 00:44:36,260 --> 00:44:37,380 τύπους κόμβων. 926 00:44:37,380 --> 00:44:41,450 Αλλά προσέξτε, επίσης, εδώ έχουμε κορυφή, μέση και κάτω θα καταλήξει να είναι 927 00:44:41,450 --> 00:44:42,560 κόμβους κειμένου. 928 00:44:42,560 --> 00:44:46,250 Έτσι, ξεχνώντας εκείνα ήταν κάπως μιας κοινής λάθος. 929 00:44:46,250 --> 00:44:48,770 >> Το σώμα έχει τρία παιδιά - αυτά τα τρία divs. 930 00:44:48,770 --> 00:44:53,340 Έτσι div, div, div και στη συνέχεια το κείμενο παιδιά κόμβο αυτών των divs. 931 00:44:53,340 --> 00:44:55,900 Αυτό είναι λίγο πολύ αυτό για το ότι οι ερωτήσεις. 932 00:44:55,900 --> 00:44:57,860 >> DAVID J. MALAN: Και αξίζει να σημειωθεί, ακόμη και αν δεν κατοικεί σε αυτές 933 00:44:57,860 --> 00:45:01,040 λεπτομέρειες στο χρόνο που δαπανούν για JavaScript, ότι η διάταξη κάνει, σε 934 00:45:01,040 --> 00:45:02,290 Πράγματι, το θέμα τεχνικά. 935 00:45:02,290 --> 00:45:06,330 Έτσι, αν το κεφάλι έρχεται πριν από το σώμα στο HTML, τότε θα πρέπει να εμφανίζεται στην 936 00:45:06,330 --> 00:45:08,860 αριστερά του σώματος στην πραγματική DOM. 937 00:45:08,860 --> 00:45:12,265 Αυτό του είναι, σε γενικές γραμμές, απλά FYI, κάτι που ονομάζεται σειρά εγγράφων, όπου 938 00:45:12,265 --> 00:45:13,260 αυτό έχει σημασία. 939 00:45:13,260 --> 00:45:17,470 Και αν εφάρμοζαν ένα πρόγραμμα ανάλυσης, ένα πρόγραμμα που διαβάζει HTML στο κτίριο 940 00:45:17,470 --> 00:45:20,960 μέχρι το δέντρο στη μνήμη, για να είμαι ειλικρινής, ότι είναι διαισθητικά ίσως ό, τι 941 00:45:20,960 --> 00:45:24,720 κάνουμε έτσι κι αλλιώς - πάνω προς τα κάτω, αριστερά προς τα δεξιά. 942 00:45:24,720 --> 00:45:26,116 >> ROB BOWDEN: Ερωτήσεις σχετικά με αυτό; 943 00:45:26,116 --> 00:45:29,080 944 00:45:29,080 --> 00:45:30,000 Πρέπει να κάνω το επόμενο; 945 00:45:30,000 --> 00:45:32,380 >> DAVID J. MALAN: Σίγουρα. 946 00:45:32,380 --> 00:45:33,810 >> ROB BOWDEN: OK. 947 00:45:33,810 --> 00:45:39,320 Έτσι, αυτή είναι η υπέρβαση του buffer ερώτηση επίθεση. 948 00:45:39,320 --> 00:45:43,740 Το κύριο πράγμα που πρέπει να αναγνωρίσουμε είναι εδώ, καλά, πώς θα μπορούσε ένα τέχνασμα αντίπαλος 949 00:45:43,740 --> 00:45:46,170 αυτό το πρόγραμμα σε εκτέλεση αυθαίρετου κώδικα; 950 00:45:46,170 --> 00:45:51,860 Έτσι argv1, η πρώτη γραμμή εντολών επιχείρημα σε αυτό το πρόγραμμα, που μπορεί να είναι 951 00:45:51,860 --> 00:45:53,920 αυθαίρετα καιρό. 952 00:45:53,920 --> 00:45:59,160 Αλλά εδώ είμαστε με memcpy να αντιγράψετε argv1, η οποία εδώ είναι το μπαρ. 953 00:45:59,160 --> 00:46:00,165 Είμαστε περνώντας ως επιχείρημα. 954 00:46:00,165 --> 00:46:02,050 Και γι 'αυτό παίρνει το όνομα bar. 955 00:46:02,050 --> 00:46:08,040 >> Έτσι είμαστε memcpying bar σε αυτό το buffer c. 956 00:46:08,040 --> 00:46:09,400 Πόσα bytes είμαστε αντιγραφή; 957 00:46:09,400 --> 00:46:14,040 Λοιπόν, ωστόσο ο αριθμός των bytes bar συμβαίνει σε να χρησιμοποιεί, το μήκος του εν λόγω επιχειρήματος. 958 00:46:14,040 --> 00:46:17,930 Αλλά c είναι μόνο 12 bytes μεγάλη. 959 00:46:17,930 --> 00:46:22,280 Έτσι, αν πληκτρολογήσετε ένα όρισμα γραμμής εντολών που είναι περισσότερο από 12 bytes, είμαστε 960 00:46:22,280 --> 00:46:25,470 πρόκειται να ξεχειλίσει αυτό συγκεκριμένο ρυθμιστικό. 961 00:46:25,470 --> 00:46:31,000 Τώρα, πώς θα μπορούσαν να ξεγελάσουν ένας αντίπαλος ο το πρόγραμμα σε εκτέλεση αυθαίρετου κώδικα; 962 00:46:31,000 --> 00:46:34,910 >> Έτσι, να θυμάστε ότι εδώ κύρια καλεί foo. 963 00:46:34,910 --> 00:46:37,340 Και έτσι στη συνέχεια κύρια κλήσεις foo. 964 00:46:37,340 --> 00:46:40,408 Ας συντάξει αυτό. 965 00:46:40,408 --> 00:46:44,720 966 00:46:44,720 --> 00:46:46,990 Έτσι έχουμε stack μας. 967 00:46:46,990 --> 00:46:49,090 Και κύρια έχει ένα πλαίσιο στοίβας στο κάτω μέρος. 968 00:46:49,090 --> 00:46:51,860 969 00:46:51,860 --> 00:46:53,250 Σε κάποιο σημείο, ο κυρίως κλήσεις foo. 970 00:46:53,250 --> 00:46:55,390 Λοιπόν, αμέσως, κύρια κλήσεις foo. 971 00:46:55,390 --> 00:46:57,130 Και έτσι foo παίρνει το δικό του πλαίσιο stack του. 972 00:46:57,130 --> 00:46:59,650 973 00:46:59,650 --> 00:47:02,220 >> Τώρα, σε κάποιο σημείο, foo πρόκειται να επιστρέψει. 974 00:47:02,220 --> 00:47:06,810 Και πήγε επιστρέφει foo, θα πρέπει να γνωρίζει σε ποια γραμμή κώδικα στο εσωτερικό του κύριου μας 975 00:47:06,810 --> 00:47:10,610 ήταν έτσι ώστε να γνωρίζουν πού θα πρέπει να επαναληφθούν σε κύρια. 976 00:47:10,610 --> 00:47:13,100 Μπορούμε να καλέσετε foo από το σύνολο πολλά και διάφορα μέρη. 977 00:47:13,100 --> 00:47:14,620 Πώς ξέρουμε πού να επιστρέψει; 978 00:47:14,620 --> 00:47:16,460 Λοιπόν, θα πρέπει να αποθηκεύσετε αυτό το κάπου. 979 00:47:16,460 --> 00:47:23,010 >> Έτσι, κάπου εδώ γύρω, αποθηκεύουμε όπου θα πρέπει να επιστρέψει σε μια φορά 980 00:47:23,010 --> 00:47:24,070 επιστρέφει foo. 981 00:47:24,070 --> 00:47:26,350 Και αυτή είναι η διεύθυνση του αποστολέα. 982 00:47:26,350 --> 00:47:30,490 Πώς, λοιπόν, ένας αντίπαλος μπορεί να επωφεληθούν αυτού είναι το γεγονός ότι 983 00:47:30,490 --> 00:47:37,550 αυτό το ρυθμιστικό γ αποθηκεύεται, ας πω, εδώ είναι c. 984 00:47:37,550 --> 00:47:39,690 Έτσι έχουμε 12 bytes για το γ. 985 00:47:39,690 --> 00:47:40,540 Αυτό είναι c. 986 00:47:40,540 --> 00:47:43,030 Και αυτό είναι το δαχτυλίδι στοίβα foo του. 987 00:47:43,030 --> 00:47:49,970 Έτσι, αν ο κακόβουλος χρήστης εισάγει περισσότερα bytes από 12 ή εισάγετε μια εντολή 988 00:47:49,970 --> 00:47:54,570 όρισμα της γραμμής που είναι περισσότερο από 12 χαρακτήρες, τότε θα πάμε να 989 00:47:54,570 --> 00:47:57,540 ξεχειλίζουν από αυτό το ρυθμιστικό. 990 00:47:57,540 --> 00:47:59,910 >> Μπορούμε να συνεχίσουμε. 991 00:47:59,910 --> 00:48:02,220 Και σε κάποιο σημείο, θα πάει μακριά αρκεί να ξεκινήσουμε 992 00:48:02,220 --> 00:48:05,120 αντικατάσταση αυτή τη διεύθυνση επιστροφής. 993 00:48:05,120 --> 00:48:08,310 Έτσι, τη στιγμή που θα αντικαταστήσει τη διεύθυνση επιστροφής, αυτό σημαίνει ότι όταν foo 994 00:48:08,310 --> 00:48:14,220 επιστρέφει, γυρίζουμε όπου η κακόβουλος χρήστης είναι αυτό που λέει να με 995 00:48:14,220 --> 00:48:19,490 ό, τι αξία που τέθηκε, με όποια χαρακτήρων, ο χρήστης εισάγει. 996 00:48:19,490 --> 00:48:24,320 Και έτσι, αν ο κακόβουλος χρήστης είναι να ιδιαίτερα έξυπνος, μπορεί να έχει αυτό το 997 00:48:24,320 --> 00:48:29,255 επιστροφή στο κάπου στο printDef λειτουργία ή κάπου στο malloc 998 00:48:29,255 --> 00:48:31,830 λειτουργία, ακριβώς οπουδήποτε αυθαίρετη. 999 00:48:31,830 --> 00:48:38,420 >> Αλλά ακόμη πιο έξυπνο είναι ό, τι και αν έχει ο χρήστης επιστρέψει προς τα δεξιά εδώ. 1000 00:48:38,420 --> 00:48:41,920 Και τότε θα αρχίσει η εκτέλεση αυτές οι γραμμές κώδικα. 1001 00:48:41,920 --> 00:48:46,610 Έτσι, σε εκείνο το σημείο, ο χρήστης μπορεί να εισέλθει ό, τι θέλει σε αυτή την περιοχή. 1002 00:48:46,610 --> 00:48:52,210 Και ο ίδιος έχει τον πλήρη έλεγχο πάνω από το πρόγραμμά σας. 1003 00:48:52,210 --> 00:48:53,460 Ερωτήσεις σχετικά με αυτό; 1004 00:48:53,460 --> 00:48:56,380 1005 00:48:56,380 --> 00:49:00,970 Έτσι, η επόμενη ερώτηση είναι πλήρης, η επαναϋλοποίηση foo με τέτοιο τρόπο 1006 00:49:00,970 --> 00:49:02,620 ότι δεν είναι πλέον ευάλωτος. 1007 00:49:02,620 --> 00:49:03,870 >> Έτσι, υπάρχει μια-δυο τρόπους θα μπορούσατε να έχετε κάνει αυτό. 1008 00:49:03,870 --> 00:49:10,900 1009 00:49:10,900 --> 00:49:13,330 Έχουμε ακόμα γ μόνο είναι μήκους 12. 1010 00:49:13,330 --> 00:49:16,480 Θα μπορούσε να αλλάξει αυτή ως μέρος της λύσης σας. 1011 00:49:16,480 --> 00:49:18,930 Προσθέσαμε επίσης έναν έλεγχο για να βέβαιος μπαρ δεν ήταν μηδενική. 1012 00:49:18,930 --> 00:49:24,460 Αν και δεν χρειάζεται ότι, για την πλήρη πίστωση. 1013 00:49:24,460 --> 00:49:27,690 Έτσι είμαστε έλεγχο για πρώτη φορά το μήκος του νήματος του μπαρ. 1014 00:49:27,690 --> 00:49:31,650 Εάν είναι μεγαλύτερη από 12, τότε στην πραγματικότητα δεν κάνουν το αντίγραφο. 1015 00:49:31,650 --> 00:49:33,010 Έτσι, αυτό είναι ένας τρόπος για τον καθορισμό αυτό. 1016 00:49:33,010 --> 00:49:36,750 >> Ένας άλλος τρόπος για τον καθορισμό αυτό είναι, αντί να έχοντας γ είναι μόνο μήκους 12, το έχουν 1017 00:49:36,750 --> 00:49:39,310 είναι μήκους strlen (bar). 1018 00:49:39,310 --> 00:49:43,370 Ένας άλλος τρόπος για τον καθορισμό είναι πραγματικά μόλις επιστρέψει. 1019 00:49:43,370 --> 00:49:46,690 Έτσι, αν είχε μόλις πάρει απαλλαγούμε από όλα αυτό, αν έχετε μόλις είχε διαγράψει όλα 1020 00:49:46,690 --> 00:49:51,830 γραμμές κώδικα, που θα έχουν πάρει πλήρη πίστωση, δεδομένου ότι αυτή η λειτουργία 1021 00:49:51,830 --> 00:49:54,150 δεν καταφέρει τίποτα στην πραγματικότητα. 1022 00:49:54,150 --> 00:49:57,650 Είναι αντιγραφή από τη γραμμή εντολών επιχείρημα σε κάποια σειρά στην 1023 00:49:57,650 --> 00:49:59,960 τοπικό πλαίσιο stack του. 1024 00:49:59,960 --> 00:50:01,310 Και τότε το πράγμα επιστρέφει. 1025 00:50:01,310 --> 00:50:04,020 Και ανεξάρτητα από το καταφέρει έχει φύγει. 1026 00:50:04,020 --> 00:50:09,740 Έτσι απόδοση ήταν επίσης ένα επαρκές τρόπος για να πάρει πλήρη πίστωση. 1027 00:50:09,740 --> 00:50:13,425 >> DAVID J. MALAN: Όχι ακριβώς το πνεύμα της το ερώτημα, αλλά αποδεκτή ανά την 1028 00:50:13,425 --> 00:50:15,580 spec παρ 'όλα αυτά. 1029 00:50:15,580 --> 00:50:18,260 >> ROB BOWDEN: Ερωτήσεις σχετικά με οποιοδήποτε από αυτό; 1030 00:50:18,260 --> 00:50:22,270 Το ένα πράγμα που μπορείτε τουλάχιστον χρειαζόταν να έχουν την κατάρτιση κώδικα. 1031 00:50:22,270 --> 00:50:24,810 Έτσι ακόμα κι αν τεχνικά δεν είναι ευάλωτες εάν ο κώδικάς σας δεν 1032 00:50:24,810 --> 00:50:29,130 μεταγλώττιση, εμείς δεν το δέχομαι αυτό. 1033 00:50:29,130 --> 00:50:31,350 Δεν υπάρχουν ερωτήσεις; 1034 00:50:31,350 --> 00:50:33,320 OK. 1035 00:50:33,320 --> 00:50:34,580 >> DAVID J. MALAN: Θέλετε να πω αυτόν τον τίτλο; 1036 00:50:34,580 --> 00:50:37,230 >> ROB BOWDEN: Όχι. 1037 00:50:37,230 --> 00:50:40,470 >> DAVID J. MALAN: Έτσι, σε αυτό το ένα, αυτό ήταν είτε καλή ή κακή είδηση. 1038 00:50:40,470 --> 00:50:43,870 Αυτό είναι κυριολεκτικά το ίδιο πρόβλημα ως το πρώτο κουίζ. 1039 00:50:43,870 --> 00:50:46,140 Και είναι σχεδόν το ίδιο πρόβλημα, όπως pset1. 1040 00:50:46,140 --> 00:50:49,980 Αλλά ήταν απλοποιηθεί σκοπίμως ούτως ώστε να μια απλούστερη πυραμίδα, ένα που μπορεί να είναι 1041 00:50:49,980 --> 00:50:52,330 λυθεί με μια ελαφρώς απλούστερη επανάληψη. 1042 00:50:52,330 --> 00:50:55,680 Και πραγματικά, τι είχαμε πάρει σε εδώ δεν ήταν τόσο η λογική, 1043 00:50:55,680 --> 00:50:58,100 επειδή ίσως, από αυτό το σημείο, είστε πιο άνετα από ό, τι ήταν 1044 00:50:58,100 --> 00:51:01,850 σε μία εβδομάδα με για βρόχους ή γιατί βρόχους, αλλά πραγματικά να δώσουμε έμφαση, εκτός ότι 1045 00:51:01,850 --> 00:51:04,790 είστε λίγο άνετα με το αντίληψη ότι η PHP δεν είναι μόνο για το τι 1046 00:51:04,790 --> 00:51:05,290 προγραμματισμού. 1047 00:51:05,290 --> 00:51:07,820 Μπορεί πράγματι να χρησιμοποιηθεί ως γλώσσα να γράψει τα προγράμματα της γραμμής εντολών. 1048 00:51:07,820 --> 00:51:10,060 >> Και πράγματι, αυτό είναι αυτό που προσπαθούσαμε να επιστήσω την προσοχή σας. 1049 00:51:10,060 --> 00:51:12,060 Αυτό είναι ένα πρόγραμμα γραμμής εντολών PHP. 1050 00:51:12,060 --> 00:51:16,690 Έτσι κώδικα C εδώ, ενώ η σωστή σε C, δεν είναι σωστή για την PHP. 1051 00:51:16,690 --> 00:51:17,940 Αλλά ο κώδικας είναι πραγματικά η ίδια. 1052 00:51:17,940 --> 00:51:21,720 Αν συγκρίνει κανείς τις λύσεις για Quiz 0 κατά Quiz 1, θα διαπιστώσετε ότι 1053 00:51:21,720 --> 00:51:25,630 είναι σχεδόν πανομοιότυπες, με εξαίρεση μερικά σημάδια δολαρίων και για το 1054 00:51:25,630 --> 00:51:27,250 απουσία ενός τύπου δεδομένων. 1055 00:51:27,250 --> 00:51:31,720 Συγκεκριμένα, αν ρίξουμε μια ματιά εδώ, θα δείτε ότι έχουμε επαναλάβει, σε αυτό το 1056 00:51:31,720 --> 00:51:33,730 περίπτωση, από την 1η έως έως 7. 1057 00:51:33,730 --> 00:51:34,910 >> Θα μπορούσαμε να είχαμε κάνει το 0 index. 1058 00:51:34,910 --> 00:51:37,320 Αλλά μερικές φορές, νομίζω ότι είναι ακριβώς διανοητικά πιο εύκολο να σκεφτούμε τα πράγματα 1059 00:51:37,320 --> 00:51:38,200 από 1 έως 7. 1060 00:51:38,200 --> 00:51:40,300 Αν θέλετε ένα τετράγωνο, τότε δύο μπλοκ, τότε τρία, τότε 1061 00:51:40,300 --> 00:51:41,770 τελεία, τελεία, τελεία επτά. 1062 00:51:41,770 --> 00:51:45,960 Έχουμε ι που με αρχική τιμή 1 και στη συνέχεια να βασίζομαι σε έως i. 1063 00:51:45,960 --> 00:51:48,150 Και είναι όλα εδώ άλλα πανομοιότυπη. 1064 00:51:48,150 --> 00:51:49,790 Αλλά αξίζει να σημειωθεί είναι μερικά πράγματα. 1065 00:51:49,790 --> 00:51:53,230 Σας δίνουμε αυτές τις δύο γραμμές, αυτή η πρώτη ένα, goofily ονομάστηκε ως δουλεία 1066 00:51:53,230 --> 00:51:54,560 για την απότομη έκρηξη. 1067 00:51:54,560 --> 00:51:58,770 Και αυτό καθορίζει μόνο τη διαδρομή, η φάκελο, στον οποίο ένα πρόγραμμα μπορεί να είναι 1068 00:51:58,770 --> 00:52:02,160 διαπίστωσε ότι θέλετε να χρησιμοποιήσετε να ερμηνεύσει αυτό το αρχείο. 1069 00:52:02,160 --> 00:52:04,710 >> Και τότε η γραμμή μετά από αυτό, του Φυσικά, σημαίνει είσοδο στη λειτουργία PHP. 1070 00:52:04,710 --> 00:52:07,740 Και η γραμμή στο κάτω μέρος σημαίνει τη λειτουργία εξόδου PHP. 1071 00:52:07,740 --> 00:52:09,740 Και αυτό λειτουργεί, γενικά, με ερμηνευμένες γλώσσες. 1072 00:52:09,740 --> 00:52:14,370 Είναι ενοχλητικό είδος της, αν γράφετε πρόγραμμα σε ένα αρχείο που ονομάζεται foo.php. 1073 00:52:14,370 --> 00:52:17,320 Και τότε οι χρήστες σας έχουν ακριβώς θυμηθείτε, OK, για να εκτελέσετε αυτό το πρόγραμμα, θα 1074 00:52:17,320 --> 00:52:22,320 πρέπει να πληκτρολογήσετε "χώρο php foo.php." Είδος ενοχλητικό αν μη τι άλλο. 1075 00:52:22,320 --> 00:52:25,270 Και αποκαλύπτει επίσης ότι το πρόγραμμά σας Είναι γραμμένο σε PHP, η οποία δεν είναι όλα 1076 00:52:25,270 --> 00:52:27,060 ότι φωτισμού για το χρήστη. 1077 00:52:27,060 --> 00:52:30,100 >> Έτσι, μπορείτε να αφαιρέσετε το. Php συνολικά θυμάστε από την διάλεξη. 1078 00:52:30,100 --> 00:52:35,690 Και μπορείτε να το κάνετε πραγματικά. / Foo, αν έχετε chmodded καθιστώντας 1079 00:52:35,690 --> 00:52:36,500 εκτελέσιμο. 1080 00:52:36,500 --> 00:52:39,630 Έτσι chmod a + x foo θα το έκανε αυτό. 1081 00:52:39,630 --> 00:52:41,460 Και αν μπορείτε επίσης να προσθέσετε την δουλεία εδώ. 1082 00:52:41,460 --> 00:52:45,320 Αλλά πραγματικά, το πρόβλημα ήταν να πάρει σε εκτύπωση κάτι σαν αυτό. 1083 00:52:45,320 --> 00:52:51,100 Όχι HTML, δεν C-code βεβαίως, μόνο μερικά PHP. 1084 00:52:51,100 --> 00:52:54,100 Έτσι Milo στη συνέχεια επέστρεψε στο πρόβλημα 25. 1085 00:52:54,100 --> 00:52:58,050 Και στο 25, θα ήταν και οι ακόλουθοι σκελετός κώδικα, το οποίο ήταν ένα 1086 00:52:58,050 --> 00:52:59,730 αρκετά απλή ιστοσελίδα. 1087 00:52:59,730 --> 00:53:04,230 Και το ζουμερό μέρος HTML-σοφός ήταν κάτω εδώ, όπου έχουμε εσωτερικό του σώματος 1088 00:53:04,230 --> 00:53:09,160 μια μορφή που έχει μοναδικό αναγνωριστικό των εισροών εσωτερικό του οποίου ήταν δύο εισόδους, μία 1089 00:53:09,160 --> 00:53:11,950 με μια ιδέα του ονόματος, ένα με μια ιδέα του κουμπιού. 1090 00:53:11,950 --> 00:53:14,240 >> Ο πρώτος ήταν είδος κειμένου, η δεύτερη του τύπου υποβάλλουν. 1091 00:53:14,240 --> 00:53:16,930 Και γι 'αυτό σας έδωσε, στην πραγματικότητα, περισσότερο συστατικά από ό, τι χρειάζεται, ακριβώς έτσι 1092 00:53:16,930 --> 00:53:19,230 εσείς είχε επιλογές με τις οποίες να λύσει αυτό το πρόβλημα. 1093 00:53:19,230 --> 00:53:21,130 Δεν χρειάζεται απολύτως όλες αυτές τις ταυτότητες. 1094 00:53:21,130 --> 00:53:23,580 Αλλά σας επιτρέπει να λύσουν αυτό με διαφορετικούς τρόπους. 1095 00:53:23,580 --> 00:53:27,050 Και στην κορυφή, παρατηρούμε ότι ο στόχος ήταν να προκαλέσει 1096 00:53:27,050 --> 00:53:27,960 ένα παράθυρο σαν αυτό - 1097 00:53:27,960 --> 00:53:28,780 Γεια σας, Milo! - 1098 00:53:28,780 --> 00:53:31,270 να εμφανιστεί στο πρόγραμμα περιήγησης χρησιμοποιώντας το σούπερ απλό, αν 1099 00:53:31,270 --> 00:53:33,190 Δεν άσχημο, λειτουργία ειδοποίησης. 1100 00:53:33,190 --> 00:53:37,480 Και έτσι, τελικά, αυτό βράζει κάτω εννοιολογικά με κάποιο τρόπο να ακούτε για 1101 00:53:37,480 --> 00:53:41,290 ισχυρισμούς της μορφής client-side , Όχι ο server-side, με κάποιο τρόπο 1102 00:53:41,290 --> 00:53:45,640 ανταποκρινόμενα στις εν λόγω υποβολή από αρπάζοντας την τιμή που ο χρήστης πληκτρολογήσει 1103 00:53:45,640 --> 00:53:50,120 μέσα στο πεδίο Όνομα, και στη συνέχεια δείτε αυτό στο σώμα ενός συναγερμού. 1104 00:53:50,120 --> 00:53:53,460 >> Έτσι, ένας τρόπος που μπορείτε να το κάνετε αυτό είναι με jQuery, το οποίο μοιάζει λίγο 1105 00:53:53,460 --> 00:53:56,880 συντακτικά περίπλοκο στην αρχή. 1106 00:53:56,880 --> 00:54:00,760 Μπορείτε να το κάνετε αυτό με καθαρό κώδικα DOM - document.getelement με ID. 1107 00:54:00,760 --> 00:54:02,530 Αλλά ας ρίξουμε μια ματιά σε αυτή την έκδοση. 1108 00:54:02,530 --> 00:54:05,110 Έχω ένα ζευγάρι των σημαντικών γραμμές πρώτα. 1109 00:54:05,110 --> 00:54:09,460 Έτσι, το ένα, έχουμε αυτή τη γραμμή, η οποία είναι πανομοιότυπο με αυτό που μπορεί να έχετε δει 1110 00:54:09,460 --> 00:54:13,830 σε, πιστεύω, form2.html από την τάξη στην εβδομάδα 9. 1111 00:54:13,830 --> 00:54:16,960 Και αυτό ακριβώς λέει, να εκτελέσει ο κώδικας που ακολουθεί, όταν 1112 00:54:16,960 --> 00:54:18,430 το έγγραφο είναι έτοιμο. 1113 00:54:18,430 --> 00:54:21,770 Αυτό είναι σημαντικό μόνο και μόνο επειδή Οι σελίδες HTML διαβάζονται από πάνω προς τα 1114 00:54:21,770 --> 00:54:23,280 κάτω, αριστερά προς τα δεξιά. 1115 00:54:23,280 --> 00:54:27,910 >> Και ως εκ τούτου, αν προσπαθήσετε να κάνετε κάτι στον κώδικα εδώ σε κάποιο DOM 1116 00:54:27,910 --> 00:54:31,560 στοιχείο, κάποια ετικέτα HTML, που είναι κάτω εδώ, το κάνετε πάρα πολύ σύντομα, 1117 00:54:31,560 --> 00:54:34,220 γιατί αυτό δεν έχει ακόμη έχουν διαβάσει στη μνήμη. 1118 00:54:34,220 --> 00:54:37,740 Έτσι, λέγοντας αυτό document.ready γραμμή, λέμε, 1119 00:54:37,740 --> 00:54:39,040 εδώ είναι μερικά κωδικό, το πρόγραμμα περιήγησης. 1120 00:54:39,040 --> 00:54:42,440 Αλλά μην εκτελέσει αυτό μέχρι το σύνολο το έγγραφο είναι έτοιμο, αυτό είναι το DOM 1121 00:54:42,440 --> 00:54:44,320 δέντρο υπάρχει στη μνήμη. 1122 00:54:44,320 --> 00:54:47,110 Αυτό είναι ένα λίγο πιο απλή, αν ένας συντακτικά 1123 00:54:47,110 --> 00:54:51,890 λίγο διαφορετική, όπου λέω, πιάσε το στοιχείο HTML των οποίων η μοναδική 1124 00:54:51,890 --> 00:54:53,560 αναγνωριστικό είναι εισόδους. 1125 00:54:53,560 --> 00:54:56,220 Αυτό είναι ό, τι το hash ετικέτα δηλώνει, το μοναδικό αναγνωριστικό. 1126 00:54:56,220 --> 00:54:58,070 Και τότε είμαι καλώντας. Υποβάλετε. 1127 00:54:58,070 --> 00:55:01,660 >> Έτσι. Υποβάλει εδώ είναι μια λειτουργία, διαφορετικά γνωστή ως μέθοδος, που είναι 1128 00:55:01,660 --> 00:55:05,850 στο εσωτερικό του αντικειμένου για την αριστερά πλευρά εκεί που δεν είχα τονίσει. 1129 00:55:05,850 --> 00:55:08,990 Έτσι, αν νομίζετε των εισροών ως αντικείμενο στη μνήμη - και πράγματι είναι. 1130 00:55:08,990 --> 00:55:10,440 Είναι ένας κόμβος σε ένα δέντρο - 1131 00:55:10,440 --> 00:55:16,580 . Υποβάλουν μέσα, όταν αυτή η μορφή με αυτό το αναγνωριστικό υποβάλλεται, εκτελέστε 1132 00:55:16,580 --> 00:55:17,700 τον παρακάτω κώδικα. 1133 00:55:17,700 --> 00:55:20,290 Δεν με νοιάζει ό, τι το όνομα του λειτουργία είναι ότι είμαι εκτέλεσης. 1134 00:55:20,290 --> 00:55:23,760 Έτσι, εδώ είμαι με τη χρήση, όπως και πριν, τι είναι ονομάζεται συνάρτηση λάμδα ή μία 1135 00:55:23,760 --> 00:55:24,720 ανώνυμη συνάρτηση. 1136 00:55:24,720 --> 00:55:27,640 Δεν είναι καθόλου διανοητικά ενδιαφέρον, εκτός από αυτό δεν έχει όνομα, 1137 00:55:27,640 --> 00:55:30,220 το οποίο είναι καλό, αν είστε μόνο πρόκειται ποτέ να το ονομάσουμε μια φορά. 1138 00:55:30,220 --> 00:55:34,490 Και μέσα εκεί εγώ πραγματικά να χειριστεί η υποβολή της φόρμας. 1139 00:55:34,490 --> 00:55:36,810 Θέλω πρώτα να δηλώσει μια μεταβλητή ονομάζεται αξία. 1140 00:55:36,810 --> 00:55:40,610 Και στη συνέχεια ποια είναι η επίδραση αυτής της επισημασμένο μέρος εδώ τώρα; 1141 00:55:40,610 --> 00:55:44,755 Τι σημαίνει ότι το κάνουμε σε ένα υψηλού επιπέδου για μένα; 1142 00:55:44,755 --> 00:55:48,539 >> ΚΟΙΝΟ: Παίρνει την αξία που η χρήστης δεν έκανε την παρακάτω HTML. 1143 00:55:48,539 --> 00:55:50,920 Παίρνει ότι η ταυτότητα και, στη συνέχεια, βρίσκει την αξία του. 1144 00:55:50,920 --> 00:55:51,590 >> DAVID J. MALAN: Ακριβώς. 1145 00:55:51,590 --> 00:55:54,300 Είναι αρπάζει τον κόμβο, του οποίου η μοναδική αναγνωριστικό είναι το όνομα. 1146 00:55:54,300 --> 00:55:56,900 Παίρνει την τιμή σ 'αυτήν, η οποία είναι, προφανώς, αυτό που ο χρήστης 1147 00:55:56,900 --> 00:55:58,190 τον εαυτό πληκτρολογήσει. 1148 00:55:58,190 --> 00:56:01,020 Και στη συνέχεια αποθηκεύει ότι η μεταβλητή που ονομάζεται αξία. 1149 00:56:01,020 --> 00:56:03,720 Παρεμπιπτόντως, θα μπορούσε επίσης να έχει κάνει αυτό λίγο διαφορετικά. 1150 00:56:03,720 --> 00:56:09,250 Απόλυτα αποδεκτό κάνοντας κάτι αξία ψέμα var παίρνει 1151 00:56:09,250 --> 00:56:10,500 document.getElementById. 1152 00:56:10,500 --> 00:56:12,860 1153 00:56:12,860 --> 00:56:15,460 Και γι 'αυτό είναι λίγο κουραστικό να μην χρησιμοποιούν jQuery. 1154 00:56:15,460 --> 00:56:16,710 "Name". Αξία. 1155 00:56:16,710 --> 00:56:18,330 1156 00:56:18,330 --> 00:56:19,620 Έτσι, απολύτως αποδεκτή. 1157 00:56:19,620 --> 00:56:22,770 Διαφορετικοί τρόποι να γίνει αυτό. jQuery μόνο τείνει να είναι λίγο πιο συνοπτική και 1158 00:56:22,770 --> 00:56:25,230 σίγουρα πιο δημοφιλή ανάμεσα στους προγραμματιστές. 1159 00:56:25,230 --> 00:56:27,590 >> Τώρα, κάνω ένα κομμάτι της λογικής ελέγξετε, γιατί το πρόβλημα 1160 00:56:27,590 --> 00:56:30,820 Δήλωση είπαμε ρητά, εάν η χρήστης δεν έχει πληκτρολογήσει του ή της 1161 00:56:30,820 --> 00:56:32,580 όνομα, δεν εμφανίζουν ειδοποιήσεις. 1162 00:56:32,580 --> 00:56:35,390 Αλλά μπορείτε να ελέγξετε για αυτό, από μόνο έλεγχο για την κενή συμβολοσειρά για μια 1163 00:56:35,390 --> 00:56:37,850 quote-unquote αν υπάρχει τίποτα στην πραγματικότητα. 1164 00:56:37,850 --> 00:56:40,880 Αλλά αν δεν είναι ίσο με το απόσπασμα-unquote, Θέλω να καλέσω ειδοποιήσεις. 1165 00:56:40,880 --> 00:56:45,610 Και το ενδιαφέρον εδώ είναι ότι είμαστε με τον τελεστή συν, το οποίο 1166 00:56:45,610 --> 00:56:48,130 κάνει ό, τι σε JavaScript; 1167 00:56:48,130 --> 00:56:48,740 Ενώσετε. 1168 00:56:48,740 --> 00:56:50,690 Έτσι είναι σαν phps τελεστή τελεία. 1169 00:56:50,690 --> 00:56:52,820 Ίδια ιδέα, ελαφρώς διαφορετική σύνταξη. 1170 00:56:52,820 --> 00:56:55,280 Και είμαι απλά δημιουργώντας το string που είδατε στην οθόνη shot - 1171 00:56:55,280 --> 00:56:57,750 Γεια σας, έτσι και έτσι. 1172 00:56:57,750 --> 00:56:59,200 >> Και στη συνέχεια η τελευταία λεπτομέρεια είναι αυτό. 1173 00:56:59,200 --> 00:57:04,970 Γιατί μπορώ να επιστρέψει false μέσα αυτής ανώνυμη συνάρτηση; 1174 00:57:04,970 --> 00:57:07,420 >> ΚΟΙΝΟ: Δεν υπάρχει καμία αξία. 1175 00:57:07,420 --> 00:57:09,380 Μπορείτε να το βάλετε σε μορφή. 1176 00:57:09,380 --> 00:57:12,320 1177 00:57:12,320 --> 00:57:16,730 Λέει απλά, αν η αξία δεν είναι ίση με το κενό, τότε το κάνει. 1178 00:57:16,730 --> 00:57:20,040 1179 00:57:20,040 --> 00:57:20,940 Υπήρχε ένα κενό στην εν λόγω δήλωση. 1180 00:57:20,940 --> 00:57:21,170 >> DAVID J. MALAN: OK. 1181 00:57:21,170 --> 00:57:21,640 Προσοχή όμως. 1182 00:57:21,640 --> 00:57:22,830 Δεν υπάρχει κανείς άλλος εδώ. 1183 00:57:22,830 --> 00:57:25,510 Και αυτό ανακριβούς δήλωσης είναι έξω από το εάν οι συνθήκες. 1184 00:57:25,510 --> 00:57:29,470 Έτσι, αυτό επισημασμένη γραμμή, επιστρέφει false, εκτελεί δεν το θέμα αυτό, όταν 1185 00:57:29,470 --> 00:57:32,310 την υποβολή της φόρμας. 1186 00:57:32,310 --> 00:57:36,810 Τι σημαίνει επιστροφή ψευδείς μέσα σ 'αυτό χειρισμού συμβάντων, όπως λέγεται, 1187 00:57:36,810 --> 00:57:38,450 το εν λόγω συμβάν είναι υποβολής; 1188 00:57:38,450 --> 00:57:42,350 1189 00:57:42,350 --> 00:57:44,470 >> ΚΟΙΝΟ: Επειδή συμβαίνει μόνο μία φορά. 1190 00:57:44,470 --> 00:57:45,320 >> DAVID J. MALAN: συμβαίνει μόνο μία φορά. 1191 00:57:45,320 --> 00:57:46,821 Δεν είναι αρκετά. 1192 00:57:46,821 --> 00:57:47,292 Ναι; 1193 00:57:47,292 --> 00:57:50,589 >> ΚΟΙΝΟ: Αποτρέπει τη φόρμα από την υποβολή στην προεπιλεγμένη συμπεριφορά, 1194 00:57:50,589 --> 00:57:52,480 η οποία θα κάνει το reload τη σελίδα. 1195 00:57:52,480 --> 00:57:53,110 >> DAVID J. MALAN: Ακριβώς. 1196 00:57:53,110 --> 00:57:56,490 Έτσι είμαι υπερφόρτωση ο όρος υποβάλει εδώ, γιατί λέω, η μορφή είναι 1197 00:57:56,490 --> 00:57:57,670 που υποβάλλονται. 1198 00:57:57,670 --> 00:58:02,240 Αλλά, όπως σας προτείνω, στην πραγματικότητα δεν είναι έχουν υποβληθεί στο αληθινό τρόπο HTTP. 1199 00:58:02,240 --> 00:58:06,870 Όταν κάνετε κλικ στο κουμπί Υποβολή, λόγω της μας onsubmit χειριστή, είμαστε παρακολουθούν 1200 00:58:06,870 --> 00:58:09,040 ότι η υποβολή της φόρμας, ώστε να μιλήσουν. 1201 00:58:09,040 --> 00:58:11,290 Είμαστε στη συνέχεια να κάνει το πράγμα μας με τον κώδικα JavaScript. 1202 00:58:11,290 --> 00:58:14,070 Αλλά είμαι σκόπιμα επιστροφή ψευδείς, γιατί ό, τι δεν θέλω να συμβεί ένα 1203 00:58:14,070 --> 00:58:18,430 κλάσμα του δευτερολέπτου αργότερα, είναι για το σύνολο του μορφή η ίδια να υποβληθεί στο διαδίκτυο 1204 00:58:18,430 --> 00:58:22,800 server με βασικά ζευγάρια αξίας με την αλλαγή η διεύθυνση URL να είναι κάτι σαν 1205 00:58:22,800 --> 00:58:26,180 q = γάτες ή ό, τι κάναμε, για παράδειγμα, στην τάξη. 1206 00:58:26,180 --> 00:58:29,640 Δεν θέλω να συμβεί αυτό, γιατί δεν υπάρχει ακρόαση διακομιστή για αυτό 1207 00:58:29,640 --> 00:58:30,690 αποτελούν την υποβολή. 1208 00:58:30,690 --> 00:58:32,320 Είναι καθαρά γίνει στον κώδικα JavaScript. 1209 00:58:32,320 --> 00:58:35,760 Και αυτός είναι ο λόγος για τον οποίο δεν είχα καν μια δράση αποδίδουν στη φόρμα μου, γιατί 1210 00:58:35,760 --> 00:58:38,870 δεν προτίθενται για αυτό να ποτέ να πάτε στο διακομιστή. 1211 00:58:38,870 --> 00:58:40,780 >> Έτσι, αυτό είναι που υποβάλλονται. 1212 00:58:40,780 --> 00:58:44,340 Αλλά είμαστε παρακολουθούν το εν λόγω έντυπο την υποβολή και την πρόληψη της αθέτησης 1213 00:58:44,340 --> 00:58:47,477 συμπεριφορά, η οποία είναι πραγματικά πάνε όλα το δρόμο στο διακομιστή. 1214 00:58:47,477 --> 00:58:48,730 >> ΚΟΙΝΟ: Έτσι, κρατώντας το client-side. 1215 00:58:48,730 --> 00:58:49,780 >> DAVID J. MALAN: Κρατώντας το client-side. 1216 00:58:49,780 --> 00:58:51,030 Ακριβώς δεξιά. 1217 00:58:51,030 --> 00:58:53,240 1218 00:58:53,240 --> 00:58:55,757 Έπειτα επάνω ήταν μου oh MySQL. 1219 00:58:55,757 --> 00:59:00,000 1220 00:59:00,000 --> 00:59:00,430 >> ROB BOWDEN: OK. 1221 00:59:00,430 --> 00:59:04,990 Έτσι, αυτό το πρώτο ερώτημα ήταν γενικά τραχύ για τους ανθρώπους. 1222 00:59:04,990 --> 00:59:07,270 Αν και οι μεταγενέστερες πήγε καλύτερα. 1223 00:59:07,270 --> 00:59:12,260 Έτσι θα έπρεπε να επιλέξουν τα σωστά δεδομένα τύπων για δύο από αυτές τις στήλες. 1224 00:59:12,260 --> 00:59:17,750 Και τα δύο από αυτά έχουν κάποια τα πράγματα γι 'αυτούς που 1225 00:59:17,750 --> 00:59:20,620 κάνουν την επιλογή δύσκολη. 1226 00:59:20,620 --> 00:59:24,430 Έτσι int δεν είναι έγκυρη πληκτρολογήστε τον αριθμό. 1227 00:59:24,430 --> 00:59:29,410 Ο λόγος είναι ένα 12-ψήφιο λογαριασμό αριθμός, ένας int δεν είναι αρκετά μεγάλη για να 1228 00:59:29,410 --> 00:59:31,070 αποθηκεύσετε συνολικά ψηφία. 1229 00:59:31,070 --> 00:59:36,570 Έτσι, μια έγκυρη επιλογή θα ήταν μια μεγάλη int, αν τυχαίνει να γνωρίζω αυτό. 1230 00:59:36,570 --> 00:59:42,090 Μια άλλη επιλογή θα μπορούσε να έχει ένα πεδίο char μήκους 12. 1231 00:59:42,090 --> 00:59:44,560 Έτσι, είτε από εκείνους που θα έχουν εργαστεί. 1232 00:59:44,560 --> 00:59:46,100 Int δεν θα. 1233 00:59:46,100 --> 00:59:50,170 >> Τώρα, την ισορροπία, σκεφτείτε ότι πίσω σε pset7. 1234 00:59:50,170 --> 00:59:59,540 Γι 'αυτό και χρησιμοποιείται ειδικά δεκαδικών αποθηκεύει την τιμή των μετοχών ή - 1235 00:59:59,540 --> 01:00:00,550 >> DAVID J. MALAN: Μετρητά. 1236 01:00:00,550 --> 01:00:01,060 >> ROB BOWDEN: Μετρητά. 1237 01:00:01,060 --> 01:00:05,710 Χρησιμοποιήσαμε δεκαδικά για να αποθηκεύσετε το ποσό των μετρητών που ο χρήστης έχει σήμερα. 1238 01:00:05,710 --> 01:00:10,950 Έτσι, ο λόγος που το κάνουμε αυτό είναι γιατί, θυμηθείτε, επιπλέει. 1239 01:00:10,950 --> 01:00:12,480 Υπάρχει κινητής υποδιαστολής στην ακρίβεια. 1240 01:00:12,480 --> 01:00:18,200 Δεν μπορεί να αποθηκεύσει ακριβώς τα μετρητά αξίες όπως θέλουμε εδώ. 1241 01:00:18,200 --> 01:00:23,630 Έτσι δεκαδικό είναι σε θέση να ακριβώς κατάστημα κάτι, ας πούμε, με δύο δεκαδικά ψηφία. 1242 01:00:23,630 --> 01:00:27,630 Γι 'αυτό την ισορροπία, θέλουμε να είναι σε δεκαδικό σύστημα και να μην επιπλέουν. 1243 01:00:27,630 --> 01:00:30,230 >> DAVID J. MALAN: Και επίσης, πάρα πολύ, αν θα μπορούσε να είναι έξυπνος και σε άλλες 1244 01:00:30,230 --> 01:00:32,760 πλαίσια για να σκεφτεί, ίσως αυτό Είναι μια ευκαιρία για έναν int. 1245 01:00:32,760 --> 01:00:34,420 Θα συνεχίσω να παρακολουθείτε πένες. 1246 01:00:34,420 --> 01:00:38,670 Επειδή δείξαμε ρητά την προεπιλεγμένη αξία είναι 100,00, ότι 1247 01:00:38,670 --> 01:00:40,380 σημαίνει ότι θα μπορούσε απλώς να είναι μια int. 1248 01:00:40,380 --> 01:00:45,310 Και ένα άλλο πολύ λεπτότητα με τον αριθμό ήταν ότι δεν ήταν γραφτό 1249 01:00:45,310 --> 01:00:46,180 να είναι μια ερώτηση παγίδα. 1250 01:00:46,180 --> 01:00:49,860 Αλλά υπενθυμίζουν ότι ένας int σε MySQL, όπως σε C, τουλάχιστον στην 1251 01:00:49,860 --> 01:00:51,440 συσκευής, είναι 32-bit. 1252 01:00:51,440 --> 01:00:53,960 Και ακόμα κι αν δεν μπορείτε να περιμένετε να ξέρετε ακριβώς πόσα ψηφία που 1253 01:00:53,960 --> 01:00:56,910 μέσα, θυμάμαι ότι ο μεγαλύτερος αριθμός μπορείτε να εκπροσωπεί δυνητικά 1254 01:00:56,910 --> 01:01:00,710 με αριθμό 32-bit είναι περίπου αυτό; 1255 01:01:00,710 --> 01:01:02,760 >> Τι αριθμό δεν λέμε πάντα; 1256 01:01:02,760 --> 01:01:04,530 2 έως το 32, το οποίο είναι αυτό περίπου; 1257 01:01:04,530 --> 01:01:07,492 1258 01:01:07,492 --> 01:01:08,780 Δεν χρειάζεται να γνωρίζουν με ακρίβεια. 1259 01:01:08,780 --> 01:01:10,580 Αλλά χονδρικά είναι χρήσιμη στη ζωή. 1260 01:01:10,580 --> 01:01:12,200 Είναι περίπου 4 δισ. ευρώ. 1261 01:01:12,200 --> 01:01:14,430 Έτσι, έχουμε πει ότι μερικές φορές. 1262 01:01:14,430 --> 01:01:16,360 Ξέρω ότι έχω πει ότι μερικές φορές. 1263 01:01:16,360 --> 01:01:17,670 Και είναι περίπου 4 δισ. ευρώ. 1264 01:01:17,670 --> 01:01:19,710 Και αυτό είναι ένας καλός κανόνας του αντίχειρα να γνωρίζουν. 1265 01:01:19,710 --> 01:01:21,880 Αν έχετε 8 bits, 256 είναι ο μαγικός αριθμός. 1266 01:01:21,880 --> 01:01:24,160 Αν έχετε 32 bits, 4 δις ή να δώσει. 1267 01:01:24,160 --> 01:01:27,140 Έτσι, αν απλά γράψετε 4 δισ. ευρώ, θα δείτε ότι είναι λιγότερα ψηφία από 1268 01:01:27,140 --> 01:01:30,970 12, το οποίο σημαίνει ότι δεν είναι σαφώς αρκετή εκφραστικότητα για να συλλάβει ένα 1269 01:01:30,970 --> 01:01:34,220 12-ψήφιο αριθμό λογαριασμού. 1270 01:01:34,220 --> 01:01:34,940 >> ROB BOWDEN: OK. 1271 01:01:34,940 --> 01:01:38,520 Έτσι, οι υπόλοιπες πήγαν καλύτερα. 1272 01:01:38,520 --> 01:01:40,900 Έτσι, ας υποθέσουμε ότι η τράπεζα επιβάλλει $ 20 μηνιαίες 1273 01:01:40,900 --> 01:01:42,400 τέλος συντήρησης σε όλους τους λογαριασμούς. 1274 01:01:42,400 --> 01:01:45,506 Με ποιο ερώτημα SQL θα μπορούσε η τράπεζα αφαιρούμε $ 20 από την κάθε μέτρηση, ακόμη και αν 1275 01:01:45,506 --> 01:01:47,520 αυτό οδηγεί σε κάποια αρνητικά υπόλοιπα; 1276 01:01:47,520 --> 01:01:50,380 Έτσι, βασικά, υπάρχουν τέσσερις κύριοι τύποι των ερωτήσεων - 1277 01:01:50,380 --> 01:01:52,840 εισάγετε, επιλέξτε, ενημέρωση και διαγραφή. 1278 01:01:52,840 --> 01:01:56,080 Έτσι, αυτό που νομίζουμε ότι είμαστε πρόκειται να χρησιμοποιήσετε εδώ; 1279 01:01:56,080 --> 01:01:57,000 Ενημέρωση. 1280 01:01:57,000 --> 01:01:58,260 >> Έτσι, ας ρίξουμε μια ματιά. 1281 01:01:58,260 --> 01:02:04,290 1282 01:02:04,290 --> 01:02:05,870 Έτσι, εδώ είμαστε ενημέρωση. 1283 01:02:05,870 --> 01:02:09,900 Τι πίνακα είμαστε ενημέρωση των λογαριασμών; 1284 01:02:09,900 --> 01:02:11,670 Έτσι, την ενημέρωση των λογαριασμών. 1285 01:02:11,670 --> 01:02:15,390 Και τότε η σύνταξη, λέει, τι στους λογαριασμούς είμαστε ενημέρωση; 1286 01:02:15,390 --> 01:02:19,520 Λοιπόν, είμαστε ρύθμιση ισορροπίας ίση με το τρέχουσα αξία της ισορροπίας μείον 20. 1287 01:02:19,520 --> 01:02:22,860 Έτσι, αυτό θα ενημερώσει όλες τις γραμμές των λογαριασμών, αφαιρώντας 1288 01:02:22,860 --> 01:02:26,250 $ 20 από το υπόλοιπο. 1289 01:02:26,250 --> 01:02:29,260 >> DAVID J. MALAN: Ένα κοινό λάθος εδώ, ακόμα κι αν μερικές φορές συγχώρεσε, 1290 01:02:29,260 --> 01:02:32,990 ήταν να έχουν πραγματικά PHP κώδικα εδώ καλώντας το ερώτημα λειτουργία ή τη θέση 1291 01:02:32,990 --> 01:02:35,460 εισαγωγικά γύρω από ό, τι απαιτεί δεν πρέπει να είναι εκεί. 1292 01:02:35,460 --> 01:02:39,780 >> ROB BOWDEN: Να θυμάστε ότι η MySQL είναι μια ξεχωριστή γλώσσα από την PHP. 1293 01:02:39,780 --> 01:02:42,410 Εμείς τυχαίνει να γράφει MySQL σε PHP. 1294 01:02:42,410 --> 01:02:46,180 Και PHP είναι τότε αποστολή πάνω στο διακομιστή MySQL. 1295 01:02:46,180 --> 01:02:51,120 Αλλά δεν χρειάζεται PHP, προκειμένου να επικοινωνεί με το διακομιστή MySQL. 1296 01:02:51,120 --> 01:02:51,730 >> DAVID J. MALAN: Ακριβώς. 1297 01:02:51,730 --> 01:02:54,240 Έτσι, δεν έχει μεταβλητές με το σύμβολο του δολαρίου θα πρέπει να είναι σε αυτό το πλαίσιο. 1298 01:02:54,240 --> 01:02:59,550 Μπορεί να κάνει ακριβώς όλα τα μαθηματικά εντός της ίδιας της βάσης δεδομένων. 1299 01:02:59,550 --> 01:03:00,080 >> ROB BOWDEN: OK. 1300 01:03:00,080 --> 01:03:01,300 Έτσι ώστε το επόμενο. 1301 01:03:01,300 --> 01:03:02,731 Είναι αυτό το επόμενο; 1302 01:03:02,731 --> 01:03:03,210 Ναι. 1303 01:03:03,210 --> 01:03:06,570 Έτσι, με ό, τι SQL ερώτημα θα μπορούσε η τράπεζα ανακτήσετε τους αριθμούς των λογαριασμών του της 1304 01:03:06,570 --> 01:03:09,300 πλουσιότερες πελάτες, τα άτομα με υπόλοιπα μεγαλύτερες από 1000; 1305 01:03:09,300 --> 01:03:13,280 Έτσι, ποια από τις τέσσερις βασικούς τύπους θα πάμε να θέλουν εδώ; 1306 01:03:13,280 --> 01:03:14,430 Επιλέξτε. 1307 01:03:14,430 --> 01:03:16,650 Έτσι, θέλουμε να επιλέξετε. 1308 01:03:16,650 --> 01:03:17,610 Τι θέλουμε να επιλέξετε; 1309 01:03:17,610 --> 01:03:19,380 Τι στήλη θέλουμε να επιλέξετε; 1310 01:03:19,380 --> 01:03:20,970 Θα ήθελα συγκεκριμένα για να επιλέξετε τον αριθμό. 1311 01:03:20,970 --> 01:03:23,910 Αλλά αν το εν λόγω αστέρι, εμείς Επίσης, δέχθηκε ότι. 1312 01:03:23,910 --> 01:03:25,820 >> Έτσι, επιλέξτε τον αριθμό από ό, τι το τραπέζι; 1313 01:03:25,820 --> 01:03:26,640 Λογαριασμοί. 1314 01:03:26,640 --> 01:03:28,370 Και τότε η κατάσταση που θέλουμε; 1315 01:03:28,370 --> 01:03:30,140 Όπου ισορροπίας μεγαλύτερη από 1000. 1316 01:03:30,140 --> 01:03:31,720 Έχουμε επίσης αναλάβει μεγαλύτερη ή ίση. 1317 01:03:31,720 --> 01:03:35,230 1318 01:03:35,230 --> 01:03:36,190 Τελευταία ένα. 1319 01:03:36,190 --> 01:03:42,940 Με ποιο ερώτημα SQL θα μπορούσε η τράπεζα κοντά, δηλαδή, διαγράφει κάθε λογαριασμό που 1320 01:03:42,940 --> 01:03:44,480 έχει μια ισορροπία των $ 0; 1321 01:03:44,480 --> 01:03:47,620 Έτσι, ποιο από τα τέσσερα είμαστε πρόκειται να θέλετε να χρησιμοποιήσετε; 1322 01:03:47,620 --> 01:03:48,320 Διαγραφή. 1323 01:03:48,320 --> 01:03:50,180 Έτσι, η σύνταξη γι 'αυτό; 1324 01:03:50,180 --> 01:03:51,890 Διαγραφή από το ποιο τραπέζι; 1325 01:03:51,890 --> 01:03:53,550 Λογαριασμοί. 1326 01:03:53,550 --> 01:03:55,790 Και στη συνέχεια η κατάσταση στην οποία θέλουμε να διαγράψετε - 1327 01:03:55,790 --> 01:03:57,280 όπου ισορροπία ισούται με το μηδέν. 1328 01:03:57,280 --> 01:04:03,050 Έτσι διαγράψετε όλες τις σειρές από τους λογαριασμούς όπου το υπόλοιπο είναι μηδέν. 1329 01:04:03,050 --> 01:04:04,300 Ερωτήσεις σχετικά με κάποιο από αυτά; 1330 01:04:04,300 --> 01:04:08,840 1331 01:04:08,840 --> 01:04:10,260 Θέλετε να περιμένουν στην ουρά; 1332 01:04:10,260 --> 01:04:11,200 >> DAVID J. MALAN: Οδηγός Queue. 1333 01:04:11,200 --> 01:04:17,110 Έτσι, σε αυτό το ένα, σας δώσαμε μια κάπως γνωστή δομή που να διερευνηθούν 1334 01:04:17,110 --> 01:04:20,450 bit στην τάξη μαζί του structs, που ήταν ένα δεδομένο 1335 01:04:20,450 --> 01:04:21,910 που σχετίζονται με το πνεύμα δομή. 1336 01:04:21,910 --> 01:04:24,670 Η διαφορά όμως με μια ουρά είναι ότι θα έπρεπε να θυμόμαστε κάποιο τρόπο ο οποίος 1337 01:04:24,670 --> 01:04:27,900 ήταν στο μπροστινό μέρος της ουράς, σε μεγάλο μέρος, έτσι ώστε θα μπορούσαμε να κάνουμε περισσότερα 1338 01:04:27,900 --> 01:04:30,530 αποδοτική χρήση της μνήμης, τουλάχιστον αν χρησιμοποιούσαμε μια σειρά. 1339 01:04:30,530 --> 01:04:35,460 >> Επειδή η ανάκληση, αν έχουμε έναν πίνακα, εάν, για παράδειγμα, αυτή είναι η πρόσοψη 1340 01:04:35,460 --> 01:04:38,470 η ουρά, αν έχω μπει στην ουρά εδώ, και στη συνέχεια κάποιος παίρνει σε γραμμή 1341 01:04:38,470 --> 01:04:42,710 πίσω μου, πίσω μου, πίσω μου, και ένα άτομο βήματα από τη γραμμή, θα 1342 01:04:42,710 --> 01:04:45,930 θα μπορούσε, όπως είδαμε κάποιες από τις ανθρώπινες μας εθελοντές στην τάξη, έχει ο καθένας 1343 01:04:45,930 --> 01:04:47,100 μετατόπιση με αυτόν τον τρόπο. 1344 01:04:47,100 --> 01:04:50,880 Αλλά σε γενικές γραμμές, αφού ο καθένας κάνει κάτι που δεν είναι η καλύτερη χρήση του χρόνου 1345 01:04:50,880 --> 01:04:54,600 σε ένα πρόγραμμα, γιατί αυτό σημαίνει ότι σας αλγόριθμος τρέχει σε ό, τι 1346 01:04:54,600 --> 01:04:56,520 ασυμπτωτική χρόνο λειτουργίας; 1347 01:04:56,520 --> 01:04:57,420 Είναι γραμμική. 1348 01:04:57,420 --> 01:04:59,600 >> Και νιώθω σαν αυτό είναι χαζό. 1349 01:04:59,600 --> 01:05:02,890 Εάν το επόμενο πρόσωπο στη σειρά είναι η επόμενη πρόσωπο που υποτίθεται ότι θα πάει σε το 1350 01:05:02,890 --> 01:05:04,660 κατάστημα, δεν έχουν όλα να προχωρήσουμε μαζί. 1351 01:05:04,660 --> 01:05:08,200 Απλά αφήστε το άτομο να αποπτέρωση off όταν έρθει η ώρα, για παράδειγμα. 1352 01:05:08,200 --> 01:05:09,870 Έτσι, μπορούμε να εξοικονομήσουμε λίγο χρόνο εκεί. 1353 01:05:09,870 --> 01:05:14,840 Και έτσι για να το κάνουμε αυτό όμως, ότι μέσα ότι η κεφαλή της ουράς ή η 1354 01:05:14,840 --> 01:05:18,060 μπροστά από την ουρά πρόκειται να σταδιακά κινούνται όλο και βαθύτερα 1355 01:05:18,060 --> 01:05:23,340 στη συστοιχία και τελικά θα μπορούσε πραγματικά τυλίξτε γύρω εάν είμαστε χρησιμοποιώντας ένα 1356 01:05:23,340 --> 01:05:25,790 πίνακα για να αποθηκεύσετε το λαό σε αυτήν την ουρά. 1357 01:05:25,790 --> 01:05:28,390 Έτσι, μπορείτε σχεδόν να σκεφτείτε το πίνακα ως ένα κυκλικό δεδομένων 1358 01:05:28,390 --> 01:05:29,880 δομή με αυτή την έννοια. 1359 01:05:29,880 --> 01:05:33,970 >> Έτσι κατά κάποιο τρόπο πρέπει να παρακολουθείτε το μέγεθός της ή πραγματικά το τέλος της 1360 01:05:33,970 --> 01:05:36,250 και στη συνέχεια, όταν η αρχή του είναι. 1361 01:05:36,250 --> 01:05:39,490 Γι 'αυτό προτείνουμε να δηλώσουν μία τέτοια ουρά, καλώντας 1362 01:05:39,490 --> 01:05:41,330 το q, μόνο ένα γράμμα. 1363 01:05:41,330 --> 01:05:44,570 Στη συνέχεια, προτείνουμε ότι το μέτωπο είναι αρχικοποιείται σε μηδέν και ότι το μέγεθος 1364 01:05:44,570 --> 01:05:45,470 να προετοιμαστεί με μηδέν. 1365 01:05:45,470 --> 01:05:47,770 >> Έτσι, αυτή τη στιγμή, δεν υπάρχει τίποτα εσωτερικό της εν λόγω ουράς. 1366 01:05:47,770 --> 01:05:50,910 Και σας ζητάμε να ολοκληρώσετε την εφαρμογή του enqueue παρακάτω στο 1367 01:05:50,910 --> 01:05:55,250 κατά τέτοιο τρόπο ώστε η συνάρτηση προσθέτει n έως το τέλος του q και, στη συνέχεια, επιστρέφει true. 1368 01:05:55,250 --> 01:05:58,690 Αλλά εάν το q είναι πλήρης ή αρνητική, ο λειτουργία θα πρέπει αντ 'αυτού να επιστρέψει false. 1369 01:05:58,690 --> 01:06:01,060 Και σας έδωσε ένα ζευγάρι των υποθέσεων. 1370 01:06:01,060 --> 01:06:04,320 Αλλά δεν είναι πραγματικά λειτουργικά περίπτωση, υπάρχει μόνο ότι bool, 1371 01:06:04,320 --> 01:06:06,690 επειδή, από τεχνική άποψη, δεν bool υπάρχουν σε C εκτός και αν περιλαμβάνουν 1372 01:06:06,690 --> 01:06:07,310 συγκεκριμένο αρχείο κεφαλίδας. 1373 01:06:07,310 --> 01:06:09,350 Έτσι ώστε ήταν απλά βεβαιωθείτε ότι υπάρχει ήταν δεν είναι αυτό ένα τέχνασμα 1374 01:06:09,350 --> 01:06:10,940 ζήτημα το είδος του πράγματος. 1375 01:06:10,940 --> 01:06:16,280 >> Έτσι enqueue, προτείναμε στο δείγμα λύσεις για την εφαρμογή ως ακολούθως. 1376 01:06:16,280 --> 01:06:20,420 Ένα, θα ελέγχει πρώτα την ευκολία, τα χαμηλός-κρεμώντας φρούτα. 1377 01:06:20,420 --> 01:06:23,820 Αν η ουρά είναι πλήρης ή ο αριθμός που προσπαθείτε να εισαγάγετε είναι λιγότερο 1378 01:06:23,820 --> 01:06:26,380 από το μηδέν, το οποίο είπαμε στην προδιαγραφή του προβλήματος θα πρέπει να 1379 01:06:26,380 --> 01:06:30,320 δεν πρέπει να επιτρέπεται, διότι θέλουμε μόνο μη αρνητικές τιμές, τότε θα πρέπει να 1380 01:06:30,320 --> 01:06:31,640 μόλις επιστρέψει false αμέσως. 1381 01:06:31,640 --> 01:06:33,820 Έτσι, κάποια σχετικά εύκολο σφάλμα ελέγχου. 1382 01:06:33,820 --> 01:06:38,720 Αν όμως θέλετε να προσθέσετε αυτό το πραγματικό τον αριθμό, θα έπρεπε να κάνει ένα κομμάτι της 1383 01:06:38,720 --> 01:06:39,440 Αναφέρομαι εδώ. 1384 01:06:39,440 --> 01:06:41,330 Και αυτό είναι όπου είναι λίγο ενοχλητικό διανοητικά, γιατί πρέπει να 1385 01:06:41,330 --> 01:06:43,000 καταλάβω πώς να χειριστεί περιτύλιξης. 1386 01:06:43,000 --> 01:06:46,870 >> Αλλά το μικρόβιο της ιδέας εδώ ότι είναι από ενδιαφέρον για εμάς είναι ότι περιτύλιξης 1387 01:06:46,870 --> 01:06:51,480 συνεπάγεται συχνά modular αριθμητική και το mod φορέα, από την πλευρά τοις εκατό, 1388 01:06:51,480 --> 01:06:55,140 όπου μπορείτε να πάτε από μια μεγαλύτερη αξία πίσω στο μηδέν και στη συνέχεια, ένα και δύο και 1389 01:06:55,140 --> 01:06:58,650 τρεις και στη συνέχεια πίσω γύρω στο μηδέν, ένα και δύο και τρία και ούτω καθεξής 1390 01:06:58,650 --> 01:06:59,380 ξανά και ξανά. 1391 01:06:59,380 --> 01:07:02,880 Έτσι, ο τρόπος που προτείνουμε να γίνει αυτό είναι ότι θέλουμε να το δείκτη σε 1392 01:07:02,880 --> 01:07:05,850 array ονομάζεται αριθμών, όταν ακέραιοι μας βρίσκονται. 1393 01:07:05,850 --> 01:07:10,740 Αλλά για να φτάσουμε εκεί, πρώτα θέλουμε να κάνουμε ανεξάρτητα από το μέγεθος της ουράς αναμονής είναι όμως 1394 01:07:10,740 --> 01:07:14,080 στη συνέχεια, προσθέστε σε αυτό ανεξάρτητα από το μπροστά από τη λίστα είναι. 1395 01:07:14,080 --> 01:07:17,880 Και το αποτέλεσμα αυτού είναι να μας βάλει σε η σωστή θέση στην ουρά και 1396 01:07:17,880 --> 01:07:20,970 να υποθέσω ότι το πρώτο πρόσωπο στη γραμμή είναι στην αρχή, το οποίο ο ίδιος ή 1397 01:07:20,970 --> 01:07:24,130 που θα μπορούσε να είναι απολύτως αν Επίσης μετατόπιση όλους. 1398 01:07:24,130 --> 01:07:26,710 Αλλά είμαστε απλά δημιουργώντας το έργο για τους εαυτούς μας αν παίρναμε 1399 01:07:26,710 --> 01:07:27,800 ότι η συγκεκριμένη διαδρομή. 1400 01:07:27,800 --> 01:07:29,330 >> Έτσι μπορούμε να το κρατήσει σχετικά απλή. 1401 01:07:29,330 --> 01:07:32,180 Οφείλουμε να θυμόμαστε ότι μόνο προστίθεται ένα int στην ουρά. 1402 01:07:32,180 --> 01:07:35,850 Και τότε θα επιστρέψουν μόλις αλήθεια. 1403 01:07:35,850 --> 01:07:38,560 Εν τω μεταξύ, σε dequeue, ζητήσαμε μπορείτε να κάνετε τα εξής. 1404 01:07:38,560 --> 01:07:42,260 Το εφαρμόσει κατά τέτοιο τρόπο ώστε να dequeues, δηλαδή αφαιρεί και επιστρέφει, 1405 01:07:42,260 --> 01:07:44,190 το int στο μπροστινό μέρος του ουρά. 1406 01:07:44,190 --> 01:07:46,410 Για να αφαιρέσετε το int, αρκεί να το ξεχάσω. 1407 01:07:46,410 --> 01:07:47,650 Δεν χρειάζεται να παρακάμψετε κομμάτι της. 1408 01:07:47,650 --> 01:07:48,820 Έτσι, εξακολουθεί να είναι πραγματικά εκεί. 1409 01:07:48,820 --> 01:07:51,930 Ακριβώς όπως και τα δεδομένα σε έναν σκληρό δίσκο, είμαστε απλά αγνοώντας το γεγονός 1410 01:07:51,930 --> 01:07:52,970 ότι υπάρχει τώρα. 1411 01:07:52,970 --> 01:07:55,520 Και αν το q είναι άδειο, θα πρέπει να αντί να επιστρέψει αρνητική 1. 1412 01:07:55,520 --> 01:07:56,750 Έτσι, αυτό το αισθάνεται αυθαίρετη. 1413 01:07:56,750 --> 01:08:01,640 Γιατί να επιστρέψει αρνητική 1 αντί λάθος; 1414 01:08:01,640 --> 01:08:02,620 Ναι. 1415 01:08:02,620 --> 01:08:05,070 >> ΚΟΙΝΟ: Q είναι η αποθήκευση θετικές τιμές. 1416 01:08:05,070 --> 01:08:10,950 Δεδομένου ότι μπορείτε να αποθηκεύσετε μόνο θετικές τιμές στο q, αρνητικό είναι ένα σφάλμα. 1417 01:08:10,950 --> 01:08:11,510 >> DAVID J. MALAN: Εντάξει, είναι αλήθεια. 1418 01:08:11,510 --> 01:08:14,850 Έτσι, επειδή είμαστε μόνο αποθήκευση θετική ή μηδενικές τιμές, τότε είναι μια χαρά για να 1419 01:08:14,850 --> 01:08:18,050 επιστρέψει μια αρνητική τιμή ως φρουρός αξία, ένα ειδικό σύμβολο. 1420 01:08:18,050 --> 01:08:21,630 Αλλά είστε ξαναγράψιμο της ιστορίας εκεί, επειδή ο λόγος που είμαστε μόνο 1421 01:08:21,630 --> 01:08:25,890 επιστροφή μη αρνητικές τιμές είναι γιατί θέλουμε να 1422 01:08:25,890 --> 01:08:27,670 έχουν αξία φρουρού. 1423 01:08:27,670 --> 01:08:32,617 Έτσι, πιο συγκεκριμένα, γιατί δεν είναι μόνο return false σε περίπτωση σφάλματος; 1424 01:08:32,617 --> 01:08:33,099 Ναι. 1425 01:08:33,099 --> 01:08:35,510 >> ΚΟΙΝΟ: Έχετε αποτύχει να επιστρέφουν έναν ακέραιο. 1426 01:08:35,510 --> 01:08:36,630 >> DAVID J. MALAN: Ακριβώς. 1427 01:08:36,630 --> 01:08:38,569 Και αυτό είναι όπου παίρνει C αρκετά περιοριστικό. 1428 01:08:38,569 --> 01:08:40,590 Εάν λέτε θα πάμε για να επιστρέψει έναν int, έχετε 1429 01:08:40,590 --> 01:08:41,279 για να επιστρέψει έναν int. 1430 01:08:41,279 --> 01:08:43,689 Δεν μπορείτε να πάρετε φανταχτερό και να αρχίσει την επιστροφή μια bool ή ένα πλωτήρα ή 1431 01:08:43,689 --> 01:08:45,040 σπάγκο ή κάτι τέτοιο. 1432 01:08:45,040 --> 01:08:49,370 Τώρα, εν τω μεταξύ, JavaScript και PHP και κάποιες άλλες γλώσσες μπορεί, στην πραγματικότητα, 1433 01:08:49,370 --> 01:08:51,310 έχετε την επιστροφή διαφορετικά τύπους τιμών. 1434 01:08:51,310 --> 01:08:54,819 Και αυτό μπορεί πραγματικά να είναι χρήσιμη, όταν θα μπορούσε να επιστρέψει το θετικό ints, μηδενικά, 1435 01:08:54,819 --> 01:08:59,439 αρνητικές ints ή ψευδείς ή null ακόμα και να δηλώσει σφάλμα. 1436 01:08:59,439 --> 01:09:01,890 Αλλά δεν έχουμε ότι ευελιξία σε C. 1437 01:09:01,890 --> 01:09:04,569 >> Έτσι, με dequeue, τι προτίθεστε να κάνετε είναι - 1438 01:09:04,569 --> 01:09:07,350 1439 01:09:07,350 --> 01:09:09,830 >> ROB BOWDEN: Μπορείτε να επιστρέψετε ψευδής. 1440 01:09:09,830 --> 01:09:13,189 Είναι απλά ότι είναι ψευδή hash καθορίσει ψευδείς στο μηδέν. 1441 01:09:13,189 --> 01:09:16,000 Έτσι, αν επιστρέψει false, που επιστρέφετε το μηδέν. 1442 01:09:16,000 --> 01:09:25,470 Και το μηδέν είναι μια έγκυρη πράγμα στην ουρά μας, ενώ οι αρνητικές 1 δεν είναι αν 1443 01:09:25,470 --> 01:09:27,000 ψευδείς έτυχε να είναι αρνητική 1. 1444 01:09:27,000 --> 01:09:29,972 Αλλά δεν θα έπρεπε καν Πρέπει να γνωρίζετε ότι. 1445 01:09:29,972 --> 01:09:32,399 >> DAVID J. MALAN: Αυτό είναι Γι 'αυτό δεν το λένε. 1446 01:09:32,399 --> 01:09:36,450 >> ROB BOWDEN: Αλλά δεν ήταν αλήθεια ότι δεν μπορεί να επιστρέψει false. 1447 01:09:36,450 --> 01:09:37,700 >> DAVID J. MALAN: Σίγουρα. 1448 01:09:37,700 --> 01:09:40,920 1449 01:09:40,920 --> 01:09:44,240 Έτσι dequeue, παρατηρήσετε δεχόμαστε άκυρη ως επιχείρημά της. 1450 01:09:44,240 --> 01:09:45,479 Και αυτό γιατί δεν είμαστε περνά τίποτα μέσα 1451 01:09:45,479 --> 01:09:48,359 Εμείς απλά θέλετε να καταργήσετε το στοιχείο στο μπροστινό μέρος της ουράς. 1452 01:09:48,359 --> 01:09:49,819 Λοιπόν, πώς θα μπορούσαμε να κάνετε για αυτό; 1453 01:09:49,819 --> 01:09:51,290 Λοιπόν, πρώτα, ας το κάνουμε γρήγορο έλεγχο λογική. 1454 01:09:51,290 --> 01:09:53,350 Εάν το μέγεθος της ουράς αναμονής είναι 0, υπάρχει καμία δουλειά να γίνει. 1455 01:09:53,350 --> 01:09:54,210 Επιστροφή αρνητική 1. 1456 01:09:54,210 --> 01:09:54,800 Έγινε. 1457 01:09:54,800 --> 01:09:56,340 Έτσι, αυτό είναι μερικές γραμμές του προγράμματός μου. 1458 01:09:56,340 --> 01:09:58,180 Έτσι, μόνο τέσσερις γραμμές παραμένουν. 1459 01:09:58,180 --> 01:10:01,310 >> Εδώ, λοιπόν, αποφασίσετε να μειώσετε το μέγεθος. 1460 01:10:01,310 --> 01:10:04,620 Και Μειώσης το μέγεθος αποτελεσματικά σημαίνει ότι ξεχνάω 1461 01:10:04,620 --> 01:10:06,010 κάτι που είναι εκεί μέσα. 1462 01:10:06,010 --> 01:10:09,910 Αλλά δεν έχω, επίσης, να ενημερωθούν όταν το μέτωπο των αριθμών είναι. 1463 01:10:09,910 --> 01:10:11,620 Έτσι για να το κάνουμε αυτό, θα πρέπει να κάνει δύο πράγματα. 1464 01:10:11,620 --> 01:10:16,390 Θα πρέπει πρώτα να θυμηθείτε τι ο αριθμός βρίσκεται στο μπροστινό μέρος της ουράς, 1465 01:10:16,390 --> 01:10:17,860 γιατί πρέπει να επιστρέψει αυτό το πράγμα. 1466 01:10:17,860 --> 01:10:20,910 Γι 'αυτό δεν θέλω να ξεχάσω λάθος γι 'αυτό και στη συνέχεια να το αντικαταστήσετε. 1467 01:10:20,910 --> 01:10:22,840 Είμαι ακριβώς πρόκειται να θυμάστε σε int. 1468 01:10:22,840 --> 01:10:27,310 >> Και τώρα, θέλω να αναβαθμίσω q.front να q.front +1. 1469 01:10:27,310 --> 01:10:30,070 Έτσι, αν αυτό ήταν το πρώτο πρόσωπο στην γραμμή, τώρα, θέλω να κάνω συν 1 1470 01:10:30,070 --> 01:10:31,930 σημείο στο επόμενο πρόσωπο στη γραμμή. 1471 01:10:31,930 --> 01:10:33,420 Αλλά έχω να χειριστεί αυτό το περιτύλιξης. 1472 01:10:33,420 --> 01:10:37,270 Και, αν η χωρητικότητα είναι μια παγκόσμια σταθερά, ότι πρόκειται να μου επιτρέψετε να βεβαιωθείτε 1473 01:10:37,270 --> 01:10:41,140 όπως τόνισα στο τελευταίο άτομο γραμμή, η λειτουργία modulo θα φέρει 1474 01:10:41,140 --> 01:10:43,840 μου πίσω στο μηδέν, η μπροστά από την ουρά. 1475 01:10:43,840 --> 01:10:46,050 Και αυτό χειρίζεται την περιτύλιξης εδώ. 1476 01:10:46,050 --> 01:10:48,950 Και τότε θα προχωρήσει να επιστρέψει n. 1477 01:10:48,950 --> 01:10:51,530 >> Τώρα, για να κυριολεκτήσουμε, δεν το έκανα πρέπει να δηλώνουν n. 1478 01:10:51,530 --> 01:10:53,880 Δεν είχα να το αρπάξει και να το αποθηκεύσετε προσωρινά, επειδή η τιμή είναι 1479 01:10:53,880 --> 01:10:54,740 ακόμα εκεί. 1480 01:10:54,740 --> 01:10:57,490 Έτσι θα μπορούσα να κάνω ακριβώς το σωστό αριθμητικό να επιστρέψει ο πρώην επικεφαλής 1481 01:10:57,490 --> 01:10:58,450 της ουράς. 1482 01:10:58,450 --> 01:11:01,850 Αλλά εγώ απλά ένιωσα ότι αυτό ήταν πιο σαφής να αρπάξει πραγματικά την int, βάλτε 1483 01:11:01,850 --> 01:11:04,320 σε n, και στη συνέχεια επιστρέφουν ότι για λόγους σαφήνειας, αλλά 1484 01:11:04,320 --> 01:11:05,735 δεν είναι απολύτως απαραίτητο. 1485 01:11:05,735 --> 01:11:09,313 1486 01:11:09,313 --> 01:11:12,130 Ψιτ. 1487 01:11:12,130 --> 01:11:13,410 Είναι όλοι προφερθεί στο κεφάλι μου. 1488 01:11:13,410 --> 01:11:15,940 1489 01:11:15,940 --> 01:11:19,110 >> ROB BOWDEN: Έτσι το πρώτο ερώτημα είναι το δυαδικό δένδρο πρόβλημα. 1490 01:11:19,110 --> 01:11:22,140 Έτσι, το πρώτο ερώτημα είναι, είμαστε δεδομένου αυτοί οι αριθμοί. 1491 01:11:22,140 --> 01:11:27,160 Και θέλουμε να τα εισάγετε με κάποιον τρόπο στην Αυτοί οι κόμβοι έτσι ώστε να είναι ένα 1492 01:11:27,160 --> 01:11:30,110 έγκυρο δυαδικό δένδρο αναζήτησης. 1493 01:11:30,110 --> 01:11:36,260 Έτσι, το ένα πράγμα που πρέπει να θυμάστε σχετικά με δυαδικά δένδρα αναζήτησης είναι ότι δεν είναι 1494 01:11:36,260 --> 01:11:39,800 ακριβώς αυτό το πράγμα προς τα αριστερά είναι μικρότερη και το πράγμα που πρέπει να 1495 01:11:39,800 --> 01:11:41,120 το δικαίωμα είναι μεγαλύτερη. 1496 01:11:41,120 --> 01:11:44,580 Πρέπει να είναι ότι ολόκληρο το δέντρο να το αριστερό είναι μικρότερη, και ολόκληρο το δέντρο 1497 01:11:44,580 --> 01:11:45,740 προς τα δεξιά είναι μεγαλύτερη. 1498 01:11:45,740 --> 01:11:55,260 >> Έτσι, αν βάλω 34 εδώ στην κορυφή, και στη συνέχεια Έβαλα 20 εδώ, έτσι ώστε να είναι έγκυρες, καθόσον 1499 01:11:55,260 --> 01:11:56,970 τώρα, γιατί 34 έως εδώ. 1500 01:11:56,970 --> 01:11:57,920 20 πρόκειται προς τα αριστερά. 1501 01:11:57,920 --> 01:11:58,950 Έτσι ώστε να είναι λιγότερο. 1502 01:11:58,950 --> 01:12:03,640 Αλλά δεν μπορώ να στη συνέχεια να βάλει 59 εδώ, γιατί ακόμη και αν είναι 59 σχετικά με το δικαίωμα 20, 1503 01:12:03,640 --> 01:12:06,140 είναι ακόμα στο αριστερό μέρος της 34. 1504 01:12:06,140 --> 01:12:10,760 Έτσι, με αυτό το εμπόδιο στο μυαλό, η ευκολότερος τρόπος για την επίλυση αυτού πιθανώς 1505 01:12:10,760 --> 01:12:14,330 το πρόβλημα είναι ακριβώς το είδος από αυτούς τους αριθμούς - 1506 01:12:14,330 --> 01:12:18,720 έτσι 20, 34, 36, 52, 59, 106. 1507 01:12:18,720 --> 01:12:21,640 Και στη συνέχεια, τοποθετήστε τα από αριστερά προς τα δεξιά. 1508 01:12:21,640 --> 01:12:23,390 >> Έτσι, 20 πηγαίνει εδώ. 1509 01:12:23,390 --> 01:12:24,630 34 πηγαίνει εδώ. 1510 01:12:24,630 --> 01:12:25,830 36 πηγαίνει εδώ. 1511 01:12:25,830 --> 01:12:29,360 52, 59, 106. 1512 01:12:29,360 --> 01:12:34,730 Και μπορείτε επίσης θα μπορούσε να καταλάβει με κάποιοι συνδέοντας και την υλοποίηση, 1513 01:12:34,730 --> 01:12:38,830 Ω, περιμένετε, δεν έχω αρκετά αριθμούς να συμπληρώσετε το πεδίο αυτό εδώ. 1514 01:12:38,830 --> 01:12:42,170 Γι 'αυτό πρέπει να reshift τι μου σημείωση διαδρομή πρόκειται να είναι. 1515 01:12:42,170 --> 01:12:47,490 Να σημειωθεί όμως ότι στην τελική τρεις, αν μπορείτε να διαβάσετε από αριστερά προς τα δεξιά, είναι σε 1516 01:12:47,490 --> 01:12:48,740 αύξουσα σειρά. 1517 01:12:48,740 --> 01:12:52,150 1518 01:12:52,150 --> 01:12:56,540 >> Έτσι τώρα, θέλουμε να δηλώσει ποια είναι η struct πρόκειται να είναι για το 1519 01:12:56,540 --> 01:12:58,300 κόμβοι σε αυτό το δέντρο. 1520 01:12:58,300 --> 01:13:02,720 Έτσι, αυτό που χρειαζόμαστε σε ένα δυαδικό δέντρο; 1521 01:13:02,720 --> 01:13:05,830 Έτσι έχουμε μια τιμή του τύπου int, έτσι κάποια αξία int. 1522 01:13:05,830 --> 01:13:07,220 Δεν ξέρω αυτό που ονομάζεται αυτό στο διάλυμα - 1523 01:13:07,220 --> 01:13:08,500 int n. 1524 01:13:08,500 --> 01:13:13,570 Χρειαζόμαστε ένα δείκτη στο αριστερό παιδί και έναν δείκτη για το δικαίωμα του παιδιού. 1525 01:13:13,570 --> 01:13:17,540 Έτσι πρόκειται να μοιάζει με αυτό. 1526 01:13:17,540 --> 01:13:20,510 Και θα δούμε πραγματικά πριν όταν έκανε το διπλά-συνδεδεμένη 1527 01:13:20,510 --> 01:13:25,090 Λίστα πράγματα, έτσι ώστε προειδοποίηση - 1528 01:13:25,090 --> 01:13:27,860 Πάω να πρέπει να μετακινηθείτε σε όλη την δρόμο της επιστροφής προς τα κάτω για το πρόβλημα 11. 1529 01:13:27,860 --> 01:13:30,980 1530 01:13:30,980 --> 01:13:36,390 >> Έτσι παρατηρήσετε ότι φαίνεται το ίδιο με αυτό, εκτός από απλά τυχαίνει να καλέσετε αυτά 1531 01:13:36,390 --> 01:13:38,590 διαφορετικά ονόματα. 1532 01:13:38,590 --> 01:13:41,440 Έχουμε ακόμα έναν ακέραιο αξία και δίποντα. 1533 01:13:41,440 --> 01:13:44,850 Είναι απλά ότι αντί για τη θεραπεία της δείκτες, όπως δείχνουν προς το επόμενο πράγμα 1534 01:13:44,850 --> 01:13:47,955 και το προηγούμενο θέμα, προσπαθούμε να γιατρέψουμε οι δείκτες να δείχνουν ένα αριστερό παιδί 1535 01:13:47,955 --> 01:13:49,205 και το δικαίωμα του παιδιού. 1536 01:13:49,205 --> 01:13:57,372 1537 01:13:57,372 --> 01:13:57,860 OK. 1538 01:13:57,860 --> 01:13:59,650 Έτσι ώστε να είναι struct node μας. 1539 01:13:59,650 --> 01:14:03,920 Και τώρα, η μόνη λειτουργία που πρέπει να εφαρμόσουν για αυτό είναι εγκάρσια, η οποία 1540 01:14:03,920 --> 01:14:08,320 θέλουμε να πάμε πάνω από το δέντρο, εκτύπωση από τις τιμές του δέντρου με τη σειρά. 1541 01:14:08,320 --> 01:14:15,241 >> Έτσι, αναζητούν εδώ, θα θέλαμε να εκτυπώσετε έξω 20, 34, 36, 52, 59, και 106. 1542 01:14:15,241 --> 01:14:17,970 Πώς θα επιτευχθεί αυτό; 1543 01:14:17,970 --> 01:14:18,890 Έτσι είναι αρκετά παρόμοια. 1544 01:14:18,890 --> 01:14:22,910 Αν είδατε στο παρελθόν εξετάσεις το πρόβλημα ότι θέλετε να εκτυπώσετε 1545 01:14:22,910 --> 01:14:25,940 ολόκληρο το δέντρο με κόμματα ανάμεσα τα πάντα, ήταν στην πραγματικότητα ακόμα 1546 01:14:25,940 --> 01:14:27,320 ευκολότερο από αυτό. 1547 01:14:27,320 --> 01:14:30,950 Τόσο εδώ είναι η λύση. 1548 01:14:30,950 --> 01:14:33,110 Αυτό ήταν σημαντικά ευκολότερη αν το έκανε κατ 'επανάληψη. 1549 01:14:33,110 --> 01:14:36,650 Δεν ξέρω αν κάποιος επιχειρήσει να το κάνουμε επαναληπτικό. 1550 01:14:36,650 --> 01:14:38,340 >> Αλλά πρώτα, έχουμε τη βασική μας υπόθεση. 1551 01:14:38,340 --> 01:14:39,660 Τι θα συμβεί αν η ρίζα είναι άκυρη; 1552 01:14:39,660 --> 01:14:40,610 Στη συνέχεια, είμαστε ακριβώς πρόκειται να επιστρέψει. 1553 01:14:40,610 --> 01:14:42,300 Δεν θέλουμε να εκτυπώσετε τίποτα. 1554 01:14:42,300 --> 01:14:45,940 Αλλιώς θα πάμε να διασχίσει αναδρομικά προς τα κάτω. 1555 01:14:45,940 --> 01:14:48,140 Εκτυπώστε ολόκληρη την αριστερά υποδένδρο. 1556 01:14:48,140 --> 01:14:51,440 Έτσι, εκτυπώνουν τα πάντα, λιγότερο από την τρέχουσα αξία μου. 1557 01:14:51,440 --> 01:14:53,930 Και στη συνέχεια, Πάω να εκτυπώσετε τον εαυτό μου. 1558 01:14:53,930 --> 01:14:57,310 Και στη συνέχεια, Πάω να recurse κάτω μου ολόκληρο το δεξί υποδέντρο, έτσι ώστε τα πάντα 1559 01:14:57,310 --> 01:14:58,810 μεγαλύτερη από την αξία μου. 1560 01:14:58,810 --> 01:15:03,870 Και αυτό πρόκειται να εκτυπώσετε τα πάντα σε τάξη. 1561 01:15:03,870 --> 01:15:05,860 Ερωτήσεις σχετικά με το πώς αυτή η πραγματικότητα επιτυγχάνει αυτό; 1562 01:15:05,860 --> 01:15:09,892 1563 01:15:09,892 --> 01:15:12,545 >> ΚΟΙΝΟ: Έχω μια ερώτηση σχετικά με την [δεν ακούγεται]. 1564 01:15:12,545 --> 01:15:15,090 1565 01:15:15,090 --> 01:15:23,550 >> ROB BOWDEN: Έτσι, ένας τρόπος προσέγγισης του οποιαδήποτε αναδρομική πρόβλημα είναι να σκεφτούμε μόνο 1566 01:15:23,550 --> 01:15:26,275 γι 'αυτό ήθελα να πρέπει να σκεφτείτε για όλες τις περιπτώσεις γωνία. 1567 01:15:26,275 --> 01:15:32,150 1568 01:15:32,150 --> 01:15:38,110 Έτσι θεωρούν ότι θέλουμε να εκτυπωθεί ολόκληρο αυτό το δέντρο. 1569 01:15:38,110 --> 01:15:42,030 Έτσι, το μόνο που πρόκειται να επικεντρωθεί σε είναι αυτό το συγκεκριμένο κόμβο - 1570 01:15:42,030 --> 01:15:43,740 36. 1571 01:15:43,740 --> 01:15:47,420 Οι αναδρομικές κλήσεις, προσποιούμαστε εκείνους ακριβώς που εργάζονται. 1572 01:15:47,420 --> 01:15:54,000 Έτσι, εδώ, αυτή η αναδρομική κλήση για να εγκάρσιο, εμείς χωρίς καν να σκεφτόμαστε 1573 01:15:54,000 --> 01:15:58,640 γι 'αυτό, απλά διέρχονται από το αριστερό τρία, φανταστείτε ότι εκτυπώνει ήδη 20 1574 01:15:58,640 --> 01:16:00,730 και 34 για μας. 1575 01:16:00,730 --> 01:16:03,350 Και στη συνέχεια, όταν τελικά αναδρομικά καλέστε τραβέρσα για το 1576 01:16:03,350 --> 01:16:07,890 σωστά, ότι θα εκτυπώνεται σωστά 52, 59, 106 και για εμάς. 1577 01:16:07,890 --> 01:16:13,620 >> Έτσι δεδομένου ότι αυτό μπορεί να εκτυπώσει 20, 34, και ο άλλος μπορεί να εκτυπώσει 52, 59, 108, 1578 01:16:13,620 --> 01:16:17,180 όλοι πρέπει να είμαστε σε θέση να κάνετε είναι να εκτυπώσετε τον εαυτό μας στη μέση του αυτό. 1579 01:16:17,180 --> 01:16:21,250 Έτσι εκτυπώσετε τα πάντα μπροστά μας. 1580 01:16:21,250 --> 01:16:27,710 Εκτυπώστε τον εαυτό μας, έτσι ώστε η τρέχουσα εκτύπωση κόμβου 36, η τακτική printf, και στη συνέχεια 1581 01:16:27,710 --> 01:16:31,170 εκτυπώνουν τα πάντα, μετά από εμάς. 1582 01:16:31,170 --> 01:16:32,730 >> DAVID J. MALAN: Αυτό είναι όπου αναδρομή παίρνει πραγματικά όμορφο. 1583 01:16:32,730 --> 01:16:36,270 Είναι αυτό το εκπληκτικό άλμα της πίστης, όπου κάνετε το παραμικρό κομμάτι της εργασίας. 1584 01:16:36,270 --> 01:16:38,460 Και τότε θα αφήσει κάποιον άλλο να κάνει τα υπόλοιπα. 1585 01:16:38,460 --> 01:16:40,180 Και ότι κάποιος άλλος είναι, κατά ειρωνεία της τύχης, μπορείτε. 1586 01:16:40,180 --> 01:16:44,260 1587 01:16:44,260 --> 01:16:48,360 Έτσι, για σοβαρές brownie σημεία, αν πραγματοποιείτε κύλιση πάνω στις ερωτήσεις - 1588 01:16:48,360 --> 01:16:50,530 >> ROB BOWDEN: Στις ερωτήσεις; 1589 01:16:50,530 --> 01:16:53,490 >> DAVID J. MALAN: Και κάτω λίγο να οι αριθμοί, Ξέρει κανείς πού 1590 01:16:53,490 --> 01:16:55,190 οι αριθμοί αυτοί προέρχονται από; 1591 01:16:55,190 --> 01:16:56,610 >> ROB BOWDEN: Δεν έχω καμία ιδέα κυριολεκτικά. 1592 01:16:56,610 --> 01:16:59,794 >> DAVID J. MALAN: Φαίνονται σε όλο το κουίζ. 1593 01:16:59,794 --> 01:17:01,150 >> ΚΟΙΝΟ: Είναι οι ίδιοι αριθμοί; 1594 01:17:01,150 --> 01:17:01,910 >> DAVID J. MALAN: Αυτοί οι αριθμοί. 1595 01:17:01,910 --> 01:17:03,260 Ένα μικρό αυγό του Πάσχα. 1596 01:17:03,260 --> 01:17:08,100 Έτσι, για όσους από εσάς παρακολουθούν σε απευθείας σύνδεση στην σπίτι, αν μπορείτε να μας πείτε μέσω ηλεκτρονικού ταχυδρομείου στη 1597 01:17:08,100 --> 01:17:12,680 heads@CS50.net ποια είναι η σημασία από αυτά τα επαναλαμβανόμενα έξι αριθμούς είναι 1598 01:17:12,680 --> 01:17:18,560 όλη Quiz 1, θα σας ντους με καταπληκτική προσοχή στο τελικό 1599 01:17:18,560 --> 01:17:21,610 διάλεξη και μια μπάλα για το άγχος. 1600 01:17:21,610 --> 01:17:25,460 1601 01:17:25,460 --> 01:17:27,790 Νίκαια, λεπτή. 1602 01:17:27,790 --> 01:17:29,570 >> ROB BOWDEN: Οι τελευταίες ερωτήσεις για οτιδήποτε σχετικά με το κουίζ; 1603 01:17:29,570 --> 01:17:32,608